;
;
; Megnyitott fájl lezárása
; - "CAS" fájlok esetén frissíti a fájl 128 bájtos fejlécét is
; - minden esetben meghívja a fájl-lezárási funkciót, ha írás történt a fájlba
; in: IX - az aktuális I/O iránynak megfelelő fájl adatterületének címe
; out: A - hibakód
;
LC56D: ld a,(ix-033h) ; A reg.= a megnyitott fájl FCB-je
or a
ret z ; visszatérés, ha még nem használt
xor a
bit 6,(ix-013h) ; a fájlba írás történt ?
ret z ; visszatérés, ha még nem
call LC46C ; megnyitott fájl kiterjesztésének ellenőrzése
jr nz,LC5B1 ; ugrás, ha nem "CAS" (csak egyszerűen lezárja a fájlt)
push ix
pop hl ; HL= fájl bufferére mutat
ld (hl),011h ; "CAS" fájl fejlécének elkészítése: 0. bájt : 011h
inc hl
ld (hl),a ; 1. bájt: 00h
inc hl
ld a,(ix-01Ch) ; A reg.= fájlméret LSB
rlca
srl a ; A reg. 7.bit CY-be, és kinullázása A-ban
ld (ix+004h),a ; beírás a buffer 4. címére (az utolsó 128 bájtos blokkban lévő hasznos bájtok száma)
ld a,(ix-01Bh) ; A reg.= fájlméret következő bájtja
adc a,a
ld (hl),a ; beírás a buffer 2. címére (128 bájtos blokkok száma, alsó bájt)
inc hl
ld a,(ix-01Ah) ; A reg.= fájlméret következő bájtja
adc a,a
ld (hl),a ; beírás a buffer 3. címére (128 bájtos blokkok száma, felső bájt)
inc hl
inc hl ; HL= fájl buffer 5. címére mutat
ld b,07Bh ; B= 123 bájt lesz (128-5)
xor a
LC59E: ld (hl),a ; maradék bájtok kinullázása a bufferben
inc hl
djnz LC59E ; ismétlés
ld de,0FF75h
add hl,de ; HL a fájlmutatóra mutat az FCB-ben
ld b,004h
LC5A8: ld (hl),a ; fájlmutató kinullázása (a fájl elejére mutasson)
inc hl
djnz LC5A8 ; ismétlés
ld c,080h ; BC= írandó bájtok száma (128)
call LC5C0 ; adatok kiírása a belső bufferből
LC5B1: call LC6AE ; aktuális I/O iránynak megfelelő FCB címének betöltése DE-be
ld a,00Dh ; parancskód: fájl lezárása
jr LC5CD ; ugrás a folytatásra: FISH funkció végrehajtása IX mentésével