From 43a19f54da6783117c158a82fad1ea8544a4e7f9 Mon Sep 17 00:00:00 2001 From: jdg Date: Wed, 8 Sep 2021 21:34:51 +0200 Subject: [PATCH] First commit 10/04/1996 --- BYTE.CPP | 32 ++++++ BYTE.EXE | Bin 0 -> 12170 bytes KIT.EXE | Bin 0 -> 15043 bytes PLACA.CPP | 63 ++++++++++ PLACA.PRJ | Bin 0 -> 5371 bytes PRN_CNT.BAS | 261 +++++++++++++++++++++++++++++++++++++++++ PRN_CNT.CPP | 325 ++++++++++++++++++++++++++++++++++++++++++++++++++++ PRN_CNT.H | 179 +++++++++++++++++++++++++++++ READ.EXE | Bin 0 -> 19198 bytes README.md | 9 ++ WRITE.EXE | Bin 0 -> 18549 bytes 11 files changed, 869 insertions(+) create mode 100644 BYTE.CPP create mode 100644 BYTE.EXE create mode 100644 KIT.EXE create mode 100644 PLACA.CPP create mode 100644 PLACA.PRJ create mode 100644 PRN_CNT.BAS create mode 100644 PRN_CNT.CPP create mode 100644 PRN_CNT.H create mode 100644 READ.EXE create mode 100644 README.md create mode 100644 WRITE.EXE diff --git a/BYTE.CPP b/BYTE.CPP new file mode 100644 index 0000000..c4a693d --- /dev/null +++ b/BYTE.CPP @@ -0,0 +1,32 @@ +#include +struct Bits +{ + + unsigned int bit : 1; + +}; + +typedef union char_bit +{ + char byte; + Bits bits[8]; + +} charbit; + + +void main(void) +{ + charbit cb; + int numero; + + do{ + + scanf( "%d", numero ); + cb.byte = numero; + printf( "%d %d %d %d %d %d %d %d", (int)cb.bits[0].bit, (int)cb.bits[1].bit, (int)cb.bits[2].bit, (int)cb.bits[3].bit, + (int)cb.bits[4].bit, (int)cb.bits[5].bit, (int)cb.bits[6].bit, (int)cb.bits[7].bit ); + + }while( cb.byte > 0 ); + + +} \ No newline at end of file diff --git a/BYTE.EXE b/BYTE.EXE new file mode 100644 index 0000000000000000000000000000000000000000..4a459959a39d4d1f2e2ca915af2150d56cd1d172 GIT binary patch literal 12170 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 Iee}it53-2{761SM literal 0 HcmV?d00001 diff --git a/KIT.EXE b/KIT.EXE new file mode 100644 index 0000000000000000000000000000000000000000..ae416550a3b1e5e8ea46dd6d8b9a33b9a6193997 GIT binary patch literal 15043 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 +#include +#include +#include +#include "prn_cnt.h" + + + +void main(void) +{ + char ok = 0; + int salida, estado; + + Lpt_usado = 1; + Init_all(); +/* + do + { + for ( salida = 1; salida<=128; salida*=2 ) + { + Escribe_Salidas( 6, NULL, (char)salida ); + delay(50); + } + for ( salida = 128; salida>1; salida/=2 ) + { + Escribe_Salidas( 6, NULL, (char)salida ); + delay(50); + } + }while( !kbhit() ); +*/ +/* + do + { + printf( "\n Introduzca salida y estado: " ); + scanf( "%d %d", &salida, &estado ); +Escribe_Salida( (char)salida, (char)estado ); +// Escribe_Salidas( 6, NULL, (char)salida ); + + } while( salida>0 ); +*/ + +do +{ + estado = Lee_Entradas( 6, NULL ); + printf( "\n%d %d %d %d %d %d %d %d", ( estado & 0x80 ) != 0, + ( estado & 0x40 ) != 0, + ( estado & 0x20 ) != 0, + ( estado & 0x10 ) != 0, + + ( estado & 0x08 ) != 0, + ( estado & 0x04 ) != 0, + ( estado & 0x02 ) != 0, + ( estado & 0x01 ) != 0 ); + getch(); + +} while( !kbhit() ); + + + +// ESCRIBIR ES UN '1' +// La direcci¢n de la placa es '6' +// ===> la direcci¢n '0' es: 1 000 0011 +} \ No newline at end of file diff --git a/PLACA.PRJ b/PLACA.PRJ new file mode 100644 index 0000000000000000000000000000000000000000..524baef7d9d24a227ff431da097c53f27251860d GIT binary patch literal 5371 zcmeI0`BPg}6vxla0uhQ(XbV)WZ`!C`h9zMwE|BJhn3-&ogt233nF1-Ig-+?T3-p6`8XnNGud6JnWhyl?X1-21-wocj*< zzU3yy)4eIht3=bO+mn4`O6TDAq_UhuNqME%m1HK1-V2B@K{X{mRNur-o z`33kDIE!A&w2f)`MtV3=%*`i(Q*s=qVV+^LjJ{&p=r{CxyObUO&X)KC)pLLbkl;2h zB&-aw0d}AOZH0_#2c!QohEl|!Vqg(a0$k1zrLf9?#lW*1&GH!h1IENpIKh|Rzjpcm)^`hg^{4Hy7! zW6%&V45ZL@C#+FeYGzP;sN7;wD2yyP=|kC+{r&- z_9><#TpHnFO=J@CMb0xinjGrgo=j&8obbd$+0NzCUKiS^)ZH3T>LQ9W-@bDhPp*BA zXryN_qb7UD2L`fdkjDCR4RY~*PTxjf*b}-m&-sfFAup{n|D=#VCbsc+MAk`2VFna$CxHi0{!V%UN+u z>=hZ25}LL}G>RheH4W2BK6n#`$M!Mj+D0AKhpOz71(Jo5#ge@J#Aiz+9W=dbO3}0n z_3%|hJ2{uSLhq@2)P3nObnlC1dDJv`oUP~8q-k?}-*;XtJJW|E_rOQ=TTW@Pb1 zED-jaQ>uIigc6rJd#cE*_`AWx(0amM!JwItJ>kwk&}T}i`Z`Tsud3${i9WxATBwQ~ VJS)nnf|k%yT1J&@>jgKsKLPJX#3}#) literal 0 HcmV?d00001 diff --git a/PRN_CNT.BAS b/PRN_CNT.BAS new file mode 100644 index 0000000..c3903f8 --- /dev/null +++ b/PRN_CNT.BAS @@ -0,0 +1,261 @@ +' /**************************************************************************\ +'| | +'| Codigo Fuente de PRN_CNT | +'| | +' \**************************************************************************/ + +dim shared Salidas(10) as single, PortAddress(3) as integer + PortAddress(1) = &378 + PortAddress(2) = &278 + PortAddress(3) = &3bc + +dim shared NULL as ESTADOS + +typedef struct ESTADOS + { + b1 as single + b2 as single + b3 as single + b4 as single + b5 as single + b6 as single + b7 as single + } + +sub Init.DeInit + /**************************************************************************\ +| | +| Esta rutina debe ser llamada al iniciar el programa que use las librerias. | +| | +| Es la encargada de poner a cero todas la salidas, al principio y al salir. | +| | +| | +| Parametros de Entrada: ( ninguno ) | +| Parametros de Salida: | +| OK Todo ha ido bien. | +| ERROR_EN_ATEXIT Error registrando funci¢n | +| FUNCION_YA_REGISTRADA No es la 1¦ vez | +| | + \**************************************************************************/ + + call ResetAll + +end sub + + + +sub ResetAll + /**************************************************************************\ +| | +| Resetea todas las salidas y las pone a cero. | +| | + \**************************************************************************/ + + dim ampl as single + + for ampl=0 to ampl<10 step 1 + call EscribeSalidas( ampl, NULL, 0 ) + next ampl + +end sub + +function LeeSalidas%( ampl as single, estados as ESTADOS ) + /**************************************************************************\ +| | +| Obtiene el estado de las salidas ( On/Off ), de la ampliacion AMPL. | +| | +| Parametros de Entrada: | +| ampl Ampliaci¢n donde debemos mirar | +| estados Puntero a estructura con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | +| NOTA: si &estados es NULL, solo se devolvera el char de salida. | + \**************************************************************************/ + + dim desp as single + + if ampl < 0 or ampl >9 then + LeeSalidas = 0 + exit + end if + if estados <> NULL then + + estados.Salida0 = ( ( Salidas( ampl ) and&00 ) <> 0 ) + estados.Salida1 = ( ( Salidas( ampl ) and&02 ) <> 0 ) + estados.Salida2 = ( ( Salidas( ampl ) and&04 ) <> 0 ) + estados.Salida3 = ( ( Salidas( ampl ) and&08 ) <> 0 ) + estados.Salida4 = ( ( Salidas( ampl ) and&10 ) <> 0 ) + estados.Salida5 = ( ( Salidas( ampl ) and&20 ) <> 0 ) + estados.Salida6 = ( ( Salidas( ampl ) and&40 ) <> 0 ) + estados.Salida7 = ( ( Salidas( ampl ) and&80 ) <> 0 ) + } + + return Salidas( ampl ) +} + + + + /**************************************************************************\ +| | +| Obtiene el estado de una salida ( On/Off ), cualquiera. | +| | +| Parametros de Entrada: | +| salida ( Si 1 ampl. 0 a 7 ) | +| ( Si 10 ampl. 0 a 80 ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ + +char Lee_Salida( char salida ) +{ + return ( Salida( (salida / 8) + 1 ) and( &01 << ( salida - ((salida/8)+1)*8 ) ) <> 0 +} + + /**************************************************************************\ +| | +| Escribe la variable 'estados' ( On/Off ), en la ampliacion AMPL. | +| | +| Parametros de Entrada: | +| ampl Ampliaci¢n donde debemos mirar | +| estados Puntero a estructura con los estados | +| estadosb 1byte con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | +| NOTA: si &estados es NULL, solo se utilizar  la variable estadosb. | + \**************************************************************************/ + +char Escribe_Salidas( char ampl, ESTADOS *estados, char estadosb ) +{ + char byte_out=0, cont + + outportb( Port_Address(Lpt_usado-1) + 1, &0 ) + + + if ( estados = NULL ) + { + outportb( Port_Address(Lpt_usado-1), estadosb ) + Salida( ampl ) = estadosb + } else { + byte_out = estados.Salida0 + byte_out = ( bytes_out or( ( estados.Salida1 ) << 1) ) + byte_out = ( bytes_out or( ( estados.Salida1 ) << 2) ) + byte_out = ( bytes_out or( ( estados.Salida1 ) << 3) ) + byte_out = ( bytes_out or( ( estados.Salida1 ) << 4) ) + byte_out = ( bytes_out or( ( estados.Salida1 ) << 5) ) + byte_out = ( bytes_out or( ( estados.Salida1 ) << 6) ) + byte_out = ( bytes_out or( ( estados.Salida1 ) << 7) ) + outportb( Port_Address(Lpt_usado-1), byte_out ) + Salida( ampl ) = byte_out + } +/* + A2 (ampl and&01) + A1 (ampl and&02) + A0 (ampl and&04) +*/ + outportb( Port_Address(Lpt_usado-1) + 1, &0 ) + + + outportb( Port_Address(Lpt_usado-1) + 1, &0 ) + +/* + A2 01.0 Strobe + A1 14.0 AutoFeed + A0 16.0 Inicializaci¢n + + 11 10 12 13 15 + 128 64 32 16 8 4 2 1 + 0 1 0 1 0 1 0 1 + +13 12 11 10 + . . . . þ þ þ þ þ þ þ þ . <-- 1 + - - - - - - - - . . . . + 15 +*/ + + + +} + + +function EscribeSalida%( salida as single, estados as single ) + /**************************************************************************\ +| | +| Escribe el estado de una salida ( On/Off ), cualquiera. | +| | +| Parametros de Entrada: | +| salida ( Si 1 ampl. 0 a 3 ) | +| ( Si 10 ampl. 0 a 80 ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ + + dim ampl as single, byte_out as single + ampl = (salida / 8) + 1 + + byte_out = Lee_Salidas( ampl, NULL ) + byte_out = ( byte_out and!( &01 << ( salida - ampl*8 ) ) ) or( estado << ( salida - ampl*8 ) ) + Salida( ampl ) = byte_out + EscribeSalidas( ampl, NULL, byte_out ) + EscribeSalida = byte_out +end function + + + +function LeeEntradas%( ampl as single, estados as ESTADOS ) + +' /**************************************************************************\ +'| | +'| Lee las entradas y la almacena en la variable estados. | +'| | +'| Parametros de Entrada: | +'| ampl Ampliaci¢n donde debemos mirar | +'| estados Puntero a estructura con los estados | +'| | +'| Parametros de Salida: | +'| char 1Byte con los estados | +'| | +' \**************************************************************************/ + +end function + +function LeeEntrada%( entrada as single ) + /**************************************************************************\ +| | +| Lee una entrada cualquiera. | +| | +| Parametros de Entrada: | +| entrada ( Si 1 ampl. 0 a 3 ) | +| ( Si 10 ampl. 0 a 80 ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ + + dim byte_out as single, ampl as single + ampl = (salida / 8) + 1 + + byte_out = Lee_Entradas( ( (salida / 8) + 1 ), NULL ) + + byte_out = ( byte_out and( &01 << ( salida - ampl*8 ) ) ) + LeeEntrada = byte_out + +end function + + + +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛFÛIÛNÛÛÛDÛEÛÛÛLÛAÛÛÛÛCÛAÛBÛEÛCÛEÛRÛAÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + + + + diff --git a/PRN_CNT.CPP b/PRN_CNT.CPP new file mode 100644 index 0000000..0ba5358 --- /dev/null +++ b/PRN_CNT.CPP @@ -0,0 +1,325 @@ + /**************************************************************************\ +| | +| Codigo Fuente de PRN_CNT | +| | + \**************************************************************************/ +/* + A2 01 -> !1 Strobe + A1 14 -> !2 AutoFeed + A0 16 -> 4 Inicializaci¢n + READ/WRITE !8 +*/ + + +#include "c:\backup\fuentes\prn_cnt\prn_cnt.h" +#include +#include +#include +#include + + +char Salida[10]; +int Port_Address[3] = { 0x378, 0x278, 0x3BC }; +char Lpt_usado = 1; + + /**************************************************************************\ +| | +| Esta rutina debe ser llamada al iniciar el programa que use las librerias. | +| | +| Es la encargada de poner a cero todas la salidas, al principio y al salir. | +| | +| | +| Parametros de Entrada: ( ninguno ) | +| Parametros de Salida: | +| OK Todo ha ido bien. | +| ERROR_EN_ATEXIT Error registrando funci¢n | +| FUNCION_YA_REGISTRADA No es la 1¦ vez | +| | + \**************************************************************************/ +//Û +int Init_all(void) +{ + static char vez = 0; + + if ( vez == 0 ) + { + vez = 1; + Reset_all(); + if ( atexit( Reset_all ) != 0 ) + return ERROR_EN_ATEXIT; + else + return OK; + } else + return FUNCION_YA_REGISTRADA; +} + + /**************************************************************************\ +| | +| WARNING: | +| El uso de la siguiente funci¢n esta indicada solo para usuarios | +| experimentados, se debe usar en lugar de la funci¢n anterior. | +| | +| Parametros de Entrada: | +| ( LEER/ESCRIBIR ) // L/E los registros del fich| +| ( %s ) // _ero %s | +| | +| Parametros de Salida: | +| 1 Ok! OK | +| -1 Fallo desconocido FALLO_DESCONOCIDO | +| -2 Archivo no existe NO_ARCHIVO | +| -3 Error archivo no valido ARCHIVO_INCORRECTO | +| | + \**************************************************************************/ + +int Register( char leer_escribir, char *file ) +{ + FILE *fich; + char Buffer[10]; + + if ( leer_escribir == ESCRIBIR ) + { + if ( (fich = fopen( file, "wb" ) ) == NULL ) return ARCHIVO_INCORRECTO; + strcpy( Buffer, "PRN_CNT->\0" ); + fwrite( Buffer, sizeof( char ), 10, fich ); + fwrite( Salida, sizeof( char ), 10, fich ); + fclose(fich); + } else { + if ( (fich = fopen( file, "rb" ) ) == NULL ) return NO_ARCHIVO; + fread( Buffer, sizeof( char ), 10, fich ); + if ( strncmp( Buffer, "PRN_CNT->", 9 ) != 0 ) { + fclose( fich ); + return ARCHIVO_INCORRECTO; + } + fread( Salida, sizeof( char ), 10, fich ); + fclose(fich); + } + return OK; +} + + + /**************************************************************************\ +| | +| Resetea todas las salidas y las pone a cero. | +| | + \**************************************************************************/ +//Û +void Reset_all(void) +{ + char ampl; + outportb( 888, 0x00 ); + outportb( 890, 0x03 ); + + for ( ampl=0; ampl<10; ampl++ ) + Escribe_Salidas( ampl, NULL, 0 ); + + outportb( 888, 0x00 ); + outportb( 890, 0x03 ); + +} + + + /**************************************************************************\ +| | +| Obtiene el estado de las salidas ( On/Off ), de la ampliacion AMPL. | +| | +| Parametros de Entrada: | +| ampl Ampliaci¢n donde debemos mirar | +| estados Puntero a estructura con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | +| NOTA: si &estados es NULL, solo se devolvera el char de salida. | + \**************************************************************************/ +//Û +unsigned char Lee_Salidas( char ampl, ESTADOS *estados ) +{ + char desp; + + if ( ampl < 1 || ampl > 9 ) + return 0; + if ( estados != NULL ) + { + estados -> Salida0 = ( ( Salida[ ampl - 1 ] & 0x01 ) != 0 ); + estados -> Salida1 = ( ( Salida[ ampl - 1 ] & 0x02 ) != 0 ); + estados -> Salida2 = ( ( Salida[ ampl - 1 ] & 0x04 ) != 0 ); + estados -> Salida3 = ( ( Salida[ ampl - 1 ] & 0x08 ) != 0 ); + estados -> Salida4 = ( ( Salida[ ampl - 1 ] & 0x10 ) != 0 ); + estados -> Salida5 = ( ( Salida[ ampl - 1 ] & 0x20 ) != 0 ); + estados -> Salida6 = ( ( Salida[ ampl - 1 ] & 0x40 ) != 0 ); + estados -> Salida7 = ( ( Salida[ ampl - 1 ] & 0x80 ) != 0 ); + } + + return Salida[ ampl - 1 ]; +} + + + + /**************************************************************************\ +| | +| Obtiene el estado de una salida ( On/Off ), cualquiera. | +| | +| Parametros de Entrada: | +| salida ( Si 1 ampl. 0 a 7 ) | +| ( Si 10 ampl. 0 a 80 ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ +//Û +unsigned char Lee_Salida( char salida ) +{ +// estados -> Salida0 = ( ( Salida[ ampl - 1 ] & 0x01 ) != 0 ); + return ( ( Salida[ (salida / 8) ] & ( 0x01 << ( salida - ( (salida/8)*8 ) ) ) ) != 0 ); +} + + /**************************************************************************\ +| | +| Escribe la variable 'estados' ( On/Off ), en la ampliacion AMPL. | +| | +| Parametros de Entrada: | +| ampl Ampliaci¢n donde debemos mirar | +| estados Puntero a estructura con los estados | +| estadosb 1byte con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | +| NOTA: si &estados es NULL, solo se utilizar  la variable estadosb. | + \**************************************************************************/ +//Û +unsigned char Escribe_Salidas( char ampl, ESTADOS *estados, char estadosb ) +{ + char byte_out=0, cont; + + if ( estados == NULL ) + { + outportb( Port_Address[Lpt_usado-1], estadosb ); + Salida[ ampl - 1 ] = estadosb; + } else { + byte_out = estados -> Salida0; + byte_out = ( byte_out | ( ( estados -> Salida1 ) << 1) ); + byte_out = ( byte_out | ( ( estados -> Salida1 ) << 2) ); + byte_out = ( byte_out | ( ( estados -> Salida1 ) << 3) ); + byte_out = ( byte_out | ( ( estados -> Salida1 ) << 4) ); + byte_out = ( byte_out | ( ( estados -> Salida1 ) << 5) ); + byte_out = ( byte_out | ( ( estados -> Salida1 ) << 6) ); + byte_out = ( byte_out | ( ( estados -> Salida1 ) << 7) ); + outportb( Port_Address[Lpt_usado-1], byte_out ); + Salida[ ampl - 1] = byte_out; + } + + outportb( Port_Address[Lpt_usado-1] + 2, ( 0x00 | ( ( ampl & 0x01 ) << 2) | ( !( ampl & 0x02 ) << 1) | ( !( ampl & 0x03 ) << 0) ) ); + + outportb( Port_Address[Lpt_usado-1] , 0x00 ); + outportb( Port_Address[Lpt_usado-1] + 2, 0x03 ); + + return byte_out; + +} + + + /**************************************************************************\ +| | +| Escribe el estado de una salida ( On/Off ), cualquiera. | +| | +| Parametros de Entrada: | +| salida ( Si 1 ampl. 0 a 3 ) | +| ( Si 10 ampl. 0 a 80 ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ +//Û +unsigned char Escribe_Salida( char salida, char estado ) +{ + char ampl = (salida / 8) + 1; + char byte_out; + + byte_out = Lee_Salidas( ampl, NULL ); + + byte_out = ( byte_out & ~( 0x01 << ( salida - (ampl-1)*8 ) ) ) | ( estado << ( salida - (ampl-1)*8 ) ); + + Escribe_Salidas( ampl, NULL, byte_out ); + + return byte_out; +} + + + + + /**************************************************************************\ +| | +| Lee las entradas y la almacena en la variable estados. | +| | +| Parametros de Entrada: | +| ampl Ampliaci¢n donde debemos mirar | +| estados Puntero a estructura con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | + \**************************************************************************/ + +unsigned char Lee_Entradas( char ampl, ESTADOS *estados ) +{ + unsigned char byte_out=0; + + outportb( Port_Address[Lpt_usado-1] , 0xFF ); + outportb( Port_Address[Lpt_usado-1] + 2, ( 0x08 | ( ( ampl & 0x01 ) << 2) | ( !( ampl & 0x02 ) << 1) | ( !( ampl & 0x03 ) << 0) ) ); + + + byte_out = inportb ( Port_Address[Lpt_usado-1] ); + + outportb( Port_Address[Lpt_usado-1] , 0x00 ); + outportb( Port_Address[Lpt_usado-1] + 2, 0x03 ); + + if ( estados != NULL ) + { + estados -> Salida0 = ( 0x01 & byte_out ) != 0; + estados -> Salida1 = ( 0x02 & byte_out ) != 0; + estados -> Salida2 = ( 0x04 & byte_out ) != 0; + estados -> Salida3 = ( 0x08 & byte_out ) != 0; + estados -> Salida4 = ( 0x10 & byte_out ) != 0; + estados -> Salida5 = ( 0x20 & byte_out ) != 0; + estados -> Salida6 = ( 0x40 & byte_out ) != 0; + estados -> Salida7 = ( 0x80 & byte_out ) != 0; + } + + return byte_out; +} + + /**************************************************************************\ +| Lee una entrada cualquiera. | +| | +| Parametros de Entrada: | +| entrada ( Si 1 ampl. 0 a 3 ) | +| ( Si 10 ampl. 0 a 80 ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ + +unsigned char Lee_Entrada( char entrada ) +{ + char byte_out; + char ampl = (entrada / 8) + 1; + + byte_out = Lee_Entradas( ampl, NULL ); + +// byte_out = ( byte_out & !( 0x01 << ( entrada - ampl*8 ) ) ) | ( estado << ( entrada - ampl*8 ) ); + byte_out = ( ( byte_out & ( 0x01 << ( entrada - (ampl-1)*8 ) ) ) ) != 0; + return byte_out; + +} + +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛFÛIÛNÛÛÛDÛEÛÛÛLÛAÛÛÛÛCÛAÛBÛEÛCÛEÛRÛAÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + + + + diff --git a/PRN_CNT.H b/PRN_CNT.H new file mode 100644 index 0000000..56f8dc2 --- /dev/null +++ b/PRN_CNT.H @@ -0,0 +1,179 @@ + /**************************************************************************\ +| | +| CABECERA A INCLUIR EN TUS PROGRAMAS: #include "PRN_CNT.h" | +| | +| | + >>> Rutinas para la comunicaci¢n USUARIO <---> PRN_CNT <<< +| | + \**************************************************************************/ + +#define LEER 0 +#define ESCRIBIR 1 +#define OK 1 +#define FALLO_DESCONOCIDO -1 +#define NO_ARCHIVO -2 +#define ARCHIVO_INCORRECTO -3 +#define ON 1 +#define OFF 0 +#define ERROR_EN_ATEXIT -9 +#define FUNCION_YA_REGISTRADA 5 + +typedef struct + { + char Salida0; char Salida1; char Salida2; char Salida3; + char Salida4; char Salida5; char Salida6; char Salida7; + } ESTADOS; + + +extern char Lpt_usado; + + + /**************************************************************************\ +| | +| Esta rutina debe ser llamada al iniciar el programa que use las librerias. | +| | +| Es la encargada de poner a cero todas la salidas, al principio y al salir. | +| | +| | +| Parametros de Entrada: ( ninguno ) | +| Parametros de Salida: | +| OK Todo ha ido bien. | +| ERROR_EN_ATEXIT Error registrando funci¢n | +| FUNCION_YA_REGISTRADA No es la 1¦ vez | +| | + \**************************************************************************/ + +int Init_all(void); + + /**************************************************************************\ +| | +| WARNING: | +| El uso de la siguiente funci¢n esta indicada solo para usuarios | +| experimentados, se debe usar en lugar de la funci¢n anterior. | +| | +| Parametros de Entrada: | +| ( LEER/ESCRIBIR ) // L/E los registros del fich| +| ( %s ) // _ero %s | +| | +| Parametros de Salida: | +| 1 Ok! OK | +| -1 Fallo desconocido FALLO_DESCONOCIDO | +| -2 Archivo no existe NO_ARCHIVO | +| -3 Error archivo no valido ARCHIVO_INCORRECTO | +| | + \**************************************************************************/ + +int Register( char leer_escribir, char *file ); + + /**************************************************************************\ +| | +| Resetea todas las salidas y las pone a cero. | +| | + \**************************************************************************/ + +void Reset_all(void); + + + /**************************************************************************\ +| | +| Obtiene el estado de las salidas ( On/Off ), de la ampliacion AMPL. | +| | +| Parametros de Entrada: | +| ampl Ampliaci¢n donde debemos mirar | +| estados Puntero a estructura con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | +| NOTA: si &estados es NULL, solo se devolvera el char de salida. | + \**************************************************************************/ +unsigned char Lee_Salidas( char ampl, ESTADOS *estados ); + + + /**************************************************************************\ +| | +| Obtiene el estado de una salida ( On/Off ), cualquiera. | +| | +| Parametros de Entrada: | +| salida ( Si 1 ampl. 0 a 7 ) | +| ( Si 10 ampl. 0 a 80 ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ + +unsigned char Lee_Salida( char salida ); + + + + /**************************************************************************\ +| | +| Escribe la variable 'estados' ( On/Off ), en la ampliacion AMPL. | +| | +| Parametros de Entrada: | +| ampl Ampliaci¢n donde debemos mirar | +| estados Puntero a estructura con los estados | +| estadosb Byte con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | +| NOTA: si &estados es NULL, se utilizar  el char con los estados. | + \**************************************************************************/ +unsigned char Escribe_Salidas( char ampl, ESTADOS *estados, char estadosb ); + + /**************************************************************************\ +| | +| Parametros de Entrada: | +| salida ( Si 1 ampl. 0 a 3 ) | +| ( Si 10 ampl. 0 a 80 ) | +| estado ( ON / OFF ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ + +unsigned char Escribe_Salida( char salida, char estado ); + + + + + /**************************************************************************\ +| | +| Lee las entradas y la almacena en la variable estados. | +| | +| Parametros de Entrada: | +| ampl Ampliaci¢n donde debemos mirar | +| estados Puntero a estructura con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | +| NOTA: si &estados es NULL, solo se devolvera el char de salida. | + \**************************************************************************/ + +unsigned char Lee_Entradas( char ampl, ESTADOS *estados ); + + + /**************************************************************************\ +| | +| Lee una entrada cualquiera. | +| | +| Parametros de Entrada: | +| entrada ( Si 1 ampl. 0 a 7 ) | +| ( Si 10 ampl. 0 a 80 ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ + +unsigned char Lee_Entrada( char entrada ); + + + +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛFÛIÛNÛÛÛDÛEÛÛÛLÛAÛÛÛÛCÛAÛBÛEÛCÛEÛRÛAÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ diff --git a/READ.EXE b/READ.EXE new file mode 100644 index 0000000000000000000000000000000000000000..93c29bee4baa18dd27c42cb16d35fd05d3b379ac GIT binary patch literal 19198 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 ZD84!rPY%V&q4=6md~GOB3B^;`e*yhmd3XQ- literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..02a5d5b --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#PRN_CNT + + +*10/04/1996* + +ToDo: wwtcf? + + +![screenshot](/PRN_CNT.png "Screenshot") diff --git a/WRITE.EXE b/WRITE.EXE new file mode 100644 index 0000000000000000000000000000000000000000..c05660b463430a469c2fe3394ac8c8ce50516bc9 GIT binary patch literal 18549 zcmeHudwf*Ywf{cPnM@`RNC*!x4j?E*5r~2spaGIW6vCLmgz!oOBp3||ojDVbhA`Yw zVRFQxSRP(`#cF*}YU6FJ0sF(4Xri=MK#G8^TJUkkgGdpR7{Z+2cb%EZ!(V&7|NTC{ z`}qy-bH01+z1QA*?X}lhd!IOOv4b1NIObrC8HP>p<4wQmNF2NDy4Pc7|HXs*7xe#6 z{(nUR2Y<(p52hXB8z#IvLLJXDHT?$m$mwSuV-L&QSup)!799Tq(;ncSewaPdl-Z=7 zR67qCo4PN)bhc#Hm|G=ZyZ>E($Ejdq9Xr6W_s<4etbwzg!SqMi!>2R8RHrWxHye!i zT3%;-kTPv$lIMD1dWGN_`Lg)_*R!*}_6!Z6fGL&$sLYr6I!n&_dYwhRq6;A#uYN3? z4yNzLNSxi_4i!;~$X^@vqyY17%Xid)?pc3rwFb zq*l-NPk)RFp6qoN|MVR!-7}?;Tl5;w-W}l?*RWbmpDqA78t!=i;mu7SNfESR>F1rv8OTa#jM%!V9ZTg%3@TDZ)w%)Sqa61vxpFk|voq=%3m zVA^WVr5&=E72Jh~Y-W{zu;S${?n09YSzb7B6C1;e{^QJfrsKw?2}<07q3qyIOtW#Q zr=Dw=Tj%889dRI$9lV2u1TMXi-SX~;V7h|Esb-C$nOTp_2G%HmyJCtcgGw&`+?Xk#Xt=>PJ~0D?`Wl ze`F|$W9sH}lfKG&+bgPXsP6|_Wc_T`2g+6IX%v%03|X;^F^YMM{^l5?5U>B$(!ioD z2AeGGV{To|dE_y5tGNh+&;A92wg`i!mWFI|*;)>yvx9Cn{*m-Uy!NHhC@_~+DU*#_ zsGbX)lUtnzYn4whPMgRY_o49m5k=daU9N4;ZdclsZtfhlHY{Ky5eM z^uGGpvKFxLPyc{1-^f<^1F$&D8oLCSwoodHZ&ECc9fqE$ON|`UJMfa2e!*-KIA?Pg zspEyhP`3>*6Id#ahd60btb#yIc_MR_e7jmgni-P-cOMS7s8 zzRC8ZVbqhBGq?zyhwd?omq#ZZIL9AcFVwU12R8`y!g-RRo>I?TnN5(A;nHsBz&7kO z{I!Oy=8L{nqYT`2Zc(k4{asv*vJgwStUUGr}BWc!vliBnAB@tI9q z#U3KxOU&VVsA3-~-$S+bp$a|J=kbo!c4;usU(8)2Pegj(k$*Hf%?>x+(KAk1qOTsmDH9v42+T zpOyP(Exp(%+#qVyeDeMA!f&BM^%!_|xZ34Fb^KS8KZ?oSZw9sLPXeRh9>T<`Bsu>99c6E>G7 zwkyI-E^U99*2q9J=yDjVbcVLY;e*%~XC7?sosU_icM+yvVh*3VXHwMkOYG=b)hPzI zq)LW-iDfpKyQg8+q$brZ!XwA2%jIBFW|Jhe9<^M!6U%dJ{!t%CWpw z2sK?#G!ic%pdt3gu2d<2PMJ^F?(Hl&u0t9m4=yhP8;%So>g_zLh(AB z+^69^rYLEdKqmD+v_Jy4_+!wB!-CGM%`UfAY%eNuY1@s)KMTlN(&1N09Ok0HZ^83c zWB#HW@(xTh(2{4mfEC~*6`lNtp^Li&SWYWuj=f_`w!kw*hNE}s0~>zSe*#d!QQ@d{ALlM?b9OV<=ImljAF9^c z+nt6(vAj7g;IxY^>a=tV0N)~atJSvsh#r?u9jz?ey~}WR8P!(9En;9bV|K?I>nHjD z*KvXKW$dthxPFNLb;1Ms*4p%WXn}w>1%_KLDl+oA^!lteWj`pc7$r1Y2;~TE&UV8f zhqHfou-djO-l!Q`_lx7gBqMNnP_+*PBpc)eqt+>J51E`b+*Y<752=V2A!o)!CJC43p&)m;UoZR;Jqz*_duQ zl+1KKv%RCu!F+K6W04{fgKf@EL_A$C)!9DU*yM84+)ee-YK6d?iGkWqRy%~4`H~E0 zxAtoI*T{$p|JbiXt>GFWRLO@5d5y791>bkVo6FjbO+@}FpFj0>Wl(%mt-Wvg;)g%f zucGoL{1TKU=NI%XU9#BhFO9bm}8b2MW!bJQp5tWAml+X_mw^HrWoqFqG|Tfr7PMQd(D%fJsb_~ z3C7nQCIe_y^jW*2nEIbz?`ZWaPDP`hbcf>u-Tdn9UH( z?F((c62V%<6}7rOzI~%`h-1pI{tRobk%A zkvX}4T(j~Sf8@wpfe#oeh2QpF(*F|rC4*X;^Tf!aqipTYt8smAa0_>;AEB4?)XN`_ zefGe;CwA^otZ0y|SoI|H9cMOwbD#c3e>pg_s@pe43hj|~;e4i8?(a5>Xp?e28G=G7 zBnZPB5hBh5Twr-OgSG1p;S|?rm)55Ak-qX-QQ!^1_`A|sq`#hV?10Fy8a283clWj^ zT8tIDCHzj!#5&FY)dbHt{}r2Ou>Y$89*6&m?6LX3a(L2!yaW7i*^Zux{Nw+k|30J1 z|DCAFkq(MN#nD(jC5irZ#E0WW`-y}*?04An?P&=^?AO}U?X&C~5>gW<+vnL|u#dA( zuow9C37(Pu%W>5M{g=nBll;0x7ySBlM2Wxsl-H7z)A=e?bIEsP@^Ex=7m~q=R)w72+u*4H~&JIDFX?lAJ~HH)WaC>E@C8qNlkzq4PHTQb_!u$pH(J1_9v zwd=a9L?y>j=|Man$g3nOY6x@6kY9=$g5x-**ggq~-i z$Jx{gZBCnw`9=|ouX|a5YGvRfPF>`?5gFK^!RUR5_HB5Fr+%ky+u2cO6E385`EH<= zb9-BwwcZQw@cvC7x3lB#yS5zeI3skVys>NG3Eyn0>-b*XXHfS<-@&OL?8Mm!mlqwU z;bTuTwKh>*-pyUD)+VdVyMkBiY0$2N#wH$TsN*bfj9dl$)XB&R?4ZQ5(xwaE4E6NU zvu$uYjH#z_EpoPX3(p&B^ZTDjVNN~${@LIbJ3o`Edj7JP=Xbj_y#ubpCvP6Zc;iYV z<6Rvx<5};KilUIlFm51(G#vf*4x~1(#@ZzJv`LP%!HCFEQJX~GrM))@ZAdp7W<=tz zXnd8?v8<)8RpW86JD&W|Cjbw9B5uDfHT$}KRD1Keos1mfd2)#7TzGs5ujnj1U>K8{ zF22-pbWU;0oFZI2+~!1^AMSFyLy>Z##6aVOdS2v%R%kAg2yHS?Wd-o;>Ecx&FbZO%@^ zFny!W?Vt3idPF_x*B$=LKlY~7J+({>TpkSPxGmxw52u9!g8vFz*BQtQbNUg2Ujg#^ zTLjPeYroA#*WnEF@Cl$#s#$lvihl-3> zt-9@18&dM`Lj37g=eKOD`*P;7t?sVKDD~u5ZLQ8O4%7%?&+OU3Y8jJCW{Naf9fWMH zxUKdztkginYjED}%x9n6DlxT9PeG4jzN@gVZ8r{%U9JLc!MAA^)!iO{Y@-mm$U;}B zJMi09dk|68WMj&#S;6HZxI37VJXsxVX45R%?kn}T?@O~R)_!({SYt#C6S%xB?_kDv zTiyf1tfQNF^=RlRcoVs2tR!OcTdz&}baGI_btJALddkgCdae@ohdS-SWCy)Ld7x^4hBfHLpGNU~gk&5mE~WWL9|hw&kxComlW<(AE4%FPuJR>N?M>J)7jZLn zmA`wvBKf-)`37JWvhTVpPmAzt-FIc3+SCqGHcklj6SRA} z>ztRh72T@)B8GWg#^H?9W9r1IH!9Yt4w%&ppJmK`ZC3Z3yS5xYYeD^6yU%~%|2@{KMw&UsF7o*xsGPzgF_ znLT?gj1=V>z64qPUjVXgu zR-}wf*`D%?ln+zRqd`f=*=v?t7e(^6)oz+}<&orqXe z69(eeE*o*4T&UUOabuvi2{haBAGCr%>YkB5L98dMQHu-U8r6XHU4Yw@F zPm+aK-^RX3-uwpRJ+`brdF3r2f4>18AD=afVvYCY!#W#9$R9i;>cYVm@qoml_nrr? zV+Y?B8?xUW5$gUDLss3^h8$dVn5PmO&Qyp-afB6d=_J$n_@RF+!ws`~NnI)jbkUQT zm3|R-YT8U3jx>R;pKnXQAS$EOb$q+XDROY~MNxNTO$IGN{YYED)Y<$qAR&|4^vnej z_?b&$fz}>g(qbfKQQIMCtBNlmS{E!qQT>r{Iq2inkHCKtqns+ez$sh{XHh$Z3&Ewh z!dExRxI<11PQN6o>%^c>4A#gkZSp0Nu@-gmB^;8KWVJ>PE|r7J#NZ}5xK3;dre6|+ z#rRK-Oecq~H}fTlc_xnz8`G@JE6}c+egU5juE7~!jQgwwcbHl%XPx$atCcZ* zgjUD&;o5M71X#8d^+KT4dfOClNW0H4ENY7+l0?YyxwOgQB}+ylOpePuhUK^(xkawb z4+~t{)qv9sLrGOn1~LC21iC0YXbH54YD>$K%qFy_YVB7d)zZ|HPhS*+v-$oN7op-< zi~5Z)MGXs`*+CJKf!qSEqS}h9{sPzCE^UypL_LXVUXyO=Ry)<|uxdxSI}nnNhQ9e# z&>7aQ4KGob(~VY(+8k)MW*uF3i+Yrn*q0Qv7#5)g1Gx(W(bLt-LT7LppK)aDV64N% zU=2SrI7t1Y`mr`8te(Q)Ay!hSe(CN5jZDecV@{5 zjAUY?Lpr#9pc8y77@8ZqI`K?zZ}$6cY2;>RzM~!m%klZHMn0MeI=h4J@ZuuR&_*^B zWdpO^VNcvTDa+Z7ON&<{oo1Ym-FlPRIAj>{hO+9mjfuYEz((A)3=d3W8{-N!H>23> zu8v%uzG@jht5(@v z&bzdqwimVK+7T4SOp$4?;&IubRWiK{T}Q0oa`ap?79Cod&!)CvliZeT^EruePwrMV z*BZ>V=@azvYOX9u+3JO{x40riS7cnfaJH4RT9pKFV!Tfd%;S^wr!t$OcF??ZX>*3b z6kpg5Av7A;k;4m2!KZ~4Mv>tR2U?TWw)vR+7jTS`5EnWSy{xfDnttT0OR9Tgs>f%= z72)e}Tn_(t>wMBdUeK-n?@D|L2l+VE^t0Cyl~UkYUT1guzspdP{BT6q_`g%&<-S|t z8w8qi1=7>gH4ptX~pHY`XD?arcT|r5k=R&S#w2tEb!Ma;3vLWh5EqucH z_bWwub6bwN@^nkyY-Mi9n>wyZd3w5lBZ7G{I01oYHLv@^EFf9&xFVxaTzk(@k6;~$ zmXHr`gNZ<~v}+^&%3T;bfK#67LuSiaPPtlAow6Ry!}1^|o6RFQC<$zWVlPq6O5TFN zkC-pd$dfY--HtlKCK)AT`|=4cj@zD3Pc9Jzu0Afd%#*4s;pHAIRS+LTI{y zhEUDejUX);E)$i>@LcbxPHW~dZO}PvYHaO57q{*jj~L(N9csz~$6Fgbn(FS(IFg@v zY*9x$oquBABj{#P3`}JkZR!G9NS>G7(#C$l-D8Rv#h=zKQw-Js63QJt&xxH;-6 z|Bq}wZnoNdCuDv>PgYOO=tm*die2pzb6nfHwVS$4ouDXYb^sR=$zWF-@78LJJrLzBt?lAF1Y8gE=qTXCt|op%7-!vr(;dgB-b-&OGMIkF;4q zZDIm}S)!Ig=mAF4P^b!hn=(zORVl=6D%@gk8Zi7?&=w6@Xc%ML_6C z_xK`C78A@xZNr+*_%b#HZru=bO$YX_=@Vk+vB+XZtdG0!^;AZdDn-rVM>Am>6MPb` zgu9A*Ox5RbT-Y%rFsv+grJ%iyxyccsyCO6DfVOuK3RG(itl~e$u1bg0e2K($Q#irF zU>bBQtyN$ypNv`eEH~I1xXTwAJ}AWc!JK5&3GE`$*CrTtb*atBvDI1dB@mRF1sF&& z=bMKY;t?mThMxs$p!9aPR$ySSysJ0q@5Dws%%FvCT!F8Xrme}Ku|f|=MY1P5i>85# zOas${eFq%cVECu6kP>_ru)=14iKe!9h19?>RP*v6&nPm-T!@bhwe+1A?)+$|`bqw1#Si49X@_xteg;upPN0y5soI7YE+RQvlZY)30=@>!#n`GToQqV}hbq9P~? z$~a~HsOk3#YTJu`&S#++YWqJA)P@b;sKE3}fmdt>zNToqKM#GyI@jjlwI0Qk@$*Cs$qB2=UJB~K_pQnroVas@t3P4e0tef~z*>I}c~3JhpoGwAIyi++vCvV5`r8>4Fqg+9A_2$Q z&GUHNS5QQii?~KXL?xOH4-rP@=lU87 zZu*$EL48b{8IIlg8SJ7tT;DYq2#os>b4Rs{(YWYA+ELg}IT6t5{`^Y64!vnf=> zp&}e4HuGOYbGXRZgwR<=!a;9OFh~U6+k1CZPJjItllHy!LlZ9g6ca{7K(5-H$g?6Q z2u9#}hUpK6{>D^EaLP4Tfv?Yo#mdN)gOYA9)HYBLSk50Ck@j#v+FviDwb=k`Ip9awv?QB5dYiWab&%I3t9}p2jmz0-}=MBL$Y_ zVMdpgkq=mhF%4SF@7K)sK@?$qg_;+}7J~TgmpE^vracY7h?K^WxAAaV7TtIrZ z&3VPtl1;>Fi3L|NSN3IH_VM~2-Cuyq{y=Ndab2yuSMkkyl8JBnU*aO

Xlap_oBW5o!Uwg^0J5x*0SJ8n}FeYi2O@|)z%hOw#IbVSeL9Nh)$k+?aW$os4a zjzt9KDS_#oAlf&F!}wg%CU=4e_oNJqV8~LU!2L~Iq z6(^CP8N5)B%Jg`n`gZW)Y#HXA#gIa6)CHJTQg9*UGvK0d`w^<3zzzWqwXBiRlJkiu zvi8I`?n2xGixBDulbUe3eDS4iJ_82HgdIn5L)g*L3d_qsJBN4Ym3{7RV zBigXzC>VXy$Cnj8j6X00EwicHWcO&tkvoc`0;HlyYp90$_Svh|lXS10aSEqutg`sc zb9FgJ-7;g+r*+*KEwL`?j})q93S4i7@HU#E+70As4N(VRYaq>0llWKP+R#4 zDNn30+m{F}b{A?dFsL0iER{sQ+6Sw;#{Q6S09n+9dYnH5psEf**XoNY?;OGJSP7DY2yOzx?oUMQN6IyiBkLj@N5 z&8+fNlvJ*A%*x1c+~}B9wf25b`RaQV$Hd!io9KuY&Z$%?#T#5K zz2&Pb*OXQ&3AUW_>he{kj#7`O%9CK5v7)ldv!(=9JyokcC2Jh0zNWmgL@BSTOt8iJ z{jc9;QW*~Xy+4}+L-16s@@-gI;_#MKl&>mr-0vv$DkZC`Zg;TJs~n?OF}7Y<&;LQ- z*t!+Wm7iBUD{sM#_|tDszZ`fvV!sjei)DJ>Tz3B--}8&oQ_Y|FPkxaKL(HG`pZuuY zfg$|g{k>*;5{Bx&s6!HIo;NjHq* zZ%7)43Mp3&=XoiKAAJ3|lyT82qY{T-KX}yWlxFEM51=oicMzD<%q zdC??FJ-^;M7TX}3J&xz&`P4*{YUTNXJfDnz^ph<%n^~T~4@kt6lK4ouS;&&FuY{c# z%UEhEmpX`c3eQpnF*UBIqsaC#pGkw0tN@nOv>swY4@yn8B_$cIHK)YJi~ z_SDo^Ia}+2C31LImQM=bD=2AQ| zc!&9q@ihZ}VD_5{b(_3ArTwg@G*((Lot!bFn9=%8GnKRf++Si0Sth>NG)K2*dYRONKFK6Y&dHM z7!uE>naqaR*;IBbxDH8RS*(jdBD7Y#90(lFBAAFLgKwX%~Ssqy_?mk*=m8(By6)FcfJzfni8<30#G=h`?~9M+sbw z^bCP?qy_@lAWbCy=0M6LFal{Efssi6NnjMxHw0*>+T!sTjWmV87^EvncwC3Xk|DY4 z@ivunEWpr#c#K1uO&|lQi)L^G(ls=L8zAuti?IDtt>&(L&f z!MkX>HzVCe)4c_0K7q+d1q7xb6%x1=X$gVbkg5sXj`SpfETn@3rlOOHB&}&k`v|}T zv+GD~KSD|&v1KDYPhbXyc8tJG4E9YDnmVGRY6dLGg+0`rk35^y0cqII|%shmJQQkWK`04mT* z3$g&|QvwT->S<-%5P66|AyPao(ITwIXaYq@O9?EFfh7RX5@jjUK3c|QNS_i|j%1_t zEJkANcRc$sUJ8K{fb|4c0Mrmz3E(HN3g7_(r2r2RCz*W2?Fa;bcw+I0PO@e0CaKyKLzL_Py^6SU?V`7KrO&@0bmnAHUU4tJp?ub+)Lo! z04fLs04fPQ0I-(8g8&OefQJAs5ZD56k-%1fO9X-d-300Y!UR-o2%7}(Fes@6eg>1) zWx%~|2k0j7DCR|eoqr5~e)0~}$N@YKOJ-7@M9~K{(_dht%OKhQ0~C?KUhMdGYW_5K zJQayOMO4`Wiv5?dE}q5KH=7g1Y)*i>wa1F=+havN;8&nnsjpZaTTk=nP-G6ihZ3t} z?`icj)G<5lVMwjQG-hgLHt#9wsT||ew=e6z>g##%>6wnnxo2QKMNcu>WqrllBk&$M zKVw=%)OmzSaod@|IE);BKh6Ff`B&kDEJ(PDW82tE`|2D&XW2s!57}uxcbU)K=5r6L zf27Xw1bgU(I!6RY>O|^C>cqiA#k05hMD`~>i5=xfu;ctl_E&xsJI{|{m-*?86RwBz zx`A1R@hnNW3DM64HdvU*MhTg0oNzO{Nw|eg6ehFD!kzGK^VuxnZZ=2AXT?GRw0HsA zBowkog+=T+p@oH5}@1*l_73Rw%s=pZW${DYdZG(p&64sg?aydYe5cy~FCH!)%xINA{fbC-#c; zE_+k@GkafpkDZZ@uzyHL87CiSiTK~w7U2IsTPdHyW$1@&gRH|ff5je@FR;hui|iTs z5<4!pv(MxX_N5%hotNXePC0?=mJ_*n%K+|fOA1$FN#)jB(zt)K4B>*7q1+zJFm9ja zD(*GQaPCi*tGT~f(z)}NYdFI)l1sLZ;s#kKa>J}Qa}Mid?k4MP+-&RZ+`ZPRTovsB z^ViJJf(DRwFs$ITD3#)tOxQdQC5TF}T8~3l=y$8o49h2)LCh@SRg*@KE@1`?A!lw< zCT2m)BK5PxkFe8uGoZ;8kF%%Dp5VNtY_=CT9&Lw9)7aByPjD2{817l{M`Q&_59eNp z^4TO;v3;N?f&QRe&R&Yr&&xM(^=L~GYo|Pt`(2d(Fl!NO06hhChqb_@(p)*Tqg_Cw zlY~lyX9J@YqQ(JRV5wH2H1fk%glJ%44cw=JBvFPoXp{hJfDGA$2nB*g{fKyB7HHn6 zAF+L89)M8aPW52{3(>=aM&Ao}H_`RiHwQxvFi(Y!VK&S2@! z&^Y7!j|)aUG7j7K-q(Gvo=E+eqK@^~f1a^%|Ij-&-|x>SMvuK?d}8%t^jN<4&0c^o z*o!2DeYDcQrfKdc+Hcrc1~tXww^UjWS`$RW*vnM!Kk4y1dNk1E6?*)h9i7# zxo}>%B;a%)4ira2R7rTe4@C99k$Z;&_1 z56WN4=jBd0XxVQ0xn-ASujN;k=PfT=es5{CG+Wv%?^xcqoV1*_d};|uPJ2wHnHuh8W3$bBK!PAQ&hPTjmk-`7=D@5wZ#JZxnA_ zgQ$(va0hCRgK4rLuHA*_T$m#Zg1Kk$d;@D^Vdt?p7WNfZ!ouS5e|}ro&D<+^W^%7$ zfyP7VHgG$DEt|m(;+cl?pw&G2n0ty97q6^V%1Z77m~ltJ9dn!uh*VKpQt4Yu=$_J* z_t8NgICj5R3hcq1T$QJEL#d~V6_>22@+d54cK-Z@u51*}n>RlvcP=YlQ&L{ZvgcHm zE5#)h71#cxnq}vgt}ge2(X~I>uyXB&l|=BC_7=}AEiEoEul>AcjVZYW3uffZFJRfd zB~-w&bG<7)mXWW_E21+l&&vVFr8IZ-s07zN?AFi zq9~py1;g&8L~BN0D`W5CD3~)pH$Q(qJby9f5{2bnFuNb5x%2a8FPJ|AXrcM4@RpX+ za?HCcZ^pb_09^V2vAp8Bi{>qyO9J+kmaM{y?nEj}X+VUODq5r&cg)F~MLl7BzP068 z9bY9~jDX^H<Jk3(D6Ji{g7qOV+L^F;|>4tfHD0wGXi$O(8{b z!GsjgShWg<#mkE4u2qVCUR?U4S!5rstR%f!socMoI-q@J3g1Lg?J#k4Z6W;9k~QE| zTuHkWZz?DwH7$ce5&>6+3)hr*N&RVL=9+{Woj+sV(wXz~=g!E>nY9#qe(u7Y+@%Ez za^}n*f5#8inLB6Z4^)~pKko+_!Iptb^b1TMWX>q^U4~VcZeZpDRFsx_ic3wSUG8Dd zIdgN_OkY_UL|0b6@*Y;QW^DzF8T*JJyitL8SFjcLE2YI%K84{k6xnW8QCeME!OAL1 zR(ly1^`5GVRcr;xhe0cd=}MnxEhA5Z4X9Mzhy55?fC