PROCEDURE FICHERO_PSPICE; LABEL FIN; CONST SALIDA : CHAR = ' '; VAR AMPLI : FILE OF CHAR; NOM2 : STRING[255]; (**********************************************************) PROCEDURE PROCESO_DE_ERROR(ERROR0:INTEGER); VAR X,Y:BYTE; BEGIN X:=WHEREX; Y:=WHEREY; WINDOW(1,1,80,25); ERROR(ERROR0); TEXTCOLOR(COLOR6); TEXTBACKGROUND(COLOR5); GOTOXY(17,22); WRITE('>> pulse CUALQUIER TECLA para reintentar, ESC. men£ principal'); DESCARGARTECLADO; SALIDA:=READKEY; WINDOW(3,14,78,22);{----------borrado parcial de pantalla} CLRSCR; WINDOW(3,2,78,22);{------------recuperaci¢n de la pantalla principal} GOTOXY(X,Y); END; (**********************************************************) PROCEDURE CERRAR_FICHERO; LABEL FIN; VAR ERROR3:INTEGER; BEGIN REPEAT {$I-} CLOSE(AMPLI) {$I+}; ERROR3:=IORESULT; IF 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; 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; 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; 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; 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); 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; 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 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'); 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; (**********************************************************) {dispone la posible memoria ocupada por anteriores ficheros .txt} PROCEDURE DEL_MEMDIN_OCUPADA_ANTERIORFICH; BEGIN ANTE:=PRIM; REPEAT ACTU:=ANTE^.SIG; DISPOSE(ANTE); ANTE:=ACTU UNTIL ANTE^.SIG=NIL END; (**********************************************************) {dispone la posible memoria ocupada por los nudos de anteriores fich} PROCEDURE LIBERA_MEMDIN_NUDOS; BEGIN COMODIN:=INICIAL; REPEAT BEGIN PRESENTE:=COMODIN^.SIG; DISPOSE(COMODIN); COMODIN:=PRESENTE END; UNTIL COMODIN^.SIG=NIL; END; (**********************************************************) PROCEDURE TRANSFORMAR_FORMATO_PSPICE; {transformacion del fichero xxx.dat a n§s reales,} {con transferencia a disco en formato xxx.eva} LABEL FIN; VAR SENAL_ERROR:BOOLEAN; CARGA1,NUMEROS:CHAR; LECTURA:STRING[20]; NOMFICH:STRING[12]; X,Y:BYTE; CONTADOR1,CONTADOR2,ERR,control,ERRORLECT:INTEGER; T,V1:REAL; V:ARRAY[1..25] OF REAL; (********) { este procedimiento pasa los datos convertidos a la memoria din mica} { creando un fichero XXX.EVA directamente accesible por el } { usuario} PROCEDURE DATOS_A_MDINAMICA; VAR C:INTEGER; BEGIN {------paso de los datos a memoria din mica------} IF PRIM=NIL THEN BEGIN NEW(ACTU); ACTU^.TIEMPOS:=T; FOR C:=1 TO CUNTAPUNTOYCOMA DO BEGIN ACTU^.TENSIONES[C]:=V[C] END; PRIM:=ACTU; ACTU^.SIG:=NIL END ELSE BEGIN ANTE:=ACTU; NEW(ACTU); ACTU^.TIEMPOS:=T; FOR C:=1 TO CUNTAPUNTOYCOMA DO BEGIN ACTU^.TENSIONES[C]:=V[C] END; ANTE^.SIG:=ACTU; ACTU^.SIG:=NIL END END; (********) {guarda los datos leidos del fichero .dat a disco} PROCEDURE DISCO; LABEL FIN; VAR C:INTEGER; CONST EVA='.EVA'; EXPLICACION2=' SI AL REVISARLO ENCUENTRA 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 EXPLICACION1:STRING[70]; EXPLICACION9:STRING[56]; CADENA1:STRING[25]; CADENA2:STRING[25]; 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+}; 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; WRITELN(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+}; 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; (********) 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); 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 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; 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 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; 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 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 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; 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); 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 CONTADOR3:=0; NO_DE_ERRORES:=0; 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); 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;