First commit 10/04/1996

This commit is contained in:
2021-09-08 21:34:51 +02:00
commit 43a19f54da
11 changed files with 869 additions and 0 deletions

261
PRN_CNT.BAS Normal file
View File

@ -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<EFBFBD>n |
| FUNCION_YA_REGISTRADA No es la 1<EFBFBD> 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<EFBFBD>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<EFBFBD>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<EFBFBD> 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<EFBFBD>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
. . . . <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . <-- 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<63>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
/*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>F<EFBFBD>I<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>D<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD>B<EFBFBD>E<EFBFBD>C<EFBFBD>E<EFBFBD>R<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/