;**********************************************************************; ;* 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 AND AL,00000011B ; BEPAAL LEZEN OF SCHRIJVEN 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 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