Está en la página 1de 204

UNIVERSIDAD POLITCNICA DE VALENCIA

ESCUELA UNIVERSITARIA DE INGENIERA TCNICA INDUSTRIAL


DE VALENCIA

PROYECTO:
VERIFICACIN DE CIRCUITOS ELECTRNICOS ASISTIDA
POR COMPUTADOR

2.- MANUAL DEL PROGRAMADOR

PROYECTO FIN DE CARRERA


REALIZADO POR : D. JULIO MARTNEZ JUAN
DIRIGIDO POR : D. EDUARDO GARCA BREIJ
ESPECIALIDAD : ELTRICA
SECCIN : ELECTRNICA
Valencia a 31 de Mayo de 1992

NDICE (MANUAL DEL PROGRAMADOR)

1.- INTRODUCCIN AL MANUAL DEL PROGRAMADOR . . . . . . . . . . . . . . . . .

1.- Unidades empleadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.- Archivos Include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.- Archivos ejecutables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.- El programa principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.- UNIDADES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1.- ERR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1.1.- DESCRIPCIN DE LA UNIDAD . . . . . . . . . . . . . . . . . . . . .

2.1.2.- DIRECTIVAS DE COMPILACIN . . . . . . . . . . . . . . . . . . . .

2.1.3.- OTRAS UNIDADES EMPLEADAS . . . . . . . . . . . . . . . . . . . .

2.1.4.- VARIABLES GLOBALES . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1.5.- VARIABLES LOCALES . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1.6.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2.- VISUAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

2.2.1.- DESCRIPCIN DE LA UNIDAD . . . . . . . . . . . . . . . . . . . .

21

2.2.2.- DIRECTIVAS DE COMPILACIN . . . . . . . . . . . . . . . . . . .

21

2.2.3.- OTRAS UNIDADES EMPLEADAS . . . . . . . . . . . . . . . . . . .

21

2.2.4.- VARIABLES GLOBALES . . . . . . . . . . . . . . . . . . . . . . . . . .

22

2.2.5.- VARIABLES LOCALES . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

2.2.6.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

3.- FICHEROS INCLUDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

76

3.1.- AYUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

76

3.1.1.- DESCRIPCIN DEL ARCHIVO . . . . . . . . . . . . . . . . . . . . .

76

3.1.2.- VARIABLES GLOBALES . . . . . . . . . . . . . . . . . . . . . . . . . .

76

3.1.3.- VARIABLES LOCALES . . . . . . . . . . . . . . . . . . . . . . . . . . .

77

3.1.4.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

77

3.2.- GEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

82

3.2.1.- DESCRIPCIN DEL ARCHIVO . . . . . . . . . . . . . . . . . . . . .

82

3.2.2.- VARIABLES GLOBALES . . . . . . . . . . . . . . . . . . . . . . . . . .

82

3.2.3.- VARIABLES LOCALES . . . . . . . . . . . . . . . . . . . . . . . . . . .

82

3.2.4.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

82

3.3.- EJECUTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

107

3.3.1.- DESCRIPCIN DEL ARCHIVO . . . . . . . . . . . . . . . . . . . .

107

3.3.2.- VARIABLES GLOBALES . . . . . . . . . . . . . . . . . . . . . . . . .

107

3.3.3.- VARIABLES LOCALES . . . . . . . . . . . . . . . . . . . . . . . . . .

107

3.3.4.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

107

4.- ARCHIVOS EJECUTABLES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

125

4.1.- ESPACIO1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

125

4.1.1.- DESCRIPCIN DEL PROGRAMA . . . . . . . . . . . . . . . . . .

125

4.1.2.- DIRECTIVAS DE COMPILACIN . . . . . . . . . . . . . . . . . .

126

4.1.3.- UNIDADES UTILIZADAS . . . . . . . . . . . . . . . . . . . . . . . .

126

4.1.4.- VARIABLES GLOBALES . . . . . . . . . . . . . . . . . . . . . . . . .

126

4.1.5.- VARIABLES LOCALES . . . . . . . . . . . . . . . . . . . . . . . . . .

128

II

4.1.6.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

128

4.2.- LOCALIZA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

139

4.2.1.- DESCRIPCIN DEL PROGRAMA . . . . . . . . . . . . . . . . . .

139

4.2.2.- DIRECTIVAS DE COMPILACIN . . . . . . . . . . . . . . . . . .

140

4.2.3.- UNIDADES UTILIZADAS . . . . . . . . . . . . . . . . . . . . . . . .

140

4.2.4.- VARIABLES GLOBALES . . . . . . . . . . . . . . . . . . . . . . . . .

140

4.2.5.- VARIABLES LOCALES . . . . . . . . . . . . . . . . . . . . . . . . . .

141

4.2.6.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

141

4.3.- INSTALA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

151

4.3.1.- DESCRIPCIN DEL PROGRAMA . . . . . . . . . . . . . . . . . .

151

4.3.2.- DIRECTIVAS DE COMPILACIN . . . . . . . . . . . . . . . . . .

151

4.3.3.- UNIDADES UTILIZADAS . . . . . . . . . . . . . . . . . . . . . . . .

152

4.3.4.- VARIABLES GLOBALES . . . . . . . . . . . . . . . . . . . . . . . . .

152

4.3.5.- VARIABLES LOCALES . . . . . . . . . . . . . . . . . . . . . . . . . .

153

4.3.6.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

153

4.- PROGRAMA PRINCIPAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

167

4.1.- DESCRIPCIN DEL PROGRAMA . . . . . . . . . . . . . . . . . . . . . . . . .

167

4.2.- DIRECTIVAS DE COMPILACIN . . . . . . . . . . . . . . . . . . . . . . . . .

167

4.3.- UNIDADES UTILIZADAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

167

4.4.- DIAGRAMAS DE BLOQUES DEL PROGRAMA PRINCIPAL . . . . .

167

4.5.- VARIABLES GLOBALES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

169

4.6.- VARIABLES LOCALES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

172

4.7.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

173

III

1.- INTRODUCCIN AL MANUAL DEL


PROGRAMADOR

El propsito de este manual del programador es dar a conocer al lector todos


los listados del programa realizado. Para ello se tratar de forma amena y concisa un repaso
de todas las Unidades, ficheros Include, ejecutables..., con el fin de que el usuario del
conjunto pueda modificar a su gusto algunos de los valores y parmetros de las funciones
expuestas.

1.- Unidades empleadas.

Se han empleado el conjunto de unidades de compilacin independiente, que


suministra Turbo Pascal 6.0, formado por :

Unidad CRT
Unidad DOS
Unidad GRAPH

Y se ha creado para facilitar la ejecucin, compilacin y comprensin del


programa, las unidades de compilacin independiente siguientes :

Unidad ERR
Unidad VISUAL

MANUAL DEL PROGRAMADOR: Introduccin

En todo programa (y/o Unidad) se habrn declarado las unidades utilizadas en


el mismo al comienzo, en la declaracin USES.

2.- Archivos Include.

Se declaran en el programa principal mediante la sentencia {$I <nombre de


fichero>} y constituyen un total de dos. El primero, que contiene el conjunto de
comprobacin y transformacin del formato del fichero .TXT de PSPICE (opcin fichero
PSP), y el segundo que contiene la aplicacin de asignacin de canales de la tarjeta de
adquisicin y verificacin del circuito a evaluar (opcin ejecutar). Son los siguientes :

Archivo Include GEN


Archivo Include EJECUTA

Adems podemos encontrar un archivo include ms que pertenece a la unidad


VISUAL y que incluye la opcin de ayuda en lnea.

Archivo Include AYUDA

3.- Archivos ejecutables.

Son los ficheros que se ejecutarn desde el entorno de sistema operativo. Son:

MANUAL DEL PROGRAMADOR: Introduccin

Ejecutable ESPACIO1
Ejecutable LOCALIZA

Adems del archivo de instalacin INSTALA.

4.- El programa principal.

Conjugar el conjunto de los archivos expuestos anteriormente, y se compilar


conteniendo todos ellos (menos los ejecutables, que realizar la oportuna llamada a ellos
cuando convenga). Es el archivo :

EVAL

2.- UNIDADES

Las dos unidades que trataremos en ste apartado sern ERR y VISUAL.

2.1.- ERR

2.1.1.- DESCRIPCIN DE LA UNIDAD.

La unidad aqu presentada contiene las llamadas de aplicacin al tratamiento


de tipo de error correspondiente a cualquier instruccin en tiempo de ejecucin. As mismo
contiene los procedimientos (y/o funciones) que utilizamos para hacer desaparecer y aparecer
el cursor (en modo texto), delimitar el tipo de adaptador (y modo de vdeo actual), dibujar
el doble recuadro, dibujar rayas horizontales, descargar el buffer de teclado, obtener la fecha
de sistema, y salvar la pantalla inicial antes de comenzar a ejecutar (as como cargarla al
terminar la ejecucin).

2.1.2.- DIRECTIVAS DE COMPILACIN.

No existe NINGUNA directiva de compilacin utilizada para esta unidad.

2.1.3.- OTRAS UNIDADES EMPLEADAS.

Las unidades que utiliza son las siguientes : CRT y DOS.

MANUAL DEL PROGRAMADOR: Unidades

2.1.4.- VARIABLES GLOBALES.

TYPE
TipoAdaptador = (Ninguno,MDA,CGA,EGAMono,EGAColor,VGAMono,
VGAColor,MCGAMono,MCGAColor);
VAR
X1
: INTEGER;
Y1
: INTEGER;
X2
: INTEGER;
Y2
: INTEGER;
PP
: INTEGER;
F
: INTEGER;
X1
X2
Y
C

:
:
:
:

ERROR
LARGA
PTRACUM

BYTE;
BYTE;
BYTE;
BYTE;

: INTEGER;
: STRING;
: POINTER;

2.1.5.- VARIABLES LOCALES.

Son las que se declaran y se utilizan en cada procedimiento y/o funcin. (Ver
listado).

2.1.6.- LISTADO.

UNIT ERR;

INTERFACE
TYPE

MANUAL DEL PROGRAMADOR: Unidades

TipoAdaptador = (Ninguno,MDA,CGA,EGAMono,EGAColor,VGAMono,
VGAColor,MCGAMono,MCGAColor);
PROCEDURE DIBUJARCUADRO(X1,Y1,X2,Y2,PP,F:INTEGER);
PROCEDURE RAYA_HORIZONTAL(X1,X2,Y,C:BYTE);
PROCEDURE ERROR(ERROR:INTEGER);
PROCEDURE DESCARGARTECLADO;
PROCEDURE CURSOROFF;
FUNCTION OBTENERTIPOADAP : TIPOADAPTADOR;
FUNCTION MODOVIDEOACTUAL : CHAR;
PROCEDURE CURSORON;
PROCEDURE OBTENERFECHA (VAR LARGA:STRING);
FUNCTION DETERMINARPUNTOS : INTEGER;
PROCEDURE SALVARPANTALLA(VAR PTRACUM : POINTER);
PROCEDURE CARGARPANTALLA(PTRACUM : POINTER);
IMPLEMENTATION
USES CRT,DOS;
(**********************************************************)
PROCEDURE DIBUJARCUADRO(X1,Y1,X2,Y2,PP,F:INTEGER);
VAR
MARCA:BYTE;
BEGIN
TEXTCOLOR(PP);
TEXTBACKGROUND(F);
FOR MARCA:=(X1+1) TO (X2-1) DO
BEGIN
GOTOXY(MARCA,Y1);
WRITE(#205);
GOTOXY(MARCA,Y2);
WRITE(#205);
END;
FOR MARCA:=(Y1+1) TO (Y2-1) DO
BEGIN
GOTOXY(X1,MARCA);
WRITE(#186);
GOTOXY(X2,MARCA);
WRITE(#186);
END;
GOTOXY(X1,Y1);
WRITE(#201);
GOTOXY(X2,Y1);
WRITE(#187);
GOTOXY(X1,Y2);
WRITE(#200);
GOTOXY(X2,Y2);
WRITE(#188);
END;
(**********************************************************)

MANUAL DEL PROGRAMADOR: Unidades

PROCEDURE RAYA_HORIZONTAL(X1,X2,Y,C:BYTE);
VAR
MARCA:BYTE;
BEGIN
TEXTCOLOR(C);
FOR MARCA:=(X1+1) TO (X2-1) DO
BEGIN
GOTOXY(MARCA,Y);
WRITE(#196)
END;
TEXTCOLOR(WHITE)
END;
(**********************************************************)
PROCEDURE ERROR(ERROR:INTEGER);
BEGIN
BEGIN
(*--------------------ERRORES DEL DOS-------------------*)
IF ERROR<32700 THEN
BEGIN
CASE ERROR OF
1:
BEGIN
DIBUJARCUADRO(24,14,52,16,YELLOW,RED);
GOTOXY(25,15);
WRITELN(NUMERO DE FUNCION NO VALIDO)
END;
2:
BEGIN
DIBUJARCUADRO(27,14,49,16,YELLOW,RED);
GOTOXY(28,15);
WRITELN(ARCHIVO NO ENCONTRADO)
END;
3:
BEGIN
DIBUJARCUADRO(25,14,54,16,YELLOW,RED);
GOTOXY(26,15);
WRITELN(ENCAMINAMIENTO NO ENCONTRADO)
END;
4:
BEGIN
DIBUJARCUADRO(25,14,54,16,YELLOW,RED);
GOTOXY(26,15);
WRITELN(DEMASIADOS ARCHIVOS ABIERTOS)
END;
5:
BEGIN
DIBUJARCUADRO(27,14,53,16,YELLOW,RED);
GOTOXY(28,15);
WRITELN(ACCESO A ARCHIVO DENEGADO)
END;
6:

MANUAL DEL PROGRAMADOR: Unidades

BEGIN
DIBUJARCUADRO(23,14,56,16,YELLOW,RED);
GOTOXY(24,15);
WRITELN(DESCRIPTOR DE FICHEROS NO VALIDO)
END;
7:
BEGIN
DIBUJARCUADRO(20,14,61,16,YELLOW,RED);
GOTOXY(21,15);
WRITELN(BLOQUES DE CONTROL DE MEMORIA DESTRUIDOS)
END;
8:
BEGIN
DIBUJARCUADRO(29,14,50,16,YELLOW,RED);
GOTOXY(30,15);
WRITELN(MEMORIA INSUFICIENTE)
END;
9:
BEGIN
DIBUJARCUADRO(19,14,60,16,YELLOW,RED);
GOTOXY(20,15);
WRITELN(DIRECCION DE BLOQUE DE MEMORIA NO VALIDA)
END;
10:
BEGIN
DIBUJARCUADRO(27,14,53,16,YELLOW,RED);
GOTOXY(28,15);
WRITELN(ENTORNO DEL DOS NO VALIDO)
END;
11:
BEGIN
DIBUJARCUADRO(31,14,49,16,YELLOW,RED);
GOTOXY(32,15);
WRITELN(FORMATO NO VALIDO)
END;
12:
BEGIN
DIBUJARCUADRO(21,14,58,16,YELLOW,RED);
GOTOXY(22,15);
WRITELN(CODIGO DE ACCESO AL ARCHIVO INVALIDO)
END;
13:
BEGIN
DIBUJARCUADRO(31,14,48,16,YELLOW,RED);
GOTOXY(32,15);
WRITELN(DATOS NO VALIDOS)
END;
15:
BEGIN
DIBUJARCUADRO(22,14,57,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(NUMERO DE UNIDAD DE DISCO INVALIDO)
END;
16:
BEGIN

MANUAL DEL PROGRAMADOR: Unidades

DIBUJARCUADRO(20,14,60,16,YELLOW,RED);
GOTOXY(21,15);
WRITELN(IMPOSIBLE ELIMINAR EL DIRECTORIO ACTUAL)
END;
17:
BEGIN
DIBUJARCUADRO(16,14,61,16,YELLOW,RED);
GOTOXY(17,15);
WRITELN(NO SE PUEDE RENOMBRAR ENTRE UNIDADES DISTINTAS)
END;
18:
BEGIN
DIBUJARCUADRO(23,14,46,16,YELLOW,RED);
GOTOXY(24,15);
WRITELN(NO QUEDAN MAS FICHEROS)
END;
(*-----------------ERRORES DE E/S-------------------*)
100:
BEGIN
DIBUJARCUADRO(27,14,53,16,YELLOW,RED);
GOTOXY(28,15);
WRITELN(ERROR DE LECTURA EN DISCO)
END;
101:
BEGIN
DIBUJARCUADRO(26,14,54,16,YELLOW,RED);
GOTOXY(27,15);
WRITELN(ERROR DE ESCRITURA EN DISCO)
END;
102:
BEGIN
DIBUJARCUADRO(30,14,50,16,YELLOW,RED);
GOTOXY(31,15);
WRITELN(ARCHIVO NO ASIGNADO)
END;
103:
BEGIN
DIBUJARCUADRO(25,14,55,16,YELLOW,RED);
GOTOXY(26,15);
WRITELN(EL ARCHIVO NO HA SIDO ABIERTO)
END;
104:
BEGIN
DIBUJARCUADRO(24,14,56,16,YELLOW,RED);
GOTOXY(25,15);
WRITELN(ARCHIVO NO ABIERTO PARA LECTURA)
END;
105:
BEGIN
DIBUJARCUADRO(23,14,57,16,YELLOW,RED);
GOTOXY(24,15);
WRITELN(ARCHIVO NO ABIERTO PARA ESCRITURA)
END;
106:
BEGIN

MANUAL DEL PROGRAMADOR: Unidades

DIBUJARCUADRO(27,14,53,16,YELLOW,RED);
GOTOXY(28,15);
WRITELN(FORMATO NUMERICO INVALIDO)
END;
(*----------------ERRORES CRITICOS----------------*)
150:
BEGIN
DIBUJARCUADRO(23,14,56,16,YELLOW,RED);
GOTOXY(24,15);
WRITELN(DISCO PROTEGIDO CONTRA ESCRITURA)
END;
151:
BEGIN
DIBUJARCUADRO(30,14,49,16,YELLOW,RED);
GOTOXY(31,15);
WRITELN(UNIDAD DESCONOCIDA)
END;
152:
BEGIN
DIBUJARCUADRO(30,14,50,16,YELLOW,RED);
GOTOXY(31,15);
WRITELN(UNIDAD NO PREPARADA)
END;
153:
BEGIN
DIBUJARCUADRO(31,14,49,16,YELLOW,RED);
GOTOXY(32,15);
WRITELN(ORDEN DESCONOCIDA)
END;
154:
BEGIN
DIBUJARCUADRO(15,14,64,16,YELLOW,RED);
GOTOXY(16,15);
WRITELN(ERROR EN CRC (Comprobacin Cclica) DE LOS DATOS)
END;
155:
BEGIN
DIBUJARCUADRO(19,14,61,16,YELLOW,RED);
GOTOXY(20,15);
WRITELN(LONGITUD DE PETICION DE UNIDAD INCORRECTA)
END;
156:
BEGIN
DIBUJARCUADRO(25,14,55,16,YELLOW,RED);
GOTOXY(26,15);
WRITELN(ERROR DE BUSQUEDA EN EL DISCO);
WRITELN(^g)
END;
157:
BEGIN
DIBUJARCUADRO(26,14,53,16,YELLOW,RED);
GOTOXY(27,15);
WRITELN(TIPO DEL MEDIO DESCONOCIDO)
END;
158:

10

MANUAL DEL PROGRAMADOR: Unidades

BEGIN
DIBUJARCUADRO(29,14,50,16,YELLOW,RED);
GOTOXY(30,15);
WRITELN(SECTOR NO ENCONTRADO)
END;
159:
BEGIN
DIBUJARCUADRO(30,14,50,16,YELLOW,RED);
GOTOXY(31,15);
WRITELN(IMPRESORA SIN PAPEL)
END;
160:
BEGIN
DIBUJARCUADRO(21,14,58,16,YELLOW,RED);
GOTOXY(22,15);
WRITELN(FALLO DE ESCRITURA EN EL DISPOSITIVO)
END;
161:
BEGIN
DIBUJARCUADRO(22,14,57,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(FALLO DE LECTURA EN EL DISPOSITIVO)
END;
162:
BEGIN
DIBUJARCUADRO(31,14,49,16,YELLOW,RED);
GOTOXY(32,15);
WRITELN(FALLO EN HARDWARE)
END;
(*---------------ERRORES FATALES---------------*)
200:
BEGIN
DIBUJARCUADRO(31,14,49,16,YELLOW,RED);
GOTOXY(32,15);
WRITELN(DIVISION POR CERO)
END;
201:
BEGIN
DIBUJARCUADRO(24,14,55,16,YELLOW,RED);
GOTOXY(25,15);
WRITELN(ERROR DE COMPROBACION DE RANGO)
END;
202:
BEGIN
DIBUJARCUADRO(22,14,57,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(ERROR DE DESBORDAMIENTO DE LA PILA)
END;
203:
BEGIN
DIBUJARCUADRO(22,14,57,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(ERROR DE DESBORDAMIENTO DEL MONTON)
END;
204:

11

MANUAL DEL PROGRAMADOR: Unidades

BEGIN
DIBUJARCUADRO(24,14,56,16,YELLOW,RED);
GOTOXY(25,15);
WRITELN(OPERACION DE PUNTEROS INVALIDOS)
END;
205:
BEGIN
DIBUJARCUADRO(17,14,62,16,YELLOW,RED);
GOTOXY(18,15);
WRITELN(DESBORDAMIENTO EN OPERACION DE COMA FLOTANTE)
END;
206:
BEGIN
DIBUJARCUADRO(13,14,67,16,YELLOW,RED);
GOTOXY(14,15);
WRITELN(DESBORDAMIENTO INFERIOR EN OPERACION DE COMA FLOTANTE)
END;
207:
BEGIN
DIBUJARCUADRO(22,14,58,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(OPERACION DE COMA FLOTANTE INVALIDA)
END;
208:
BEGIN
DIBUJARCUADRO(22,14,58,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(GESTOR DE SOLAPAMIENTO NO INSTALADO)
END;
209:
BEGIN
DIBUJARCUADRO(18,14,62,16,YELLOW,RED);
GOTOXY(19,15);
WRITELN(ERROR DE LECTURA EN ARCHIVO DE SOLAPAMIENTO)
END;
210:
BEGIN
DIBUJARCUADRO(28,14,51,16,YELLOW,RED);
GOTOXY(29,15);
WRITELN(OBJETO NO INICIALIZADO)
END;
211:
BEGIN
DIBUJARCUADRO(25,14,55,16,YELLOW,RED);
GOTOXY(26,15);
WRITELN(LLAMADA A UN METODO ABSTRACTO)
END;
212:
BEGIN
DIBUJARCUADRO(26,14,53,16,YELLOW,RED);
GOTOXY(27,15);
WRITELN(ERROR DE REGISTRO EN FLUJO)
END;
213:
BEGIN

12

MANUAL DEL PROGRAMADOR: Unidades

DIBUJARCUADRO(22,14,57,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(INDICE DE COLECCION FUERA DE RANGO)
END;
214:
BEGIN
DIBUJARCUADRO(20,14,60,16,YELLOW,RED);
GOTOXY(21,15);
WRITELN(ERROR DE DESBORDAMIENTO EN LA COLECCION)
END
END;
WRITELN(^g);
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE)
END
(*------------RESTO DE ERRORES FATALES Y GENERALES--------*)
{errores escogidos por nosotros}
ELSE
BEGIN
CASE ERROR OF
32758:
BEGIN
DIBUJARCUADRO(17,11,59,14,YELLOW,RED);
GOTOXY(18,12);
WRITELN( NO HA SIDO ASIGNADO NIGUN CANAL DE LA );
GOTOXY(18,13);
WRITELN( PCLAB A NINGUN NUDO DEL CIRCUITO
)
END;
32759:
BEGIN
DIBUJARCUADRO(18,14,60,17,YELLOW,RED);
GOTOXY(19,15);
WRITELN( ATENCION: NO LLEGAN DATOS POR EL PUERTO );
GOTOXY(19,16);
WRITELN(
POSIBLEMENTE PCLAB NO CONECTADA
)
END;
32760:
BEGIN
DIBUJARCUADRO(21,9,59,14,YELLOW,RED);
GOTOXY(22,10);
WRITELN( OPCION NO ENCONTRADA, SITUESE EN );
GOTOXY(22,11);
WRITELN( DIRECTORIO DONDE SE ENCUENTRE EL );
GOTOXY(22,12);
WRITELN( ARCHIVO "LOCALIZA.EXE", Y VUELVA A );
GOTOXY(22,13);
WRITELN( EJECUTAR. UTILICE OPCION CH. DIRECT )
END;
32761:
BEGIN
DIBUJARCUADRO(21,9,59,14,YELLOW,RED);

13

MANUAL DEL PROGRAMADOR: Unidades

GOTOXY(22,10);
WRITELN( OPCION NO ENCONTRADA, SITUESE EN );
GOTOXY(22,11);
WRITELN( DIRECTORIO DONDE SE ENCUENTRE EL );
GOTOXY(22,12);
WRITELN( ARCHIVO "ESPACIO1.EXE", Y VUELVA A );
GOTOXY(22,13);
WRITELN( EJECUTAR. UTILICE OPCION CH. DIRECT )
END;
32762:
BEGIN
DIBUJARCUADRO(21,14,59,17,YELLOW,RED);
GOTOXY(22,15);
WRITELN( FICHERO DE ENTRADA NO CORRECTO POR );
GOTOXY(22,16);
WRITELN( DEFECTO O EXCESO EN SU LONGITUD )
END;
32763:
BEGIN
GOTOXY(6,14);
WRITELN(EL FICHERO PSPICE CARECE DE LA MARCA DE FIN DE DATOS: ";");
GOTOXY(6,15);
WRITELN(AADESELA PARA PODER EFECTUAR LA EVALUACION)
END;
32764:
BEGIN
GOTOXY(6,14);
WRITELN(EL FICHERO PSPICE CONTIENE EN EL APARTADO TITLE O SUBTITLE );
GOTOXY(6,15);
WRITELN(EL CARACTER ESPECIFICO DEL PROGRAMA : "#" , CAMBIELO CON );
GOTOXY(6,16);
WRITELN(UN PROCESADOR ANTES DE VOLVER A EJECUTARLO)
END;
32765:
BEGIN
GOTOXY(6,14);
WRITELN(EL TITULO DEL FICHERO CONTIENE UN CARACTER ESPECIFICO DEL
PROGRAMA,);
GOTOXY(6,15);
WRITELN(USE RENAME DEL DOS ANTES DE REPETIR LA EJECUCION CON EL MISMO.)
END;
32766:
BEGIN
GOTOXY(6,14);
WRITELN(EL FICHERO HA SIDO DAADO O PERDIDO Y NO MANTIENE EL FORMATO
ADECUADO);
GOTOXY(6,15);
WRITELN(PARA SER UTILIZADO. INVESTIGUESE ANTES DE EJECUTARSE DE NUEVO.)
END;

14

MANUAL DEL PROGRAMADOR: Unidades

32767:
BEGIN
DIBUJARCUADRO(22,14,57,17,YELLOW,RED);
GOTOXY(23,15);
WRITELN( EL PROGRAMA SOLO ADMITE FICHEROS );
GOTOXY(23,16);
WRITELN(
CON LA EXTENSION .TXT
);
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE)
END
ELSE
BEGIN
DIBUJARCUADRO(33,14,47,16,YELLOW,RED);
GOTOXY(34,15);
WRITELN(ERROR GENERAL);
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE)
END
END;
IF ERROR<>32758 THEN WRITELN(^g)
END
END
END;
(**********************************************************)
PROCEDURE DESCARGARTECLADO;
VAR
REGS : REGISTERS; { Utiliza la unidad DOS }
BEGIN
REGS.AH := $01;
{ AH=1: Comprueba tecla pulsada }
INTR($16,REGS);
{ Interrupcin $16: servicios de teclado }
IF (REGS.FLAGS AND $0040) = 0 THEN { Si hay caracteres en el buffer }
REPEAT
REGS.AH := 0;
{ Carcter listo; ir a leerlo... }
INTR($16,REGS);
{ ...utilizando AH = 0: Leer carcter }
REGS.AH := $01;
{ Comprobar otra tecla pulsada... }
INTR($16,Regs);
{ ...usando AH = 1 }
UNTIL (REGS.FLAGS AND $0040) <> 0;
END;
(**********************************************************)
PROCEDURE CURSOROFF;
VAR
REGS : Registers;
BEGIN
WITH REGS DO

15

MANUAL DEL PROGRAMADOR: Unidades

BEGIN
AX := $0100;
CX := $2000; { Pone a 1 el bit 5 de CH para suprimir el cursor }
END;
INTR(16,REGS);
END;
(**********************************************************)
FUNCTION OBTENERTIPOADAP : TIPOADAPTADOR;
VAR
REGS : REGISTERS;
CODIGO : BYTE;
BEGIN
REGS.AH := $1A; { Intenta identificar un adaptador VGA }
REGS.AL := $00; { Es preciso hacer AL igual a 0 }
INTR($10,Regs);
IF REGS.AL = $1A THEN { ...si obtenemos $1A en AL... }
BEGIN
{ ...sabemos que tenemos un PS/2 video BIOS. }
CASE REGS.BL OF { Cdigo se obtiene en BL }
$00 : OBTENERTIPOADAP := Ninguno;
$01 : OBTENERTIPOADAP := MDA;
$02 : OBTENERTIPOADAP := CGA;
$04 : OBTENERTIPOADAP := EGAColor;
$05 : OBTENERTIPOADAP := EGAMono;
$07 : OBTENERTIPOADAP := VGAMono;
$08 : OBTENERTIPOADAP := VGAColor;
$0A,$0C : OBTENERTIPOADAP := MCGAColor;
$0B : OBTENERTIPOADAP := MCGAMono;
ELSE OBTENERTIPOADAP := CGA
END { CASE }
END
ELSE
{ A continuacin comprobamos la presencia de un EGA BIOS: }
BEGIN
REGS.AH := $12;
{ Seleccionar funcin de servicio alterna }
REGS.BX := $10;
{ BL=$10 significa devolver informacin EGA }
INTR($10,Regs);
{ Llamada a BIOS VIDEO }
IF REGS.BX <> $10 THEN { BX sin cambios significa NO EGA }
BEGIN
REGS.AH := $12; { Una vez sabemos que la f. alterna existe... }
REGS.BL := $10; { ...la llamamos de nuevo para distinguir... }
INTR($10,Regs); { ...EGA color o EGA monocroma. }
IF (REGS.BH = 0) THEN ObtenerTipoAdap := EGAColor
ELSE OBTENERTIPOADAP := EGAMono
END
ELSE { Ahora sabemos que tenemos una EGA o MDA: }
BEGIN
INTR($11,Regs); { Servicio de determ. equipo }
CODIGO := (Regs.AL AND $30) SHR 4;
CASE CODIGO OF
1 : OBTENERTIPOADAP := CGA;
2 : OBTENERTIPOADAP := CGA;

16

MANUAL DEL PROGRAMADOR: Unidades

3 : OBTENERTIPOADAP := MDA
ELSE OBTENERTIPOADAP := CGA
END { Case }
END
END;
END;
(**********************************************************)
FUNCTION MODOVIDEOACTUAL : CHAR;
VAR
REGS : REGISTERS;
BEGIN
FILLCHAR(REGS,SIZEOF(REGS),0);
REGS.AH:=$0F;
INTR($10,REGS);
CASE REGS.AL OF
1..6 : MODOVIDEOACTUAL := C; {CGA}
7
: MODOVIDEOACTUAL := M; {monocromo}
8..10 : MODOVIDEOACTUAL := P; {PCjr}
13..16 : MODOVIDEOACTUAL := E {EGA}
END
END;
(*********************************************************)
PROCEDURE CURSORON;
VAR
REGS : REGISTERS;
I : INTEGER;
BEGIN
IF MODOVIDEOACTUAL = M THEN I:=6
ELSE I:=0;
REGS.AH:=$01;
{ahora hacemos el cursor pequeo}
REGS.CH:=$6+I;
REGS.CL:=$7+I;
INTR($10,REGS)
END;
(**********************************************************)
PROCEDURE OBTENERFECHA (VAR LARGA:STRING);
VAR
REGS:REGISTERS;
CAD1,CAD2,CAD3,CAD4:STRING[10];

17

MANUAL DEL PROGRAMADOR: Unidades

BEGIN
FILLCHAR(REGS,SIZEOF(REGS),0);
REGS.AH:=$2A;
MSDOS(REGS);
WITH REGS DO
BEGIN
CASE AL OF
0 : CAD1:=DOMINGO;
1 : CAD1:=LUNES;
2 : CAD1:=MARTES;
3 : CAD1:=MIERCOLES;
4 : CAD1:=JUEVES;
5 : CAD1:=VIERNES;
6 : CAD1:=SABADO
END;
STR(CX, CAD2); {ao}
STR(DH, CAD3); {mes}
STR(DL, CAD4) {da}
END;
IF LENGTH(CAD3)=1 THEN CAD3:=0+CAD3;
IF LENGTH(CAD4)=1 THEN CAD4:=0+CAD4;
LARGA:=CAD1+ +CAD4+-+CAD3+-+CAD2
END;
(**********************************************************)
FUNCTION DETERMINARPUNTOS : INTEGER;
VAR
REGS : REGISTERS;
BEGIN
CASE OBTENERTIPOADAP OF
CGA
: DETERMINARPUNTOS := 8;
MDA
: DETERMINARPUNTOS := 14;
EGAMono,
{ Estos adaptadorse pueden utilizar cualquiera }
EGAColor,
{ de las diferentes alturas posibles para el tipo, }
VGAMono,
{ por tanto, es necesario preguntar al BIOS }
VGAColor,
{ para saber cul se est utilizando }
MCGAMono,
MCGAColor : BEGIN
WITH REGS DO
BEGIN
AH := $11; { Llamada informacin EGA/VGA }
AL := $30;
BL := 0;
END;
INTR($10,Regs);
DETERMINARPUNTOS := Regs.CX
END
END { CASE }
END;
(**********************************************************)

18

MANUAL DEL PROGRAMADOR: Unidades

PROCEDURE CARGARPANTALLA(PTRACUM : POINTER);


TYPE
PTRVID = ^SALVAVID;
SALVAVID = RECORD
BASE,TAM : WORd;
COMBUFFER : BYTE
END;
VAR
VECTORVID : PTRVID;
BUFFERVID : POINTER;
TAMDAT : WORD;
BEGIN
VECTORVID := PTRACUM; { Solapa puntero genrico con puntero SalvaVid }
TAMDAT := VECTORVID^.TAM;
{ Crea un puntero a la base del buffer de vdeo: }
BUFFERVID := PTR(VECTORVID^.BASE,0);
{ Copia la parte de buffer de los datos del heap en el buffer de vdeo: }
MOVE(VECTORVID^.COMBUFFER,BUFFERVID^,VECTORVID^.TAM);
FREEMEM(PTRACUM,TAMDAT + 4)
END;
(**********************************************************)
PROCEDURE SALVARPANTALLA(VAR PTRACUM : POINTER);
TYPE
PTRVID = ^SALVAVID;
SALVAVID = RECORD
BASE,TAM : WORD;
COMBUFFER : BYTE
END;
VAR
BUFFERVID : POINTER;
ADAPT
: TIPOADAPTADOR;
BUFFERACUM : SALVAVID;
VECTORVID : PTRVID;
BEGIN
ADAPT := OBTENERTIPOADAP;
WITH BUFFERACUM DO
BEGIN
CASE ADAPT OF
MDA,EGAMono,VGAMono,MCGAMono : BASE := $B000;
ELSE BASE := $B800
END; { CASE }
CASE DETERMINARPUNTOS OF
8 : CASE ADAPT OF
CGA
: TAM := 4000; { 25-lneas }
EGAMono,EGAColor : TAM := 6880; { 43-lneas }
ELSE
TAM := 8000; { 50-lneas }
END; { CASE }

19

MANUAL DEL PROGRAMADOR: Unidades

14 : CASE ADAPT OF
EGAMono,EGAColor : TAM := 4000; { 25-lneas }
ELSE
TAM := 4320; { 27-lneas }
END; { CASE }
16 : TAM := 4000
END; { CASE }
BUFFERVID := PTR(BASE,0)
END;
GETMEM(PTRACUM,BUFFERACUM.TAM+4); { Asigna un espacio en el heap }
{ Aqu almacenamos solamente el registro SalvaVid en el heap: }
MOVE(BUFFERACUM,PTRACUM^,SIZEOF(BUFFERACUM));
{ Solapamos PtrAcum, un puntero genrico, a un puntero de tipo SalvaVid: }
VECTORVID := PTRACUM;
{ Almacenamos ahora todo el buffer de vdeo en el heap. Los datos son }
{ escritos comenzando por el byte ComBuffer del registro SalvaVid, }
{ hasta completar los Tam bytes del buffer completo. }
MOVE(BUFFERVID^,VECTORVID^.COMBUFFER,BUFFERACUM.TAM)
END;
(**********************************************************)
END.

20

MANUAL DEL PROGRAMADOR: Unidades

2.2.- VISUAL

2.2.1.- DESCRIPCIN DE LA UNIDAD.

La unidad de compilacin independiente que aqu se propone se encarga de


realizar de forma autnoma la opcin de visualizacin de formas de onda. La manera con que
realiza este trabajo es simple; se trata de un procedimiento principal (situado por jerarqua de
llamadas al final del programa) que llama segn necesite, a los dems procedimientos de su
propia unidad, configurando el conjunto de visualizacin de ondas.

Este procedimiento principal, que caracteriza la unidad, dibuja la pantalla de


presentacin y se encarga de elegir y dirigir su ejecucin hacia los diferentes procedimientos
de submens que seleccionan las utilidades del mismo.

2.2.2.- DIRECTIVAS DE COMPILACIN.

No existen NINGUNA directiva de compilacin general, pero se utiliza de


forma eficiente la directiva de eliminacin del cdigo de error de las instrucciones que
convienen : {$I-} y {$I+} para desactivar y activar dicho cdigo.

2.2.3.- OTRAS UNIDADES EMPLEADAS.

Las unidades que utiliza en su ejecucin son las siguientes : CRT, DOS,

21

MANUAL DEL PROGRAMADOR: Unidades

GRAPH, ERR.

2.2.4.- VARIABLES GLOBALES.

SS
: REAL;
RR
: REAL;
SS1
: REAL;
SS2
: REAL;
RR1
: REAL;
RR2
: REAL;
ESCALA
: REAL;
CAN1
: INTEGER;
CAN2
: INTEGER;
CANAL
: INTEGER;
DISC
: INTEGER;
TYPE
MATRIZ = ARRAY[ 0..5000] OF INTEGER;
CONST
BASE
= $200;
DATOADL
= BASE+4;
DATOADH
= BASE+5;
CANALMUX
= BASE+10;
REGCONTROL
= BASE+11;
REGDISPARO
= BASE+12;
MAX_NUM_DATOS
= 5000;
REALXMAX
= 639;
REALYMAX
= 349;
EJECUTARGRAFICOS : BOOLEAN = TRUE;
PCLAB
: BOOLEAN = TRUE;
MAS
: CHAR = #251;

VAR
FICHA
FICHA2
TIRA
TIRO
LAFECHA
MASCARA
FILENAME
VMUESTRAS

: FILE OF MATRIZ;
: FILE OF MATRIZ;
: STRING[11];
: STRING[11];
: STRING;
: STRING;
: STRING[255];
: MATRIZ;
22

MANUAL DEL PROGRAMADOR: Unidades

BORRAR
VMUESTRAS1
BORRAR1
VMUESTRAS2
BORRAR2
REFRESCO
RECTA2
BCUR2
CUR2
DEF
NUMDATOS
CAN1
CAN2
CANAL
D
D1
D2
E
INCREMENTO
HASTA
RECTA
BCUR
CUR
OP
OP1
OP2
OP3
OP4
OP5
OP6
OP7
ONDAS
A
B
C
X
N
NN
NNNN
NNN
J
WW
YY
XX
XXX
XXX1

: ARRAY[0..499] OF INTEGER;
: MATRIZ;
: ARRAY[0..499] OF INTEGER;
: MATRIZ;
: ARRAY[0..499] OF INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
23

MANUAL DEL PROGRAMADOR: Unidades

XXX2
YYY
WWA
WWB
VVA
VVB
DRIVER
MODO
W
Y
Z
M
TT
VV
TT2
VV2
ERROROSC
DISC
INICIAL
AMARILLA
PO
TIEMPO
ESCALA
ESCALA1
ESCALA2
MEDIDA
SS
RR
SS1
RR1
RR2
SS2
DD
I
FRE
FIN_CONVERSION
DATO_BAJO
DATO_ALTO
LONGITUDDEDISCO

:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
: CHAR;
: CHAR;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: WORD;
: WORD;
: BYTE;
: BYTE;
: BYTE;
: LONGINT;

2.2.5.- VARIABLES LOCALES.

24

MANUAL DEL PROGRAMADOR: Unidades

Son las que se corresponden en su utilizacin a las que aparecen definidas en


los propios procedimientos y/o funciones. (Ver listado general de la unidad).

2.2.6.- LISTADO.

UNIT VISUAL6;
INTERFACE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE

VISUALIZACION_DE_ONDAS;
REJILLA;
SELE1;
SELE2;
CANALES;
CANAL1;
CANAL2;
VOLTIOS;
DIBUJAR;
PROGRAMA (SS,RR:REAL;CANAL:INTEGER);
AMBOS (SS1,SS2,RR1,RR2:REAL;CAN1,CAN2:INTEGER);
HORIZONTALES(ESCALA:REAL);
VERTICALES;
CURSOR;
PRINTSCREEN;
DISCO(DISC:INTEGER);
SALVAR;
CARGAR;
MIRARPCLAB;
VISUALIZAR;
TIME;
IMPLEMENTATION

USES CRT,DOS,GRAPH,ERR;
TYPE
MATRIZ = ARRAY[0..5000] OF INTEGER;
CONST
BASE
= $200;
DATOADL
= BASE+4;
DATOADH
= BASE+5;
CANALMUX
= BASE+10;
REGCONTROL
= BASE+11;
REGDISPARO
= BASE+12;
MAX_NUM_DATOS = 5000;
REALXMAX
= 639;
REALYMAX
= 349;
EJECUTARGRAFICOS : BOOLEAN = TRUE;

25

MANUAL DEL PROGRAMADOR: Unidades

PCLAB
MAS

: BOOLEAN = TRUE;
: CHAR = #251;

VAR
FICHA
: FILE OF MATRIZ;
FICHA2
: FILE OF MATRIZ;
TIRA
: STRING[11];
TIRO
: STRING[11];
LAFECHA
: STRING;
MASCARA
: STRING;
FILENAME
: STRING[255];
VMUESTRAS
: MATRIZ;
BORRAR
: ARRAY[0..499] OF INTEGER;
VMUESTRAS1
: MATRIZ;
BORRAR1
: ARRAY[0..499] OF INTEGER;
VMUESTRAS2
: MATRIZ;
BORRAR2
: ARRAY[0..499] OF INTEGER;
REFRESCO
: INTEGER;
RECTA2
: INTEGER;
BCUR2
: INTEGER;
CUR2
: INTEGER;
DEF
: INTEGER;
numdatos
: INTEGER;
CAN1
: INTEGER;
CAN2
: INTEGER;
CANAL
: INTEGER;
D
: INTEGER;
D1
: INTEGER;
D2
: INTEGER;
E
: INTEGER;
INCREMENTO
: INTEGER;
HASTA
: INTEGER;
RECTA
: INTEGER;
BCUR
: INTEGER;
CUR
: INTEGER;
OP
: INTEGER;
OP1
: INTEGER;
OP2
: INTEGER;
OP3
: INTEGER;
OP4
: INTEGER;
OP5
: INTEGER;
OP6
: INTEGER;
OP7
: INTEGER;
ONDAS
: INTEGER;
A
: INTEGER;
B
: INTEGER;
C
: INTEGER;
X
: INTEGER;
N
: INTEGER;
NN
: INTEGER;
NNNN
: INTEGER;
NNN
: INTEGER;
J
: INTEGER;
WW
: INTEGER;

26

MANUAL DEL PROGRAMADOR: Unidades

YY
: INTEGER;
XX
: INTEGER;
XXX
: INTEGER;
XXX1
: INTEGER;
XXX2
: INTEGER;
YYY
: INTEGER;
WWA
: INTEGER;
WWB
: INTEGER;
VVA
: INTEGER;
VVB
: INTEGER;
DRIVER
: INTEGER;
MODO
: INTEGER;
W
: INTEGER;
Y
: INTEGER;
Z
: INTEGER;
M
: INTEGER;
TT
: INTEGER;
VV
: INTEGER;
TT2
: INTEGER;
VV2
: INTEGER;
ERROROSC
: INTEGER;
DISC
: INTEGER;
INICIAL
: INTEGER;
AMARILLA
: CHAR;
PO
: CHAR;
TIEMPO
: REAL;
ESCALA
: REAL;
ESCALA1
: REAL;
ESCALA2
: REAL;
MEDIDA
: REAL;
SS
: REAL;
RR
: REAL;
SS1
: REAL;
RR1
: REAL;
RR2
: REAL;
SS2
: REAL;
DD
: REAL;
I
: WORD;
FRE
: WORD;
FIN_CONVERSION : BYTE;
DATO_BAJO
: BYTE;
DATO_ALTO
: BYTE;
LONGITUDDEDISCO : LONGINT;
(**********************************************************)
{$I AYUDA.PAS}
(**********************************************************)
PROCEDURE REJILLA;
BEGIN
SETCOLOR(LIGHTRED);

27

MANUAL DEL PROGRAMADOR: Unidades

FOR M:=0 TO 8 DO
BEGIN
Y:=15;
Z:=M*40;
LINE(70,Y+Z,570,Y+Z)
END;
FOR M:=0 TO 10 DO
BEGIN
W:=70;
Z:=50*M;
LINE(W+Z,15,W+Z,335)
END;
FOR M:=0 TO 50 DO
BEGIN
SETCOLOR(YELLOW);
W:=70;
Z:=10*M;
LINE(W+Z,93,W+Z,97);
LINE(W+Z,173,W+Z,177);
LINE(W+Z,253,W+Z,257)
END;
FOR M:=0 TO 32 DO
BEGIN
Z:=10*M;
LINE(318,15+Z,322,15+Z)
END;
SETCOLOR(LIGHTRED);
LINE(70,174,570,174);
LINE(70,176,570,176);
LINE(319,15,319,335);
LINE(321,15,321,335);
{dibujado de salir}
SETFILLSTYLE(1,MAGENTA);
SETCOLOR(WHITE);
BAR(580,100,630,135);
OUTTEXTXY(598,105,F6);
OUTTEXTXY(585,120,SALIR);
RECTANGLE(580,100,630,135);
SETFILLSTYLE(1,WHITE);
{dibujado de informacin}
SETCOLOR(BLACK);
STR(ESCALA1:1:2,TIRO);
SETCOLOR(LIGHTGREEN);
OUTTEXTXY(100,380,TIRO);
OUTTEXTXY(150,380,VOLTS/DIV);
STR(ESCALA2:1:2,TIRO);
SETCOLOR(WHITE);
OUTTEXTXY(100,420,TIRO);
OUTTEXTXY(150,420,VOLTS/DIV);
STR(TIEMPO:2:2,TIRO);

28

MANUAL DEL PROGRAMADOR: Unidades

SETCOLOR(RED);
OUTTEXTXY(310,380,TIRO);
OUTTEXTXY(350,380,ms/div)
END;
(**********************************************************)
PROCEDURE SELE1;
BEGIN
SETFILLSTYLE(1,BLACK);
BAR(200,448,640,460);
OUTTEXTXY(0,450,CANAL 1);
OUTTEXTXY(100,450, 0);
OUTTEXTXY(130,450, 1);
OUTTEXTXY(160,450, 2);
OUTTEXTXY(190,450, 3);
OUTTEXTXY(220,450, 4);
OUTTEXTXY(250,450, 5);
OUTTEXTXY(280,450, 6);
OUTTEXTXY(310,450, 7);
OUTTEXTXY(340,450, 8);
OUTTEXTXY(370,450, 9);
OUTTEXTXY(400,450,10);
OUTTEXTXY(430,450,11);
OUTTEXTXY(460,450,12);
OUTTEXTXY(490,450,13);
OUTTEXTXY(520,450,14);
OUTTEXTXY(550,450,15);
SETFILLSTYLE(1,RED);
BAR(100,448,120,460);
SETCOLOR(YELLOW);
OUTTEXTXY(100,450, 0);
XXX:=0;
REPEAT
OP4:=ORD(READKEY);
IF OP4=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>15 THEN XXX:=0;
SETFILLSTYLE(1,BLACK);
BAR((30*YYY)+100,448,(30*YYY)+125,460);
SETCOLOR(YELLOW);
IF YYY=0 THEN OUTTEXTXY(100,450, 0);
IF YYY=1 THEN OUTTEXTXY(130,450, 1);
IF YYY=2 THEN OUTTEXTXY(160,450, 2);
IF YYY=3 THEN OUTTEXTXY(190,450, 3);
IF YYY=4 THEN OUTTEXTXY(220,450, 4);
IF YYY=5 THEN OUTTEXTXY(250,450, 5);
IF YYY=6 THEN OUTTEXTXY(280,450, 6);
IF YYY=7 THEN OUTTEXTXY(310,450, 7);
IF YYY=8 THEN OUTTEXTXY(340,450, 8);
IF YYY=9 THEN OUTTEXTXY(370,450, 9);
IF YYY=10 THEN OUTTEXTXY(400,450,10);
IF YYY=11 THEN OUTTEXTXY(430,450,11);

29

MANUAL DEL PROGRAMADOR: Unidades

IF YYY=12 THEN OUTTEXTXY(460,450,12);


IF YYY=13 THEN OUTTEXTXY(490,450,13);
IF YYY=14 THEN OUTTEXTXY(520,450,14);
IF YYY=15 THEN OUTTEXTXY(550,450,15);
SETFILLSTYLE(1,RED);
BAR((30*XXX)+100,448,(30*XXX)+125,460);
SETCOLOR(YELLOW);
IF XXX=0 THEN OUTTEXTXY(100,450, 0);
IF XXX=1 THEN OUTTEXTXY(130,450, 1);
IF XXX=2 THEN OUTTEXTXY(160,450, 2);
IF XXX=3 THEN OUTTEXTXY(190,450, 3);
IF XXX=4 THEN OUTTEXTXY(220,450, 4);
IF XXX=5 THEN OUTTEXTXY(250,450, 5);
IF XXX=6 THEN OUTTEXTXY(280,450, 6);
IF XXX=7 THEN OUTTEXTXY(310,450, 7);
IF XXX=8 THEN OUTTEXTXY(340,450, 8);
IF XXX=9 THEN OUTTEXTXY(370,450, 9);
IF XXX=10 THEN OUTTEXTXY(400,450,10);
IF XXX=11 THEN OUTTEXTXY(430,450,11);
IF XXX=12 THEN OUTTEXTXY(460,450,12);
IF XXX=13 THEN OUTTEXTXY(490,450,13);
IF XXX=14 THEN OUTTEXTXY(520,450,14);
IF XXX=15 THEN OUTTEXTXY(550,450,15);
C:=XXX;
CAN1:=C
END;
IF OP4=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<0 THEN XXX:=15;
SETFILLSTYLE(1,BLACK);
BAR((30*YYY)+100,448,(30*YYY)+125,460);
SETCOLOR(YELLOW);
IF YYY=0 THEN OUTTEXTXY(100,450, 0);
IF YYY=1 THEN OUTTEXTXY(130,450, 1);
IF YYY=2 THEN OUTTEXTXY(160,450, 2);
IF YYY=3 THEN OUTTEXTXY(190,450, 3);
IF YYY=4 THEN OUTTEXTXY(220,450, 4);
IF YYY=5 THEN OUTTEXTXY(250,450, 5);
IF YYY=6 THEN OUTTEXTXY(280,450, 6);
IF YYY=7 THEN OUTTEXTXY(310,450, 7);
IF YYY=8 THEN OUTTEXTXY(340,450, 8);
IF YYY=9 THEN OUTTEXTXY(370,450, 9);
IF YYY=10 THEN OUTTEXTXY(400,450,10);
IF YYY=11 THEN OUTTEXTXY(430,450,11);
IF YYY=12 THEN OUTTEXTXY(460,450,12);
IF YYY=13 THEN OUTTEXTXY(490,450,13);
IF YYY=14 THEN OUTTEXTXY(520,450,14);
IF YYY=15 THEN OUTTEXTXY(550,450,15);
SETFILLSTYLE(1,RED);
BAR((30*XXX)+100,448,(30*XXX)+125,460);
SETCOLOR(YELLOW);
IF XXX=0 THEN OUTTEXTXY(100,450, 0);
IF XXX=1 THEN OUTTEXTXY(130,450, 1);
IF XXX=2 THEN OUTTEXTXY(160,450, 2);
IF XXX=3 THEN OUTTEXTXY(190,450, 3);

30

MANUAL DEL PROGRAMADOR: Unidades

IF XXX=4 THEN OUTTEXTXY(220,450, 4);


IF XXX=5 THEN OUTTEXTXY(250,450, 5);
IF XXX=6 THEN OUTTEXTXY(280,450, 6);
IF XXX=7 THEN OUTTEXTXY(310,450, 7);
IF XXX=8 THEN OUTTEXTXY(340,450, 8);
IF XXX=9 THEN OUTTEXTXY(370,450, 9);
IF XXX=10 THEN OUTTEXTXY(400,450,10);
IF XXX=11 THEN OUTTEXTXY(430,450,11);
IF XXX=12 THEN OUTTEXTXY(460,450,12);
IF XXX=13 THEN OUTTEXTXY(490,450,13);
IF XXX=14 THEN OUTTEXTXY(520,450,14);
IF XXX=15 THEN OUTTEXTXY(550,450,15);
C:=XXX;
CAN1:=C
END
UNTIL (OP4=13) OR (OP4=64);
IF OP4=13 THEN BEGIN
C:=XXX;
CAN1:=C
END
END;
(**********************************************************)
PROCEDURE SELE2;
BEGIN
SETFILLSTYLE(1,BLACK);
BAR(200,448,640,460);
OUTTEXTXY(0,450,CANAL 2);
OUTTEXTXY(100,450, 0);
OUTTEXTXY(130,450, 1);
OUTTEXTXY(160,450, 2);
OUTTEXTXY(190,450, 3);
OUTTEXTXY(220,450, 4);
OUTTEXTXY(250,450, 5);
OUTTEXTXY(280,450, 6);
OUTTEXTXY(310,450, 7);
OUTTEXTXY(340,450, 8);
OUTTEXTXY(370,450, 9);
OUTTEXTXY(400,450,10);
OUTTEXTXY(430,450,11);
OUTTEXTXY(460,450,12);
OUTTEXTXY(490,450,13);
OUTTEXTXY(520,450,14);
OUTTEXTXY(550,450,15);
SETFILLSTYLE(1,RED);
BAR(100,448,120,460);
SETCOLOR(YELLOW);
OUTTEXTXY(100,450, 0);
XXX:=0;
REPEAT

31

MANUAL DEL PROGRAMADOR: Unidades

OP4:=ORD(READKEY);
IF OP4=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>15 THEN XXX:=0;
SETFILLSTYLE(1,BLACK);
BAR((30*YYY)+100,448,(30*YYY)+125,460);
SETCOLOR(YELLOW);
IF YYY=0 THEN OUTTEXTXY(100,450, 0);
IF YYY=1 THEN OUTTEXTXY(130,450, 1);
IF YYY=2 THEN OUTTEXTXY(160,450, 2);
IF YYY=3 THEN OUTTEXTXY(190,450, 3);
IF YYY=4 THEN OUTTEXTXY(220,450, 4);
IF YYY=5 THEN OUTTEXTXY(250,450, 5);
IF YYY=6 THEN OUTTEXTXY(280,450, 6);
IF YYY=7 THEN OUTTEXTXY(310,450, 7);
IF YYY=8 THEN OUTTEXTXY(340,450, 8);
IF YYY=9 THEN OUTTEXTXY(370,450, 9);
IF YYY=10 THEN OUTTEXTXY(400,450,10);
IF YYY=11 THEN OUTTEXTXY(430,450,11);
IF YYY=12 THEN OUTTEXTXY(460,450,12);
IF YYY=13 THEN OUTTEXTXY(490,450,13);
IF YYY=14 THEN OUTTEXTXY(520,450,14);
IF YYY=15 THEN OUTTEXTXY(550,450,15);
SETFILLSTYLE(1,RED);
BAR((30*XXX)+100,448,(30*XXX)+125,460);
SETCOLOR(YELLOW);
IF XXX=0 THEN OUTTEXTXY(100,450, 0);
IF XXX=1 THEN OUTTEXTXY(130,450, 1);
IF XXX=2 THEN OUTTEXTXY(160,450, 2);
IF XXX=3 THEN OUTTEXTXY(190,450, 3);
IF XXX=4 THEN OUTTEXTXY(220,450, 4);
IF XXX=5 THEN OUTTEXTXY(250,450, 5);
IF XXX=6 THEN OUTTEXTXY(280,450, 6);
IF XXX=7 THEN OUTTEXTXY(310,450, 7);
IF XXX=8 THEN OUTTEXTXY(340,450, 8);
IF XXX=9 THEN OUTTEXTXY(370,450, 9);
IF XXX=10 THEN OUTTEXTXY(400,450,10);
IF XXX=11 THEN OUTTEXTXY(430,450,11);
IF XXX=12 THEN OUTTEXTXY(460,450,12);
IF XXX=13 THEN OUTTEXTXY(490,450,13);
IF XXX=14 THEN OUTTEXTXY(520,450,14);
IF XXX=15 THEN OUTTEXTXY(550,450,15);
C:=XXX;
CAN2:=C
END;
IF OP4=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<0 THEN XXX:=15;
SETFILLSTYLE(1,BLACK);
BAR((30*YYY)+100,448,(30*YYY)+125,460);
SETCOLOR(YELLOW);
IF YYY=0 THEN OUTTEXTXY(100,450, 0);
IF YYY=1 THEN OUTTEXTXY(130,450, 1);
IF YYY=2 THEN OUTTEXTXY(160,450, 2);
IF YYY=3 THEN OUTTEXTXY(190,450, 3);

32

MANUAL DEL PROGRAMADOR: Unidades

IF YYY=4 THEN OUTTEXTXY(220,450, 4);


IF YYY=5 THEN OUTTEXTXY(250,450, 5);
IF YYY=6 THEN OUTTEXTXY(280,450, 6);
IF YYY=7 THEN OUTTEXTXY(310,450, 7);
IF YYY=8 THEN OUTTEXTXY(340,450, 8);
IF YYY=9 THEN OUTTEXTXY(370,450, 9);
IF YYY=10 THEN OUTTEXTXY(400,450,10);
IF YYY=11 THEN OUTTEXTXY(430,450,11);
IF YYY=12 THEN OUTTEXTXY(460,450,12);
IF YYY=13 THEN OUTTEXTXY(490,450,13);
IF YYY=14 THEN OUTTEXTXY(520,450,14);
IF YYY=15 THEN OUTTEXTXY(550,450,15);
SETFILLSTYLE(1,RED);
BAR((30*XXX)+100,448,(30*XXX)+125,460);
SETCOLOR(YELLOW);
IF XXX=0 THEN OUTTEXTXY(100,450, 0);
IF XXX=1 THEN OUTTEXTXY(130,450, 1);
IF XXX=2 THEN OUTTEXTXY(160,450, 2);
IF XXX=3 THEN OUTTEXTXY(190,450, 3);
IF XXX=4 THEN OUTTEXTXY(220,450, 4);
IF XXX=5 THEN OUTTEXTXY(250,450, 5);
IF XXX=6 THEN OUTTEXTXY(280,450, 6);
IF XXX=7 THEN OUTTEXTXY(310,450, 7);
IF XXX=8 THEN OUTTEXTXY(340,450, 8);
IF XXX=9 THEN OUTTEXTXY(370,450, 9);
IF XXX=10 THEN OUTTEXTXY(400,450,10);
IF XXX=11 THEN OUTTEXTXY(430,450,11);
IF XXX=12 THEN OUTTEXTXY(460,450,12);
IF XXX=13 THEN OUTTEXTXY(490,450,13);
IF XXX=14 THEN OUTTEXTXY(520,450,14);
IF XXX=15 THEN OUTTEXTXY(550,450,15);
C:=XXX;
CAN2:=C
END
UNTIL (OP4=13) OR (OP4=64);
IF OP4=13 THEN BEGIN
C:=XXX;
CAN2:=C
END
END;
(**********************************************************)
PROCEDURE CANALES;
BEGIN
REPEAT
SETFILLSTYLE(1,BLACK);
BAR(0,460,640,468);
BAR(0,448,640,460);
OUTTEXTXY(200,450,SELECCION:);
OUTTEXTXY(300,450,CANAL );
OUTTEXTXY(400,450,CANAL );

33

MANUAL DEL PROGRAMADOR: Unidades

OUTTEXTXY(500,450, ALIR);
SETFILLSTYLE(1,RED);
BAR(300,448,375,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450,CANAL 1);
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S);
SETCOLOR(YELLOW);
XXX:=3;
OP:=3;
REPEAT
OP3:=ORD(READKEY);
IF OP3=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>5 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,CANAL );
IF YYY=4 THEN OUTTEXTXY(400,450,CANAL );
IF YYY=5 THEN OUTTEXTXY(500,450, ALIR );
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,CANAL );
IF XXX=4 THEN OUTTEXTXY(400,450,CANAL );
IF XXX=5 THEN OUTTEXTXY(500,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S);
SETCOLOR(YELLOW)
END;
IF OP3=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<3 THEN XXX:=5;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,CANAL 1);
IF YYY=4 THEN OUTTEXTXY(400,450,CANAL 2);
IF YYY=5 THEN OUTTEXTXY(500,450, SALIR );
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,CANAL );
IF XXX=4 THEN OUTTEXTXY(400,450,CANAL );
IF XXX=5 THEN OUTTEXTXY(500,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S);
SETCOLOR(YELLOW)

34

MANUAL DEL PROGRAMADOR: Unidades

END
UNTIL (OP3=13) OR (OP3=64) OR (OP3=49) OR (OP3=50) OR (OP3=115) OR (OP3=83);
IF (OP3=13) OR (OP3=49) OR (OP3=50) THEN BEGIN
IF ((XXX=3) AND (OP3=13)) OR (OP3=49) THEN SELE1;
IF ((XXX=4) AND (OP3=13)) OR (OP3=50) THEN SELE2
END
UNTIL ((XXX=5) AND (OP3=13)) OR (OP3=64) OR (OP3=115) OR (OP3=83)
END;
(**********************************************************)
PROCEDURE CANAL1;
BEGIN
SETFILLSTYLE(1,BLACK);
BAR(200,448,640,460);
SETCOLOR(YELLOW);
OUTTEXTXY(200,450,CANAL 1);
OUTTEXTXY(300,450,2.5 V/div);
OUTTEXTXY(400,450,1 V/div);
OUTTEXTXY(500,450,0.25 V/div);
SETFILLSTYLE(1,RED);
BAR(300,448,375,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450,2.5 V/div);
XXX:=3;
REPEAT
OP2:=ORD(READKEY);
IF OP2=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>5 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,2.5 V/div);
IF YYY=4 THEN OUTTEXTXY(400,450,1 V/div);
IF YYY=5 THEN OUTTEXTXY(500,450,0.25 V/div);
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,2.5 V/div);
IF XXX=4 THEN OUTTEXTXY(400,450,1 V/div);
IF XXX=5 THEN OUTTEXTXY(500,450,0.25 V/div)
END;
IF OP2=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<3 THEN XXX:=5;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,2.5 V/div);

35

MANUAL DEL PROGRAMADOR: Unidades

IF YYY=4 THEN OUTTEXTXY(400,450,1 V/div);


IF YYY=5 THEN OUTTEXTXY(500,450,0.25 V/div);
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,2.5 V/div);
IF XXX=4 THEN OUTTEXTXY(400,450,1 V/div);
IF XXX=5 THEN OUTTEXTXY(500,450,0.25 V/div)
END
UNTIL (OP2=13) OR (OP2=64);
IF OP2=13 THEN BEGIN
IF XXX=3 THEN BEGIN
SS1:=12.8; RR1:=0; TT:=20;
VV:=10; ESCALA1:=2.5
END;
IF XXX=4 THEN BEGIN
SS1:=5.12; RR1:=240; TT:=8;
VV:=4; ESCALA1:=1
END;
IF XXX=5 THEN BEGIN
SS1:=1.28; RR1:=1440; TT:=2;
VV:=1; ESCALA1:=0.25
END;
XXX1:=XXX
END
END;
(**********************************************************)
PROCEDURE CANAL2;
BEGIN
SETFILLSTYLE(1,BLACK);
BAR(200,448,640,460);
SETCOLOR(YELLOW);
OUTTEXTXY(200,450,CANAL 2);
OUTTEXTXY(300,450,2.5 V/div);
OUTTEXTXY(400,450,1 V/div);
OUTTEXTXY(500,450,0.25 V/div);
SETFILLSTYLE(1,RED);
BAR(300,448,375,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450,2.5 V/div);
XXX:=3;
REPEAT
OP2:=ORD(READKEY);
IF OP2=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>5 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,2.5 V/div);

36

MANUAL DEL PROGRAMADOR: Unidades

IF YYY=4 THEN OUTTEXTXY(400,450,1 V/div);


IF YYY=5 THEN OUTTEXTXY(500,450,0.25 V/div);
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,2.5 V/div);
IF XXX=4 THEN OUTTEXTXY(400,450,1 V/div);
IF XXX=5 THEN OUTTEXTXY(500,450,0.25 V/div)
END;
IF OP2=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<3 THEN XXX:=5;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,2.5 V/div);
IF YYY=4 THEN OUTTEXTXY(400,450,1 V/div);
IF YYY=5 THEN OUTTEXTXY(500,450,0.25 V/div);
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,2.5 V/div);
IF XXX=4 THEN OUTTEXTXY(400,450,1 V/div);
IF XXX=5 THEN OUTTEXTXY(500,450,0.25 V/div)
END
UNTIL (OP2=13) OR (OP2=64);
IF OP2=13 THEN BEGIN
IF XXX=3 THEN BEGIN
SS2:=12.8; RR2:=0; TT:=20;
VV:=10; ESCALA2:=2.5
END;
IF XXX=4 THEN BEGIN
SS2:=5.12; RR2:=240; TT:=8;
VV:=4; ESCALA2:=1
END;
IF XXX=5 THEN BEGIN
SS2:=1.28; RR2:=1440; TT:=2;
VV:=1; ESCALA2:=0.25
END;
XXX2:=XXX
END
END;
(**********************************************************)
PROCEDURE VOLTIOS;
BEGIN
WWA:=25;
VVA:=390;
WWB:=75;
VVB:=390;

37

MANUAL DEL PROGRAMADOR: Unidades

REPEAT
SETFILLSTYLE(1,BLACK);
BAR(200,448,640,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450,CANAL );
OUTTEXTXY(400,450,CANAL );
OUTTEXTXY(500,450, ALIR);
SETFILLSTYLE(1,RED);
BAR(300,448,355,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450,CANAL );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S);
XXX:=3;
OP:=0;
REPEAT
OP1:=ORD(READKEY);
IF OP1=77 THEN BEGIN
YYY:=XXX;
XXX:=XXX+1;
IF XXX>5 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+55,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,CANAL );
IF YYY=4 THEN OUTTEXTXY(400,450,CANAL );
IF YYY=5 THEN OUTTEXTXY(500,450, ALIR );
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+55,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,CANAL );
IF XXX=4 THEN OUTTEXTXY(400,450,CANAL );
IF XXX=5 THEN OUTTEXTXY(500,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S)
END;
IF OP1=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<3 THEN XXX:=5;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+55,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,CANAL );
IF YYY=4 THEN OUTTEXTXY(400,450,CANAL );
IF YYY=5 THEN OUTTEXTXY(500,450, ALIR );
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+55,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,CANAL );

38

MANUAL DEL PROGRAMADOR: Unidades

IF XXX=4 THEN OUTTEXTXY(400,450,CANAL );


IF XXX=5 THEN OUTTEXTXY(500,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S)
END
UNTIL (OP1=13) OR (OP1=64) OR (OP1=49) OR (OP1=50) OR (OP1=115) OR (OP1=83);
IF (OP1=13) OR (OP1=49) OR (OP1=50) THEN BEGIN
IF ((XXX=3) AND (OP1=13)) OR (OP1=49) THEN CANAL1;
IF ((XXX=4) AND (OP1=13)) OR (OP1=50) THEN CANAL2
END
UNTIL ((XXX=5) AND (OP1=13)) OR (OP1=64) OR (OP1=115) OR (OP1=83);
SETFILLSTYLE(1,BLACK);
BAR(100,375,150,385);
BAR(100,415,150,425);
STR(ESCALA1:1:2,TIRO);
SETCOLOR(LIGHTGREEN);
OUTTEXTXY(100,380,TIRO);
OUTTEXTXY(150,380,VOLTS/DIV);
STR(ESCALA2:1:2,TIRO);
SETCOLOR(WHITE);
OUTTEXTXY(100,420,TIRO);
OUTTEXTXY(150,420,VOLTS/DIV)
END;
(**********************************************************)
PROCEDURE DIBUJAR;
BEGIN
N:=0;
DEF:=0;
REPEAT
X:=70;
C:=X+N;
D:=VMUESTRAS[DEF];
PUTPIXEL(C,D,LIGHTGREEN);
PUTPIXEL(C+INCREMENTO,BORRAR[DEF],BLACK);
DEF:=DEF+1;
N:=N+INCREMENTO
UNTIL N=HASTA
END;
(**********************************************************)
PROCEDURE PROGRAMA (SS,RR:REAL;CANAL:INTEGER);
VAR
F:BYTE;
BEGIN
PORT[REGCONTROL]:=0;
PORT[CANALMUX]:=CANAL;

39

MANUAL DEL PROGRAMADOR: Unidades

PORT[REGCONTROL]:=1;
FOR I:=0 TO 500 DO
BEGIN
PORT[REGDISPARO]:=0;
REPEAT
FIN_CONVERSION:=PORT[DATOADH];
UNTIL FIN_CONVERSION<=$F;
DATO_BAJO:=PORT[DATOADL];
DATO_ALTO:=PORT[DATOADH] MOD 16;
A:=DATO_ALTO*256+DATO_BAJO;
B:=335-ROUND((A / SS)-RR);
BORRAR[I]:=VMUESTRAS[I+1];
VMUESTRAS[I]:=B
END;
DIBUJAR
{UNTIL KEYPRESSED;
PORT[REGCONTROL]:=0;}
END;
(**********************************************************)
PROCEDURE AMBOS (SS1,SS2,RR1,RR2:REAL;CAN1,CAN2:INTEGER);
VAR
F:BYTE;
BEGIN
REPEAT
REJILLA;
FOR NN:=0 TO 10 DO BEGIN
FOR NNNN:=1 TO 2 DO BEGIN
IF NNNN=1 THEN BEGIN
SS:=SS1;
RR:=RR1;
CANAL:=CAN1;
PORT[REGCONTROL]:=0;
PORT[CANALMUX]:=CANAL;
PORT[REGCONTROL]:=1;
FOR I:=0 TO 500 DO
BEGIN
PORT[REGDISPARO]:=0;
REPEAT
FIN_CONVERSION:=PORT[DATOADH];
UNTIL FIN_CONVERSION<=$F;
DATO_BAJO:=PORT[DATOADL];
DATO_ALTO:=PORT[DATOADH] MOD 16;
A:=DATO_ALTO*256+DATO_BAJO;
B:=335-ROUND((A / SS)-RR);
BORRAR1[I]:=VMUESTRAS1[I+1];
VMUESTRAS1[I]:=B
END
END;
IF NNNN=2 THEN BEGIN

40

MANUAL DEL PROGRAMADOR: Unidades

SS:=SS2;
RR:=RR2;
CANAL:=CAN2;
PORT[REGCONTROL]:=0;
PORT[CANALMUX]:=CANAL;
PORT[REGCONTROL]:=1;
FOR I:=0 TO 500 DO
BEGIN
PORT[REGDISPARO]:=0;
REPEAT
FIN_CONVERSION:=PORT[DATOADH];
UNTIL FIN_CONVERSION<=$F;
DATO_BAJO:=PORT[DATOADL];
DATO_ALTO:=PORT[DATOADH] MOD 16;
A:=DATO_ALTO*256+DATO_BAJO;
B:=335-ROUND((A / SS)-RR);
BORRAR2[I]:=VMUESTRAS2[I+1];
VMUESTRAS2[I]:=B
END
END;
DEF:=0;
N:=0;
REPEAT
X:=70;
C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
PUTPIXEL(C+INCREMENTO,BORRAR1[DEF],BLACK);
PUTPIXEL(C+INCREMENTO,BORRAR2[DEF],BLACK);
DEF:=DEF+1;
N:=N+INCREMENTO
UNTIL N=HASTA
END
END
UNTIL KEYPRESSED;
PORT[REGCONTROL]:=0
END;
(**********************************************************)
PROCEDURE HORIZONTALES(ESCALA:REAL);
BEGIN
SETCOLOR(BLACK);
LINE(70,CUR,570,CUR);
LINE(70,CUR2,570,CUR2);
CUR:=175;
CUR2:=175;
SETCOLOR(MAGENTA);
LINE(70,CUR,570,CUR);
REPEAT
RECTA:=ORD(READKEY);

41

MANUAL DEL PROGRAMADOR: Unidades

IF RECTA=72 THEN BEGIN


BCUR:=CUR;CUR:=CUR-1;
IF CUR<15 THEN CUR :=335;
SETCOLOR(BLACK);
LINE(70,BCUR,570,BCUR);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR,570,CUR)
END;
IF RECTA=80 THEN BEGIN
BCUR:=CUR;CUR:=CUR+1;
IF CUR>335 THEN CUR :=15;
SETCOLOR(BLACK);
LINE(70,BCUR,570,BCUR);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR,570,CUR)
END;
IF RECTA=75 THEN BEGIN
BCUR:=CUR;CUR:=CUR+20;
IF CUR>335 THEN CUR :=15;
SETCOLOR(BLACK);
LINE(70,BCUR,570,BCUR);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];

42

MANUAL DEL PROGRAMADOR: Unidades

PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR,570,CUR)
END;
IF RECTA=77 THEN BEGIN
BCUR:=CUR;CUR:=CUR-20;
IF CUR<15 THEN CUR :=335;
SETCOLOR(BLACK);
LINE(70,BCUR,570,BCUR);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR,570,CUR)
END
UNTIL RECTA=13;
SETCOLOR(MAGENTA);
LINE(70,CUR2,570,CUR2);
REPEAT
RECTA2:=ORD(READKEY);
IF RECTA2=72 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2-1;
IF CUR2<15 THEN CUR2 :=335;
SETCOLOR(BLACK);
LINE(70,BCUR2,570,BCUR2);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);

43

MANUAL DEL PROGRAMADOR: Unidades

LINE(70,CUR2,570,CUR2);
LINE(70,CUR,570,CUR)
END;
IF RECTA2=80 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2+1;
IF CUR2>335 THEN CUR2 :=15;
SETCOLOR(BLACK);
LINE(70,BCUR2,570,BCUR2);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR2,570,CUR2);
LINE(70,CUR,570,CUR)
END;
IF RECTA2=75 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2+20;
IF CUR2>335 THEN CUR2 :=15;
SETCOLOR(BLACK);
LINE(70,BCUR2,570,BCUR2);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR2,570,CUR2);
LINE(70,CUR,570,CUR)
END;
IF RECTA2=77 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2-20;
IF CUR2<15 THEN CUR2 :=335;
SETCOLOR(BLACK);
LINE(70,BCUR2,570,BCUR2);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;

44

MANUAL DEL PROGRAMADOR: Unidades

IF DISC=2 THEN BEGIN


DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR2,570,CUR2);
LINE(70,CUR,570,CUR)
END
UNTIL RECTA2=13;
IF DISC=0 THEN BEGIN
ESCALA:=0
END;
IF DISC=1 THEN BEGIN
ESCALA:=ESCALA1
END;
IF DISC=2 THEN BEGIN
REPEAT
SETCOLOR(WHITE);
OUTTEXTXY(100,350,QUE ONDA QUIERES MEDIR: VERDE o BLANCA? (V/B));
DESCARGARTECLADO;
AMARILLA:=READKEY;
SETFILLSTYLE(1,BLACK);
BAR(100,345,640,357)
UNTIL (AMARILLA=V) OR (AMARILLA=B) OR (AMARILLA=v) OR (AMARILLA=b);
IF (AMARILLA=V) OR (AMARILLA=v) THEN ESCALA:=ESCALA1;
IF (AMARILLA=B) OR (AMARILLA=b) THEN ESCALA:=ESCALA2
END;
IF DISC=3 THEN BEGIN
ESCALA:=ESCALA2
END;
IF CUR>CUR2 THEN BEGIN
MEDIDA:=(ESCALA/40)*(CUR2-CUR);
SETFILLSTYLE(1,BLACK);
BAR(0,395,449,407);
STR(MEDIDA:5:4,TIRA);
SETCOLOR(MAGENTA);
OUTTEXTXY(235,400,TIRA);
OUTTEXTXY(300,400,VOLTS)
END;
IF CUR<CUR2 THEN BEGIN
MEDIDA:=(ESCALA/40)*(CUR2-CUR);
SETFILLSTYLE(1,BLACK);
BAR(0,395,449,407);
STR(MEDIDA:5:4,TIRA);
SETCOLOR(MAGENTA);

45

MANUAL DEL PROGRAMADOR: Unidades

OUTTEXTXY(235,400,TIRA);
OUTTEXTXY(300,400,VOLTS)
END
END;
(**********************************************************)
PROCEDURE VERTICALES;
BEGIN
SETCOLOR(BLACK);
LINE(CUR,15,CUR,335);
LINE(CUR2,15,CUR2,335);
CUR:=320; CUR2:=320;
SETCOLOR(BROWN);
LINE(CUR,15,CUR,335);
REPEAT
RECTA:=ORD(READKEY);
IF RECTA=75 THEN BEGIN
BCUR:=CUR;CUR:=CUR-1;
IF CUR<70 THEN CUR :=570;
SETCOLOR(BLACK);
LINE(BCUR,15,BCUR,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR,15,CUR,335)
END;
IF RECTA=77 THEN BEGIN
BCUR:=CUR;CUR:=CUR+1;
IF CUR>570 THEN CUR :=70;
SETCOLOR(BLACK);
LINE(BCUR,15,BCUR,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO

46

MANUAL DEL PROGRAMADOR: Unidades

UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR,15,CUR,335)
END;
IF RECTA=72 THEN BEGIN
BCUR:=CUR;CUR:=CUR+25;
IF CUR>570 THEN CUR :=70;
SETCOLOR(BLACK);
LINE(BCUR,15,BCUR,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR,15,CUR,335)
END;
IF RECTA=80 THEN BEGIN
BCUR:=CUR;CUR:=CUR-25;
IF CUR<70 THEN CUR :=570;
SETCOLOR(BLACK);
LINE(BCUR,15,BCUR,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR,15,CUR,335)
END
UNTIL RECTA=13;
SETCOLOR(BROWN);
LINE(CUR2,15,CUR2,335);
REPEAT
RECTA2:=ORD(READKEY);
IF RECTA2=75 THEN BEGIN

47

MANUAL DEL PROGRAMADOR: Unidades

BCUR2:=CUR2;CUR2:=CUR2-1;
IF CUR2<70 THEN CUR2 :=570;
SETCOLOR(BLACK);
LINE(BCUR2,15,BCUR2,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR2,15,CUR2,335);
LINE(CUR,15,CUR,335)
END;
IF RECTA2=77 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2+1;
IF CUR2>570 THEN CUR2 :=70;
SETCOLOR(BLACK);
LINE(BCUR2,15,BCUR2,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR2,15,CUR2,335);
LINE(CUR,15,CUR,335)
END;
IF RECTA2=72 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2+25;
IF CUR2>570 THEN CUR2 :=70;
SETCOLOR(BLACK);
LINE(BCUR2,15,BCUR2,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];

48

MANUAL DEL PROGRAMADOR: Unidades

D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR2,15,CUR2,335);
LINE(CUR,15,CUR,335)
END;
IF RECTA2=80 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2-25;
IF CUR2<70 THEN CUR2 :=570;
SETCOLOR(BLACK);
LINE(BCUR2,15,BCUR2,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR2,15,CUR2,335);
LINE(CUR,15,CUR,335)
END
UNTIL RECTA2=13;
IF CUR>CUR2 THEN BEGIN
MEDIDA:=1/((TIEMPO/50)*(CUR2-CUR));
SETFILLSTYLE(1,BLACK);
BAR(450,395,640,407);
STR(MEDIDA:5:4,TIRA);
SETCOLOR(BROWN);
OUTTEXTXY(450,400,TIRA);
OUTTEXTXY(515,400,KHz)
END;
IF CUR<CUR2 THEN BEGIN
MEDIDA:=1/((TIEMPO/50)*(CUR2-CUR));
SETFILLSTYLE(1,BLACK);
BAR(450,395,640,407);
STR(MEDIDA:5:4,TIRA);
SETCOLOR(BROWN);
OUTTEXTXY(450,400,TIRA);
OUTTEXTXY(515,400,KHz)
END
END;

49

MANUAL DEL PROGRAMADOR: Unidades

(**********************************************************)
PROCEDURE CURSOR;
BEGIN
REPEAT
SETFILLSTYLE(1,BLACK);
BAR(0,440,640,460);
SETFILLSTYLE(1,BLACK);
BAR(310,370,640,390);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450, ENSION );
OUTTEXTXY(400,450, RECUENCIA);
OUTTEXTXY(500,450, ALIR );
SETFILLSTYLE(1,RED);
BAR(300,448,380,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450, ENSION );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450, T);
OUTTEXTXY(400,450,F);
OUTTEXTXY(500,450, S);
XXX:=3;
OP:=0;
REPEAT
OP1:=ORD(READKEY);
IF OP1=77 THEN BEGIN
YYY:=XXX;
XXX:=XXX+1;
IF XXX>5 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450, ENSION );
IF YYY=4 THEN OUTTEXTXY(400,450, RECUENCIA);
IF YYY=5 THEN OUTTEXTXY(500,450, ALIR );
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450, ENSION );
IF XXX=4 THEN OUTTEXTXY(400,450, RECUENCIA);
IF XXX=5 THEN OUTTEXTXY(500,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450, T);
OUTTEXTXY(400,450,F);
OUTTEXTXY(500,450, S)
END;
IF OP1=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<3 THEN XXX:=5;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450, ENSION );
IF YYY=4 THEN OUTTEXTXY(400,450, RECUENCIA);

50

MANUAL DEL PROGRAMADOR: Unidades

IF YYY=5 THEN OUTTEXTXY(500,450, ALIR );


SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450, ENSION );
IF XXX=4 THEN OUTTEXTXY(400,450, RECUENCIA);
IF XXX=5 THEN OUTTEXTXY(500,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450, T);
OUTTEXTXY(400,450,F);
OUTTEXTXY(500,450, S)
END
UNTIL (OP1=13) OR (OP1=64) OR (OP1=116) OR (OP1=84) OR
(OP1=102) OR (OP1=70) OR (OP1=115) OR (OP1=83);
IF (OP1=13) OR (OP1=116) OR (OP1=84) OR
(OP1=102) OR (OP1=70) THEN BEGIN
IF ((XXX=3) AND (OP1=13)) OR (OP1=116) OR (OP1=84) THEN BEGIN
HORIZONTALES(ESCALA)
END;
IF ((XXX=4) AND (OP1=13)) OR (OP1=102) OR (OP1=70) THEN BEGIN
VERTICALES
END
END
UNTIL ((XXX=5) AND (OP1=13)) OR (OP1=64) OR (OP1=115) OR (OP1=83)
END;
(**********************************************************)
PROCEDURE PRINTSCREEN;
VAR
REG:REGISTERS;
BEGIN
SETFILLSTYLE(1,BLACK);
BAR(580,100,630,135); {borrado de salir}
BAR(70,340,570,470); {borrado del resto}
SETCOLOR(WHITE);
OUTTEXTXY(80,345,GRAFICA : EVALUACION VERSION 1.00);
OUTTEXTXY(80,360,Emilio Sahuquillo & Julio Martinez);
OBTENERFECHA(LAFECHA);
OUTTEXTXY(80,375,LAFECHA);
OUTTEXTXY(80,390,TEMPERATURA AMBIENTE : 27 C);
STR(ESCALA1:1:2,TIRO);
OUTTEXTXY(80,405,CANAL1 :
VOLT/DIV);
OUTTEXTXY(160,405,TIRO);
STR(ESCALA2:1:2,TIRO);
OUTTEXTXY(80,420,CANAL2 :
VOLT/DIV);
OUTTEXTXY(160,420,TIRO);
STR(TIEMPO:2:2,TIRO);
OUTTEXTXY(280,415,TIEMPO :
mSEG/DIV);
OUTTEXTXY(350,415,TIRO);
OUTTEXTXY(500,345,TIEMPOS);
SETTEXTSTYLE(0,1,0);

51

MANUAL DEL PROGRAMADOR: Unidades

OUTTEXTXY(60,30,TENSIONES);
SETTEXTSTYLE(0,0,1);
{ejecutamos la primera vez graphics del MS-Dos}
IF EJECUTARGRAFICOS=TRUE THEN BEGIN
SWAPVECTORS;
EXEC(GRAPHICS.COM,);
SWAPVECTORS;
EJECUTARGRAFICOS:=FALSE
END;
{llamamos a la interrupcin del bios para imprimir}
REG.AH:=9;
INTR($5,REG);
{borramos y dibujamos salir}
BAR(70,340,570,470);
BAR(50,25,65,120);
BAR(490,340,550,350);
SETFILLSTYLE(1,MAGENTA);
SETCOLOR(WHITE);
BAR(580,100,630,135);
OUTTEXTXY(598,105,F6);
OUTTEXTXY(585,120,SALIR);
RECTANGLE(580,100,630,135)
END;
(**********************************************************)
PROCEDURE DISCO(DISC:INTEGER);
LABEL SALIMOS,SALIMOS2,SALIMOS3;
BEGIN
IF (DISC=1) OR (DISC=3) THEN BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
CLRSCR;
REPEAT
CURSORON;
MAS:=#251;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
GOTOXY(3,2);
TEXTCOLOR(YELLOW);
WRITELN(NOMBRE DEL FICHERO : );
RAYA_HORIZONTAL(2,79,3,WHITE);
TEXTBACKGROUND(LIGHTBLUE);
TEXTCOLOR(YELLOW);
WINDOW(3,4,78,5);
REPEAT

52

MANUAL DEL PROGRAMADOR: Unidades

READLN(FILENAME);
UNTIL FILENAME<>;
WINDOW(3,4,78,24);
ASSIGN(FICHA,FILENAME);
{$I-} REWRITE(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} WRITE(FICHA,VMUESTRAS) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} CLOSE(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS;
WINDOW(5,10,76,24);

53

MANUAL DEL PROGRAMADOR: Unidades

CLRSCR
END
UNTIL ERROROSC=0;
SALIMOS :
MODO:=2;
SETGRAPHMODE(MODO)
END;

IF DISC=2 THEN BEGIN


RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
CLRSCR;
REPEAT
CURSORON;
WINDOW(1,1,80,25);
MAS:=#251;
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
GOTOXY(3,2);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITELN(NOMBRE DEL FICHERO PARA ONDA 1);
RAYA_HORIZONTAL(2,79,3,WHITE);
TEXTCOLOR(YELLOW);
WINDOW(3,4,78,5);
REPEAT
READLN(FILENAME);
UNTIL FILENAME<>;
WINDOW(3,4,78,24);
ASSIGN(FICHA,FILENAME);
{$I-} REWRITE(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS2;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} WRITE(FICHA,VMUESTRAS1) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;

54

MANUAL DEL PROGRAMADOR: Unidades

WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS2;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} CLOSE(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS2;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
SALIMOS2 :
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
CLRSCR;
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
TEXTBACKGROUND(LIGHTBLUE);
TEXTCOLOR(YELLOW);
GOTOXY(3,2);
WRITELN(NOMBRE DEL FICHERO PARA ONDA 2 : );
RAYA_HORIZONTAL(2,79,3,WHITE);
TEXTCOLOR(YELLOW);
WINDOW(3,4,78,5);
REPEAT
READLN(FILENAME);
UNTIL FILENAME<>;
WINDOW(3,4,78,24);
ASSIGN(FICHA2,FILENAME);
{$I-} REWRITE(FICHA2) {$I+};
ERROROSC:=IORESULT;

55

MANUAL DEL PROGRAMADOR: Unidades

IF ERROROSC<>0 THEN BEGIN


CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS3;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} WRITE(FICHA2,VMUESTRAS2) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS3;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} CLOSE(FICHA2) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS3;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
SALIMOS3 :
MODO:=2;
SETGRAPHMODE(MODO);
MAS:=#251

56

MANUAL DEL PROGRAMADOR: Unidades

END;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
END;
(**********************************************************)
PROCEDURE SALVAR;
BEGIN
SETFILLSTYLE(1,RED);
BAR(150,448,220,460);
REPEAT
SETCOLOR(YELLOW);
OUTTEXTXY(150,450, MPRESORA);
OUTTEXTXY(300,450, ISCO );
OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,I);
OUTTEXTXY(300,450, D);
OUTTEXTXY(450,450, S);
XXX:=1;
OP:=0;
REPEAT
OP6:=ORD(READKEY);
IF OP6=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>3 THEN XXX:=1;
SETFILLSTYLE(1,BLACK);
BAR((150*YYY)-5,448,(150*YYY)+75,460);
SETCOLOR(YELLOW);
IF YYY=1 THEN OUTTEXTXY(150,450, MPRESORA);
IF YYY=2 THEN OUTTEXTXY(300,450, ISCO );
IF YYY=3 THEN OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,I);
OUTTEXTXY(300,450, D);
OUTTEXTXY(450,450, S);
SETFILLSTYLE(1,RED);
BAR((150*XXX)-5,448,(150*XXX)+75,460);
SETCOLOR(YELLOW);
IF XXX=1 THEN OUTTEXTXY(150,450, MPRESORA);

57

MANUAL DEL PROGRAMADOR: Unidades

IF XXX=2 THEN OUTTEXTXY(300,450, ISCO );


IF XXX=3 THEN OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,I);
OUTTEXTXY(300,450, D);
OUTTEXTXY(450,450, S)
END;
IF OP6=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<1 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((150*YYY)-5,448,(150*YYY)+75,460);
SETCOLOR(YELLOW);
IF YYY=1 THEN OUTTEXTXY(150,450, MPRESORA);
IF YYY=2 THEN OUTTEXTXY(300,450, ISCO );
IF YYY=3 THEN OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,I);
OUTTEXTXY(300,450, D);
OUTTEXTXY(450,450, S);
SETFILLSTYLE(1,RED);
BAR((150*XXX)-5,448,(150*XXX)+75,460);
SETCOLOR(YELLOW);
IF XXX=1 THEN OUTTEXTXY(150,450, MPRESORA);
IF XXX=2 THEN OUTTEXTXY(300,450, ISCO );
IF XXX=3 THEN OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,I);
OUTTEXTXY(300,450, D);
OUTTEXTXY(450,450, S)
END
UNTIL (OP6=13) OR (OP6=64) OR (OP6=105) OR (OP6=73) OR (OP6=100)
OR (OP6=68) OR (OP6=115) OR (OP6=83);
IF (OP6=13) OR (OP6=105) OR (OP6=73) OR (OP6=100)
OR (OP6=68) OR (OP6=115) OR (OP6=83) THEN BEGIN
IF ((XXX=1) AND (OP6=13)) OR (OP6=105) OR (OP6=73) THEN BEGIN
PRINTSCREEN;
SETFILLSTYLE(1,RED);
BAR(150,448,220,460);
SETCOLOR(BLACK);
STR(ESCALA1:1:2,TIRO);
SETCOLOR(LIGHTGREEN);
OUTTEXTXY(100,380,TIRO);
OUTTEXTXY(150,380,VOLTS/DIV);
STR(ESCALA2:1:2,TIRO);
SETCOLOR(WHITE);
OUTTEXTXY(100,420,TIRO);
OUTTEXTXY(150,420,VOLTS/DIV);
STR(TIEMPO:2:2,TIRO);
SETCOLOR(RED);
OUTTEXTXY(310,380,TIRO);
OUTTEXTXY(350,380,ms/div)

58

MANUAL DEL PROGRAMADOR: Unidades

END;
IF ((XXX=2) AND (OP6=13)) OR (OP6=100) OR (OP6=68) THEN BEGIN
DISCO(DISC);
SETFILLSTYLE(1,BLACK);
BAR(145,440,430,465);
REJILLA;
SETFILLSTYLE(1,RED);
BAR(150,448,220,460)
END
END
UNTIL (XXX=3) OR (OP6=64) OR (OP6=115) OR (OP6=83)
END;
(**********************************************************)
PROCEDURE CARGAR;
LABEL SALIMOS4,SALIMOS5;
BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
CLRSCR;
REPEAT
REPEAT
WINDOW(1,1,80,25);
CLRSCR;
CURSORON;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(3,2);
WRITELN( CUANTAS ONDAS CONTIENE SU ARCHIVO (1 2) ?);
RAYA_HORIZONTAL(2,79,3,WHITE);
DESCARGARTECLADO;
WINDOW(3,4,78,5);
TEXTCOLOR(YELLOW);
{$I-} READLN(ONDAS) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(33,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir);
DESCARGARTECLADO;
MAS:=READKEY
END
UNTIL ERROROSC=0;
IF (ONDAS<>1) AND (ONDAS<>2) THEN BEGIN

59

MANUAL DEL PROGRAMADOR: Unidades

SOUND(1000);
DELAY(100);
NOSOUND
END
UNTIL ONDAS IN [1,2];
WINDOW(1,1,80,25);
IF ONDAS=1 THEN BEGIN
MAS:=#251;
DISC:=1;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
CLRSCR;
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
GOTOXY(3,2);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITELN(NOMBRE DEL FICHERO : );
RAYA_HORIZONTAL(2,79,3,WHITE);
WINDOW(3,4,78,5);
TEXTCOLOR(YELLOW);
REPEAT
READLN(FILENAME);
UNTIL FILENAME<>;
WINDOW(3,4,78,24);
ASSIGN(FICHA,FILENAME);
{$I-} RESET(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS4;
END;
UNTIL ERROROSC=0;
{comprobamos la longitud del fichero por sus componentes}
LONGITUDDEDISCO:=FILESIZE(FICHA);
IF LONGITUDDEDISCO<>1 THEN BEGIN
MAS:=#27;
WINDOW(1,1,80,25);
CURSOROFF;
ERROR(32762);
DELAY(8000);
DISC:=0;
GOTO SALIMOS4

60

MANUAL DEL PROGRAMADOR: Unidades

END;
REPEAT
{$I-} READ(FICHA,VMUESTRAS) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS4;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} CLOSE(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS4;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
MODO:=2;
SETGRAPHMODE(MODO);
REJILLA;
DIBUJAR;
SALIMOS4 : IF MAS=#27 THEN BEGIN
MAS:=#251;
DISC:=0;
MODO:=2;
SETGRAPHMODE(MODO);
REJILLA
END
END;
IF ONDAS=2 THEN BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);

61

MANUAL DEL PROGRAMADOR: Unidades

CLRSCR;
MAS:=#251;
DISC:=2;
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
GOTOXY(3,2);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITELN(NOMBRE DEL FICHERO DE ONDA 1 :);
RAYA_HORIZONTAL(2,79,3,WHITE);
WINDOW(3,4,78,5);
TEXTCOLOR(YELLOW);
REPEAT
READLN(FILENAME);
UNTIL FILENAME<>;
ASSIGN(FICHA,FILENAME);
{$I-} RESET(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS5;
WINDOW(5,10,78,24);
CLRSCR
END
UNTIL ERROROSC=0;
{comprobamos la longitud del fichero por sus componentes}
LONGITUDDEDISCO:=FILESIZE(FICHA);
IF LONGITUDDEDISCO<>1 THEN BEGIN
MAS:=#27;
WINDOW(1,1,80,25);
ERROR(32762);
DELAY(8000);
GOTO SALIMOS5
END;
REPEAT
{$I-} READ(FICHA,VMUESTRAS1) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);

62

MANUAL DEL PROGRAMADOR: Unidades

WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE salir);


DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS5;
WINDOW(5,10,78,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} CLOSE(FICHA) {$I+};
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS5;
WINDOW(5,10,78,24);
CLRSCR
END
UNTIL ERROROSC=0;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
CLRSCR;
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
TEXTBACKGROUND(LIGHTBLUE);
RAYA_HORIZONTAL(2,79,3,WHITE);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(3,2);
WRITELN(NOMBRE DEL FICHERO DE ONDA 2 : );
WINDOW(3,4,78,5);
REPEAT
READLN(FILENAME);
UNTIL FILENAME<>;
ASSIGN(FICHA2,FILENAME);
{$I-} RESET(FICHA2) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;

63

MANUAL DEL PROGRAMADOR: Unidades

MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS5;
WINDOW(5,10,78,24);
CLRSCR
END
UNTIL ERROROSC=0;
{comprobamos la longitud del fichero por sus componentes}
LONGITUDDEDISCO:=FILESIZE(FICHA2);
IF LONGITUDDEDISCO<>1 THEN BEGIN
CURSOROFF;
MAS:=#27;
WINDOW(1,1,80,25);
ERROR(32762);
DELAY(8000);
GOTO SALIMOS5
END;
REPEAT
{$I-} READ(FICHA2,VMUESTRAS2) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS5;
WINDOW(5,10,78,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} CLOSE(FICHA2) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS5;
WINDOW(5,10,78,24);
CLRSCR
END
UNTIL ERROROSC=0;
MODO:=2;
SETGRAPHMODE(MODO);
REJILLA;

64

MANUAL DEL PROGRAMADOR: Unidades

FOR N:=0 TO 500 DO


BEGIN
X:=70;C:=X+N;
D1:=VMUESTRAS1[N];
D2:=VMUESTRAS2[N];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE)
END;
SALIMOS5 : IF MAS=#27 THEN BEGIN
MAS:=#251;
DISC:=0;
MODO:=2;
SETGRAPHMODE(MODO);
REJILLA
END
END
END;
(**********************************************************)
PROCEDURE MIRARPCLAB;
LABEL TERMINA;
VAR
PUNTO : POINTER;
CTDOR : INTEGER;
BEGIN
CTDOR:=0;
PORT[REGCONTROL]:=1;
PORT[REGDISPARO]:=0;
REPEAT
FIN_CONVERSION:=PORT[DATOADH];
CTDOR:=CTDOR+1;
IF CTDOR>=10000 THEN FIN_CONVERSION:=$F;
UNTIL FIN_CONVERSION<=$F;
IF CTDOR=10000 THEN
BEGIN
{$I-} GETMEM(PUNTO,IMAGESIZE(150,200,490,280)) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN GOTO TERMINA;
{$I-} GETIMAGE(150,200,490,280,PUNTO^) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN GOTO TERMINA;
SETFILLSTYLE(1,RED);
BAR(150,200,490,280);
SETCOLOR(YELLOW);
SETLINESTYLE(0,1,3);
RECTANGLE(160,210,480,270);
SETLINESTYLE(0,0,1);
OUTTEXTXY(200,225, NO LLEGAN DATOS AL PUERTO);
OUTTEXTXY(200,245,POSIBLEMENTE PCLAB NO CONECTADA);
WRITELN(^g);
DELAY(8000);

65

MANUAL DEL PROGRAMADOR: Unidades

PUTIMAGE(150,200,PUNTO^,COPYPUT);
TERMINA :
PCLAB:=FALSE
END
ELSE PCLAB:=TRUE
END;
(**********************************************************)
PROCEDURE VISUALIZAR;
LABEL SINPCLAB,SINPCLAB1,SINPCLAB2;
BEGIN
REPEAT
SETFILLSTYLE(1,BLACK);
BAR(0,448,640,473);
SETCOLOR(YELLOW);
OUTTEXTXY(0,450,CANAL );
OUTTEXTXY(100,450,CANAL );
OUTTEXTXY(200,450, MBOS);
OUTTEXTXY(300,450, ALVAR);
OUTTEXTXY(400,450, ARGAR);
OUTTEXTXY(500,450,C RSOR);
OUTTEXTXY(600,450,SA IR);
SETFILLSTYLE(1,RED);
BAR(0,448,55,460);
SETCOLOR(YELLOW);
OUTTEXTXY(0,450,CANAL );
SETCOLOR(3); {azul claro}
OUTTEXTXY(0,450,
1);
OUTTEXTXY(100,450,
2);
OUTTEXTXY(200,450,A);
OUTTEXTXY(300,450,S);
OUTTEXTXY(400,450,C);
OUTTEXTXY(500,450, U);
OUTTEXTXY(600,450, L);
XXX:=0;
OP:=0;
REPEAT
OP5:=ORD(READKEY);
IF OP5=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>6 THEN XXX:=0;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-5,448,(100*YYY)+55,460);
SETCOLOR(YELLOW);
IF YYY=0 THEN OUTTEXTXY(0,450,CANAL );
IF YYY=1 THEN OUTTEXTXY(100,450,CANAL );
IF YYY=2 THEN OUTTEXTXY(200,450, MBOS);
IF YYY=3 THEN OUTTEXTXY(300,450, ALVAR);
IF YYY=4 THEN OUTTEXTXY(400,450, ARGAR);
IF YYY=5 THEN OUTTEXTXY(500,450,C RSOR);

66

MANUAL DEL PROGRAMADOR: Unidades

IF YYY=6 THEN OUTTEXTXY(600,450,SA IR);


SETFILLSTYLE(1,RED);
BAR((100*XXX)-5,448,(100*XXX)+55,460);
SETCOLOR(YELLOW);
IF XXX=0 THEN OUTTEXTXY(0,450,CANAL );
IF XXX=1 THEN OUTTEXTXY(100,450,CANAL );
IF XXX=2 THEN OUTTEXTXY(200,450, MBOS);
IF XXX=3 THEN OUTTEXTXY(300,450, ALVAR);
IF XXX=4 THEN OUTTEXTXY(400,450, ARGAR);
IF XXX=5 THEN OUTTEXTXY(500,450,C RSOR);
IF XXX=6 THEN OUTTEXTXY(600,450,SA IR)
END;
SETCOLOR(3); {azul claro}
OUTTEXTXY(0,450,
1);
OUTTEXTXY(100,450,
2);
OUTTEXTXY(200,450,A);
OUTTEXTXY(300,450,S);
OUTTEXTXY(400,450,C);
OUTTEXTXY(500,450, U);
OUTTEXTXY(600,450, L);
IF OP5=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<0 THEN XXX:=6;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-5,448,(100*YYY)+55,460);
SETCOLOR(YELLOW);
IF YYY=0 THEN OUTTEXTXY(0,450,CANAL );
IF YYY=1 THEN OUTTEXTXY(100,450,CANAL );
IF YYY=2 THEN OUTTEXTXY(200,450, MBOS);
IF YYY=3 THEN OUTTEXTXY(300,450, ALVAR);
IF YYY=4 THEN OUTTEXTXY(400,450, ARGAR);
IF YYY=5 THEN OUTTEXTXY(500,450,C RSOR);
IF YYY=6 THEN OUTTEXTXY(600,450,SA IR);
SETFILLSTYLE(1,RED);
BAR((100*XXX)-5,448,(100*XXX)+55,460);
SETCOLOR(YELLOW);
IF XXX=0 THEN OUTTEXTXY(0,450,CANAL );
IF XXX=1 THEN OUTTEXTXY(100,450,CANAL );
IF XXX=2 THEN OUTTEXTXY(200,450, MBOS);
IF XXX=3 THEN OUTTEXTXY(300,450, ALVAR);
IF XXX=4 THEN OUTTEXTXY(400,450, ARGAR);
IF XXX=5 THEN OUTTEXTXY(500,450,C RSOR);
IF XXX=6 THEN OUTTEXTXY(600,450,SA IR)
END;
SETCOLOR(3); {azul claro}
OUTTEXTXY(0,450,
1);
OUTTEXTXY(100,450,
2);
OUTTEXTXY(200,450,A);
OUTTEXTXY(300,450,S);
OUTTEXTXY(400,450,C);
OUTTEXTXY(500,450, U);
OUTTEXTXY(600,450, L);
UNTIL (OP5=13) OR (OP5=64) OR (OP5=49) OR (OP5=50) OR (OP5=97)
OR (OP5=65) OR (OP5=115) OR (OP5=83) OR (OP5=99) OR (OP5=67)

67

MANUAL DEL PROGRAMADOR: Unidades

OR (OP5=117) OR (OP5=85) OR (OP5=108) OR (OP5=76);


IF (OP5=13) OR (OP5=49) OR (OP5=50) OR (OP5=97)
OR (OP5=65) OR (OP5=115) OR (OP5=83) OR (OP5=99) OR (OP5=67)
OR (OP5=117) OR (OP5=85) THEN BEGIN
IF ((XXX=0) AND (OP5=13)) OR (OP5=49) THEN BEGIN
MIRARPCLAB;
IF PCLAB=FALSE THEN BEGIN
PCLAB:=TRUE;
GOTO SINPCLAB
END;
DISC:=1;
SETFILLSTYLE(1,BLACK);
BAR(0,0,640,340);
SS:=SS1; RR:=RR1; CANAL:=CAN1;
REPEAT
REJILLA;
FOR NN:=0 TO 10 DO BEGIN
PROGRAMA(SS,RR,CANAL)
END
UNTIL KEYPRESSED;
SINPCLAB :
PORT[REGCONTROL]:=0
END;
IF ((XXX=1) AND (OP5=13)) OR (OP5=50) THEN BEGIN
MIRARPCLAB;
IF PCLAB=FALSE THEN BEGIN
PCLAB:=TRUE;
GOTO SINPCLAB1
END;
DISC:=3;
SETFILLSTYLE(1,BLACK);
BAR(0,0,640,340);
SS:=SS2; RR:=RR2; CANAL:=CAN2;
REPEAT
REJILLA;
FOR NN:=0 TO 10 DO BEGIN
PROGRAMA(SS,RR,CANAL)
END
UNTIL KEYPRESSED;
SINPCLAB1 :
PORT[REGCONTROL]:=0
END;
IF ((XXX=2) AND (OP5=13)) OR (OP5=97) OR (OP5=65) THEN BEGIN
MIRARPCLAB;
IF PCLAB=FALSE THEN BEGIN
PCLAB:=TRUE;
GOTO SINPCLAB2
END;
DISC:=2;
SETFILLSTYLE(1,BLACK);
BAR(0,0,640,340);
AMBOS(SS1,SS2,RR1,RR2,CAN1,CAN2);
SINPCLAB2 :
END;
IF ((XXX=3) AND (OP5=13)) OR (OP5=115) OR (OP5=83) THEN BEGIN

68

MANUAL DEL PROGRAMADOR: Unidades

SETFILLSTYLE(1,BLACK);
BAR(0,448,640,460);
SALVAR
END;
IF ((XXX=4) AND (OP5=13)) OR (OP5=99) OR (OP5=67) THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(0,448,640,460);
CARGAR
END;
IF ((XXX=5) AND (OP5=13)) OR (OP5=117) OR (OP5=85) THEN BEGIN
CURSOR
END
END
UNTIL (XXX=6) OR (OP5=64) OR (OP5=108) OR (OP5=76)
END;
(**********************************************************)
PROCEDURE TIME;
BEGIN
SETFILLSTYLE(1,RED);
BAR(145,448,240,460);
SETCOLOR(YELLOW);
OUTTEXTXY(150,450, 1.6 ms/div);
OUTTEXTXY(300,450,1. ms/div );
OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,1);
OUTTEXTXY(300,450, 6);
OUTTEXTXY(450,450, S);
SETCOLOR(YELLOW);
XXX:=1;
OP:=0;
REPEAT
OP7:=ORD(READKEY);
IF OP7=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>3 THEN XXX:=1;
SETFILLSTYLE(1,BLACK);
BAR((150*YYY)-5,448,(150*YYY)+90,460);
SETCOLOR(YELLOW);
IF YYY=1 THEN OUTTEXTXY(150,450, 1.6 ms/div);
IF YYY=2 THEN OUTTEXTXY(300,450,1. ms/div );
IF YYY=3 THEN OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,1);
OUTTEXTXY(300,450, 6);
OUTTEXTXY(450,450, S);
SETCOLOR(YELLOW);
SETFILLSTYLE(1,RED);
BAR((150*XXX)-5,448,(150*XXX)+90,460);
SETCOLOR(YELLOW);

69

MANUAL DEL PROGRAMADOR: Unidades

IF XXX=1 THEN OUTTEXTXY(150,450, 1.6 ms/div);


IF XXX=2 THEN OUTTEXTXY(300,450,1. ms/div );
IF XXX=3 THEN OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,1);
OUTTEXTXY(300,450, 6);
OUTTEXTXY(450,450, S);
SETCOLOR(YELLOW)
END;
IF OP7=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<1 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((150*YYY)-5,448,(150*YYY)+90,460);
SETCOLOR(YELLOW);
IF YYY=1 THEN OUTTEXTXY(150,450, 1.6 ms/div);
IF YYY=2 THEN OUTTEXTXY(300,450,1. ms/div );
IF YYY=3 THEN OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,1);
OUTTEXTXY(300,450, 6);
OUTTEXTXY(450,450, S);
SETCOLOR(YELLOW);
SETFILLSTYLE(1,RED);
BAR((150*XXX)-5,448,(150*XXX)+90,460);
SETCOLOR(YELLOW);
IF XXX=1 THEN OUTTEXTXY(150,450, 1.6 ms/div);
IF XXX=2 THEN OUTTEXTXY(300,450,1. ms/div );
IF XXX=3 THEN OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,1);
OUTTEXTXY(300,450, 6);
OUTTEXTXY(450,450, S);
SETCOLOR(YELLOW)
END
UNTIL (OP7=13) OR (OP7=64) OR (OP7=49) OR (OP7=54) OR (OP7=115) OR (OP7=83);
IF (OP7=13) OR (OP7=49) OR (OP7=54) THEN BEGIN
IF (XXX=1) OR (OP7=49) THEN BEGIN
INCREMENTO:=1;
HASTA:=500;
TIEMPO:=11.6;
SETFILLSTYLE(1,BLACK);
BAR(310,375,400,390);
STR(TIEMPO:2:2,TIRO);
SETCOLOR(RED);
OUTTEXTXY(310,380,TIRO);
OUTTEXTXY(350,380,ms/div)
END;
IF (XXX=2) OR (OP7=54) THEN BEGIN
INCREMENTO:=30;
HASTA:=510;
TIEMPO:=1.6;

70

MANUAL DEL PROGRAMADOR: Unidades

SETFILLSTYLE(1,BLACK);
BAR(310,375,400,390);
STR(TIEMPO:2:2,TIRO);
SETCOLOR(RED);
OUTTEXTXY(310,380,TIRO);
OUTTEXTXY(350,380,ms/div)
END
END;
IF (XXX=3) OR (OP7=64) OR (OP7=115) OR (OP7=83) THEN END;
(******************PROCEDIMIENTO.PRINCIPAL*****************)
PROCEDURE VISUALIZACION_DE_ONDAS;
VAR
COTE1,COTE2:REAL;
VALOX,VALOY:INTEGER;
BEGIN
CAN1:=0; CAN2:=1;
SS1:=7.12; SS2:=7.12;
RR1:=240; RR2:=240;
WW:=40; YY:=105;
ESCALA1:=2.5;
ESCALA2:=2.5;
TIEMPO:=11.6;
DISC:=0;
HASTA:=500;
INCREMENTO:=1;
MODO:=GETGRAPHMODE;
{se ejecutar si la definicin es buena}
IF (GETMAXX>638) AND (GETMAXY>478) THEN BEGIN
MODO:=2;
SETGRAPHMODE(MODO);
CLEARVIEWPORT;
VALOX:=GETMAXX;
COTE1:=VALOX/639;
VALOY:=GETMAXY;
COTE2:=VALOY/479;
FOR INICIAL:=0 TO 5000 DO
BEGIN
VMUESTRAS[INICIAL]:=0;
VMUESTRAS1[INICIAL]:=0;
VMUESTRAS2[INICIAL]:=0
END;
REJILLA;

REPEAT
{dibujado de las teclas de funcin}

71

MANUAL DEL PROGRAMADOR: Unidades

BEGIN
SETFILLSTYLE(1,MAGENTA);
SETCOLOR(WHITE);
BAR(10,100,60,135);
OUTTEXTXY(28,105,F1);
OUTTEXTXY(15,120,AYUDA);
BAR(10,145,60,180);
OUTTEXTXY(28,150,F2);
OUTTEXTXY(15,165,V/DIV);
BAR(10,190,60,225);
OUTTEXTXY(28,195,F3);
OUTTEXTXY(20,210,TIME);
BAR(10,235,60,270);
OUTTEXTXY(28,240,F4);
OUTTEXTXY(11,255,VISUAL);
BAR(10,280,60,315);
OUTTEXTXY(28,285,F5);
OUTTEXTXY(17,300,CANAL);
RECTANGLE(10,100,60,135);
RECTANGLE(10,145,60,180);
RECTANGLE(10,190,60,225);
RECTANGLE(10,235,60,270);
RECTANGLE(10,280,60,315)
END;
SETFILLSTYLE(1,BLACK);
BAR(0,448,640,480);
SETCOLOR(YELLOW);
OUTTEXTXY(10,460, .-VOLTS/DIV );
OUTTEXTXY(140,460, .- TIME );
OUTTEXTXY(271,460, .-VISUALIZA);
OUTTEXTXY(400,460, .- CANALES );
OUTTEXTXY(530,460, .- SALIR );
SETFILLSTYLE(1,RED);
BAR(10,455,110,473);
SETCOLOR(YELLOW);
OUTTEXTXY(10,460, .-VOLTS/DIV );
SETCOLOR(3); {azul claro}
OUTTEXTXY(10,460,1);
OUTTEXTXY(140,460, 2);
OUTTEXTXY(271,460,3);
OUTTEXTXY(400,460, 4);
OUTTEXTXY(530,460, 5);
SETCOLOR(YELLOW);
XX:=0;
REPEAT
OP:=ORD(READKEY);
IF OP=77 THEN BEGIN
YY:=XX; XX:=XX+1;
IF XX>4 THEN XX:=0;
SETFILLSTYLE(1,BLACK);
BAR((130*YY)+10,455,(130*YY)+110,473);
SETCOLOR(YELLOW);
IF YY=0 THEN OUTTEXTXY(10,460, .-VOLTS/DIV );
IF YY=1 THEN OUTTEXTXY(140,460, .- TIME );

72

MANUAL DEL PROGRAMADOR: Unidades

IF YY=2 THEN OUTTEXTXY(271,460, .-VISUALIZA);


IF YY=3 THEN OUTTEXTXY(400,460, .- CANALES );
IF YY=4 THEN OUTTEXTXY(530,460, .- SALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(10,460,1);
OUTTEXTXY(140,460, 2);
OUTTEXTXY(271,460,3);
OUTTEXTXY(400,460, 4);
OUTTEXTXY(530,460, 5);
SETCOLOR(YELLOW);
SETFILLSTYLE(1,RED);
BAR((130*XX)+10,455,(130*XX)+110,473);
SETCOLOR(YELLOW);
IF XX=0 THEN OUTTEXTXY(10,460, .-VOLTS/DIV );
IF XX=1 THEN OUTTEXTXY(140,460, .- TIME );
IF XX=2 THEN OUTTEXTXY(271,460, .-VISUALIZA);
IF XX=3 THEN OUTTEXTXY(400,460, .- CANALES );
IF XX=4 THEN OUTTEXTXY(530,460, .- SALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(10,460,1);
OUTTEXTXY(140,460, 2);
OUTTEXTXY(271,460,3);
OUTTEXTXY(400,460, 4);
OUTTEXTXY(530,460, 5);
SETCOLOR(YELLOW)
END;
IF OP=75 THEN BEGIN
YY:=XX; XX:=XX-1;
IF XX<0 THEN XX:=4;
SETFILLSTYLE(1,BLACK);
BAR((130*YY)+10,455,(130*YY)+110,473);
SETCOLOR(YELLOW);
IF YY=0 THEN OUTTEXTXY(10,460, .-VOLTS/DIV );
IF YY=1 THEN OUTTEXTXY(140,460, .- TIME );
IF YY=2 THEN OUTTEXTXY(271,460, .-VISUALIZA);
IF YY=3 THEN OUTTEXTXY(400,460, .- CANALES );
IF YY=4 THEN OUTTEXTXY(530,460, .- SALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(10,460,1);
OUTTEXTXY(140,460, 2);
OUTTEXTXY(271,460,3);
OUTTEXTXY(400,460, 4);
OUTTEXTXY(530,460, 5);
SETCOLOR(YELLOW);
SETFILLSTYLE(1,RED);
BAR((130*XX)+10,455,(130*XX)+110,473);
SETCOLOR(YELLOW);
IF XX=0 THEN OUTTEXTXY(10,460, .-VOLTS/DIV );
IF XX=1 THEN OUTTEXTXY(140,460, .- TIME );
IF XX=2 THEN OUTTEXTXY(271,460, .-VISUALIZA);
IF XX=3 THEN OUTTEXTXY(400,460, .- CANALES );
IF XX=4 THEN OUTTEXTXY(530,460, .- SALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(10,460,1);
OUTTEXTXY(140,460, 2);

73

MANUAL DEL PROGRAMADOR: Unidades

OUTTEXTXY(271,460,3);
OUTTEXTXY(400,460, 4);
OUTTEXTXY(530,460, 5);
SETCOLOR(YELLOW)
END

UNTIL (OP=13) OR (OP=60) OR (OP=61) OR (OP=62) OR (OP=63) OR (OP=64)


OR (OP=49) OR (OP=50) OR (OP=51) OR (OP=52) OR (OP=53) OR (OP=59);
{desdibujado de algunas teclas de funcin}
BEGIN
SETFILLSTYLE(1,BLACK);
BAR(10,100,60,135);
BAR(10,145,60,180);
BAR(10,190,60,225);
BAR(10,235,60,270);
BAR(10,280,60,315)
END;
IF OP=13 THEN BEGIN
IF XX=0 THEN
IF XX=1 THEN
IF XX=2 THEN
IF XX=3 THEN
END;

OP:=60;
OP:=61;
OP:=62;
OP:=63

IF OP=59 THEN AYUDA_OSCILOSCOPIO;


IF (OP=60) OR (OP=49) THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(0,455,640,473);
VOLTIOS
END;
IF (OP=61) OR (OP=50) THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(0,455,640,473);
TIME
END;
IF (OP=62) OR (OP=51) THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(0,455,640,473);
VISUALIZAR
END;
IF (OP=63) OR (OP=52) THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(0,455,640,473);
CANALES
END;

74

MANUAL DEL PROGRAMADOR: Unidades

UNTIL (OP=13) OR (OP=64) OR (OP=53);


SETFILLSTYLE(1,BLACK);
{borrado de salir}
BAR(580,100,630,135);
SETCOLOR (BLACK);
OUTTEXTXY(1,70,
);
SETCOLOR(WHITE);
OUTTEXTXY(1,70,APAGADO);
REPEAT
UNTIL KEYPRESSED
END

{de la definicin de condicin}

ELSE
BEGIN
VALOX:=GETMAXX;
COTE1:=VALOX/639;
VALOY:=GETMAXY;
COTE2:=VALOY/479;
SETFILLSTYLE(1,7);
BAR
(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
SETCOLOR(BLACK);
RECTANGLE
(ROUND(160*COTE1),ROUND(210*COTE2),ROUND(480*COTE1),ROUND(270*COTE2));
OUTTEXTXY
(ROUND(190*COTE1),ROUND(220*COTE2),NO EXISTE DEFINICION SUFICIENTE);
OUTTEXTXY
(ROUND(190*COTE1),ROUND(240*COTE2), PARA EJECUTAR EL OSCILOSCOPIO);
FOR VALOX:=1 TO 5 DO
BEGIN
SOUND(1000);
DELAY(100);
SOUND(800);
DELAY(80);
NOSOUND;
END;
DELAY(4000);
SETFILLSTYLE(1,BLACK);
BAR
(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
END
END;
{del conjunto}
(*************************************************************************)
END.

75

3.- FICHEROS INCLUDE

La utilizacin de ficheros Include hace comprensible el programa principal. Por


un lado, cada fichero, al contener una aplicacin o conjunto de procedimientos acorta el
tamao del programa principal; y por otro, al aadirlo el compilador al programa principal,
ste se ejecutar como perteneciente a l adquiriendo todas las directivas y variables globales
que son utilizadas en el mismo.

Los ficheros Include se definen, pus, como archivos de texto en ASCII que
aadir el compilador en forma de cdigo en el lugar del programa principal donde sean
llamados mediante la directiva {$I <nombre de fichero>}. Obedecern, por tanto a las
directivas de compilacin con que se compile el programa principal.

Estos archivos son : AYUDA, GEN, EJECUTA.

3.1.- AYUDA

3.1.1.- DESCRIPCIN DEL ARCHIVO.

Es el archivo que contiene los procedimientos de desarrollo de la ayuda en


lnea del osciloscopio (visualizacin de formas de onda). Por ello es llamado en dicha unidad
en su compilacin como archivo .TPU (unidad de Turbo Pascal).

3.1.2.- VARIABLES GLOBALES.


76

MANUAL DEL PROGRAMADOR: Ficheros Include

Son las que se declaran como tal en la unidad VISUAL.

3.1.3.- VARIABLES LOCALES.

Son las definidas en cada procedimiento, y que aqu son las siguientes :

LABEL SAL;
VAR
TECLA
APUNTE
DIME
ER

: CHAR;
: POINTER;
: WORD;
: INTEGER;

3.1.4.- LISTADO.

PROCEDURE AYUDA_OSCILOSCOPIO;
LABEL SAL;
VAR
TECLA:CHAR;
APUNTE:POINTER;
DIME:WORD;
ER:INTEGER;
BEGIN
DIME:=IMAGESIZE(98,48,402,302);
{$I-} GETMEM(APUNTE,DIME) {$I+};
ER:=IORESULT;
IF ER<>0 THEN GOTO SAL;
{$I-} GETIMAGE(98,48,402,302,APUNTE^) {$I+};
ER:=IORESULT;
IF ER<>0 THEN GOTO SAL;
BEGIN
SETFILLSTYLE(1,BLUE);
SETCOLOR(YELLOW);
BAR(98,48,402,302);
OUTTEXTXY(115,55,>>> VOLT/DIV);

77

MANUAL DEL PROGRAMADOR: Ficheros Include

SETCOLOR(LIGHTMAGENTA);
OUTTEXTXY(370,55,F2);
SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,Funcin para determinar en eje de);
OUTTEXTXY(115,85,ordenadas la tensin por divisin,);
OUTTEXTXY(115,95,con unos rangos de tensin deter-);
OUTTEXTXY(115,105,minados de: 2.5, 1, 0.25 VOLT/DIV.);
OUTTEXTXY(115,115,Se tendr presente que la inicia-);
OUTTEXTXY(115,125,lizacin la realiza el programa);
OUTTEXTXY(115,135,en 2.5 VOLT/DIV. Por tanto en el);
OUTTEXTXY(115,145,caso de utilizar la aplicacin de);
OUTTEXTXY(115,155,cargar ondas desde fichero, el u-);
OUTTEXTXY(115,165,suario inicializar de forma ade-);
OUTTEXTXY(115,175,cuada el valor de la tensin.);
OUTTEXTXY(115,185,La pantalla de visualin de formas);
OUTTEXTXY(115,195,de onda est dividida con una al-);
OUTTEXTXY(115,205,tura de ocho cuadrculas, consi-);
OUTTEXTXY(115,215,guiendo una escala mxima de 20);
OUTTEXTXY(115,225,voltios de pico a pico, y mnima);
OUTTEXTXY(115,235,de 2 voltios de pico a pico.Cada);
OUTTEXTXY(115,245,cuadrcula a su vez contiene cin-);
OUTTEXTXY(115,255,co divisiones, aumentando la pre-);
OUTTEXTXY(115,265,cisin en diez veces cada una de);
OUTTEXTXY(115,275,stas ltimas con el cursor.);
OUTTEXTXY(185,290,>>> siguiente, pulse TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
BEGIN
BAR(98,48,402,302);
SETCOLOR(YELLOW);
OUTTEXTXY(115,55,>>> TIME);
SETCOLOR(LIGHTMAGENTA);
OUTTEXTXY(370,55,F3);
SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,Funcin para determinar en eje de);
OUTTEXTXY(115,85,abcisas los tiempos de representa-);
OUTTEXTXY(115,95,cin de las ondas. Estos tiempos);
OUTTEXTXY(115,105,son para ambos canales y pueden);
OUTTEXTXY(115,115,variarse en dos valores distintos.);
OUTTEXTXY(115,125,11.6 ms/DIV 1.6 ms/DIV. La pan-);
OUTTEXTXY(115,135,talla se halla dividida horizon--);
OUTTEXTXY(115,145,talmente en diez cuadrculas con);
OUTTEXTXY(115,155,cinco partes cada una, obtenien-);
OUTTEXTXY(115,165,do una divisin de 50 partes por);
OUTTEXTXY(115,175,cuadrcula, si realizamos segui-);
OUTTEXTXY(115,185,miento con el cursor.);
OUTTEXTXY(115,195,
);
OUTTEXTXY(115,205,
);
OUTTEXTXY(115,215,
);
OUTTEXTXY(115,225,
);
OUTTEXTXY(115,235,
);
OUTTEXTXY(115,245,
);

78

MANUAL DEL PROGRAMADOR: Ficheros Include

OUTTEXTXY(115,255,
);
OUTTEXTXY(115,265,
);
OUTTEXTXY(115,275,
);
OUTTEXTXY(185,290,>>> siguiente, pulse TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
BEGIN
BAR(98,48,402,302);
SETCOLOR(YELLOW);
OUTTEXTXY(115,55,>>> VISUALIZA);
SETCOLOR(LIGHTMAGENTA);
OUTTEXTXY(370,55,F4);
SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,Es la opcin ms compleja de las);
OUTTEXTXY(115,85,que se presentan. Con ella se per-);
OUTTEXTXY(115,95,mite realizar el conjunto de ope-);
OUTTEXTXY(115,105,raciones que caracterizan el osci-);
OUTTEXTXY(115,115,loscopio.);
OUTTEXTXY(115,125,Segn la eleccin visualizamos el);
OUTTEXTXY(115,135,CANAL 1, el CANAL 2 o AMBOS; man-);
OUTTEXTXY(115,145,teniendose la visualizacin en);
OUTTEXTXY(115,155,pantalla hasta la pulsacin de una);
OUTTEXTXY(115,165,tecla.);
OUTTEXTXY(115,175,Una vez determinada la(s) onda(s));
OUTTEXTXY(115,185,que permanece(n) en pantalla, po-);
OUTTEXTXY(115,195,demos salvarla(s) sobre impresora);
OUTTEXTXY(115,205,o sobre disco, siguiendo las ins-);
OUTTEXTXY(115,215,trucciones que se dan a tal efecto.);
OUTTEXTXY(115,225,Por ltimo sta opcin permite);
OUTTEXTXY(115,235,cargar formas de onda que se han);
OUTTEXTXY(115,245,salvado previamente sobre disco;);
OUTTEXTXY(115,255,adems de realizar seguimiento con);
OUTTEXTXY(115,265,el cursor en tensin y en frecuen-);
OUTTEXTXY(115,275,cia.);
OUTTEXTXY(185,290,>>> siguiente, pulse TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
BEGIN
BAR(98,48,402,302);
SETCOLOR(YELLOW);
OUTTEXTXY(115,55,>>> CANALES);
SETCOLOR(LIGHTMAGENTA);
OUTTEXTXY(370,55,F5);
SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,Opcin simple para la asignacin);
OUTTEXTXY(115,85,a los canales (1 y/o 2) del osci-);
OUTTEXTXY(115,95,loscopio de los correspondientes);
OUTTEXTXY(115,105,de la tarjeta PCLAB-812 sobre los);
OUTTEXTXY(115,115,que realizar el test.
);
OUTTEXTXY(115,125,(Con un total de 16, numerados de);
OUTTEXTXY(115,135,0 a 15).);

79

MANUAL DEL PROGRAMADOR: Ficheros Include

OUTTEXTXY(115,145,Por defecto al arrancar el progra-);


OUTTEXTXY(115,155,ma se hallan asignados el canal 0);
OUTTEXTXY(115,165,de la targeta PCLAB-812 al canal 1);
OUTTEXTXY(115,175,del osciloscopio, y el canal 1 de);
OUTTEXTXY(115,185,la targeta al canal 2 del oscilos-);
OUTTEXTXY(115,195,copio.);
OUTTEXTXY(115,205,
);
OUTTEXTXY(115,215,
);
OUTTEXTXY(115,225,
);
OUTTEXTXY(115,235,
);
OUTTEXTXY(115,245,
);
OUTTEXTXY(115,255,
);
OUTTEXTXY(115,265,
);
OUTTEXTXY(115,275,
);
OUTTEXTXY(185,290,>>> siguiente, pulse TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
BEGIN
BAR(98,48,402,302);
SETCOLOR(YELLOW);
OUTTEXTXY(115,55,>>> SALIR);
SETCOLOR(LIGHTMAGENTA);
OUTTEXTXY(370,55,F6);
SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,Opcin para salir del osciloscopio);
OUTTEXTXY(115,85,y regresar al men principal.);
OUTTEXTXY(115,95,Con la verificacin mediante la);
OUTTEXTXY(115,105,seal de APAGADO, se ha materia-);
OUTTEXTXY(115,115,lizado la salida, y cualquier re-);
OUTTEXTXY(115,125,torno ser imposible. En este mo-);
OUTTEXTXY(115,135,mento la pulsacin de cualquier);
OUTTEXTXY(115,145,tecla nos devolver al men prin-);
OUTTEXTXY(115,155,cipal.
);
OUTTEXTXY(115,165,);
OUTTEXTXY(115,175,Desde cualquier men o submen se);
OUTTEXTXY(115,185,puede salir al men o submen an-);
OUTTEXTXY(115,195,terior con slo pulsar la tecla);
OUTTEXTXY(115,205,F6. O elegir la opcin "SALIR".);
OUTTEXTXY(115,215,
);
OUTTEXTXY(115,225,
);
OUTTEXTXY(115,235,
);
OUTTEXTXY(115,245,
);
OUTTEXTXY(115,255,
);
OUTTEXTXY(115,265,
);
OUTTEXTXY(115,275,
);
OUTTEXTXY(185,290,>>> siguiente, pulse TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
BEGIN
BAR(98,48,402,302);
SETCOLOR(YELLOW);
OUTTEXTXY(115,55,
GENERAL);

80

MANUAL DEL PROGRAMADOR: Ficheros Include

SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,El entorno de utilizacin del os-);
OUTTEXTXY(115,85,ciloscopio ha sido ideado para que);
OUTTEXTXY(115,95,su manejo sea sencillo y cmodo);
OUTTEXTXY(115,105,al usuario. Por ello las letras);
OUTTEXTXY(115,115,en azul claro para el monitor en);
OUTTEXTXY(115,125,color permiten un eficaz y rpido);
OUTTEXTXY(115,135,uso de las opciones presentadas en);
OUTTEXTXY(115,145,pantalla. Esto unido a las teclas);
OUTTEXTXY(115,155,de funcin del men principal y a);
OUTTEXTXY(115,165,la eleccin si procede con teclas);
OUTTEXTXY(115,175,de cursor (e INTRO), hace que se);
OUTTEXTXY(115,185,optimice el tiempo de eleccin y);
OUTTEXTXY(115,195,que la misma no sea una tarea pe-);
OUTTEXTXY(115,205,sada.);
OUTTEXTXY(115,215,
);
OUTTEXTXY(115,225,
);
OUTTEXTXY(115,235,
);
OUTTEXTXY(115,245,
);
OUTTEXTXY(115,255,
);
OUTTEXTXY(115,265,
FIN
);
OUTTEXTXY(115,275,
);
OUTTEXTXY(270,290,>>> pulse TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
PUTIMAGE(98,48,APUNTE^,COPYPUT);
FREEMEM(APUNTE,DIME);
SAL :
END;

81

MANUAL DEL PROGRAMADOR: Ficheros Include

3.2.- GEN

3.2.1.- DESCRIPCIN DEL ARCHIVO.

Es el archivo que contiene los procedimientos utilizados en la opcin


FICHERO PSP, y que verifica y convierte el formato del fichero PSPICE que se le pasa.

3.2.2.- VARIABLES GLOBALES.

Como fichero Include, son las pertenecientes como globales al programa


principal.

3.2.3.- VARIABLES LOCALES.

Son las determinadas en cada procedimiento, y se limita su uso al mismo (o


funcin). (Ver listado).

3.2.4.- LISTADO.

PROCEDURE FICHERO_PSPICE;
LABEL FIN;
CONST
SALIDA : CHAR = ;
VAR
AMPLI : FILE OF CHAR;

82

MANUAL DEL PROGRAMADOR: Ficheros Include

NOM2 : STRING[255];
(**********************************************************)
PROCEDURE PROCESO_DE_ERROR(ERROR0:INTEGER);
VAR
X,Y:BYTE;
BEGIN
X:=WHEREX;
Y:=WHEREY;
WINDOW(1,1,80,25);
ERROR(ERROR0);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(17,22);
WRITE(>> pulse CUALQUIER TECLA para reintentar, ESC. men principal);
DESCARGARTECLADO;
SALIDA:=READKEY;
WINDOW(3,14,78,22);{----------borrado parcial de pantalla}
CLRSCR;
WINDOW(3,2,78,22);{------------recuperacin de la pantalla principal}
GOTOXY(X,Y);
END;
(**********************************************************)
PROCEDURE CERRAR_FICHERO;
LABEL FIN;
VAR
ERROR3:INTEGER;
BEGIN
REPEAT
{$I-} CLOSE(AMPLI) {$I+};
ERROR3:=IORESULT;
IF ERROR3<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR3);
IF SALIDA=#27
THEN GOTO FIN
END
UNTIL ERROR3=0;
FIN:
END;
(**********************************************************)
(*--rutina de apertura del fichero--*)
PROCEDURE PRIMERA_APERTURA_DE_FICHERO;
LABEL FIN;

83

MANUAL DEL PROGRAMADOR: Ficheros Include

VAR
ERROR1,JC:INTEGER;
X,Y:BYTE;
NOMPSP1:STRING;
BEGIN
REPEAT
REPEAT
CLRSCR;
PULSA:= ;
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
WRITELN (>>> INTRODUZCA UNIDAD Y NOMBRE DEL FICHERO (FICHERO PSPICE .TXT):
);
RAYA_HORIZONTAL(0,77,3,15);
TEXTCOLOR(COLOR6);
GOTOXY(2,2);
CURSORON;
DESCARGARTECLADO;
REPEAT
X:=WHEREX;
Y:=WHEREY;
{$I-} READLN (NOM) {$I+};
WRITELN;
ERROR1:=IORESULT;
IF NOM= THEN GOTOXY(X,Y);
UNTIL (NOM<>) AND (ERROR1=0);
CURSOROFF;
IF ERROR1<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR1);
IF SALIDA=#27 THEN GOTO FIN
END;
IF ( POS( ,NOM) <> 0 ) OR
( POS(",NOM) <> 0 ) OR
( POS(#,NOM) <> 0 ) OR
( POS(;,NOM) <> 0 ) THEN BEGIN
ERROR1:=32765;
PROCESO_DE_ERROR(ERROR1);
IF SALIDA=#27 THEN GOTO FIN
END;
IF LENGTH(NOM)>77 THEN ERROR1:=2;
UNTIL ERROR1=0;
ASSIGN (AMPLI,NOM);
{$I-} RESET (AMPLI) {$I+};
ERROR1:=IORESULT;
IF ERROR1<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR1);
IF SALIDA=#27 THEN
BEGIN
GOTO FIN;
CERRAR_FICHERO
END
END;

84

MANUAL DEL PROGRAMADOR: Ficheros Include

IF ERROR1=0 THEN
BEGIN
NOMPSP1:=NOM;
WHILE POS(\,NOMPSP1)<>0 DO
DELETE(NOMPSP1,1,POS(\,NOMPSP1));
FOR JC:=1 TO LENGTH(NOMPSP1) DO
NOMPSP1[JC]:=UPCASE(NOMPSP1[JC]);
DELETE(NOMPSP1,1,POS(.,NOMPSP1));
IF NOMPSP1<>TXT THEN
BEGIN
PROCESO_DE_ERROR(32767);
ERROR1:=1;
IF SALIDA=#27 THEN GOTO FIN
END
END
UNTIL ERROR1=0;
FIN:
END;
(**********************************************************)
PROCEDURE APERTURA_DE_FICHERO_IMPLICITA;
VAR
ERROR2:INTEGER;
BEGIN
REPEAT
{$I-} RESET (AMPLI) {$I+};
ERROR2:=IORESULT;
IF ERROR2<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR2);
END
UNTIL ERROR2=0
END;
(**********************************************************)
PROCEDURE CONTAR_PASOS_DE_TIEMPO;
LABEL FIN;
VAR
PAS:CHAR;
PASOS1,ERROR4:INTEGER;
X,Y,A,B:BYTE;
BEGIN
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
BEGIN
APERTURA_DE_FICHERO_IMPLICITA;
IF SALIDA=#27 THEN GOTO FIN;

85

MANUAL DEL PROGRAMADOR: Ficheros Include

PASOS1:=0;
REPEAT
REPEAT
{$I-} READ(AMPLI,PAS) {$I+};
ERROR4:=IORESULT;
IF ERROR4<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR4);
IF SALIDA=#27 THEN GOTO FIN;
END
UNTIL ERROR4=0
UNTIL PAS=#;
PASOS1:=PASOS1+1;
REPEAT
REPEAT
{$I-} READ(AMPLI,PAS) {$I+};
ERROR4:=IORESULT;
IF ERROR4<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR4);
IF SALIDA=#27 THEN GOTO FIN;
END
UNTIL ERROR4=0
UNTIL PAS=#;
PASOS1:=PASOS1+1;
REPEAT
REPEAT
{$I-} READ(AMPLI,PAS) {$I+};
ERROR4:=IORESULT;
IF ERROR4<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR4);
IF SALIDA=#27 THEN GOTO FIN;
END;
UNTIL ERROR4=0
UNTIL PAS=#;
PASOS1:=PASOS1+1;
REPEAT
REPEAT
{$I-} READ(AMPLI,PAS) {$I+};
ERROR4:=IORESULT;
IF ERROR4<>0 THEN
IF ERROR4=100 THEN
BEGIN
GOTOXY(26,11);
WRITELN(
);
GOTOXY(1,10);
PROCESO_DE_ERROR(32763);
IF SALIDA=#27 THEN GOTO FIN
END
ELSE
BEGIN
PROCESO_DE_ERROR(ERROR4);
IF SALIDA=#27 THEN GOTO FIN;
END;

86

MANUAL DEL PROGRAMADOR: Ficheros Include

UNTIL ERROR4=0;
IF PAS=# THEN BEGIN PASOS1:=PASOS1+1; END
UNTIL PAS=;;
WRITELN(SE PRODUCEN ,PASOS1-3, PASOS DE TIEMPO);
WRITELN(contando el primer valor y el ltimo);
END;
FIN:
END;
(**********************************************************)
PROCEDURE EVALUAR_FICHERO;
LABEL PRINCIPIO,FIN;
VAR
I:CHAR;
CABECERA1:STRING[255];
CABECERA2:STRING[255];
CADENA:STRING[50];
POSICION1,POSICION2,ERROR5:INTEGER;
NUMERO,CONT,CUENTA,X,Y:BYTE;
BEGIN
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
PRINCIPIO:
REPEAT
BEGIN
CLRSCR;
CADENA:=ANALYSIS=Transient Analysis;
CLRSCR;
PRIMERA_APERTURA_DE_FICHERO;
IF SALIDA=#27 THEN GOTO FIN;
WRITELN(VERIFICANDO FORMATO DEL FICHERO:);
RAYA_HORIZONTAL(0,77,5,15);
TEXTCOLOR(COLOR6);
CABECERA1:=;
CABECERA2:=;
CUENTA:=0;
REPEAT
{$I-} READ(AMPLI,I) {$I+};
ERROR5:=IORESULT;
IF ERROR5<>0 THEN
BEGIN
CERRAR_FICHERO;
PROCESO_DE_ERROR(ERROR5);
IF SALIDA=#27 THEN GOTO FIN;
GOTO PRINCIPIO
END;
CABECERA1:=CABECERA1+I;
CUENTA:=CUENTA+1;
UNTIL (EOF(AMPLI)) OR (CUENTA=255);
CUENTA:=POS(TITLE=,CABECERA1);

87

MANUAL DEL PROGRAMADOR: Ficheros Include

IF CUENTA=0 THEN
BEGIN
CERRAR_FICHERO;
PROCESO_DE_ERROR(32766);
IF SALIDA=#27 THEN GOTO FIN;
GOTO PRINCIPIO
END;
DELETE(CABECERA1,0,CUENTA);
DELETE(CABECERA1,POS(SUBTITLE,CABECERA1)-2,2);
DELETE(CABECERA1,POS(TIME,CABECERA1)-2,255);
CUENTA:=POS(#,CABECERA1);
IF CUENTA<>0 THEN
BEGIN
CERRAR_FICHERO;
PROCESO_DE_ERROR(32764);
IF SALIDA=#27 THEN GOTO FIN;
GOTO PRINCIPIO
END;
CERRAR_FICHERO;
IF SALIDA=#27 THEN GOTO FIN;
APERTURA_DE_FICHERO_IMPLICITA;
IF SALIDA=#27 THEN GOTO FIN;
BEGIN
CABECERA1:=;
CABECERA2:=;
REPEAT
{$I-} READ(AMPLI,I) {$I+};
ERROR5:=IORESULT;
IF ERROR5=100 THEN
BEGIN
PROCESO_DE_ERROR(32766);
BEGIN
CERRAR_FICHERO;
GOTO FIN
END
END
ELSE
IF ERROR5<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR5);
IF SALIDA=#27 THEN
BEGIN
CERRAR_FICHERO;
GOTO FIN
END;
UNTIL ERROR5=0;
CUENTA:=0;
REPEAT
REPEAT
{$I-} READ(AMPLI,I) {$I+};
ERROR5:=IORESULT;
IF ERROR5=100 THEN
BEGIN
PROCESO_DE_ERROR(32766);
BEGIN

88

END;

MANUAL DEL PROGRAMADOR: Ficheros Include

CERRAR_FICHERO;
GOTO FIN
END
END
ELSE
IF ERROR5<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR5);
IF SALIDA=#27 THEN
BEGIN
CERRAR_FICHERO;
GOTO FIN
END
END
UNTIL ERROR5=0;
CABECERA1:=CABECERA1+I;
CUENTA:=CUENTA+1;
IF CUENTA=125 THEN
BEGIN
REPEAT
REPEAT
{$I-} READ(AMPLI,I) {$I+};
ERROR5:=IORESULT;
IF ERROR5=100 THEN
BEGIN
PROCESO_DE_ERROR(32766);
BEGIN
CERRAR_FICHERO;
GOTO FIN
END
END
ELSE
IF ERROR5<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR5);
IF SALIDA=#27 THEN
BEGIN
CERRAR_FICHERO;
GOTO FIN
END
END
UNTIL ERROR5=0;
CABECERA2:=CABECERA2+I;
UNTIL (I=#) OR EOF(AMPLI);
END
UNTIL ((I=#) OR EOF(AMPLI)) AND (CUENTA>=125);
END;
POSICION1:=POS(CADENA,CABECERA1);
POSICION2:=POS(CADENA,CABECERA2);
IF (POSICION1=0) AND (POSICION2=0) THEN
BEGIN
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(1,6);
WRITELN(EL FICHERO NO ES DE PSPICE (en transitorio) O CONTIENE ERRORES);

89

MANUAL DEL PROGRAMADOR: Ficheros Include

WRITELN(^g);
GOTOXY(23,21);
WRITE(>>> pulse CUALQUIER TECLA para reintentar, ESC. salir);
DESCARGARTECLADO;
I:=READKEY;
IF I=#27 THEN BEGIN
SALIDA:=#27;
GOTO FIN
END
END
ELSE
BEGIN
I:=0;
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
WRITELN;
WRITELN(FICHERO CORRECTO DE PSPICE EN ,CADENA);
CONT:=WHEREX;
CUENTA:=WHEREY;
TEXTCOLOR(LIGHTRED+BLINK);
GOTOXY(26,11);
WRITELN(ESPERE UN MOMENTO, POR FAVOR);
CONTAR_PASOS_DE_TIEMPO; {el procedimiento contiene la apertura implicita del fichero
determinado}
IF SALIDA=#27 THEN GOTO FIN;
TEXTCOLOR(WHITE);
GOTOXY(26,11);
WRITELN(
);
RAYA_HORIZONTAL(0,77,10,15);
GOTOXY(CONT,CUENTA);
{-----------------------ver tiempos--------------------------}
NUMERO:=POS(XBEGIN,CABECERA2);
TIEMPO:=COPY(CABECERA2,NUMERO,35);
TEXTCOLOR(COLOR6);
WRITELN(TIEMPO);
WRITE(EL FICHERO SE HA EVALUADO );
TEXTCOLOR(COLOR6+BLINK);
WRITELN(CORRECTAMENTE);
TEXTCOLOR(COLOR6);
END;
IF I=0 THEN
BEGIN
GOTOXY(20,21);
WRITE(>>> pulse CUALQUIER TECLA para repetir, 0 siguiente paso);
DESCARGARTECLADO;
I:=READKEY
END
END;
UNTIL I=0;
CERRAR_FICHERO;
FIN:
END;

90

MANUAL DEL PROGRAMADOR: Ficheros Include

(**********************************************************)
{dispone la posible memoria ocupada por anteriores ficheros .txt}
PROCEDURE DEL_MEMDIN_OCUPADA_ANTERIORFICH;
BEGIN
ANTE:=PRIM;
REPEAT
ACTU:=ANTE^.SIG;
DISPOSE(ANTE);
ANTE:=ACTU
UNTIL ANTE^.SIG=NIL
END;
(**********************************************************)
{dispone la posible memoria ocupada por los nudos de anteriores fich}
PROCEDURE LIBERA_MEMDIN_NUDOS;
BEGIN
COMODIN:=INICIAL;
REPEAT
BEGIN
PRESENTE:=COMODIN^.SIG;
DISPOSE(COMODIN);
COMODIN:=PRESENTE
END;
UNTIL COMODIN^.SIG=NIL;
END;
(**********************************************************)
PROCEDURE TRANSFORMAR_FORMATO_PSPICE;
{transformacion del fichero xxx.dat a ns reales,}
{con transferencia a disco en formato xxx.eva}
LABEL FIN;
VAR
SENAL_ERROR:BOOLEAN;
CARGA1,NUMEROS:CHAR;
LECTURA:STRING[20];
NOMFICH:STRING[12];
X,Y:BYTE;
CONTADOR1,CONTADOR2,ERR,control,ERRORLECT:INTEGER;
T,V1:REAL;
V:ARRAY[1..25] OF REAL;
(********)
{ este procedimiento pasa los datos convertidos a la memoria dinmica}
{ creando un fichero XXX.EVA directamente accesible por el }

91

MANUAL DEL PROGRAMADOR: Ficheros Include

{ usuario}
PROCEDURE DATOS_A_MDINAMICA;
VAR
C:INTEGER;
BEGIN
{------paso de los datos a memoria dinmica------}
IF PRIM=NIL THEN
BEGIN
NEW(ACTU);
ACTU^.TIEMPOS:=T;
FOR C:=1 TO CUNTAPUNTOYCOMA DO
BEGIN
ACTU^.TENSIONES[C]:=V[C]
END;
PRIM:=ACTU;
ACTU^.SIG:=NIL
END
ELSE
BEGIN
ANTE:=ACTU;
NEW(ACTU);
ACTU^.TIEMPOS:=T;
FOR C:=1 TO CUNTAPUNTOYCOMA DO
BEGIN
ACTU^.TENSIONES[C]:=V[C]
END;
ANTE^.SIG:=ACTU;
ACTU^.SIG:=NIL
END
END;
(********)
{guarda los datos leidos del fichero .dat a disco}
PROCEDURE DISCO;
LABEL FIN;
VAR
C:INTEGER;
CONST
EVA=.EVA;
EXPLICACION2=
SI AL REVISARLO ENCUENTRAS ALGUN DATO EN FORMATO
8.88888888E+10,#13#10;
EXPLICACION3=
QUIERE DECIR QUE LA LECTURA DEL DATO QUE TENDRIA QUE IR
COLOCADO#13#10;
EXPLICACION4= EN ESA POSICION HA RESULTADO DEFECTUOSA#13#10;
EXPLICACION5=
------(C) 1993 JULIO & EMILIO-----#13#10;
EXPLICACION6= FORMATO:#13#10;
EXPLICACION7=
TIEMPOS#13#10;
EXPLICACION8=
TENS NDO.1 TENS NDO.2....#13#10;
VAR

92

MANUAL DEL PROGRAMADOR: Ficheros Include

EXPLICACION1:STRING[70];
EXPLICACION9:STRING[56];
CADENA1:STRING[19];
CADENA2:STRING[17];
FICH:TEXT;
X:PUNTEROV2;
ERROR6:INTEGER;
BEGIN
NOM2:=NOM;
WHILE POS(\,NOM)<>0 DO
DELETE(NOM,1,POS(\,NOM));
NOMPSP:=NOM;
FOR C:=1 TO LENGTH(NOMPSP) DO
NOMPSP[C]:=UPCASE(NOMPSP[C]);
EXPLICACION1:=( RESULTADO DE LA CONVERSION DEL FICHERO DE PSPICE,#13#10);
EXPLICACION9:=( PARA MAS DETALLES CONSULTAR EL FICHERO #13#10);
FOR C:=1 TO LENGTH(NOM) DO
NOM[C]:=UPCASE(NOM[C]); {------transforma las posibles minusculas}
INSERT(NOM,EXPLICACION9,43);
INSERT(NOM,EXPLICACION1,43);
DELETE(NOM,POS(.,NOM),LENGTH(NOM));
NOMFICH:=NOM+EVA;
ASSIGN(FICH,NOMFICH);
IF CREAR=A DISCO: SI THEN{--graba a disco el fichero transf., si tiene la orden}
BEGIN
REPEAT
{$I-}REWRITE(FICH){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITE(FICH,EXPLICACION5+EXPLICACION1+EXPLICACION2){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITE(FICH,EXPLICACION3+EXPLICACION4+EXPLICACION6){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITE(FICH,EXPLICACION7+EXPLICACION8+EXPLICACION9){$I+};

93

MANUAL DEL PROGRAMADOR: Ficheros Include

ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITELN(FICH, ){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITELN(FICH, ){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
X:=PRIM;
WHILE X<>NIL DO
BEGIN
STR(X^.TIEMPOS,CADENA1);
CADENA1:=CADENA1+#13+#10;
WRITE(FICH,CADENA1);
FOR C:=1 TO CUNTAPUNTOYCOMA DO
BEGIN
STR(X^.TENSIONES[C],CADENA2);
REPEAT
{$I-}WRITE(FICH,CADENA2){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITE(FICH, ){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0
END;
REPEAT
{$I-}WRITE(FICH,#10#13){$I+};

94

MANUAL DEL PROGRAMADOR: Ficheros Include

ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
X:=X^.SIG
END;
REPEAT
{$I-}WRITE(FICH,*){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
{$I-}CLOSE(FICH){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END;
FIN:
END
END;
(********)
PROCEDURE LEER;
VAR
VALOR:PUNTEROV2;
C:INTEGER;
BEGIN
VALOR:=PRIM;
WHILE VALOR<>NIL DO
BEGIN
WITH VALOR^ DO
BEGIN
WRITELN(TIEMPOS);
FOR C:=1 TO CUNTAPUNTOYCOMA DO
BEGIN
WRITE(TENSIONES[C]);
WRITE( )
END;
VALOR:=VALOR^.SIG;
WRITELN
END
END
END;
(********)

95

MANUAL DEL PROGRAMADOR: Ficheros Include

PROCEDURE PRESENTACION_FINAL;
VAR A:BYTE;
BEGIN
CLRSCR;
GOTOXY(14,1);
WRITELN(
EL FICHERO PSPICE HA SIDO TRANSFORMADO,);
IF CREAR=A DISCO: SI THEN
BEGIN
GOTOXY(14,3);
WRITELN(PARA VER SU FORMATO CONSULTAR EL FICHERO ,NOMFICH);
GOTOXY(14,5);
WRITELN(
CREADO EN EL DIRECTORIO ACTUAL);
END
ELSE
BEGIN
GOTOXY(1,3);
WRITELN(
SIGUIENDO LAS ORDENES DEL MENU PRINCIPAL NO HA SIDO CREADO
NINGUN);
GOTOXY(1,4);
WRITELN( FICHERO, COMO RESULTADO DE LA CONVERSION.);
GOTOXY(1,5);
WRITELN(
SI NO ES ESTE SU DESEO RETORNE AL MENU Y CAMBIE LA OPCION A
DISCO);
END;
IF CONTADOR3<>0 THEN
BEGIN
RAYA_HORIZONTAL(0,77,6,12);
WRITELN(^g);
GOTOXY(1,8);
TEXTCOLOR(LIGHTRED);
WRITELN(
A T E N C I O N !);
TEXTCOLOR(COLOR6);
GOTOXY(1,10);
WRITELN(EXISTEN ,CONTADOR3, VALORES QUE SOBREPASAN LOS +-10 VOLTIOS EN EL
FICHERO PSPICE, );
GOTOXY(1,11);
WRITELN(ES NECESARIO INVESTIGAR Y TENER LA PRECAUCION DE NO CONECTAR LA
PCLAB );
GOTOXY(1,12);
WRITELN(A NINGUN CANAL QUE SUPERE LOS 10 VOLTIOS);
RAYA_HORIZONTAL(0,77,13,12);
END;
IF NO_DE_ERRORES<>0 THEN
BEGIN
RAYA_HORIZONTAL(0,77,6,12);
IF CONTADOR3<>0 THEN Y:=15
ELSE Y:=8;
GOTOXY(1,Y);
TEXTCOLOR(LIGHTRED);
WRITELN(
A T E N C I O N !);
TEXTCOLOR(COLOR6);

96

MANUAL DEL PROGRAMADOR: Ficheros Include

GOTOXY(1,Y+2);
WRITELN(
SE HAN PRODUCIDO ERRORES DE LECTURA DEL FICHERO PSPICE);
IF CREAR=A DISCO: SI THEN
WRITELN(
CONSULTESE EL FICHERO ,NOMFICH);
RAYA_HORIZONTAL(0,77,13,12);
END;
IF (NO_DE_ERRORES<>0) OR (CONTADOR3<>0) THEN A:=12
ELSE A:=15;
RAYA_HORIZONTAL(0,77,6,A);
TEXTCOLOR(COLOR6);
GOTOXY(19,21);
WRITE(>>> pulse CUALQUIER TECLA para retornar al men principal);
DESCARGARTECLADO;
PULSA:=READKEY;
END;
(*******)
PROCEDURE LECNUDOS;
LABEL FIN;
VAR ABORTA:BOOLEAN;
CUNTA:BYTE;
ERROR20:INTEGER;
BEGIN
ABORTA:=FALSE;
CUNTA:=0;
CUNTAPUNTOYCOMA:=0;
REPEAT
{$I-}RESET(AMPLI){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
REPEAT
REPEAT
{$I-}READ(AMPLI,NODCHAR){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END

97

MANUAL DEL PROGRAMADOR: Ficheros Include

END;
UNTIL ERROR20=0;
IF NODCHAR=# THEN CUNTA:=CUNTA+1;
UNTIL (NODCHAR=N) AND (CUNTA=2);
REPEAT
REPEAT
{$I-}READ(AMPLI,NODCHAR){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
IF NODCHAR=V THEN
BEGIN
REPEAT
{$I-}READ(AMPLI,NODCHAR){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END
UNTIL ERROR20=0;
IF NODCHAR=( THEN CUNTAPUNTOYCOMA:=CUNTAPUNTOYCOMA+1;
END
UNTIL NODCHAR=#;
FIN:
IF ABORTA=TRUE THEN
BEGIN
IF MEMDINAMICA=TRUE THEN DEL_MEMDIN_OCUPADA_ANTERIORFICH;
IF CARGONUDOS=TRUE THEN LIBERA_MEMDIN_NUDOS;
NOMPSP:=Ninguno;
EJECUTAR:=FALSE;
MEMDINAMICA:=FALSE
END
END;
(********)
{programa principal del procedimiento transformar formato pspice}
BEGIN
LECNUDOS;
SENAL_ERROR:=FALSE;
CLRSCR;

98

MANUAL DEL PROGRAMADOR: Ficheros Include

IF MEMDINAMICA=TRUE THEN
BEGIN
DEL_MEMDIN_OCUPADA_ANTERIORFICH;
LIBERA_MEMDIN_NUDOS;
MEMDINAMICA:=FALSE
END;
GOTOXY(26,12);
TEXTCOLOR(LIGHTRED+BLINK);
WRITELN(ESPERE UN MOMENTO POR FAVOR);
TEXTCOLOR(COLOR6);
CONTADOR1:=0;
APERTURA_DE_FICHERO_IMPLICITA;
IF SALIDA=#27 THEN GOTO FIN;
REPEAT
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN GOTO FIN
END;
UNTIL ERRORLECT=0;
IF CARGA1=#THEN CONTADOR1:=CONTADOR1+1
UNTIL (CARGA1=#) AND (CONTADOR1=3);
control:=0;
PRIM:=NIL;
REPEAT
REPEAT
{-------lectura de los tiempos-------}
LECTURA:= ;
IF (CARGA1=#) OR (CARGA1=C) THEN
BEGIN
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
END
END;
UNTIL ERRORLECT=0;
IF CONTROL=0 THEN READ(AMPLI,CARGA1);
REPEAT
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN

99

MANUAL DEL PROGRAMADOR: Ficheros Include

BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
END
END;
UNTIL ERRORLECT=0;
IF (CARGA1<> ) THEN LECTURA:=LECTURA+CARGA1
UNTIL (CARGA1= ) OR (CARGA1=#10);
IF CARGA1=#10 THEN
DELETE(LECTURA,LENGTH(LECTURA)-1,2);
VAL(LECTURA,T,ERR);
{----detecccion de los errores de la conversion---}
IF ERR<>0 THEN
BEGIN
T:=88888888888E00;
NO_DE_ERRORES:=NO_DE_ERRORES+1
END
END;
(*----lectura de las tensiones----*)
IF CARGA1= THEN
BEGIN
REPEAT
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
END
END;
UNTIL ERRORLECT=0;
UNTIL CARGA1=#10
END;
CONTADOR2:=0;
REPEAT
LECTURA:= ;
REPEAT
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;

100

MANUAL DEL PROGRAMADOR: Ficheros Include

GOTO FIN
END
END;
UNTIL ERRORLECT=0;
IF CARGA1<># THEN
BEGIN
IF CARGA1<>: THEN
IF CARGA1<>#10 THEN
IF CARGA1<>#13 THEN LECTURA:=LECTURA+CARGA1
END
UNTIL (CARGA1=:) OR (CARGA1=#);
CONTADOR2:=CONTADOR2+1;
IF CARGA1<># THEN
BEGIN
VAL(LECTURA,V1,ERR);
{----detecccion de los errores de la conversion--}
IF ERR<>0 THEN
BEGIN
V1:=88888888888E00;
NO_DE_ERRORES:=NO_DE_ERRORES+1
END;
IF (V1>10) or (V1<-10) THEN {---comprobacion valores<=10}
CONTADOR3:=CONTADOR3+1;
V[CONTADOR2]:=V1;
REPEAT
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
END
END;
UNTIL ERRORLECT=0
UNTIL (CARGA1= ) OR (CARGA1=#)
END
UNTIL CARGA1=#;
DATOS_A_MDINAMICA;
MEMDINAMICA:=TRUE;
UNTIL (CARGA1=#);
CONTROL:=CONTROL+1;
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN

101

MANUAL DEL PROGRAMADOR: Ficheros Include

END
END;
UNTIL ERRORLECT=0
UNTIL EOF(AMPLI) OR (CARGA1=;);
REPEAT
{$I-} CLOSE(AMPLI) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
END
END;
UNTIL ERRORLECT=0;
GOTOXY(28,12);
TEXTCOLOR(LIGHTRED+BLINK);
WRITELN(ESPERE UN MOMENTO POR FAVOR);
TEXTCOLOR(COLOR6);
LEER;
DISCO;
IF SALIDA=#27 THEN GOTO FIN;
PRESENTACION_FINAL;
FIN:
IF SENAL_ERROR=TRUE THEN
BEGIN
NOMPSP:=Ninguno;
EJECUTAR:=FALSE;
MEMDINAMICA:=FALSE;
DEL_MEMDIN_OCUPADA_ANTERIORFICH
END
END;
(**********************************************************)
PROCEDURE CARGAR_NUDOS_MEMDIN(CARACNUDOS:CHAR);
BEGIN
IF INICIAL=NIL THEN
BEGIN
NEW(INICIAL);
INICIAL^.CARACTERN:=CARACNUDOS;
INICIAL^.SIG:=NIL ;
PRESENTE:=INICIAL;
END
ELSE
BEGIN
COMODIN:=PRESENTE;
NEW(PRESENTE);
PRESENTE^.CARACTERN:=CARACNUDOS;
PRESENTE^.SIG:=NIL;
COMODIN^.SIG:=PRESENTE;
END

102

MANUAL DEL PROGRAMADOR: Ficheros Include

END;
(**********************************************************)
PROCEDURE NUDOS;
LABEL FIN;
CONST
CUNTA:BYTE=0;
VAR
ERROR20:INTEGER;
ABORTA:BOOLEAN;
CARGONUDOS:BOOLEAN;
C:CHAR;
BEGIN
ABORTA:=FALSE;
CARGONUDOS:=FALSE;
ASSIGN(AMPLI,NOM2);
CUNTA:=0;
CUNTAPUNTOYCOMA:=1;
MAXCADENUDOS1:=0;
MAXCADENUDOS2:=0;
REPEAT
{$I-}RESET(AMPLI){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
REPEAT
REPEAT
{$I-}READ(AMPLI,NODCHAR){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
IF NODCHAR=# THEN CUNTA:=CUNTA+1;
UNTIL (NODCHAR=N) AND (CUNTA=2);
INICIAL:=NIL;

103

MANUAL DEL PROGRAMADOR: Ficheros Include

REPEAT
{$I+}READ(AMPLI,NODCHAR){I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
C:= ;
WHILE NODCHAR<># DO
BEGIN
REPEAT
{$I-}READ(AMPLI,NODCHAR){I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
IF NODCHAR=# THEN CARGAR_NUDOS_MEMDIN(#);
IF NODCHAR=V THEN
BEGIN
C:=V
END
ELSE
IF (C=V) AND (NODCHAR=() THEN
BEGIN
CARGAR_NUDOS_MEMDIN(V);
CARGONUDOS:=TRUE;
CARGAR_NUDOS_MEMDIN(NODCHAR);
REPEAT
REPEAT
{$I-}READ(AMPLI,NODCHAR){I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
CARGAR_NUDOS_MEMDIN(NODCHAR);

104

MANUAL DEL PROGRAMADOR: Ficheros Include

CARGONUDOS:=TRUE;
IF NODCHAR=) THEN
BEGIN
CARGAR_NUDOS_MEMDIN(;);
CUNTAPUNTOYCOMA:=CUNTAPUNTOYCOMA+1
END
UNTIL NODCHAR=)
END
ELSE IF NODCHAR<>V THEN C:= ;
END;
CUNTAPUNTOYCOMA:=CUNTAPUNTOYCOMA-1;
REPEAT
{$I-}CLOSE(AMPLI){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
FIN:
IF ABORTA=TRUE THEN
BEGIN
DEL_MEMDIN_OCUPADA_ANTERIORFICH;
IF CARGONUDOS=TRUE THEN LIBERA_MEMDIN_NUDOS;
NOMPSP:=Ninguno;
EJECUTAR:=FALSE;
MEMDINAMICA:=FALSE
END
END;
(****************************************************************)
(**********PROGRAMA PRINCIPAL DEL PROCEDIMIENTO******************)
(****************************************************************)
BEGIN
WINDOW(1,1,80,25);
CURSOROFF;
TEXTBACKGROUND(COLOR5);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
WINDOW(3,2,78,24);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(1,23);
WRITE(DTO. ACTUAL: ,DIRECTORIO);
GOTOXY(65,23);
WRITE(CREAR);
RAYA_HORIZONTAL(0,77,22,WHITE);
WINDOW(3,2,78,22);

105

MANUAL DEL PROGRAMADOR: Ficheros Include

EVALUAR_FICHERO;
IF SALIDA=#27 THEN GOTO FIN;
TRANSFORMAR_FORMATO_PSPICE;
IF SALIDA=#27 THEN GOTO FIN;
NUDOS;
IF SALIDA=#27 THEN GOTO FIN;
TEXTMODE(C80);
EJECUTAR:=TRUE;
FIN:
SALIDA:=#251; {valor que no se puede dar}
CLRSCR;
WINDOW(1,1,80,25)
END;

106

MANUAL DEL PROGRAMADOR: Ficheros Include

3.3.- EJECUTA

3.3.1.- DESCRIPCIN DEL ARCHIVO.

El archivo EJECUTA contiene el conjunto de procedimientos que son llamados


para realizar la opcin de EJECUTAR del programa principal. Contiene la asignacin de los
nudos a los canales de la tarjeta de adquisicin, la adquisicin de los datos por la misma, la
comparacin y la presentacin de los resultados obtenidos (Respuesta del programa).

3.3.2.- VARIABLES GLOBALES.

Como en el resto de los archivos Include, sus variables globales son las mismas
que las variables declaradas como tales en el programa principal.

3.3.3.- VARIABLES LOCALES.

Son las variables que se declaran y se utilizan en cada procedimiento y/o


funcin. (Ver listado).

3.3.4.- LISTADO.

PROCEDURE EJECUTA;
LABEL FIN;
CONST

107

MANUAL DEL PROGRAMADOR: Ficheros Include

IOCONS:CHAR=#251;
VAR
PULSACURSOR : CHAR;
FUERA
: CHAR;
ERROASIG
: BOOLEAN;
(**********************************************************)
PROCEDURE PROCESO_DE_ERROR(ERROR0:INTEGER);
VAR
X : BYTE;
Y : BYTE;
BEGIN
X:=WHEREX;
Y:=WHEREY;
ERROR(ERROR0);
GOTOXY(16,20);
TEXTBACKGROUND(COLOR5);
TEXTCOLOR(COLOR6);
WRITE(>>PULSA CUALQUIER TECLA PARA REINTENTAR, ESC. MENU PRINCIPAL);
DESCARGARTECLADO;
IOCONS:=READKEY;
WINDOW(3,14,78,21);{----------BORRADO PARCIAL DE PANTALLA}
CLRSCR;
WINDOW(3,2,78,24);{------------RECUPERACION DE LA PANTALLA PRINCIPAL}
GOTOXY(X,Y);
END;
(**********************************************************)
{rutina que detecta que no ha sido asignado ningun canal de la PCLAB}
PROCEDURE ERROR_DE_ASIGNACION;
VAR
C : BYTE;
D : BYTE;
BEGIN
ERROASIG:=FALSE;
D:=0;
FOR C:=0 TO 15 DO
IF ASIGNUD[C]=88 THEN D:=D+1;
IF D=16 THEN
BEGIN
ERROASIG:=TRUE;
ERROR(32758);
FOR C:=1 TO 5 DO
BEGIN
SOUND(1000);
DELAY(100);
SOUND(800);
DELAY(80);

108

MANUAL DEL PROGRAMADOR: Ficheros Include

NOSOUND
END;
GOTOXY(23,21);
TEXTBACKGROUND(COLOR5);
WRITE( >>> Pulse cualquier TECLA para repetir, ESCAPE men);
TEXTCOLOR(COLOR6);
FUERA:=READKEY;
END
END;
(**********************************************************)
PROCEDURE PRESENTACION_NUDOS;
LABEL FIN1;
CONST
PULSACANAL:STRING=;
VAR
VUELTA
: BYTE;
REALCE
: BYTE;
LUZ
: BYTE;
TOCA
: BYTE;
MAXLONGLINEA : BYTE;
FILAS
: INTEGER;
ERROR20
: INTEGER;
MOM
: INTEGER;
E
: INTEGER;
MO
: INTEGER;
PSCANAL1
: CHAR;
PSCANAL2
: CHAR;
MOMEN
: CHAR;
BEGIN
RAYA_HORIZONTAL(0,77,2,WHITE);
GOTOXY(1,1);
TEXTCOLOR(COLOR6);
WRITELN( ASIGNACION DE NUDOS Y CANALES PCLAB: SELECCIONE ENTRE LOS PRESENTES
NUDOS );
WINDOW(3,4,78,24);
FOR TOCA:=0 TO 15 DO
ASIGNUD[TOCA]:=88;
TOCA:=1;
LUZ:=1;
CURSOROFF;
REPEAT
COMODIN:=INICIAL; {-------inicializa el puntero}
FILAS:=CUNTAPUNTOYCOMA;
IF CUNTAPUNTOYCOMA>17 THEN
IF TOCA<17 THEN FILAS:=17
ELSE
IF TOCA<CUNTAPUNTOYCOMA
THEN
FILAS:=TOCA+1

109

MANUAL DEL PROGRAMADOR: Ficheros Include

ELSE
FILAS:=CUNTAPUNTOYCOMA;
CLRSCR;
FOR VUELTA:=1 TO FILAS DO
BEGIN
IF VUELTA=TOCA THEN
IF MN=FALSE THEN REALCE:=LIGHTRED
ELSE REALCE:=WHITE
ELSE
IF MN=FALSE THEN REALCE:=LIGHTBLUE
ELSE REALCE:=BLACK;
IF VUELTA<=9 THEN WRITE( ,VUELTA, - )
ELSE WRITE( ,VUELTA, - );
MAXLONGLINEA:=0;
REPEAT
BEGIN
NODCHAR:=COMODIN^.CARACTERN;
COMODIN:=COMODIN^.SIG;
IF NODCHAR<>; THEN
IF NODCHAR<># THEN
BEGIN
TEXTBACKGROUND(REALCE);
IF REALCE=BLACK THEN TEXTCOLOR(WHITE);
IF REALCE=WHITE THEN TEXTCOLOR(BLACK);
WRITE(NODCHAR);
MAXLONGLINEA:=MAXLONGLINEA+1;
IF MAXLONGLINEA>60 THEN
IF NODCHAR= THEN
BEGIN
TEXTBACKGROUND(COLOR5);
WRITELN;
FOR E:=1 TO 6 DO
BEGIN
WRITE( );
MAXLONGLINEA:=0
END;
TEXTBACKGROUND(REALCE)
END
END
END;
IF REALCE=WHITE THEN TEXTCOLOR(WHITE);
IF (NODCHAR=;) OR (NODCHAR=#) THEN
FOR MO:=0 TO 15 DO
IF ASIGNUD[MO]=VUELTA THEN
BEGIN
TEXTBACKGROUND(COLOR5);
TEXTCOLOR(COLOR11);
IF MAXLONGLINEA>=50
THEN
BEGIN
WRITELN;
FOR E:=1 TO 5 DO
BEGIN
WRITE( );
MAXLONGLINEA:=0

110

MANUAL DEL PROGRAMADOR: Ficheros Include

END;
WRITE( ASIGNADO A CANAL: ,MO)
END
ELSE
WRITE( ASIGNADO A CANAL: ,MO);
TEXTCOLOR(COLOR6)
END
UNTIL (NODCHAR=;) OR (NODCHAR=#);
TEXTBACKGROUND(COLOR5);
WRITELN
END;
REPEAT
PULSACURSOR:=READKEY
UNTIL (PULSACURSOR=#72) OR (PULSACURSOR=#80) OR (PULSACURSOR=#13) OR
(PULSACURSOR=#27);
IF PULSACURSOR=#27 THEN
BEGIN
TEXTCOLOR(COLOR6);
GOTOXY(1,1);
WRITELN( ASIGNACION DE NUDOS Y CANALES PCLAB: SELECCIONE ENTRE LOS
PRESENTES NUDOS );
WINDOW(3,4,78,24);
RAYA_HORIZONTAL(0,77,2,WHITE);
TEXTCOLOR(COLOR12);
GOTOXY(1,1);
WRITELN
( DESEA VISUALIZAR DE NUEVO LA CONFIGURACION? (S/N)
);
REPEAT
PULSACURSOR:=READKEY;
UNTIL PULSACURSOR IN [S,N,n,s];
IF PULSACURSOR IN [S,s] THEN
BEGIN
PULSACURSOR:=1;
TEXTCOLOR(COLOR6);
END
ELSE
BEGIN
ERROR_DE_ASIGNACION;
TEXTCOLOR(COLOR6);
IF (ERROASIG=TRUE)
THEN
BEGIN
IF FUERA=#27
THEN
BEGIN
PULSACURSOR:=#27;
IOCONS:=#27;
TEXTCOLOR(COLOR6)
END
ELSE
BEGIN
PULSACURSOR:=#251;
TEXTCOLOR(COLOR6)
END
END

111

MANUAL DEL PROGRAMADOR: Ficheros Include

ELSE
BEGIN
PULSACURSOR:=#27;
IOCONS:=#251;
TEXTCOLOR(COLOR6)
END
END
END;
IF PULSACURSOR=#72 THEN
IF LUZ=1 THEN
BEGIN
TOCA:=CUNTAPUNTOYCOMA;
LUZ:=TOCA
END
ELSE
BEGIN
LUZ:=LUZ-1;
TOCA:=LUZ
END;
IF PULSACURSOR=#80 THEN
IF LUZ=CUNTAPUNTOYCOMA
THEN
BEGIN
TOCA:=1;
LUZ:=1
END
ELSE
BEGIN
LUZ:=LUZ+1;
TOCA:=LUZ
END;
IF PULSACURSOR=#13 THEN
BEGIN
WINDOW(3,2,78,24);
TEXTCOLOR(COLOR12);
GOTOXY(1,1);
WRITE(INTRODUZCA EL NUMERO DE CANAL DE LA PCLAB(0 A 15):
REPEAT
CURSORON;
PULSACANAL:=;
GOTOXY(53,1);
WRITE( );
PSCANAL1:=READKEY;
IF PSCANAL1=#13 THEN PULSACANAL:=88
ELSE
BEGIN
IF PSCANAL1<>#27 {-----------------------------funcin de escape}
THEN
BEGIN
GOTOXY(53,1);
WRITE(PSCANAL1);
PSCANAL2:=READKEY;
IF PSCANAL2<>#27
THEN

112

);

MANUAL DEL PROGRAMADOR: Ficheros Include

BEGIN
IF (PSCANAL2=#13)
THEN
PULSACANAL:=PSCANAL1
ELSE
BEGIN
GOTOXY(54,1);
WRITE(PSCANAL2);
MOMEN:=READKEY;
PULSACANAL:=PSCANAL1+PSCANAL2;
END
END
ELSE
PULSACANAL:=#27
END
ELSE
PULSACANAL:=#27
END;
UNTIL (PULSACANAL=0) OR (PULSACANAL=1) OR (PULSACANAL=2) OR (PULSACANAL=3)
OR (PULSACANAL=4) OR (PULSACANAL=5) OR (PULSACANAL=6) OR (PULSACANAL=7)
OR (PULSACANAL=8) OR (PULSACANAL=9) OR (PULSACANAL=10) OR
(PULSACANAL=11)
OR (PULSACANAL=12) OR (PULSACANAL=13) OR (PULSACANAL=14) OR
(PULSACANAL=15)
OR (PULSACANAL=#27) OR (PULSACANAL=88);
CURSOROFF;
IF PULSACANAL<>#27
THEN
BEGIN
IF PULSACANAL=88
THEN
BEGIN
FOR E:=0 TO 15 DO
IF ASIGNUD[E]=TOCA THEN ASIGNUD[E]:=88;
END
ELSE
BEGIN
VAL(PULSACANAL,MOM,ERROR20);
FOR E:=0 TO 15 DO
IF ASIGNUD[E]=TOCA THEN ASIGNUD[E]:=88;
IF ASIGNUD[MOM]=88 THEN ASIGNUD[MOM]:=TOCA
ELSE
BEGIN
WRITELN(^g);
RAYA_HORIZONTAL(0,77,2,WHITE);
GOTOXY(1,1);
TEXTCOLOR(COLOR11);
WRITELN(CANAL YA ASIGNADO A LOS NUDOS SEALADOS COMO N
,ASIGNUD[MOM], >>>PULSE TECLA...);
PULSACURSOR:=READKEY
END
END;
RAYA_HORIZONTAL(0,77,2,WHITE);
TEXTCOLOR(COLOR6);
GOTOXY(1,1);

113

MANUAL DEL PROGRAMADOR: Ficheros Include

WRITELN( ASIGNACION DE NUDOS Y CANALES PCLAB: SELECCIONE ENTRE LOS


PRESENTES NUDOS );
WINDOW(3,4,78,24)
END
ELSE
BEGIN
TEXTCOLOR(COLOR6);
GOTOXY(1,1);
WRITELN( ASIGNACION DE NUDOS Y CANALES PCLAB: SELECCIONE ENTRE LOS
PRESENTES NUDOS );
WINDOW(3,4,78,24);
RAYA_HORIZONTAL(0,77,2,WHITE);
TEXTCOLOR(COLOR12);
GOTOXY(1,1);
WRITELN( DESEA VISUALIZAR DE NUEVO LA CONFIGURACION? (S/N)
);
REPEAT
PULSACURSOR:=READKEY;
UNTIL PULSACURSOR IN [S,N,n,s];
IF PULSACURSOR IN [S,s] THEN
BEGIN
PULSACURSOR:=1;
TEXTCOLOR(COLOR6);
END
ELSE
BEGIN
ERROR_DE_ASIGNACION;
TEXTCOLOR(COLOR6);
IF (ERROASIG=TRUE)
THEN
BEGIN
IF FUERA=#27
THEN
BEGIN
PULSACURSOR:=#27;
IOCONS:=#27;
TEXTCOLOR(COLOR6)
END
ELSE
BEGIN
PULSACURSOR:=#251;
TEXTCOLOR(COLOR6)
END
END
ELSE
BEGIN
PULSACURSOR:=#27;
IOCONS:=#251;
TEXTCOLOR(COLOR6)
END
END
END
END;
UNTIL (PULSACURSOR=#27);
FIN1:
END;

114

MANUAL DEL PROGRAMADOR: Ficheros Include

(**********************************************************)
{presentacin de los datos antes de la conexin de la PCLAB}
PROCEDURE PRE_ADQUISICION;
LABEL FIN2;
CONST
BASE
= $0200;
DATOADH = BASE+5;
REGCONTROL = BASE+11;
REGDISPARO = BASE+12;
VAR
ASIGNADO
: BOOLEAN;
FIN_CONVERSION : BYTE;
DATO_BAJO
: BYTE;
DATO_ALTO
: BYTE;
NODENUDO
: BYTE;
C
: BYTE;
D
: BYTE;
CT
: BYTE;
NOSLINEA
: BYTE;
RET
: BYTE;
CTDOR
: INTEGER;
BEGIN
REPEAT
REPEAT
REPEAT
WINDOW(3,2,78,24);
CLRSCR;
RAYA_HORIZONTAL(0,77,5,WHITE);
GOTOXY(1,1);
TEXTCOLOR(COLOR6);
WRITELN( POR FAVOR CONECTE LOS CANALES DE LA PCLAB EN LOS LOS NUDOS
SELECIONADOS
);
GOTOXY(1,2);
WRITELN( EN LA PLACA DEL CIRCUITO.
);
GOTOXY(1,4);
TEXTCOLOR(COLOR11+BLINK);
WRITELN(
PULSE INTRO CUANDO ESTE PREPARADO);
TEXTCOLOR(COLOR6);
GOTOXY(59,4);
WRITE(>>>ESC. MENU PPAL.);
GOTOXY(65,2);
RAYA_HORIZONTAL(57,77,3,WHITE);
GOTOXY(57,4);
WRITE(#179);
GOTOXY(57,5);
WRITE(#193);
GOTOXY(57,3);
WRITE(#218);
TEXTCOLOR(COLOR6);
WRITELN;

115

MANUAL DEL PROGRAMADOR: Ficheros Include

COMODIN:=INICIAL;
RET:=0;
NOSLINEA:=0;
NODENUDO:=0;
CT:=0;
ASIGNADO:=FALSE;
WINDOW(8,7,78,24);
REPEAT
TEXTCOLOR(COLOR6);
IF NOSLINEA=3 THEN
BEGIN
WRITELN;
NOSLINEA:=0
END;
IF COMODIN^.CARACTERN<>; THEN
BEGIN
WRITE(COMODIN^.CARACTERN);
CT:=CT+1;
END;
COMODIN:=COMODIN^.SIG;
IF COMODIN^.CARACTERN=; THEN
BEGIN
RET:=RET+1;
IF RET=2 THEN RET:=0;
NODENUDO:=NODENUDO+1;
NOSLINEA:=NOSLINEA+1;
RET:=RET+1;
IF RET=3 THEN RET:=0;
ASIGNADO:=FALSE;
FOR C:=0 TO 15 DO
IF NODENUDO=ASIGNUD[C]
THEN
BEGIN
ASIGNADO:=TRUE;
FOR D:=0 TO 6-CT DO
WRITE( );
WRITE(:);
TEXTCOLOR(COLOR7);
IF ASIGNUD[C]<=9
THEN
WRITE(A CANAL ,ASIGNUD[C])
ELSE
WRITE(A CANAL ,ASIGNUD[C]);
TEXTCOLOR(COLOR6);
WRITE( ; );
END;
IF ASIGNADO=FALSE THEN
BEGIN
FOR D:=0 TO 6-CT DO
WRITE( );
WRITE(:);
TEXTCOLOR(COLOR11);
WRITE(SIN ASIGNAR);
TEXTCOLOR(COLOR6);
WRITE( ; );

116

MANUAL DEL PROGRAMADOR: Ficheros Include

END;
CT:=0;
END
UNTIL COMODIN^.SIG=NIL;
WINDOW(3,2,78,24);
IOCONS:=READKEY;
IF IOCONS=#27 THEN GOTO FIN2;
UNTIL (IOCONS=#13);
RAYA_HORIZONTAL(0,77,7,WHITE);
GOTOXY(1,4);
WRITE(
);
GOTOXY(3,6);
TEXTCOLOR(COLOR11);
WRITE(ATENCION! : LOS NUDOS ESTAN CORRECTAMENTE CONECTADOS A LA PCLAB?
(S/N));
TEXTCOLOR(WHITE);
GOTOXY(57,3);
WRITE(
);
GOTOXY(57,4);
WRITE( );
GOTOXY(57,5);
WRITE(#196);
GOTOXY(57,3);
WRITE( );
REPEAT
IOCONS:=READKEY;
UNTIL IOCONS IN [s,S,n,N];

{rutina que detecta si la PCLAB esta o no conectada al ordenador}


UNTIL ((IOCONS=S) OR (IOCONS=s)) AND (D<16);
TEXTCOLOR(COLOR6);
CTDOR:=0;
PORT[REGCONTROL]:=1;
PORT[REGDISPARO]:=0;
REPEAT
FIN_CONVERSION:=PORT[DATOADH];
CTDOR:=CTDOR+1;
IF CTDOR>=10000 THEN FIN_CONVERSION:=$F
UNTIL FIN_CONVERSION<=$F;
IF CTDOR>=1000 THEN
BEGIN
ERROR(32759);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(25,23);
TEXTCOLOR(COLOR6);
WRITE(>> Pulse cualquier TECLA para repetir, ESCAPE men);
IOCONS:=READKEY
END
ELSE
IOCONS:=#251;
TEXTCOLOR(COLOR6);
UNTIL (IOCONS=#27) OR (IOCONS=#251);

117

MANUAL DEL PROGRAMADOR: Ficheros Include

FIN2:
END;
(**********************************************************)
{rutina de adquisicin de datos con pclab}
PROCEDURE ADQUISICION_DATOS_PCLAB;

CONST
BASE
= $200;
REGCONT1 = BASE+1;
REGCONT2 = BASE+2;
CONTCONTR = BASE+3;
DATOADL = BASE+4;
DATOADH = BASE+5;
DATODA1L = BASE+4;
DATODA1H = BASE+5;
DATODA2L = BASE+6;
DATODA2H = BASE+7;
CLEARINT = BASE+8;
CANALMUX = BASE+10;
REGCONTROL= BASE+11;
REGDISPARO= BASE+12;
TENS
= 10;
MAX
= 2;{500;}
VAR
FIN_CONVERSION : BYTE;
DATO_BAJO
: BYTE;
DATO_ALTO
: BYTE;
A
: BYTE;
I
: INTEGER;
J
: INTEGER;
MUEST
: INTEGER;
(********)
{introduccin de los datos del muestreo en men dinmica}
PROCEDURE OTRAMUESTRA(ND:INTEGER;Vmuest:REAL);
BEGIN
Vmuest:=TENS+(2*TENS/4095)*(Vmuest-4095);
IF PRIMERO=NIL THEN
BEGIN
NEW(ACTUAL);
ACTUAL^.Vmuestras:=Vmuest;
ACTUAL^.NUMNUDO:=ND;
PRIMERO:=ACTUAL;
ACTUAL^.SIG:=NIL;
END
ELSE
BEGIN
ANTERIOR:=ACTUAL;
NEW(ACTUAL);

118

MANUAL DEL PROGRAMADOR: Ficheros Include

ACTUAL^.Vmuestras:=Vmuest;
ACTUAL^.NUMNUDO:=ND;
ANTERIOR^.SIG:=ACTUAL;
ACTUAL^.SIG:=NIL;
END
END;
(********)
{programacion de la frecuencia de disparo de la PCLAB (10000Hz)}
PROCEDURE FRECUENCIA;
VAR D1
D2
AUX

: LONGINT;
: LONGINT;
: LONGINT;

BEGIN
AUX:=2000000 DIV 10000;
D1:=ROUND(SQRT(AUX));
D2:=D1;
PORT[CONTCONTR]:=$74;
PORT[REGCONT1]:=D1 MOD 256;
PORT[REGCONT1]:=D1 DIV 256;
PORT[CONTCONTR]:=$B4;
PORT[REGCONT2]:=D2 MOD 256;
PORT[REGCONT2]:=D2 DIV 256;
END;
(********)
{programa principal del procedimiento adquisicin_datos_pclab}
BEGIN
DIBUJARCUADRO(24,10,54,13,COLOR4,WHITE);
GOTOXY(25,11);
TEXTCOLOR(BLINK+COLOR6);
WRITELN( CAPTURANDO LOS DATOS
);
GOTOXY(25,12);
WRITE ( DEL CIRCUITO CON LA PCLAB );
PRIMERO:=NIL; (*-------inicializa el puntero----*)
PORT[REGCONTROL]:=0;
PORT[REGCONTROL]:=6;
FRECUENCIA;
FOR A:=0 TO 15 DO
BEGIN
IF ASIGNUD[A]<>88 THEN
FOR I:=0 TO MAX-1 DO
BEGIN
PORT[CANALMUX]:=A;
REPEAT FIN_CONVERSION:=PORT[DATOADH];
UNTIL FIN_CONVERSION<=$F;
DATO_BAJO:=PORT[DATOADL];
DATO_ALTO:=PORT[DATOADH] MOD 16;
MUEST:=DATO_ALTO*256+DATO_BAJO;
OTRAMUESTRA(ASIGNUD[A],MUEST);
REPEAT FIN_CONVERSION:=PORT[DATOADH];
UNTIL FIN_CONVERSION>$F;
END

119

MANUAL DEL PROGRAMADOR: Ficheros Include

END;
DATOS_PCLAB:=TRUE;
PORT[REGCONTROL]:=0;
{LEERMUESTRAS;}(**********A PROBAR EN EL LABORATORIO**********)
PORT[REGCONTROL]:=0;
END;
(**********************************************************)
{realiza la comparacin entre el fichero resultado de la simulacin}
{en PSPICE y la adquisicin de datos con la PCLAB-812, comprobando }
{si se ajustan los resultados a la tolerancia}
PROCEDURE COMPARACION_Y_PRESENTACION_DE_RESULTADOS_FINALES;
VAR
PCI
: BYTE;
VALE
: BOOLEAN;
CAD1
: STRING[15];
CAD2
: STRING[15];
TIEMPOPSP1 : REAL;
TIEMPOPSP2 : REAL;
ERO
: INTEGER;
VPSef
: REAL;
VPSmed
: REAL;
VPCef
: REAL;
VPCmed
: REAL;
(********)
{presentacion de los resultados finales de la comparacion}
PROCEDURE PRESENTACION_RESULTADO_COMPARACION;
VAR
COUNT
: BYTE;
RANGOef
: REAL;
RANGOmed : REAL;
CORRECTOef : BOOLEAN;
CORRECTOmed : BOOLEAN;
BEGIN
{rutina que controla si el valor leido por la PCLAB est situado}
{dentro del rango de la tolerancia}
RANGOef:=VPSef*(TOLERANCIA/100);
RANGOmed:=VPSmed*(TOLERANCIA/100);
IF (VPCef<=VPSef+RANGOef) and (VPCef>=VPSef+VPSef)
THEN CORRECTOef:=TRUE
ELSE CORRECTOef:=FALSE;
IF (VPCmed<=VPSmed+RANGOmed) and (VPCmed>=VPSmed+VPSmed)
THEN CORRECTOmed:=TRUE
ELSE CORRECTOmed:=FALSE;
COUNT:=1;
COMODIN:=INICIAL;
WRITE( );

120

MANUAL DEL PROGRAMADOR: Ficheros Include

REPEAT
IF ASIGNUD[PCI]=COUNT THEN WRITE(COMODIN^.CARACTERN);
IF COMODIN^.CARACTERN=;
THEN
BEGIN
IF (COMODIN^.CARACTERN=;) AND (ASIGNUD[PCI]=COUNT)
THEN
BEGIN
IF PCI<9
THEN
BEGIN
WRITE( ASIGNADO A CANAL ,PCI, ;);
IF (CORRECTOmed=TRUE) AND (CORRECTOef=TRUE)
THEN
BEGIN
TEXTCOLOR(COLOR7);
WRITE( EVALUACION CORRECTA);
TEXTCOLOR(COLOR6);
WRITELN;
END
ELSE
BEGIN
TEXTCOLOR(COLOR11);
WRITE( PRESENTA ERRORES);
TEXTCOLOR(COLOR6);
WRITELN;
END
END
ELSE
BEGIN
WRITE( : ASIGNADO A CANAL ,PCI);
IF (CORRECTOmed=TRUE) AND (CORRECTOef=TRUE)
THEN
BEGIN
TEXTCOLOR(COLOR7);
WRITE( EVALUACION CORRECTA);
TEXTCOLOR(COLOR6);
WRITELN
END
ELSE
BEGIN
TEXTCOLOR(COLOR11);
WRITE( PRESENTA ERRORES);
TEXTCOLOR(COLOR6);
WRITELN
END
END
END;
COUNT:=COUNT+1
END;
COMODIN:=COMODIN^.SIG;
UNTIL COMODIN=NIL
END;
(********)

121

MANUAL DEL PROGRAMADOR: Ficheros Include

{programa principal del procedimiento COMPARACION_Y_PRESENTACION...}


BEGIN
{rutina para limpiar la pantalla y prepararla para el posterior}
{informe y diagnstico de los nudos}
WINDOW(3,2,78,24);
TEXTBACKGROUND(COLOR5);
TEXTCOLOR(COLOR6);
CLRSCR;
WRITELN(
RESUMEN Y DIAGNOSTICO DEL ESTADO DE LOS NUDOS VERIFICADOS );
RAYA_HORIZONTAL(0,77,2,WHITE);
TEXTCOLOR(COLOR6);
{rutina para calcular el tiempo total de anlisis en PSPICE.}
{se calcula restando a XEND XBEGIN, estando ambos conte--}
{nidos en la variable TIEMPO,...}
{ejem.:XBEGIN=0.000E00 XEND=3.000E-02}
DELETE(TIEMPO,1,8);
CAD1:=COPY(TIEMPO,1,POS(,TIEMPO)-1);
DELETE(TIEMPO,1,POS(=,TIEMPO)+1);
CAD2:=COPY(TIEMPO,1,POS(,TIEMPO)-1);
VAL(CAD1,TIEMPOPSP1,ERO);
IF ERO<>0 THEN
BEGIN
TIEMPOPSP1:=1;
TIEMPOPSP2:=2
END;
VAL(CAD2,TIEMPOPSP2,ERO);
IF ERO<>0 THEN
BEGIN
TIEMPOPSP1:=1;
TIEMPOPSP2:=2
END;
TIEMPOPSP1:=TIEMPOPSP2-TIEMPOPSP1;
{rutina de inicializacin de las variables}
VPCef:=0;
VPCmed:=0;
VPSef:=0;
VPSmed:=0;
{rutina de lectura de las tensiones leidas por la PCLAB}
{e introducidas en memoria dinmica y transformacin a }
{valor medio y eficaz}
ACTUAL:=PRIMERO;
FOR PCI:=0 TO 15 DO
IF ASIGNUD[PCI]<>88 THEN
BEGIN
REPEAT
VALE:=FALSE;

122

MANUAL DEL PROGRAMADOR: Ficheros Include

{comprueba si el n de nudo en memdin se corresponde}


IF ACTUAL^.NUMNUDO=ASIGNUD[PCI] THEN
BEGIN
REPEAT
VPCef:=VPCef+(ACTUAL^.Vmuestras*ACTUAL^.Vmuestras);
VPCmed:=VPCmed+ACTUAL^.Vmuestras;
ACTUAL:=ACTUAL^.SIG
UNTIL (ACTUAL=NIL) OR (ACTUAL^.NUMNUDO<>ASIGNUD[PCI]);
BEGIN
VPCef:=SQRT(VPSef)/500;
VPCmed:=VPCmed/500
END;
VALE:=TRUE;
{rutina de lectura de las tensiones leidas por la PCLAB}
{e introducidas en memoria dinmica y transformacin a }
{valor medio y eficaz}
BEGIN
ACTU:=PRIM;
REPEAT
VPSef:=VPSef+(ACTU^.TENSIONES[ASIGNUD[PCI]]*ACTU^.TENSIONES[PCI]);
VPSmed:=VPSmed+ACTU^.TENSIONES[ASIGNUD[PCI]];
ACTU:=ACTU^.SIG
UNTIL ACTU=NIL;
VPSef:=SQRT(VPSef)/TIEMPOPSP1;
VPSmed:=VPSmed/TIEMPOPSP1
END
END;
PRESENTACION_RESULTADO_COMPARACION;
IF VALE=FALSE THEN ACTUAL:=ACTUAL^.SIG
UNTIL (ACTUAL^.SIG=NIL) OR (VALE=TRUE)
END;
{presentacion de salida}
GOTOXY(25,23);
WRITELN(Pulse CUALQUIER TECLA para retornar el menu principal);
IOCONS:=READKEY;
{rutina de disposicion de la memoria dinmica utilizada en este}
{procedimiento}
ACTUAL:=PRIMERO;
REPEAT
ANTERIOR:=ACTUAL^.SIG;
DISPOSE(ACTUAL);
ACTUAL:=ANTERIOR;
UNTIL ACTUAL=NIL
END;
(**********************************************************)
{programa principal ejecuta}

123

MANUAL DEL PROGRAMADOR: Ficheros Include

BEGIN
WINDOW(1,1,80,25);
TEXTBACKGROUND(COLOR5);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
TEXTCOLOR(COLOR6);
WINDOW(3,2,78,24);
PRESENTACION_NUDOS;
IF IOCONS=#27 THEN GOTO FIN;
PRE_ADQUISICION;
{IF IOCONS=#27 THEN GOTO FIN;}
ADQUISICION_DATOS_PCLAB;
COMPARACION_Y_PRESENTACION_DE_RESULTADOS_FINALES;
FIN:
END;

124

4.- ARCHIVOS EJECUTABLES

Los archivos ejecutables son aquellos que con extensin .EXE son llamados
desde el entorno del sistema operativo, y pueden, por tanto, ejecutarse de forma independiente
al programa principal.

En la realizacin del paquete de evaluacin se han utilizado tres archivos


ejecutables. Dos pertenecen a llamadas de utilidad del propio programa (ESPACIO1,
LOCALIZA), y uno es el archivo de instalacin del conjunto (INSTALA).

Estudiaremos estos archivos:

4.1.- ESPACIO1

4.1.1.- DESCRIPCIN DEL PROGRAMA.

El archivo aqu propuesto es un mini programa que funciona de forma parecida


al comando DIR del sistema operativo, pero que ademas de presentar el listado de archivos
de un directorio o subdirectorio dado, aade a la informacin el espacio ocupado por los
mismos (archivos que coinciden con un especificador dado).

El procedimiento principal de este programa, se basa en las llamadas recursivas


de las instrucciones del sistema FINDFIRST (buscar el primero), y FINDNEXT (buscar el
siguiente), que listan el conjunto de archivos que contiene un directorio o subdirectorio, y que
125

MANUAL DEL PROGRAMADOR: Archivos ejecutables

coinciden con un especificador dado.

La informacin adicional de los archivos listados (fecha de la ltima


modificacin, tamao...) se obtiene del rea de transferencia del disco (ATD).

4.1.2.- DIRECTIVAS DE COMPILACIN.

Las directivas de compilacin utilizadas son las siguientes :


{A+,S+,B-,E+,N+}
{$M 16384, 000000, 50000}

4.1.3.- UNIDADES UTILIZADAS.

Las unidades que se utilizan para su ejecucin por el compilador son las
siguientes : CRT, DOS.

4.1.4.- VARIABLES GLOBALES.

CONST
ORDENPORNOMBRE
ORDENPORFECHA
TYPE
CADENA80
CADENA15
PTRDTA
REGHORA
COMPHORA

= TRUE;
= FALSE;

= STRING[80];
= STRING[15];
= ^SEARCHREC;
= RECORD
: WORD;
{ formato comprimido Dos }
126

MANUAL DEL PROGRAMADOR: Archivos ejecutables

CADHORA : CADENA80;
PM
: BOOLEAN;
HORAS,MINUTOS,SEGUNDOS,CENTESIMAS : INTEGER
END;
REGFECHA = RECORD
FECHACOMP
: WORD;
CADENALARGAFECHA : CADENA80;
CADENAFECHA
: CADENA80;
AGNO,MES,DIA
: INTEGER;
DIASEMANA
: INTEGER
END;
PTRDIR = ^REGDIR;
REGDIR = RECORD
NOMBREFICHERO : CADENA15;
ATRIB
: BYTE;
TAMFICHERO
: LONGINT;
HORA
: REGHORA;
FECHA
: REGFECHA;
ANTERIOR
: PTRDIR;
SIGUIENTE
: PTRDIR;
END;

VAR
ESPACTOMADO
VAARRIBA
VAABAJO
ACTUAL
ESPECFICHERO
CADTRABAJO
ORDENADO
ESPECORDEN
ASCEN
I
PARAMS
COLOR1
COLOR2
COLOR3

: REAL;
: PTRDIR;
: PTRDIR;
: PTRDIR;
: CADENA80;
: CADENA80;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: INTEGER;
: BYTE;
: BYTE;
: BYTE;
: BYTE;

127

MANUAL DEL PROGRAMADOR: Archivos ejecutables

4.1.5.- VARIABLES LOCALES.

Son las utilizadas de forma individual en cada procedimiento, y/o funcin. (Ver
listado general del archivo).

4.1.6.- LISTADO.

PROGRAM ESPACIO;
{A+,S+,B-,E+,N+} {$M 16384, 000000, 50000}
USES CRT,DOS;
CONST
ORDENPORNOMBRE = TRUE;
ORDENPORFECHA = FALSE;
TYPE
CADENA80 = STRING[80];
CADENA15 = STRING[15];
PTRDTA = ^SEARCHREC;
REGHORA = RECORD
COMPHORA : WORD;
{ formato comprimido Dos }
CADHORA : CADENA80;
PM
: BOOLEAN;
HORAS,MINUTOS,SEGUNDOS,CENTESIMAS : INTEGER
END;
REGFECHA = RECORD
FECHACOMP
: WORD;
CADENALARGAFECHA : CADENA80;
CADENAFECHA
: CADENA80;
AGNO,MES,DIA
: INTEGER;
DIASEMANA
: INTEGER
END;
PTRDIR = ^REGDIR;
REGDIR = RECORD
NOMBREFICHERO : CADENA15;
ATRIB
: BYTE;
TAMFICHERO
: LONGINT;
HORA
: REGHORA;
FECHA
: REGFECHA;
ANTERIOR
: PTRDIR;
SIGUIENTE
: PTRDIR;

128

MANUAL DEL PROGRAMADOR: Archivos ejecutables

END;

VAR
PARAMS
: BYTE;
ESPACTOMADO : REAL;
VAARRIBA
: PTRDIR;
VAABAJO
: PTRDIR;
ACTUAL
: PTRDIR;
ESPECFICHERO : CADENA80;
CADTRABAJO : CADENA80;
ORDENADO
: BOOLEAN;
ESPECORDEN : BOOLEAN;
ASCEN
: BOOLEAN;
I
: INTEGER;
COLOR1
: BYTE;
COLOR2
: BYTE;
COLOR3
: BYTE;
(**********************************************************)
FUNCTION MODOVIDEOACTUAL : CHAR;
VAR
REGS : REGISTERS;
BEGIN
FILLCHAR(REGS,SIZEOF(REGS),0);
REGS.AH:=$0F;
INTR($10,REGS);
CASE REGS.AL OF
1..6 : MODOVIDEOACTUAL := C; {CGA}
7
: MODOVIDEOACTUAL := M; {monocromo}
8..10 : MODOVIDEOACTUAL := P; {PCjr}
13..16 : MODOVIDEOACTUAL := E {EGA}
END
END;
(**********************************************************)
FUNCTION CALCDIASEMANA(AGNO,MES,DIA : INTEGER) : INTEGER;
VAR
SALVARFECHA,FECHATRABAJO : REGISTERS;
NUMERODIA
: INTEGER;
BISIESTO
: BOOLEAN;
CONST
DAYARRAY : ARRAY[1..12] OF INTEGER =
(31,28,31,30,31,30,31,31,30,31,30,31);
BEGIN

129

MANUAL DEL PROGRAMADOR: Archivos ejecutables

BISIESTO := FALSE;
IF (MES = 2) AND ((AGNO MOD 4)=0) AND (DIA = 29) THEN
BISIESTO := TRUE;
IF (NOT BISIESTO) AND (DIA > DAYARRAY[MES]) THEN
CALCDIASEMANA := -1
ELSE
BEGIN
FECHATRABAJO.AH := $2B;
SALVARFECHA.AH := $2A; { salva la fecha en registros }
MSDOS(SALVARFECHA);
WITH FECHATRABAJO DO
BEGIN
CX := AGNO;
{ hace el reloj igual a la fecha introducida }
DH := MES;
DL := DIA;
MSDOS(FECHATRABAJO);
AH := $2A;
{ leer de nuevo la fecha para }
MSDOS(FECHATRABAJO); { obtene el indicador de la sem. }
NUMERODIA := AL;
{ en AL. }
IF BISIESTO THEN
{ corregir para aos bisiestos }
IF NUMERODIA = 0 THEN NUMERODIA := 6
ELSE NUMERODIA := PRED(NUMERODIA);
CALCDIASEMANA := NUMERODIA
END;
SALVARFECHA.AH := $2B; { reponer la fecha actual }
MSDOS(SALVARFECHA);
END
END;
(**********************************************************)
PROCEDURE CALCFECHA(VAR FECHAACTUAL : REGFECHA);
TYPE
CADENA9 = STRING[9];
CONST
MESES : ARRAY [1..12] OF CADENA9 =
(ENERO,FEBRERO,MARZO,ABRIL,MAYO,JUNIO,JULIO,
AGOSTO,SEPTIEMBRE,OCTUBRE,NOVIEMBRE,DICIEMBRE);
DIAS : ARRAY [0..6] OF CADENA9 =
(DOMINGO,LUNES,MARTES,MIRCOLES,
JUEVES,VIERNES,SBADO);
VAR
TEMP1 : CADENA80;
BEGIN
WITH FECHAACTUAL DO
BEGIN
DIASEMANA := CALCDIASEMANA(AGNO,MES,DIA);
STR(MES,CADENAFECHA);
STR(DIA,TEMP1);
CADENAFECHA := CADENAFECHA + / + TEMP1;
CADENALARGAFECHA := DIAS[DIASEMANA] + , ;

130

MANUAL DEL PROGRAMADOR: Archivos ejecutables

CADENALARGAFECHA := CADENALARGAFECHA +
MESES[MES] + + TEMP1 + , ;
STR(AGNO,TEMP1);
CADENALARGAFECHA := CADENALARGAFECHA + TEMP1;
CADENAFECHA := CADENAFECHA + / + COPY(TEMP1,3,2);
FECHACOMP := (AGNO - 1980) * 512 + (MES * 32) + DIA
END
END;
(**********************************************************)
PROCEDURE CALCHORA(VAR HORAACTUAL : REGHORA);
TYPE
CADENA5 = STRING[5];
VAR
TEMP1,TEMP2 : CADENA5;
AMPM
: CHAR;
I
: INTEGER;
BEGIN
WITH HORAACTUAL DO
BEGIN
I := HORAS;
IF HORAS = 0 THEN I := 12; { "0" horas = 12AM }
IF HORAS > 12 THEN I := HORAS - 12;
IF HORAS > 11 THEN AMPM := P ELSE AMPM := A;
STR(I:2,TEMP1); STR(MINUTOS,TEMP2);
IF LENGTH(TEMP2) < 2 THEN TEMP2 := 0 + TEMP2;
CADHORA := TEMP1 + : + TEMP2 + AMPM;
COMPHORA :=
(HORAS SHL 11) OR (MINUTOS SHL 5) OR (SEGUNDOS SHR 1)
END
END;
(**********************************************************)
PROCEDURE DTAADIR(VAR REGSALIDA : REGDIR);
VAR
DATODT : DATETIME; { importado de la unidad dos }
I
: INTEGER;
REGINT : SEARCHREC; { idem }
REGCOMP : REGISTERS; { idem }
DTAACTUAL : PTRDTA;
BEGIN
REGCOMP.AX := $2F00; { localizar posicin actual del DTA }
MSDOS(REGCOMP);
WITH REGCOMP DO DTAACTUAL := PTR(ES,BX);
REGINT := DTAACTUAL^;
UNPACKTIME(REGINT.TIME,DATODT);
WITH REGSALIDA DO { extraer y reformatear los datos }
BEGIN

131

MANUAL DEL PROGRAMADOR: Archivos ejecutables

NOMBREFICHERO:= REGINT.NAME; { extraer nombre de fichero }


ATRIB := REGINT.ATTR; { extraer el campo de atributoS }
WITH HORA DO
{ desarrollar la hora comprimida }
BEGIN
COMPHORA := REGINT.TIME SHR 16;
HORAS := DATODT.HOUR;
MINUTOS := DATODT.MIN;
SEGUNDOS := DATODT.SEC;
CENTESIMAS := 0;
END;
CALCHORA(HORA);
{ llenar los otros campos }
WITH FECHA DO
{ desarrollar la fecha comprimida }
BEGIN
FECHACOMP := REGINT.TIME AND $0000FFFF;
DIA := DATODT.DAY;
MES := DATODT.MONTH;
AGNO := DATODT.YEAR;
END;
CALCFECHA(FECHA); { llenar los otros campos }
TAMFICHERO := REGINT.SIZE;
SIGUIENTE := NIL;
{ inicializar el puntero "SIGUIENTE" }
ANTERIOR := NIL;
{ inicializar el puntero "ANTERIOR" }
END
END; { DTAADIR }
(**********************************************************)
PROCEDURE TOMARDIR(ESPECFICHERO : CADENA80;
ORDENADO
: BOOLEAN;
ORDENPORNOMBRE : BOOLEAN;
VAR ASCEN
: PTRDIR;
VAR DESCEN
: PTRDIR);
TYPE
CADENA9 = STRING[9];
VAR
I
: INTEGER;
ERROR
: INTEGER;
REGS
: REGISTERS;
NUESTRODTA : SEARCHREC;
RAIZ
: PTRDIR;
ACTUAL
: PTRDIR;
ULTIMO
: PTRDIR;
ALMAC
: PTRDIR;
POSICIONENC : BOOLEAN;
(**********************************************************)
FUNCTION DESPUESDE(ENTRADIZ,ENTRADDER : PTRDIR) : BOOLEAN;
BEGIN
IF ENTRADIZ^.FECHA.FECHACOMP > ENTRADDER^.FECHA.FECHACOMP THEN
DESPUESDE := TRUE
ELSE

132

MANUAL DEL PROGRAMADOR: Archivos ejecutables

IF (ENTRADIZ^.FECHA.FECHACOMP = ENTRADDER^.FECHA.FECHACOMP)
AND
(ENTRADIZ^.HORA.COMPHORA > ENTRADDER^.HORA.COMPHORA)
THEN DESPUESDE := TRUE
ELSE DESPUESDE := FALSE
END;
(**********************************************************)
PROCEDURE ANADIRPORFINAL(VAR ALMAC,DESCEN : PTRDIR);
BEGIN
DESCEN^.SIGUIENTE := ALMAC; { aadir registro al final de la lista }
DESCEN^.SIGUIENTE^.ANTERIOR := DESCEN; { inic. puntero inverso }
DESCEN := DESCEN^.SIGUIENTE; { hacer REG. SIGUIENTE el ACTUAL }
END;
(*********************)
BEGIN { TOMARDIR }
FINDFIRST(ESPECFICHERO,$16,NUESTRODTA); { llamada a dos, FIND FIRST dos }
ERROR := DOSERROR;
IF ERROR = 2 THEN
{ no hay ficheros que coincidan con el espec. }
BEGIN
ASCEN := NIL;
{ los dos punteros de la lista a NIL }
DESCEN := NIL
END
ELSE
{ al menos se encontr un fichero }
BEGIN
NEW(RAIZ);
{ crear un registro para el primero encontrado }
DTAADIR(RAIZ^); { convertirlo a formato DIR }
ACTUAL := RAIZ; { el registro ACTUAL es ahora el RAIZ }
DESCEN := RAIZ; { y tambin el ltimo registro de la lista }
IF ERROR <> 18 THEN
REPEAT
FINDNEXT(NUESTRODTA); { hacer llamada a dos: FIND NEXT }
ERROR := DOSERROR;
IF ERROR <> 18 THEN { existen ms entradas }
BEGIN
NEW(ALMAC);
{ crear registro con un puntero temporal }
DTAADIR(ALMAC^); { convertir a formato DIR }
{ las listas ordenada y no ordenadas se forman de forma diferente}
{ si estamos formando una lista ordenada deberemos buscar en ella}
{ cada entrada con el fin de localizar el lugar donde ubicarla. Para}
{ las listas no ordenadas solamente tenemos que aadir el nuevo ele-}
{ mento al final de la lista y hacer que el siguiente sea el actual}
IF ORDENADO THEN
BEGIN
ACTUAL := RAIZ; { recorrer lista para encontrar punto de inters}
REPEAT
IF ORDENPORNOMBRE THEN
IF ACTUAL^.NOMBREFICHERO > ALMAC^.NOMBREFICHERO THEN
POSICIONENC := TRUE ELSE POSICIONENC := FALSE
ELSE
{ para ordenar lista por hora/fecha }
IF DESPUESDE(ACTUAL,ALMAC) THEN

133

MANUAL DEL PROGRAMADOR: Archivos ejecutables

POSICIONENC := TRUE ELSE POSICIONENC := FALSE;


IF NOT POSICIONENC THEN
ACTUAL := ACTUAL^.SIGUIENTE; { pasar al siguiente }
UNTIL (ACTUAL = NIL) OR POSICIONENC;
{ cuando se encuentra la posicin, es necesario insertar }
{ el registro en la lista antes de ACTUAL^-- }
{ esto se hace de forma diferente si ACTUALT^ est }
{ al final de la lista. (ACTUAL = RAIZ)}
IF POSICIONENC THEN { insertar al principio... }
BEGIN
{ ...o en medio }
{ NOTA: no cambiar el orden de asignacin }
{ de punteros en la siguiente sentencia }
{ IF/THEN/ELSE }
IF ACTUAL = RAIZ THEN { insertar al principio }
BEGIN
ALMAC^.SIGUIENTE := RAIZ;
ACTUAL^.ANTERIOR := ALMAC;
RAIZ := ALMAC;
END
ELSE { insertar en medio: }
BEGIN
ALMAC^.SIGUIENTE := ACTUAL;
ALMAC^.ANTERIOR := ACTUAL^.ANTERIOR;
ACTUAL^.ANTERIOR^.SIGUIENTE := ALMAC;
ACTUAL^.ANTERIOR := ALMAC
END
END
ELSE { el nuevo registro pertenece al final de la lista }
ANADIRPORFINAL(ALMAC,DESCEN)
END
ELSE { si no hay que ordenar aadimos al final de la lista: }
ANADIRPORFINAL(ALMAC,DESCEN)
END
UNTIL ERROR = 18;
ASCEN := RAIZ
END
END; {TOMARDIR}
(**********************************************************)
FUNCTION DIRACADENA(DIRENT : REGDIR) : STRING;
CONST
BLANCOS =

VAR
TEMP,CADTRABAJO : CADENA80;
POSPUNTO : INTEGER;
BEGIN
WITH DIRENT DO
BEGIN
TEMP :=
;
{si la entrada tiene atributo de directorio, formato diferente: }
IF (ATRIB AND $10) <> 0 THEN { el BIT 4 es el ATRIB. de direct. }

134

MANUAL DEL PROGRAMADOR: Archivos ejecutables

BEGIN
INSERT(NOMBREFICHERO,TEMP,1); { no hay extens. en nombres de subdir. }
INSERT(<DIR>,TEMP,14) { decirle al mundo que es un subdir. }
END
ELSE
{ esta sentencia compuesta separa el nombre del fichero y su }
{ extensin, y convierte el tamao en una cadena. NO se }
{ inserta una cifra de tamao en TEMP para los subdirectorios. }
BEGIN
POSPUNTO := POS(.,NOMBREFICHERO);
IF POSPUNTO > 0 THEN { el nombre del fichero tiene extensin }
CADTRABAJO := COPY(NOMBREFICHERO,1,POSPUNTO-1) +
COPY(BLANCOS,1,9-POSPUNTO) + . +
COPY(NOMBREFICHERO,POSPUNTO+1,LENGTH(NOMBREFICHERO)-POSPUNTO)
ELSE
CADTRABAJO := NOMBREFICHERO + COPY(BLANCOS,1,8-LENGTH(NOMBREFICHERO));
INSERT(CADTRABAJO,TEMP,1);
STR(TAMFICHERO:7,CADTRABAJO);
INSERT(CADTRABAJO,TEMP,15)
END;
WITH FECHA DO
BEGIN
{ esta sentencia une las tres cifras independientes para }
{ el mes, el da, y el ao, en una cadena.}
IF MES < 10 THEN INSERT(0,CADENAFECHA,1);
IF DIA < 10 THEN INSERT(0,CADENAFECHA,4);
INSERT(CADENAFECHA,TEMP,24);
END;
INSERT(HORA.CADHORA,TEMP,34); { finalmente, insertar la hora }
END;
DELETE(TEMP,42,LENGTH(TEMP)-42);
DIRACADENA := TEMP
END;
(**********************************************************)
PROCEDURE ELIMINARDIRECTORIO(PUNTERORAIZ : PTRDIR);
VAR
ALMAC : PTRDIR;
BEGIN
IF PUNTERORAIZ <> NIL THEN
{ no se puede eliminar una lista vaca }
REPEAT
ALMAC := PUNTERORAIZ^.SIGUIENTE; { tomar el siguiente registro. }
DISPOSE(PUNTERORAIZ);
{ eliminar el primero... }
PUNTERORAIZ := ALMAC
{ ...y hacer primero al siguiente... }
UNTIL PUNTERORAIZ = NIL
{ ...hasta terminar con la lista. }
END;
(**********************************************************)
BEGIN
WINDOW(3,5,78,24);
CLRSCR;

135

MANUAL DEL PROGRAMADOR: Archivos ejecutables

{vemos el modo de vdeo para tener en cuenta los colores}


IF MODOVIDEOACTUAL=M THEN BEGIN
COLOR1:=WHITE;
COLOR2:=WHITE;
COLOR3:=WHITE
END
ELSE BEGIN
COLOR1:=YELLOW;
COLOR2:=LIGHTRED;
COLOR3:=LIGHTGREEN
END;
TEXTCOLOR(COLOR1);
TEXTBACKGROUND(LIGHTBLUE);
ORDENADO := FALSE;
{ disponer valores por defecto }
ESPECORDEN := ORDENPORNOMBRE;
ASCEN := TRUE;
PARAMS := ORD(PARAMCOUNT); { convierte PARAMCOUNT en un valor ordinal }
CASE PARAMS OF
0:
BEGIN
TEXTCOLOR(COLOR3);
WRITELN( EVALUACION V:1.00 "EMILIO SAHUQUILLO & JULIO MARTINEZ");
TEXTCOLOR(COLOR1);
WRITELN( Esta opcin presenta todos los ficheros que concuerdan con un);
WRITELN( especificador dado. Los ficheros ocultos y los del sistema NO son inmunes.);
TEXTCOLOR(COLOR2);
WRITELN( SINTAXIS DE LLAMADA:);
WRITELN( <ESPECIFICADOR DE FICHERO> N F A D);
TEXTCOLOR(COLOR1);
WRITELN( Donde <ESPECIFICADOR DE FICHERO> es cualquier especificador );
WRITELN( de fichero DOS legal. El segundo parmetro es N o F:);
WRITELN( N indica ordenacin por NOMBRE de los ficheros; F ordenacin por FECHA.);
WRITELN( Al no darse este parmetro, los ficheros se presentan en su orden fsico.);
TEXTCOLOR(COLOR2);
WRITELN( EL TERCER PAR METRO PUEDE SER A O D:);
TEXTCOLOR(COLOR1);
WRITELN( A indica un orden de presentacin ASCENDENTE; D DESCENDENTE.);
WRITELN( En caso de no darse este parmetro, la presentacin se hace ASCENDENTE);
TEXTCOLOR(COLOR2);
WRITELN( POR EJEMPLO :);
TEXTCOLOR(COLOR1);
WRITELN( *.EXE N);
WRITELN( Presentar TODOS los ficheros con extensin .EXE,);
WRITELN( en orden ASCENDENTE segn su NOMBRE. O, );
WRITELN( *.EVA F D);
WRITELN( Presentar TODOS los ficheros con extensin .EVA,);
WRITELN( en orden DESCENDENTE segn su FECHA de ltima modificacin.);
HALT;
END;
1 : ESPECFICHERO := PARAMSTR(1);
2 : BEGIN
ORDENADO := TRUE;
ESPECFICHERO := PARAMSTR(1);
CADTRABAJO := PARAMSTR(2);

136

MANUAL DEL PROGRAMADOR: Archivos ejecutables

CASE UPCASE(CADTRABAJO[1]) OF
F : ESPECORDEN := ORDENPORFECHA;
N : ESPECORDEN := ORDENPORNOMBRE;
ELSE ORDENADO := FALSE
END
END;
3 : BEGIN
ORDENADO := TRUE;
ESPECFICHERO := PARAMSTR(1);
CADTRABAJO := PARAMSTR(2);
CASE UPCASE(CADTRABAJO[1]) OF
F : ESPECORDEN := ORDENPORFECHA;
N : ESPECORDEN := ORDENPORNOMBRE;
ELSE ORDENADO := FALSE
END;
IF ORDENADO THEN
BEGIN
CADTRABAJO := PARAMSTR(3);
CASE UPCASE(CADTRABAJO[1]) OF
A : ASCEN := TRUE;
D : ASCEN := FALSE;
ELSE ASCEN := TRUE
END
END
END;
END; { CASE }
{ ahora construimos realmente la lista de entradas de directorio, }
{ basada en los parmetros pasados en la lnea de comandos: }
TOMARDIR(ESPECFICHERO,ORDENADO,ESPECORDEN,VAARRIBA,VAABAJO);
IF ASCEN THEN ACTUAL := VAARRIBA
ELSE ACTUAL := VAABAJO;
IF ACTUAL = NIL THEN WRITELN(NO SE ENCONTRARON FICHEROS.)
ELSE
BEGIN
ESPACTOMADO := 0.0;
IF ASCEN THEN
WHILE ACTUAL <> NIL DO
BEGIN
WRITELN(DIRACADENA(ACTUAL^));
ESPACTOMADO := ESPACTOMADO + ACTUAL^.TAMFICHERO;
ACTUAL := ACTUAL^.SIGUIENTE
END
ELSE
WHILE ACTUAL <> NIL DO
BEGIN
WRITELN(DIRACADENA(ACTUAL^));
ESPACTOMADO := ESPACTOMADO + ACTUAL^.TAMFICHERO;
ACTUAL := ACTUAL^.ANTERIOR
END;
WRITELN
(El espacio total ocupado por estos ficheros es de ,ESPACTOMADO:9:0, bytes)
END;

ELIMINARDIRECTORIO(ACTUAL);

137

MANUAL DEL PROGRAMADOR: Archivos ejecutables

TEXTCOLOR(WHITE);
TEXTBACKGROUND(BLACK);
LOWVIDEO
END.

138

MANUAL DEL PROGRAMADOR: Archivos ejecutables

4.2.- LOCALIZA

4.2.1.- DESCRIPCIN DEL PROGRAMA.

LOCALIZA es el programa que ejecuta desde el entorno del sistema operativo


la opcin localizar del programa principal. Este programa ejecutable busca un fichero o
conjunto de ficheros que coinciden con un especificador dado, dentro de un directorio y los
subdirectorios que estn incluidos dentro del primero.

El programa es ideal para encontrar la posicin de un archivo (o grupo) perdido


dentro de cualquier unidad de disco.

El procedimiento principal (Buscar_directorio) es llamado de forma recursiva


por si mismo tantas veces como sea necesario. Por tanto, el procedimiento se llama la primera
vez por el directorio especificado por el usuario, y tantas veces como subdirectorios haya
dentro del mismo. Esto hace que el primer archivo presentado sea aquel que se encuentra ms
escondido, pus la ltima llamada que es cerrada por el procedimiento es la primera que se
efectu, y que coincide con el directorio principal nombrado por el usuario (y que contiene
los dems subdirectorios sobre los que buscar).

La informacin adicional de los archivos encontrados (tamao, fecha de la


ltima modificacin...) se consigue creando un rea de transferencia de disco (ATD), por cada
archivo encontrado.

139

MANUAL DEL PROGRAMADOR: Archivos ejecutables

4.2.2.- DIRECTIVAS DE COMPILACIN.

Las directivas utilizadas son las siguientes :

{A+,S+,B-,E+,N+}
{$M 16384, 000000, 50000}

4.2.3.- UNIDADES UTILIZADAS.

Las unidades que utiliza son las siguientes : CRT, DOS.

4.2.4.- VARIABLES GLOBALES.

TYPE
CADENA80
CADENA15

= STRING[80];
= STRING[15];

REGHORA = RECORD
COMPHORA : WORD;
{ formato comprimido DOS }
CADHORA : CADENA80;
PM
: BOOLEAN;
HORAS,MINUTOS,SEGUNDOS,CENTESIMAS : INTEGER
END;
REGFECHA = RECORD
FECHACOMP
: WORD;
CADENALARGAFECHA : CADENA80;
CADENAFECHA
: CADENA80;
AGNO,MES,DIA
: INTEGER;
DIASEMANA
: INTEGER
END;
PTRDIR = ^REGDIR;
140

MANUAL DEL PROGRAMADOR: Archivos ejecutables

REGDIR = RECORD
NOMBREFICHERO : CADENA15;
ATRIB
: BYTE;
TAMFICHERO
: LONGINT;
HORA
: REGHORA;
FECHA
: REGFECHA;
ANTERIOR
: PTRDIR;
SIGUIENTE
: PTRDIR;
END;
PTRDTA = ^SEARCHREC;

VAR
I,J
ESPECBUSQUEDA
DIRECTORIOINIC
BUFFERBUSQ
COLOR1
COLOR2
COLOR3

: INTEGER;
: CADENA80;
: CADENA80;
: SEARCHREC;
: BYTE;
: BYTE;
: BYTE;

4.2.5.- VARIABLES LOCALES.

Son las que se corresponden a su utilizacin a cada procedimiento y/o funcin,


y son declaras en cada uno de ellos. (Ver listado).

4.2.6.- LISTADO.

PROGRAM LOCALIZA;
{A+,S+,B-,E+,N+} {$M 16384, 000000, 50000}
USES CRT,DOS;
TYPE
CADENA80 = STRING[80];
CADENA15 = STRING[15];

141

MANUAL DEL PROGRAMADOR: Archivos ejecutables

REGHORA = RECORD
COMPHORA : WORD;
{ formato comprimido DOS }
CADHORA : CADENA80;
PM
: BOOLEAN;
HORAS,MINUTOS,SEGUNDOS,CENTESIMAS : INTEGER
END;
REGFECHA = RECORD
FECHACOMP
: WORD;
CADENALARGAFECHA : CADENA80;
CADENAFECHA
: CADENA80;
AGNO,MES,DIA
: INTEGER;
DIASEMANA
: INTEGER
END;
PTRDIR = ^REGDIR;
REGDIR = RECORD
NOMBREFICHERO : CADENA15;
ATRIB
: BYTE;
TAMFICHERO
: LONGINT;
HORA
: REGHORA;
FECHA
: REGFECHA;
ANTERIOR
: PTRDIR;
SIGUIENTE
: PTRDIR;
END;
PTRDTA = ^SEARCHREC;

VAR
I,J
: INTEGER;
ESPECBUSQUEDA : CADENA80;
DIRECTORIOINIC : CADENA80;
BUFFERBUSQ
: SEARCHREC;
COLOR1
: BYTE;
COLOR2
: BYTE;
COLOR3
: BYTE;
(**********************************************************)
FUNCTION MODOVIDEOACTUAL : CHAR;
VAR
REGS : REGISTERS;
BEGIN
FILLCHAR(REGS,SIZEOF(REGS),0);
REGS.AH:=$0F;
INTR($10,REGS);
CASE REGS.AL OF
1..6 : MODOVIDEOACTUAL := C; {CGA}
7
: MODOVIDEOACTUAL := M; {monocromo}
8..10 : MODOVIDEOACTUAL := P; {PCjr}
13..16 : MODOVIDEOACTUAL := E {EGA}

142

MANUAL DEL PROGRAMADOR: Archivos ejecutables

END
END;
(**********************************************************)
FUNCTION CALCDIASEMANA(AGNO,MES,DIA : INTEGER) : INTEGER;

VAR
SALVARFECHA,FECHATRABAJO : REGISTERS;
NUMERODIA
: INTEGER;
BISIESTO
: BOOLEAN;
CONST
DAYARRAY : ARRAY[1..12] OF INTEGER =
(31,28,31,30,31,30,31,31,30,31,30,31);
BEGIN
BISIESTO := FALSE;
IF (MES = 2) AND ((AGNO MOD 4)=0) AND (DIA = 29) THEN
BISIESTO := TRUE;
IF (NOT BISIESTO) AND (DIA > DAYARRAY[MES]) THEN
CALCDIASEMANA := -1
ELSE
BEGIN
FECHATRABAJO.AH := $2B;
SALVARFECHA.AH := $2A; { Salva la fecha en registros }
MSDOS(SALVARFECHA);
WITH FECHATRABAJO DO
BEGIN
CX := AGNO;
{ Hace el reloj igual a la fecha introducida }
DH := MES;
DL := DIA;
MSDOS(FECHATRABAJO);
AH := $2A;
{ Leer de nuevo la fecha para }
MSDOS(FECHATRABAJO); { obtener el indicador de da de la sem. }
NUMERODIA := AL;
{ en AL. }
IF BISIESTO THEN
{ Corregir para aos bisiesto }
IF NUMERODIA = 0 THEN NUMERODIA := 6
ELSE NUMERODIA := PRED(NUMERODIA);
CALCDIASEMANA := NUMERODIA
END;
SALVARFECHA.AH := $2B; { Reponer la fecha actual }
MSDOS(SALVARFECHA);
END
END;
(**********************************************************)
PROCEDURE CALCFECHA(VAR FECHAACTUAL : REGFECHA);
TYPE
CADENA9 = STRING[9];

143

MANUAL DEL PROGRAMADOR: Archivos ejecutables

CONST
MESES : ARRAY [1..12] OF CADENA9 =
(Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,
Agosto,Septiembre,Octubre,Noviembre,Diciembre);
DIAS : ARRAY [0..6] OF CADENA9 =
(Domingo,Lunes,Martes,Mircoles,
Jueves,Viernes,Sbado);
VAR
TEMP1 : CADENA80;
BEGIN
WITH FECHAACTUAL DO
BEGIN
DIASEMANA := CALCDIASEMANA(AGNO,MES,DIA);
STR(MES,CADENAFECHA);
STR(DIA,TEMP1);
CADENAFECHA := CADENAFECHA + / + TEMP1;
CADENALARGAFECHA := DIAS[DIASEMANA] + , ;
CADENALARGAFECHA := CADENALARGAFECHA +
MESES[MES] + + TEMP1 + , ;
STR(AGNO,TEMP1);
CADENALARGAFECHA := CADENALARGAFECHA + TEMP1;
CADENAFECHA := CADENAFECHA + / + COPY(TEMP1,3,2);
FECHACOMP := (AGNO - 1980) * 512 + (MES * 32) + DIA
END
END;
(**********************************************************)
PROCEDURE CALCHORA(VAR HORAACTUAL : REGHORA);
TYPE
CADENA5 = STRING[5];
VAR
TEMP1,TEMP2 : CADENA5;
AMPM
: CHAR;
I
: INTEGER;
BEGIN
WITH HORAACTUAL DO
BEGIN
I := HORAS;
IF HORAS = 0 THEN I := 12; { "0" horas = 12am }
IF HORAS > 12 THEN I := HORAS - 12;
IF HORAS > 11 THEN AMPM := p ELSE AMPM := a;
STR(I:2,TEMP1); STR(MINUTOS,TEMP2);
IF LENGTH(TEMP2) < 2 THEN TEMP2 := 0 + TEMP2;
CADHORA := TEMP1 + : + TEMP2 + AMPM;
COMPHORA :=
(HORAS SHL 11) OR (MINUTOS SHL 5) OR (SEGUNDOS SHR 1)
END
END;

144

MANUAL DEL PROGRAMADOR: Archivos ejecutables

(**********************************************************)
FUNCTION DIRACADENA(DIRENT : REGDIR) : STRING;
CONST
BLANCOS=

VAR
TEMP,CADTRABAJO : CADENA80;
POSPUNTO : INTEGER;
BEGIN
WITH DIRENT DO
BEGIN
TEMP :=
;
{Si la entrada tiene atributo de directorio, formato diferente: }
IF (ATRIB AND $10) <> 0 THEN { el bit 4 es el atrib. de direct. }
BEGIN
INSERT(NOMBREFICHERO,TEMP,1); { No hay extens. en nombres de subdir. }
INSERT(<DIR>,TEMP,14) { Decirle al mundo qu es un subdir. }
END
ELSE
{ Esta sentencia compuesta separa el nombre del fichero y su }
{ extensin, y convierte el tamao en una cadena. No se }
{ inserta una cifra de tamao en Temp para los subdirectorios. }
BEGIN
POSPUNTO := POS(.,NOMBREFICHERO);
IF POSPUNTO > 0 THEN { El nombre del fichero tiene extensin }
CADTRABAJO := COPY(NOMBREFICHERO,1,POSPUNTO-1) +
COPY(BLANCOS,1,9-POSPUNTO) + . +
COPY(NOMBREFICHERO,POSPUNTO+1,LENGTH(NOMBREFICHERO)-POSPUNTO)
ELSE
CADTRABAJO := NOMBREFICHERO + COPY(BLANCOS,1,8-LENGTH(NOMBREFICHERO))
+ .;
INSERT(CADTRABAJO,TEMP,1);
STR(TAMFICHERO:7,CADTRABAJO);
INSERT(CADTRABAJO,TEMP,15)
END;
WITH FECHA DO
BEGIN
{ Esta sentencia une las tres cifras independientes para }
{ el mes, el dia, y el ao, en una cadena.}
IF MES < 10 THEN INSERT(0,CADENAFECHA,1);
IF DIA < 10 THEN INSERT(0,CADENAFECHA,4);
INSERT(CADENAFECHA,TEMP,24);
END;
INSERT(HORA.CADHORA,TEMP,34); { Finalmente, insertar la hora }
END;
DELETE(TEMP,42,LENGTH(TEMP)-42);
DIRACADENA := TEMP
END;
(**********************************************************)
PROCEDURE DTAADIR(VAR REGSALIDA : REGDIR);

145

MANUAL DEL PROGRAMADOR: Archivos ejecutables

VAR
DATODT : DATETIME; { Importado de la unidad DOS }
I
: INTEGER;
REGINT : SEARCHREC; { Idem }
REGCOMP : REGISTERS; { Idem }
DTAACTUAL : PTRDTA;
BEGIN
REGCOMP.AX := $2F00; { Localizar posicin actual del DTA }
MSDOS(REGCOMP);
WITH REGCOMP DO DTAACTUAL := PTR(ES,BX);
REGINT := DTAACTUAL^;
UNPACKTIME(REGINT.TIME,DATODT);
WITH REGSALIDA DO { Extraer y reformatear los datos }
BEGIN
NOMBREFICHERO:= REGINT.NAME; { Extraer nombre de fichero }
ATRIB := REGINT.ATTR; { Extraer el campo de atributos }
WITH HORA DO
{ Desarrollar la hora comprimida }
BEGIN
COMPHORA := REGINT.TIME SHR 16;
HORAS := DATODT.HOUR;
MINUTOS := DATODT.MIN;
SEGUNDOS := DATODT.SEC;
CENTESIMAS := 0;
END;
CALCHORA(HORA);
{ Llenar los otros campos }
WITH FECHA DO
{ Desarrollar la fecha comprimida }
BEGIN
FECHACOMP := REGINT.TIME AND $0000FFFF;
DIA := DATODT.DAY;
MES := DATODT.MONTH;
AGNO := DATODT.YEAR;
END;
CALCFECHA(FECHA); { Llenar los otros campos }
TAMFICHERO := REGINT.SIZE;
SIGUIENTE := NIL;
{ Inicializar el puntero "siguiente" }
ANTERIOR := NIL
{ Inicializar el puntero "anterior" }
END
END; { DTAADIR }
(**********************************************************)
PROCEDURE BUSCARDIRECTORIO(DIRECTORIO,ESPECBUSQUEDA : STRING);
VAR
SIGUIENTEDIRECTORIO : STRING;
DIRECTORIOTEMP
: STRING;
DTAACTUAL
: SEARCHREC;
DIRACTUAL
: REGDIR;
REGS
: REGISTERS;

{>>>>PresenDatos<<<<}
{ Presenta los datos del fichero y la va de acceso completa }

146

MANUAL DEL PROGRAMADOR: Archivos ejecutables

(*********************)
PROCEDURE PRESENDATOS(DIRECTORIO : STRING; DIRACTUAL : REGDIR);
VAR
TEMP : STRING;
BEGIN
TEMP := DIRACADENA(DIRACTUAL);
DELETE(TEMP,1,13);
WRITE(TEMP,DIRECTORIO);
IF DIRECTORIO <> \ THEN WRITE(\);
WRITELN(DIRACTUAL.NOMBREFICHERO)
END;

BEGIN
{ En primer lugar buscamos subdirectorios. Si se encuentra alguno, }
{ hacemos una llamada recursiva para buscar en l tambin. }
{ Suprimir barras innecesarias si buscamos la raz: }
IF DIRECTORIO = \ THEN
DIRECTORIOTEMP := DIRECTORIO + *.*
ELSE
DIRECTORIOTEMP := DIRECTORIO + \*.*;
{ Hacer la llamada a FIND FIRST para los directorios: }
FINDFIRST(DIRECTORIOTEMP,$10,DTAACTUAL);

{ Aqu hay un pequeo truco. Si tenemos alguna indicacin de que }


{ hay al menos un subdirectorio ms adentro del directorio actual, }
{ (no aparecen los cdigos de error 2 18) debemos buscar en l }
{ haciendo una llamada recursiva a BuscarDirectorio. Continuamos }
{ con esta estrategia hasta que ya no queden ms subdirectorios }
{ por explorar. }
WHILE (DOSERROR <> 2) AND (DOSERROR <> 18) DO
BEGIN
IF ((DTAACTUAL.ATTR AND $10) = $10) { Si es un directorio }
AND (DTAACTUAL.NAME[1] <> .) THEN { y no . o .. }
BEGIN
{ Aadimos una barra para separar las secciones de la va }
{ de acceso si no estamos buscando en el directorio raz: }
IF DIRECTORIO <> \ THEN SIGUIENTEDIRECTORIO := DIRECTORIO + \
ELSE SIGUIENTEDIRECTORIO := DIRECTORIO;
{ Se comienza con el nombre del directorio actual, y se }
{ copia el nombre del directorio encotrado desde el DTA }
{ al final de la cadena del directorio actual. Luego se }
{ pasa la nueva va de acceso a la siguiente llamada }
{ recursiva a BuscarDirectorio. }
SIGUIENTEDIRECTORIO := SIGUIENTEDIRECTORIO + DTAACTUAL.NAME;

147

MANUAL DEL PROGRAMADOR: Archivos ejecutables

{ El procedimiento se llama a s mismo. }


BUSCARDIRECTORIO(SIGUIENTEDIRECTORIO,ESPECBUSQUEDA)
END;
FINDNEXT(DTAACTUAL) { Buscamos ms... }
END;
{
{
{
{

Ahora podemos buscar ficheros, una vez que hemos acabado con
}
los directorios. Esto es conceptualmente simple, ya que no
}
involucra recursividad. Combinamos la va acceso y el especi- }
ficador en una sola cadena y hacemos la llamada a FIND FIRST: }

{ Suprimir barras innecesarias para buscar en el directorio raz: }


IF DIRECTORIO <> \ THEN
DIRECTORIOTEMP := DIRECTORIO + \ + ESPECBUSQUEDA
ELSE DIRECTORIOTEMP := DIRECTORIO + ESPECBUSQUEDA;
{ Hacer la llamada a FIND FIRST: }
FINDFIRST(DIRECTORIOTEMP,$07,DTAACTUAL);
IF DOSERROR = 3 THEN
{ va de acceso errnea }
WRITELN(va de acceso no encontrada; compruebe los datos.)
{ Si encontramos en el directorio actual algo que coincida con el espe- }
{ cificador, se aade con el formato adecuado a una cadena y se presenta }
ELSE IF (DOSERROR = 2) OR (DOSERROR = 18) THEN
{ Cadena nula: directorio vacio }
ELSE
BEGIN
DTAADIR(DIRACTUAL);
{ Convertir a formato DIR.. }
PRESENDATOS(DIRECTORIO,DIRACTUAL);
{ Presentar informacin }
IF DOSERROR <> 18 THEN { Existen ms ficheros... }
REPEAT
FINDNEXT(DTAACTUAL);
IF DOSERROR <> 18 THEN { Existen ms entradas }
BEGIN
DTAADIR(DIRACTUAL); { Convertir a formato DIR }
PRESENDATOS(DIRECTORIO,DIRACTUAL) { Presentar informacin }
END
UNTIL (DOSERROR = 18) OR (DOSERROR = 2) { No hay ms ficheros }
END
END;
(**********************************************************)
BEGIN
WINDOW(3,5,78,24);
CLRSCR;
{vemos el modo de vdeo para tener en cuenta los colores}
IF MODOVIDEOACTUAL=M THEN BEGIN
COLOR1:=WHITE;
COLOR2:=WHITE;
COLOR3:=WHITE
END

148

MANUAL DEL PROGRAMADOR: Archivos ejecutables

ELSE BEGIN
COLOR1:=YELLOW;
COLOR2:=LIGHTRED;
COLOR3:=LIGHTGREEN
END;
TEXTBACKGROUND(LIGHTBLUE);
TEXTCOLOR(COLOR1);
IF PARAMCOUNT = 0 THEN
BEGIN
TEXTCOLOR(COLOR3);
WRITELN( EVALUACION V:1.00 "EMILIO SAHUQUILLO & JULIO MARTINEZ");
TEXTCOLOR(COLOR1);
WRITELN;
WRITELN( Esta opcin busca en el disco de trabajo todos los );
WRITELN( ficheros que concuerdan con un determinado especificador,);
WRITELN( examinando todos los subidirectorios necesarios.);
WRITELN( Dado slo el especificador, se presentar la va );
WRITELN( de acceso completa de cualquier fichero que se considere);
WRITELN( adecuado.);
TEXTCOLOR(COLOR2);
WRITELN( SINTAXIS DE LLAMADA:);
WRITELN( <especificador de fichero>);
TEXTCOLOR(COLOR1);
WRITELN;
TEXTCOLOR(COLOR2);
WRITELN( Por ejemplo : );
TEXTCOLOR(COLOR1);
WRITELN( para encontrar todos los ficheros de texto );
WRITELN( (que terminan en .TXT) deberemos introducir:);
WRITELN;
WRITELN( *.TXT);
WRITELN;
WRITELN( y se mostrar la va de acceso completa de );
WRITELN( cualquier fichero con la extensin .TXT.)
END
ELSE
BEGIN
WRITELN;
ESPECBUSQUEDA := PARAMSTR(1);
{ Si no se da especificador se buscar en todo el disco: }
IF POS(\,ESPECBUSQUEDA) = 0 THEN
BUSCARDIRECTORIO(\,ESPECBUSQUEDA)
ELSE
BEGIN
{ Se separa el especificador de la va de acceso: }
I := LENGTH(ESPECBUSQUEDA);
WHILE ESPECBUSQUEDA[I] <> \ DO I := PRED(I);
DIRECTORIOINIC := COPY(ESPECBUSQUEDA,1,I-1);
DELETE(ESPECBUSQUEDA,1,I);
BUSCARDIRECTORIO(DIRECTORIOINIC,ESPECBUSQUEDA)
END
END;
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE);

149

MANUAL DEL PROGRAMADOR: Archivos ejecutables

LOWVIDEO
END.

150

MANUAL DEL PROGRAMADOR: Archivos ejecutables

4.3.- INSTALA

4.3.1.- DESCRIPCIN DEL PROGRAMA.

El programa instala es aquel que se encarga de realizar la instalacin del


conjunto de evaluacin, informando al usuario de los posibles errores, y demandando decisin
cuando sea necesario.

El procedimiento principal del programa de instalacin (Copiar) es aquel que


lee de un archivo fuente escribiendo en un archivo origen. nicamente debemos tener la
precaucin de que tanto la lectura como la escritura la realizamos sobre el buffer del
ordenador, y sobre archivos sin tipo, utilizando instrucciones estndar a tal efecto.

4.3.2.- DIRECTIVAS DE COMPILACIN.

Las directivas empleadas son las siguientes :


{A+,S+,B-,E+,N+}
{$M 16384, 000000, 50000}

Adems se ha recurrido a la directiva de compilacin que desactiva el cdigo


de error producido en las sentencias que convenan, tratando los mismos de forma adecuada.
Directiva {$I-} y {$I+} que desactiva y activa respectivamente dicho cdigo de error anterior.

151

MANUAL DEL PROGRAMADOR: Archivos ejecutables

4.3.3.- UNIDADES UTILIZADAS.

Se han utilizado las unidades siguientes : CRT, ERR.

4.3.4.- VARIABLES GLOBALES.

LABEL 1,4;
CONST
VERERROR
ERRORNORMAL
ERRORCLAVE
REPITE
VAR
RECIBE
GRABA
ERRORINS
REGISTROSLEIDOS
CURSORPANX
CURSORPANY
CURSORX
CURSORY
COLOR1
COLOR2
COLOR3
COLOR4
COLOR5
COLOR6
COLOR7
COLOR8
TECLA
ORIGEN
ORIGEN1
DESTINO
DESTINO1
ARCHIVO
BUFFER
PUNTEROPANTALLA

:
:
:
:

BOOLEAN=FALSE;
BOOLEAN=FALSE;
BOOLEAN=FALSE;
BOOLEAN=FALSE;

: FILE;
: FILE;
: INTEGER;
: INTEGER;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: CHAR;
: STRING[255];
: STRING[255];
: STRING[255];
: STRING[255];
: STRING[20];
: ARRAY [1..1000] OF BYTE;
: POINTER;

152

MANUAL DEL PROGRAMADOR: Archivos ejecutables

4.3.5.- VARIABLES LOCALES.

Son las variables declaradas en los procedimientos y/o funciones


correspondientes, limitndose su uso a dicho procedimiento y/o funcin. (Ver listado).

4.3.6.- LISTADO.

PROGRAM INSTALAR;
{A+,S+,B-,E+,N+} {$M 16384, 000000, 50000}
USES CRT,ERR;
LABEL 1,4;
CONST
VERERROR
: BOOLEAN=FALSE;
ERRORNORMAL
: BOOLEAN=FALSE;
ERRORCLAVE
: BOOLEAN=FALSE;
REPITE
: BOOLEAN=FALSE;
VAR
RECIBE
: FILE;
GRABA
: FILE;
ERRORINS
: INTEGER;
REGISTROSLEIDOS : INTEGER;
CURSORPANX
: BYTE;
CURSORPANY
: BYTE;
CURSORX
: BYTE;
CURSORY
: BYTE;
COLOR1
: BYTE;
COLOR2
: BYTE;
COLOR3
: BYTE;
COLOR4
: BYTE;
COLOR5
: BYTE;
COLOR6
: BYTE;
COLOR7
: BYTE;
COLOR8
: BYTE;
TECLA
: CHAR;
ORIGEN
: STRING[255];
ORIGEN1
: STRING[255];
DESTINO
: STRING[255];
DESTINO1
: STRING[255];
ARCHIVO
: STRING[20];
BUFFER
: ARRAY [1..1000] OF BYTE;

153

MANUAL DEL PROGRAMADOR: Archivos ejecutables

PUNTEROPANTALLA : POINTER;
(**********************************************************)
PROCEDURE HACERFONDO;
VAR
A,B:BYTE;
BEGIN
TEXTBACKGROUND(COLOR2);
TEXTCOLOR(COLOR1);
CURSOROFF;
BEGIN
FOR A:=1 TO 80 DO
FOR B:=1 TO 25 DO
BEGIN
GOTOXY(A,B);
WRITE(#176)
END
END
END;
(**********************************************************)
PROCEDURE REHACERTROZODEFONDO;
VAR
C,D:BYTE;
BEGIN
TEXTBACKGROUND(COLOR2);
TEXTCOLOR(COLOR1);
CURSOROFF;
BEGIN
FOR C:=5 TO 75 DO
FOR D:=16 TO 20 DO
BEGIN
GOTOXY(C,D);
WRITE(#176);
END
END
END;
(**********************************************************)
PROCEDURE COLORES;
BEGIN
IF MODOVIDEOACTUAL=M THEN BEGIN
COLOR1:=BLACK;
COLOR2:=BLACK;
COLOR3:=WHITE;
COLOR4:=BLACK;
COLOR5:=BLACK;

154

MANUAL DEL PROGRAMADOR: Archivos ejecutables

COLOR6:=WHITE;
COLOR7:=BLACK;
COLOR8:=WHITE
END
ELSE BEGIN
COLOR1:=LIGHTBLUE;
COLOR2:=WHITE;
COLOR3:=RED;
COLOR4:=GREEN;
COLOR5:=RED;
COLOR6:=YELLOW;
COLOR7:=BLUE;
COLOR8:=LIGHTRED
END
END;
(**********************************************************)
{$F+}
PROCEDURE ABANDONAR;
BEGIN
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE);
TEXTMODE(LASTMODE);
CLRSCR;
CURSORON;
CARGARPANTALLA(PUNTEROPANTALLA);
GOTOXY(CURSORPANX,CURSORPANY);
LOWVIDEO
END;
{$F-}
(**********************************************************)
PROCEDURE COPIAR;
LABEL 2,3,EMPEZAR;
BEGIN
EMPEZAR :
CURSORX:=WHEREX;
CURSORY:=WHEREY;
ASSIGN(RECIBE,ORIGEN1);
{$I-} RESET(RECIBE,1) {$I+};
ERRORINS:=IORESULT;
IF ERRORINS=2 THEN BEGIN
VERERROR:=TRUE;
WINDOW(1,5,80,25);
CURSOROFF;
ERROR(ERRORINS);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);

155

MANUAL DEL PROGRAMADOR: Archivos ejecutables

WINDOW(1,1,80,25);
GOTOXY(2,25);
WRITE(
);
GOTOXY(2,25);
WRITE( INTRODUZCA DISCO CON ,ARCHIVO, Y PULSE
ESCAPE=IGNORAR);
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN BEGIN
GOTOXY(2,25);
WRITE( Ctr-INTER=ABORTAR INSTALACION
REHACERTROZODEFONDO;
WINDOW(21,7,60,14);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(COLOR8);
GOTOXY(CURSORX,CURSORY);
WRITELN(NO instalado!);
TEXTCOLOR(WHITE);
GOTO 3
END;
IF TECLA<>#27 THEN BEGIN
GOTOXY(2,25);
WRITE( Ctr-INTER=ABORTAR INSTALACION
REHACERTROZODEFONDO;
WINDOW(21,7,60,14);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(COLOR8);
GOTOXY(CURSORX,CURSORY);
GOTO EMPEZAR
END
END;

CUALQUIER

TECLA.

);

);

IF (ERRORINS<>0) AND (ERRORINS=2) THEN BEGIN


VERERROR:=TRUE;
WINDOW(1,5,80,25);
CURSOROFF;
ERROR(ERRORINS);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
WINDOW(1,1,80,25);
GOTOXY(2,25);
WRITE( ESCAPE=ABORTAR INSTALACION
pulsa CUALQUIER TECLA para continuar
);
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN HALT;
IF TECLA <> #27 THEN BEGIN
GOTOXY(2,25);
WRITE( Ctr-INTER=ABORTAR INSTALACION
REHACERTROZODEFONDO;
WINDOW(21,7,60,14);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(COLOR8);
GOTOXY(CURSORX,CURSORY);
WRITELN(NO instalado!);

156

);

MANUAL DEL PROGRAMADOR: Archivos ejecutables

TEXTCOLOR(WHITE);
GOTO 3
END
END;

ASSIGN(GRABA,DESTINO1);
REWRITE(GRABA,1);
{$I-} BLOCKREAD(RECIBE,BUFFER,SIZEOF(BUFFER),REGISTROSLEIDOS) {$I+};
ERRORINS:=IORESULT;
IF ERRORINS<>0 THEN BEGIN
VERERROR:=TRUE;
WINDOW(1,5,80,25);
CURSOROFF;
ERROR(ERRORINS);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
WINDOW(1,1,80,25);
GOTOXY(2,25);
WRITE( ESCAPE=ABORTAR INSTALACION
pulsa CUALQUIER TECLA para continuar
);
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN HALT;
IF TECLA <> #27 THEN BEGIN
GOTOXY(2,25);
WRITE( Ctr-INTER=ABORTAR INSTALACION
);
REHACERTROZODEFONDO;
WINDOW(21,7,60,14);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(COLOR8);
GOTOXY(CURSORX,CURSORY);
WRITELN(NO instalado correctamente);
TEXTCOLOR(WHITE);
GOTO 3
END
END;
WHILE REGISTROSLEIDOS > 0 DO
BEGIN
{$I-} BLOCKWRITE(GRABA,BUFFER,REGISTROSLEIDOS) {$I+};
ERRORINS:=IORESULT;
IF ERRORINS<>0 THEN BEGIN
VERERROR:=TRUE;
WINDOW(1,5,80,25);
CURSOROFF;
ERROR(ERRORINS);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
WINDOW(1,1,80,25);
GOTOXY(2,25);
WRITE( ESCAPE=ABORTAR INSTALACION
pulsa CUALQUIER TECLA para continuar
);
DESCARGARTECLADO;
TECLA:=READKEY;

157

MANUAL DEL PROGRAMADOR: Archivos ejecutables

IF TECLA=#27 THEN HALT;


IF TECLA <> #27 THEN BEGIN
GOTOXY(2,25);
WRITE( Ctr-INTER=ABORTAR INSTALACION
);
REHACERTROZODEFONDO;
WINDOW(21,7,60,14);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(COLOR8);
GOTOXY(CURSORX,CURSORY);
WRITELN(NO instalado correctamente);
TEXTCOLOR(WHITE);
GOTO 2
END
END;
{$I-} BLOCKREAD(RECIBE,BUFFER,SIZEOF(BUFFER),REGISTROSLEIDOS) {$I+};
ERRORINS:=IORESULT;
IF ERRORINS<>0 THEN BEGIN
VERERROR:=TRUE;
WINDOW(1,5,80,25);
CURSOROFF;
ERROR(ERRORINS);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
WINDOW(1,1,80,25);
GOTOXY(2,25);
WRITE( ESCAPE=ABORTAR INSTALACION
pulsa CUALQUIER TECLA para continuar
);
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN HALT;
IF TECLA <> #27 THEN BEGIN
GOTOXY(2,25);
WRITE( Ctr-INTER=ABORTAR INSTALACION
REHACERTROZODEFONDO;
WINDOW(21,7,60,14);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(COLOR8);
GOTOXY(CURSORX,CURSORY);
WRITELN(NO instalado correctamente);
TEXTCOLOR(WHITE);
GOTO 2
END
END
END;
2: {$I-} CLOSE(RECIBE) {$I+};
ERRORINS:=IORESULT;
IF ERRORINS<>0 THEN BEGIN
END;
{$I-} CLOSE(GRABA) {$I+};
ERRORINS:=IORESULT;
IF ERRORINS<>0 THEN BEGIN
END;
3:
END;

158

);

MANUAL DEL PROGRAMADOR: Archivos ejecutables

(**********************************************************)
BEGIN
CURSORPANX:=WHEREX;
CURSORPANY:=WHEREY;
SALVARPANTALLA(PUNTEROPANTALLA);
EXITPROC:=@ABANDONAR;
COLORES;
TEXTMODE(C80);
1:
HACERFONDO;
VERERROR:=FALSE;
ERRORNORMAL:=FALSE;
ERRORCLAVE:=FALSE;
REPITE:=FALSE;
DIBUJARCUADRO(25,6,55,8,COLOR3,COLOR4);
GOTOXY(26,7);
WRITELN( PROGRAMA DE INSTALACION );
DIBUJARCUADRO(20,10,60,20,COLOR6,COLOR5);
WINDOW(21,11,60,19);
WRITELN(
);
WRITELN(
EVALUACION VERSION 1.00
);
WRITELN(
);
WRITELN(
JULIO MARTINEZ JUAN
);
WRITELN(
&
);
WRITELN(
EMILIO SAHUQUILLO DOBON
);
WRITELN(
);
WRITELN( Valencia a 30 de Abril de 1993
);
WRITE(
);
WINDOW(1,1,80,25);
GOTOXY(2,25);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
WRITE( ESCAPE=SALIR
>>> PULSE CUALQUIER TECLA PARA CONTINUAR );
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN HALT;
HACERFONDO;
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
GOTOXY(2,25);
WRITE( ESCAPE=SALIR
DIBUJARCUADRO(20,5,61,15,WHITE,COLOR7);
WINDOW(21,6,60,14);
REPEAT
CLRSCR;
IF REPITE=TRUE THEN BEGIN
CURSOROFF;
WRITE(
INTRODUZCA SOLO "A:" "B:");
SOUND(1000);
DELAY(100);
SOUND(800);
DELAY(80);
NOSOUND;

159

);

MANUAL DEL PROGRAMADOR: Archivos ejecutables

DELAY(4000);
CURSORON
END;
WRITELN(
);
WRITE(INTRODUZCA UNIDAD ORIGEN CON EL CONJUNTO);
WRITE(
EVALUACION 1.00
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
GOTOXY(1,3);
CURSORON;
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN BEGIN
WINDOW(1,1,80,25);
GOTO 1
END;
IF TECLA IN [#0..#32] THEN TECLA:=#0;
WRITE(TECLA);
READLN(ORIGEN);
IF TECLA<>#0 THEN ORIGEN:=TECLA+ORIGEN;
IF ORIGEN[LENGTH(ORIGEN)]=\ THEN DELETE(ORIGEN,LENGTH(ORIGEN),1);
REPITE:=TRUE;
UNTIL (ORIGEN=A:) OR (ORIGEN=a:) OR (ORIGEN=B:) OR (ORIGEN=b:);
REPEAT
WINDOW(21,6,60,14);
CLRSCR;
WRITELN(
);
WRITE( INTRODUZCA UNIDAD Y SUBDIRECTORIO );
WRITE(
DESTINO
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
GOTOXY(1,3);
CURSORON;
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN BEGIN
WINDOW(1,1,80,25);
GOTO 1
END;
IF TECLA IN [#0..#32] THEN TECLA:=#0;
WRITE(TECLA);
READLN(DESTINO);
IF TECLA<>#0 THEN DESTINO:=TECLA+DESTINO;
IF DESTINO[LENGTH(DESTINO)]=\ THEN DELETE(DESTINO,LENGTH(DESTINO),1);
CLRSCR;
TEXTCOLOR(WHITE+BLINK);
WRITE(
REALIZANDO INSTALACION !
);

160

MANUAL DEL PROGRAMADOR: Archivos ejecutables

{$I-} MKDIR(DESTINO) {$I+};


ERRORINS:=IORESULT;
IF NOT (ERRORINS IN [0,5]) THEN BEGIN
WINDOW(1,5,80,25);
CURSOROFF;
ERROR(ERRORINS);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
WINDOW(1,1,80,25);
GOTOXY(2,25);
WRITE( ESCAPE=SALIR
pulsa CUALQUIER TECLA para repetir );
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN BEGIN
WINDOW(1,1,80,25);
GOTO 1
END;
HACERFONDO;
DIBUJARCUADRO(20,5,61,15,WHITE,COLOR7);
GOTOXY(2,25);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
WRITE( ESCAPE=SALIR
)
END
UNTIL (ERRORINS=0) OR (ERRORINS=5);
{comenzamos la instalacin}
WINDOW(1,1,80,25);
TEXTCOLOR(WHITE);
GOTOXY(2,25);
WRITE( Ctr-INTER=ABORTAR INSTALACION

);

WINDOW(21,7,60,14);
CURSORON;
ORIGEN1:=ORIGEN+\LOCALIZA.EXE;
DESTINO1:=DESTINO+\LOCALIZA.EXE;
TEXTCOLOR(WHITE);
WRITELN(LOCALIZA.EXE);
ARCHIVO:=LOCALIZA.EXE;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\ESPACIO1.EXE;
DESTINO1:=DESTINO+\ESPACIO1.EXE;
TEXTCOLOR(WHITE);
WRITELN(ESPACIO1.EXE);
ARCHIVO:=ESPACIO1.EXE;
COPIAR;
IF VERERROR=TRUE THEN BEGIN

161

MANUAL DEL PROGRAMADOR: Archivos ejecutables

ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\EVAL.EXE;
DESTINO1:=DESTINO+\EVAL.EXE;
TEXTCOLOR(WHITE);
WRITELN(EVAL.EXE);
ARCHIVO:=EVAL.EXE;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORCLAVE:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\ATT.BGI;
DESTINO1:=DESTINO+\ATT.BGI;
TEXTCOLOR(WHITE);
WRITELN(ATT.BGI);
ARCHIVO:=ATT.BGI;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\CGA.BGI;
DESTINO1:=DESTINO+\CGA.BGI;
TEXTCOLOR(WHITE);
WRITELN(CGA.BGI);
ARCHIVO:=CGA.BGI;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\EGAVGA.BGI;
DESTINO1:=DESTINO+\EGAVGA.BGI;
TEXTCOLOR(WHITE);
WRITELN(EGAVGA.BGI);
ARCHIVO:=EGAVGA.BGI;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\HERC.BGI;
DESTINO1:=DESTINO+\HERC.BGI;
TEXTCOLOR(WHITE);

162

MANUAL DEL PROGRAMADOR: Archivos ejecutables

WRITELN(HERC.BGI);
ARCHIVO:=HERC.BGI;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\IBM8514.BGI;
DESTINO1:=DESTINO+\IBM8514.BGI;
TEXTCOLOR(WHITE);
WRITELN(IBM8514.BGI);
ARCHIVO:=IBM8514.BGI;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\PC3270.BGI;
DESTINO1:=DESTINO+\PC3270.BGI;
TEXTCOLOR(WHITE);
WRITELN(PC3270.BGI);
ARCHIVO:=PC3270.BGI;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\LITT.CHR;
DESTINO1:=DESTINO+\LITT.CHR;
TEXTCOLOR(WHITE);
WRITELN(LITT.CHR);
ARCHIVO:=LITT.CHR;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\ONDA1.OSC;
DESTINO1:=DESTINO+\ONDA1.OSC;
TEXTCOLOR(WHITE);
WRITELN(ONDA1.OSC);
ARCHIVO:=ONDA1.OSC;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;

163

MANUAL DEL PROGRAMADOR: Archivos ejecutables

CURSORON;
ORIGEN1:=ORIGEN+\ONDA2.OSC;
DESTINO1:=DESTINO+\ONDA2.OSC;
TEXTCOLOR(WHITE);
WRITELN(ONDA2.OSC);
ARCHIVO:=ONDA2.OSC;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\ONDA3.OSC;
DESTINO1:=DESTINO+\ONDA3.OSC;
TEXTCOLOR(WHITE);
WRITELN(ONDA3.OSC);
ARCHIVO:=ONDA3.OSC;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\ONDA4.OSC;
DESTINO1:=DESTINO+\ONDA4.OSC;
TEXTCOLOR(WHITE);
WRITELN(ONDA4.OSC);
ARCHIVO:=ONDA4.OSC;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\ONDA5.OSC;
DESTINO1:=DESTINO+\ONDA5.OSC;
TEXTCOLOR(WHITE);
WRITELN(ONDA5.OSC);
ARCHIVO:=ONDA5.OSC;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\ONDA6.OSC;
DESTINO1:=DESTINO+\ONDA6.OSC;
TEXTCOLOR(WHITE);
WRITELN(ONDA6.OSC);
ARCHIVO:=ONDA6.OSC;
COPIAR;

164

MANUAL DEL PROGRAMADOR: Archivos ejecutables

IF VERERROR=TRUE THEN BEGIN


ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\ONDA7.OSC;
DESTINO1:=DESTINO+\ONDA7.OSC;
TEXTCOLOR(WHITE);
WRITELN(ONDA7.OSC);
ARCHIVO:=ONDA7.OSC;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\C1.TXT;
DESTINO1:=DESTINO+\C1.TXT;
TEXTCOLOR(WHITE);
WRITELN(C1.TXT);
ARCHIVO:=C1.TXT;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\C2.TXT;
DESTINO1:=DESTINO+\C2.TXT;
TEXTCOLOR(WHITE);
WRITELN(C2.TXT);
ARCHIVO:=C2.TXT;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSORON;
ORIGEN1:=ORIGEN+\C3.TXT;
DESTINO1:=DESTINO+\C3.TXT;
TEXTCOLOR(WHITE);
WRITELN(C3.TXT);
ARCHIVO:=C3.TXT;
COPIAR;
IF VERERROR=TRUE THEN BEGIN
ERRORNORMAL:=TRUE;
VERERROR:=FALSE
END;
CURSOROFF;
WINDOW(1,1,80,25);

165

MANUAL DEL PROGRAMADOR: Archivos ejecutables

GOTOXY(2,25);
TEXTCOLOR(WHITE);
WRITE( ESCAPE=SALIR

);

WINDOW(21,6,60,14);
CLRSCR;
CURSOROFF;
GOTOXY(1,1);
WRITE( LA INSTALACION HA SIDO TERMINADA. );
IF (ERRORNORMAL=TRUE) AND (ERRORCLAVE=FALSE) THEN BEGIN
WRITE(Se han producido errores que pueden no);
WRITE(afectar al funcionamiento bsico del);
WRITE(programa. Asegurese instalando correcta-);
WRITE(mente con los ficheros necesarios segn);
WRITE(su tipo de ordenador.
);
WRITE(
);
WRITE(>>> pulse CUALQUIER TECLA para repetir)
END;
IF ERRORCLAVE=TRUE THEN BEGIN
WRITE(Se han producido errores que AFECTAN al);
WRITE(funcionamiento bsico del PROGRAMA. El);
WRITE(archivo EVAL.EXE no ha sido correctamen-);
WRITE(te instalado, repita la instalacin. );
WRITE(
);
WRITE(
);
WRITE(>>> pulse CUALQUIER TECLA para repetir)
END;
IF (ERRORCLAVE=FALSE) AND (ERRORNORMAL=FALSE) THEN BEGIN
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
>>> pulse CUALQUIER TECLA)
END;

DESCARGARTECLADO;
TECLA:=READKEY;
IF (ERRORCLAVE=FALSE) AND (ERRORNORMAL=FALSE) THEN GOTO 4;
IF TECLA <> #27 THEN BEGIN
WINDOW(1,1,80,25);
GOTO 1
END;
4:
END.

166

4.- PROGRAMA PRINCIPAL

4.1.- DESCRIPCIN DEL PROGRAMA.

El programa aqu propuesto debe de conjugar el conjunto de cdigo antes


expuesto. Se encargar de realizar todas las opciones que lleva consigo, y de dirigir la
ejecucin del programa en la direccin que demande el usuario del mismo.

4.2.- DIRECTIVAS DE COMPILACIN.

Las directivas de compilacin que utiliza son las siguientes :


{A+,S+,B-,E+,N+}
{$M 16384, 270000, 270000}
Activacin del modo 287

Adems para tratar los errores se utiliza de forma eficiente la directiva de


activacin y desativacin del cdigo de error : {$I+} y {$I-}.

4.3.- UNIDADES UTILIZADAS.

Son las siguientes : CRT, GRAPH, DOS, ERR, VISUAL.

4.4.- DIAGRAMAS DE BLOQUES DEL PROGRAMA PRINCIPAL.

167

La idea de la programacin en Pascal es la estructuracin. Por ella la


comprensin de cualquier programa se realiza de forma sencilla, y sin complejos e
ininteligibles diagramas de flujo. An as incluiremos un diagrama de bloques del conjunto
total para explicar de forma breve su funcionamiento.

Diagrama de Bloques del funcionamiento.

El total de listados del programa se ensamblan segn el siguiente diagrama :

168

MANUAL DEL PROGRAMADOR: Programa principal

Diagrama de conjuncin por el compilador.

4.5.- VARIABLES GLOBALES.

Son las que utilizamos en cualquier momento del transcurso del programa, y
por tanto se pueden utilizar en los ficheros include. Son las siguientes :

LABEL 1,2,3,4,5;
TYPE
DATOS=RECORD
TIEMPOS : REAL;
TEMSIONES : ARRAY[1..25] OF REAL
END;
PUNTEROV2=^V2;
V2=RECORD
TIEMPOS : REAL;
169

MANUAL DEL PROGRAMADOR: Programa principal

TENSIONES : ARRAY[1..25] OF REAL;


SIG
: PUNTEROV2
END;
PUNTERONUDO=^NUDO;
NUDO=RECORD
CARACTERN : CHAR;
SIG
: PUNTERONUDO
END;
PUNTEROV=^V;
V=RECORD
Vmuestras : REAL;
NUMNUDO : INTEGER;
SIG
: PUNTEROV
END;
CONST
EJECUTAR
: BOOLEAN=FALSE;
MEMDINAMICA
: BOOLEAN=FALSE;
SALIDADOS
: BOOLEAN=FALSE;
NOMPSP
: STRING[100]=Ninguno;
{seala el numero de errores producidos}
NO_DE_ERRORES
: INTEGER=0;
{seala n de valores con valor >10}
CONTADOR3
: INTEGER=0;
DATOS_PCLAB
: BOOLEAN=FALSE;

VAR
DRIVER
MODO
VALOX
VALOY
ERRORDIRECTORIO
SALTO
RESALTO
MARGEN
BAX
BAX2
BAX3
BAX4
MES

:
:
:
:
:
:
:
:
:
:
:
:
:

INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
170

MANUAL DEL PROGRAMADOR: Programa principal

DIA
ANO
MAXCADENUDOS1
MAXCADENUDOS2
PUNTERO1
PUNTERO2
PUNTERO3
PUNTERO4
PUNTERO5
PUNTERO6
PUNTERO7
PUNTERO8
PUNTEROPAN
DIMENSION1
DIMENSION2
DIMENSION3
DIMENSION4
DIMENSION5
DIMENSION6
DIMENSION7
DIMENSION8
COTE1
COTE2
CHIVATO1
CHIVATO2
CHIVATO3
CHIVATO4
TOLERANCIA
UTOLERANCIA
COLOR1
COLOR2
COLOR3
COLOR4
COLOR5
COLOR6
COLOR7
COLOR10
COLOR11
COLOR12
LONG
CUNTAPUNTOYCOMA
SALVAX
SALVAY
CREAR
TOLERANCIA1
NOM

:
:
:
:
:
:
:
:
:
:
:
:
:

INTEGER;
INTEGER;
INTEGER;
INTEGER;
POINTER;
POINTER;
POINTER;
POINTER;
POINTER;
POINTER;
POINTER;
POINTER;
POINTER;
: WORD;
: WORD;
: WORD;
: WORD;
: WORD;
: WORD;
: WORD;
: WORD;
: REAL;
: REAL;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: STRING[11];
: STRING[3];
: STRING[100];
171

MANUAL DEL PROGRAMADOR: Programa principal

TIEMPO
DIRECTORIO
VER
SISTEMA
BAY
BAY2
BAY3
BAY4
ESC1
ESC2
ESC3
ESC4
ESC5
CREADO1
CREADO2
FUNCIONA
MN
CARGONUDOS
PULSA
NODCHAR
PRIM
ANTE
ACTU
INICIAL
COMODIN
PRESENTE
PRIMERO
ANTERIOR
ACTUAL
ASIGNUD

: STRING[100];
: STRING[255];
: STRING[255];
: STRING;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: CHAR;
: CHAR;
: PUNTEROV2;
: PUNTEROV2;
: PUNTEROV2;
: PUNTERONUDO;
: PUNTERONUDO;
: PUNTERONUDO;
: PUNTEROV;
: PUNTEROV;
: PUNTEROV;
: ARRAY[0..15] OF BYTE;

4.6.- VARIABLES LOCALES.

Se definen como variables locales las declaradas en cada procedimiento (y/o


funcin), y como tales se restringen su utilizacin a dicho procedimento (y/o funcin).

172

MANUAL DEL PROGRAMADOR: Programa principal

4.7.- LISTADO.

PROGRAM BARRA;
{A+,S+,B-,E+,N+} {$M 16384, 270000, 270000}
USES CRT,GRAPH,DOS,ERR,VISUAL6;
LABEL 1,2,3,4,5;
TYPE
DATOS=RECORD
TIEMPOS : REAL;
TEMSIONES : ARRAY[1..25] OF REAL
END;
PUNTEROV2=^V2;
V2=RECORD
TIEMPOS : REAL;
TENSIONES : ARRAY[1..25] OF REAL;
SIG
: PUNTEROV2
END;
PUNTERONUDO=^NUDO;
NUDO=RECORD
CARACTERN : CHAR;
SIG
: PUNTERONUDO
END;
PUNTEROV=^V;
V=RECORD
Vmuestras : REAL;
NUMNUDO : INTEGER;
SIG
: PUNTEROV
END;
CONST
EJECUTAR
: BOOLEAN=FALSE;
MEMDINAMICA : BOOLEAN=FALSE;
SALIDADOS : BOOLEAN=FALSE;
NOMPSP
: STRING[100]=Ninguno;
{seala el numero de errores producidos}
NO_DE_ERRORES: INTEGER=0;
{seala n de valores con valor >10}
CONTADOR3 : INTEGER=0;
DATOS_PCLAB : BOOLEAN=FALSE;

VAR

173

MANUAL DEL PROGRAMADOR: Programa principal

DRIVER
: INTEGER;
MODO
: INTEGER;
VALOX
: INTEGER;
VALOY
: INTEGER;
ERRORDIRECTORIO
: INTEGER;
SALTO
: INTEGER;
RESALTO
: INTEGER;
MARGEN
: INTEGER;
BAX
: INTEGER;
BAX2
: INTEGER;
BAX3
: INTEGER;
BAX4
: INTEGER;
MES
: INTEGER;
DIA
: INTEGER;
ANO
: INTEGER;
MAXCADENUDOS1
: INTEGER;
MAXCADENUDOS2
: INTEGER;
PUNTERO1
: POINTER;
PUNTERO2
: POINTER;
PUNTERO3
: POINTER;
PUNTERO4
: POINTER;
PUNTERO5
: POINTER;
PUNTERO6
: POINTER;
PUNTERO7
: POINTER;
PUNTERO8
: POINTER;
PUNTEROPAN
: POINTER;
DIMENSION1
: WORD;
DIMENSION2
: WORD;
DIMENSION3
: WORD;
DIMENSION4
: WORD;
DIMENSION5
: WORD;
DIMENSION6
: WORD;
DIMENSION7
: WORD;
DIMENSION8
: WORD;
COTE1
: REAL;
COTE2
: REAL;
CHIVATO1
: BYTE;
CHIVATO2
: BYTE;
CHIVATO3
: BYTE;
CHIVATO4
: BYTE;
TOLERANCIA
: BYTE;
UTOLERANCIA
: BYTE;
COLOR1
: BYTE;
COLOR2
: BYTE;
COLOR3
: BYTE;
COLOR4
: BYTE;
COLOR5
: BYTE;
COLOR6
: BYTE;
COLOR7
: BYTE;
COLOR10
: BYTE;
COLOR11
: BYTE;
COLOR12
: BYTE;
LONG
: BYTE;
CUNTAPUNTOYCOMA
: BYTE;
SALVAX
: BYTE;

174

MANUAL DEL PROGRAMADOR: Programa principal

SALVAY
CREAR
TOLERANCIA1
NOM
TIEMPO
DIRECTORIO
VER
SISTEMA
BAY
BAY2
BAY3
BAY4
ESC1
ESC2
ESC3
ESC4
ESC5
CREADO1
CREADO2
FUNCIONA
MN
CARGONUDOS
PULSA
NODCHAR
PRIM
ANTE
ACTU
INICIAL
COMODIN
PRESENTE
PRIMERO
ANTERIOR
ACTUAL
ASIGNUD

: BYTE;
: STRING[11];
: STRING[3];
: STRING[100];
: STRING[100];
: STRING[255];
: STRING[255];
: STRING;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: CHAR;
: CHAR;
: PUNTEROV2;
: PUNTEROV2;
: PUNTEROV2;
: PUNTERONUDO;
: PUNTERONUDO;
: PUNTERONUDO;
: PUNTEROV;
: PUNTEROV;
: PUNTEROV;
: ARRAY[0..15] OF BYTE;

(**********************************************************)
{$I GEN35.PAS}
(**********************************************************)
{$I EJECUT18.PAS}
(**********************************************************)
PROCEDURE VENTANAS1;
BEGIN
IF PUNTERO1=NIL THEN BEGIN
SETFILLSTYLE(1,WHITE);
BAR(ROUND(35*COTE1),ROUND(20*COTE2),ROUND(600*COTE1),ROUND(40*COTE2));
SETFILLSTYLE(1,GREEN);
PIESLICE(ROUND(60*COTE1),ROUND(30*COTE2),1,360,ROUND(7*COTE1));
SETCOLOR(BLACK);

175

MANUAL DEL PROGRAMADOR: Programa principal

RECTANGLE(ROUND(51*COTE1),ROUND(21*COTE2),ROUND(69*COTE1),ROUND(39*COTE2));
OUTTEXTXY(ROUND(250*COTE1),ROUND(27*COTE2),EJECUTAR);
OUTTEXTXY(ROUND(380*COTE1),ROUND(27*COTE2),APLICA-2);
OUTTEXTXY(ROUND(520*COTE1),ROUND(27*COTE2),SALIR);
OUTTEXTXY(ROUND(100*COTE1),ROUND(27*COTE2),CONFIGURAR);
DIMENSION1:=IMAGESIZE(ROUND(35*COTE1),ROUND(20*COTE2),ROUND(600*COTE1),ROUND(4
0*COTE2));
GETMEM(PUNTERO1,DIMENSION1);
GETIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),ROUND(600*COTE1),ROUND(40*COTE2),PUNT
ERO1^);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(85*COTE1),ROUND(20*COTE2),ROUND(195*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(27*COTE2),CONFIGURAR);
END
ELSE
PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT)
END;
(**********************************************************)
PROCEDURE DEFINIR_COLORES;
BEGIN
CASE OBTENERTIPOADAP OF
MDA,EGAMono,VGAMono,MCGAMono : BEGIN
COLOR1:=BLACK;
COLOR2:=BLACK;
COLOR3:=BLACK;
COLOR4:=BLACK;
COLOR5:=BLACK;
COLOR6:=WHITE;
COLOR7:=WHITE;
COLOR10:=BLACK;
COLOR11:=WHITE;
COLOR12:=WHITE;
MN:=TRUE
END
ELSE
BEGIN
COLOR1:=MAGENTA;
COLOR2:=LIGHTRED;
COLOR3:=WHITE;
COLOR4:=LIGHTGREEN;
COLOR5:=LIGHTBLUE;
COLOR6:=YELLOW;
COLOR7:=LIGHTGREEN;
COLOR10:=GREEN;
COLOR11:=LIGHTRED;
COLOR12:=LIGHTGREEN;
MN:=FALSE
END

176

MANUAL DEL PROGRAMADOR: Programa principal

END
END;
(**********************************************************)
{$F+}
PROCEDURE LIBERARMEMORIA;
BEGIN
IF PUNTERO1 <> NIL THEN FREEMEM(PUNTERO1,DIMENSION1);
IF PUNTERO2 <> NIL THEN FREEMEM(PUNTERO2,DIMENSION2);
IF PUNTERO3 <> NIL THEN FREEMEM(PUNTERO3,DIMENSION3);
IF PUNTERO4 <> NIL THEN FREEMEM(PUNTERO4,DIMENSION4);
IF PUNTERO5 <> NIL THEN FREEMEM(PUNTERO5,DIMENSION5);
IF PUNTERO6 <> NIL THEN FREEMEM(PUNTERO6,DIMENSION6);
IF PUNTERO7 <> NIL THEN FREEMEM(PUNTERO7,DIMENSION7);
IF PUNTERO8 <> NIL THEN FREEMEM(PUNTERO8,DIMENSION8);
IF MEMDINAMICA=TRUE THEN BEGIN
{dispone la posible memoria ocupada por anteriores ficheros .txt}
BEGIN
ANTE:=PRIM;
REPEAT
ACTU:=ANTE^.SIG;
DISPOSE(ANTE);
ANTE:=ACTU
UNTIL ANTE^.SIG=NIL
END;
{dispone la posible memoria ocupada por los nudos de anteriores fich}
BEGIN
COMODIN:=INICIAL;
REPEAT
BEGIN
PRESENTE:=COMODIN^.SIG;
DISPOSE(COMODIN);
COMODIN:=PRESENTE
END
UNTIL COMODIN^.SIG=NIL
END
END;
{dispone la posible memoria ocupada por los datos tomados con la PCLAB}
IF DATOS_PCLAB=TRUE THEN BEGIN
ACTUAL:=PRIMERO;
WHILE ACTUAL=NIL DO
ANTERIOR:=ACTUAL^.SIG;
DISPOSE(ACTUAL);
ACTUAL:=ANTERIOR;
END;
CLOSEGRAPH;
LOWVIDEO;
CURSORON;
TEXTMODE(LASTMODE);
CARGARPANTALLA(PUNTEROPAN);

177

MANUAL DEL PROGRAMADOR: Programa principal

GOTOXY(SALVAX,SALVAY)
END;
{$F-}
(**********************************************************)
PROCEDURE VALORTOLERANCIA;
BEGIN
IF ((CHIVATO1<>5) AND ((SALTO<>13) OR (SALTO<>80))) OR (SALTO=61) THEN BEGIN
{para no poderla llamar con saludo delante}
IF PUNTERO6=NIL THEN BEGIN
SETFILLSTYLE(1,WHITE);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
SETCOLOR(BLACK);
RECTANGLE(ROUND(160*COTE1),ROUND(210*COTE2),ROUND(480*COTE1),ROUND(270*COTE2));
SETCOLOR(7);
SETLINESTYLE(0,1,3);
LINE(ROUND(165*COTE1),ROUND(273*COTE2),ROUND(482*COTE1),ROUND(273*COTE2));
LINE(ROUND(483*COTE1),ROUND(215*COTE2),ROUND(483*COTE1),ROUND(274*COTE2));
SETCOLOR(BLACK);
OUTTEXTXY(ROUND(170*COTE1),ROUND(220*COTE2),INTRODUCE EL VALOR DE LA
TOLERANCIA :);
OUTTEXTXY(ROUND(270*COTE1),ROUND(235*COTE2),< 0..100 >);
OUTTEXTXY(ROUND(185*COTE1),ROUND(250*COTE2),-1);
OUTTEXTXY(ROUND(190*COTE1),ROUND(260*COTE2),#27);
OUTTEXTXY(ROUND(215*COTE1),ROUND(250*COTE2),-5);
OUTTEXTXY(ROUND(220*COTE1),ROUND(260*COTE2),#25);
OUTTEXTXY(ROUND(395*COTE1),ROUND(250*COTE2),+5);
OUTTEXTXY(ROUND(400*COTE1),ROUND(260*COTE2),#24);
OUTTEXTXY(ROUND(425*COTE1),ROUND(250*COTE2),+1);
OUTTEXTXY(ROUND(430*COTE1),ROUND(260*COTE2),#26);
DIMENSION6:=IMAGESIZE(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND
(280*COTE2));
GETMEM(PUNTERO6,DIMENSION6);
GETIMAGE(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2),PU
NTERO6^)
END
ELSE PUTIMAGE(ROUND(150*COTE1),ROUND(200*COTE2),PUNTERO6^,COPYPUT);
SETFILLSTYLE(1,7);
SETCOLOR(BLACK);
SETLINESTYLE(0,1,3);
UTOLERANCIA:=TOLERANCIA;
REPEAT
BAR(ROUND(260*COTE1),ROUND(250*COTE2),ROUND(360*COTE1),ROUND(265*COTE2));
LINE(ROUND(265*COTE1),ROUND(267*COTE2),ROUND(362*COTE1),ROUND(267*COTE2));
LINE(ROUND(362*COTE1),ROUND(255*COTE2),ROUND(362*COTE1),ROUND(268*COTE2));
OUTTEXTXY(ROUND(290*COTE1),ROUND(255*COTE2),TOLERANCIA1);
OUTTEXTXY(ROUND(320*COTE1),ROUND(255*COTE2), %);
DESCARGARTECLADO;
MARGEN:=ORD(READKEY);

178

MANUAL DEL PROGRAMADOR: Programa principal

IF MARGEN=75 THEN BEGIN


TOLERANCIA:=TOLERANCIA-1;
IF TOLERANCIA=255 THEN TOLERANCIA:=100;
STR(TOLERANCIA,TOLERANCIA1)
END;
IF MARGEN=77 THEN BEGIN
TOLERANCIA:=TOLERANCIA+1;
IF TOLERANCIA=101 THEN TOLERANCIA:=0;
STR(TOLERANCIA,TOLERANCIA1)
END;
IF MARGEN=72 THEN BEGIN
TOLERANCIA:=TOLERANCIA+5;
IF TOLERANCIA>100 THEN TOLERANCIA:=0;
STR(TOLERANCIA,TOLERANCIA1)
END;
IF MARGEN=80 THEN BEGIN
TOLERANCIA:=TOLERANCIA-5;
IF TOLERANCIA IN [250,251,252,253,254,255] THEN TOLERANCIA:=100;
STR(TOLERANCIA,TOLERANCIA1)
END
UNTIL (MARGEN=13) OR (MARGEN=27);
IF MARGEN=27 THEN BEGIN
IF PUNTERO7=NIL THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
DIMENSION7:=IMAGESIZE(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND
(280*COTE2));
GETMEM(PUNTERO7,DIMENSION7);
GETIMAGE(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2),PU
NTERO7^)
END
ELSE PUTIMAGE(ROUND(150*COTE1),ROUND(200*COTE2),PUNTERO7^,COPYPUT);
TOLERANCIA:=UTOLERANCIA;
STR(TOLERANCIA,TOLERANCIA1)
END;
SETLINESTYLE(0,0,1);
IF (MARGEN=13) AND ((SALTO=61) OR (RESALTO=61)) THEN BEGIN
IF PUNTERO7=NIL THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
DIMENSION7:=IMAGESIZE(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND
(280*COTE2));
GETMEM(PUNTERO7,DIMENSION7);
GETIMAGE(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2),PU
NTERO7^)
END
ELSE PUTIMAGE(ROUND(150*COTE1),ROUND(200*COTE2),PUNTERO7^,COPYPUT);
SETFILLSTYLE(1,WHITE);
BAR(ROUND(510*COTE1),ROUND(365*COTE2),ROUND(545*COTE1),ROUND(372*COTE2));
SETCOLOR(COLOR2);
OUTTEXTXY(ROUND(390*COTE1),ROUND(365*COTE2),TOLERANCIA
:
%);
179

MANUAL DEL PROGRAMADOR: Programa principal

STR(TOLERANCIA,TOLERANCIA1);
OUTTEXTXY(ROUND(520*COTE1),ROUND(365*COTE2),TOLERANCIA1)
END;
SETCOLOR(WHITE)
END
END; {de la condicin del saludo}
(**********************************************************)
PROCEDURE CAMBIARDIRECTORIO;
BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(COLOR5);
CLRSCR;
REPEAT
REPEAT
CURSORON;
WINDOW(1,1,80,25);
PULSA:= ; {inicializamos}
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(3,2);
WRITELN(INTRODUCE UNIDAD Y CAMINO DEL DIRECTORIO O SUBDIRECTORIO : );
GOTOXY(3,3);
WRITELN(Unidad:\Camino1\Camino2\...\CaminoN
>>> INTRO salir);
RAYA_HORIZONTAL(2,79,4,WHITE);
TEXTCOLOR(COLOR6);
GOTOXY(3,24);
WRITE(DTO. actual : ,DIRECTORIO);
RAYA_HORIZONTAL(2,79,23,WHITE);
TEXTCOLOR(COLOR6);
WINDOW(3,5,78,24);
GOTOXY(1,1);
REPEAT
DESCARGARTECLADO;
READLN(DIRECTORIO)
UNTIL DIRECTORIO<>#13;
IF LENGTH(DIRECTORIO)=2 THEN BEGIN
WINDOW(1,1,80,25);
DIRECTORIO:=No Definido;
CURSOROFF;
ERROR(3);
GOTOXY(23,22);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
WRITE(>>> pulsa CUALQUIER TECLA para repetir...);
DESCARGARTECLADO;
PULSA:=READKEY
END

180

MANUAL DEL PROGRAMADOR: Programa principal

ELSE PULSA:=#251;
IF LENGTH(DIRECTORIO)>40 THEN BEGIN
CURSOROFF;
DIRECTORIO:=No Definido;
GOTOXY(2,3);
WRITELN(EL DIRECTORIO SE EXCEDE EN SU LONGITUD (>40 caracteres));
WRITELN(^g);
DELAY(3000)
END
UNTIL (PULSA=#251) AND (LENGTH(DIRECTORIO)<40);
{$V-}
FOR LONG:=1 TO LENGTH(DIRECTORIO) DO
DIRECTORIO[LONG]:=UPCASE(DIRECTORIO[LONG]);
{$V+}
{$I-} CHDIR(DIRECTORIO) {$I+} ;
ERRORDIRECTORIO:=IORESULT;
IF ERRORDIRECTORIO<>0 THEN BEGIN
CURSOROFF;
DIRECTORIO:=No Definido;
WINDOW(1,1,80,25);
ERROR(ERRORDIRECTORIO);
GOTOXY(23,22);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
WRITE(>>> pulsa CUALQUIER TECLA para repetir...);
DESCARGARTECLADO;
PULSA:=READKEY
END
ELSE PULSA:=#251;
WINDOW(1,1,80,25)
{un valor que no se da raiz^2}
UNTIL PULSA=#251;
SETGRAPHMODE(MODO)
END;
(**********************************************************)
PROCEDURE CALCULARDIRECTORIOACTUAL;
BEGIN
GETDIR(0,DIRECTORIO);
IF LENGTH(DIRECTORIO)>40 THEN DIRECTORIO:=de trabajo por defecto
END;
(**********************************************************)
PROCEDURE ABANDONAR;
BEGIN
SETFILLSTYLE(1,7);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));

181

MANUAL DEL PROGRAMADOR: Programa principal

SETCOLOR(BLACK);
RECTANGLE(ROUND(160*COTE1),ROUND(210*COTE2),ROUND(480*COTE1),ROUND(270*COTE2));
OUTTEXTXY(ROUND(190*COTE1),ROUND(220*COTE2), DESEA ABANDONAR EL PROGRAMA
?);
OUTTEXTXY(ROUND(240*COTE1),ROUND(240*COTE2),(S)-Si
(N)-No);
REPEAT
DESCARGARTECLADO;
PULSA:=READKEY
UNTIL PULSA IN [N,n,S,s];
IF PULSA IN [N,n] THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2))
END;
{redibuja en el caso de vover de ejecutar}
IF (CHIVATO1=2) AND (EJECUTAR=TRUE) THEN BEGIN
SETFILLSTYLE(1,7);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
SETCOLOR(BLACK);
RECTANGLE(ROUND(160*COTE1),ROUND(210*COTE2),ROUND(480*COTE1),ROUND(270*COTE2));
SETCOLOR(COLOR4);
OUTTEXTXY(ROUND(190*COTE1),ROUND(235*COTE2),>>> PULSE ESCAPE PARA
CONTINUAR)
END;
{redibuja en el caso de volver de no poderse ejecutar}
IF (CHIVATO1=2) AND (EJECUTAR=FALSE) THEN BEGIN
SETFILLSTYLE(1,7);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
SETCOLOR(BLACK);
RECTANGLE(ROUND(160*COTE1),ROUND(210*COTE2),ROUND(480*COTE1),ROUND(270*COTE2));
OUTTEXTXY(ROUND(190*COTE1),ROUND(220*COTE2),
NO DEFINIDO FICHERO PSP
SOBRE);
OUTTEXTXY(ROUND(190*COTE1),ROUND(240*COTE2),
EL QUE EJECUTAR EL
PROGRAMA);
SETCOLOR(COLOR4);
OUTTEXTXY(ROUND(190*COTE1),ROUND(260*COTE2),
>>> ESCAPE SALIR)
END;
{redibuja el saludo}
IF (CHIVATO1=5) AND ((SALTO=80) OR (SALTO=13)) THEN
PUTIMAGE(ROUND(180*COTE1),ROUND(100*COTE2),PUNTERO8^,COPYPUT);
SETCOLOR(WHITE)
END;
(**********************************************************)
PROCEDURE FIJARFECHA ( MES, DIA, ANO : INTEGER;
VAR FUNCIONA:BOOLEAN);
VAR
REGS : REGISTERS;
BEGIN

182

MANUAL DEL PROGRAMADOR: Programa principal

FILLCHAR(REGS,SIZEOF(REGS),0);
WITH REGS DO
BEGIN
AH:=$2B;
DH:=MES;
DL:=DIA;
CX:=ANO
END;
MSDOS(REGS);
FUNCIONA:=REGS.AL <> 0
END;
(**********************************************************)
PROCEDURE FECHA;
LABEL ALMENU;
BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(COLOR5);
CLRSCR;
REPEAT
REPEAT
REPEAT
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
RAYA_HORIZONTAL(2,79,3,WHITE);
OBTENERFECHA(SISTEMA);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(3,2);
WRITELN(LA FECHA ACTUAL ES : ,SISTEMA);
WINDOW(3,4,78,24);
GOTOXY(1,2);
WRITELN(INTRODUCE EL DIA (dos cifras));
DESCARGARTECLADO;
WINDOW(3,6,78,7);
{$I-} READLN(DIA) {$I+};
ERRORDIRECTORIO:=IORESULT;
IF ERRORDIRECTORIO<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERRORDIRECTORIO);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(15,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;

183

MANUAL DEL PROGRAMADOR: Programa principal

PULSA:=READKEY;
IF PULSA=#27 THEN GOTO ALMENU
END
UNTIL ERRORDIRECTORIO=0;
WINDOW(3,4,78,24);
GOTOXY(1,5);
WRITELN(INTRODUCE EL MES (dos cifras));
DESCARGARTECLADO;
WINDOW(3,9,78,10);
{$I-} READLN(MES) {$I+};
ERRORDIRECTORIO:=IORESULT;
IF ERRORDIRECTORIO<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERRORDIRECTORIO);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(15,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
PULSA:=READKEY;
IF PULSA=#27 THEN GOTO ALMENU
END
UNTIL ERRORDIRECTORIO=0;
WINDOW(3,4,78,24);
GOTOXY(1,8);
WRITELN(INTRODUCE EL AO (cuatro cifras));
DESCARGARTECLADO;
WINDOW(3,12,78,13);
{$I-} READLN(ANO) {$I+};
ERRORDIRECTORIO:=IORESULT;
IF ERRORDIRECTORIO<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERRORDIRECTORIO);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(15,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
PULSA:=READKEY;
IF PULSA=#27 THEN GOTO ALMENU
END
UNTIL ERRORDIRECTORIO=0;
WINDOW(1,1,80,25);
FIJARFECHA(MES,DIA,ANO,FUNCIONA);
IF FUNCIONA THEN BEGIN
GOTOXY(33,23);
TEXTCOLOR(COLOR2+BLINK);
WRITELN( ERROR! );
WRITELN(^g);
TEXTCOLOR(COLOR6);
END
ELSE
BEGIN

184

MANUAL DEL PROGRAMADOR: Programa principal

GOTOXY(25,23);
WRITELN(LA FECHA HA SIDO ESTABLECIDA)
END;
CURSOROFF;
GOTOXY(27,24);
WRITE(Pulse CUALQUIER TECLA...);
DESCARGARTECLADO;
PULSA:=READKEY
UNTIL FUNCIONA=FALSE;
ALMENU :
END;
(**********************************************************)
PROCEDURE REALIZA_INFORMACION;
BEGIN
SETCOLOR(WHITE);
RECTANGLE(0,0,VALOX,VALOY);
VENTANAS1;
{realizacin de la informacin}
SETFILLSTYLE(1,WHITE);
BAR(ROUND(35*COTE1),ROUND(350*COTE2),ROUND(600*COTE1),ROUND(420*COTE2));
SETCOLOR(BLACK);
RECTANGLE(ROUND(45*COTE1),ROUND(360*COTE2),ROUND(590*COTE1),ROUND(410*COTE2));
LINE(ROUND(52*COTE1),ROUND(375*COTE2),ROUND(583*COTE1),ROUND(375*COTE2));
LINE(ROUND(52*COTE1),ROUND(395*COTE2),ROUND(583*COTE1),ROUND(395*COTE2));
LINE(ROUND(318*COTE1),ROUND(362*COTE2),ROUND(318*COTE1),ROUND(373*COTE2));
SETCOLOR(COLOR2);
IF CREAR=A DISCO: SI THEN OUTTEXTXY(ROUND(80*COTE1),ROUND(365*COTE2),FICHEROS
DE SALIDA : SI);
IF CREAR=A DISCO: NO THEN OUTTEXTXY(ROUND(80*COTE1),ROUND(365*COTE2),FICHEROS
DE SALIDA : NO);
OUTTEXTXY(ROUND(390*COTE1),ROUND(365*COTE2),TOLERANCIA :
%);
STR(TOLERANCIA,TOLERANCIA1);
OUTTEXTXY(ROUND(520*COTE1),ROUND(365*COTE2),TOLERANCIA1);
OUTTEXTXY(ROUND(80*COTE1),ROUND(382*COTE2),FICHERO PSP : );
OUTTEXTXY(ROUND(205*COTE1),ROUND(382*COTE2),NOMPSP);
OUTTEXTXY(ROUND(80*COTE1),ROUND(400*COTE2),DIRECTORIO : );
OUTTEXTXY(ROUND(205*COTE1),ROUND(400*COTE2),DIRECTORIO);
SETLINESTYLE(0,1,3);
SETCOLOR(7);
LINE(ROUND(50*COTE1),ROUND(413*COTE2),ROUND(592*COTE1),ROUND(413*COTE2));
LINE(ROUND(593*COTE1),ROUND(365*COTE2),ROUND(593*COTE1),ROUND(414*COTE2));
SETLINESTYLE(0,0,1);
SETCOLOR(BLACK);
SETFILLSTYLE(1,LIGHTCYAN);
BAR(ROUND(35*COTE1),ROUND(440*COTE2),ROUND(600*COTE1),ROUND(460*COTE2));
OUTTEXTXY(ROUND(50*COTE1),ROUND(447*COTE2),ESCAPE);
OUTTEXTXY(ROUND(140*COTE1),ROUND(447*COTE2),F3);
OUTTEXTXY(ROUND(290*COTE1),ROUND(447*COTE2),F4);

185

MANUAL DEL PROGRAMADOR: Programa principal

OUTTEXTXY(ROUND(450*COTE1),ROUND(447*COTE2),Ctr-S);
SETCOLOR(COLOR10);
OUTTEXTXY(ROUND(140*COTE1),ROUND(447*COTE2), =TOLERANCIA);
OUTTEXTXY(ROUND(290*COTE1),ROUND(447*COTE2), =DOS SHELL);
OUTTEXTXY(ROUND(450*COTE1),ROUND(447*COTE2),
=ABANDONAR);

{fin de la informacin}
IF (CHIVATO1<>2) AND (RESALTO<>27) THEN BEGIN
{para que no dibuje en magenta cuando estamos en ejecutar}
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(85*COTE1),ROUND(20*COTE2),ROUND(195*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(27*COTE2),CONFIGURAR)
END;
BAX:=1
END;
(**********************************************************)
PROCEDURE SALIDA_AL_DOS;
BEGIN
{$F+}
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE);
CURSORON;
CLRSCR;
WRITELN;
WRITELN(PROGRAMA VERIFICACION DE CIRCUITOS 1.00);
WRITELN(Emilio Sahuquillo & Julio Martinez);
WRITELN(SALIDA AL DOS: teclee EXIT para retornar al programa...);
SWAPVECTORS;
LOWVIDEO;
EXEC(GETENV(COMSPEC),);
SWAPVECTORS;
SETGRAPHMODE(MODO);
{$F-}
{incluimos condicin para que si salimos de forma normal no redibuje dos veces}
IF SALIDADOS=FALSE THEN BEGIN
CALCULARDIRECTORIOACTUAL;
REALIZA_INFORMACION;
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(85*COTE1),ROUND(20*COTE2),ROUND(195*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(27*COTE2),CONFIGURAR)
END;

186

MANUAL DEL PROGRAMADOR: Programa principal

SALTO:=8;
SALIDADOS:=FALSE
END;
(**********************************************************)
BEGIN
EXITPROC:=@LIBERARMEMORIA;
WRITELN(EVALUACION 1.00 ## (c)1992-93 ## JULIO MARTINEZ & EMILIO SAHUQUILLO);
WRITELN(
Verificacin de circuitos electrnicos
);
SALVAX:=WHEREX;
SALVAY:=WHEREY;
SALVARPANTALLA(PUNTEROPAN);
TEXTMODE(C80);
{inicializamos los punteros grficos}
PUNTERO1:=NIL; PUNTERO2:=NIL; PUNTERO3:=NIL;
PUNTERO4:=NIL; PUNTERO5:=NIL; PUNTERO6:=NIL;
PUNTERO7:=NIL; PUNTERO8:=NIL;
CHECKSNOW:=TRUE;
{Para el caso de adaptador CGA no}
CREAR:=A DISCO: SI; {se produzca nieve}
TOLERANCIA:=15;
DEFINIR_COLORES;
{inicializacin del modo grfico}
DRIVER:=DETECT;
INITGRAPH(DRIVER,MODO,);
{introducimos rutina de busqueda de los ficheros graficos}
IF GRAPHRESULT<>0 THEN BEGIN
DRIVER:=DETECT;
INITGRAPH(DRIVER,MODO,C:\TP\BGI);
IF GRAPHRESULT<>0 THEN BEGIN
DRIVER:=DETECT;
INITGRAPH(DRIVER,MODO,D:\TP\BGI);
IF GRAPHRESULT<>0 THEN BEGIN
REPEAT
TEXTCOLOR(LIGHTRED);
WRITELN(NO SE ENCUENTRAN LOS FICHEROS DE ENTRADA AL MODO GRAFICO);
WRITELN(^g);
TEXTCOLOR(WHITE);
WRITELN(INTRODUCE INTRODUCE UNIDAD, CAMINO/VIA DE ACCESO A LOS
ARCHIVOS);
WRITELN((introduce "NADA" para salir));
READLN(VER);
FOR SALTO:=1 TO LENGTH(VER) DO
VER[SALTO]:=UPCASE(VER[SALTO]);
IF VER=NADA THEN HALT;
DRIVER:=DETECT;
INITGRAPH(DRIVER,MODO,VER)
UNTIL GRAPHRESULT=0
END
END

187

MANUAL DEL PROGRAMADOR: Programa principal

END;
VALOX:=GETMAXX;
COTE1:=VALOX/639;
VALOY:=GETMAXY;
COTE2:=VALOY/479;
REPEAT
BAX:=1;
CHIVATO1:=1;
BAY:=FALSE;
CALCULARDIRECTORIOACTUAL;
REALIZA_INFORMACION;
ESC1:=FALSE;
ESC2:=FALSE;
ESC3:=FALSE;
ESC4:=FALSE;
IF (RESALTO=13) THEN BEGIN
ESC3:=TRUE;
ESC4:=TRUE
END;
CREADO1:=TRUE;
CREADO2:=FALSE;
5:
REPEAT;
DESCARGARTECLADO;
SALTO:=ORD(READKEY);
REPEAT;
1: IF (SALTO=77) OR (BAY=TRUE) THEN BEGIN
IF BAX=5 THEN BAX:=0;
IF BAX=-1 THEN BAX:=4;
IF BAX=0 THEN BEGIN
PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(85*COTE1),ROUND(20*COTE2),ROUND(195*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(27*COTE2),CONFIGURAR);
BAY:=FALSE;
CHIVATO1:=1
END;
IF BAX=1 THEN BEGIN
PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(230*COTE1),ROUND(20*COTE2),ROUND(330*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(250*COTE1),ROUND(27*COTE2),EJECUTAR);
BAY:=FALSE;
CHIVATO1:=2
END;
IF BAX=2 THEN BEGIN

188

MANUAL DEL PROGRAMADOR: Programa principal

PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(365*COTE1),ROUND(20*COTE2),ROUND(460*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(380*COTE1),ROUND(27*COTE2),APLICA-2);
BAY:=FALSE;
CHIVATO1:=3
END;
IF BAX=3 THEN BEGIN
PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(500*COTE1),ROUND(20*COTE2),ROUND(575*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(520*COTE1),ROUND(27*COTE2),SALIR);
BAY:=FALSE;
CHIVATO1:=4
END;
IF BAX=4 THEN BEGIN
PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(48*COTE1),ROUND(20*COTE2),ROUND(72*COTE1),ROUND(40*COTE2));
SETFILLSTYLE(1,GREEN);
PIESLICE(ROUND(60*COTE1),ROUND(30*COTE2),1,360,ROUND(7*COTE1));
SETCOLOR(WHITE);
RECTANGLE(ROUND(51*COTE1),ROUND(21*COTE2),ROUND(69*COTE1),ROUND(39*COTE2));
BAY:=FALSE;
CHIVATO1:=5
END;
SALTO:=0;
BAX:=BAX+1
END;
IF SALTO=75 THEN BEGIN
BAX:=BAX-2;
BAY:=TRUE;
IF BAX=-2 THEN BAX:=-1;
GOTO 1
END;
{por las teclas de funcin y combinadas}
IF SALTO=19 THEN BEGIN
ABANDONAR;
IF PULSA IN [S,s] THEN HALT
END;
IF SALTO=61 THEN VALORTOLERANCIA;
IF SALTO=62 THEN BEGIN
SALIDA_AL_DOS;
IF CHIVATO1=2 THEN BEGIN
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(85*COTE1),ROUND(20*COTE2),ROUND(195*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);

189

MANUAL DEL PROGRAMADOR: Programa principal

OUTTEXTXY(ROUND(100*COTE1),ROUND(27*COTE2),CONFIGURAR)
END;
BAX:=1
END
UNTIL (SALTO<>62)
UNTIL (SALTO=13) OR (SALTO=80);
PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT);
IF CHIVATO1=1 THEN BEGIN
IF (PUNTERO2=NIL) OR (CREADO1<>CREADO2) THEN BEGIN
IF PUNTERO2<>NIL THEN FREEMEM(PUNTERO2,DIMENSION2);
SETCOLOR(BLACK);
SETFILLSTYLE(1,WHITE);
BAR(ROUND(85*COTE1),ROUND(40*COTE2),ROUND(215*COTE1),ROUND(120*COTE2));
RECTANGLE(ROUND(90*COTE1),ROUND(45*COTE2),ROUND(205*COTE1),ROUND(110*COTE2));
SETLINESTYLE(0,1,3);
SETCOLOR(7);
LINE(ROUND(94*COTE1),ROUND(113*COTE2),ROUND(206*COTE1),ROUND(113*COTE2));
LINE(ROUND(208*COTE1),ROUND(48*COTE2),ROUND(208*COTE1),ROUND(114*COTE2));
SETLINESTYLE(0,0,1);
SETCOLOR(BLACK);
OUTTEXTXY(ROUND(100*COTE1),ROUND(55*COTE2),FICHERO PSP);
OUTTEXTXY(ROUND(100*COTE1),ROUND(75*COTE2),CREAR);
OUTTEXTXY(ROUND(100*COTE1),ROUND(95*COTE2),TOLERANCIA);
DIMENSION2:=IMAGESIZE(ROUND(85*COTE1),ROUND(40*COTE2),ROUND(215*COTE1),ROUND(1
20*COTE2));
GETMEM(PUNTERO2,DIMENSION2);
GETIMAGE(ROUND(85*COTE1),ROUND(40*COTE2),ROUND(215*COTE1),ROUND(120*COTE2),PUN
TERO2^);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(95*COTE1),ROUND(50*COTE2),ROUND(195*COTE1),ROUND(65*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(55*COTE2),FICHERO PSP);
CREADO1:=CREADO2
END
ELSE
BEGIN
PUTIMAGE(ROUND(85*COTE1),ROUND(40*COTE2),PUNTERO2^,COPYPUT);
IF ESC1=TRUE THEN BEGIN
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(95*COTE1),ROUND(50*COTE2),ROUND(195*COTE1),ROUND(65*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(55*COTE2),FICHERO PSP)
END
END
END;
IF (CHIVATO1=2) AND (EJECUTAR=FALSE) THEN BEGIN
SETFILLSTYLE(1,7);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));

190

MANUAL DEL PROGRAMADOR: Programa principal

SETCOLOR(BLACK);
RECTANGLE(ROUND(160*COTE1),ROUND(210*COTE2),ROUND(480*COTE1),ROUND(270*COTE2));
OUTTEXTXY(ROUND(190*COTE1),ROUND(220*COTE2), NO DEFINIDO FICHERO PSP SOBRE);
OUTTEXTXY(ROUND(190*COTE1),ROUND(240*COTE2), EL QUE EJECUTAR EL PROGRAMA);
SETCOLOR(COLOR4);
OUTTEXTXY(ROUND(190*COTE1),ROUND(260*COTE2),
>>> ESCAPE SALIR);
FOR MES:=1 TO 5 DO
BEGIN
SOUND(1000);
DELAY(100);
SOUND(800);
DELAY(80);
NOSOUND
END
END;
IF (CHIVATO1=2) AND (EJECUTAR= TRUE) THEN BEGIN
RESTORECRTMODE;
EJECUTA;
SETGRAPHMODE(MODO);
REALIZA_INFORMACION;
SETFILLSTYLE(1,7);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
SETCOLOR(BLACK);
RECTANGLE(ROUND(160*COTE1),ROUND(210*COTE2),ROUND(480*COTE1),ROUND(270*COTE2));
SETCOLOR(COLOR4);
OUTTEXTXY(ROUND(190*COTE1),ROUND(235*COTE2),>>> PULSE ESCAPE PARA CONTINUAR);
BAX:=2;{para que se coloque en su lugar}
END;
IF CHIVATO1=3 THEN BEGIN
IF PUNTERO3=NIL THEN BEGIN
SETCOLOR(BLACK);
SETFILLSTYLE(1,WHITE);
BAR(ROUND(380*COTE1),ROUND(40*COTE2),ROUND(515*COTE1),ROUND(150*COTE2));
RECTANGLE(ROUND(385*COTE1),ROUND(45*COTE2),ROUND(505*COTE1),ROUND(140*COTE2));
SETLINESTYLE(0,1,3);
SETCOLOR(7);
LINE(ROUND(390*COTE1),ROUND(143*COTE2),ROUND(507*COTE1),ROUND(143*COTE2));
LINE(ROUND(508*COTE1),ROUND(49*COTE2),ROUND(508*COTE1),ROUND(144*COTE2));
SETLINESTYLE(0,0,1);
SETCOLOR(BLACK);
OUTTEXTXY(ROUND(400*COTE1),ROUND(60*COTE2),FECHA);
OUTTEXTXY(ROUND(400*COTE1),ROUND(80*COTE2),VER DIRECT);
OUTTEXTXY(ROUND(400*COTE1),ROUND(100*COTE2),CH. DIRECT);
OUTTEXTXY(ROUND(400*COTE1),ROUND(120*COTE2),LOCALIZAR);
DIMENSION3:=IMAGESIZE(ROUND(380*COTE1),ROUND(40*COTE2),ROUND(515*COTE1),ROUND(150*COTE2));
GETMEM(PUNTERO3,DIMENSION3);
GETIMAGE(ROUND(380*COTE1),ROUND(40*COTE2),ROUND(515*COTE1),ROUND(150*COTE2),PU
NTERO3^);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(390*COTE1),ROUND(55*COTE2),ROUND(500*COTE1),ROUND(70*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(400*COTE1),ROUND(60*COTE2),FECHA)
END

191

MANUAL DEL PROGRAMADOR: Programa principal

ELSE
BEGIN
PUTIMAGE(ROUND(380*COTE1),ROUND(40*COTE2),PUNTERO3^,COPYPUT);
IF ESC3=TRUE THEN BEGIN
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(390*COTE1),ROUND(55*COTE2),ROUND(500*COTE1),ROUND(70*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(400*COTE1),ROUND(60*COTE2),FECHA)
END
END
END;
IF CHIVATO1=4 THEN BEGIN
IF PUNTERO4=NIL THEN BEGIN
SETCOLOR(BLACK);
SETFILLSTYLE(1,WHITE);
BAR(ROUND(475*COTE1),ROUND(40*COTE2),ROUND(600*COTE1),ROUND(120*COTE2));
RECTANGLE(ROUND(480*COTE1),ROUND(45*COTE2),ROUND(590*COTE1),ROUND(110*COTE2));
SETCOLOR(BLACK);
SETLINESTYLE(0,1,3);
SETCOLOR(7);
LINE(ROUND(485*COTE1),ROUND(113*COTE2),ROUND(592*COTE1),ROUND(113*COTE2));
LINE(ROUND(593*COTE1),ROUND(49*COTE2),ROUND(593*COTE1),ROUND(114*COTE2));
SETLINESTYLE(0,0,1);
SETCOLOR(BLACK);
OUTTEXTXY(ROUND(490*COTE1),ROUND(55*COTE2),OSCILOSCOPIO);
OUTTEXTXY(ROUND(490*COTE1),ROUND(75*COTE2),DOS-SHELL);
OUTTEXTXY(ROUND(490*COTE1),ROUND(95*COTE2),ABANDONAR);
DIMENSION4:=IMAGESIZE(ROUND(475*COTE1),ROUND(40*COTE2),ROUND(600*COTE1),ROUND(
120*COTE2));
GETMEM(PUNTERO4,DIMENSION4);
GETIMAGE(ROUND(475*COTE1),ROUND(40*COTE2),ROUND(600*COTE1),ROUND(120*COTE2),PU
NTERO4^);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(485*COTE1),ROUND(50*COTE2),ROUND(585*COTE1),ROUND(65*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(490*COTE1),ROUND(55*COTE2),OSCILOSCOPIO)
END
ELSE
BEGIN
PUTIMAGE(ROUND(475*COTE1),ROUND(40*COTE2),PUNTERO4^,COPYPUT);
IF ESC4=TRUE THEN BEGIN
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(485*COTE1),ROUND(50*COTE2),ROUND(585*COTE1),ROUND(65*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(490*COTE1),ROUND(55*COTE2),OSCILOSCOPIO)
END
END
END;
IF CHIVATO1=5 THEN BEGIN
IF PUNTERO8=NIL THEN BEGIN
SETFILLSTYLE(1,7);
BAR(ROUND(180*COTE1),ROUND(100*COTE2),ROUND(460*COTE1),ROUND(280*COTE2));
SETCOLOR(BLACK);

192

MANUAL DEL PROGRAMADOR: Programa principal

RECTANGLE(ROUND(190*COTE1),ROUND(110*COTE2),ROUND(450*COTE1),ROUND(270*COTE2));
SETLINESTYLE(0,1,3);
SETCOLOR(BLACK);
LINE(ROUND(195*COTE1),ROUND(273*COTE2),ROUND(452*COTE1),ROUND(273*COTE2));
LINE(ROUND(453*COTE1),ROUND(115*COTE2),ROUND(453*COTE1),ROUND(274*COTE2));
LINE(ROUND(220*COTE1),ROUND(216*COTE2),ROUND(427*COTE1),ROUND(216*COTE2));
LINE(ROUND(428*COTE1),ROUND(158*COTE2),ROUND(428*COTE1),ROUND(217*COTE2));
SETCOLOR(WHITE);
SETLINESTYLE(0,0,1);
SETTEXTSTYLE(2,0,5);
IF GRAPHRESULT<>0 THEN SETTEXTSTYLE(0,0,1);
SETCOLOR(COLOR4);
OUTTEXTXY(ROUND(230*COTE1),ROUND(130*COTE2),EVALUACION VERSION 1.00);
SETFILLSTYLE(1,LIGHTBLUE);
BAR(ROUND(215*COTE1),ROUND(153*COTE2),ROUND(425*COTE1),ROUND(213*COTE2));
SETCOLOR(COLOR3);
OUTTEXTXY(ROUND(245*COTE1),ROUND(160*COTE2),JULIO MARTINEZ JUAN);
OUTTEXTXY(ROUND(310*COTE1),ROUND(175*COTE2),&);
OUTTEXTXY(ROUND(230*COTE1),ROUND(190*COTE2),EMILIO SAHUQUILLO DOBON);
OUTTEXTXY(ROUND(200*COTE1),ROUND(230*COTE2),VALENCIA a 30 de MARZO de 1993);
SETCOLOR(COLOR4);
OUTTEXTXY(ROUND(340*COTE1),ROUND(250*COTE2),>>> Salir ESC);
DIMENSION8:=IMAGESIZE(ROUND(180*COTE1),ROUND(100*COTE2),ROUND(460*COTE1),ROUND
(280*COTE2));
GETMEM(PUNTERO8,DIMENSION8);
GETIMAGE(ROUND(180*COTE1),ROUND(100*COTE2),ROUND(460*COTE1),ROUND(280*COTE2),PU
NTERO8^);
SETCOLOR(WHITE);
SETTEXTSTYLE(0,0,1)
END
ELSE PUTIMAGE(ROUND(180*COTE1),ROUND(100*COTE2),PUNTERO8^,COPYPUT)
END;
{inicializamos valores}
BAX2:=1;
CHIVATO2:=1;
BAY2:=FALSE;
BAX3:=1;
CHIVATO3:=1;
BAY3:=FALSE;
BAX4:=1;
CHIVATO4:=1;
BAY4:=FALSE;
REPEAT
DESCARGARTECLADO;
RESALTO:=ORD(READKEY);
IF (CHIVATO1=2) AND ((RESALTO=27) OR (RESALTO=13)) THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2))
END;
2: IF ((CHIVATO1=1) AND (RESALTO=80)) OR (BAY2=TRUE) THEN BEGIN
IF BAX2=3 THEN BAX2:=0;
IF BAX2=-1 THEN BAX2:=2;

193

MANUAL DEL PROGRAMADOR: Programa principal

IF BAX2=0 THEN BEGIN


PUTIMAGE(ROUND(85*COTE1),ROUND(40*COTE2),PUNTERO2^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(95*COTE1),ROUND(50*COTE2),ROUND(195*COTE1),ROUND(65*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(55*COTE2),FICHERO PSP);
BAY2:=FALSE;
CHIVATO2:=1
END;
IF BAX2=1 THEN BEGIN
PUTIMAGE(ROUND(85*COTE1),ROUND(40*COTE2),PUNTERO2^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(95*COTE1),ROUND(70*COTE2),ROUND(195*COTE1),ROUND(85*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(75*COTE2),CREAR);
BAY2:=FALSE;
CHIVATO2:=2
END;
IF BAX2=2 THEN BEGIN
PUTIMAGE(ROUND(85*COTE1),ROUND(40*COTE2),PUNTERO2^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(95*COTE1),ROUND(90*COTE2),ROUND(195*COTE1),ROUND(105*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(95*COTE2),TOLERANCIA);
BAY2:=FALSE;
CHIVATO2:=3
END;
RESALTO:=0;
BAX2:=BAX2+1
END;
IF (RESALTO=72) AND (CHIVATO1=1) THEN BEGIN
BAX2:=BAX2-2;
BAY2:=TRUE;
IF BAX2=-2 THEN BAX2:=-1;
GOTO 2
END;
3: IF ((CHIVATO1=3) AND (RESALTO=80)) OR (BAY3=TRUE) THEN BEGIN
IF BAX3=4 THEN BAX3:=0;
IF BAX3=-1 THEN BAX3:=3;
IF BAX3=0 THEN BEGIN
PUTIMAGE(ROUND(380*COTE1),ROUND(40*COTE2),PUNTERO3^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(390*COTE1),ROUND(55*COTE2),ROUND(500*COTE1),ROUND(70*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(400*COTE1),ROUND(60*COTE2),FECHA);
BAY3:=FALSE;
CHIVATO3:=1
END;
IF BAX3=1 THEN BEGIN
PUTIMAGE(ROUND(380*COTE1),ROUND(40*COTE2),PUNTERO3^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(390*COTE1),ROUND(75*COTE2),ROUND(500*COTE1),ROUND(90*COTE2));

194

MANUAL DEL PROGRAMADOR: Programa principal

SETCOLOR(WHITE);
OUTTEXTXY(ROUND(400*COTE1),ROUND(80*COTE2),VER DIRECT);
BAY3:=FALSE;
CHIVATO3:=2
END;
IF BAX3=2 THEN BEGIN
PUTIMAGE(ROUND(380*COTE1),ROUND(40*COTE2),PUNTERO3^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(390*COTE1),ROUND(95*COTE2),ROUND(500*COTE1),ROUND(110*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(400*COTE1),ROUND(100*COTE2),CH. DIRECT);
BAY3:=FALSE;
CHIVATO3:=3
END;
IF BAX3=3 THEN BEGIN
PUTIMAGE(ROUND(380*COTE1),ROUND(40*COTE2),PUNTERO3^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(390*COTE1),ROUND(115*COTE2),ROUND(500*COTE1),ROUND(130*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(400*COTE1),ROUND(120*COTE2),LOCALIZAR);
BAY3:=FALSE;
CHIVATO3:=4
END;
RESALTO:=0;
BAX3:=BAX3+1
END;
IF (RESALTO=72) AND (CHIVATO1=3) THEN BEGIN
BAX3:=BAX3-2;
BAY3:=TRUE;
IF BAX3=-2 THEN BAX3:=-1;
GOTO 3
END;
4: IF ((CHIVATO1=4) AND (RESALTO=80)) OR (BAY4=TRUE) THEN BEGIN
IF BAX4=3 THEN BAX4:=0;
IF BAX4=-1 THEN BAX4:=2;
IF BAX4=0 THEN BEGIN
PUTIMAGE(ROUND(475*COTE1),ROUND(40*COTE2),PUNTERO4^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(485*COTE1),ROUND(50*COTE2),ROUND(585*COTE1),ROUND(65*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(490*COTE1),ROUND(55*COTE2),OSCILOSCOPIO);
BAY4:=FALSE;
CHIVATO4:=1
END;
IF BAX4=1 THEN BEGIN
PUTIMAGE(ROUND(475*COTE1),ROUND(40*COTE2),PUNTERO4^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(485*COTE1),ROUND(70*COTE2),ROUND(585*COTE1),ROUND(85*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(490*COTE1),ROUND(75*COTE2),DOS-SHELL);
BAY4:=FALSE;
CHIVATO4:=2

195

MANUAL DEL PROGRAMADOR: Programa principal

END;
IF BAX4=2 THEN BEGIN
PUTIMAGE(ROUND(475*COTE1),ROUND(40*COTE2),PUNTERO4^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(485*COTE1),ROUND(90*COTE2),ROUND(585*COTE1),ROUND(105*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(490*COTE1),ROUND(95*COTE2),ABANDONAR);
BAY4:=FALSE;
CHIVATO4:=3
END;
RESALTO:=0;
BAX4:=BAX4+1
END;
IF (RESALTO=72) AND (CHIVATO1=4) THEN BEGIN
BAX4:=BAX4-2;
BAY4:=TRUE;
IF BAX4=-2 THEN BAX4:=-1;
GOTO 4
END;

{por las teclas de funcin y combinadas}


IF RESALTO=19 THEN BEGIN
ABANDONAR;
IF PULSA IN [S,s] THEN HALT
END;
IF (RESALTO=61) AND (CHIVATO1<>2) THEN VALORTOLERANCIA;
IF RESALTO=62 THEN BEGIN
SALIDA_AL_DOS;
CHIVATO1:=1;
RESALTO:=27
END
UNTIL (RESALTO=13) OR (RESALTO=27);
IF RESALTO=27 THEN BEGIN
IF PUNTERO5=NIL THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(ROUND(35*COTE1),ROUND(41*COTE2),ROUND(600*COTE1),ROUND(150*COTE2));
DIMENSION5:=IMAGESIZE(ROUND(35*COTE1),ROUND(41*COTE2),ROUND(600*COTE1),ROUND(1
50*COTE2));
GETMEM(PUNTERO5,DIMENSION5);
GETIMAGE(ROUND(35*COTE1),ROUND(41*COTE2),ROUND(600*COTE1),ROUND(150*COTE2),PUN
TERO5^)
END
ELSE
PUTIMAGE(ROUND(35*COTE1),ROUND(41*COTE2),PUNTERO5^,COPYPUT);
IF CHIVATO1=1 THEN BEGIN
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(85*COTE1),ROUND(20*COTE2),ROUND(195*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(27*COTE2),CONFIGURAR);

196

MANUAL DEL PROGRAMADOR: Programa principal

ESC1:=TRUE
END;
IF CHIVATO1=2 THEN BEGIN
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(230*COTE1),ROUND(20*COTE2),ROUND(330*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(250*COTE1),ROUND(27*COTE2),EJECUTAR);
ESC2:=TRUE
END;
IF CHIVATO1=3 THEN BEGIN
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(365*COTE1),ROUND(20*COTE2),ROUND(460*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(380*COTE1),ROUND(27*COTE2),APLICA-2);
ESC3:=TRUE
END;
IF CHIVATO1=4 THEN BEGIN
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(500*COTE1),ROUND(20*COTE2),ROUND(575*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(520*COTE1),ROUND(27*COTE2),SALIR);
ESC4:=TRUE
END;
IF CHIVATO1=5 THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(ROUND(180*COTE1),ROUND(100*COTE2),ROUND(460*COTE1),ROUND(280*COTE2));
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(48*COTE1),ROUND(20*COTE2),ROUND(72*COTE1),ROUND(40*COTE2));
SETFILLSTYLE(1,GREEN);
PIESLICE(ROUND(60*COTE1),ROUND(30*COTE2),1,360,ROUND(7*COTE1));
SETCOLOR(WHITE);
RECTANGLE(ROUND(51*COTE1),ROUND(21*COTE2),ROUND(69*COTE1),ROUND(39*COTE2));
ESC5:=TRUE
END;
GOTO 5
END;
IF (RESALTO=13) AND (CHIVATO1=1) AND (CHIVATO2=1) THEN BEGIN
RESTORECRTMODE;
CLRSCR;
FICHERO_PSPICE;
SETGRAPHMODE(MODO)
END;
IF (RESALTO=13) AND (CHIVATO2=2) THEN BEGIN
IF CREAR=A DISCO: SI THEN CREAR:=A DISCO: NO
ELSE CREAR:=A DISCO: SI;
IF CREADO1=TRUE THEN CREADO2:=FALSE;
IF CREADO1=FALSE THEN CREADO2:=TRUE
END;
IF (RESALTO=13) AND (CHIVATO2=3) THEN VALORTOLERANCIA;
IF (RESALTO=13) AND (CHIVATO1=3) AND (CHIVATO3=1) THEN BEGIN
RESTORECRTMODE;
FECHA;

197

MANUAL DEL PROGRAMADOR: Programa principal

SETGRAPHMODE(MODO)
END;
IF (RESALTO=13) AND (CHIVATO3=2) THEN BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(COLOR5);
CLRSCR;
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
GOTOXY(3,2);
TEXTCOLOR(COLOR6);
WRITELN(INTRODUCE UNIDAD, CAMINO Y PARAMETROS SOBRE LOS QUE LISTAR);
GOTOXY(3,3);
WRITE((pulsa INTRO para ver ayuda));
IF LENGTH(DIRECTORIO)<30 THEN WRITELN( DTO. actual : ,DIRECTORIO);
RAYA_HORIZONTAL(2,79,4,WHITE);
TEXTCOLOR(COLOR6);
WINDOW(3,5,78,24);
DESCARGARTECLADO;
READLN(VER);
SWAPVECTORS;
EXEC(ESPACIO1.EXE,VER);
ERRORDIRECTORIO:=DOSERROR;
IF ERRORDIRECTORIO=2 THEN BEGIN
CURSOROFF;
ERROR(32761)
END;
IF (ERRORDIRECTORIO<>0) AND (ERRORDIRECTORIO<>2) THEN BEGIN
CURSOROFF;
ERROR(ERRORDIRECTORIO)
END;
SWAPVECTORS;
CURSOROFF;
TEXTBACKGROUND(COLOR5);
TEXTCOLOR(COLOR11);
IF ERRORDIRECTORIO<>0 THEN GOTOXY(1,20);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE para salir);
TEXTCOLOR(COLOR6);
DESCARGARTECLADO;
VER:=READKEY
UNTIL VER=#27;
SETGRAPHMODE(MODO)
END;
IF (RESALTO=13) AND (CHIVATO3=3) THEN CAMBIARDIRECTORIO;
IF (RESALTO=13) AND (CHIVATO3=4) THEN BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(COLOR5);
CLRSCR;

198

MANUAL DEL PROGRAMADOR: Programa principal

REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
GOTOXY(3,2);
TEXTCOLOR(COLOR6);
WRITELN(INTRODUCE UNIDAD, CAMINO Y/O ESPECIFICADOR);
GOTOXY(3,3);
WRITE((pulsa INTRO para ver ayuda));
IF LENGTH(DIRECTORIO)<30 THEN WRITELN( DTO. actual : ,DIRECTORIO);
RAYA_HORIZONTAL(2,79,4,WHITE);
TEXTCOLOR(COLOR6);
WINDOW(3,5,78,24);
DESCARGARTECLADO;
READLN(VER);
SWAPVECTORS;
EXEC(LOCALIZA.EXE,VER);
ERRORDIRECTORIO:=DOSERROR;
IF ERRORDIRECTORIO=2 THEN BEGIN
CURSOROFF;
ERROR(32760)
END;
IF (ERRORDIRECTORIO<>0) AND (ERRORDIRECTORIO<>2) THEN BEGIN
CURSOROFF;
ERROR(ERRORDIRECTORIO)
END;
SWAPVECTORS;
CURSOROFF;
TEXTBACKGROUND(COLOR5);
TEXTCOLOR(COLOR11);
IF ERRORDIRECTORIO<>0 THEN GOTOXY(1,20);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE para salir);
TEXTCOLOR(COLOR6);
DESCARGARTECLADO;
VER:=READKEY
UNTIL VER=#27;
SETGRAPHMODE(MODO)
END;
IF (RESALTO=13) AND (CHIVATO4=2) THEN BEGIN
SALIDADOS:=TRUE;
SALIDA_AL_DOS
END;
IF (RESALTO=13) AND (CHIVATO4=1) AND (CHIVATO1=4) THEN BEGIN
VISUALIZACION_DE_ONDAS;
MODO:=GETMAXMODE;
SETGRAPHMODE(MODO)
END;
IF BAX4=3 THEN BEGIN
ABANDONAR;
IF PULSA IN [S,s] THEN HALT;
IF PULSA IN [N,n] THEN BAX4:=1

199

MANUAL DEL PROGRAMADOR: Programa principal

END;
CLEARVIEWPORT;
UNTIL BAX4=3;
CLOSEGRAPH;
LIBERARMEMORIA;
LOWVIDEO;
TEXTMODE(C80);
END.

200

También podría gustarte