Metropoli BBS
VIEWER: crysload.asm MODE: TEXT (CP437)
;****************************************************************************
;*	Module contenant des fonctions DOS de base pour réserver de la
;*	RAM, ATTENTION toutes ces fonctions sont de type NEAR
;*
;* Programmé par Sébastien Granjoux
;* Commencé le 20/12/94
;* Modification le 02/01/95

IDEAL
P386N

PUBLIC	UNLOADMOD

INCLUDE "CRYSLOAD.INC"
INCLUDE	"CRYSERR.INC"

SEGMENT CSEG PARA PUBLIC USE16 'CODE'

ASSUME	cs:CSEG

UsedFs	DW	0

;***************************************************************************
;*      Libère la mémoire prise par la fonction loadmod utilise en ds:di
;*      l'adresse des instruments et en ds:si l'adresse de la partition

PROC    Unloadmod FAR

	push	ds
	push	es

	mov	ax,SEG PatternSeg
	mov	ds,ax
	mov     ax,[ds:PatternSeg]
	or	ax,ax
	je	@@not_alloc
	mov	es,ax
	call	freemem
@@not_alloc:

	mov	bx,OFFSET Instrument1
	mov	cl,MAX_INST
@@sample:
	mov     ax,[(INSTRUMENT PTR ds:bx).adrseg]
	or	ax,ax
	je      @@no_sample
	mov     es,ax
	call	freemem
@@no_sample:
	add 	bx,SIZE INSTRUMENT
	dec	cl
	jne	@@sample

	pop	es
	pop	ds

	ret

ENDP

;**************************************************************************
;*	ouvre un fichier suivant différent mode
;*
;* Entrée:
;*	CS:BX	adresse du driver de fichier à utiliser
;*	DS:DX   paramètre pour le driver (généralement nom du fichier)
;*
;* Sortie:
;*	AX	erreur si C=1

PROC	open

	mov     [cs:UsedFs],bx
	mov	bx,[(FILESYS PTR cs:bx).open]
	jmp	bx
ENDP

;***************************************************************************
;*	lit des informations dans un fichier
;*
;* Entrée:
;*	CX	nombre d'octet à lire
;*	DS:DX	pointeur sur le buffer
;*
;* Sortie:
;*	AX	erreur si C=1

PROC	read

	mov	bx,[cs:UsedFs]
	mov	bx,[(FILESYS PTR cs:bx).read]
	jmp	bx

ENDP

;***************************************************************************
;*	se déplace dans un fichier par rapport à la position courante
;*
;* Entrée:
;*	CX:DX   déplacement dans le fichier
;*
;* Sortie:
;*	AX	erreur si C=1


PROC	seek

	mov	bx,[cs:UsedFs]
	mov	bx,[(FILESYS PTR cs:bx).seek]
	jmp	bx

ENDP

;***************************************************************************
;*	Ferme un fichier
;*
;* Sortie:
;*	AX	erreur si C=1

PROC	close

	mov	bx,[cs:UsedFs]
	mov	bx,[(FILESYS PTR cs:bx).close]
	jmp	bx

ENDP


;***************************************************************************
;*	Reserve de la mémoire
;*
;* Entrée:
;*	BX	nombre de paragraphe à réserver
;*
;* Sortie:
;*	AX	erreur si C=1
;*	AX	adresse de segment de la zone réservé

PROC	allocmem

	mov	ah,48h
	int		21h
	ret
ENDP

;***************************************************************************
;*	Rend un bloc mémoire au système
;*
;* Entrée:
;*	ES	adresse de segment du bloc à rendre
;*
;* Sortie:
;*	AX	erreur si C=1

PROC	freemem

	mov	ah,49h
	int	21h
	ret

ENDP

;**************************************************************************
;*	Recupère l'adresse du bloc d'environnement
;*
;* Sortie
;*	AX	adresse du bloc d'environnement

PROC	getenvadr FAR

	mov	ah,62h
	int	21h
	mov	es,bx
	mov	ax,[es:2Ch]
	ret

ENDP

ENDS
END
[ RETURN TO DIRECTORY ]