Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Programa Basico
Manual Programa Basico
PROYECTO:
VERIFICACIN DE CIRCUITOS ELECTRNICOS ASISTIDA
POR COMPUTADOR
2.- UNIDADES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.- ERR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.6.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.- VISUAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
21
21
21
22
24
2.2.6.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
76
3.1.- AYUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
76
76
77
3.1.4.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
3.2.- GEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
82
82
82
3.2.4.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
3.3.- EJECUTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
107
107
107
107
3.3.4.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
107
125
4.1.- ESPACIO1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
125
125
126
126
126
128
II
4.1.6.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
128
4.2.- LOCALIZA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
139
139
140
140
140
141
4.2.6.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
141
4.3.- INSTALA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
151
151
151
152
152
153
4.3.6.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
153
167
167
167
167
167
169
172
4.7.- LISTADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
173
III
Unidad CRT
Unidad DOS
Unidad GRAPH
Unidad ERR
Unidad VISUAL
Son los ficheros que se ejecutarn desde el entorno de sistema operativo. Son:
Ejecutable ESPACIO1
Ejecutable LOCALIZA
EVAL
2.- UNIDADES
Las dos unidades que trataremos en ste apartado sern ERR y VISUAL.
2.1.- ERR
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;
Son las que se declaran y se utilizan en cada procedimiento y/o funcin. (Ver
listado).
2.1.6.- LISTADO.
UNIT ERR;
INTERFACE
TYPE
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;
(**********************************************************)
PROCEDURE RAYA_HORIZONTAL(X1,X2,Y,C:BYTE);
VAR
MARCA:BYTE;
BEGIN
TEXTCOLOR(C);
FOR MARCA:=(X1+1) TO (X2-1) DO
BEGIN
GOTOXY(MARCA,Y);
WRITE(#196)
END;
TEXTCOLOR(WHITE)
END;
(**********************************************************)
PROCEDURE ERROR(ERROR:INTEGER);
BEGIN
BEGIN
(*--------------------ERRORES DEL DOS-------------------*)
IF ERROR<32700 THEN
BEGIN
CASE ERROR OF
1:
BEGIN
DIBUJARCUADRO(24,14,52,16,YELLOW,RED);
GOTOXY(25,15);
WRITELN(NUMERO DE FUNCION NO VALIDO)
END;
2:
BEGIN
DIBUJARCUADRO(27,14,49,16,YELLOW,RED);
GOTOXY(28,15);
WRITELN(ARCHIVO NO ENCONTRADO)
END;
3:
BEGIN
DIBUJARCUADRO(25,14,54,16,YELLOW,RED);
GOTOXY(26,15);
WRITELN(ENCAMINAMIENTO NO ENCONTRADO)
END;
4:
BEGIN
DIBUJARCUADRO(25,14,54,16,YELLOW,RED);
GOTOXY(26,15);
WRITELN(DEMASIADOS ARCHIVOS ABIERTOS)
END;
5:
BEGIN
DIBUJARCUADRO(27,14,53,16,YELLOW,RED);
GOTOXY(28,15);
WRITELN(ACCESO A ARCHIVO DENEGADO)
END;
6:
BEGIN
DIBUJARCUADRO(23,14,56,16,YELLOW,RED);
GOTOXY(24,15);
WRITELN(DESCRIPTOR DE FICHEROS NO VALIDO)
END;
7:
BEGIN
DIBUJARCUADRO(20,14,61,16,YELLOW,RED);
GOTOXY(21,15);
WRITELN(BLOQUES DE CONTROL DE MEMORIA DESTRUIDOS)
END;
8:
BEGIN
DIBUJARCUADRO(29,14,50,16,YELLOW,RED);
GOTOXY(30,15);
WRITELN(MEMORIA INSUFICIENTE)
END;
9:
BEGIN
DIBUJARCUADRO(19,14,60,16,YELLOW,RED);
GOTOXY(20,15);
WRITELN(DIRECCION DE BLOQUE DE MEMORIA NO VALIDA)
END;
10:
BEGIN
DIBUJARCUADRO(27,14,53,16,YELLOW,RED);
GOTOXY(28,15);
WRITELN(ENTORNO DEL DOS NO VALIDO)
END;
11:
BEGIN
DIBUJARCUADRO(31,14,49,16,YELLOW,RED);
GOTOXY(32,15);
WRITELN(FORMATO NO VALIDO)
END;
12:
BEGIN
DIBUJARCUADRO(21,14,58,16,YELLOW,RED);
GOTOXY(22,15);
WRITELN(CODIGO DE ACCESO AL ARCHIVO INVALIDO)
END;
13:
BEGIN
DIBUJARCUADRO(31,14,48,16,YELLOW,RED);
GOTOXY(32,15);
WRITELN(DATOS NO VALIDOS)
END;
15:
BEGIN
DIBUJARCUADRO(22,14,57,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(NUMERO DE UNIDAD DE DISCO INVALIDO)
END;
16:
BEGIN
DIBUJARCUADRO(20,14,60,16,YELLOW,RED);
GOTOXY(21,15);
WRITELN(IMPOSIBLE ELIMINAR EL DIRECTORIO ACTUAL)
END;
17:
BEGIN
DIBUJARCUADRO(16,14,61,16,YELLOW,RED);
GOTOXY(17,15);
WRITELN(NO SE PUEDE RENOMBRAR ENTRE UNIDADES DISTINTAS)
END;
18:
BEGIN
DIBUJARCUADRO(23,14,46,16,YELLOW,RED);
GOTOXY(24,15);
WRITELN(NO QUEDAN MAS FICHEROS)
END;
(*-----------------ERRORES DE E/S-------------------*)
100:
BEGIN
DIBUJARCUADRO(27,14,53,16,YELLOW,RED);
GOTOXY(28,15);
WRITELN(ERROR DE LECTURA EN DISCO)
END;
101:
BEGIN
DIBUJARCUADRO(26,14,54,16,YELLOW,RED);
GOTOXY(27,15);
WRITELN(ERROR DE ESCRITURA EN DISCO)
END;
102:
BEGIN
DIBUJARCUADRO(30,14,50,16,YELLOW,RED);
GOTOXY(31,15);
WRITELN(ARCHIVO NO ASIGNADO)
END;
103:
BEGIN
DIBUJARCUADRO(25,14,55,16,YELLOW,RED);
GOTOXY(26,15);
WRITELN(EL ARCHIVO NO HA SIDO ABIERTO)
END;
104:
BEGIN
DIBUJARCUADRO(24,14,56,16,YELLOW,RED);
GOTOXY(25,15);
WRITELN(ARCHIVO NO ABIERTO PARA LECTURA)
END;
105:
BEGIN
DIBUJARCUADRO(23,14,57,16,YELLOW,RED);
GOTOXY(24,15);
WRITELN(ARCHIVO NO ABIERTO PARA ESCRITURA)
END;
106:
BEGIN
DIBUJARCUADRO(27,14,53,16,YELLOW,RED);
GOTOXY(28,15);
WRITELN(FORMATO NUMERICO INVALIDO)
END;
(*----------------ERRORES CRITICOS----------------*)
150:
BEGIN
DIBUJARCUADRO(23,14,56,16,YELLOW,RED);
GOTOXY(24,15);
WRITELN(DISCO PROTEGIDO CONTRA ESCRITURA)
END;
151:
BEGIN
DIBUJARCUADRO(30,14,49,16,YELLOW,RED);
GOTOXY(31,15);
WRITELN(UNIDAD DESCONOCIDA)
END;
152:
BEGIN
DIBUJARCUADRO(30,14,50,16,YELLOW,RED);
GOTOXY(31,15);
WRITELN(UNIDAD NO PREPARADA)
END;
153:
BEGIN
DIBUJARCUADRO(31,14,49,16,YELLOW,RED);
GOTOXY(32,15);
WRITELN(ORDEN DESCONOCIDA)
END;
154:
BEGIN
DIBUJARCUADRO(15,14,64,16,YELLOW,RED);
GOTOXY(16,15);
WRITELN(ERROR EN CRC (Comprobacin Cclica) DE LOS DATOS)
END;
155:
BEGIN
DIBUJARCUADRO(19,14,61,16,YELLOW,RED);
GOTOXY(20,15);
WRITELN(LONGITUD DE PETICION DE UNIDAD INCORRECTA)
END;
156:
BEGIN
DIBUJARCUADRO(25,14,55,16,YELLOW,RED);
GOTOXY(26,15);
WRITELN(ERROR DE BUSQUEDA EN EL DISCO);
WRITELN(^g)
END;
157:
BEGIN
DIBUJARCUADRO(26,14,53,16,YELLOW,RED);
GOTOXY(27,15);
WRITELN(TIPO DEL MEDIO DESCONOCIDO)
END;
158:
10
BEGIN
DIBUJARCUADRO(29,14,50,16,YELLOW,RED);
GOTOXY(30,15);
WRITELN(SECTOR NO ENCONTRADO)
END;
159:
BEGIN
DIBUJARCUADRO(30,14,50,16,YELLOW,RED);
GOTOXY(31,15);
WRITELN(IMPRESORA SIN PAPEL)
END;
160:
BEGIN
DIBUJARCUADRO(21,14,58,16,YELLOW,RED);
GOTOXY(22,15);
WRITELN(FALLO DE ESCRITURA EN EL DISPOSITIVO)
END;
161:
BEGIN
DIBUJARCUADRO(22,14,57,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(FALLO DE LECTURA EN EL DISPOSITIVO)
END;
162:
BEGIN
DIBUJARCUADRO(31,14,49,16,YELLOW,RED);
GOTOXY(32,15);
WRITELN(FALLO EN HARDWARE)
END;
(*---------------ERRORES FATALES---------------*)
200:
BEGIN
DIBUJARCUADRO(31,14,49,16,YELLOW,RED);
GOTOXY(32,15);
WRITELN(DIVISION POR CERO)
END;
201:
BEGIN
DIBUJARCUADRO(24,14,55,16,YELLOW,RED);
GOTOXY(25,15);
WRITELN(ERROR DE COMPROBACION DE RANGO)
END;
202:
BEGIN
DIBUJARCUADRO(22,14,57,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(ERROR DE DESBORDAMIENTO DE LA PILA)
END;
203:
BEGIN
DIBUJARCUADRO(22,14,57,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(ERROR DE DESBORDAMIENTO DEL MONTON)
END;
204:
11
BEGIN
DIBUJARCUADRO(24,14,56,16,YELLOW,RED);
GOTOXY(25,15);
WRITELN(OPERACION DE PUNTEROS INVALIDOS)
END;
205:
BEGIN
DIBUJARCUADRO(17,14,62,16,YELLOW,RED);
GOTOXY(18,15);
WRITELN(DESBORDAMIENTO EN OPERACION DE COMA FLOTANTE)
END;
206:
BEGIN
DIBUJARCUADRO(13,14,67,16,YELLOW,RED);
GOTOXY(14,15);
WRITELN(DESBORDAMIENTO INFERIOR EN OPERACION DE COMA FLOTANTE)
END;
207:
BEGIN
DIBUJARCUADRO(22,14,58,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(OPERACION DE COMA FLOTANTE INVALIDA)
END;
208:
BEGIN
DIBUJARCUADRO(22,14,58,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(GESTOR DE SOLAPAMIENTO NO INSTALADO)
END;
209:
BEGIN
DIBUJARCUADRO(18,14,62,16,YELLOW,RED);
GOTOXY(19,15);
WRITELN(ERROR DE LECTURA EN ARCHIVO DE SOLAPAMIENTO)
END;
210:
BEGIN
DIBUJARCUADRO(28,14,51,16,YELLOW,RED);
GOTOXY(29,15);
WRITELN(OBJETO NO INICIALIZADO)
END;
211:
BEGIN
DIBUJARCUADRO(25,14,55,16,YELLOW,RED);
GOTOXY(26,15);
WRITELN(LLAMADA A UN METODO ABSTRACTO)
END;
212:
BEGIN
DIBUJARCUADRO(26,14,53,16,YELLOW,RED);
GOTOXY(27,15);
WRITELN(ERROR DE REGISTRO EN FLUJO)
END;
213:
BEGIN
12
DIBUJARCUADRO(22,14,57,16,YELLOW,RED);
GOTOXY(23,15);
WRITELN(INDICE DE COLECCION FUERA DE RANGO)
END;
214:
BEGIN
DIBUJARCUADRO(20,14,60,16,YELLOW,RED);
GOTOXY(21,15);
WRITELN(ERROR DE DESBORDAMIENTO EN LA COLECCION)
END
END;
WRITELN(^g);
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE)
END
(*------------RESTO DE ERRORES FATALES Y GENERALES--------*)
{errores escogidos por nosotros}
ELSE
BEGIN
CASE ERROR OF
32758:
BEGIN
DIBUJARCUADRO(17,11,59,14,YELLOW,RED);
GOTOXY(18,12);
WRITELN( NO HA SIDO ASIGNADO NIGUN CANAL DE LA );
GOTOXY(18,13);
WRITELN( PCLAB A NINGUN NUDO DEL CIRCUITO
)
END;
32759:
BEGIN
DIBUJARCUADRO(18,14,60,17,YELLOW,RED);
GOTOXY(19,15);
WRITELN( ATENCION: NO LLEGAN DATOS POR EL PUERTO );
GOTOXY(19,16);
WRITELN(
POSIBLEMENTE PCLAB NO CONECTADA
)
END;
32760:
BEGIN
DIBUJARCUADRO(21,9,59,14,YELLOW,RED);
GOTOXY(22,10);
WRITELN( OPCION NO ENCONTRADA, SITUESE EN );
GOTOXY(22,11);
WRITELN( DIRECTORIO DONDE SE ENCUENTRE EL );
GOTOXY(22,12);
WRITELN( ARCHIVO "LOCALIZA.EXE", Y VUELVA A );
GOTOXY(22,13);
WRITELN( EJECUTAR. UTILICE OPCION CH. DIRECT )
END;
32761:
BEGIN
DIBUJARCUADRO(21,9,59,14,YELLOW,RED);
13
GOTOXY(22,10);
WRITELN( OPCION NO ENCONTRADA, SITUESE EN );
GOTOXY(22,11);
WRITELN( DIRECTORIO DONDE SE ENCUENTRE EL );
GOTOXY(22,12);
WRITELN( ARCHIVO "ESPACIO1.EXE", Y VUELVA A );
GOTOXY(22,13);
WRITELN( EJECUTAR. UTILICE OPCION CH. DIRECT )
END;
32762:
BEGIN
DIBUJARCUADRO(21,14,59,17,YELLOW,RED);
GOTOXY(22,15);
WRITELN( FICHERO DE ENTRADA NO CORRECTO POR );
GOTOXY(22,16);
WRITELN( DEFECTO O EXCESO EN SU LONGITUD )
END;
32763:
BEGIN
GOTOXY(6,14);
WRITELN(EL FICHERO PSPICE CARECE DE LA MARCA DE FIN DE DATOS: ";");
GOTOXY(6,15);
WRITELN(AADESELA PARA PODER EFECTUAR LA EVALUACION)
END;
32764:
BEGIN
GOTOXY(6,14);
WRITELN(EL FICHERO PSPICE CONTIENE EN EL APARTADO TITLE O SUBTITLE );
GOTOXY(6,15);
WRITELN(EL CARACTER ESPECIFICO DEL PROGRAMA : "#" , CAMBIELO CON );
GOTOXY(6,16);
WRITELN(UN PROCESADOR ANTES DE VOLVER A EJECUTARLO)
END;
32765:
BEGIN
GOTOXY(6,14);
WRITELN(EL TITULO DEL FICHERO CONTIENE UN CARACTER ESPECIFICO DEL
PROGRAMA,);
GOTOXY(6,15);
WRITELN(USE RENAME DEL DOS ANTES DE REPETIR LA EJECUCION CON EL MISMO.)
END;
32766:
BEGIN
GOTOXY(6,14);
WRITELN(EL FICHERO HA SIDO DAADO O PERDIDO Y NO MANTIENE EL FORMATO
ADECUADO);
GOTOXY(6,15);
WRITELN(PARA SER UTILIZADO. INVESTIGUESE ANTES DE EJECUTARSE DE NUEVO.)
END;
14
32767:
BEGIN
DIBUJARCUADRO(22,14,57,17,YELLOW,RED);
GOTOXY(23,15);
WRITELN( EL PROGRAMA SOLO ADMITE FICHEROS );
GOTOXY(23,16);
WRITELN(
CON LA EXTENSION .TXT
);
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE)
END
ELSE
BEGIN
DIBUJARCUADRO(33,14,47,16,YELLOW,RED);
GOTOXY(34,15);
WRITELN(ERROR GENERAL);
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE)
END
END;
IF ERROR<>32758 THEN WRITELN(^g)
END
END
END;
(**********************************************************)
PROCEDURE DESCARGARTECLADO;
VAR
REGS : REGISTERS; { Utiliza la unidad DOS }
BEGIN
REGS.AH := $01;
{ AH=1: Comprueba tecla pulsada }
INTR($16,REGS);
{ Interrupcin $16: servicios de teclado }
IF (REGS.FLAGS AND $0040) = 0 THEN { Si hay caracteres en el buffer }
REPEAT
REGS.AH := 0;
{ Carcter listo; ir a leerlo... }
INTR($16,REGS);
{ ...utilizando AH = 0: Leer carcter }
REGS.AH := $01;
{ Comprobar otra tecla pulsada... }
INTR($16,Regs);
{ ...usando AH = 1 }
UNTIL (REGS.FLAGS AND $0040) <> 0;
END;
(**********************************************************)
PROCEDURE CURSOROFF;
VAR
REGS : Registers;
BEGIN
WITH REGS DO
15
BEGIN
AX := $0100;
CX := $2000; { Pone a 1 el bit 5 de CH para suprimir el cursor }
END;
INTR(16,REGS);
END;
(**********************************************************)
FUNCTION OBTENERTIPOADAP : TIPOADAPTADOR;
VAR
REGS : REGISTERS;
CODIGO : BYTE;
BEGIN
REGS.AH := $1A; { Intenta identificar un adaptador VGA }
REGS.AL := $00; { Es preciso hacer AL igual a 0 }
INTR($10,Regs);
IF REGS.AL = $1A THEN { ...si obtenemos $1A en AL... }
BEGIN
{ ...sabemos que tenemos un PS/2 video BIOS. }
CASE REGS.BL OF { Cdigo se obtiene en BL }
$00 : OBTENERTIPOADAP := Ninguno;
$01 : OBTENERTIPOADAP := MDA;
$02 : OBTENERTIPOADAP := CGA;
$04 : OBTENERTIPOADAP := EGAColor;
$05 : OBTENERTIPOADAP := EGAMono;
$07 : OBTENERTIPOADAP := VGAMono;
$08 : OBTENERTIPOADAP := VGAColor;
$0A,$0C : OBTENERTIPOADAP := MCGAColor;
$0B : OBTENERTIPOADAP := MCGAMono;
ELSE OBTENERTIPOADAP := CGA
END { CASE }
END
ELSE
{ A continuacin comprobamos la presencia de un EGA BIOS: }
BEGIN
REGS.AH := $12;
{ Seleccionar funcin de servicio alterna }
REGS.BX := $10;
{ BL=$10 significa devolver informacin EGA }
INTR($10,Regs);
{ Llamada a BIOS VIDEO }
IF REGS.BX <> $10 THEN { BX sin cambios significa NO EGA }
BEGIN
REGS.AH := $12; { Una vez sabemos que la f. alterna existe... }
REGS.BL := $10; { ...la llamamos de nuevo para distinguir... }
INTR($10,Regs); { ...EGA color o EGA monocroma. }
IF (REGS.BH = 0) THEN ObtenerTipoAdap := EGAColor
ELSE OBTENERTIPOADAP := EGAMono
END
ELSE { Ahora sabemos que tenemos una EGA o MDA: }
BEGIN
INTR($11,Regs); { Servicio de determ. equipo }
CODIGO := (Regs.AL AND $30) SHR 4;
CASE CODIGO OF
1 : OBTENERTIPOADAP := CGA;
2 : OBTENERTIPOADAP := CGA;
16
3 : OBTENERTIPOADAP := MDA
ELSE OBTENERTIPOADAP := CGA
END { Case }
END
END;
END;
(**********************************************************)
FUNCTION MODOVIDEOACTUAL : CHAR;
VAR
REGS : REGISTERS;
BEGIN
FILLCHAR(REGS,SIZEOF(REGS),0);
REGS.AH:=$0F;
INTR($10,REGS);
CASE REGS.AL OF
1..6 : MODOVIDEOACTUAL := C; {CGA}
7
: MODOVIDEOACTUAL := M; {monocromo}
8..10 : MODOVIDEOACTUAL := P; {PCjr}
13..16 : MODOVIDEOACTUAL := E {EGA}
END
END;
(*********************************************************)
PROCEDURE CURSORON;
VAR
REGS : REGISTERS;
I : INTEGER;
BEGIN
IF MODOVIDEOACTUAL = M THEN I:=6
ELSE I:=0;
REGS.AH:=$01;
{ahora hacemos el cursor pequeo}
REGS.CH:=$6+I;
REGS.CL:=$7+I;
INTR($10,REGS)
END;
(**********************************************************)
PROCEDURE OBTENERFECHA (VAR LARGA:STRING);
VAR
REGS:REGISTERS;
CAD1,CAD2,CAD3,CAD4:STRING[10];
17
BEGIN
FILLCHAR(REGS,SIZEOF(REGS),0);
REGS.AH:=$2A;
MSDOS(REGS);
WITH REGS DO
BEGIN
CASE AL OF
0 : CAD1:=DOMINGO;
1 : CAD1:=LUNES;
2 : CAD1:=MARTES;
3 : CAD1:=MIERCOLES;
4 : CAD1:=JUEVES;
5 : CAD1:=VIERNES;
6 : CAD1:=SABADO
END;
STR(CX, CAD2); {ao}
STR(DH, CAD3); {mes}
STR(DL, CAD4) {da}
END;
IF LENGTH(CAD3)=1 THEN CAD3:=0+CAD3;
IF LENGTH(CAD4)=1 THEN CAD4:=0+CAD4;
LARGA:=CAD1+ +CAD4+-+CAD3+-+CAD2
END;
(**********************************************************)
FUNCTION DETERMINARPUNTOS : INTEGER;
VAR
REGS : REGISTERS;
BEGIN
CASE OBTENERTIPOADAP OF
CGA
: DETERMINARPUNTOS := 8;
MDA
: DETERMINARPUNTOS := 14;
EGAMono,
{ Estos adaptadorse pueden utilizar cualquiera }
EGAColor,
{ de las diferentes alturas posibles para el tipo, }
VGAMono,
{ por tanto, es necesario preguntar al BIOS }
VGAColor,
{ para saber cul se est utilizando }
MCGAMono,
MCGAColor : BEGIN
WITH REGS DO
BEGIN
AH := $11; { Llamada informacin EGA/VGA }
AL := $30;
BL := 0;
END;
INTR($10,Regs);
DETERMINARPUNTOS := Regs.CX
END
END { CASE }
END;
(**********************************************************)
18
19
14 : CASE ADAPT OF
EGAMono,EGAColor : TAM := 4000; { 25-lneas }
ELSE
TAM := 4320; { 27-lneas }
END; { CASE }
16 : TAM := 4000
END; { CASE }
BUFFERVID := PTR(BASE,0)
END;
GETMEM(PTRACUM,BUFFERACUM.TAM+4); { Asigna un espacio en el heap }
{ Aqu almacenamos solamente el registro SalvaVid en el heap: }
MOVE(BUFFERACUM,PTRACUM^,SIZEOF(BUFFERACUM));
{ Solapamos PtrAcum, un puntero genrico, a un puntero de tipo SalvaVid: }
VECTORVID := PTRACUM;
{ Almacenamos ahora todo el buffer de vdeo en el heap. Los datos son }
{ escritos comenzando por el byte ComBuffer del registro SalvaVid, }
{ hasta completar los Tam bytes del buffer completo. }
MOVE(BUFFERVID^,VECTORVID^.COMBUFFER,BUFFERACUM.TAM)
END;
(**********************************************************)
END.
20
2.2.- VISUAL
Las unidades que utiliza en su ejecucin son las siguientes : CRT, DOS,
21
GRAPH, ERR.
SS
: REAL;
RR
: REAL;
SS1
: REAL;
SS2
: REAL;
RR1
: REAL;
RR2
: REAL;
ESCALA
: REAL;
CAN1
: INTEGER;
CAN2
: INTEGER;
CANAL
: INTEGER;
DISC
: INTEGER;
TYPE
MATRIZ = ARRAY[ 0..5000] OF INTEGER;
CONST
BASE
= $200;
DATOADL
= BASE+4;
DATOADH
= BASE+5;
CANALMUX
= BASE+10;
REGCONTROL
= BASE+11;
REGDISPARO
= BASE+12;
MAX_NUM_DATOS
= 5000;
REALXMAX
= 639;
REALYMAX
= 349;
EJECUTARGRAFICOS : BOOLEAN = TRUE;
PCLAB
: BOOLEAN = TRUE;
MAS
: CHAR = #251;
VAR
FICHA
FICHA2
TIRA
TIRO
LAFECHA
MASCARA
FILENAME
VMUESTRAS
: FILE OF MATRIZ;
: FILE OF MATRIZ;
: STRING[11];
: STRING[11];
: STRING;
: STRING;
: STRING[255];
: MATRIZ;
22
BORRAR
VMUESTRAS1
BORRAR1
VMUESTRAS2
BORRAR2
REFRESCO
RECTA2
BCUR2
CUR2
DEF
NUMDATOS
CAN1
CAN2
CANAL
D
D1
D2
E
INCREMENTO
HASTA
RECTA
BCUR
CUR
OP
OP1
OP2
OP3
OP4
OP5
OP6
OP7
ONDAS
A
B
C
X
N
NN
NNNN
NNN
J
WW
YY
XX
XXX
XXX1
: ARRAY[0..499] OF INTEGER;
: MATRIZ;
: ARRAY[0..499] OF INTEGER;
: MATRIZ;
: ARRAY[0..499] OF INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
: INTEGER;
23
XXX2
YYY
WWA
WWB
VVA
VVB
DRIVER
MODO
W
Y
Z
M
TT
VV
TT2
VV2
ERROROSC
DISC
INICIAL
AMARILLA
PO
TIEMPO
ESCALA
ESCALA1
ESCALA2
MEDIDA
SS
RR
SS1
RR1
RR2
SS2
DD
I
FRE
FIN_CONVERSION
DATO_BAJO
DATO_ALTO
LONGITUDDEDISCO
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
INTEGER;
: CHAR;
: CHAR;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: REAL;
: WORD;
: WORD;
: BYTE;
: BYTE;
: BYTE;
: LONGINT;
24
2.2.6.- LISTADO.
UNIT VISUAL6;
INTERFACE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
VISUALIZACION_DE_ONDAS;
REJILLA;
SELE1;
SELE2;
CANALES;
CANAL1;
CANAL2;
VOLTIOS;
DIBUJAR;
PROGRAMA (SS,RR:REAL;CANAL:INTEGER);
AMBOS (SS1,SS2,RR1,RR2:REAL;CAN1,CAN2:INTEGER);
HORIZONTALES(ESCALA:REAL);
VERTICALES;
CURSOR;
PRINTSCREEN;
DISCO(DISC:INTEGER);
SALVAR;
CARGAR;
MIRARPCLAB;
VISUALIZAR;
TIME;
IMPLEMENTATION
USES CRT,DOS,GRAPH,ERR;
TYPE
MATRIZ = ARRAY[0..5000] OF INTEGER;
CONST
BASE
= $200;
DATOADL
= BASE+4;
DATOADH
= BASE+5;
CANALMUX
= BASE+10;
REGCONTROL
= BASE+11;
REGDISPARO
= BASE+12;
MAX_NUM_DATOS = 5000;
REALXMAX
= 639;
REALYMAX
= 349;
EJECUTARGRAFICOS : BOOLEAN = TRUE;
25
PCLAB
MAS
: BOOLEAN = TRUE;
: CHAR = #251;
VAR
FICHA
: FILE OF MATRIZ;
FICHA2
: FILE OF MATRIZ;
TIRA
: STRING[11];
TIRO
: STRING[11];
LAFECHA
: STRING;
MASCARA
: STRING;
FILENAME
: STRING[255];
VMUESTRAS
: MATRIZ;
BORRAR
: ARRAY[0..499] OF INTEGER;
VMUESTRAS1
: MATRIZ;
BORRAR1
: ARRAY[0..499] OF INTEGER;
VMUESTRAS2
: MATRIZ;
BORRAR2
: ARRAY[0..499] OF INTEGER;
REFRESCO
: INTEGER;
RECTA2
: INTEGER;
BCUR2
: INTEGER;
CUR2
: INTEGER;
DEF
: INTEGER;
numdatos
: INTEGER;
CAN1
: INTEGER;
CAN2
: INTEGER;
CANAL
: INTEGER;
D
: INTEGER;
D1
: INTEGER;
D2
: INTEGER;
E
: INTEGER;
INCREMENTO
: INTEGER;
HASTA
: INTEGER;
RECTA
: INTEGER;
BCUR
: INTEGER;
CUR
: INTEGER;
OP
: INTEGER;
OP1
: INTEGER;
OP2
: INTEGER;
OP3
: INTEGER;
OP4
: INTEGER;
OP5
: INTEGER;
OP6
: INTEGER;
OP7
: INTEGER;
ONDAS
: INTEGER;
A
: INTEGER;
B
: INTEGER;
C
: INTEGER;
X
: INTEGER;
N
: INTEGER;
NN
: INTEGER;
NNNN
: INTEGER;
NNN
: INTEGER;
J
: INTEGER;
WW
: INTEGER;
26
YY
: INTEGER;
XX
: INTEGER;
XXX
: INTEGER;
XXX1
: INTEGER;
XXX2
: INTEGER;
YYY
: INTEGER;
WWA
: INTEGER;
WWB
: INTEGER;
VVA
: INTEGER;
VVB
: INTEGER;
DRIVER
: INTEGER;
MODO
: INTEGER;
W
: INTEGER;
Y
: INTEGER;
Z
: INTEGER;
M
: INTEGER;
TT
: INTEGER;
VV
: INTEGER;
TT2
: INTEGER;
VV2
: INTEGER;
ERROROSC
: INTEGER;
DISC
: INTEGER;
INICIAL
: INTEGER;
AMARILLA
: CHAR;
PO
: CHAR;
TIEMPO
: REAL;
ESCALA
: REAL;
ESCALA1
: REAL;
ESCALA2
: REAL;
MEDIDA
: REAL;
SS
: REAL;
RR
: REAL;
SS1
: REAL;
RR1
: REAL;
RR2
: REAL;
SS2
: REAL;
DD
: REAL;
I
: WORD;
FRE
: WORD;
FIN_CONVERSION : BYTE;
DATO_BAJO
: BYTE;
DATO_ALTO
: BYTE;
LONGITUDDEDISCO : LONGINT;
(**********************************************************)
{$I AYUDA.PAS}
(**********************************************************)
PROCEDURE REJILLA;
BEGIN
SETCOLOR(LIGHTRED);
27
FOR M:=0 TO 8 DO
BEGIN
Y:=15;
Z:=M*40;
LINE(70,Y+Z,570,Y+Z)
END;
FOR M:=0 TO 10 DO
BEGIN
W:=70;
Z:=50*M;
LINE(W+Z,15,W+Z,335)
END;
FOR M:=0 TO 50 DO
BEGIN
SETCOLOR(YELLOW);
W:=70;
Z:=10*M;
LINE(W+Z,93,W+Z,97);
LINE(W+Z,173,W+Z,177);
LINE(W+Z,253,W+Z,257)
END;
FOR M:=0 TO 32 DO
BEGIN
Z:=10*M;
LINE(318,15+Z,322,15+Z)
END;
SETCOLOR(LIGHTRED);
LINE(70,174,570,174);
LINE(70,176,570,176);
LINE(319,15,319,335);
LINE(321,15,321,335);
{dibujado de salir}
SETFILLSTYLE(1,MAGENTA);
SETCOLOR(WHITE);
BAR(580,100,630,135);
OUTTEXTXY(598,105,F6);
OUTTEXTXY(585,120,SALIR);
RECTANGLE(580,100,630,135);
SETFILLSTYLE(1,WHITE);
{dibujado de informacin}
SETCOLOR(BLACK);
STR(ESCALA1:1:2,TIRO);
SETCOLOR(LIGHTGREEN);
OUTTEXTXY(100,380,TIRO);
OUTTEXTXY(150,380,VOLTS/DIV);
STR(ESCALA2:1:2,TIRO);
SETCOLOR(WHITE);
OUTTEXTXY(100,420,TIRO);
OUTTEXTXY(150,420,VOLTS/DIV);
STR(TIEMPO:2:2,TIRO);
28
SETCOLOR(RED);
OUTTEXTXY(310,380,TIRO);
OUTTEXTXY(350,380,ms/div)
END;
(**********************************************************)
PROCEDURE SELE1;
BEGIN
SETFILLSTYLE(1,BLACK);
BAR(200,448,640,460);
OUTTEXTXY(0,450,CANAL 1);
OUTTEXTXY(100,450, 0);
OUTTEXTXY(130,450, 1);
OUTTEXTXY(160,450, 2);
OUTTEXTXY(190,450, 3);
OUTTEXTXY(220,450, 4);
OUTTEXTXY(250,450, 5);
OUTTEXTXY(280,450, 6);
OUTTEXTXY(310,450, 7);
OUTTEXTXY(340,450, 8);
OUTTEXTXY(370,450, 9);
OUTTEXTXY(400,450,10);
OUTTEXTXY(430,450,11);
OUTTEXTXY(460,450,12);
OUTTEXTXY(490,450,13);
OUTTEXTXY(520,450,14);
OUTTEXTXY(550,450,15);
SETFILLSTYLE(1,RED);
BAR(100,448,120,460);
SETCOLOR(YELLOW);
OUTTEXTXY(100,450, 0);
XXX:=0;
REPEAT
OP4:=ORD(READKEY);
IF OP4=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>15 THEN XXX:=0;
SETFILLSTYLE(1,BLACK);
BAR((30*YYY)+100,448,(30*YYY)+125,460);
SETCOLOR(YELLOW);
IF YYY=0 THEN OUTTEXTXY(100,450, 0);
IF YYY=1 THEN OUTTEXTXY(130,450, 1);
IF YYY=2 THEN OUTTEXTXY(160,450, 2);
IF YYY=3 THEN OUTTEXTXY(190,450, 3);
IF YYY=4 THEN OUTTEXTXY(220,450, 4);
IF YYY=5 THEN OUTTEXTXY(250,450, 5);
IF YYY=6 THEN OUTTEXTXY(280,450, 6);
IF YYY=7 THEN OUTTEXTXY(310,450, 7);
IF YYY=8 THEN OUTTEXTXY(340,450, 8);
IF YYY=9 THEN OUTTEXTXY(370,450, 9);
IF YYY=10 THEN OUTTEXTXY(400,450,10);
IF YYY=11 THEN OUTTEXTXY(430,450,11);
29
30
31
OP4:=ORD(READKEY);
IF OP4=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>15 THEN XXX:=0;
SETFILLSTYLE(1,BLACK);
BAR((30*YYY)+100,448,(30*YYY)+125,460);
SETCOLOR(YELLOW);
IF YYY=0 THEN OUTTEXTXY(100,450, 0);
IF YYY=1 THEN OUTTEXTXY(130,450, 1);
IF YYY=2 THEN OUTTEXTXY(160,450, 2);
IF YYY=3 THEN OUTTEXTXY(190,450, 3);
IF YYY=4 THEN OUTTEXTXY(220,450, 4);
IF YYY=5 THEN OUTTEXTXY(250,450, 5);
IF YYY=6 THEN OUTTEXTXY(280,450, 6);
IF YYY=7 THEN OUTTEXTXY(310,450, 7);
IF YYY=8 THEN OUTTEXTXY(340,450, 8);
IF YYY=9 THEN OUTTEXTXY(370,450, 9);
IF YYY=10 THEN OUTTEXTXY(400,450,10);
IF YYY=11 THEN OUTTEXTXY(430,450,11);
IF YYY=12 THEN OUTTEXTXY(460,450,12);
IF YYY=13 THEN OUTTEXTXY(490,450,13);
IF YYY=14 THEN OUTTEXTXY(520,450,14);
IF YYY=15 THEN OUTTEXTXY(550,450,15);
SETFILLSTYLE(1,RED);
BAR((30*XXX)+100,448,(30*XXX)+125,460);
SETCOLOR(YELLOW);
IF XXX=0 THEN OUTTEXTXY(100,450, 0);
IF XXX=1 THEN OUTTEXTXY(130,450, 1);
IF XXX=2 THEN OUTTEXTXY(160,450, 2);
IF XXX=3 THEN OUTTEXTXY(190,450, 3);
IF XXX=4 THEN OUTTEXTXY(220,450, 4);
IF XXX=5 THEN OUTTEXTXY(250,450, 5);
IF XXX=6 THEN OUTTEXTXY(280,450, 6);
IF XXX=7 THEN OUTTEXTXY(310,450, 7);
IF XXX=8 THEN OUTTEXTXY(340,450, 8);
IF XXX=9 THEN OUTTEXTXY(370,450, 9);
IF XXX=10 THEN OUTTEXTXY(400,450,10);
IF XXX=11 THEN OUTTEXTXY(430,450,11);
IF XXX=12 THEN OUTTEXTXY(460,450,12);
IF XXX=13 THEN OUTTEXTXY(490,450,13);
IF XXX=14 THEN OUTTEXTXY(520,450,14);
IF XXX=15 THEN OUTTEXTXY(550,450,15);
C:=XXX;
CAN2:=C
END;
IF OP4=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<0 THEN XXX:=15;
SETFILLSTYLE(1,BLACK);
BAR((30*YYY)+100,448,(30*YYY)+125,460);
SETCOLOR(YELLOW);
IF YYY=0 THEN OUTTEXTXY(100,450, 0);
IF YYY=1 THEN OUTTEXTXY(130,450, 1);
IF YYY=2 THEN OUTTEXTXY(160,450, 2);
IF YYY=3 THEN OUTTEXTXY(190,450, 3);
32
33
OUTTEXTXY(500,450, ALIR);
SETFILLSTYLE(1,RED);
BAR(300,448,375,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450,CANAL 1);
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S);
SETCOLOR(YELLOW);
XXX:=3;
OP:=3;
REPEAT
OP3:=ORD(READKEY);
IF OP3=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>5 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,CANAL );
IF YYY=4 THEN OUTTEXTXY(400,450,CANAL );
IF YYY=5 THEN OUTTEXTXY(500,450, ALIR );
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,CANAL );
IF XXX=4 THEN OUTTEXTXY(400,450,CANAL );
IF XXX=5 THEN OUTTEXTXY(500,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S);
SETCOLOR(YELLOW)
END;
IF OP3=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<3 THEN XXX:=5;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,CANAL 1);
IF YYY=4 THEN OUTTEXTXY(400,450,CANAL 2);
IF YYY=5 THEN OUTTEXTXY(500,450, SALIR );
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,CANAL );
IF XXX=4 THEN OUTTEXTXY(400,450,CANAL );
IF XXX=5 THEN OUTTEXTXY(500,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S);
SETCOLOR(YELLOW)
34
END
UNTIL (OP3=13) OR (OP3=64) OR (OP3=49) OR (OP3=50) OR (OP3=115) OR (OP3=83);
IF (OP3=13) OR (OP3=49) OR (OP3=50) THEN BEGIN
IF ((XXX=3) AND (OP3=13)) OR (OP3=49) THEN SELE1;
IF ((XXX=4) AND (OP3=13)) OR (OP3=50) THEN SELE2
END
UNTIL ((XXX=5) AND (OP3=13)) OR (OP3=64) OR (OP3=115) OR (OP3=83)
END;
(**********************************************************)
PROCEDURE CANAL1;
BEGIN
SETFILLSTYLE(1,BLACK);
BAR(200,448,640,460);
SETCOLOR(YELLOW);
OUTTEXTXY(200,450,CANAL 1);
OUTTEXTXY(300,450,2.5 V/div);
OUTTEXTXY(400,450,1 V/div);
OUTTEXTXY(500,450,0.25 V/div);
SETFILLSTYLE(1,RED);
BAR(300,448,375,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450,2.5 V/div);
XXX:=3;
REPEAT
OP2:=ORD(READKEY);
IF OP2=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>5 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,2.5 V/div);
IF YYY=4 THEN OUTTEXTXY(400,450,1 V/div);
IF YYY=5 THEN OUTTEXTXY(500,450,0.25 V/div);
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,2.5 V/div);
IF XXX=4 THEN OUTTEXTXY(400,450,1 V/div);
IF XXX=5 THEN OUTTEXTXY(500,450,0.25 V/div)
END;
IF OP2=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<3 THEN XXX:=5;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,2.5 V/div);
35
36
37
REPEAT
SETFILLSTYLE(1,BLACK);
BAR(200,448,640,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450,CANAL );
OUTTEXTXY(400,450,CANAL );
OUTTEXTXY(500,450, ALIR);
SETFILLSTYLE(1,RED);
BAR(300,448,355,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450,CANAL );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S);
XXX:=3;
OP:=0;
REPEAT
OP1:=ORD(READKEY);
IF OP1=77 THEN BEGIN
YYY:=XXX;
XXX:=XXX+1;
IF XXX>5 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+55,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,CANAL );
IF YYY=4 THEN OUTTEXTXY(400,450,CANAL );
IF YYY=5 THEN OUTTEXTXY(500,450, ALIR );
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+55,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,CANAL );
IF XXX=4 THEN OUTTEXTXY(400,450,CANAL );
IF XXX=5 THEN OUTTEXTXY(500,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450,
1);
OUTTEXTXY(400,450,
2);
OUTTEXTXY(500,450, S)
END;
IF OP1=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<3 THEN XXX:=5;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+55,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450,CANAL );
IF YYY=4 THEN OUTTEXTXY(400,450,CANAL );
IF YYY=5 THEN OUTTEXTXY(500,450, ALIR );
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+55,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450,CANAL );
38
39
PORT[REGCONTROL]:=1;
FOR I:=0 TO 500 DO
BEGIN
PORT[REGDISPARO]:=0;
REPEAT
FIN_CONVERSION:=PORT[DATOADH];
UNTIL FIN_CONVERSION<=$F;
DATO_BAJO:=PORT[DATOADL];
DATO_ALTO:=PORT[DATOADH] MOD 16;
A:=DATO_ALTO*256+DATO_BAJO;
B:=335-ROUND((A / SS)-RR);
BORRAR[I]:=VMUESTRAS[I+1];
VMUESTRAS[I]:=B
END;
DIBUJAR
{UNTIL KEYPRESSED;
PORT[REGCONTROL]:=0;}
END;
(**********************************************************)
PROCEDURE AMBOS (SS1,SS2,RR1,RR2:REAL;CAN1,CAN2:INTEGER);
VAR
F:BYTE;
BEGIN
REPEAT
REJILLA;
FOR NN:=0 TO 10 DO BEGIN
FOR NNNN:=1 TO 2 DO BEGIN
IF NNNN=1 THEN BEGIN
SS:=SS1;
RR:=RR1;
CANAL:=CAN1;
PORT[REGCONTROL]:=0;
PORT[CANALMUX]:=CANAL;
PORT[REGCONTROL]:=1;
FOR I:=0 TO 500 DO
BEGIN
PORT[REGDISPARO]:=0;
REPEAT
FIN_CONVERSION:=PORT[DATOADH];
UNTIL FIN_CONVERSION<=$F;
DATO_BAJO:=PORT[DATOADL];
DATO_ALTO:=PORT[DATOADH] MOD 16;
A:=DATO_ALTO*256+DATO_BAJO;
B:=335-ROUND((A / SS)-RR);
BORRAR1[I]:=VMUESTRAS1[I+1];
VMUESTRAS1[I]:=B
END
END;
IF NNNN=2 THEN BEGIN
40
SS:=SS2;
RR:=RR2;
CANAL:=CAN2;
PORT[REGCONTROL]:=0;
PORT[CANALMUX]:=CANAL;
PORT[REGCONTROL]:=1;
FOR I:=0 TO 500 DO
BEGIN
PORT[REGDISPARO]:=0;
REPEAT
FIN_CONVERSION:=PORT[DATOADH];
UNTIL FIN_CONVERSION<=$F;
DATO_BAJO:=PORT[DATOADL];
DATO_ALTO:=PORT[DATOADH] MOD 16;
A:=DATO_ALTO*256+DATO_BAJO;
B:=335-ROUND((A / SS)-RR);
BORRAR2[I]:=VMUESTRAS2[I+1];
VMUESTRAS2[I]:=B
END
END;
DEF:=0;
N:=0;
REPEAT
X:=70;
C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
PUTPIXEL(C+INCREMENTO,BORRAR1[DEF],BLACK);
PUTPIXEL(C+INCREMENTO,BORRAR2[DEF],BLACK);
DEF:=DEF+1;
N:=N+INCREMENTO
UNTIL N=HASTA
END
END
UNTIL KEYPRESSED;
PORT[REGCONTROL]:=0
END;
(**********************************************************)
PROCEDURE HORIZONTALES(ESCALA:REAL);
BEGIN
SETCOLOR(BLACK);
LINE(70,CUR,570,CUR);
LINE(70,CUR2,570,CUR2);
CUR:=175;
CUR2:=175;
SETCOLOR(MAGENTA);
LINE(70,CUR,570,CUR);
REPEAT
RECTA:=ORD(READKEY);
41
42
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR,570,CUR)
END;
IF RECTA=77 THEN BEGIN
BCUR:=CUR;CUR:=CUR-20;
IF CUR<15 THEN CUR :=335;
SETCOLOR(BLACK);
LINE(70,BCUR,570,BCUR);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR,570,CUR)
END
UNTIL RECTA=13;
SETCOLOR(MAGENTA);
LINE(70,CUR2,570,CUR2);
REPEAT
RECTA2:=ORD(READKEY);
IF RECTA2=72 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2-1;
IF CUR2<15 THEN CUR2 :=335;
SETCOLOR(BLACK);
LINE(70,BCUR2,570,BCUR2);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
43
LINE(70,CUR2,570,CUR2);
LINE(70,CUR,570,CUR)
END;
IF RECTA2=80 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2+1;
IF CUR2>335 THEN CUR2 :=15;
SETCOLOR(BLACK);
LINE(70,BCUR2,570,BCUR2);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR2,570,CUR2);
LINE(70,CUR,570,CUR)
END;
IF RECTA2=75 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2+20;
IF CUR2>335 THEN CUR2 :=15;
SETCOLOR(BLACK);
LINE(70,BCUR2,570,BCUR2);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(MAGENTA);
LINE(70,CUR2,570,CUR2);
LINE(70,CUR,570,CUR)
END;
IF RECTA2=77 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2-20;
IF CUR2<15 THEN CUR2 :=335;
SETCOLOR(BLACK);
LINE(70,BCUR2,570,BCUR2);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
44
45
OUTTEXTXY(235,400,TIRA);
OUTTEXTXY(300,400,VOLTS)
END
END;
(**********************************************************)
PROCEDURE VERTICALES;
BEGIN
SETCOLOR(BLACK);
LINE(CUR,15,CUR,335);
LINE(CUR2,15,CUR2,335);
CUR:=320; CUR2:=320;
SETCOLOR(BROWN);
LINE(CUR,15,CUR,335);
REPEAT
RECTA:=ORD(READKEY);
IF RECTA=75 THEN BEGIN
BCUR:=CUR;CUR:=CUR-1;
IF CUR<70 THEN CUR :=570;
SETCOLOR(BLACK);
LINE(BCUR,15,BCUR,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR,15,CUR,335)
END;
IF RECTA=77 THEN BEGIN
BCUR:=CUR;CUR:=CUR+1;
IF CUR>570 THEN CUR :=70;
SETCOLOR(BLACK);
LINE(BCUR,15,BCUR,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
46
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR,15,CUR,335)
END;
IF RECTA=72 THEN BEGIN
BCUR:=CUR;CUR:=CUR+25;
IF CUR>570 THEN CUR :=70;
SETCOLOR(BLACK);
LINE(BCUR,15,BCUR,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR,15,CUR,335)
END;
IF RECTA=80 THEN BEGIN
BCUR:=CUR;CUR:=CUR-25;
IF CUR<70 THEN CUR :=570;
SETCOLOR(BLACK);
LINE(BCUR,15,BCUR,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR,15,CUR,335)
END
UNTIL RECTA=13;
SETCOLOR(BROWN);
LINE(CUR2,15,CUR2,335);
REPEAT
RECTA2:=ORD(READKEY);
IF RECTA2=75 THEN BEGIN
47
BCUR2:=CUR2;CUR2:=CUR2-1;
IF CUR2<70 THEN CUR2 :=570;
SETCOLOR(BLACK);
LINE(BCUR2,15,BCUR2,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR2,15,CUR2,335);
LINE(CUR,15,CUR,335)
END;
IF RECTA2=77 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2+1;
IF CUR2>570 THEN CUR2 :=70;
SETCOLOR(BLACK);
LINE(BCUR2,15,BCUR2,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR2,15,CUR2,335);
LINE(CUR,15,CUR,335)
END;
IF RECTA2=72 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2+25;
IF CUR2>570 THEN CUR2 :=70;
SETCOLOR(BLACK);
LINE(BCUR2,15,BCUR2,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
48
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR2,15,CUR2,335);
LINE(CUR,15,CUR,335)
END;
IF RECTA2=80 THEN BEGIN
BCUR2:=CUR2;CUR2:=CUR2-25;
IF CUR2<70 THEN CUR2 :=570;
SETCOLOR(BLACK);
LINE(BCUR2,15,BCUR2,335);
REJILLA;
IF (DISC=1) OR (DISC=3) THEN DIBUJAR;
IF DISC=2 THEN BEGIN
DEF:=0;N:=0;
REPEAT
X:=70;C:=X+N;
D1:=VMUESTRAS1[DEF];
D2:=VMUESTRAS2[DEF];
PUTPIXEL(C,D1,LIGHTGREEN);
PUTPIXEL(C,D2,WHITE);
DEF:=DEF+1;N:=N+INCREMENTO
UNTIL N=HASTA
END;
SETCOLOR(BROWN);
LINE(CUR2,15,CUR2,335);
LINE(CUR,15,CUR,335)
END
UNTIL RECTA2=13;
IF CUR>CUR2 THEN BEGIN
MEDIDA:=1/((TIEMPO/50)*(CUR2-CUR));
SETFILLSTYLE(1,BLACK);
BAR(450,395,640,407);
STR(MEDIDA:5:4,TIRA);
SETCOLOR(BROWN);
OUTTEXTXY(450,400,TIRA);
OUTTEXTXY(515,400,KHz)
END;
IF CUR<CUR2 THEN BEGIN
MEDIDA:=1/((TIEMPO/50)*(CUR2-CUR));
SETFILLSTYLE(1,BLACK);
BAR(450,395,640,407);
STR(MEDIDA:5:4,TIRA);
SETCOLOR(BROWN);
OUTTEXTXY(450,400,TIRA);
OUTTEXTXY(515,400,KHz)
END
END;
49
(**********************************************************)
PROCEDURE CURSOR;
BEGIN
REPEAT
SETFILLSTYLE(1,BLACK);
BAR(0,440,640,460);
SETFILLSTYLE(1,BLACK);
BAR(310,370,640,390);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450, ENSION );
OUTTEXTXY(400,450, RECUENCIA);
OUTTEXTXY(500,450, ALIR );
SETFILLSTYLE(1,RED);
BAR(300,448,380,460);
SETCOLOR(YELLOW);
OUTTEXTXY(300,450, ENSION );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450, T);
OUTTEXTXY(400,450,F);
OUTTEXTXY(500,450, S);
XXX:=3;
OP:=0;
REPEAT
OP1:=ORD(READKEY);
IF OP1=77 THEN BEGIN
YYY:=XXX;
XXX:=XXX+1;
IF XXX>5 THEN XXX:=3;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450, ENSION );
IF YYY=4 THEN OUTTEXTXY(400,450, RECUENCIA);
IF YYY=5 THEN OUTTEXTXY(500,450, ALIR );
SETFILLSTYLE(1,RED);
BAR((100*XXX)-4,448,(100*XXX)+80,460);
SETCOLOR(YELLOW);
IF XXX=3 THEN OUTTEXTXY(300,450, ENSION );
IF XXX=4 THEN OUTTEXTXY(400,450, RECUENCIA);
IF XXX=5 THEN OUTTEXTXY(500,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(300,450, T);
OUTTEXTXY(400,450,F);
OUTTEXTXY(500,450, S)
END;
IF OP1=75 THEN BEGIN
YYY:=XXX;XXX:=XXX-1;
IF XXX<3 THEN XXX:=5;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-4,448,(100*YYY)+80,460);
SETCOLOR(YELLOW);
IF YYY=3 THEN OUTTEXTXY(300,450, ENSION );
IF YYY=4 THEN OUTTEXTXY(400,450, RECUENCIA);
50
51
OUTTEXTXY(60,30,TENSIONES);
SETTEXTSTYLE(0,0,1);
{ejecutamos la primera vez graphics del MS-Dos}
IF EJECUTARGRAFICOS=TRUE THEN BEGIN
SWAPVECTORS;
EXEC(GRAPHICS.COM,);
SWAPVECTORS;
EJECUTARGRAFICOS:=FALSE
END;
{llamamos a la interrupcin del bios para imprimir}
REG.AH:=9;
INTR($5,REG);
{borramos y dibujamos salir}
BAR(70,340,570,470);
BAR(50,25,65,120);
BAR(490,340,550,350);
SETFILLSTYLE(1,MAGENTA);
SETCOLOR(WHITE);
BAR(580,100,630,135);
OUTTEXTXY(598,105,F6);
OUTTEXTXY(585,120,SALIR);
RECTANGLE(580,100,630,135)
END;
(**********************************************************)
PROCEDURE DISCO(DISC:INTEGER);
LABEL SALIMOS,SALIMOS2,SALIMOS3;
BEGIN
IF (DISC=1) OR (DISC=3) THEN BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
CLRSCR;
REPEAT
CURSORON;
MAS:=#251;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
GOTOXY(3,2);
TEXTCOLOR(YELLOW);
WRITELN(NOMBRE DEL FICHERO : );
RAYA_HORIZONTAL(2,79,3,WHITE);
TEXTBACKGROUND(LIGHTBLUE);
TEXTCOLOR(YELLOW);
WINDOW(3,4,78,5);
REPEAT
52
READLN(FILENAME);
UNTIL FILENAME<>;
WINDOW(3,4,78,24);
ASSIGN(FICHA,FILENAME);
{$I-} REWRITE(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} WRITE(FICHA,VMUESTRAS) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} CLOSE(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS;
WINDOW(5,10,76,24);
53
CLRSCR
END
UNTIL ERROROSC=0;
SALIMOS :
MODO:=2;
SETGRAPHMODE(MODO)
END;
54
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS2;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} CLOSE(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(18,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS2;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
SALIMOS2 :
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
CLRSCR;
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
TEXTBACKGROUND(LIGHTBLUE);
TEXTCOLOR(YELLOW);
GOTOXY(3,2);
WRITELN(NOMBRE DEL FICHERO PARA ONDA 2 : );
RAYA_HORIZONTAL(2,79,3,WHITE);
TEXTCOLOR(YELLOW);
WINDOW(3,4,78,5);
REPEAT
READLN(FILENAME);
UNTIL FILENAME<>;
WINDOW(3,4,78,24);
ASSIGN(FICHA2,FILENAME);
{$I-} REWRITE(FICHA2) {$I+};
ERROROSC:=IORESULT;
55
56
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
58
END;
IF ((XXX=2) AND (OP6=13)) OR (OP6=100) OR (OP6=68) THEN BEGIN
DISCO(DISC);
SETFILLSTYLE(1,BLACK);
BAR(145,440,430,465);
REJILLA;
SETFILLSTYLE(1,RED);
BAR(150,448,220,460)
END
END
UNTIL (XXX=3) OR (OP6=64) OR (OP6=115) OR (OP6=83)
END;
(**********************************************************)
PROCEDURE CARGAR;
LABEL SALIMOS4,SALIMOS5;
BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
CLRSCR;
REPEAT
REPEAT
WINDOW(1,1,80,25);
CLRSCR;
CURSORON;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(3,2);
WRITELN( CUANTAS ONDAS CONTIENE SU ARCHIVO (1 2) ?);
RAYA_HORIZONTAL(2,79,3,WHITE);
DESCARGARTECLADO;
WINDOW(3,4,78,5);
TEXTCOLOR(YELLOW);
{$I-} READLN(ONDAS) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
GOTOXY(33,24);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITE(>>> pulsa CUALQUIER TECLA para repetir);
DESCARGARTECLADO;
MAS:=READKEY
END
UNTIL ERROROSC=0;
IF (ONDAS<>1) AND (ONDAS<>2) THEN BEGIN
59
SOUND(1000);
DELAY(100);
NOSOUND
END
UNTIL ONDAS IN [1,2];
WINDOW(1,1,80,25);
IF ONDAS=1 THEN BEGIN
MAS:=#251;
DISC:=1;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
CLRSCR;
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
GOTOXY(3,2);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITELN(NOMBRE DEL FICHERO : );
RAYA_HORIZONTAL(2,79,3,WHITE);
WINDOW(3,4,78,5);
TEXTCOLOR(YELLOW);
REPEAT
READLN(FILENAME);
UNTIL FILENAME<>;
WINDOW(3,4,78,24);
ASSIGN(FICHA,FILENAME);
{$I-} RESET(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS4;
END;
UNTIL ERROROSC=0;
{comprobamos la longitud del fichero por sus componentes}
LONGITUDDEDISCO:=FILESIZE(FICHA);
IF LONGITUDDEDISCO<>1 THEN BEGIN
MAS:=#27;
WINDOW(1,1,80,25);
CURSOROFF;
ERROR(32762);
DELAY(8000);
DISC:=0;
GOTO SALIMOS4
60
END;
REPEAT
{$I-} READ(FICHA,VMUESTRAS) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS4;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} CLOSE(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS4;
WINDOW(5,10,76,24);
CLRSCR
END
UNTIL ERROROSC=0;
MODO:=2;
SETGRAPHMODE(MODO);
REJILLA;
DIBUJAR;
SALIMOS4 : IF MAS=#27 THEN BEGIN
MAS:=#251;
DISC:=0;
MODO:=2;
SETGRAPHMODE(MODO);
REJILLA
END
END;
IF ONDAS=2 THEN BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(LIGHTBLUE);
61
CLRSCR;
MAS:=#251;
DISC:=2;
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,LIGHTBLUE);
GOTOXY(3,2);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
WRITELN(NOMBRE DEL FICHERO DE ONDA 1 :);
RAYA_HORIZONTAL(2,79,3,WHITE);
WINDOW(3,4,78,5);
TEXTCOLOR(YELLOW);
REPEAT
READLN(FILENAME);
UNTIL FILENAME<>;
ASSIGN(FICHA,FILENAME);
{$I-} RESET(FICHA) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS5;
WINDOW(5,10,78,24);
CLRSCR
END
UNTIL ERROROSC=0;
{comprobamos la longitud del fichero por sus componentes}
LONGITUDDEDISCO:=FILESIZE(FICHA);
IF LONGITUDDEDISCO<>1 THEN BEGIN
MAS:=#27;
WINDOW(1,1,80,25);
ERROR(32762);
DELAY(8000);
GOTO SALIMOS5
END;
REPEAT
{$I-} READ(FICHA,VMUESTRAS1) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
62
63
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS5;
WINDOW(5,10,78,24);
CLRSCR
END
UNTIL ERROROSC=0;
{comprobamos la longitud del fichero por sus componentes}
LONGITUDDEDISCO:=FILESIZE(FICHA2);
IF LONGITUDDEDISCO<>1 THEN BEGIN
CURSOROFF;
MAS:=#27;
WINDOW(1,1,80,25);
ERROR(32762);
DELAY(8000);
GOTO SALIMOS5
END;
REPEAT
{$I-} READ(FICHA2,VMUESTRAS2) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS5;
WINDOW(5,10,78,24);
CLRSCR
END
UNTIL ERROROSC=0;
REPEAT
{$I-} CLOSE(FICHA2) {$I+};
ERROROSC:=IORESULT;
IF ERROROSC<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERROROSC);
TEXTCOLOR(YELLOW);
TEXTBACKGROUND(LIGHTBLUE);
GOTOXY(18,24);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
MAS:=READKEY;
IF MAS=#27 THEN GOTO SALIMOS5;
WINDOW(5,10,78,24);
CLRSCR
END
UNTIL ERROROSC=0;
MODO:=2;
SETGRAPHMODE(MODO);
REJILLA;
64
65
PUTIMAGE(150,200,PUNTO^,COPYPUT);
TERMINA :
PCLAB:=FALSE
END
ELSE PCLAB:=TRUE
END;
(**********************************************************)
PROCEDURE VISUALIZAR;
LABEL SINPCLAB,SINPCLAB1,SINPCLAB2;
BEGIN
REPEAT
SETFILLSTYLE(1,BLACK);
BAR(0,448,640,473);
SETCOLOR(YELLOW);
OUTTEXTXY(0,450,CANAL );
OUTTEXTXY(100,450,CANAL );
OUTTEXTXY(200,450, MBOS);
OUTTEXTXY(300,450, ALVAR);
OUTTEXTXY(400,450, ARGAR);
OUTTEXTXY(500,450,C RSOR);
OUTTEXTXY(600,450,SA IR);
SETFILLSTYLE(1,RED);
BAR(0,448,55,460);
SETCOLOR(YELLOW);
OUTTEXTXY(0,450,CANAL );
SETCOLOR(3); {azul claro}
OUTTEXTXY(0,450,
1);
OUTTEXTXY(100,450,
2);
OUTTEXTXY(200,450,A);
OUTTEXTXY(300,450,S);
OUTTEXTXY(400,450,C);
OUTTEXTXY(500,450, U);
OUTTEXTXY(600,450, L);
XXX:=0;
OP:=0;
REPEAT
OP5:=ORD(READKEY);
IF OP5=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>6 THEN XXX:=0;
SETFILLSTYLE(1,BLACK);
BAR((100*YYY)-5,448,(100*YYY)+55,460);
SETCOLOR(YELLOW);
IF YYY=0 THEN OUTTEXTXY(0,450,CANAL );
IF YYY=1 THEN OUTTEXTXY(100,450,CANAL );
IF YYY=2 THEN OUTTEXTXY(200,450, MBOS);
IF YYY=3 THEN OUTTEXTXY(300,450, ALVAR);
IF YYY=4 THEN OUTTEXTXY(400,450, ARGAR);
IF YYY=5 THEN OUTTEXTXY(500,450,C RSOR);
66
67
68
SETFILLSTYLE(1,BLACK);
BAR(0,448,640,460);
SALVAR
END;
IF ((XXX=4) AND (OP5=13)) OR (OP5=99) OR (OP5=67) THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(0,448,640,460);
CARGAR
END;
IF ((XXX=5) AND (OP5=13)) OR (OP5=117) OR (OP5=85) THEN BEGIN
CURSOR
END
END
UNTIL (XXX=6) OR (OP5=64) OR (OP5=108) OR (OP5=76)
END;
(**********************************************************)
PROCEDURE TIME;
BEGIN
SETFILLSTYLE(1,RED);
BAR(145,448,240,460);
SETCOLOR(YELLOW);
OUTTEXTXY(150,450, 1.6 ms/div);
OUTTEXTXY(300,450,1. ms/div );
OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,1);
OUTTEXTXY(300,450, 6);
OUTTEXTXY(450,450, S);
SETCOLOR(YELLOW);
XXX:=1;
OP:=0;
REPEAT
OP7:=ORD(READKEY);
IF OP7=77 THEN BEGIN
YYY:=XXX;XXX:=XXX+1;
IF XXX>3 THEN XXX:=1;
SETFILLSTYLE(1,BLACK);
BAR((150*YYY)-5,448,(150*YYY)+90,460);
SETCOLOR(YELLOW);
IF YYY=1 THEN OUTTEXTXY(150,450, 1.6 ms/div);
IF YYY=2 THEN OUTTEXTXY(300,450,1. ms/div );
IF YYY=3 THEN OUTTEXTXY(450,450, ALIR );
SETCOLOR(3); {azul claro}
OUTTEXTXY(150,450,1);
OUTTEXTXY(300,450, 6);
OUTTEXTXY(450,450, S);
SETCOLOR(YELLOW);
SETFILLSTYLE(1,RED);
BAR((150*XXX)-5,448,(150*XXX)+90,460);
SETCOLOR(YELLOW);
69
70
SETFILLSTYLE(1,BLACK);
BAR(310,375,400,390);
STR(TIEMPO:2:2,TIRO);
SETCOLOR(RED);
OUTTEXTXY(310,380,TIRO);
OUTTEXTXY(350,380,ms/div)
END
END;
IF (XXX=3) OR (OP7=64) OR (OP7=115) OR (OP7=83) THEN END;
(******************PROCEDIMIENTO.PRINCIPAL*****************)
PROCEDURE VISUALIZACION_DE_ONDAS;
VAR
COTE1,COTE2:REAL;
VALOX,VALOY:INTEGER;
BEGIN
CAN1:=0; CAN2:=1;
SS1:=7.12; SS2:=7.12;
RR1:=240; RR2:=240;
WW:=40; YY:=105;
ESCALA1:=2.5;
ESCALA2:=2.5;
TIEMPO:=11.6;
DISC:=0;
HASTA:=500;
INCREMENTO:=1;
MODO:=GETGRAPHMODE;
{se ejecutar si la definicin es buena}
IF (GETMAXX>638) AND (GETMAXY>478) THEN BEGIN
MODO:=2;
SETGRAPHMODE(MODO);
CLEARVIEWPORT;
VALOX:=GETMAXX;
COTE1:=VALOX/639;
VALOY:=GETMAXY;
COTE2:=VALOY/479;
FOR INICIAL:=0 TO 5000 DO
BEGIN
VMUESTRAS[INICIAL]:=0;
VMUESTRAS1[INICIAL]:=0;
VMUESTRAS2[INICIAL]:=0
END;
REJILLA;
REPEAT
{dibujado de las teclas de funcin}
71
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
73
OUTTEXTXY(271,460,3);
OUTTEXTXY(400,460, 4);
OUTTEXTXY(530,460, 5);
SETCOLOR(YELLOW)
END
OP:=60;
OP:=61;
OP:=62;
OP:=63
74
ELSE
BEGIN
VALOX:=GETMAXX;
COTE1:=VALOX/639;
VALOY:=GETMAXY;
COTE2:=VALOY/479;
SETFILLSTYLE(1,7);
BAR
(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
SETCOLOR(BLACK);
RECTANGLE
(ROUND(160*COTE1),ROUND(210*COTE2),ROUND(480*COTE1),ROUND(270*COTE2));
OUTTEXTXY
(ROUND(190*COTE1),ROUND(220*COTE2),NO EXISTE DEFINICION SUFICIENTE);
OUTTEXTXY
(ROUND(190*COTE1),ROUND(240*COTE2), PARA EJECUTAR EL OSCILOSCOPIO);
FOR VALOX:=1 TO 5 DO
BEGIN
SOUND(1000);
DELAY(100);
SOUND(800);
DELAY(80);
NOSOUND;
END;
DELAY(4000);
SETFILLSTYLE(1,BLACK);
BAR
(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
END
END;
{del conjunto}
(*************************************************************************)
END.
75
Los ficheros Include se definen, pus, como archivos de texto en ASCII que
aadir el compilador en forma de cdigo en el lugar del programa principal donde sean
llamados mediante la directiva {$I <nombre de fichero>}. Obedecern, por tanto a las
directivas de compilacin con que se compile el programa principal.
3.1.- AYUDA
Son las definidas en cada procedimiento, y que aqu son las siguientes :
LABEL SAL;
VAR
TECLA
APUNTE
DIME
ER
: CHAR;
: POINTER;
: WORD;
: INTEGER;
3.1.4.- LISTADO.
PROCEDURE AYUDA_OSCILOSCOPIO;
LABEL SAL;
VAR
TECLA:CHAR;
APUNTE:POINTER;
DIME:WORD;
ER:INTEGER;
BEGIN
DIME:=IMAGESIZE(98,48,402,302);
{$I-} GETMEM(APUNTE,DIME) {$I+};
ER:=IORESULT;
IF ER<>0 THEN GOTO SAL;
{$I-} GETIMAGE(98,48,402,302,APUNTE^) {$I+};
ER:=IORESULT;
IF ER<>0 THEN GOTO SAL;
BEGIN
SETFILLSTYLE(1,BLUE);
SETCOLOR(YELLOW);
BAR(98,48,402,302);
OUTTEXTXY(115,55,>>> VOLT/DIV);
77
SETCOLOR(LIGHTMAGENTA);
OUTTEXTXY(370,55,F2);
SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,Funcin para determinar en eje de);
OUTTEXTXY(115,85,ordenadas la tensin por divisin,);
OUTTEXTXY(115,95,con unos rangos de tensin deter-);
OUTTEXTXY(115,105,minados de: 2.5, 1, 0.25 VOLT/DIV.);
OUTTEXTXY(115,115,Se tendr presente que la inicia-);
OUTTEXTXY(115,125,lizacin la realiza el programa);
OUTTEXTXY(115,135,en 2.5 VOLT/DIV. Por tanto en el);
OUTTEXTXY(115,145,caso de utilizar la aplicacin de);
OUTTEXTXY(115,155,cargar ondas desde fichero, el u-);
OUTTEXTXY(115,165,suario inicializar de forma ade-);
OUTTEXTXY(115,175,cuada el valor de la tensin.);
OUTTEXTXY(115,185,La pantalla de visualin de formas);
OUTTEXTXY(115,195,de onda est dividida con una al-);
OUTTEXTXY(115,205,tura de ocho cuadrculas, consi-);
OUTTEXTXY(115,215,guiendo una escala mxima de 20);
OUTTEXTXY(115,225,voltios de pico a pico, y mnima);
OUTTEXTXY(115,235,de 2 voltios de pico a pico.Cada);
OUTTEXTXY(115,245,cuadrcula a su vez contiene cin-);
OUTTEXTXY(115,255,co divisiones, aumentando la pre-);
OUTTEXTXY(115,265,cisin en diez veces cada una de);
OUTTEXTXY(115,275,stas ltimas con el cursor.);
OUTTEXTXY(185,290,>>> siguiente, pulse TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
BEGIN
BAR(98,48,402,302);
SETCOLOR(YELLOW);
OUTTEXTXY(115,55,>>> TIME);
SETCOLOR(LIGHTMAGENTA);
OUTTEXTXY(370,55,F3);
SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,Funcin para determinar en eje de);
OUTTEXTXY(115,85,abcisas los tiempos de representa-);
OUTTEXTXY(115,95,cin de las ondas. Estos tiempos);
OUTTEXTXY(115,105,son para ambos canales y pueden);
OUTTEXTXY(115,115,variarse en dos valores distintos.);
OUTTEXTXY(115,125,11.6 ms/DIV 1.6 ms/DIV. La pan-);
OUTTEXTXY(115,135,talla se halla dividida horizon--);
OUTTEXTXY(115,145,talmente en diez cuadrculas con);
OUTTEXTXY(115,155,cinco partes cada una, obtenien-);
OUTTEXTXY(115,165,do una divisin de 50 partes por);
OUTTEXTXY(115,175,cuadrcula, si realizamos segui-);
OUTTEXTXY(115,185,miento con el cursor.);
OUTTEXTXY(115,195,
);
OUTTEXTXY(115,205,
);
OUTTEXTXY(115,215,
);
OUTTEXTXY(115,225,
);
OUTTEXTXY(115,235,
);
OUTTEXTXY(115,245,
);
78
OUTTEXTXY(115,255,
);
OUTTEXTXY(115,265,
);
OUTTEXTXY(115,275,
);
OUTTEXTXY(185,290,>>> siguiente, pulse TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
BEGIN
BAR(98,48,402,302);
SETCOLOR(YELLOW);
OUTTEXTXY(115,55,>>> VISUALIZA);
SETCOLOR(LIGHTMAGENTA);
OUTTEXTXY(370,55,F4);
SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,Es la opcin ms compleja de las);
OUTTEXTXY(115,85,que se presentan. Con ella se per-);
OUTTEXTXY(115,95,mite realizar el conjunto de ope-);
OUTTEXTXY(115,105,raciones que caracterizan el osci-);
OUTTEXTXY(115,115,loscopio.);
OUTTEXTXY(115,125,Segn la eleccin visualizamos el);
OUTTEXTXY(115,135,CANAL 1, el CANAL 2 o AMBOS; man-);
OUTTEXTXY(115,145,teniendose la visualizacin en);
OUTTEXTXY(115,155,pantalla hasta la pulsacin de una);
OUTTEXTXY(115,165,tecla.);
OUTTEXTXY(115,175,Una vez determinada la(s) onda(s));
OUTTEXTXY(115,185,que permanece(n) en pantalla, po-);
OUTTEXTXY(115,195,demos salvarla(s) sobre impresora);
OUTTEXTXY(115,205,o sobre disco, siguiendo las ins-);
OUTTEXTXY(115,215,trucciones que se dan a tal efecto.);
OUTTEXTXY(115,225,Por ltimo sta opcin permite);
OUTTEXTXY(115,235,cargar formas de onda que se han);
OUTTEXTXY(115,245,salvado previamente sobre disco;);
OUTTEXTXY(115,255,adems de realizar seguimiento con);
OUTTEXTXY(115,265,el cursor en tensin y en frecuen-);
OUTTEXTXY(115,275,cia.);
OUTTEXTXY(185,290,>>> siguiente, pulse TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
BEGIN
BAR(98,48,402,302);
SETCOLOR(YELLOW);
OUTTEXTXY(115,55,>>> CANALES);
SETCOLOR(LIGHTMAGENTA);
OUTTEXTXY(370,55,F5);
SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,Opcin simple para la asignacin);
OUTTEXTXY(115,85,a los canales (1 y/o 2) del osci-);
OUTTEXTXY(115,95,loscopio de los correspondientes);
OUTTEXTXY(115,105,de la tarjeta PCLAB-812 sobre los);
OUTTEXTXY(115,115,que realizar el test.
);
OUTTEXTXY(115,125,(Con un total de 16, numerados de);
OUTTEXTXY(115,135,0 a 15).);
79
80
SETCOLOR(WHITE);
RECTANGLE(102,52,398,298);
OUTTEXTXY(115,75,El entorno de utilizacin del os-);
OUTTEXTXY(115,85,ciloscopio ha sido ideado para que);
OUTTEXTXY(115,95,su manejo sea sencillo y cmodo);
OUTTEXTXY(115,105,al usuario. Por ello las letras);
OUTTEXTXY(115,115,en azul claro para el monitor en);
OUTTEXTXY(115,125,color permiten un eficaz y rpido);
OUTTEXTXY(115,135,uso de las opciones presentadas en);
OUTTEXTXY(115,145,pantalla. Esto unido a las teclas);
OUTTEXTXY(115,155,de funcin del men principal y a);
OUTTEXTXY(115,165,la eleccin si procede con teclas);
OUTTEXTXY(115,175,de cursor (e INTRO), hace que se);
OUTTEXTXY(115,185,optimice el tiempo de eleccin y);
OUTTEXTXY(115,195,que la misma no sea una tarea pe-);
OUTTEXTXY(115,205,sada.);
OUTTEXTXY(115,215,
);
OUTTEXTXY(115,225,
);
OUTTEXTXY(115,235,
);
OUTTEXTXY(115,245,
);
OUTTEXTXY(115,255,
);
OUTTEXTXY(115,265,
FIN
);
OUTTEXTXY(115,275,
);
OUTTEXTXY(270,290,>>> pulse TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
PUTIMAGE(98,48,APUNTE^,COPYPUT);
FREEMEM(APUNTE,DIME);
SAL :
END;
81
3.2.- GEN
3.2.4.- LISTADO.
PROCEDURE FICHERO_PSPICE;
LABEL FIN;
CONST
SALIDA : CHAR = ;
VAR
AMPLI : FILE OF CHAR;
82
NOM2 : STRING[255];
(**********************************************************)
PROCEDURE PROCESO_DE_ERROR(ERROR0:INTEGER);
VAR
X,Y:BYTE;
BEGIN
X:=WHEREX;
Y:=WHEREY;
WINDOW(1,1,80,25);
ERROR(ERROR0);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(17,22);
WRITE(>> pulse CUALQUIER TECLA para reintentar, ESC. men principal);
DESCARGARTECLADO;
SALIDA:=READKEY;
WINDOW(3,14,78,22);{----------borrado parcial de pantalla}
CLRSCR;
WINDOW(3,2,78,22);{------------recuperacin de la pantalla principal}
GOTOXY(X,Y);
END;
(**********************************************************)
PROCEDURE CERRAR_FICHERO;
LABEL FIN;
VAR
ERROR3:INTEGER;
BEGIN
REPEAT
{$I-} CLOSE(AMPLI) {$I+};
ERROR3:=IORESULT;
IF ERROR3<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR3);
IF SALIDA=#27
THEN GOTO FIN
END
UNTIL ERROR3=0;
FIN:
END;
(**********************************************************)
(*--rutina de apertura del fichero--*)
PROCEDURE PRIMERA_APERTURA_DE_FICHERO;
LABEL FIN;
83
VAR
ERROR1,JC:INTEGER;
X,Y:BYTE;
NOMPSP1:STRING;
BEGIN
REPEAT
REPEAT
CLRSCR;
PULSA:= ;
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
WRITELN (>>> INTRODUZCA UNIDAD Y NOMBRE DEL FICHERO (FICHERO PSPICE .TXT):
);
RAYA_HORIZONTAL(0,77,3,15);
TEXTCOLOR(COLOR6);
GOTOXY(2,2);
CURSORON;
DESCARGARTECLADO;
REPEAT
X:=WHEREX;
Y:=WHEREY;
{$I-} READLN (NOM) {$I+};
WRITELN;
ERROR1:=IORESULT;
IF NOM= THEN GOTOXY(X,Y);
UNTIL (NOM<>) AND (ERROR1=0);
CURSOROFF;
IF ERROR1<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR1);
IF SALIDA=#27 THEN GOTO FIN
END;
IF ( POS( ,NOM) <> 0 ) OR
( POS(",NOM) <> 0 ) OR
( POS(#,NOM) <> 0 ) OR
( POS(;,NOM) <> 0 ) THEN BEGIN
ERROR1:=32765;
PROCESO_DE_ERROR(ERROR1);
IF SALIDA=#27 THEN GOTO FIN
END;
IF LENGTH(NOM)>77 THEN ERROR1:=2;
UNTIL ERROR1=0;
ASSIGN (AMPLI,NOM);
{$I-} RESET (AMPLI) {$I+};
ERROR1:=IORESULT;
IF ERROR1<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR1);
IF SALIDA=#27 THEN
BEGIN
GOTO FIN;
CERRAR_FICHERO
END
END;
84
IF ERROR1=0 THEN
BEGIN
NOMPSP1:=NOM;
WHILE POS(\,NOMPSP1)<>0 DO
DELETE(NOMPSP1,1,POS(\,NOMPSP1));
FOR JC:=1 TO LENGTH(NOMPSP1) DO
NOMPSP1[JC]:=UPCASE(NOMPSP1[JC]);
DELETE(NOMPSP1,1,POS(.,NOMPSP1));
IF NOMPSP1<>TXT THEN
BEGIN
PROCESO_DE_ERROR(32767);
ERROR1:=1;
IF SALIDA=#27 THEN GOTO FIN
END
END
UNTIL ERROR1=0;
FIN:
END;
(**********************************************************)
PROCEDURE APERTURA_DE_FICHERO_IMPLICITA;
VAR
ERROR2:INTEGER;
BEGIN
REPEAT
{$I-} RESET (AMPLI) {$I+};
ERROR2:=IORESULT;
IF ERROR2<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR2);
END
UNTIL ERROR2=0
END;
(**********************************************************)
PROCEDURE CONTAR_PASOS_DE_TIEMPO;
LABEL FIN;
VAR
PAS:CHAR;
PASOS1,ERROR4:INTEGER;
X,Y,A,B:BYTE;
BEGIN
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
BEGIN
APERTURA_DE_FICHERO_IMPLICITA;
IF SALIDA=#27 THEN GOTO FIN;
85
PASOS1:=0;
REPEAT
REPEAT
{$I-} READ(AMPLI,PAS) {$I+};
ERROR4:=IORESULT;
IF ERROR4<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR4);
IF SALIDA=#27 THEN GOTO FIN;
END
UNTIL ERROR4=0
UNTIL PAS=#;
PASOS1:=PASOS1+1;
REPEAT
REPEAT
{$I-} READ(AMPLI,PAS) {$I+};
ERROR4:=IORESULT;
IF ERROR4<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR4);
IF SALIDA=#27 THEN GOTO FIN;
END
UNTIL ERROR4=0
UNTIL PAS=#;
PASOS1:=PASOS1+1;
REPEAT
REPEAT
{$I-} READ(AMPLI,PAS) {$I+};
ERROR4:=IORESULT;
IF ERROR4<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR4);
IF SALIDA=#27 THEN GOTO FIN;
END;
UNTIL ERROR4=0
UNTIL PAS=#;
PASOS1:=PASOS1+1;
REPEAT
REPEAT
{$I-} READ(AMPLI,PAS) {$I+};
ERROR4:=IORESULT;
IF ERROR4<>0 THEN
IF ERROR4=100 THEN
BEGIN
GOTOXY(26,11);
WRITELN(
);
GOTOXY(1,10);
PROCESO_DE_ERROR(32763);
IF SALIDA=#27 THEN GOTO FIN
END
ELSE
BEGIN
PROCESO_DE_ERROR(ERROR4);
IF SALIDA=#27 THEN GOTO FIN;
END;
86
UNTIL ERROR4=0;
IF PAS=# THEN BEGIN PASOS1:=PASOS1+1; END
UNTIL PAS=;;
WRITELN(SE PRODUCEN ,PASOS1-3, PASOS DE TIEMPO);
WRITELN(contando el primer valor y el ltimo);
END;
FIN:
END;
(**********************************************************)
PROCEDURE EVALUAR_FICHERO;
LABEL PRINCIPIO,FIN;
VAR
I:CHAR;
CABECERA1:STRING[255];
CABECERA2:STRING[255];
CADENA:STRING[50];
POSICION1,POSICION2,ERROR5:INTEGER;
NUMERO,CONT,CUENTA,X,Y:BYTE;
BEGIN
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
PRINCIPIO:
REPEAT
BEGIN
CLRSCR;
CADENA:=ANALYSIS=Transient Analysis;
CLRSCR;
PRIMERA_APERTURA_DE_FICHERO;
IF SALIDA=#27 THEN GOTO FIN;
WRITELN(VERIFICANDO FORMATO DEL FICHERO:);
RAYA_HORIZONTAL(0,77,5,15);
TEXTCOLOR(COLOR6);
CABECERA1:=;
CABECERA2:=;
CUENTA:=0;
REPEAT
{$I-} READ(AMPLI,I) {$I+};
ERROR5:=IORESULT;
IF ERROR5<>0 THEN
BEGIN
CERRAR_FICHERO;
PROCESO_DE_ERROR(ERROR5);
IF SALIDA=#27 THEN GOTO FIN;
GOTO PRINCIPIO
END;
CABECERA1:=CABECERA1+I;
CUENTA:=CUENTA+1;
UNTIL (EOF(AMPLI)) OR (CUENTA=255);
CUENTA:=POS(TITLE=,CABECERA1);
87
IF CUENTA=0 THEN
BEGIN
CERRAR_FICHERO;
PROCESO_DE_ERROR(32766);
IF SALIDA=#27 THEN GOTO FIN;
GOTO PRINCIPIO
END;
DELETE(CABECERA1,0,CUENTA);
DELETE(CABECERA1,POS(SUBTITLE,CABECERA1)-2,2);
DELETE(CABECERA1,POS(TIME,CABECERA1)-2,255);
CUENTA:=POS(#,CABECERA1);
IF CUENTA<>0 THEN
BEGIN
CERRAR_FICHERO;
PROCESO_DE_ERROR(32764);
IF SALIDA=#27 THEN GOTO FIN;
GOTO PRINCIPIO
END;
CERRAR_FICHERO;
IF SALIDA=#27 THEN GOTO FIN;
APERTURA_DE_FICHERO_IMPLICITA;
IF SALIDA=#27 THEN GOTO FIN;
BEGIN
CABECERA1:=;
CABECERA2:=;
REPEAT
{$I-} READ(AMPLI,I) {$I+};
ERROR5:=IORESULT;
IF ERROR5=100 THEN
BEGIN
PROCESO_DE_ERROR(32766);
BEGIN
CERRAR_FICHERO;
GOTO FIN
END
END
ELSE
IF ERROR5<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR5);
IF SALIDA=#27 THEN
BEGIN
CERRAR_FICHERO;
GOTO FIN
END;
UNTIL ERROR5=0;
CUENTA:=0;
REPEAT
REPEAT
{$I-} READ(AMPLI,I) {$I+};
ERROR5:=IORESULT;
IF ERROR5=100 THEN
BEGIN
PROCESO_DE_ERROR(32766);
BEGIN
88
END;
CERRAR_FICHERO;
GOTO FIN
END
END
ELSE
IF ERROR5<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR5);
IF SALIDA=#27 THEN
BEGIN
CERRAR_FICHERO;
GOTO FIN
END
END
UNTIL ERROR5=0;
CABECERA1:=CABECERA1+I;
CUENTA:=CUENTA+1;
IF CUENTA=125 THEN
BEGIN
REPEAT
REPEAT
{$I-} READ(AMPLI,I) {$I+};
ERROR5:=IORESULT;
IF ERROR5=100 THEN
BEGIN
PROCESO_DE_ERROR(32766);
BEGIN
CERRAR_FICHERO;
GOTO FIN
END
END
ELSE
IF ERROR5<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR5);
IF SALIDA=#27 THEN
BEGIN
CERRAR_FICHERO;
GOTO FIN
END
END
UNTIL ERROR5=0;
CABECERA2:=CABECERA2+I;
UNTIL (I=#) OR EOF(AMPLI);
END
UNTIL ((I=#) OR EOF(AMPLI)) AND (CUENTA>=125);
END;
POSICION1:=POS(CADENA,CABECERA1);
POSICION2:=POS(CADENA,CABECERA2);
IF (POSICION1=0) AND (POSICION2=0) THEN
BEGIN
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(1,6);
WRITELN(EL FICHERO NO ES DE PSPICE (en transitorio) O CONTIENE ERRORES);
89
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
(**********************************************************)
{dispone la posible memoria ocupada por anteriores ficheros .txt}
PROCEDURE DEL_MEMDIN_OCUPADA_ANTERIORFICH;
BEGIN
ANTE:=PRIM;
REPEAT
ACTU:=ANTE^.SIG;
DISPOSE(ANTE);
ANTE:=ACTU
UNTIL ANTE^.SIG=NIL
END;
(**********************************************************)
{dispone la posible memoria ocupada por los nudos de anteriores fich}
PROCEDURE LIBERA_MEMDIN_NUDOS;
BEGIN
COMODIN:=INICIAL;
REPEAT
BEGIN
PRESENTE:=COMODIN^.SIG;
DISPOSE(COMODIN);
COMODIN:=PRESENTE
END;
UNTIL COMODIN^.SIG=NIL;
END;
(**********************************************************)
PROCEDURE TRANSFORMAR_FORMATO_PSPICE;
{transformacion del fichero xxx.dat a ns reales,}
{con transferencia a disco en formato xxx.eva}
LABEL FIN;
VAR
SENAL_ERROR:BOOLEAN;
CARGA1,NUMEROS:CHAR;
LECTURA:STRING[20];
NOMFICH:STRING[12];
X,Y:BYTE;
CONTADOR1,CONTADOR2,ERR,control,ERRORLECT:INTEGER;
T,V1:REAL;
V:ARRAY[1..25] OF REAL;
(********)
{ este procedimiento pasa los datos convertidos a la memoria dinmica}
{ creando un fichero XXX.EVA directamente accesible por el }
91
{ usuario}
PROCEDURE DATOS_A_MDINAMICA;
VAR
C:INTEGER;
BEGIN
{------paso de los datos a memoria dinmica------}
IF PRIM=NIL THEN
BEGIN
NEW(ACTU);
ACTU^.TIEMPOS:=T;
FOR C:=1 TO CUNTAPUNTOYCOMA DO
BEGIN
ACTU^.TENSIONES[C]:=V[C]
END;
PRIM:=ACTU;
ACTU^.SIG:=NIL
END
ELSE
BEGIN
ANTE:=ACTU;
NEW(ACTU);
ACTU^.TIEMPOS:=T;
FOR C:=1 TO CUNTAPUNTOYCOMA DO
BEGIN
ACTU^.TENSIONES[C]:=V[C]
END;
ANTE^.SIG:=ACTU;
ACTU^.SIG:=NIL
END
END;
(********)
{guarda los datos leidos del fichero .dat a disco}
PROCEDURE DISCO;
LABEL FIN;
VAR
C:INTEGER;
CONST
EVA=.EVA;
EXPLICACION2=
SI AL REVISARLO ENCUENTRAS ALGUN DATO EN FORMATO
8.88888888E+10,#13#10;
EXPLICACION3=
QUIERE DECIR QUE LA LECTURA DEL DATO QUE TENDRIA QUE IR
COLOCADO#13#10;
EXPLICACION4= EN ESA POSICION HA RESULTADO DEFECTUOSA#13#10;
EXPLICACION5=
------(C) 1993 JULIO & EMILIO-----#13#10;
EXPLICACION6= FORMATO:#13#10;
EXPLICACION7=
TIEMPOS#13#10;
EXPLICACION8=
TENS NDO.1 TENS NDO.2....#13#10;
VAR
92
EXPLICACION1:STRING[70];
EXPLICACION9:STRING[56];
CADENA1:STRING[19];
CADENA2:STRING[17];
FICH:TEXT;
X:PUNTEROV2;
ERROR6:INTEGER;
BEGIN
NOM2:=NOM;
WHILE POS(\,NOM)<>0 DO
DELETE(NOM,1,POS(\,NOM));
NOMPSP:=NOM;
FOR C:=1 TO LENGTH(NOMPSP) DO
NOMPSP[C]:=UPCASE(NOMPSP[C]);
EXPLICACION1:=( RESULTADO DE LA CONVERSION DEL FICHERO DE PSPICE,#13#10);
EXPLICACION9:=( PARA MAS DETALLES CONSULTAR EL FICHERO #13#10);
FOR C:=1 TO LENGTH(NOM) DO
NOM[C]:=UPCASE(NOM[C]); {------transforma las posibles minusculas}
INSERT(NOM,EXPLICACION9,43);
INSERT(NOM,EXPLICACION1,43);
DELETE(NOM,POS(.,NOM),LENGTH(NOM));
NOMFICH:=NOM+EVA;
ASSIGN(FICH,NOMFICH);
IF CREAR=A DISCO: SI THEN{--graba a disco el fichero transf., si tiene la orden}
BEGIN
REPEAT
{$I-}REWRITE(FICH){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITE(FICH,EXPLICACION5+EXPLICACION1+EXPLICACION2){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITE(FICH,EXPLICACION3+EXPLICACION4+EXPLICACION6){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITE(FICH,EXPLICACION7+EXPLICACION8+EXPLICACION9){$I+};
93
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITELN(FICH, ){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITELN(FICH, ){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
X:=PRIM;
WHILE X<>NIL DO
BEGIN
STR(X^.TIEMPOS,CADENA1);
CADENA1:=CADENA1+#13+#10;
WRITE(FICH,CADENA1);
FOR C:=1 TO CUNTAPUNTOYCOMA DO
BEGIN
STR(X^.TENSIONES[C],CADENA2);
REPEAT
{$I-}WRITE(FICH,CADENA2){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
REPEAT
{$I-}WRITE(FICH, ){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0
END;
REPEAT
{$I-}WRITE(FICH,#10#13){$I+};
94
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
X:=X^.SIG
END;
REPEAT
{$I-}WRITE(FICH,*){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END
UNTIL ERROR6=0;
{$I-}CLOSE(FICH){$I+};
ERROR6:=IORESULT;
IF ERROR6<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR6);
IF SALIDA=#27 THEN GOTO FIN
END;
FIN:
END
END;
(********)
PROCEDURE LEER;
VAR
VALOR:PUNTEROV2;
C:INTEGER;
BEGIN
VALOR:=PRIM;
WHILE VALOR<>NIL DO
BEGIN
WITH VALOR^ DO
BEGIN
WRITELN(TIEMPOS);
FOR C:=1 TO CUNTAPUNTOYCOMA DO
BEGIN
WRITE(TENSIONES[C]);
WRITE( )
END;
VALOR:=VALOR^.SIG;
WRITELN
END
END
END;
(********)
95
PROCEDURE PRESENTACION_FINAL;
VAR A:BYTE;
BEGIN
CLRSCR;
GOTOXY(14,1);
WRITELN(
EL FICHERO PSPICE HA SIDO TRANSFORMADO,);
IF CREAR=A DISCO: SI THEN
BEGIN
GOTOXY(14,3);
WRITELN(PARA VER SU FORMATO CONSULTAR EL FICHERO ,NOMFICH);
GOTOXY(14,5);
WRITELN(
CREADO EN EL DIRECTORIO ACTUAL);
END
ELSE
BEGIN
GOTOXY(1,3);
WRITELN(
SIGUIENDO LAS ORDENES DEL MENU PRINCIPAL NO HA SIDO CREADO
NINGUN);
GOTOXY(1,4);
WRITELN( FICHERO, COMO RESULTADO DE LA CONVERSION.);
GOTOXY(1,5);
WRITELN(
SI NO ES ESTE SU DESEO RETORNE AL MENU Y CAMBIE LA OPCION A
DISCO);
END;
IF CONTADOR3<>0 THEN
BEGIN
RAYA_HORIZONTAL(0,77,6,12);
WRITELN(^g);
GOTOXY(1,8);
TEXTCOLOR(LIGHTRED);
WRITELN(
A T E N C I O N !);
TEXTCOLOR(COLOR6);
GOTOXY(1,10);
WRITELN(EXISTEN ,CONTADOR3, VALORES QUE SOBREPASAN LOS +-10 VOLTIOS EN EL
FICHERO PSPICE, );
GOTOXY(1,11);
WRITELN(ES NECESARIO INVESTIGAR Y TENER LA PRECAUCION DE NO CONECTAR LA
PCLAB );
GOTOXY(1,12);
WRITELN(A NINGUN CANAL QUE SUPERE LOS 10 VOLTIOS);
RAYA_HORIZONTAL(0,77,13,12);
END;
IF NO_DE_ERRORES<>0 THEN
BEGIN
RAYA_HORIZONTAL(0,77,6,12);
IF CONTADOR3<>0 THEN Y:=15
ELSE Y:=8;
GOTOXY(1,Y);
TEXTCOLOR(LIGHTRED);
WRITELN(
A T E N C I O N !);
TEXTCOLOR(COLOR6);
96
GOTOXY(1,Y+2);
WRITELN(
SE HAN PRODUCIDO ERRORES DE LECTURA DEL FICHERO PSPICE);
IF CREAR=A DISCO: SI THEN
WRITELN(
CONSULTESE EL FICHERO ,NOMFICH);
RAYA_HORIZONTAL(0,77,13,12);
END;
IF (NO_DE_ERRORES<>0) OR (CONTADOR3<>0) THEN A:=12
ELSE A:=15;
RAYA_HORIZONTAL(0,77,6,A);
TEXTCOLOR(COLOR6);
GOTOXY(19,21);
WRITE(>>> pulse CUALQUIER TECLA para retornar al men principal);
DESCARGARTECLADO;
PULSA:=READKEY;
END;
(*******)
PROCEDURE LECNUDOS;
LABEL FIN;
VAR ABORTA:BOOLEAN;
CUNTA:BYTE;
ERROR20:INTEGER;
BEGIN
ABORTA:=FALSE;
CUNTA:=0;
CUNTAPUNTOYCOMA:=0;
REPEAT
{$I-}RESET(AMPLI){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
REPEAT
REPEAT
{$I-}READ(AMPLI,NODCHAR){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
97
END;
UNTIL ERROR20=0;
IF NODCHAR=# THEN CUNTA:=CUNTA+1;
UNTIL (NODCHAR=N) AND (CUNTA=2);
REPEAT
REPEAT
{$I-}READ(AMPLI,NODCHAR){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
IF NODCHAR=V THEN
BEGIN
REPEAT
{$I-}READ(AMPLI,NODCHAR){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END
UNTIL ERROR20=0;
IF NODCHAR=( THEN CUNTAPUNTOYCOMA:=CUNTAPUNTOYCOMA+1;
END
UNTIL NODCHAR=#;
FIN:
IF ABORTA=TRUE THEN
BEGIN
IF MEMDINAMICA=TRUE THEN DEL_MEMDIN_OCUPADA_ANTERIORFICH;
IF CARGONUDOS=TRUE THEN LIBERA_MEMDIN_NUDOS;
NOMPSP:=Ninguno;
EJECUTAR:=FALSE;
MEMDINAMICA:=FALSE
END
END;
(********)
{programa principal del procedimiento transformar formato pspice}
BEGIN
LECNUDOS;
SENAL_ERROR:=FALSE;
CLRSCR;
98
IF MEMDINAMICA=TRUE THEN
BEGIN
DEL_MEMDIN_OCUPADA_ANTERIORFICH;
LIBERA_MEMDIN_NUDOS;
MEMDINAMICA:=FALSE
END;
GOTOXY(26,12);
TEXTCOLOR(LIGHTRED+BLINK);
WRITELN(ESPERE UN MOMENTO POR FAVOR);
TEXTCOLOR(COLOR6);
CONTADOR1:=0;
APERTURA_DE_FICHERO_IMPLICITA;
IF SALIDA=#27 THEN GOTO FIN;
REPEAT
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN GOTO FIN
END;
UNTIL ERRORLECT=0;
IF CARGA1=#THEN CONTADOR1:=CONTADOR1+1
UNTIL (CARGA1=#) AND (CONTADOR1=3);
control:=0;
PRIM:=NIL;
REPEAT
REPEAT
{-------lectura de los tiempos-------}
LECTURA:= ;
IF (CARGA1=#) OR (CARGA1=C) THEN
BEGIN
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
END
END;
UNTIL ERRORLECT=0;
IF CONTROL=0 THEN READ(AMPLI,CARGA1);
REPEAT
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
99
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
END
END;
UNTIL ERRORLECT=0;
IF (CARGA1<> ) THEN LECTURA:=LECTURA+CARGA1
UNTIL (CARGA1= ) OR (CARGA1=#10);
IF CARGA1=#10 THEN
DELETE(LECTURA,LENGTH(LECTURA)-1,2);
VAL(LECTURA,T,ERR);
{----detecccion de los errores de la conversion---}
IF ERR<>0 THEN
BEGIN
T:=88888888888E00;
NO_DE_ERRORES:=NO_DE_ERRORES+1
END
END;
(*----lectura de las tensiones----*)
IF CARGA1= THEN
BEGIN
REPEAT
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
END
END;
UNTIL ERRORLECT=0;
UNTIL CARGA1=#10
END;
CONTADOR2:=0;
REPEAT
LECTURA:= ;
REPEAT
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
100
GOTO FIN
END
END;
UNTIL ERRORLECT=0;
IF CARGA1<># THEN
BEGIN
IF CARGA1<>: THEN
IF CARGA1<>#10 THEN
IF CARGA1<>#13 THEN LECTURA:=LECTURA+CARGA1
END
UNTIL (CARGA1=:) OR (CARGA1=#);
CONTADOR2:=CONTADOR2+1;
IF CARGA1<># THEN
BEGIN
VAL(LECTURA,V1,ERR);
{----detecccion de los errores de la conversion--}
IF ERR<>0 THEN
BEGIN
V1:=88888888888E00;
NO_DE_ERRORES:=NO_DE_ERRORES+1
END;
IF (V1>10) or (V1<-10) THEN {---comprobacion valores<=10}
CONTADOR3:=CONTADOR3+1;
V[CONTADOR2]:=V1;
REPEAT
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
END
END;
UNTIL ERRORLECT=0
UNTIL (CARGA1= ) OR (CARGA1=#)
END
UNTIL CARGA1=#;
DATOS_A_MDINAMICA;
MEMDINAMICA:=TRUE;
UNTIL (CARGA1=#);
CONTROL:=CONTROL+1;
REPEAT
{$I-} READ(AMPLI,CARGA1) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
101
END
END;
UNTIL ERRORLECT=0
UNTIL EOF(AMPLI) OR (CARGA1=;);
REPEAT
{$I-} CLOSE(AMPLI) {$I+};
ERRORLECT:=IORESULT;
IF ERRORLECT<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERRORLECT);
IF SALIDA=#27 THEN
BEGIN
SENAL_ERROR:=TRUE;
GOTO FIN
END
END;
UNTIL ERRORLECT=0;
GOTOXY(28,12);
TEXTCOLOR(LIGHTRED+BLINK);
WRITELN(ESPERE UN MOMENTO POR FAVOR);
TEXTCOLOR(COLOR6);
LEER;
DISCO;
IF SALIDA=#27 THEN GOTO FIN;
PRESENTACION_FINAL;
FIN:
IF SENAL_ERROR=TRUE THEN
BEGIN
NOMPSP:=Ninguno;
EJECUTAR:=FALSE;
MEMDINAMICA:=FALSE;
DEL_MEMDIN_OCUPADA_ANTERIORFICH
END
END;
(**********************************************************)
PROCEDURE CARGAR_NUDOS_MEMDIN(CARACNUDOS:CHAR);
BEGIN
IF INICIAL=NIL THEN
BEGIN
NEW(INICIAL);
INICIAL^.CARACTERN:=CARACNUDOS;
INICIAL^.SIG:=NIL ;
PRESENTE:=INICIAL;
END
ELSE
BEGIN
COMODIN:=PRESENTE;
NEW(PRESENTE);
PRESENTE^.CARACTERN:=CARACNUDOS;
PRESENTE^.SIG:=NIL;
COMODIN^.SIG:=PRESENTE;
END
102
END;
(**********************************************************)
PROCEDURE NUDOS;
LABEL FIN;
CONST
CUNTA:BYTE=0;
VAR
ERROR20:INTEGER;
ABORTA:BOOLEAN;
CARGONUDOS:BOOLEAN;
C:CHAR;
BEGIN
ABORTA:=FALSE;
CARGONUDOS:=FALSE;
ASSIGN(AMPLI,NOM2);
CUNTA:=0;
CUNTAPUNTOYCOMA:=1;
MAXCADENUDOS1:=0;
MAXCADENUDOS2:=0;
REPEAT
{$I-}RESET(AMPLI){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
REPEAT
REPEAT
{$I-}READ(AMPLI,NODCHAR){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
IF NODCHAR=# THEN CUNTA:=CUNTA+1;
UNTIL (NODCHAR=N) AND (CUNTA=2);
INICIAL:=NIL;
103
REPEAT
{$I+}READ(AMPLI,NODCHAR){I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
C:= ;
WHILE NODCHAR<># DO
BEGIN
REPEAT
{$I-}READ(AMPLI,NODCHAR){I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
IF NODCHAR=# THEN CARGAR_NUDOS_MEMDIN(#);
IF NODCHAR=V THEN
BEGIN
C:=V
END
ELSE
IF (C=V) AND (NODCHAR=() THEN
BEGIN
CARGAR_NUDOS_MEMDIN(V);
CARGONUDOS:=TRUE;
CARGAR_NUDOS_MEMDIN(NODCHAR);
REPEAT
REPEAT
{$I-}READ(AMPLI,NODCHAR){I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
CARGAR_NUDOS_MEMDIN(NODCHAR);
104
CARGONUDOS:=TRUE;
IF NODCHAR=) THEN
BEGIN
CARGAR_NUDOS_MEMDIN(;);
CUNTAPUNTOYCOMA:=CUNTAPUNTOYCOMA+1
END
UNTIL NODCHAR=)
END
ELSE IF NODCHAR<>V THEN C:= ;
END;
CUNTAPUNTOYCOMA:=CUNTAPUNTOYCOMA-1;
REPEAT
{$I-}CLOSE(AMPLI){$I+};
ERROR20:=IORESULT;
IF ERROR20<>0 THEN
BEGIN
PROCESO_DE_ERROR(ERROR20);
IF SALIDA=#27 THEN
BEGIN
ABORTA:=TRUE;
GOTO FIN
END
END;
UNTIL ERROR20=0;
FIN:
IF ABORTA=TRUE THEN
BEGIN
DEL_MEMDIN_OCUPADA_ANTERIORFICH;
IF CARGONUDOS=TRUE THEN LIBERA_MEMDIN_NUDOS;
NOMPSP:=Ninguno;
EJECUTAR:=FALSE;
MEMDINAMICA:=FALSE
END
END;
(****************************************************************)
(**********PROGRAMA PRINCIPAL DEL PROCEDIMIENTO******************)
(****************************************************************)
BEGIN
WINDOW(1,1,80,25);
CURSOROFF;
TEXTBACKGROUND(COLOR5);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
WINDOW(3,2,78,24);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(1,23);
WRITE(DTO. ACTUAL: ,DIRECTORIO);
GOTOXY(65,23);
WRITE(CREAR);
RAYA_HORIZONTAL(0,77,22,WHITE);
WINDOW(3,2,78,22);
105
EVALUAR_FICHERO;
IF SALIDA=#27 THEN GOTO FIN;
TRANSFORMAR_FORMATO_PSPICE;
IF SALIDA=#27 THEN GOTO FIN;
NUDOS;
IF SALIDA=#27 THEN GOTO FIN;
TEXTMODE(C80);
EJECUTAR:=TRUE;
FIN:
SALIDA:=#251; {valor que no se puede dar}
CLRSCR;
WINDOW(1,1,80,25)
END;
106
3.3.- EJECUTA
Como en el resto de los archivos Include, sus variables globales son las mismas
que las variables declaradas como tales en el programa principal.
3.3.4.- LISTADO.
PROCEDURE EJECUTA;
LABEL FIN;
CONST
107
IOCONS:CHAR=#251;
VAR
PULSACURSOR : CHAR;
FUERA
: CHAR;
ERROASIG
: BOOLEAN;
(**********************************************************)
PROCEDURE PROCESO_DE_ERROR(ERROR0:INTEGER);
VAR
X : BYTE;
Y : BYTE;
BEGIN
X:=WHEREX;
Y:=WHEREY;
ERROR(ERROR0);
GOTOXY(16,20);
TEXTBACKGROUND(COLOR5);
TEXTCOLOR(COLOR6);
WRITE(>>PULSA CUALQUIER TECLA PARA REINTENTAR, ESC. MENU PRINCIPAL);
DESCARGARTECLADO;
IOCONS:=READKEY;
WINDOW(3,14,78,21);{----------BORRADO PARCIAL DE PANTALLA}
CLRSCR;
WINDOW(3,2,78,24);{------------RECUPERACION DE LA PANTALLA PRINCIPAL}
GOTOXY(X,Y);
END;
(**********************************************************)
{rutina que detecta que no ha sido asignado ningun canal de la PCLAB}
PROCEDURE ERROR_DE_ASIGNACION;
VAR
C : BYTE;
D : BYTE;
BEGIN
ERROASIG:=FALSE;
D:=0;
FOR C:=0 TO 15 DO
IF ASIGNUD[C]=88 THEN D:=D+1;
IF D=16 THEN
BEGIN
ERROASIG:=TRUE;
ERROR(32758);
FOR C:=1 TO 5 DO
BEGIN
SOUND(1000);
DELAY(100);
SOUND(800);
DELAY(80);
108
NOSOUND
END;
GOTOXY(23,21);
TEXTBACKGROUND(COLOR5);
WRITE( >>> Pulse cualquier TECLA para repetir, ESCAPE men);
TEXTCOLOR(COLOR6);
FUERA:=READKEY;
END
END;
(**********************************************************)
PROCEDURE PRESENTACION_NUDOS;
LABEL FIN1;
CONST
PULSACANAL:STRING=;
VAR
VUELTA
: BYTE;
REALCE
: BYTE;
LUZ
: BYTE;
TOCA
: BYTE;
MAXLONGLINEA : BYTE;
FILAS
: INTEGER;
ERROR20
: INTEGER;
MOM
: INTEGER;
E
: INTEGER;
MO
: INTEGER;
PSCANAL1
: CHAR;
PSCANAL2
: CHAR;
MOMEN
: CHAR;
BEGIN
RAYA_HORIZONTAL(0,77,2,WHITE);
GOTOXY(1,1);
TEXTCOLOR(COLOR6);
WRITELN( ASIGNACION DE NUDOS Y CANALES PCLAB: SELECCIONE ENTRE LOS PRESENTES
NUDOS );
WINDOW(3,4,78,24);
FOR TOCA:=0 TO 15 DO
ASIGNUD[TOCA]:=88;
TOCA:=1;
LUZ:=1;
CURSOROFF;
REPEAT
COMODIN:=INICIAL; {-------inicializa el puntero}
FILAS:=CUNTAPUNTOYCOMA;
IF CUNTAPUNTOYCOMA>17 THEN
IF TOCA<17 THEN FILAS:=17
ELSE
IF TOCA<CUNTAPUNTOYCOMA
THEN
FILAS:=TOCA+1
109
ELSE
FILAS:=CUNTAPUNTOYCOMA;
CLRSCR;
FOR VUELTA:=1 TO FILAS DO
BEGIN
IF VUELTA=TOCA THEN
IF MN=FALSE THEN REALCE:=LIGHTRED
ELSE REALCE:=WHITE
ELSE
IF MN=FALSE THEN REALCE:=LIGHTBLUE
ELSE REALCE:=BLACK;
IF VUELTA<=9 THEN WRITE( ,VUELTA, - )
ELSE WRITE( ,VUELTA, - );
MAXLONGLINEA:=0;
REPEAT
BEGIN
NODCHAR:=COMODIN^.CARACTERN;
COMODIN:=COMODIN^.SIG;
IF NODCHAR<>; THEN
IF NODCHAR<># THEN
BEGIN
TEXTBACKGROUND(REALCE);
IF REALCE=BLACK THEN TEXTCOLOR(WHITE);
IF REALCE=WHITE THEN TEXTCOLOR(BLACK);
WRITE(NODCHAR);
MAXLONGLINEA:=MAXLONGLINEA+1;
IF MAXLONGLINEA>60 THEN
IF NODCHAR= THEN
BEGIN
TEXTBACKGROUND(COLOR5);
WRITELN;
FOR E:=1 TO 6 DO
BEGIN
WRITE( );
MAXLONGLINEA:=0
END;
TEXTBACKGROUND(REALCE)
END
END
END;
IF REALCE=WHITE THEN TEXTCOLOR(WHITE);
IF (NODCHAR=;) OR (NODCHAR=#) THEN
FOR MO:=0 TO 15 DO
IF ASIGNUD[MO]=VUELTA THEN
BEGIN
TEXTBACKGROUND(COLOR5);
TEXTCOLOR(COLOR11);
IF MAXLONGLINEA>=50
THEN
BEGIN
WRITELN;
FOR E:=1 TO 5 DO
BEGIN
WRITE( );
MAXLONGLINEA:=0
110
END;
WRITE( ASIGNADO A CANAL: ,MO)
END
ELSE
WRITE( ASIGNADO A CANAL: ,MO);
TEXTCOLOR(COLOR6)
END
UNTIL (NODCHAR=;) OR (NODCHAR=#);
TEXTBACKGROUND(COLOR5);
WRITELN
END;
REPEAT
PULSACURSOR:=READKEY
UNTIL (PULSACURSOR=#72) OR (PULSACURSOR=#80) OR (PULSACURSOR=#13) OR
(PULSACURSOR=#27);
IF PULSACURSOR=#27 THEN
BEGIN
TEXTCOLOR(COLOR6);
GOTOXY(1,1);
WRITELN( ASIGNACION DE NUDOS Y CANALES PCLAB: SELECCIONE ENTRE LOS
PRESENTES NUDOS );
WINDOW(3,4,78,24);
RAYA_HORIZONTAL(0,77,2,WHITE);
TEXTCOLOR(COLOR12);
GOTOXY(1,1);
WRITELN
( DESEA VISUALIZAR DE NUEVO LA CONFIGURACION? (S/N)
);
REPEAT
PULSACURSOR:=READKEY;
UNTIL PULSACURSOR IN [S,N,n,s];
IF PULSACURSOR IN [S,s] THEN
BEGIN
PULSACURSOR:=1;
TEXTCOLOR(COLOR6);
END
ELSE
BEGIN
ERROR_DE_ASIGNACION;
TEXTCOLOR(COLOR6);
IF (ERROASIG=TRUE)
THEN
BEGIN
IF FUERA=#27
THEN
BEGIN
PULSACURSOR:=#27;
IOCONS:=#27;
TEXTCOLOR(COLOR6)
END
ELSE
BEGIN
PULSACURSOR:=#251;
TEXTCOLOR(COLOR6)
END
END
111
ELSE
BEGIN
PULSACURSOR:=#27;
IOCONS:=#251;
TEXTCOLOR(COLOR6)
END
END
END;
IF PULSACURSOR=#72 THEN
IF LUZ=1 THEN
BEGIN
TOCA:=CUNTAPUNTOYCOMA;
LUZ:=TOCA
END
ELSE
BEGIN
LUZ:=LUZ-1;
TOCA:=LUZ
END;
IF PULSACURSOR=#80 THEN
IF LUZ=CUNTAPUNTOYCOMA
THEN
BEGIN
TOCA:=1;
LUZ:=1
END
ELSE
BEGIN
LUZ:=LUZ+1;
TOCA:=LUZ
END;
IF PULSACURSOR=#13 THEN
BEGIN
WINDOW(3,2,78,24);
TEXTCOLOR(COLOR12);
GOTOXY(1,1);
WRITE(INTRODUZCA EL NUMERO DE CANAL DE LA PCLAB(0 A 15):
REPEAT
CURSORON;
PULSACANAL:=;
GOTOXY(53,1);
WRITE( );
PSCANAL1:=READKEY;
IF PSCANAL1=#13 THEN PULSACANAL:=88
ELSE
BEGIN
IF PSCANAL1<>#27 {-----------------------------funcin de escape}
THEN
BEGIN
GOTOXY(53,1);
WRITE(PSCANAL1);
PSCANAL2:=READKEY;
IF PSCANAL2<>#27
THEN
112
);
BEGIN
IF (PSCANAL2=#13)
THEN
PULSACANAL:=PSCANAL1
ELSE
BEGIN
GOTOXY(54,1);
WRITE(PSCANAL2);
MOMEN:=READKEY;
PULSACANAL:=PSCANAL1+PSCANAL2;
END
END
ELSE
PULSACANAL:=#27
END
ELSE
PULSACANAL:=#27
END;
UNTIL (PULSACANAL=0) OR (PULSACANAL=1) OR (PULSACANAL=2) OR (PULSACANAL=3)
OR (PULSACANAL=4) OR (PULSACANAL=5) OR (PULSACANAL=6) OR (PULSACANAL=7)
OR (PULSACANAL=8) OR (PULSACANAL=9) OR (PULSACANAL=10) OR
(PULSACANAL=11)
OR (PULSACANAL=12) OR (PULSACANAL=13) OR (PULSACANAL=14) OR
(PULSACANAL=15)
OR (PULSACANAL=#27) OR (PULSACANAL=88);
CURSOROFF;
IF PULSACANAL<>#27
THEN
BEGIN
IF PULSACANAL=88
THEN
BEGIN
FOR E:=0 TO 15 DO
IF ASIGNUD[E]=TOCA THEN ASIGNUD[E]:=88;
END
ELSE
BEGIN
VAL(PULSACANAL,MOM,ERROR20);
FOR E:=0 TO 15 DO
IF ASIGNUD[E]=TOCA THEN ASIGNUD[E]:=88;
IF ASIGNUD[MOM]=88 THEN ASIGNUD[MOM]:=TOCA
ELSE
BEGIN
WRITELN(^g);
RAYA_HORIZONTAL(0,77,2,WHITE);
GOTOXY(1,1);
TEXTCOLOR(COLOR11);
WRITELN(CANAL YA ASIGNADO A LOS NUDOS SEALADOS COMO N
,ASIGNUD[MOM], >>>PULSE TECLA...);
PULSACURSOR:=READKEY
END
END;
RAYA_HORIZONTAL(0,77,2,WHITE);
TEXTCOLOR(COLOR6);
GOTOXY(1,1);
113
114
(**********************************************************)
{presentacin de los datos antes de la conexin de la PCLAB}
PROCEDURE PRE_ADQUISICION;
LABEL FIN2;
CONST
BASE
= $0200;
DATOADH = BASE+5;
REGCONTROL = BASE+11;
REGDISPARO = BASE+12;
VAR
ASIGNADO
: BOOLEAN;
FIN_CONVERSION : BYTE;
DATO_BAJO
: BYTE;
DATO_ALTO
: BYTE;
NODENUDO
: BYTE;
C
: BYTE;
D
: BYTE;
CT
: BYTE;
NOSLINEA
: BYTE;
RET
: BYTE;
CTDOR
: INTEGER;
BEGIN
REPEAT
REPEAT
REPEAT
WINDOW(3,2,78,24);
CLRSCR;
RAYA_HORIZONTAL(0,77,5,WHITE);
GOTOXY(1,1);
TEXTCOLOR(COLOR6);
WRITELN( POR FAVOR CONECTE LOS CANALES DE LA PCLAB EN LOS LOS NUDOS
SELECIONADOS
);
GOTOXY(1,2);
WRITELN( EN LA PLACA DEL CIRCUITO.
);
GOTOXY(1,4);
TEXTCOLOR(COLOR11+BLINK);
WRITELN(
PULSE INTRO CUANDO ESTE PREPARADO);
TEXTCOLOR(COLOR6);
GOTOXY(59,4);
WRITE(>>>ESC. MENU PPAL.);
GOTOXY(65,2);
RAYA_HORIZONTAL(57,77,3,WHITE);
GOTOXY(57,4);
WRITE(#179);
GOTOXY(57,5);
WRITE(#193);
GOTOXY(57,3);
WRITE(#218);
TEXTCOLOR(COLOR6);
WRITELN;
115
COMODIN:=INICIAL;
RET:=0;
NOSLINEA:=0;
NODENUDO:=0;
CT:=0;
ASIGNADO:=FALSE;
WINDOW(8,7,78,24);
REPEAT
TEXTCOLOR(COLOR6);
IF NOSLINEA=3 THEN
BEGIN
WRITELN;
NOSLINEA:=0
END;
IF COMODIN^.CARACTERN<>; THEN
BEGIN
WRITE(COMODIN^.CARACTERN);
CT:=CT+1;
END;
COMODIN:=COMODIN^.SIG;
IF COMODIN^.CARACTERN=; THEN
BEGIN
RET:=RET+1;
IF RET=2 THEN RET:=0;
NODENUDO:=NODENUDO+1;
NOSLINEA:=NOSLINEA+1;
RET:=RET+1;
IF RET=3 THEN RET:=0;
ASIGNADO:=FALSE;
FOR C:=0 TO 15 DO
IF NODENUDO=ASIGNUD[C]
THEN
BEGIN
ASIGNADO:=TRUE;
FOR D:=0 TO 6-CT DO
WRITE( );
WRITE(:);
TEXTCOLOR(COLOR7);
IF ASIGNUD[C]<=9
THEN
WRITE(A CANAL ,ASIGNUD[C])
ELSE
WRITE(A CANAL ,ASIGNUD[C]);
TEXTCOLOR(COLOR6);
WRITE( ; );
END;
IF ASIGNADO=FALSE THEN
BEGIN
FOR D:=0 TO 6-CT DO
WRITE( );
WRITE(:);
TEXTCOLOR(COLOR11);
WRITE(SIN ASIGNAR);
TEXTCOLOR(COLOR6);
WRITE( ; );
116
END;
CT:=0;
END
UNTIL COMODIN^.SIG=NIL;
WINDOW(3,2,78,24);
IOCONS:=READKEY;
IF IOCONS=#27 THEN GOTO FIN2;
UNTIL (IOCONS=#13);
RAYA_HORIZONTAL(0,77,7,WHITE);
GOTOXY(1,4);
WRITE(
);
GOTOXY(3,6);
TEXTCOLOR(COLOR11);
WRITE(ATENCION! : LOS NUDOS ESTAN CORRECTAMENTE CONECTADOS A LA PCLAB?
(S/N));
TEXTCOLOR(WHITE);
GOTOXY(57,3);
WRITE(
);
GOTOXY(57,4);
WRITE( );
GOTOXY(57,5);
WRITE(#196);
GOTOXY(57,3);
WRITE( );
REPEAT
IOCONS:=READKEY;
UNTIL IOCONS IN [s,S,n,N];
117
FIN2:
END;
(**********************************************************)
{rutina de adquisicin de datos con pclab}
PROCEDURE ADQUISICION_DATOS_PCLAB;
CONST
BASE
= $200;
REGCONT1 = BASE+1;
REGCONT2 = BASE+2;
CONTCONTR = BASE+3;
DATOADL = BASE+4;
DATOADH = BASE+5;
DATODA1L = BASE+4;
DATODA1H = BASE+5;
DATODA2L = BASE+6;
DATODA2H = BASE+7;
CLEARINT = BASE+8;
CANALMUX = BASE+10;
REGCONTROL= BASE+11;
REGDISPARO= BASE+12;
TENS
= 10;
MAX
= 2;{500;}
VAR
FIN_CONVERSION : BYTE;
DATO_BAJO
: BYTE;
DATO_ALTO
: BYTE;
A
: BYTE;
I
: INTEGER;
J
: INTEGER;
MUEST
: INTEGER;
(********)
{introduccin de los datos del muestreo en men dinmica}
PROCEDURE OTRAMUESTRA(ND:INTEGER;Vmuest:REAL);
BEGIN
Vmuest:=TENS+(2*TENS/4095)*(Vmuest-4095);
IF PRIMERO=NIL THEN
BEGIN
NEW(ACTUAL);
ACTUAL^.Vmuestras:=Vmuest;
ACTUAL^.NUMNUDO:=ND;
PRIMERO:=ACTUAL;
ACTUAL^.SIG:=NIL;
END
ELSE
BEGIN
ANTERIOR:=ACTUAL;
NEW(ACTUAL);
118
ACTUAL^.Vmuestras:=Vmuest;
ACTUAL^.NUMNUDO:=ND;
ANTERIOR^.SIG:=ACTUAL;
ACTUAL^.SIG:=NIL;
END
END;
(********)
{programacion de la frecuencia de disparo de la PCLAB (10000Hz)}
PROCEDURE FRECUENCIA;
VAR D1
D2
AUX
: LONGINT;
: LONGINT;
: LONGINT;
BEGIN
AUX:=2000000 DIV 10000;
D1:=ROUND(SQRT(AUX));
D2:=D1;
PORT[CONTCONTR]:=$74;
PORT[REGCONT1]:=D1 MOD 256;
PORT[REGCONT1]:=D1 DIV 256;
PORT[CONTCONTR]:=$B4;
PORT[REGCONT2]:=D2 MOD 256;
PORT[REGCONT2]:=D2 DIV 256;
END;
(********)
{programa principal del procedimiento adquisicin_datos_pclab}
BEGIN
DIBUJARCUADRO(24,10,54,13,COLOR4,WHITE);
GOTOXY(25,11);
TEXTCOLOR(BLINK+COLOR6);
WRITELN( CAPTURANDO LOS DATOS
);
GOTOXY(25,12);
WRITE ( DEL CIRCUITO CON LA PCLAB );
PRIMERO:=NIL; (*-------inicializa el puntero----*)
PORT[REGCONTROL]:=0;
PORT[REGCONTROL]:=6;
FRECUENCIA;
FOR A:=0 TO 15 DO
BEGIN
IF ASIGNUD[A]<>88 THEN
FOR I:=0 TO MAX-1 DO
BEGIN
PORT[CANALMUX]:=A;
REPEAT FIN_CONVERSION:=PORT[DATOADH];
UNTIL FIN_CONVERSION<=$F;
DATO_BAJO:=PORT[DATOADL];
DATO_ALTO:=PORT[DATOADH] MOD 16;
MUEST:=DATO_ALTO*256+DATO_BAJO;
OTRAMUESTRA(ASIGNUD[A],MUEST);
REPEAT FIN_CONVERSION:=PORT[DATOADH];
UNTIL FIN_CONVERSION>$F;
END
119
END;
DATOS_PCLAB:=TRUE;
PORT[REGCONTROL]:=0;
{LEERMUESTRAS;}(**********A PROBAR EN EL LABORATORIO**********)
PORT[REGCONTROL]:=0;
END;
(**********************************************************)
{realiza la comparacin entre el fichero resultado de la simulacin}
{en PSPICE y la adquisicin de datos con la PCLAB-812, comprobando }
{si se ajustan los resultados a la tolerancia}
PROCEDURE COMPARACION_Y_PRESENTACION_DE_RESULTADOS_FINALES;
VAR
PCI
: BYTE;
VALE
: BOOLEAN;
CAD1
: STRING[15];
CAD2
: STRING[15];
TIEMPOPSP1 : REAL;
TIEMPOPSP2 : REAL;
ERO
: INTEGER;
VPSef
: REAL;
VPSmed
: REAL;
VPCef
: REAL;
VPCmed
: REAL;
(********)
{presentacion de los resultados finales de la comparacion}
PROCEDURE PRESENTACION_RESULTADO_COMPARACION;
VAR
COUNT
: BYTE;
RANGOef
: REAL;
RANGOmed : REAL;
CORRECTOef : BOOLEAN;
CORRECTOmed : BOOLEAN;
BEGIN
{rutina que controla si el valor leido por la PCLAB est situado}
{dentro del rango de la tolerancia}
RANGOef:=VPSef*(TOLERANCIA/100);
RANGOmed:=VPSmed*(TOLERANCIA/100);
IF (VPCef<=VPSef+RANGOef) and (VPCef>=VPSef+VPSef)
THEN CORRECTOef:=TRUE
ELSE CORRECTOef:=FALSE;
IF (VPCmed<=VPSmed+RANGOmed) and (VPCmed>=VPSmed+VPSmed)
THEN CORRECTOmed:=TRUE
ELSE CORRECTOmed:=FALSE;
COUNT:=1;
COMODIN:=INICIAL;
WRITE( );
120
REPEAT
IF ASIGNUD[PCI]=COUNT THEN WRITE(COMODIN^.CARACTERN);
IF COMODIN^.CARACTERN=;
THEN
BEGIN
IF (COMODIN^.CARACTERN=;) AND (ASIGNUD[PCI]=COUNT)
THEN
BEGIN
IF PCI<9
THEN
BEGIN
WRITE( ASIGNADO A CANAL ,PCI, ;);
IF (CORRECTOmed=TRUE) AND (CORRECTOef=TRUE)
THEN
BEGIN
TEXTCOLOR(COLOR7);
WRITE( EVALUACION CORRECTA);
TEXTCOLOR(COLOR6);
WRITELN;
END
ELSE
BEGIN
TEXTCOLOR(COLOR11);
WRITE( PRESENTA ERRORES);
TEXTCOLOR(COLOR6);
WRITELN;
END
END
ELSE
BEGIN
WRITE( : ASIGNADO A CANAL ,PCI);
IF (CORRECTOmed=TRUE) AND (CORRECTOef=TRUE)
THEN
BEGIN
TEXTCOLOR(COLOR7);
WRITE( EVALUACION CORRECTA);
TEXTCOLOR(COLOR6);
WRITELN
END
ELSE
BEGIN
TEXTCOLOR(COLOR11);
WRITE( PRESENTA ERRORES);
TEXTCOLOR(COLOR6);
WRITELN
END
END
END;
COUNT:=COUNT+1
END;
COMODIN:=COMODIN^.SIG;
UNTIL COMODIN=NIL
END;
(********)
121
122
123
BEGIN
WINDOW(1,1,80,25);
TEXTBACKGROUND(COLOR5);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
TEXTCOLOR(COLOR6);
WINDOW(3,2,78,24);
PRESENTACION_NUDOS;
IF IOCONS=#27 THEN GOTO FIN;
PRE_ADQUISICION;
{IF IOCONS=#27 THEN GOTO FIN;}
ADQUISICION_DATOS_PCLAB;
COMPARACION_Y_PRESENTACION_DE_RESULTADOS_FINALES;
FIN:
END;
124
Los archivos ejecutables son aquellos que con extensin .EXE son llamados
desde el entorno del sistema operativo, y pueden, por tanto, ejecutarse de forma independiente
al programa principal.
4.1.- ESPACIO1
Las unidades que se utilizan para su ejecucin por el compilador son las
siguientes : CRT, DOS.
CONST
ORDENPORNOMBRE
ORDENPORFECHA
TYPE
CADENA80
CADENA15
PTRDTA
REGHORA
COMPHORA
= TRUE;
= FALSE;
= STRING[80];
= STRING[15];
= ^SEARCHREC;
= RECORD
: WORD;
{ formato comprimido Dos }
126
CADHORA : CADENA80;
PM
: BOOLEAN;
HORAS,MINUTOS,SEGUNDOS,CENTESIMAS : INTEGER
END;
REGFECHA = RECORD
FECHACOMP
: WORD;
CADENALARGAFECHA : CADENA80;
CADENAFECHA
: CADENA80;
AGNO,MES,DIA
: INTEGER;
DIASEMANA
: INTEGER
END;
PTRDIR = ^REGDIR;
REGDIR = RECORD
NOMBREFICHERO : CADENA15;
ATRIB
: BYTE;
TAMFICHERO
: LONGINT;
HORA
: REGHORA;
FECHA
: REGFECHA;
ANTERIOR
: PTRDIR;
SIGUIENTE
: PTRDIR;
END;
VAR
ESPACTOMADO
VAARRIBA
VAABAJO
ACTUAL
ESPECFICHERO
CADTRABAJO
ORDENADO
ESPECORDEN
ASCEN
I
PARAMS
COLOR1
COLOR2
COLOR3
: REAL;
: PTRDIR;
: PTRDIR;
: PTRDIR;
: CADENA80;
: CADENA80;
: BOOLEAN;
: BOOLEAN;
: BOOLEAN;
: INTEGER;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
127
Son las utilizadas de forma individual en cada procedimiento, y/o funcin. (Ver
listado general del archivo).
4.1.6.- LISTADO.
PROGRAM ESPACIO;
{A+,S+,B-,E+,N+} {$M 16384, 000000, 50000}
USES CRT,DOS;
CONST
ORDENPORNOMBRE = TRUE;
ORDENPORFECHA = FALSE;
TYPE
CADENA80 = STRING[80];
CADENA15 = STRING[15];
PTRDTA = ^SEARCHREC;
REGHORA = RECORD
COMPHORA : WORD;
{ formato comprimido Dos }
CADHORA : CADENA80;
PM
: BOOLEAN;
HORAS,MINUTOS,SEGUNDOS,CENTESIMAS : INTEGER
END;
REGFECHA = RECORD
FECHACOMP
: WORD;
CADENALARGAFECHA : CADENA80;
CADENAFECHA
: CADENA80;
AGNO,MES,DIA
: INTEGER;
DIASEMANA
: INTEGER
END;
PTRDIR = ^REGDIR;
REGDIR = RECORD
NOMBREFICHERO : CADENA15;
ATRIB
: BYTE;
TAMFICHERO
: LONGINT;
HORA
: REGHORA;
FECHA
: REGFECHA;
ANTERIOR
: PTRDIR;
SIGUIENTE
: PTRDIR;
128
END;
VAR
PARAMS
: BYTE;
ESPACTOMADO : REAL;
VAARRIBA
: PTRDIR;
VAABAJO
: PTRDIR;
ACTUAL
: PTRDIR;
ESPECFICHERO : CADENA80;
CADTRABAJO : CADENA80;
ORDENADO
: BOOLEAN;
ESPECORDEN : BOOLEAN;
ASCEN
: BOOLEAN;
I
: INTEGER;
COLOR1
: BYTE;
COLOR2
: BYTE;
COLOR3
: BYTE;
(**********************************************************)
FUNCTION MODOVIDEOACTUAL : CHAR;
VAR
REGS : REGISTERS;
BEGIN
FILLCHAR(REGS,SIZEOF(REGS),0);
REGS.AH:=$0F;
INTR($10,REGS);
CASE REGS.AL OF
1..6 : MODOVIDEOACTUAL := C; {CGA}
7
: MODOVIDEOACTUAL := M; {monocromo}
8..10 : MODOVIDEOACTUAL := P; {PCjr}
13..16 : MODOVIDEOACTUAL := E {EGA}
END
END;
(**********************************************************)
FUNCTION CALCDIASEMANA(AGNO,MES,DIA : INTEGER) : INTEGER;
VAR
SALVARFECHA,FECHATRABAJO : REGISTERS;
NUMERODIA
: INTEGER;
BISIESTO
: BOOLEAN;
CONST
DAYARRAY : ARRAY[1..12] OF INTEGER =
(31,28,31,30,31,30,31,31,30,31,30,31);
BEGIN
129
BISIESTO := FALSE;
IF (MES = 2) AND ((AGNO MOD 4)=0) AND (DIA = 29) THEN
BISIESTO := TRUE;
IF (NOT BISIESTO) AND (DIA > DAYARRAY[MES]) THEN
CALCDIASEMANA := -1
ELSE
BEGIN
FECHATRABAJO.AH := $2B;
SALVARFECHA.AH := $2A; { salva la fecha en registros }
MSDOS(SALVARFECHA);
WITH FECHATRABAJO DO
BEGIN
CX := AGNO;
{ hace el reloj igual a la fecha introducida }
DH := MES;
DL := DIA;
MSDOS(FECHATRABAJO);
AH := $2A;
{ leer de nuevo la fecha para }
MSDOS(FECHATRABAJO); { obtene el indicador de la sem. }
NUMERODIA := AL;
{ en AL. }
IF BISIESTO THEN
{ corregir para aos bisiestos }
IF NUMERODIA = 0 THEN NUMERODIA := 6
ELSE NUMERODIA := PRED(NUMERODIA);
CALCDIASEMANA := NUMERODIA
END;
SALVARFECHA.AH := $2B; { reponer la fecha actual }
MSDOS(SALVARFECHA);
END
END;
(**********************************************************)
PROCEDURE CALCFECHA(VAR FECHAACTUAL : REGFECHA);
TYPE
CADENA9 = STRING[9];
CONST
MESES : ARRAY [1..12] OF CADENA9 =
(ENERO,FEBRERO,MARZO,ABRIL,MAYO,JUNIO,JULIO,
AGOSTO,SEPTIEMBRE,OCTUBRE,NOVIEMBRE,DICIEMBRE);
DIAS : ARRAY [0..6] OF CADENA9 =
(DOMINGO,LUNES,MARTES,MIRCOLES,
JUEVES,VIERNES,SBADO);
VAR
TEMP1 : CADENA80;
BEGIN
WITH FECHAACTUAL DO
BEGIN
DIASEMANA := CALCDIASEMANA(AGNO,MES,DIA);
STR(MES,CADENAFECHA);
STR(DIA,TEMP1);
CADENAFECHA := CADENAFECHA + / + TEMP1;
CADENALARGAFECHA := DIAS[DIASEMANA] + , ;
130
CADENALARGAFECHA := CADENALARGAFECHA +
MESES[MES] + + TEMP1 + , ;
STR(AGNO,TEMP1);
CADENALARGAFECHA := CADENALARGAFECHA + TEMP1;
CADENAFECHA := CADENAFECHA + / + COPY(TEMP1,3,2);
FECHACOMP := (AGNO - 1980) * 512 + (MES * 32) + DIA
END
END;
(**********************************************************)
PROCEDURE CALCHORA(VAR HORAACTUAL : REGHORA);
TYPE
CADENA5 = STRING[5];
VAR
TEMP1,TEMP2 : CADENA5;
AMPM
: CHAR;
I
: INTEGER;
BEGIN
WITH HORAACTUAL DO
BEGIN
I := HORAS;
IF HORAS = 0 THEN I := 12; { "0" horas = 12AM }
IF HORAS > 12 THEN I := HORAS - 12;
IF HORAS > 11 THEN AMPM := P ELSE AMPM := A;
STR(I:2,TEMP1); STR(MINUTOS,TEMP2);
IF LENGTH(TEMP2) < 2 THEN TEMP2 := 0 + TEMP2;
CADHORA := TEMP1 + : + TEMP2 + AMPM;
COMPHORA :=
(HORAS SHL 11) OR (MINUTOS SHL 5) OR (SEGUNDOS SHR 1)
END
END;
(**********************************************************)
PROCEDURE DTAADIR(VAR REGSALIDA : REGDIR);
VAR
DATODT : DATETIME; { importado de la unidad dos }
I
: INTEGER;
REGINT : SEARCHREC; { idem }
REGCOMP : REGISTERS; { idem }
DTAACTUAL : PTRDTA;
BEGIN
REGCOMP.AX := $2F00; { localizar posicin actual del DTA }
MSDOS(REGCOMP);
WITH REGCOMP DO DTAACTUAL := PTR(ES,BX);
REGINT := DTAACTUAL^;
UNPACKTIME(REGINT.TIME,DATODT);
WITH REGSALIDA DO { extraer y reformatear los datos }
BEGIN
131
132
IF (ENTRADIZ^.FECHA.FECHACOMP = ENTRADDER^.FECHA.FECHACOMP)
AND
(ENTRADIZ^.HORA.COMPHORA > ENTRADDER^.HORA.COMPHORA)
THEN DESPUESDE := TRUE
ELSE DESPUESDE := FALSE
END;
(**********************************************************)
PROCEDURE ANADIRPORFINAL(VAR ALMAC,DESCEN : PTRDIR);
BEGIN
DESCEN^.SIGUIENTE := ALMAC; { aadir registro al final de la lista }
DESCEN^.SIGUIENTE^.ANTERIOR := DESCEN; { inic. puntero inverso }
DESCEN := DESCEN^.SIGUIENTE; { hacer REG. SIGUIENTE el ACTUAL }
END;
(*********************)
BEGIN { TOMARDIR }
FINDFIRST(ESPECFICHERO,$16,NUESTRODTA); { llamada a dos, FIND FIRST dos }
ERROR := DOSERROR;
IF ERROR = 2 THEN
{ no hay ficheros que coincidan con el espec. }
BEGIN
ASCEN := NIL;
{ los dos punteros de la lista a NIL }
DESCEN := NIL
END
ELSE
{ al menos se encontr un fichero }
BEGIN
NEW(RAIZ);
{ crear un registro para el primero encontrado }
DTAADIR(RAIZ^); { convertirlo a formato DIR }
ACTUAL := RAIZ; { el registro ACTUAL es ahora el RAIZ }
DESCEN := RAIZ; { y tambin el ltimo registro de la lista }
IF ERROR <> 18 THEN
REPEAT
FINDNEXT(NUESTRODTA); { hacer llamada a dos: FIND NEXT }
ERROR := DOSERROR;
IF ERROR <> 18 THEN { existen ms entradas }
BEGIN
NEW(ALMAC);
{ crear registro con un puntero temporal }
DTAADIR(ALMAC^); { convertir a formato DIR }
{ las listas ordenada y no ordenadas se forman de forma diferente}
{ si estamos formando una lista ordenada deberemos buscar en ella}
{ cada entrada con el fin de localizar el lugar donde ubicarla. Para}
{ las listas no ordenadas solamente tenemos que aadir el nuevo ele-}
{ mento al final de la lista y hacer que el siguiente sea el actual}
IF ORDENADO THEN
BEGIN
ACTUAL := RAIZ; { recorrer lista para encontrar punto de inters}
REPEAT
IF ORDENPORNOMBRE THEN
IF ACTUAL^.NOMBREFICHERO > ALMAC^.NOMBREFICHERO THEN
POSICIONENC := TRUE ELSE POSICIONENC := FALSE
ELSE
{ para ordenar lista por hora/fecha }
IF DESPUESDE(ACTUAL,ALMAC) THEN
133
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
BEGIN
INSERT(NOMBREFICHERO,TEMP,1); { no hay extens. en nombres de subdir. }
INSERT(<DIR>,TEMP,14) { decirle al mundo que es un subdir. }
END
ELSE
{ esta sentencia compuesta separa el nombre del fichero y su }
{ extensin, y convierte el tamao en una cadena. NO se }
{ inserta una cifra de tamao en TEMP para los subdirectorios. }
BEGIN
POSPUNTO := POS(.,NOMBREFICHERO);
IF POSPUNTO > 0 THEN { el nombre del fichero tiene extensin }
CADTRABAJO := COPY(NOMBREFICHERO,1,POSPUNTO-1) +
COPY(BLANCOS,1,9-POSPUNTO) + . +
COPY(NOMBREFICHERO,POSPUNTO+1,LENGTH(NOMBREFICHERO)-POSPUNTO)
ELSE
CADTRABAJO := NOMBREFICHERO + COPY(BLANCOS,1,8-LENGTH(NOMBREFICHERO));
INSERT(CADTRABAJO,TEMP,1);
STR(TAMFICHERO:7,CADTRABAJO);
INSERT(CADTRABAJO,TEMP,15)
END;
WITH FECHA DO
BEGIN
{ esta sentencia une las tres cifras independientes para }
{ el mes, el da, y el ao, en una cadena.}
IF MES < 10 THEN INSERT(0,CADENAFECHA,1);
IF DIA < 10 THEN INSERT(0,CADENAFECHA,4);
INSERT(CADENAFECHA,TEMP,24);
END;
INSERT(HORA.CADHORA,TEMP,34); { finalmente, insertar la hora }
END;
DELETE(TEMP,42,LENGTH(TEMP)-42);
DIRACADENA := TEMP
END;
(**********************************************************)
PROCEDURE ELIMINARDIRECTORIO(PUNTERORAIZ : PTRDIR);
VAR
ALMAC : PTRDIR;
BEGIN
IF PUNTERORAIZ <> NIL THEN
{ no se puede eliminar una lista vaca }
REPEAT
ALMAC := PUNTERORAIZ^.SIGUIENTE; { tomar el siguiente registro. }
DISPOSE(PUNTERORAIZ);
{ eliminar el primero... }
PUNTERORAIZ := ALMAC
{ ...y hacer primero al siguiente... }
UNTIL PUNTERORAIZ = NIL
{ ...hasta terminar con la lista. }
END;
(**********************************************************)
BEGIN
WINDOW(3,5,78,24);
CLRSCR;
135
136
CASE UPCASE(CADTRABAJO[1]) OF
F : ESPECORDEN := ORDENPORFECHA;
N : ESPECORDEN := ORDENPORNOMBRE;
ELSE ORDENADO := FALSE
END
END;
3 : BEGIN
ORDENADO := TRUE;
ESPECFICHERO := PARAMSTR(1);
CADTRABAJO := PARAMSTR(2);
CASE UPCASE(CADTRABAJO[1]) OF
F : ESPECORDEN := ORDENPORFECHA;
N : ESPECORDEN := ORDENPORNOMBRE;
ELSE ORDENADO := FALSE
END;
IF ORDENADO THEN
BEGIN
CADTRABAJO := PARAMSTR(3);
CASE UPCASE(CADTRABAJO[1]) OF
A : ASCEN := TRUE;
D : ASCEN := FALSE;
ELSE ASCEN := TRUE
END
END
END;
END; { CASE }
{ ahora construimos realmente la lista de entradas de directorio, }
{ basada en los parmetros pasados en la lnea de comandos: }
TOMARDIR(ESPECFICHERO,ORDENADO,ESPECORDEN,VAARRIBA,VAABAJO);
IF ASCEN THEN ACTUAL := VAARRIBA
ELSE ACTUAL := VAABAJO;
IF ACTUAL = NIL THEN WRITELN(NO SE ENCONTRARON FICHEROS.)
ELSE
BEGIN
ESPACTOMADO := 0.0;
IF ASCEN THEN
WHILE ACTUAL <> NIL DO
BEGIN
WRITELN(DIRACADENA(ACTUAL^));
ESPACTOMADO := ESPACTOMADO + ACTUAL^.TAMFICHERO;
ACTUAL := ACTUAL^.SIGUIENTE
END
ELSE
WHILE ACTUAL <> NIL DO
BEGIN
WRITELN(DIRACADENA(ACTUAL^));
ESPACTOMADO := ESPACTOMADO + ACTUAL^.TAMFICHERO;
ACTUAL := ACTUAL^.ANTERIOR
END;
WRITELN
(El espacio total ocupado por estos ficheros es de ,ESPACTOMADO:9:0, bytes)
END;
ELIMINARDIRECTORIO(ACTUAL);
137
TEXTCOLOR(WHITE);
TEXTBACKGROUND(BLACK);
LOWVIDEO
END.
138
4.2.- LOCALIZA
139
{A+,S+,B-,E+,N+}
{$M 16384, 000000, 50000}
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
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.6.- LISTADO.
PROGRAM LOCALIZA;
{A+,S+,B-,E+,N+} {$M 16384, 000000, 50000}
USES CRT,DOS;
TYPE
CADENA80 = STRING[80];
CADENA15 = STRING[15];
141
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
END
END;
(**********************************************************)
FUNCTION CALCDIASEMANA(AGNO,MES,DIA : INTEGER) : INTEGER;
VAR
SALVARFECHA,FECHATRABAJO : REGISTERS;
NUMERODIA
: INTEGER;
BISIESTO
: BOOLEAN;
CONST
DAYARRAY : ARRAY[1..12] OF INTEGER =
(31,28,31,30,31,30,31,31,30,31,30,31);
BEGIN
BISIESTO := FALSE;
IF (MES = 2) AND ((AGNO MOD 4)=0) AND (DIA = 29) THEN
BISIESTO := TRUE;
IF (NOT BISIESTO) AND (DIA > DAYARRAY[MES]) THEN
CALCDIASEMANA := -1
ELSE
BEGIN
FECHATRABAJO.AH := $2B;
SALVARFECHA.AH := $2A; { Salva la fecha en registros }
MSDOS(SALVARFECHA);
WITH FECHATRABAJO DO
BEGIN
CX := AGNO;
{ Hace el reloj igual a la fecha introducida }
DH := MES;
DL := DIA;
MSDOS(FECHATRABAJO);
AH := $2A;
{ Leer de nuevo la fecha para }
MSDOS(FECHATRABAJO); { obtener el indicador de da de la sem. }
NUMERODIA := AL;
{ en AL. }
IF BISIESTO THEN
{ Corregir para aos bisiesto }
IF NUMERODIA = 0 THEN NUMERODIA := 6
ELSE NUMERODIA := PRED(NUMERODIA);
CALCDIASEMANA := NUMERODIA
END;
SALVARFECHA.AH := $2B; { Reponer la fecha actual }
MSDOS(SALVARFECHA);
END
END;
(**********************************************************)
PROCEDURE CALCFECHA(VAR FECHAACTUAL : REGFECHA);
TYPE
CADENA9 = STRING[9];
143
CONST
MESES : ARRAY [1..12] OF CADENA9 =
(Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,
Agosto,Septiembre,Octubre,Noviembre,Diciembre);
DIAS : ARRAY [0..6] OF CADENA9 =
(Domingo,Lunes,Martes,Mircoles,
Jueves,Viernes,Sbado);
VAR
TEMP1 : CADENA80;
BEGIN
WITH FECHAACTUAL DO
BEGIN
DIASEMANA := CALCDIASEMANA(AGNO,MES,DIA);
STR(MES,CADENAFECHA);
STR(DIA,TEMP1);
CADENAFECHA := CADENAFECHA + / + TEMP1;
CADENALARGAFECHA := DIAS[DIASEMANA] + , ;
CADENALARGAFECHA := CADENALARGAFECHA +
MESES[MES] + + TEMP1 + , ;
STR(AGNO,TEMP1);
CADENALARGAFECHA := CADENALARGAFECHA + TEMP1;
CADENAFECHA := CADENAFECHA + / + COPY(TEMP1,3,2);
FECHACOMP := (AGNO - 1980) * 512 + (MES * 32) + DIA
END
END;
(**********************************************************)
PROCEDURE CALCHORA(VAR HORAACTUAL : REGHORA);
TYPE
CADENA5 = STRING[5];
VAR
TEMP1,TEMP2 : CADENA5;
AMPM
: CHAR;
I
: INTEGER;
BEGIN
WITH HORAACTUAL DO
BEGIN
I := HORAS;
IF HORAS = 0 THEN I := 12; { "0" horas = 12am }
IF HORAS > 12 THEN I := HORAS - 12;
IF HORAS > 11 THEN AMPM := p ELSE AMPM := a;
STR(I:2,TEMP1); STR(MINUTOS,TEMP2);
IF LENGTH(TEMP2) < 2 THEN TEMP2 := 0 + TEMP2;
CADHORA := TEMP1 + : + TEMP2 + AMPM;
COMPHORA :=
(HORAS SHL 11) OR (MINUTOS SHL 5) OR (SEGUNDOS SHR 1)
END
END;
144
(**********************************************************)
FUNCTION DIRACADENA(DIRENT : REGDIR) : STRING;
CONST
BLANCOS=
VAR
TEMP,CADTRABAJO : CADENA80;
POSPUNTO : INTEGER;
BEGIN
WITH DIRENT DO
BEGIN
TEMP :=
;
{Si la entrada tiene atributo de directorio, formato diferente: }
IF (ATRIB AND $10) <> 0 THEN { el bit 4 es el atrib. de direct. }
BEGIN
INSERT(NOMBREFICHERO,TEMP,1); { No hay extens. en nombres de subdir. }
INSERT(<DIR>,TEMP,14) { Decirle al mundo qu es un subdir. }
END
ELSE
{ Esta sentencia compuesta separa el nombre del fichero y su }
{ extensin, y convierte el tamao en una cadena. No se }
{ inserta una cifra de tamao en Temp para los subdirectorios. }
BEGIN
POSPUNTO := POS(.,NOMBREFICHERO);
IF POSPUNTO > 0 THEN { El nombre del fichero tiene extensin }
CADTRABAJO := COPY(NOMBREFICHERO,1,POSPUNTO-1) +
COPY(BLANCOS,1,9-POSPUNTO) + . +
COPY(NOMBREFICHERO,POSPUNTO+1,LENGTH(NOMBREFICHERO)-POSPUNTO)
ELSE
CADTRABAJO := NOMBREFICHERO + COPY(BLANCOS,1,8-LENGTH(NOMBREFICHERO))
+ .;
INSERT(CADTRABAJO,TEMP,1);
STR(TAMFICHERO:7,CADTRABAJO);
INSERT(CADTRABAJO,TEMP,15)
END;
WITH FECHA DO
BEGIN
{ Esta sentencia une las tres cifras independientes para }
{ el mes, el dia, y el ao, en una cadena.}
IF MES < 10 THEN INSERT(0,CADENAFECHA,1);
IF DIA < 10 THEN INSERT(0,CADENAFECHA,4);
INSERT(CADENAFECHA,TEMP,24);
END;
INSERT(HORA.CADHORA,TEMP,34); { Finalmente, insertar la hora }
END;
DELETE(TEMP,42,LENGTH(TEMP)-42);
DIRACADENA := TEMP
END;
(**********************************************************)
PROCEDURE DTAADIR(VAR REGSALIDA : REGDIR);
145
VAR
DATODT : DATETIME; { Importado de la unidad DOS }
I
: INTEGER;
REGINT : SEARCHREC; { Idem }
REGCOMP : REGISTERS; { Idem }
DTAACTUAL : PTRDTA;
BEGIN
REGCOMP.AX := $2F00; { Localizar posicin actual del DTA }
MSDOS(REGCOMP);
WITH REGCOMP DO DTAACTUAL := PTR(ES,BX);
REGINT := DTAACTUAL^;
UNPACKTIME(REGINT.TIME,DATODT);
WITH REGSALIDA DO { Extraer y reformatear los datos }
BEGIN
NOMBREFICHERO:= REGINT.NAME; { Extraer nombre de fichero }
ATRIB := REGINT.ATTR; { Extraer el campo de atributos }
WITH HORA DO
{ Desarrollar la hora comprimida }
BEGIN
COMPHORA := REGINT.TIME SHR 16;
HORAS := DATODT.HOUR;
MINUTOS := DATODT.MIN;
SEGUNDOS := DATODT.SEC;
CENTESIMAS := 0;
END;
CALCHORA(HORA);
{ Llenar los otros campos }
WITH FECHA DO
{ Desarrollar la fecha comprimida }
BEGIN
FECHACOMP := REGINT.TIME AND $0000FFFF;
DIA := DATODT.DAY;
MES := DATODT.MONTH;
AGNO := DATODT.YEAR;
END;
CALCFECHA(FECHA); { Llenar los otros campos }
TAMFICHERO := REGINT.SIZE;
SIGUIENTE := NIL;
{ Inicializar el puntero "siguiente" }
ANTERIOR := NIL
{ Inicializar el puntero "anterior" }
END
END; { DTAADIR }
(**********************************************************)
PROCEDURE BUSCARDIRECTORIO(DIRECTORIO,ESPECBUSQUEDA : STRING);
VAR
SIGUIENTEDIRECTORIO : STRING;
DIRECTORIOTEMP
: STRING;
DTAACTUAL
: SEARCHREC;
DIRACTUAL
: REGDIR;
REGS
: REGISTERS;
{>>>>PresenDatos<<<<}
{ Presenta los datos del fichero y la va de acceso completa }
146
(*********************)
PROCEDURE PRESENDATOS(DIRECTORIO : STRING; DIRACTUAL : REGDIR);
VAR
TEMP : STRING;
BEGIN
TEMP := DIRACADENA(DIRACTUAL);
DELETE(TEMP,1,13);
WRITE(TEMP,DIRECTORIO);
IF DIRECTORIO <> \ THEN WRITE(\);
WRITELN(DIRACTUAL.NOMBREFICHERO)
END;
BEGIN
{ En primer lugar buscamos subdirectorios. Si se encuentra alguno, }
{ hacemos una llamada recursiva para buscar en l tambin. }
{ Suprimir barras innecesarias si buscamos la raz: }
IF DIRECTORIO = \ THEN
DIRECTORIOTEMP := DIRECTORIO + *.*
ELSE
DIRECTORIOTEMP := DIRECTORIO + \*.*;
{ Hacer la llamada a FIND FIRST para los directorios: }
FINDFIRST(DIRECTORIOTEMP,$10,DTAACTUAL);
147
Ahora podemos buscar ficheros, una vez que hemos acabado con
}
los directorios. Esto es conceptualmente simple, ya que no
}
involucra recursividad. Combinamos la va acceso y el especi- }
ficador en una sola cadena y hacemos la llamada a FIND FIRST: }
148
ELSE BEGIN
COLOR1:=YELLOW;
COLOR2:=LIGHTRED;
COLOR3:=LIGHTGREEN
END;
TEXTBACKGROUND(LIGHTBLUE);
TEXTCOLOR(COLOR1);
IF PARAMCOUNT = 0 THEN
BEGIN
TEXTCOLOR(COLOR3);
WRITELN( EVALUACION V:1.00 "EMILIO SAHUQUILLO & JULIO MARTINEZ");
TEXTCOLOR(COLOR1);
WRITELN;
WRITELN( Esta opcin busca en el disco de trabajo todos los );
WRITELN( ficheros que concuerdan con un determinado especificador,);
WRITELN( examinando todos los subidirectorios necesarios.);
WRITELN( Dado slo el especificador, se presentar la va );
WRITELN( de acceso completa de cualquier fichero que se considere);
WRITELN( adecuado.);
TEXTCOLOR(COLOR2);
WRITELN( SINTAXIS DE LLAMADA:);
WRITELN( <especificador de fichero>);
TEXTCOLOR(COLOR1);
WRITELN;
TEXTCOLOR(COLOR2);
WRITELN( Por ejemplo : );
TEXTCOLOR(COLOR1);
WRITELN( para encontrar todos los ficheros de texto );
WRITELN( (que terminan en .TXT) deberemos introducir:);
WRITELN;
WRITELN( *.TXT);
WRITELN;
WRITELN( y se mostrar la va de acceso completa de );
WRITELN( cualquier fichero con la extensin .TXT.)
END
ELSE
BEGIN
WRITELN;
ESPECBUSQUEDA := PARAMSTR(1);
{ Si no se da especificador se buscar en todo el disco: }
IF POS(\,ESPECBUSQUEDA) = 0 THEN
BUSCARDIRECTORIO(\,ESPECBUSQUEDA)
ELSE
BEGIN
{ Se separa el especificador de la va de acceso: }
I := LENGTH(ESPECBUSQUEDA);
WHILE ESPECBUSQUEDA[I] <> \ DO I := PRED(I);
DIRECTORIOINIC := COPY(ESPECBUSQUEDA,1,I-1);
DELETE(ESPECBUSQUEDA,1,I);
BUSCARDIRECTORIO(DIRECTORIOINIC,ESPECBUSQUEDA)
END
END;
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE);
149
LOWVIDEO
END.
150
4.3.- INSTALA
151
LABEL 1,4;
CONST
VERERROR
ERRORNORMAL
ERRORCLAVE
REPITE
VAR
RECIBE
GRABA
ERRORINS
REGISTROSLEIDOS
CURSORPANX
CURSORPANY
CURSORX
CURSORY
COLOR1
COLOR2
COLOR3
COLOR4
COLOR5
COLOR6
COLOR7
COLOR8
TECLA
ORIGEN
ORIGEN1
DESTINO
DESTINO1
ARCHIVO
BUFFER
PUNTEROPANTALLA
:
:
:
:
BOOLEAN=FALSE;
BOOLEAN=FALSE;
BOOLEAN=FALSE;
BOOLEAN=FALSE;
: FILE;
: FILE;
: INTEGER;
: INTEGER;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: BYTE;
: CHAR;
: STRING[255];
: STRING[255];
: STRING[255];
: STRING[255];
: STRING[20];
: ARRAY [1..1000] OF BYTE;
: POINTER;
152
4.3.6.- LISTADO.
PROGRAM INSTALAR;
{A+,S+,B-,E+,N+} {$M 16384, 000000, 50000}
USES CRT,ERR;
LABEL 1,4;
CONST
VERERROR
: BOOLEAN=FALSE;
ERRORNORMAL
: BOOLEAN=FALSE;
ERRORCLAVE
: BOOLEAN=FALSE;
REPITE
: BOOLEAN=FALSE;
VAR
RECIBE
: FILE;
GRABA
: FILE;
ERRORINS
: INTEGER;
REGISTROSLEIDOS : INTEGER;
CURSORPANX
: BYTE;
CURSORPANY
: BYTE;
CURSORX
: BYTE;
CURSORY
: BYTE;
COLOR1
: BYTE;
COLOR2
: BYTE;
COLOR3
: BYTE;
COLOR4
: BYTE;
COLOR5
: BYTE;
COLOR6
: BYTE;
COLOR7
: BYTE;
COLOR8
: BYTE;
TECLA
: CHAR;
ORIGEN
: STRING[255];
ORIGEN1
: STRING[255];
DESTINO
: STRING[255];
DESTINO1
: STRING[255];
ARCHIVO
: STRING[20];
BUFFER
: ARRAY [1..1000] OF BYTE;
153
PUNTEROPANTALLA : POINTER;
(**********************************************************)
PROCEDURE HACERFONDO;
VAR
A,B:BYTE;
BEGIN
TEXTBACKGROUND(COLOR2);
TEXTCOLOR(COLOR1);
CURSOROFF;
BEGIN
FOR A:=1 TO 80 DO
FOR B:=1 TO 25 DO
BEGIN
GOTOXY(A,B);
WRITE(#176)
END
END
END;
(**********************************************************)
PROCEDURE REHACERTROZODEFONDO;
VAR
C,D:BYTE;
BEGIN
TEXTBACKGROUND(COLOR2);
TEXTCOLOR(COLOR1);
CURSOROFF;
BEGIN
FOR C:=5 TO 75 DO
FOR D:=16 TO 20 DO
BEGIN
GOTOXY(C,D);
WRITE(#176);
END
END
END;
(**********************************************************)
PROCEDURE COLORES;
BEGIN
IF MODOVIDEOACTUAL=M THEN BEGIN
COLOR1:=BLACK;
COLOR2:=BLACK;
COLOR3:=WHITE;
COLOR4:=BLACK;
COLOR5:=BLACK;
154
COLOR6:=WHITE;
COLOR7:=BLACK;
COLOR8:=WHITE
END
ELSE BEGIN
COLOR1:=LIGHTBLUE;
COLOR2:=WHITE;
COLOR3:=RED;
COLOR4:=GREEN;
COLOR5:=RED;
COLOR6:=YELLOW;
COLOR7:=BLUE;
COLOR8:=LIGHTRED
END
END;
(**********************************************************)
{$F+}
PROCEDURE ABANDONAR;
BEGIN
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE);
TEXTMODE(LASTMODE);
CLRSCR;
CURSORON;
CARGARPANTALLA(PUNTEROPANTALLA);
GOTOXY(CURSORPANX,CURSORPANY);
LOWVIDEO
END;
{$F-}
(**********************************************************)
PROCEDURE COPIAR;
LABEL 2,3,EMPEZAR;
BEGIN
EMPEZAR :
CURSORX:=WHEREX;
CURSORY:=WHEREY;
ASSIGN(RECIBE,ORIGEN1);
{$I-} RESET(RECIBE,1) {$I+};
ERRORINS:=IORESULT;
IF ERRORINS=2 THEN BEGIN
VERERROR:=TRUE;
WINDOW(1,5,80,25);
CURSOROFF;
ERROR(ERRORINS);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
155
WINDOW(1,1,80,25);
GOTOXY(2,25);
WRITE(
);
GOTOXY(2,25);
WRITE( INTRODUZCA DISCO CON ,ARCHIVO, Y PULSE
ESCAPE=IGNORAR);
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN BEGIN
GOTOXY(2,25);
WRITE( Ctr-INTER=ABORTAR INSTALACION
REHACERTROZODEFONDO;
WINDOW(21,7,60,14);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(COLOR8);
GOTOXY(CURSORX,CURSORY);
WRITELN(NO instalado!);
TEXTCOLOR(WHITE);
GOTO 3
END;
IF TECLA<>#27 THEN BEGIN
GOTOXY(2,25);
WRITE( Ctr-INTER=ABORTAR INSTALACION
REHACERTROZODEFONDO;
WINDOW(21,7,60,14);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(COLOR8);
GOTOXY(CURSORX,CURSORY);
GOTO EMPEZAR
END
END;
CUALQUIER
TECLA.
);
);
156
);
TEXTCOLOR(WHITE);
GOTO 3
END
END;
ASSIGN(GRABA,DESTINO1);
REWRITE(GRABA,1);
{$I-} BLOCKREAD(RECIBE,BUFFER,SIZEOF(BUFFER),REGISTROSLEIDOS) {$I+};
ERRORINS:=IORESULT;
IF ERRORINS<>0 THEN BEGIN
VERERROR:=TRUE;
WINDOW(1,5,80,25);
CURSOROFF;
ERROR(ERRORINS);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
WINDOW(1,1,80,25);
GOTOXY(2,25);
WRITE( ESCAPE=ABORTAR INSTALACION
pulsa CUALQUIER TECLA para continuar
);
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN HALT;
IF TECLA <> #27 THEN BEGIN
GOTOXY(2,25);
WRITE( Ctr-INTER=ABORTAR INSTALACION
);
REHACERTROZODEFONDO;
WINDOW(21,7,60,14);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(COLOR8);
GOTOXY(CURSORX,CURSORY);
WRITELN(NO instalado correctamente);
TEXTCOLOR(WHITE);
GOTO 3
END
END;
WHILE REGISTROSLEIDOS > 0 DO
BEGIN
{$I-} BLOCKWRITE(GRABA,BUFFER,REGISTROSLEIDOS) {$I+};
ERRORINS:=IORESULT;
IF ERRORINS<>0 THEN BEGIN
VERERROR:=TRUE;
WINDOW(1,5,80,25);
CURSOROFF;
ERROR(ERRORINS);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
WINDOW(1,1,80,25);
GOTOXY(2,25);
WRITE( ESCAPE=ABORTAR INSTALACION
pulsa CUALQUIER TECLA para continuar
);
DESCARGARTECLADO;
TECLA:=READKEY;
157
158
);
(**********************************************************)
BEGIN
CURSORPANX:=WHEREX;
CURSORPANY:=WHEREY;
SALVARPANTALLA(PUNTEROPANTALLA);
EXITPROC:=@ABANDONAR;
COLORES;
TEXTMODE(C80);
1:
HACERFONDO;
VERERROR:=FALSE;
ERRORNORMAL:=FALSE;
ERRORCLAVE:=FALSE;
REPITE:=FALSE;
DIBUJARCUADRO(25,6,55,8,COLOR3,COLOR4);
GOTOXY(26,7);
WRITELN( PROGRAMA DE INSTALACION );
DIBUJARCUADRO(20,10,60,20,COLOR6,COLOR5);
WINDOW(21,11,60,19);
WRITELN(
);
WRITELN(
EVALUACION VERSION 1.00
);
WRITELN(
);
WRITELN(
JULIO MARTINEZ JUAN
);
WRITELN(
&
);
WRITELN(
EMILIO SAHUQUILLO DOBON
);
WRITELN(
);
WRITELN( Valencia a 30 de Abril de 1993
);
WRITE(
);
WINDOW(1,1,80,25);
GOTOXY(2,25);
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
WRITE( ESCAPE=SALIR
>>> PULSE CUALQUIER TECLA PARA CONTINUAR );
DESCARGARTECLADO;
TECLA:=READKEY;
IF TECLA=#27 THEN HALT;
HACERFONDO;
TEXTBACKGROUND(COLOR1);
TEXTCOLOR(WHITE);
GOTOXY(2,25);
WRITE( ESCAPE=SALIR
DIBUJARCUADRO(20,5,61,15,WHITE,COLOR7);
WINDOW(21,6,60,14);
REPEAT
CLRSCR;
IF REPITE=TRUE THEN BEGIN
CURSOROFF;
WRITE(
INTRODUZCA SOLO "A:" "B:");
SOUND(1000);
DELAY(100);
SOUND(800);
DELAY(80);
NOSOUND;
159
);
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
);
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
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
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
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
165
GOTOXY(2,25);
TEXTCOLOR(WHITE);
WRITE( ESCAPE=SALIR
);
WINDOW(21,6,60,14);
CLRSCR;
CURSOROFF;
GOTOXY(1,1);
WRITE( LA INSTALACION HA SIDO TERMINADA. );
IF (ERRORNORMAL=TRUE) AND (ERRORCLAVE=FALSE) THEN BEGIN
WRITE(Se han producido errores que pueden no);
WRITE(afectar al funcionamiento bsico del);
WRITE(programa. Asegurese instalando correcta-);
WRITE(mente con los ficheros necesarios segn);
WRITE(su tipo de ordenador.
);
WRITE(
);
WRITE(>>> pulse CUALQUIER TECLA para repetir)
END;
IF ERRORCLAVE=TRUE THEN BEGIN
WRITE(Se han producido errores que AFECTAN al);
WRITE(funcionamiento bsico del PROGRAMA. El);
WRITE(archivo EVAL.EXE no ha sido correctamen-);
WRITE(te instalado, repita la instalacin. );
WRITE(
);
WRITE(
);
WRITE(>>> pulse CUALQUIER TECLA para repetir)
END;
IF (ERRORCLAVE=FALSE) AND (ERRORNORMAL=FALSE) THEN BEGIN
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
);
WRITE(
>>> pulse CUALQUIER TECLA)
END;
DESCARGARTECLADO;
TECLA:=READKEY;
IF (ERRORCLAVE=FALSE) AND (ERRORNORMAL=FALSE) THEN GOTO 4;
IF TECLA <> #27 THEN BEGIN
WINDOW(1,1,80,25);
GOTO 1
END;
4:
END.
166
167
168
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
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
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
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;
172
4.7.- LISTADO.
PROGRAM BARRA;
{A+,S+,B-,E+,N+} {$M 16384, 270000, 270000}
USES CRT,GRAPH,DOS,ERR,VISUAL6;
LABEL 1,2,3,4,5;
TYPE
DATOS=RECORD
TIEMPOS : REAL;
TEMSIONES : ARRAY[1..25] OF REAL
END;
PUNTEROV2=^V2;
V2=RECORD
TIEMPOS : REAL;
TENSIONES : ARRAY[1..25] OF REAL;
SIG
: PUNTEROV2
END;
PUNTERONUDO=^NUDO;
NUDO=RECORD
CARACTERN : CHAR;
SIG
: PUNTERONUDO
END;
PUNTEROV=^V;
V=RECORD
Vmuestras : REAL;
NUMNUDO : INTEGER;
SIG
: PUNTEROV
END;
CONST
EJECUTAR
: BOOLEAN=FALSE;
MEMDINAMICA : BOOLEAN=FALSE;
SALIDADOS : BOOLEAN=FALSE;
NOMPSP
: STRING[100]=Ninguno;
{seala el numero de errores producidos}
NO_DE_ERRORES: INTEGER=0;
{seala n de valores con valor >10}
CONTADOR3 : INTEGER=0;
DATOS_PCLAB : BOOLEAN=FALSE;
VAR
173
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
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
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
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
GOTOXY(SALVAX,SALVAY)
END;
{$F-}
(**********************************************************)
PROCEDURE VALORTOLERANCIA;
BEGIN
IF ((CHIVATO1<>5) AND ((SALTO<>13) OR (SALTO<>80))) OR (SALTO=61) THEN BEGIN
{para no poderla llamar con saludo delante}
IF PUNTERO6=NIL THEN BEGIN
SETFILLSTYLE(1,WHITE);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
SETCOLOR(BLACK);
RECTANGLE(ROUND(160*COTE1),ROUND(210*COTE2),ROUND(480*COTE1),ROUND(270*COTE2));
SETCOLOR(7);
SETLINESTYLE(0,1,3);
LINE(ROUND(165*COTE1),ROUND(273*COTE2),ROUND(482*COTE1),ROUND(273*COTE2));
LINE(ROUND(483*COTE1),ROUND(215*COTE2),ROUND(483*COTE1),ROUND(274*COTE2));
SETCOLOR(BLACK);
OUTTEXTXY(ROUND(170*COTE1),ROUND(220*COTE2),INTRODUCE EL VALOR DE LA
TOLERANCIA :);
OUTTEXTXY(ROUND(270*COTE1),ROUND(235*COTE2),< 0..100 >);
OUTTEXTXY(ROUND(185*COTE1),ROUND(250*COTE2),-1);
OUTTEXTXY(ROUND(190*COTE1),ROUND(260*COTE2),#27);
OUTTEXTXY(ROUND(215*COTE1),ROUND(250*COTE2),-5);
OUTTEXTXY(ROUND(220*COTE1),ROUND(260*COTE2),#25);
OUTTEXTXY(ROUND(395*COTE1),ROUND(250*COTE2),+5);
OUTTEXTXY(ROUND(400*COTE1),ROUND(260*COTE2),#24);
OUTTEXTXY(ROUND(425*COTE1),ROUND(250*COTE2),+1);
OUTTEXTXY(ROUND(430*COTE1),ROUND(260*COTE2),#26);
DIMENSION6:=IMAGESIZE(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND
(280*COTE2));
GETMEM(PUNTERO6,DIMENSION6);
GETIMAGE(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2),PU
NTERO6^)
END
ELSE PUTIMAGE(ROUND(150*COTE1),ROUND(200*COTE2),PUNTERO6^,COPYPUT);
SETFILLSTYLE(1,7);
SETCOLOR(BLACK);
SETLINESTYLE(0,1,3);
UTOLERANCIA:=TOLERANCIA;
REPEAT
BAR(ROUND(260*COTE1),ROUND(250*COTE2),ROUND(360*COTE1),ROUND(265*COTE2));
LINE(ROUND(265*COTE1),ROUND(267*COTE2),ROUND(362*COTE1),ROUND(267*COTE2));
LINE(ROUND(362*COTE1),ROUND(255*COTE2),ROUND(362*COTE1),ROUND(268*COTE2));
OUTTEXTXY(ROUND(290*COTE1),ROUND(255*COTE2),TOLERANCIA1);
OUTTEXTXY(ROUND(320*COTE1),ROUND(255*COTE2), %);
DESCARGARTECLADO;
MARGEN:=ORD(READKEY);
178
STR(TOLERANCIA,TOLERANCIA1);
OUTTEXTXY(ROUND(520*COTE1),ROUND(365*COTE2),TOLERANCIA1)
END;
SETCOLOR(WHITE)
END
END; {de la condicin del saludo}
(**********************************************************)
PROCEDURE CAMBIARDIRECTORIO;
BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(COLOR5);
CLRSCR;
REPEAT
REPEAT
CURSORON;
WINDOW(1,1,80,25);
PULSA:= ; {inicializamos}
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(3,2);
WRITELN(INTRODUCE UNIDAD Y CAMINO DEL DIRECTORIO O SUBDIRECTORIO : );
GOTOXY(3,3);
WRITELN(Unidad:\Camino1\Camino2\...\CaminoN
>>> INTRO salir);
RAYA_HORIZONTAL(2,79,4,WHITE);
TEXTCOLOR(COLOR6);
GOTOXY(3,24);
WRITE(DTO. actual : ,DIRECTORIO);
RAYA_HORIZONTAL(2,79,23,WHITE);
TEXTCOLOR(COLOR6);
WINDOW(3,5,78,24);
GOTOXY(1,1);
REPEAT
DESCARGARTECLADO;
READLN(DIRECTORIO)
UNTIL DIRECTORIO<>#13;
IF LENGTH(DIRECTORIO)=2 THEN BEGIN
WINDOW(1,1,80,25);
DIRECTORIO:=No Definido;
CURSOROFF;
ERROR(3);
GOTOXY(23,22);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
WRITE(>>> pulsa CUALQUIER TECLA para repetir...);
DESCARGARTECLADO;
PULSA:=READKEY
END
180
ELSE PULSA:=#251;
IF LENGTH(DIRECTORIO)>40 THEN BEGIN
CURSOROFF;
DIRECTORIO:=No Definido;
GOTOXY(2,3);
WRITELN(EL DIRECTORIO SE EXCEDE EN SU LONGITUD (>40 caracteres));
WRITELN(^g);
DELAY(3000)
END
UNTIL (PULSA=#251) AND (LENGTH(DIRECTORIO)<40);
{$V-}
FOR LONG:=1 TO LENGTH(DIRECTORIO) DO
DIRECTORIO[LONG]:=UPCASE(DIRECTORIO[LONG]);
{$V+}
{$I-} CHDIR(DIRECTORIO) {$I+} ;
ERRORDIRECTORIO:=IORESULT;
IF ERRORDIRECTORIO<>0 THEN BEGIN
CURSOROFF;
DIRECTORIO:=No Definido;
WINDOW(1,1,80,25);
ERROR(ERRORDIRECTORIO);
GOTOXY(23,22);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
WRITE(>>> pulsa CUALQUIER TECLA para repetir...);
DESCARGARTECLADO;
PULSA:=READKEY
END
ELSE PULSA:=#251;
WINDOW(1,1,80,25)
{un valor que no se da raiz^2}
UNTIL PULSA=#251;
SETGRAPHMODE(MODO)
END;
(**********************************************************)
PROCEDURE CALCULARDIRECTORIOACTUAL;
BEGIN
GETDIR(0,DIRECTORIO);
IF LENGTH(DIRECTORIO)>40 THEN DIRECTORIO:=de trabajo por defecto
END;
(**********************************************************)
PROCEDURE ABANDONAR;
BEGIN
SETFILLSTYLE(1,7);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
181
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
FILLCHAR(REGS,SIZEOF(REGS),0);
WITH REGS DO
BEGIN
AH:=$2B;
DH:=MES;
DL:=DIA;
CX:=ANO
END;
MSDOS(REGS);
FUNCIONA:=REGS.AL <> 0
END;
(**********************************************************)
PROCEDURE FECHA;
LABEL ALMENU;
BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(COLOR5);
CLRSCR;
REPEAT
REPEAT
REPEAT
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
RAYA_HORIZONTAL(2,79,3,WHITE);
OBTENERFECHA(SISTEMA);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(3,2);
WRITELN(LA FECHA ACTUAL ES : ,SISTEMA);
WINDOW(3,4,78,24);
GOTOXY(1,2);
WRITELN(INTRODUCE EL DIA (dos cifras));
DESCARGARTECLADO;
WINDOW(3,6,78,7);
{$I-} READLN(DIA) {$I+};
ERRORDIRECTORIO:=IORESULT;
IF ERRORDIRECTORIO<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERRORDIRECTORIO);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(15,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
183
PULSA:=READKEY;
IF PULSA=#27 THEN GOTO ALMENU
END
UNTIL ERRORDIRECTORIO=0;
WINDOW(3,4,78,24);
GOTOXY(1,5);
WRITELN(INTRODUCE EL MES (dos cifras));
DESCARGARTECLADO;
WINDOW(3,9,78,10);
{$I-} READLN(MES) {$I+};
ERRORDIRECTORIO:=IORESULT;
IF ERRORDIRECTORIO<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERRORDIRECTORIO);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(15,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
PULSA:=READKEY;
IF PULSA=#27 THEN GOTO ALMENU
END
UNTIL ERRORDIRECTORIO=0;
WINDOW(3,4,78,24);
GOTOXY(1,8);
WRITELN(INTRODUCE EL AO (cuatro cifras));
DESCARGARTECLADO;
WINDOW(3,12,78,13);
{$I-} READLN(ANO) {$I+};
ERRORDIRECTORIO:=IORESULT;
IF ERRORDIRECTORIO<>0 THEN BEGIN
CURSOROFF;
WINDOW(1,1,80,25);
ERROR(ERRORDIRECTORIO);
TEXTCOLOR(COLOR6);
TEXTBACKGROUND(COLOR5);
GOTOXY(15,24);
WRITE(>>> pulsa CUALQUIER TECLA para repetir, ESCAPE salir);
DESCARGARTECLADO;
PULSA:=READKEY;
IF PULSA=#27 THEN GOTO ALMENU
END
UNTIL ERRORDIRECTORIO=0;
WINDOW(1,1,80,25);
FIJARFECHA(MES,DIA,ANO,FUNCIONA);
IF FUNCIONA THEN BEGIN
GOTOXY(33,23);
TEXTCOLOR(COLOR2+BLINK);
WRITELN( ERROR! );
WRITELN(^g);
TEXTCOLOR(COLOR6);
END
ELSE
BEGIN
184
GOTOXY(25,23);
WRITELN(LA FECHA HA SIDO ESTABLECIDA)
END;
CURSOROFF;
GOTOXY(27,24);
WRITE(Pulse CUALQUIER TECLA...);
DESCARGARTECLADO;
PULSA:=READKEY
UNTIL FUNCIONA=FALSE;
ALMENU :
END;
(**********************************************************)
PROCEDURE REALIZA_INFORMACION;
BEGIN
SETCOLOR(WHITE);
RECTANGLE(0,0,VALOX,VALOY);
VENTANAS1;
{realizacin de la informacin}
SETFILLSTYLE(1,WHITE);
BAR(ROUND(35*COTE1),ROUND(350*COTE2),ROUND(600*COTE1),ROUND(420*COTE2));
SETCOLOR(BLACK);
RECTANGLE(ROUND(45*COTE1),ROUND(360*COTE2),ROUND(590*COTE1),ROUND(410*COTE2));
LINE(ROUND(52*COTE1),ROUND(375*COTE2),ROUND(583*COTE1),ROUND(375*COTE2));
LINE(ROUND(52*COTE1),ROUND(395*COTE2),ROUND(583*COTE1),ROUND(395*COTE2));
LINE(ROUND(318*COTE1),ROUND(362*COTE2),ROUND(318*COTE1),ROUND(373*COTE2));
SETCOLOR(COLOR2);
IF CREAR=A DISCO: SI THEN OUTTEXTXY(ROUND(80*COTE1),ROUND(365*COTE2),FICHEROS
DE SALIDA : SI);
IF CREAR=A DISCO: NO THEN OUTTEXTXY(ROUND(80*COTE1),ROUND(365*COTE2),FICHEROS
DE SALIDA : NO);
OUTTEXTXY(ROUND(390*COTE1),ROUND(365*COTE2),TOLERANCIA :
%);
STR(TOLERANCIA,TOLERANCIA1);
OUTTEXTXY(ROUND(520*COTE1),ROUND(365*COTE2),TOLERANCIA1);
OUTTEXTXY(ROUND(80*COTE1),ROUND(382*COTE2),FICHERO PSP : );
OUTTEXTXY(ROUND(205*COTE1),ROUND(382*COTE2),NOMPSP);
OUTTEXTXY(ROUND(80*COTE1),ROUND(400*COTE2),DIRECTORIO : );
OUTTEXTXY(ROUND(205*COTE1),ROUND(400*COTE2),DIRECTORIO);
SETLINESTYLE(0,1,3);
SETCOLOR(7);
LINE(ROUND(50*COTE1),ROUND(413*COTE2),ROUND(592*COTE1),ROUND(413*COTE2));
LINE(ROUND(593*COTE1),ROUND(365*COTE2),ROUND(593*COTE1),ROUND(414*COTE2));
SETLINESTYLE(0,0,1);
SETCOLOR(BLACK);
SETFILLSTYLE(1,LIGHTCYAN);
BAR(ROUND(35*COTE1),ROUND(440*COTE2),ROUND(600*COTE1),ROUND(460*COTE2));
OUTTEXTXY(ROUND(50*COTE1),ROUND(447*COTE2),ESCAPE);
OUTTEXTXY(ROUND(140*COTE1),ROUND(447*COTE2),F3);
OUTTEXTXY(ROUND(290*COTE1),ROUND(447*COTE2),F4);
185
OUTTEXTXY(ROUND(450*COTE1),ROUND(447*COTE2),Ctr-S);
SETCOLOR(COLOR10);
OUTTEXTXY(ROUND(140*COTE1),ROUND(447*COTE2), =TOLERANCIA);
OUTTEXTXY(ROUND(290*COTE1),ROUND(447*COTE2), =DOS SHELL);
OUTTEXTXY(ROUND(450*COTE1),ROUND(447*COTE2),
=ABANDONAR);
{fin de la informacin}
IF (CHIVATO1<>2) AND (RESALTO<>27) THEN BEGIN
{para que no dibuje en magenta cuando estamos en ejecutar}
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(85*COTE1),ROUND(20*COTE2),ROUND(195*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(27*COTE2),CONFIGURAR)
END;
BAX:=1
END;
(**********************************************************)
PROCEDURE SALIDA_AL_DOS;
BEGIN
{$F+}
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(BLACK);
TEXTCOLOR(WHITE);
CURSORON;
CLRSCR;
WRITELN;
WRITELN(PROGRAMA VERIFICACION DE CIRCUITOS 1.00);
WRITELN(Emilio Sahuquillo & Julio Martinez);
WRITELN(SALIDA AL DOS: teclee EXIT para retornar al programa...);
SWAPVECTORS;
LOWVIDEO;
EXEC(GETENV(COMSPEC),);
SWAPVECTORS;
SETGRAPHMODE(MODO);
{$F-}
{incluimos condicin para que si salimos de forma normal no redibuje dos veces}
IF SALIDADOS=FALSE THEN BEGIN
CALCULARDIRECTORIOACTUAL;
REALIZA_INFORMACION;
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(85*COTE1),ROUND(20*COTE2),ROUND(195*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(27*COTE2),CONFIGURAR)
END;
186
SALTO:=8;
SALIDADOS:=FALSE
END;
(**********************************************************)
BEGIN
EXITPROC:=@LIBERARMEMORIA;
WRITELN(EVALUACION 1.00 ## (c)1992-93 ## JULIO MARTINEZ & EMILIO SAHUQUILLO);
WRITELN(
Verificacin de circuitos electrnicos
);
SALVAX:=WHEREX;
SALVAY:=WHEREY;
SALVARPANTALLA(PUNTEROPAN);
TEXTMODE(C80);
{inicializamos los punteros grficos}
PUNTERO1:=NIL; PUNTERO2:=NIL; PUNTERO3:=NIL;
PUNTERO4:=NIL; PUNTERO5:=NIL; PUNTERO6:=NIL;
PUNTERO7:=NIL; PUNTERO8:=NIL;
CHECKSNOW:=TRUE;
{Para el caso de adaptador CGA no}
CREAR:=A DISCO: SI; {se produzca nieve}
TOLERANCIA:=15;
DEFINIR_COLORES;
{inicializacin del modo grfico}
DRIVER:=DETECT;
INITGRAPH(DRIVER,MODO,);
{introducimos rutina de busqueda de los ficheros graficos}
IF GRAPHRESULT<>0 THEN BEGIN
DRIVER:=DETECT;
INITGRAPH(DRIVER,MODO,C:\TP\BGI);
IF GRAPHRESULT<>0 THEN BEGIN
DRIVER:=DETECT;
INITGRAPH(DRIVER,MODO,D:\TP\BGI);
IF GRAPHRESULT<>0 THEN BEGIN
REPEAT
TEXTCOLOR(LIGHTRED);
WRITELN(NO SE ENCUENTRAN LOS FICHEROS DE ENTRADA AL MODO GRAFICO);
WRITELN(^g);
TEXTCOLOR(WHITE);
WRITELN(INTRODUCE INTRODUCE UNIDAD, CAMINO/VIA DE ACCESO A LOS
ARCHIVOS);
WRITELN((introduce "NADA" para salir));
READLN(VER);
FOR SALTO:=1 TO LENGTH(VER) DO
VER[SALTO]:=UPCASE(VER[SALTO]);
IF VER=NADA THEN HALT;
DRIVER:=DETECT;
INITGRAPH(DRIVER,MODO,VER)
UNTIL GRAPHRESULT=0
END
END
187
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
PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(365*COTE1),ROUND(20*COTE2),ROUND(460*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(380*COTE1),ROUND(27*COTE2),APLICA-2);
BAY:=FALSE;
CHIVATO1:=3
END;
IF BAX=3 THEN BEGIN
PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(500*COTE1),ROUND(20*COTE2),ROUND(575*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(520*COTE1),ROUND(27*COTE2),SALIR);
BAY:=FALSE;
CHIVATO1:=4
END;
IF BAX=4 THEN BEGIN
PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(48*COTE1),ROUND(20*COTE2),ROUND(72*COTE1),ROUND(40*COTE2));
SETFILLSTYLE(1,GREEN);
PIESLICE(ROUND(60*COTE1),ROUND(30*COTE2),1,360,ROUND(7*COTE1));
SETCOLOR(WHITE);
RECTANGLE(ROUND(51*COTE1),ROUND(21*COTE2),ROUND(69*COTE1),ROUND(39*COTE2));
BAY:=FALSE;
CHIVATO1:=5
END;
SALTO:=0;
BAX:=BAX+1
END;
IF SALTO=75 THEN BEGIN
BAX:=BAX-2;
BAY:=TRUE;
IF BAX=-2 THEN BAX:=-1;
GOTO 1
END;
{por las teclas de funcin y combinadas}
IF SALTO=19 THEN BEGIN
ABANDONAR;
IF PULSA IN [S,s] THEN HALT
END;
IF SALTO=61 THEN VALORTOLERANCIA;
IF SALTO=62 THEN BEGIN
SALIDA_AL_DOS;
IF CHIVATO1=2 THEN BEGIN
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(85*COTE1),ROUND(20*COTE2),ROUND(195*COTE1),ROUND(40*COTE2));
SETCOLOR(WHITE);
189
OUTTEXTXY(ROUND(100*COTE1),ROUND(27*COTE2),CONFIGURAR)
END;
BAX:=1
END
UNTIL (SALTO<>62)
UNTIL (SALTO=13) OR (SALTO=80);
PUTIMAGE(ROUND(35*COTE1),ROUND(20*COTE2),PUNTERO1^,COPYPUT);
IF CHIVATO1=1 THEN BEGIN
IF (PUNTERO2=NIL) OR (CREADO1<>CREADO2) THEN BEGIN
IF PUNTERO2<>NIL THEN FREEMEM(PUNTERO2,DIMENSION2);
SETCOLOR(BLACK);
SETFILLSTYLE(1,WHITE);
BAR(ROUND(85*COTE1),ROUND(40*COTE2),ROUND(215*COTE1),ROUND(120*COTE2));
RECTANGLE(ROUND(90*COTE1),ROUND(45*COTE2),ROUND(205*COTE1),ROUND(110*COTE2));
SETLINESTYLE(0,1,3);
SETCOLOR(7);
LINE(ROUND(94*COTE1),ROUND(113*COTE2),ROUND(206*COTE1),ROUND(113*COTE2));
LINE(ROUND(208*COTE1),ROUND(48*COTE2),ROUND(208*COTE1),ROUND(114*COTE2));
SETLINESTYLE(0,0,1);
SETCOLOR(BLACK);
OUTTEXTXY(ROUND(100*COTE1),ROUND(55*COTE2),FICHERO PSP);
OUTTEXTXY(ROUND(100*COTE1),ROUND(75*COTE2),CREAR);
OUTTEXTXY(ROUND(100*COTE1),ROUND(95*COTE2),TOLERANCIA);
DIMENSION2:=IMAGESIZE(ROUND(85*COTE1),ROUND(40*COTE2),ROUND(215*COTE1),ROUND(1
20*COTE2));
GETMEM(PUNTERO2,DIMENSION2);
GETIMAGE(ROUND(85*COTE1),ROUND(40*COTE2),ROUND(215*COTE1),ROUND(120*COTE2),PUN
TERO2^);
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(95*COTE1),ROUND(50*COTE2),ROUND(195*COTE1),ROUND(65*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(55*COTE2),FICHERO PSP);
CREADO1:=CREADO2
END
ELSE
BEGIN
PUTIMAGE(ROUND(85*COTE1),ROUND(40*COTE2),PUNTERO2^,COPYPUT);
IF ESC1=TRUE THEN BEGIN
SETFILLSTYLE(1,COLOR1);
BAR(ROUND(95*COTE1),ROUND(50*COTE2),ROUND(195*COTE1),ROUND(65*COTE2));
SETCOLOR(WHITE);
OUTTEXTXY(ROUND(100*COTE1),ROUND(55*COTE2),FICHERO PSP)
END
END
END;
IF (CHIVATO1=2) AND (EJECUTAR=FALSE) THEN BEGIN
SETFILLSTYLE(1,7);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2));
190
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
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
RECTANGLE(ROUND(190*COTE1),ROUND(110*COTE2),ROUND(450*COTE1),ROUND(270*COTE2));
SETLINESTYLE(0,1,3);
SETCOLOR(BLACK);
LINE(ROUND(195*COTE1),ROUND(273*COTE2),ROUND(452*COTE1),ROUND(273*COTE2));
LINE(ROUND(453*COTE1),ROUND(115*COTE2),ROUND(453*COTE1),ROUND(274*COTE2));
LINE(ROUND(220*COTE1),ROUND(216*COTE2),ROUND(427*COTE1),ROUND(216*COTE2));
LINE(ROUND(428*COTE1),ROUND(158*COTE2),ROUND(428*COTE1),ROUND(217*COTE2));
SETCOLOR(WHITE);
SETLINESTYLE(0,0,1);
SETTEXTSTYLE(2,0,5);
IF GRAPHRESULT<>0 THEN SETTEXTSTYLE(0,0,1);
SETCOLOR(COLOR4);
OUTTEXTXY(ROUND(230*COTE1),ROUND(130*COTE2),EVALUACION VERSION 1.00);
SETFILLSTYLE(1,LIGHTBLUE);
BAR(ROUND(215*COTE1),ROUND(153*COTE2),ROUND(425*COTE1),ROUND(213*COTE2));
SETCOLOR(COLOR3);
OUTTEXTXY(ROUND(245*COTE1),ROUND(160*COTE2),JULIO MARTINEZ JUAN);
OUTTEXTXY(ROUND(310*COTE1),ROUND(175*COTE2),&);
OUTTEXTXY(ROUND(230*COTE1),ROUND(190*COTE2),EMILIO SAHUQUILLO DOBON);
OUTTEXTXY(ROUND(200*COTE1),ROUND(230*COTE2),VALENCIA a 30 de MARZO de 1993);
SETCOLOR(COLOR4);
OUTTEXTXY(ROUND(340*COTE1),ROUND(250*COTE2),>>> Salir ESC);
DIMENSION8:=IMAGESIZE(ROUND(180*COTE1),ROUND(100*COTE2),ROUND(460*COTE1),ROUND
(280*COTE2));
GETMEM(PUNTERO8,DIMENSION8);
GETIMAGE(ROUND(180*COTE1),ROUND(100*COTE2),ROUND(460*COTE1),ROUND(280*COTE2),PU
NTERO8^);
SETCOLOR(WHITE);
SETTEXTSTYLE(0,0,1)
END
ELSE PUTIMAGE(ROUND(180*COTE1),ROUND(100*COTE2),PUNTERO8^,COPYPUT)
END;
{inicializamos valores}
BAX2:=1;
CHIVATO2:=1;
BAY2:=FALSE;
BAX3:=1;
CHIVATO3:=1;
BAY3:=FALSE;
BAX4:=1;
CHIVATO4:=1;
BAY4:=FALSE;
REPEAT
DESCARGARTECLADO;
RESALTO:=ORD(READKEY);
IF (CHIVATO1=2) AND ((RESALTO=27) OR (RESALTO=13)) THEN BEGIN
SETFILLSTYLE(1,BLACK);
BAR(ROUND(150*COTE1),ROUND(200*COTE2),ROUND(490*COTE1),ROUND(280*COTE2))
END;
2: IF ((CHIVATO1=1) AND (RESALTO=80)) OR (BAY2=TRUE) THEN BEGIN
IF BAX2=3 THEN BAX2:=0;
IF BAX2=-1 THEN BAX2:=2;
193
194
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
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;
196
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
SETGRAPHMODE(MODO)
END;
IF (RESALTO=13) AND (CHIVATO3=2) THEN BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(COLOR5);
CLRSCR;
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
GOTOXY(3,2);
TEXTCOLOR(COLOR6);
WRITELN(INTRODUCE UNIDAD, CAMINO Y PARAMETROS SOBRE LOS QUE LISTAR);
GOTOXY(3,3);
WRITE((pulsa INTRO para ver ayuda));
IF LENGTH(DIRECTORIO)<30 THEN WRITELN( DTO. actual : ,DIRECTORIO);
RAYA_HORIZONTAL(2,79,4,WHITE);
TEXTCOLOR(COLOR6);
WINDOW(3,5,78,24);
DESCARGARTECLADO;
READLN(VER);
SWAPVECTORS;
EXEC(ESPACIO1.EXE,VER);
ERRORDIRECTORIO:=DOSERROR;
IF ERRORDIRECTORIO=2 THEN BEGIN
CURSOROFF;
ERROR(32761)
END;
IF (ERRORDIRECTORIO<>0) AND (ERRORDIRECTORIO<>2) THEN BEGIN
CURSOROFF;
ERROR(ERRORDIRECTORIO)
END;
SWAPVECTORS;
CURSOROFF;
TEXTBACKGROUND(COLOR5);
TEXTCOLOR(COLOR11);
IF ERRORDIRECTORIO<>0 THEN GOTOXY(1,20);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE para salir);
TEXTCOLOR(COLOR6);
DESCARGARTECLADO;
VER:=READKEY
UNTIL VER=#27;
SETGRAPHMODE(MODO)
END;
IF (RESALTO=13) AND (CHIVATO3=3) THEN CAMBIARDIRECTORIO;
IF (RESALTO=13) AND (CHIVATO3=4) THEN BEGIN
RESTORECRTMODE;
WINDOW(1,1,80,25);
TEXTBACKGROUND(COLOR5);
CLRSCR;
198
REPEAT
CURSORON;
WINDOW(1,1,80,25);
CLRSCR;
DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5);
GOTOXY(3,2);
TEXTCOLOR(COLOR6);
WRITELN(INTRODUCE UNIDAD, CAMINO Y/O ESPECIFICADOR);
GOTOXY(3,3);
WRITE((pulsa INTRO para ver ayuda));
IF LENGTH(DIRECTORIO)<30 THEN WRITELN( DTO. actual : ,DIRECTORIO);
RAYA_HORIZONTAL(2,79,4,WHITE);
TEXTCOLOR(COLOR6);
WINDOW(3,5,78,24);
DESCARGARTECLADO;
READLN(VER);
SWAPVECTORS;
EXEC(LOCALIZA.EXE,VER);
ERRORDIRECTORIO:=DOSERROR;
IF ERRORDIRECTORIO=2 THEN BEGIN
CURSOROFF;
ERROR(32760)
END;
IF (ERRORDIRECTORIO<>0) AND (ERRORDIRECTORIO<>2) THEN BEGIN
CURSOROFF;
ERROR(ERRORDIRECTORIO)
END;
SWAPVECTORS;
CURSOROFF;
TEXTBACKGROUND(COLOR5);
TEXTCOLOR(COLOR11);
IF ERRORDIRECTORIO<>0 THEN GOTOXY(1,20);
WRITE(pulsa CUALQUIER TECLA para repetir, ESCAPE para salir);
TEXTCOLOR(COLOR6);
DESCARGARTECLADO;
VER:=READKEY
UNTIL VER=#27;
SETGRAPHMODE(MODO)
END;
IF (RESALTO=13) AND (CHIVATO4=2) THEN BEGIN
SALIDADOS:=TRUE;
SALIDA_AL_DOS
END;
IF (RESALTO=13) AND (CHIVATO4=1) AND (CHIVATO1=4) THEN BEGIN
VISUALIZACION_DE_ONDAS;
MODO:=GETMAXMODE;
SETGRAPHMODE(MODO)
END;
IF BAX4=3 THEN BEGIN
ABANDONAR;
IF PULSA IN [S,s] THEN HALT;
IF PULSA IN [N,n] THEN BAX4:=1
199
END;
CLEARVIEWPORT;
UNTIL BAX4=3;
CLOSEGRAPH;
LIBERARMEMORIA;
LOWVIDEO;
TEXTMODE(C80);
END.
200