;**********************************************************************; ;* 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