Write to a DOS File
From CometWiki
Write to a DOS File
Syntax:
DOSRW(AX-value, file-handle, number-of-bytes, format-statement-label) EXCP=statement-label
Entry:
AX-value = "@4000@" . file-handle = file handle established when the file was opened . number-of-bytes = number of characters to be written . format-statement-label = format statement containing the data variables to be written to the DOS file
Return:
If the write function is successful, the data variable(s) contained in the format statement will be written to the DOS
file, and the AX register will contain the number of bytes tha were actually written (in byte-reversed hex).
If an exception occurs, byte 2 of the AX field will contain the DOS error code (in hex).
Discussion:
The DOSRW function can be used to write data to a DOS file. The data to be written is listed in an Internet Basic format statement.
This function requires that the AX-value be set to "@4000@". The file's handle (established when the file was opened) must also be included in the function call.
Likewise, you must specify the number of bytes to be written to the DOS file and the label of the format statement containing the data to be written to the file.
After the function is executed, the DOS file will contain the data values from the format statement. Also, the AX register will contain the number of bytes that were actually written to the file. This value is in hex, so it will have to be converted to decimal to serve any meaningful purpose.
One application of this AX value is to test for a "disk full" condition. For example, if the number of bytes actually written to a DOS file is less than the number specified to be written, it means that there is no more room to write the data on the disk (i.e., the disk is full).
Example:
! S SFWRITE,DSK ! O FWRITE,DSK ! L T00,E ! R QMONITOR ! !========== WRITE TO A DOS FILE ============================== ! LENGTH 2 & LOCAL AX$,BX$,CX$,DX$ ! Define registers LOCAL FILEHANDLE$ ! Define file handle LENGTH 64 & LOCAL FILENAME$ ! Define file name ! LENGTH 100 & LOCAL DATASTRING$ ! Define data string ! LENGTH 3 & LOCAL DOSCODE$ ! Define DOS error code LENGTH 37 & LOCAL DOSMESSAGE$ ! Define DOS message ! 1000 FORMAT DOSMESSAGE$ ! File input format ! 100 FORMAT (ET) ! Screen format ! 9999 FORMAT DATASTRING$ ! File output format ! CLEAR ! Initialize variables PRINT (0,100) ! Set typewriter mode ! PRINT (0) "NAME OF DOS FILE TO OPEN:" ! Display prompt INPUT (0) FILENAME$ ! Input file name IF FILENAME$ = "" THEN RUN "QMONITOR" ! If null, then stop ! AX$ = "@3D42@" ! Set AX to "OPEN FILE" CX$ = "@0000@" ! Set CX to null ! DOSFC(AX$,CX$,FILENAME$) EXCP=EXCEPTION ! Open the file ! FILEHANDLE$ = AX$ ! Store file handle ! WRITE: PRINT (0) "ENTER STRING TO WRITE TO DOS FILE:" INPUT (0) DATASTRING$ IF DATASTRING$ = "" THEN GOTO BOTTOM ! AX$ = "@4000@" ! Set AX to "WRITE" CX$ = "@0000@" ! Set CX to null ! DOSRW(AX$,FILEHANDLE$,100,9999) EXCP=EXCEPTION ! GOTO WRITE ! Loop back for more ! BOTTOM: AX$ = "@3E00@" ! Set AX to "CLOSE FILE" BX$ = FILEHANDLE$ ! Set BX to file handle CX$ = "@0000@" ! Set CX to null DX$ = "@0000@" ! Set DX to null DOSMS(AX$,BX$,CX$,DX$) ! Close the file RUN "QMONITOR" ! EXCEPTION: ! Exception routine PRINT (0) "WRITE EXCEPTION" ! Display message OPEN (1) "QERCOMET" ! Open error file DOSCODE$ = "D" + HEXASC(SUB(AX$,2,1)) ! Construct key to file READ (1,1000) KEY=DOSCODE$ ! Read error record PRINT (0) "DOS error code: ";DOSCODE$ ! Display DOS error code PRINT (0) DOSMESSAGE$ ! Display error message INPUT (0) "" ! Hold CLOSE (1) ! Close error file RUN "QMONITOR" ! Exit END