;;  FICHERO PARA LA INCLUSIąN DE LAS FUNCIONES DE GRAPH.LIB
;;              NAVI DJ.     VILAMARXANT 1996

extrn DBorraPantalla:far
extrn DPonPixel:far
extrn DCogePixel:far
extrn DLinea:far
extrn DCreaVirtual:far
extrn DDestVirtual:far
extrn DCopiaPantalla:far
extrn DTrataError:far
extrn DCargaSprite:far
extrn DDibujaSprite:far
extrn DDestSprite:far
extrn DVaciaMEM:far
extrn DfDibujaSprite:far
extrn DfLinea:far
extrn DfPonPixel:far
extrn DfCogePixel:far
extrn DfBorraPantalla:far
extrn DCogeColor:far
extrn DPonColor:far
extrn DCogePaleta:far
extrn DPonPaleta:far
extrn DFadeDown:far
extrn DCargaPaleta:far
extrn DFadeUp:far
extrn DFadeTo:far
extrn DBlackOut:far
extrn DCargaCel:far
extrn DCargaAnima:far
extrn DPonFrameAnima:far
extrn DfPonFrameAnima:far
extrn DDestAnima:far
extrn DInsertaDirSprite:far
extrn DInsertaDirAnima:far
extrn DSegmentoSprite:far
extrn DSegmentoAnima:far
extrn DSegmentoPal:far
extrn DSegmentoPV:far
extrn DInsertaDirPV:far
extrn DInsertaDirPal:far
extrn DDescompPuntos:far
extrn DDescompWorm:far
extrn DfCaja:far
extrn DCaja:far
extrn DfRectangulo:far
extrn DRectangulo:far
extrn DPoligono:far
extrn DfPoligono:far
extrn DCreaSprite:far
extrn DCambiaSprites:far
extrn DGetImagen:far
extrn DfGetImagen:far
extrn DCirculo:far
extrn DfCirculo:far
extrn DLeePCX:far
extrn DDestPaleta:far
extrn DLeeBMP:far
extrn DPlayFLI:far
extrn DInicGRAPH:far
extrn DEndGRAPH:far
extrn DCargaFuente:far
extrn DCambiaTipo:far
extrn DQueTipo:far
extrn DEscLetra:far
extrn DCogeFuenteDOS:far
extrn DSetCursor:far
extrn DGetCursor:far
extrn DEscribe:far
extrn DLeeLetra:far
extrn DLeeLetraEcho:far
extrn DLeeByte:far
extrn DLeeCadena:far
extrn DLeeWord:far
extrn DEscByte:far
extrn DEscWord:far
extrn DWrite:far
extrn DNuevoArchivo:far
extrn DLeeEntrada:far
extrn DLeeTrozo:far
extrn DLongitudFile:far
extrn DFlipCopy:far
extrn DFlip:far
extrn DSegmentoFuente:far
extrn DSetStart:far
extrn DDoblaLineas:far
extrn DSetVSPixels:far
extrn DPideXMS:far
extrn DLiberaXMS:far
extrn DGetAddress:far
extrn DMaximaXMS:far
extrn DGuardaFlat:far
extrn DCargaFlat:far
extrn DCargaBloque:far
extrn DCargaMapa:far
extrn DDestBloque:far
extrn DDestMapa:far
extrn DDibujaMapa:far
extrn DPosMapa:far
extrn DInsertaDirBloque:far
extrn DInsertaDirMapa:far
extrn DSegmentoBloque:far
extrn DSegmentoMapa:far
extrn DResetGRAPH:far
extrn DModoGrafico:far
extrn DModoTexto:far
extrn DCreaMapa:far
extrn DCreaBloque:far
extrn DDestFuente:far
extrn DInsertaDirFuente:far
extrn DGetSysInfo:far

extrn Aleatorio:far

extrn LERROR:far                       ;  La variable de errores.
extrn Registro:far                     ;  El n§ de campo total.

INCLUDELIB GRAPH

;;  Funciones y macros adicionales de utilidad.

LiberaMEM       PROC                    ;  Funci¢n que libera la memoria
                MOV     BX, SS          ; reservada por el DOS a nuestro
                MOV     AX, ES          ; programa y que no es utilizada.
                SUB     BX, AX          ;  ES debe contener el PSP.
                MOV     AX, SP
                ADD     AX, 15d
                MOV     CL, 4
                SHR     AX, CL
                ADD     BX, AX
                MOV     AH, 4Ah
                INT     21h
                RET
LiberaMEM       ENDP

WaitVR          MACRO                   ;  Espera el retrazo vertical.
                PUSH    DX 
                PUSH    AX
                MOV     DX,03DAh
        @@St1:  IN      AL,DX
                TEST    AL,08h
                JZ    @@St1
        @@St2:  IN      AL,DX
                TEST    AL,08h
                JNZ   @@St2
                POP     AX 
                POP     DX
                ENDM

;;  ­Cuanto se hechan en falta este par de instrucciones!

XPUSH          MACRO regmem            ; apilar lista de registros
                 IRP rm, <regmem>
                   PUSH rm
                 ENDM
               ENDM

XPOP           MACRO regmem            ; desapilar lista de registros
                 IRP rm, <regmem>
                   POP rm
                 ENDM
               ENDM

;;  Aqui est n las MACROS de llamada de todas las funciones y procedimientos.

CargaAnima      MACRO
                XPUSH   <DS, BP, ES>
                CALL    DWORD PTR CS:[DCargaAnima]
                XPOP    <ES, BP, DS>
                ENDM
                
PonFrameAnima   MACRO
                XPUSH   <ES, DS>
                PUSHA
                CALL    DWORD PTR CS:[DPonFrameAnima]
                POPA
                XPOP    <DS, ES>
                ENDM

fPonFrameAnima  MACRO
                XPUSH   <ES, DS>
                PUSHA
                CALL    DWORD PTR CS:[DfPonFrameAnima]
                POPA
                XPOP    <DS, ES>
                ENDM

DestAnima       MACRO
                PUSH    ES
                PUSHA
                CALL    DWORD PTR CS:[DDestAnima]
                POPA
                POP     ES
                ENDM


CogeColor       MACRO
                PUSH    DX
                CALL    DWORD PTR CS:[DCogeColor]
                POP     DX
                ENDM

PonColor        MACRO
                PUSH    DX
                CALL    DWORD PTR CS:[DPonColor]
                POP     DX
                ENDM

CogePaleta      MACRO
                XPUSH   <ES, DI>
                CALL    DWORD PTR CS:[DCogePaleta]
                XPOP    <DI, ES>
                ENDM

PonPaleta       MACRO
                XPUSH   <ES, DI>
                CALL    DWORD PTR CS:[DPonPaleta]
                XPOP    <DI, ES>
                ENDM

CargaPaleta     MACRO
                XPUSH   <DS, BX, CX, ES>
                CALL    DWORD PTR CS:[DCargaPaleta]
                XPOP    <ES, CX, BX, DS>
                ENDM

FadeDown        MACRO
                PUSHA
                CALL    DWORD PTR CS:[DFadeDown]
                POPA
                ENDM

FadeUp          MACRO
                PUSHA
                CALL    DWORD PTR CS:[DFadeUp]
                POPA
                ENDM

FadeTo          MACRO
                PUSHA
                PUSH    ES
                CALL    DWORD PTR CS:[DFadeTo]
                POP     ES
                POPA
                ENDM

BlackOut        MACRO
                XPUSH   <DX, CX>
                CALL    DWORD PTR CS:[DBlackOut]
                XPOP    <CX, DX>
                ENDM

DestPaleta      MACRO
                XPUSH   <BX, ES>
                CALL    DWORD PTR CS:[DDestPaleta]
                XPOP    <ES, BX>
                ENDM

PonPixel        MACRO
                PUSH    ES
                PUSHA
                CALL    DWORD PTR CS:[DPonPixel]
                POPA
                POP     ES
                ENDM

fPonPixel       MACRO
                PUSH    ES
                PUSHA
                CALL    DWORD PTR CS:[DfPonPixel]
                POPA
                POP     ES
                ENDM

BorraPantalla   MACRO
                PUSHAD
                PUSH    ES
                CALL    DWORD PTR CS:[DBorraPantalla]
                POP     ES
                POPAD
                ENDM

fBorraPantalla  MACRO
                PUSHAD
                PUSH    ES
                CALL    DWORD PTR CS:[DfBorraPantalla]
                POP     ES
                POPAD
                ENDM

CogePixel       MACRO
                XPUSH   <ES, DI, SI>
                CALL    DWORD PTR CS:[DCogePixel]
                XPOP    <SI, DI, ES>
                ENDM

fCogePixel      MACRO
                XPUSH   <ES, DI, SI>
                CALL    DWORD PTR CS:[DfCogePixel]
                XPOP    <SI, DI, ES>
                ENDM

Rectangulo      MACRO
                PUSHA
                CALL    DWORD PTR CS:[DRectangulo]
                POPA
                ENDM

fRectangulo     MACRO
                PUSHA
                CALL    DWORD PTR CS:[DfRectangulo]
                POPA
                ENDM

Circulo         MACRO
                PUSHA
                CALL    DWORD PTR CS:[DCirculo]
                POPA
                ENDM

fCirculo        MACRO
                PUSHA
                CALL    DWORD PTR CS:[DfCirculo]
                POPA
                ENDM

ModoGrafico     MACRO
                CALL    DWORD PTR CS:[DModoGrafico]
                ENDM

ModoTexto       MACRO
                CALL    DWORD PTR CS:[DModoTexto]
                ENDM

Linea           MACRO
                PUSHA
                PUSH    ES
                CALL    DWORD PTR CS:[DLinea]
                POP     ES
                POPA
                ENDM

fLinea          MACRO
                PUSHA
                PUSH    ES
                CALL    DWORD PTR CS:[DfLinea]
                POP     ES
                POPA
                ENDM

Caja            MACRO
                PUSHA
                PUSH    ES
                CALL    DWORD PTR CS:[DCaja]
                POP     ES
                POPA
                ENDM

fCaja           MACRO
                PUSHA
                PUSH    ES
                CALL    DWORD PTR CS:[DfCaja]
                POP     ES
                POPA
                ENDM

Poligono        MACRO
                PUSHA
                PUSH    DS
                CALL    DWORD PTR CS:[DPoligono]
                POP     DS
                POPA
                ENDM

fPoligono       MACRO
                PUSHA
                PUSH    DS
                CALL    DWORD PTR CS:[DfPoligono]
                POP     DS
                POPA
                ENDM


CreaVirtual     MACRO
                XPUSH   <BX, CX, DX>
                CALL    DWORD PTR CS:[DCreaVirtual]
                XPOP    <DX, CX, BX>
                ENDM

CopiaPantalla   MACRO
                PUSHA
                XPUSH   <DS, ES>
                CALL    DWORD PTR CS:[DCopiaPantalla]
                XPOP    <ES, DS>
                POPA
                ENDM

DestVirtual     MACRO
                PUSHA
                PUSH    ES
                CALL    DWORD PTR CS:[DDestVirtual]
                POP     ES
                POPA
                ENDM


SegmentoPV      MACRO
                XPUSH   <AX, BX>
                CALL    DWORD PTR CS:[DSegmentoPV]
                XPOP    <BX, AX>
                ENDM

SegmentoPal     MACRO
                XPUSH   <AX, BX>
                CALL    DWORD PTR CS:[DSegmentoPal]
                XPOP    <BX, AX>
                ENDM

SegmentoSprite  MACRO
                XPUSH   <AX, BX>
                CALL    DWORD PTR CS:[DSegmentoSprite]
                XPOP    <BX, AX>
                ENDM

SegmentoAnima   MACRO
                XPUSH   <AX, BX>
                CALL    DWORD PTR CS:[DSegmentoAnima]
                XPOP    <BX, AX>
                ENDM

VaciaMEM        MACRO
                XPUSH   <AX, CX>
                CALL    DWORD PTR CS:[DVaciaMEM]
                XPOP    <CX, AX>
                ENDM

TrataError      MACRO
                CALL    DWORD PTR CS:[DTrataError]
                ENDM

InsertaDirPV    MACRO
                PUSH    BX
                CALL    DWORD PTR CS:[DInsertaDirPV]
                POP     BX
                ENDM

InsertaDirPal   MACRO
                PUSH    BX
                CALL    DWORD PTR CS:[DInsertaDirPal]
                POP     BX
                ENDM

InsertaDirSprite MACRO
                PUSH    BX
                CALL    DWORD PTR CS:[DInsertaDirSprite]
                POP     BX
                ENDM

InsertaDirAnima MACRO
                PUSH    BX
                CALL    DWORD PTR CS:[DInsertaDirAnima]
                POP     BX
                ENDM


CargaSprite     MACRO
                XPUSH   <DS, BP, ES>
                CALL    DWORD PTR CS:[DCargaSprite]
                XPOP    <ES, BP, DS>
                ENDM

DestSprite      MACRO
                PUSH    ES
                PUSHA
                CALL    DWORD PTR CS:[DDestSprite]
                POPA
                POP     ES
                ENDM

CambiaSprites   MACRO
                PUSHA
                CALL   CS:[DCambiaSprites]
                POPA
                ENDM

CreaSprite      MACRO
                CALL    DWORD PTR CS:[DCreaSprite]
                ENDM

DibujaSprite    MACRO
                XPUSH   <DS, ES>
                PUSHA
                CALL    DWORD PTR CS:[DDibujaSprite]
                POPA
                XPOP    <ES, DS>
                ENDM

fDibujaSprite   MACRO
                XPUSH   <DS, ES>
                PUSHA
                CALL    DWORD PTR CS:[DfDibujaSprite]
                POPA
                XPOP    <ES, DS>
                ENDM

CargaCEL        MACRO
                XPUSH   <DS, ES>
                PUSHA
                CALL    DWORD PTR CS:[DCargaCEL]
                POPA
                XPOP    <ES, DS>
                ENDM

GetImagen       MACRO
                XPUSH   <DS, ES, BX, CX, DX, DI, SI>
                CALL    DWORD PTR CS:[DGetImagen]
                XPOP    <SI, DI, DX, CX, BX, ES, DS>
                ENDM

fGetImagen      MACRO
                XPUSH   <DS, ES, BX, CX, DX, DI, SI>
                CALL    DWORD PTR CS:[DfGetImagen]
                XPOP    <SI, DI, DX, CX, BX, ES, DS>
                ENDM

DescompPuntos   MACRO
                PUSHAD
                CALL    DWORD PTR CS:[DDescompPuntos]
                POPAD
                ENDM

DescompWorm     MACRO
                PUSHAD
                PUSH    ES
                CALL    DWORD PTR CS:[DDescompWorm]
                POP     ES
                POPAD
                ENDM

LeePCX          MACRO
                CALL    DWORD PTR CS:[DLeePCX]
                ENDM

;;  Nuevas en GRAPH 2.0

LeeBMP          MACRO
                CALL    DWORD PTR CS:[DLeeBMP]
                ENDM

InicGRAPH       MACRO
                CALL    DWORD PTR CS:[DInicGRAPH]
                ENDM

EndGRAPH        MACRO
                CALL    DWORD PTR CS:[DEndGRAPH]
                ENDM

CambiaTipo      MACRO
                CALL    DWORD PTR CS:[DCambiaTipo]
                ENDM

QueTipo         MACRO
                CALL    DWORD PTR CS:[DQueTipo]
                ENDM

SetCursor       MACRO
                CALL    DWORD PTR CS:[DSetCursor]
                ENDM

GetCursor       MACRO
                CALL    DWORD PTR CS:[DGetCursor]
                ENDM

CargaFuente     MACRO
                XPUSH   <DS, CX, ES, DI>
                CALL    DWORD PTR CS:[DCargaFuente]
                XPOP    <DI, ES, CX, DS>
                ENDM

CogeFuenteDOS   MACRO
                XPUSH   <ES, BP, DS, BX, CX, DX, SI, DI>
                CALL    DWORD PTR CS:[DCogeFuenteDOS]
                XPOP    <DI, SI, DX, CX, BX, DS, BP, ES>
                ENDM

EscLetra        MACRO
                XPUSH   <ES, BP, DS>
                PUSHA
                CALL    DWORD PTR CS:[DEscLetra]
                POPA
                XPOP    <DS, BP, ES>
                ENDM

Escribe         MACRO
                XPUSH   <DX, AX, SI>
                CALL    DWORD PTR CS:[DEscribe]
                XPOP    <SI, AX, DX>
                ENDM

LeeLetra        MACRO
                CALL    DWORD PTR CS:[DLeeLetra]
                ENDM

LeeLetraEcho    MACRO
                PUSH    CX
                CALL    DWORD PTR CS:[DLeeLetraEcho]
                POP     CX
                ENDM

LeeByte         MACRO
                PUSHA
                XPUSH   <DS, ES>
                CALL    DWORD PTR CS:[DLeeByte]
                XPOP    <ES, DS>
                POPA
                ENDM

LeeCadena       MACRO
                CALL    DWORD PTR CS:[DLeeCadena]
                ENDM

LeeWord         MACRO
                PUSHA
                XPUSH   <DS, ES>
                CALL    DWORD PTR CS:[DLeeWord]
                XPOP    <ES, DS>
                POPA
                ENDM

EscByte         MACRO
                PUSHA
                PUSH    DS
                CALL    DWORD PTR CS:[DEscByte]
                POP     DS
                POPA
                ENDM

EscWord         MACRO
                PUSHA
                PUSH    DS
                CALL    DWORD PTR CS:[DEscWord]
                POP     DS
                POPA
                ENDM

Write           MACRO
                PUSHA
                CALL    DWORD PTR CS:[DWrite]
                POPA
                ENDM

NuevoArchivo    MACRO
                XPUSH   <CX, DI, ES>
                CALL    DWORD PTR CS:[DNuevoArchivo]
                XPOP    <ES, DI, CX>
                ENDM

LeeEntrada      MACRO
                PUSH    DS
                PUSHA
                CALL    DWORD PTR CS:[DLeeEntrada]
                POPA
                POP     DS
                ENDM

LeeTrozo        MACRO
                PUSH    DS
                PUSHA
                CALL    DWORD PTR CS:[DLeeTrozo]
                POPA
                POP     DS
                ENDM

LongitudFile    MACRO
                XPUSH   <DS, AX, BX, CX, DX>
                CALL    DWORD PTR CS:[DLongitudFile]
                XPOP    <DX, CX, BX, AX, DS>
                ENDM

FlipCopy        MACRO
                XPUSH   <DS, ES>
                PUSHA
                CALL    DWORD PTR CS:[DFlipCopy]
                POPA
                XPOP    <ES, DS>
                ENDM

Flip            MACRO
                PUSHA
                CALL    DWORD PTR CS:[DFlip]
                POPA
                ENDM

SegmentoFuente  MACRO
                PUSHA
                CALL    DWORD PTR CS:[DSegmentoFuente]
                POPA
                ENDM

DoblaLineas     MACRO
                PUSH    DX
                CALL    DWORD PTR CS:[DDoblaLineas]
                POP     DX
                ENDM

SetStart        MACRO
                XPUSH   <DX, AX>
                CALL    DWORD PTR CS:[DSetStart]
                XPOP    <AX, DX>
                ENDM

SetVSPixels     MACRO
                PUSH    DX
                CALL    DWORD PTR CS:[DSetVSPixels]
                POP     DX
                ENDM

PideXMS         MACRO
                PUSH    AX
                CALL    DWORD PTR CS:[DPideXMS]
                POP     AX
                ENDM

LiberaXMS       MACRO
                PUSHA
                CALL    DWORD PTR CS:[DLiberaXMS]
                POPA
                ENDM

GetAddress      MACRO
                PUSH    AX
                CALL    DWORD PTR CS:[DGetAddress]
                POP     AX
                ENDM

MaximaXMS       MACRO
                CALL    DWORD PTR CS:[DMaximaXMS]
                ENDM

GuardaFlat      MACRO
                XPUSH   <DS, GS, EDI, ES, SI>
                CALL    DWORD PTR CS:[DGuardaFlat]
                XPOP    <SI, ES, EDI, GS, DS>
                ENDM

CargaFlat       MACRO
                PUSHA
                XPUSH   <DS, GS, EDI, EDX>
                CALL    DWORD PTR CS:[DCargaFlat]
                XPOP    <EDX, EDI, GS, DS>
                POPA
                ENDM

CargaBloque     MACRO
                XPUSH   <DI, SI, DX, CX, BX, DS, ES>
                CALL    DWORD PTR CS:[DCargaBloque]
                XPOP    <ES, DS, BX, CX, DX, SI, DI>
                ENDM

CargaMapa       MACRO
                XPUSH   <DI, SI, DX, CX, BX, DS, ES>
                CALL    DWORD PTR CS:[DCargaMapa]
                XPOP    <ES, DS, BX, CX, DX, SI, DI>
                ENDM

DestBloque      MACRO
                PUSHA
                PUSH    ES
                CALL    DWORD PTR CS:[DDestBloque]
                POP     ES
                POPA
                ENDM

DestMapa        MACRO
                PUSHA
                PUSH    ES
                CALL    DWORD PTR CS:[DDestMapa]
                POP     ES
                POPA
                ENDM

DibujaMapa      MACRO
                PUSHAD
                XPUSH   <ES, DS, GS, FS>
                CALL    DWORD PTR CS:[DDibujaMapa]
                XPOP    <FS, GS, DS, ES>
                POPAD
                ENDM

PosMapa         MACRO
                XPUSH   <BP, DS>
                CALL    DWORD PTR CS:[DPosMapa]
                XPOP    <DS, BP>
                ENDM

InsertaDirBloque MACRO
                PUSH    BX
                CALL    DWORD PTR CS:[DInsertaDirBloque]
                POP     BX
                ENDM

InsertaDirMapa  MACRO
                PUSH    BX
                CALL    DWORD PTR CS:[DInsertaDirMapa]
                POP     BX
                ENDM

ResetGRAPH      MACRO
                CALL    DWORD PTR CS:[DResetGRAPH]
                ENDM

SegmentoBloque  MACRO
                XPUSH   <AX, BX>
                CALL    DWORD PTR CS:[DSegmentoBloque]
                XPOP    <BX, AX>
                ENDM

SegmentoMapa    MACRO
                XPUSH   <AX, BX>
                CALL    DWORD PTR CS:[DSegmentoMapa]
                XPOP    <BX, AX>
                ENDM

PlayFLI         MACRO
                XPUSH   <DS, ES>
                PUSHAD
                CALL    DWORD PTR CS:[DPlayFli]
                POPAD
                XPOP    <ES, DS>
                ENDM

CreaMapa        MACRO
                XPUSH   <BX, CX, DX>
                CALL    DWORD PTR CS:[DCreaMapa]
                XPOP    <DX, CX, BX>
                ENDM

CreaBloque      MACRO
                XPUSH   <BX, CX, DX>
                CALL    DWORD PTR CS:[DCreaBloque]
                XPOP    <DX, CX, BX>
                ENDM

DestFuente      MACRO
                PUSHA
                PUSH    ES
                CALL    DWORD PTR CS:[DDestFuente]
                POP     ES
                POPA
                ENDM

InsertaDirFuente MACRO
                PUSH    BX
                CALL    DWORD PTR CS:[DInsertaDirFuente]
                POP     BX
                ENDM

GetSysInfo      MACRO
                CALL    DWORD PTR CS:[DGetSysInfo]
                ENDM
