terug.gif
;**********************************************************************;
;* R A N D O M A C C E S S F I L E S U P P O R T *;
;*--------------------------------------------------------------------*;
;* doel : Bevat de benodigde routines en commando's om *;
;* random access files op de atom te onder- *;
;* steunen. *;
;*--------------------------------------------------------------------*;
;* auteur : Roland Leurs *;
;* ontwikkeld : 22-8-1993 *;
;*--------------------------------------------------------------------*;
;* gebruik : Als include-file meenemen in het programma; de *;
;* functies zijn in de commando tabel opgenomen. *;
;**********************************************************************;
RAF_OPEN: CALL LEESNAAM ; ZET FILENAAM IN BUFFER
CALL LEESBYTE ; LEES FILE ATTRIBUUT
MOV CL,AL ; BEWAAR ATTRIBUUT IN CL
LEA DX,FILEBUFFER ; LAADT ADRES VAN FILENAAM
MOV AH,3DH ; DOS FUNCTIE: BESTAND OPENEN
INT 21H
JNC RAF1IN ; SPRING INDIEN FILE GEVONDEN
AND CL,00000011B ; BEPAAL LEZEN OF SCHRIJVEN
CMP CL,00H ; LEZEN OF SCHRIJVEN
JE RAF_INPUT ; SPRING VOOR INPUT FILE
RAF_OUTPUT: XOR CX,CX ; NORMALE FILE
MOV AH,3CH ; DOS FUNCTIE: BESTAND AANMAKEN
INT 21H
JNC RAF1OUT ; SPRING ALS BESTAND GEMAAKT IS
RAF_INPUT: XOR AX,AX ; INPUTFILE NIET GEVONDEN, HANDLE=0
CALL ZENDBYTE ; FILE HANDLE NAAR ATOM STUREN
JMP LEESCOM ; EINDE COMMANDO
RAF1IN: MOV BX,AX ; HANDLE IN BX
MOV DX,16
MOV CX,00 ; POINTER ACHTER HEADER PLAATSEN
MOV AX,4200H ; DOS FUNCTIE: POINTER BEWEGEN
INT 21H
RAF1IN1: MOV AX,BX ; HANDLE TERUG NAAR AX
CALL ZENDBYTE ; STUUR NAAR ATOM
JMP LEESCOM
RAF1OUT: MOV BX,AX ; HANDLE NAAR BX
MOV CX,16 ; FILEBUFFER (=header) MET 0 VULLEN
MOV DI,CX ; INDEX LADEN
RAF1OUT1: DEC DI ; VERLAAG POINTER
MOV FILEBUFFER[DI],0
LOOP RAF1OUT1
LEA DX,FILEBUFFER ; LAADT BUFFERADRES
MOV CX,16 ; AANTAL TE SCHRIJVEN BYTES
MOV AH,40H ; DOS FUNCTIE:BESTAND SCHRIJVEN
INT 21H
JMP SHORT RAF1IN1 ; SPRING OM RESULTAAT TE MELDEN
RAF_SLUIT: CALL LEESBYTE ; LEES FILE HANDLE
XOR BX,BX ; HANDLE NAAR BX
MOV BL,AL
MOV AH,3EH ; DOS FUNCTIE: BESTAND SLUITEN
INT 21H
RAF2: JMP LEESCOM ; EINDE COMMANDO
RAF_SCHRIJF: CALL LEESBYTE ; LEES FILE HANDLE
XOR AH,AH
MOV BX,AX ; HANDLE NAAR BX
CALL LEESBYTE ; LEES DATA
MOV FILEBUFFER,AL ; ZET IN BUFFER
MOV AH,40H ; DOS FUNCTIE: BESTAND SCHRIJVEN
MOV CX,1 ; AANTAL TE SCHRIJVEN BYTES
LEA DX,FILEBUFFER ; LAADT ADRES VAN BUFFER
INT 21H ; SCHRIJF DATA NAAR FILE
RAF3: CALL ZENDBYTE ; ZEND RESULTAAT NAAR ATOM
; (1=geen fout, anders foutcode
JMP LEESCOM ; EINDE COMMANDO
RAF_LEZEN: CALL LEESBYTE ; LEES FILE HANDLE
XOR AH,AH
MOV BX,AX ; HANDLE NAAR BX
LEA DX,FILEBUFFER ; LAADT ADRES FILEBUFFER
MOV CX,1 ; AANTAL TE LEZEN BYTES
MOV AH,3FH ; DOS FUNCTIE: BESTAND LEZEN
INT 21H
CALL ZENDBYTE ; ZEND RESULTAAT NAAR ATOM
; (1=geen fout, anders foutcode)
MOV AL,FILEBUFFER ; STUUR GELEZEN DATA NAAR ATOM
CALL ZENDBYTE
JMP LEESCOM
RAF_MOVE_PTR: CALL LEESBYTE ; LEES FILE HANDLE
XOR AH,AH
MOV BX,AX ; HANDLE NAAR BX
CALL LEESBYTE ; LEES OFFSET
MOV DL,AL ; LO-WOORD NAAR DX
CALL LEESBYTE
MOV DH,AL
CALL LEESBYTE
MOV CL,AL ; HI-WOORD NAAR CX
CALL LEESBYTE
MOV CH,AL
CALL LEESBYTE ; LEES OFFSET CODE
MOV AH,42H ; DOS FUNCTIE: HANDLE VERPLAATSEN
INT 21H
JC RAF4 ; SPRING BIJ FOUT
MOV CL,AL ; SAVE AL
XOR AL,AL ; GEEF AAN DAT ALLES IN ORDE IS
CALL ZENDBYTE
MOV AL,CL ; HAAL AL TERUG
CALL ZENDBYTE ; STUUR LO-WOORD NAAR ATOM
MOV AL,AH
CALL ZENDBYTE
MOV AL,DL ; STUUR HI-WOORD NAAR ATOM
CALL ZENDBYTE
MOV AL,DH
RAF4: CALL ZENDBYTE
JMP LEESCOM ; EINDE ROUTINE

RAF_LEES_EXT: CALL LEESBYTE ; LEES FILE HANDLE
XOR AH,AH
MOV BX,AX ; HANDLE NAAR BX
MOV AX,4201H ; DOS FUNCTIE ; OFFSET CODE 1
XOR CX,CX ; OFFSET 0
XOR DX,DX
INT 21H
JC RAF4 ; SPRING BIJ FOUT
PUSH DX ; ZET POINTER OP STACK (HI-WOORD)
PUSH AX ; (LO-WOORD)
MOV AX,4202H ; DOS FUNCTIE ; OFFSET CODE 2
XOR CX,CX ; OFFSET 0
XOR DX,DX
INT 21H
MOV CL,AL ; BEWAAR AL
XOR AL,AL ; GEEF AAN DAT ALLES IN ORDE IS
CALL ZENDBYTE
MOV AL,CL ; HAAL AL TERUG
CALL ZENDBYTE ; STUUR LO-WOORD NAAR ATOM
MOV AL,AH
CALL ZENDBYTE
MOV AL,DL ; STUUR HI-WOORD NAAR ATOM
CALL ZENDBYTE
MOV AL,DH
CALL ZENDBYTE
MOV AX,4200H ; DOS FUNCTIE ; OFFSET CODE 0
POP DX ; HAAL LO-WOORD VAN STACK
POP CX ; HAAL HI-WOORD VAN STACK
INT 21H ; ZET POINTER TERUG
JMP LEESCOM ; EINDE COMMANDO
RAF_BLOCK: CALL LEESBYTE ; LEES FUNCTIENUMMER
CMP AL,0
JE RAF_RD_BLK ; FUNCTIE 0: BLOCK LEZEN
CMP AL,1
JE RAF_WR_BLK ; FUNCTIE 1: BLOCK SCHRIJVEN
MOV FUN_CODE,AL ; FOUTCODE OPSLAAN
JMP ERROR ; GEEF FOUTMELDING
RAF_RD_BLK: CALL LEESBYTE ; LEES FILE HANDLE
XOR AH,AH
MOV BX,AX ; ZET HANDLE IN BX
CALL LEESBYTE ; LEES AANTAL TE LEZEN BYTES
MOV CL,AL ; ZET IN CX REGISTER
CALL LEESBYTE
MOV CH,AL
LEA DX,PATTERNS ; LAADT ADRES FILEBUFFER
MOV AH,3FH ; DOS FUNCTIE: BESTAND LEZEN
INT 21H
JC RAF_RD_1 ; SPRING INDIEN FOUT BEMERKT
MOV CX,AX ; BEWAAR AANTAL GELEZEN BYTES IN CX
XOR AL,AL ; RESET FOUTCODE
RAF_RD_1: CALL ZENDBYTE ; ZEND RESULTAAT NAAR ATOM
OR AL,AL ; TEST OP FOUT
JNZ RAF_RD_END ; SPRING INDIEN GEEN DATA GELEZEN
MOV AL,CL ; STUUR AANTAL GELEZEN BYTES NAAR ATOM
CALL ZENDBYTE
MOV AL,CH
CALL ZENDBYTE
XOR SI,SI ; RESET POINTER
RAF_RD_2: MOV AL,PATTERNS[SI] ; LEES DATA
CALL ZENDBYTE ; STUUR NAAR ATOM
INC SI ; VERHOOG POINTER
LOOP RAF_RD_2 ; INDIEN NIET ALLES GEHAD, VOLGENDE
RAF_RD_END: JMP LEESCOM ; EINDE COMMANDO
RAF_WR_BLK: CALL LEESBYTE ; LEES FILE HANDLE
XOR AH,AH
MOV BX,AX ; ZET HANDLE IN BX
CALL LEESBYTE ; LEES AANTAL TE LEZEN BYTES
MOV CL,AL ; ZET IN CX REGISTER
CALL LEESBYTE
MOV CH,AL
XOR SI,SI ; RESET POINTER
PUSH CX ; BEWAAR AANTAL TE SCHRIJVEN BYTES
RAF_WR_1: CALL LEESBYTE ; LEES DATA VAN ATOM
MOV PATTERNS[SI],AL ; ZET IN BUFFER
INC SI ; POINTER VERHOGEN
LOOP RAF_WR_1 ; DOORGAAN TOTDAT ALLE BYTES GELEZEN
POP CX ; HAAL AANTAL BYTES TERUG
LEA DX,PATTERNS ; LAADT ADRES FILEBUFFER
MOV AH,40H ; DOS FUNCTIE: BESTAND SCHRIJVEN
INT 21H
JC RAF_WR_2 ; SPRING INDIEN FOUT BEMERKT
MOV CX,AX ; BEWAAR AANTAL GESCHREVEN BYTES IN CX
XOR AL,AL ; RESET FOUTCODE
CALL ZENDBYTE ; ZEND RESULTAAT NAAR ATOM
MOV AL,CL ; AANTAL GESCHREVEN BYTES NAAR ATOM
CALL ZENDBYTE
MOV AL,CH
RAF_WR_2: CALL ZENDBYTE ; STUUR NAAR ATOM
RAF_WR_END: JMP LEESCOM ; EINDE COMMANDO
terug.gif