!ABCIncludeFile

 OMIT('_EndOfInclude_',_UNISOFTPresente_)
_UNISOFTPresente_ EQUATE(1)

   ! Este archivo tiene los equate de los errores . Ejemplo : LEVEL:Fatal
   INCLUDE('aberror.inc')
   ! Este Archivo tiene los equates de EventAction:Foward, etc.
   INCLUDE('abbrowse.inc')
   !
   INCLUDE('abwindow.inc')

   INCLUDE('uni_str.INC'),ONCE   
   ! Este archivo tiene la clase string de unisoft, que tambien es usada en la sql class

! Definición de EQUATES usados por esta librería
STOP  EQUATE(0)
PLAY  EQUATE(1)
PAUSE EQUATE(2)

! Definicion de Equates para Manejo Local de Errores
Msg:FalloComando        EQUATE(20000)
Msg:ClaseArchivo        EQUATE(20001) ! Este es un Equate generico de la clase Archivos
Msg:ClaseSonido         EQUATE(20002) ! Este es un Equate generico de la clase Archivos

! Definición de la Clase MisErrores
! Este es un ejemplo de creación de clases mediante
! derivan de una clase base.
MisErrores  CLASS(ErrorClass),MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
            END

! Los errores deben ser insertados utilizando un Grupo
! con ciertas características. El parametro Number nos dice
! cuantos errores hay en el grupo (en este caso 3).
MiBloqueDeErrores   GROUP
Number      USHORT(3)
            USHORT(Msg:FalloComando)
            BYTE(Level:Notify)
            PSTRING('MCI Clase Error')
            PSTRING('El Comando MCI ha fallado')
            USHORT(Msg:ClaseArchivo)
            BYTE(Level:Notify)
            PSTRING('Archivos Clase Error')
            PSTRING('Error')
            USHORT(Msg:ClaseSonido)
            BYTE(Level:Notify)
            PSTRING('Sonido Clase Error')
            PSTRING('Error')
            END!GROUP

! --------------- Declaración de las Clases ------------

Archivo CLASS(),TYPE,MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
Nombre      CSTRING(512)
Extension   STRING(3)
Existe      BYTE
Tipo        STRING(30)
Pick        PROCEDURE,VIRTUAL
Copiar      PROCEDURE(String st),VIRTUAL
Borrar      PROCEDURE
       END

MCIClass CLASS(Archivo),TYPE,MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
Comando     CSTRING(128)
Error       LONG
ErrorTexto  CSTRING(128)
Respuesta   CSTRING(128)
WinHandle   LONG
Estado      string(20)
Step        SHORT
Destruct    PROCEDURE
Estado      PROCEDURE
Comando     PROCEDURE(String co),BYTE
Pick        PROCEDURE,VIRTUAL
Play        PROCEDURE,VIRTUAL
Pause       PROCEDURE
Rewind      PROCEDURE
Stop        PROCEDURE
Foward      PROCEDURE
Pick_Play   PROCEDURE
StepByStep  PROCEDURE
    END

Video    CLASS(MCIClass),TYPE,MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
Construct   PROCEDURE
Init        PROCEDURE
Init        PROCEDURE(LONG id)   ! Ejemplo de Overloading
Pick        PROCEDURE,VIRTUAL
   END

Sonido CLASS(MCIClass),TYPE,MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
Esperar     BYTE
Construct   PROCEDURE
Play        PROCEDURE,VIRTUAL
Pick        PROCEDURE,VIRTUAL
Record      PROCEDURE
    END

! ********************************* Clase Profiler *************************************
! Objetivo : Esta clase sirve para medir tiempos entre puntos de codigo así como tambien
! registrar estos tiempos en un Archivo ASCII que sirve para un posterior analisis.
! **************************************************************************************

ProfilerClass   CLASS,MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
HoraInicio          LONG
HoraFin             LONG
Tiempo              LONG    ! El Ultimo tiempo que se registro
UsarLog             BYTE(0) ! Si esta prendida registra la actividad en un archivo
UsarVentana         BYTE(1) ! Si esta prendida muestra una ventana
Mascara             STRING(10) ! Que mascara deberá usar
Inicio              PROCEDURE()
Fin                 PROCEDURE(String st)
MostrarLog          PROCEDURE()
                END

ProfilerClass_Log   FILE,DRIVER('ASCII'),NAME('Profiler.log'),Pre(PLog),CREATE
Record          RECORD,PRE()
Fecha               STRING(10)
Inicio              STRING(10)
Fin                 STRING(10)
Descripcion         STRING(40)
Tiempo              STRING(10)
                END
              END

! Definicion Local de un objeto profiler
! para ser usado unicamente dentro de este
! módulo. Es un ejemplo de colaboración entre la clase
! profiler y Sondidos.
MiProfilerLocal ProfilerClass


!---------------------------------------------------------
! Clase    : SonidosColeccion
! Objetivo : Ejemplo Complejo de Agregación - Composición
!---------------------------------------------------------
! Esta cola de Memoria tiene el atributo Type para que sirva
! como un Tipo de Cola de Memoria. Es decir, no queremos instanciarla
! en este momento.
!---------------------------------------------------------

MiQueueSonidos QUEUE,TYPE
NroArchivo      LONG
Descripcion     STRING(100)
UnSonido        &Sonido ! UnSonido hace referencia a un Objeto de Tipo Sonido (clase)
               END

! La clase SonidosColeccion tiene que objetivo encapsular
! el tratamiento de una Lista de Sonidos
! Debido a que no es posible incluir un QUEUE dentro de una clase
! entonces tenemos que incluirla mediante una Referencia (&).

SonidosColeccion  CLASS(),MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
Items               &MiQueueSonidos
Item                LONG
Construct           PROCEDURE
Destruct            PROCEDURE
Agregar             PROCEDURE(String  st)
Borrar              PROCEDURE(LONG id)
CantItems           PROCEDURE,LONG
PlayItem            PROCEDURE(LONG id)
                   END

!---------------------------------------------------------
!-- Estas Clases son !!!BONUS !!!!
!---------------------------------------------------------
! Permite moverse en un EDIT IN PLACE usando el ENTER !!
! Atención : Reemplaza al Enter que normalmente significa
! completar el ingreso.
!---------------------------------------------------------

EditClassConEnter   CLASS(EditClass),MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
TakeEvent              PROCEDURE(UNSIGNED Event),BYTE,VIRTUAL
                    END

EditClassSpin       CLASS(EditClassConEnter),MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
Init                   PROCEDURE(UNSIGNED FieldNumber,UNSIGNED ListBox,*? UseVar),VIRTUAL
                    END

EditClassCheck      CLASS(EditClassConEnter),MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
Init                   PROCEDURE(UNSIGNED FieldNumber,UNSIGNED ListBox,*? UseVar),VIRTUAL
                    END

EditClassDrop       CLASS(EditClassConEnter),MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
PropFrom            STRING(255)
Init                   PROCEDURE(UNSIGNED FieldNumber,UNSIGNED ListBox,*? UseVar),VIRTUAL
                    END

!---------------------------------------------------------
! *******************************************************************
! Direccion Class
! *******************************************************************

DireccionCLASS  CLASS,MODULE('UNISOFT.CLW'),LINK('UNISOFT.CLW',_ABCLinkMode_),DLL(_ABCDllMode_)
Texto           STRING(100)
Calle           STRING(50)
Numero          LONG
NumeroHasta     LONG
Piso            STRING(10)
Departamento    STRING(10)

Dir             &StringClass, PRIVATE
Construct       PROCEDURE()
Destruct        PROCEDURE()
Init            PROCEDURE()
Interpretar     PROCEDURE(String st), BYTE
    END

  _EndOfInclude_