2.- MANUAL DEL PROGRAMADOR

UNIVERSIDAD POLITÉCNICA DE VALENCIA ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL DE VALENCIA PROYECTO: VERIFICACIÓN DE CIRCUITOS ELECTRÓNI

9 downloads 179 Views 292KB Size

Recommend Stories


Manual del Programador 1
Manual del Programador 1 1 INTRODUCCIÓN ...........................................................................................................

MANUAL DE USUARIO DEL PROGRAMADOR
CONTROL DE RENDIMIENTOS PARA UNA LINEA DE EVISCERADO MANUAL DE USUARIO DEL PROGRAMADOR Índice INDICE CAPITULO 1 INTRODUCCION Página 1. DESCRIPC

Manual básico del programador de Doehler & Haass
Manual básico del programador de Doehler & Haass 1. Búsqueda de software de Doehler & Haass 2. Actualización de descodificadores 3. Actualización de

programador:
1 Cinemateca de Cuba Calle 23 No. 1155 Vedado Habana Cuba. Tel. (537) 7838-2844 / e-mail: [email protected] / programador: [email protected] Miembro

ORBI 2010 Programador Universal USB Manual del Usuario
1 ORBI 2010 Programador Universal USB Manual del Usuario ORBI 2010 Punto Flotante, S.A. 2 ORBI 2010 Programador Universal USB Manual del Usuario

Story Transcript

UNIVERSIDAD POLITÉCNICA DE VALENCIA

ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL DE VALENCIA

PROYECTO: VERIFICACIÓN DE CIRCUITOS ELECTRÓNICOS ASISTIDA POR COMPUTADOR

2.- MANUAL DEL PROGRAMADOR

PROYECTO FIN DE CARRERA REALIZADO POR : D. JULIO MARTÍNEZ JUAN DIRIGIDO POR : D. EDUARDO GARCÍA BREIJÓ ESPECIALIDAD : ELÉTRICA SECCIÓN : ELECTRÓNICA Valencia a 31 de Mayo de 1992

ÍNDICE (MANUAL DEL PROGRAMADOR)

1.- INTRODUCCIÓN AL MANUAL DEL PROGRAMADOR . . . . . . . . . . . . . . . . .

1

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

1

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

2

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

2

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

3

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

4

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

4

2.1.1.- DESCRIPCIÓN DE LA UNIDAD . . . . . . . . . . . . . . . . . . . . .

4

2.1.2.- DIRECTIVAS DE COMPILACIÓN . . . . . . . . . . . . . . . . . . . .

4

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

4

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

5

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

5

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

5

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

21

2.2.1.- DESCRIPCIÓN DE LA UNIDAD . . . . . . . . . . . . . . . . . . . .

21

2.2.2.- DIRECTIVAS DE COMPILACIÓN . . . . . . . . . . . . . . . . . . .

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

I

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

76

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

76

3.1.1.- DESCRIPCIÓN 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.- DESCRIPCIÓN 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.- DESCRIPCIÓN 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.- DESCRIPCIÓN DEL PROGRAMA . . . . . . . . . . . . . . . . . .

125

4.1.2.- DIRECTIVAS DE COMPILACIÓN . . . . . . . . . . . . . . . . . .

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.- DESCRIPCIÓN DEL PROGRAMA . . . . . . . . . . . . . . . . . .

139

4.2.2.- DIRECTIVAS DE COMPILACIÓN . . . . . . . . . . . . . . . . . .

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.- DESCRIPCIÓN DEL PROGRAMA . . . . . . . . . . . . . . . . . .

151

4.3.2.- DIRECTIVAS DE COMPILACIÓN . . . . . . . . . . . . . . . . . .

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.- DESCRIPCIÓN DEL PROGRAMA . . . . . . . . . . . . . . . . . . . . . . . . .

167

4.2.- DIRECTIVAS DE COMPILACIÓN . . . . . . . . . . . . . . . . . . . . . . . . .

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.- INTRODUCCIÓN AL MANUAL DEL PROGRAMADOR

El propósito 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 parámetros de las funciones expuestas.

1.- Unidades empleadas.

Se han empleado el conjunto de unidades de compilación independiente, que suministra Turbo Pascal 6.0, formado por :

Unidad CRT Unidad DOS Unidad GRAPH

Y se ha creado para facilitar la ejecución, compilación y comprensión del programa, las unidades de compilación independiente siguientes :

Unidad ERR Unidad VISUAL

1

MANUAL DEL PROGRAMADOR: Introducción

En todo programa (y/o Unidad) se habrán declarado las unidades utilizadas en el mismo al comienzo, en la declaración USES.

2.- Archivos Include.

Se declaran en el programa principal mediante la sentencia {$I } y constituyen un total de dos. El primero, que contiene el conjunto de comprobación y transformación del formato del fichero .TXT de PSPICE (opción fichero PSP), y el segundo que contiene la aplicación de asignación de canales de la tarjeta de adquisición y verificación del circuito a evaluar (opción ejecutar). Son los siguientes :

Archivo Include GEN Archivo Include EJECUTA

Además podemos encontrar un archivo include más que pertenece a la unidad VISUAL y que incluye la opción de ayuda en línea.

Archivo Include AYUDA

3.- Archivos ejecutables.

Son los ficheros que se ejecutarán desde el entorno de sistema operativo. Son:

2

MANUAL DEL PROGRAMADOR: Introducción

Ejecutable ESPACIO1 Ejecutable LOCALIZA

Además del archivo de instalación 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

3

2.- UNIDADES

Las dos unidades que trataremos en éste apartado serán ERR y VISUAL.

2.1.- ERR

2.1.1.- DESCRIPCIÓN DE LA UNIDAD.

La unidad aquí presentada contiene las llamadas de aplicación al tratamiento de tipo de error correspondiente a cualquier instrucción en tiempo de ejecución. 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 vídeo 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 ejecución).

2.1.2.- DIRECTIVAS DE COMPILACIÓN.

No existe NINGUNA directiva de compilación utilizada para esta unidad.

2.1.3.- OTRAS UNIDADES EMPLEADAS.

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

4

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 función. (Ver listado).

2.1.6.- LISTADO.

UNIT ERR;

INTERFACE TYPE

5

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; (**********************************************************)

6

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 ERROR15 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 XXX15 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 XXX5 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 XXX5 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 XXX5 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 XXX5 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>> 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 ERROROSC0 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 ERROROSC0 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 ERROROSC0 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 ERROROSC0 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 ERROROSC0 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 ERROROSC0 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 ERROROSC0 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>> pulsa CUALQUIER TECLA para repetir’); DESCARGARTECLADO; MAS:=READKEY END UNTIL ERROROSC=0; IF (ONDAS1) AND (ONDAS2) 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 ERROROSC0 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 LONGITUDDEDISCO1 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 ERROROSC0 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 ERROROSC0 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 ERROROSC0 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 LONGITUDDEDISCO1 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 ERROROSC0 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 ERROROSC0 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 ERROROSC0 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 LONGITUDDEDISCO1 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 ERROROSC0 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 ERROROSC0 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_CONVERSION6 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 XXX3 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 XXX638) 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 función}

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>> VOLT/DIV’);

77

MANUAL DEL PROGRAMADOR: Ficheros Include

SETCOLOR(LIGHTMAGENTA); OUTTEXTXY(370,55,’F2’); SETCOLOR(WHITE); RECTANGLE(102,52,398,298); OUTTEXTXY(115,75,’Función para determinar en eje de’); OUTTEXTXY(115,85,’ordenadas la tensión por división,’); OUTTEXTXY(115,95,’con unos rangos de tensión 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,’lización la realiza el programa’); OUTTEXTXY(115,135,’en 2.5 VOLT/DIV. Por tanto en el’); OUTTEXTXY(115,145,’caso de utilizar la aplicación 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 tensión.’); OUTTEXTXY(115,185,’La pantalla de visualión de formas’); OUTTEXTXY(115,195,’de onda está dividida con una al-’); OUTTEXTXY(115,205,’tura de ocho cuadrículas, consi-’); OUTTEXTXY(115,215,’guiendo una escala máxima de 20’); OUTTEXTXY(115,225,’voltios de pico a pico, y mínima’); OUTTEXTXY(115,235,’de 2 voltios de pico a pico.Cada’); OUTTEXTXY(115,245,’cuadrícula a su vez contiene cin-’); OUTTEXTXY(115,255,’co divisiones, aumentando la pre-’); OUTTEXTXY(115,265,’cisión 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,’Función para determinar en eje de’); OUTTEXTXY(115,85,’abcisas los tiempos de representa-’); OUTTEXTXY(115,95,’ción 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 cuadrículas con’); OUTTEXTXY(115,155,’cinco partes cada una, obtenien-’); OUTTEXTXY(115,165,’do una división de 50 partes por’); OUTTEXTXY(115,175,’cuadrícula, 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 opción más 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,’Según la elección visualizamos el’); OUTTEXTXY(115,135,’CANAL 1, el CANAL 2 o AMBOS; man-’); OUTTEXTXY(115,145,’teniendose la visualización en’); OUTTEXTXY(115,155,’pantalla hasta la pulsación 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 opción permite’); OUTTEXTXY(115,235,’cargar formas de onda que se han’); OUTTEXTXY(115,245,’salvado previamente sobre disco;’); OUTTEXTXY(115,255,’además de realizar seguimiento con’); OUTTEXTXY(115,265,’el cursor en tensión 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,’Opción simple para la asignación’); 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,’Opción para salir del osciloscopio’); OUTTEXTXY(115,85,’y regresar al menú principal.’); OUTTEXTXY(115,95,’Con la verificación mediante la’); OUTTEXTXY(115,105,’señal 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 pulsación 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 sólo pulsar la tecla’); OUTTEXTXY(115,205,’F6. O elegir la opción "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 utilización del os-’); OUTTEXTXY(115,85,’ciloscopio ha sido ideado para que’); OUTTEXTXY(115,95,’su manejo sea sencillo y cómodo’); 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 rápido’); OUTTEXTXY(115,135,’uso de las opciones presentadas en’); OUTTEXTXY(115,145,’pantalla. Esto unido a las teclas’); OUTTEXTXY(115,155,’de función del menú principal y a’); OUTTEXTXY(115,165,’la elección si procede con teclas’); OUTTEXTXY(115,175,’de cursor (e INTRO), hace que se’); OUTTEXTXY(115,185,’optimice el tiempo de elección 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.- DESCRIPCIÓN DEL ARCHIVO.

Es el archivo que contiene los procedimientos utilizados en la opción 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 función). (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);{------------recuperación 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 ERROR30 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 ERROR10 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 ERROR10 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 ERROR20 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 ERROR40 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 ERROR40 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 ERROR40 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 ERROR40 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 ERROR50 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 CUENTA0 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 ERROR50 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 ERROR50 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 ERROR50 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 nºs 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 dinámica} { 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 dinámica------} 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 ERROR60 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 ERROR60 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 ERROR60 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 ERROR60 THEN BEGIN PROCESO_DE_ERROR(ERROR6); IF SALIDA=#27 THEN GOTO FIN END UNTIL ERROR6=0; REPEAT {$I-}WRITELN(FICH,’ ’){$I+}; ERROR6:=IORESULT; IF ERROR60 THEN BEGIN PROCESO_DE_ERROR(ERROR6); IF SALIDA=#27 THEN GOTO FIN END UNTIL ERROR6=0; REPEAT {$I-}WRITELN(FICH,’ ’){$I+}; ERROR6:=IORESULT; IF ERROR60 THEN BEGIN PROCESO_DE_ERROR(ERROR6); IF SALIDA=#27 THEN GOTO FIN END UNTIL ERROR6=0; X:=PRIM; WHILE XNIL 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 ERROR60 THEN BEGIN PROCESO_DE_ERROR(ERROR6); IF SALIDA=#27 THEN GOTO FIN END UNTIL ERROR6=0; REPEAT {$I-}WRITE(FICH,’ ’){$I+}; ERROR6:=IORESULT; IF ERROR60 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 ERROR60 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 ERROR60 THEN BEGIN PROCESO_DE_ERROR(ERROR6); IF SALIDA=#27 THEN GOTO FIN END UNTIL ERROR6=0; {$I-}CLOSE(FICH){$I+}; ERROR6:=IORESULT; IF ERROR60 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 VALORNIL 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 CONTADOR30 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_ERRORES0 THEN BEGIN RAYA_HORIZONTAL(0,77,6,12); IF CONTADOR30 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_ERRORES0) OR (CONTADOR30) 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 ERROR200 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 ERROR200 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 ERROR200 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 ERROR200 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 ERRORLECT0 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 ERRORLECT0 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 ERRORLECT0 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 ERR0 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 ERRORLECT0 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 ERRORLECT0 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 ERR0 THEN BEGIN V1:=88888888888E00; NO_DE_ERRORES:=NO_DE_ERRORES+1 END; IF (V1>10) or (V1PULSA 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>>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

(**********************************************************) {presentación de los datos antes de la conexión 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]> 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 adquisición 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; (********) {introducción de los datos del muestreo en men dinámica} 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 adquisición_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; 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 comparación entre el fichero resultado de la simulación} {en PSPICE y la adquisición 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+VPSef) THEN CORRECTOef:=TRUE ELSE CORRECTOef:=FALSE; IF (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 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 años 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’,’MIéRCOLES’, ’JUEVES’,’VIERNES’,’SáBADO’); 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 posición 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; { añadir 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 también 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 más 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 añadir 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 interés} 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 posición, 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 asignación } { 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 añadimos 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(’’,TEMP,14) { decirle al mundo que es un subdir. } END ELSE { esta sentencia compuesta separa el nombre del fichero y su } { extensión, y convierte el tamaño en una cadena. NO se } { inserta una cifra de tamaño en TEMP para los subdirectorios. } BEGIN POSPUNTO := POS(’.’,NOMBREFICHERO); IF POSPUNTO > 0 THEN { el nombre del fichero tiene extensión } 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 día, y el año, 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 vacía } 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 vídeo 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 opción 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(’ N F A D’); TEXTCOLOR(COLOR1); WRITELN(’ Donde es cualquier especificador ’); WRITELN(’ de fichero DOS legal. El segundo parámetro es N o F:’); WRITELN(’ N indica ordenación por NOMBRE de los ficheros; F ordenación por FECHA.’); WRITELN(’ Al no darse este parámetro, los ficheros se presentan en su orden físico.’); TEXTCOLOR(COLOR2); WRITELN(’ EL TERCER PAR METRO PUEDE SER A O D:’); TEXTCOLOR(COLOR1); WRITELN(’ A indica un orden de presentación ASCENDENTE; D DESCENDENTE.’); WRITELN(’ En caso de no darse este parámetro, la presentación se hace ASCENDENTE’); TEXTCOLOR(COLOR2); WRITELN(’ POR EJEMPLO :’); TEXTCOLOR(COLOR1); WRITELN(’ *.EXE N’); WRITELN(’ Presentará TODOS los ficheros con extensión .EXE,’); WRITELN(’ en orden ASCENDENTE según su NOMBRE. O, ’); WRITELN(’ *.EVA F D’); WRITELN(’ Presentará TODOS los ficheros con extensión .EVA,’); WRITELN(’ en orden DESCENDENTE según su FECHA de última modificación.’); 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 parámetros pasados en la línea 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.- DESCRIPCIÓN DEL PROGRAMA.

LOCALIZA es el programa que ejecuta desde el entorno del sistema operativo la opción 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 están incluidos dentro del primero.

El programa es ideal para encontrar la posición 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 más escondido, pués 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 demás subdirectorios sobre los que buscar).

La información adicional de los archivos encontrados (tamaño, fecha de la última modificación...) 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 COMPILACIÓN.

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 utilización a cada procedimiento y/o función, 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 día de la sem. } NUMERODIA := AL; { en AL. } IF BISIESTO THEN { Corregir para años 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’,’Miércoles’, ’Jueves’,’Viernes’,’Sábado’); 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(’’,TEMP,14) { Decirle al mundo qué es un subdir. } END ELSE { Esta sentencia compuesta separa el nombre del fichero y su } { extensión, y convierte el tamaño en una cadena. No se } { inserta una cifra de tamaño en Temp para los subdirectorios. } BEGIN POSPUNTO := POS(’.’,NOMBREFICHERO); IF POSPUNTO > 0 THEN { El nombre del fichero tiene extensión } 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 año, 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 posición 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 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 instalación} 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 básico del’); WRITE(’programa. Asegurese instalando correcta-’); WRITE(’mente con los ficheros necesarios según’); 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 básico del PROGRAMA. El’); WRITE(’archivo EVAL.EXE no ha sido correctamen-’); WRITE(’te instalado, repita la instalación. ’); 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.- DESCRIPCIÓN DEL PROGRAMA.

El programa aquí propuesto debe de conjugar el conjunto de código antes expuesto. Se encargará de realizar todas las opciones que lleva consigo, y de dirigir la ejecución del programa en la dirección que demande el usuario del mismo.

4.2.- DIRECTIVAS DE COMPILACIÓN.

Las directivas de compilación que utiliza son las siguientes : {A+,S+,B-,E+,N+} {$M 16384, 270000, 270000} Activación del modo 287

Además para tratar los errores se utiliza de forma eficiente la directiva de activación y desativación del código 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 programación en Pascal es la estructuración. Por ella la comprensión de cualquier programa se realiza de forma sencilla, y sin complejos e ininteligibles diagramas de flujo. Aún 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 según el siguiente diagrama :

168

MANUAL DEL PROGRAMADOR: Programa principal

Diagrama de conjunción 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’; {señala el numero de errores producidos} NO_DE_ERRORES : INTEGER=0; {señala 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 función), y como tales se restringen su utilización a dicho procedimento (y/o función).

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’; {señala el numero de errores producidos} NO_DE_ERRORES: INTEGER=0; {señala 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 ((CHIVATO15) AND ((SALTO13) OR (SALTO80))) 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 condición 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)>> 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 ERRORDIRECTORIO0 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 ERRORDIRECTORIO0 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 AÑO (cuatro cifras)’); DESCARGARTECLADO; WINDOW(3,12,78,13); {$I-} READLN(ANO) {$I+}; ERRORDIRECTORIO:=IORESULT; IF ERRORDIRECTORIO0 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; {realización de la información} 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 información} IF (CHIVATO12) AND (RESALTO27) 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 condición 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(’ Verificación de circuitos electrónicos ’); SALVAX:=WHEREX; SALVAY:=WHEREY; SALVARPANTALLA(PUNTEROPAN); TEXTMODE(C80); {inicializamos los punteros gráficos} 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; {inicialización del modo gráfico} DRIVER:=DETECT; INITGRAPH(DRIVER,MODO,’’); {introducimos rutina de busqueda de los ficheros graficos} IF GRAPHRESULT0 THEN BEGIN DRIVER:=DETECT; INITGRAPH(DRIVER,MODO,’C:\TP\BGI’); IF GRAPHRESULT0 THEN BEGIN DRIVER:=DETECT; INITGRAPH(DRIVER,MODO,’D:\TP\BGI’); IF GRAPHRESULT0 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 función 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 (SALTO62) UNTIL (SALTO=13) OR (SALTO=80); PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT); IF CHIVATO1=1 THEN BEGIN IF (PUNTERO2=NIL) OR (CREADO1CREADO2) THEN BEGIN IF PUNTERO2NIL 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 GRAPHRESULT0 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 función y combinadas} IF RESALTO=19 THEN BEGIN ABANDONAR; IF PULSA IN [’S’,’s’] THEN HALT END; IF (RESALTO=61) AND (CHIVATO12) 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)

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.