home *** CD-ROM | disk | FTP | other *** search
- CP/M DISK I/O PACKAGE
-
- VERSION 2.X 08/17/78
-
- COMPATIBLE WITH MICROSOFT FORTRAN
-
- DICK CURTISS
- 843 NW 54TH
- SEATTLE, WASHINGTON
- 98107
- (206) 784 8018
-
- FORTRAN USAGE:
- INTEGER DOPEN , DCLOSE , GCLOSE
- INTEGER BREAD , BWRITE
- INTEGER LREAD , LWRITE
- INTEGER DATABYTE , LINE(40) , STATUS
- INTEGER MCOUNT , ACOUNT
- INTEGER FILETABLE(83) , FILENAME(6)
-
- DATA FILETABLE(1) , FILETABLE(2) / 0 , 'XX' /
-
- DATA FILENAME / 'B:' , 'FN' , 'AM' , 'E.' , 'TX' , 'T ' /
-
- OPEN DISK FILE:
- 1
- STATUS = DOPEN ( FILETABLE , FILENAME , 2 )
- 3
- 1 READ ACCESS
- 2 WRITE ACCESS - NO DELETE
- 3 WRITE ACCESS WITH DELETE
- IF ( STATUS .NE. 0 ) GO TO ...... ERROR
-
- CLOSE DISK FILE:
- STATUS = DCLOSE ( FILETABLE )
- IF ( STATUS .NE. 0 ) GO TO ...... ERROR
-
- CLOSE ALL OPEN FILES
- STATUS = GCLOSE ( 0 )
-
- READ BYTE FROM DISK FILE:
- DATABYTE = 0
- STATUS = BREAD ( FILETABLE , DATABYTE )
- IF ( STATUS .EQ. 255 ) GO TO ...... END OF FILE
- IF ( STATUS .NE. 0 ) GO TO ...... ERROR
-
- WRITE BYTE TO DISK FILE:
- STATUS = BWRITE ( FILETABLE , DATABYTE )
- IF ( STATUS .EQ. 255 ) GO TO ...... END OF MEDIUM
- IF ( STATUS .NE. 0 ) GO TO ...... ERROR
-
- READ LINE FROM DISK FILE:
- MCOUNT = 80
- STATUS = LREAD ( FILETABLE , LINE , MCOUNT , ACOUNT )
- IF ( STATUS .EQ. 255 ) GO TO ...... END OF FILE
- IF ( STATUS .NE. 0 ) GO TO ...... ERROR
-
- WRITE LINE TO DISK FILE:
- ACOUNT = 80
- STATUS = LWRITE ( FILETABLE , LINE , ACOUNT )
- IF ( STATUS .EQ. 255 ) GO TO ...... END OF MEDIUM
- IF ( STATUS .NE. 0 ) GO TO ...... ERROR
-
-
- NOTES:
- 1. EACH FILE MUST HAVE ITS OWN "FILETABLE" OF
- 165 BYTES.
-
- 2. THE "FILETABLE" SHOULD NOT BE ALTERED BY THE USER
- EXCEPT DURING PROGRAM INITIALIZATION WHEN THE FIRST
- 2 BYTES SHOULD BE SET TO ZERO AND THE FOURTH BYTE
- SET TO SOME CHARACTER WHICH WILL BE DISPLAYED IN
- ANY ERROR MESSAGES.
-
- 3. "FILENAME" IS A CHARACTER STRING REPRESENTING A
- VALID CP/M FILE NAME WITH OPTIONAL DISK SELECT AND
- FILE TYPE. LEADING SPACES ARE IGNORED AND THE
- MAY BE TERMINATED BY A SPACE, CARRIAGE RETURN,
- ",", OR "=". STORAGE MUST BE A CONTIGUOUS STRING
- OF BYTES - NOT ONE CHARACTER PER INTEGER WORD.
-
- 4. TWO OPTIONS ARE AVAILABLE FOR WRITE ACCESS. IF
- THE FILE ALREADY EXISTS AND THE ACCESS CODE IS 2,
- AN ERROR WILL RESULT AND THE FILE WILL NOT BE
- OPENED. IF THE ACCESS CODE IS 3, AN EXISTING FILE
- WILL BE DELETED BEFORE OPEN.
-
- 5. OPERATION "STATUS"
- 0 NORMAL
- 1-254 ERROR CODE - NOT PRESENTLY SPECIFIED
- 255 END OF FILE ON READ
- 255 END OF MEDIUM ON WRITE
-
- 6. LREAD --
- CARRIAGE RETURN IS END OF LINE
- LINE FEED, NULL AND RUBBOUT ARE IGNORED
- CONTROL Z IS END OF FILE
- ASCII PARITY BIT IS REMOVED
-
- 7. LWRITE --
- LINES ARE AUTOMATICALLY TERMINATED BY
- CARRIAGE RETURN - LINE FEED
-
- 8. "DATABYTE" STORAGE FOR READ AND WRITE IS A SINGLE
- BYTE AS FAR AS THE ROUTINES ARE CONCERNED. PRIOR
- TO READ THE MOST SIGNIFICANT BYTE OF "DATABYTE"
- SHOULD BE SET TO ZERO IF THE DATA IS TO BE USED
- IN INTEGER COMPARES, ETC.
-
- 9. "MCOUNT" AND "ACOUNT" ARE SINGLE BYTE INTEGERS
- AS FAR AS THE ROUTINES ARE CONCERNED.
-
-
-
- ASSEMBLER USAGE:
-
- FILETABLE:
- DB 0 ; ACCESS CODE STORAGE
- DB 0 ; STATUS CODE STORAGE
- DS 1 ; BUFFER INDEX OR POINTER
- DB 'X' ; FILE ID FOR ERROR MESSAGES
- DS 33 ; CP/M FILE CONTROL BLOCK
- DS 128 ; DATA BUFFER STORAGE
-
- 1 READ ACCESS
- ACCESS: DB 2 ; WRITE ACCESS - NO DELETE
- 3 WRITE WITH DELETE
- FILENAME: DB 'B:FNAME.TXT '
- DATABYTE: DS 1 ; STORAGE FOR DATABYTE
- MCOUNT: DB 80 ; LENGTH OF READ BUFFER
- LINE: DS 80 ; LINE BUFFER
- ACOUNT: DS 1 ; LINE READ ACTUAL COUNT
-
-
- OPEN DISK FILE:
- LXI H,FILETABLE
- LXI D,FILENAME
- LXI B,ACCESS
- CALL DOPEN ; OPEN FILE
- JNZ ERROR
-
-
- CLOSE DISK FILE:
- LXI H,FILETABLE
- CALL DCLOSE ; CLOSE FILE
- JNZ ERROR
-
-
- CLOSE ALL OPEN FILES:
- CALL GCLOSE ; CLOSE ALL OPEN FILES
- JNZ ERROR
-
-
- READ BYTE FROM DISK FILE:
- LXI H,FILETABLE
- LXI D,DATABYTE
- CALL BREAD ; READ A BYTE
- INR A
- JZ ENDOFFILE
- DCR A
- JNZ ERROR
-
-
- WRITE BYTE TO DISK FILE:
- LXI H,FILETABLE
- LXI D,DATABYTE
- CALL BWRITE ; WRITE A BYTE
- INR A
- JZ ENDOFMEDIUM
- DCR A
- JNZ ERROR
-
-
-
- READ LINE FROM DISK FILE:
- LXI H,FILETABLE
- LXI D,LINE
- LXI B,ARGLIST
- CALL LREAD ; READ A LINE
- INR A
- JZ ENDOFFILE
- DCR A
- JNZ ERROR
-
- ARGLIST:
- DW MCOUNT
- DW ACOUNT
-
-
- WRITE LINE TO DISK FILE:
- LXI H,FILETABLE
- LXI D,LINE
- LXI B,ACOUNT
- CALL LWRITE ; WRITE A LINE
- INR A
- JZ ENDOFMEDIUM
- DCR A
- JNZ ERROR
-
-
-
-
- NOTES:
- 1. EACH FILE MUST HAVE ITS OWN "FILETABLE" OF
- 165 BYTES.
-
- 2. THE "FILETABLE" SHOULD NOT BE ALTERED BY THE USER
- EXCEPT DURING PROGRAM INITIALIZATION WHEN THE FIRST
- 2 BYTES SHOULD BE SET TO ZERO AND THE FOURTH BYTE
- SET TO SOME CHARACTER WHICH WILL BE DISPLAYED IN
- ANY ERROR MESSAGES.
-
- 3. "FILENAME" IS A CHARACTER STRING REPRESENTING A
- VALID CP/M FILE NAME WITH OPTIONAL DISK SELECT AND
- FILE TYPE. LEADING SPACES ARE IGNORED AND THE STRING
- MAY BE TERMINATED BY A SPACE, CARRIAGE RETURN,
- ",", OR "=".
-
- 4. TWO OPTIONS ARE AVAILABLE FOR WRITE ACCESS. IF
- THE FILE ALREADY EXISTS AND THE ACCESS CODE IS 2,
- AN ERROR WILL RESULT AND THE FILE WILL NOT BE
- OPENED. IF THE ACCESS CODE IS 3, AN EXISTING FILE
- WILL BE DELETED BEFORE OPEN.
-
- 5. OPERATION STATUS (HL), (A) AND (Z)
- (HL)
- (A) (Z)
- 0 1 NORMAL
- 1-254 0 ERROR CODE - NOT PRESENTLY SPECIFIED
- 255 0 END OF FILE ON READ
- 255 0 END OF MEDIUM ON WRITE
-
-
- 6. LREAD --
- CARRIAGE RETURN IS END OF LINE
- LINE FEED, NULL AND RUBBOUT ARE IGNORED
- CONTROL Z IS END OF FILE
- ASCII PARITY BIT IS REMOVED
-
- 7. LWRITE --
- LINES ARE AUTOMATICALLY TERMINATED BY
- CARRIAGE RETURN - LINE FEED
-