{MS-Pascal / MS-FORTRAN FCB Declaration Include File} INTERFACE; UNIT FILKQQ (FCBFQQ, FILEMODES, SEQUENTIAL, TERMINAL, DIRECT, fm_sequential, fm_terminal, fm_direct, accessmodes, am_read, am_readwrite, am_write, am_default, SHAREMODES, sm_compat, sm_denyrw, sm_denywr, sm_denyrd, sm_denynone, BUFFER_SIZE, ADRFIELDS); const BUFFER_SIZE = 512; ADRFIELDS = 2; {* Two ADR fields in the FCB, see NEWUQQ. *} TYPE FILEMODES = (SEQUENTIAL, TERMINAL, DIRECT); SHAREMODES = (sm_compat, sm_denyrw, sm_denywr, sm_denyrd, sm_denynone); accessmodes = (am_read, am_write, am_readwrite, am_default); FCBFQQ = RECORD {byte offsets start every field comment} {fields accessible by Pascal user as .} TRAP: BOOLEAN; {00 Pascal user trapping errors if true} ERRS: WRD(0)..18; {01 error status, set only by all units} MODE: FILEMODES; {02 user file mode; not used in unit U} SHARE:SHAREMODES; {03 pad to word bound, special user use} {fields shared by units F, V, U; ERRC / ESTS are write-only} ERRC: WORD; {04 error code, error exists if nonzero} {1000..1099: set for unit U errors} {1100..1199: set for unit F errors} {1200..1299: set for unit V errors} ESTS: WORD; {06 error specific data usually from OS} CMOD: FILEMODES; {08 system file mode; copied from MODE} {fields set / used by units F and V, and read-only in unit U} TXTF: BOOLEAN; {09 true: formatted / ASCII / TEXT file} {false: not formatted / binary file} SIZE: WORD; {10 record size set when file is opened} {DIRECT: always fixed record length} {others: max buffer variable length} IERF: BOOLEAN; {12 Unit U Incomplete End Of Record } {Kluge. Set false by opnuqq and } {pccuqq, and true by peruqq. Thus } {if true in wefuqq, it means that } {there is an incomplete line, and } {pccuqq should be called to flush } {it. Only applies to terminal files} access: accessmodes;{13 Controls actual open mode } OLDF: boolean; {14 true :must exist before open; RESET} {false :can create on open; REWRITE} INPT: BOOLEAN; {15 true: user is now reading from file} {false: user is now writing to file} RECL: WORD; {16 DIRECT record number, lo order word} RECH: WORD; {18 DIRECT record number, hi order word} USED: WORD; {20 number bytes used in current record} {fields used internally by units F or V not needed by unit U} LINK: ADR OF FCBFQQ;{22 DS offset address of next open file} BADR: ADRMEM; {24 F: DS offset address for buffer var} TMPF: BOOLEAN; {26 F: is a temp file; delete on CLOSE} FULL: BOOLEAN; {27 F: buffer variable lazy eval status} UNFM: BOOLEAN; {28 V: for unformatted binary file mode} OPEN: BOOLEAN; {29 F: file opened (by RESET / REWRITE)} FUNT: INTEGER; {30 V: FORTRAN unit number (1 to 32767)} ENDF: BOOLEAN; {32 V: last I/O statement was a ENDFILE} {fields set / used by unit U, and read-only in units F and V} REDY: BOOLEAN; {33 buffer ready if true; set by F / U} BCNT: WORD; {34 number of data bytes actually moved} EORF: BOOLEAN; {36 true if end of record read, written} EOFF: BOOLEAN; {37 end of file flag set after EOF read} {unit U (operating system) information starts here} {**********************************************************} FILE_NAME : ^STRING; {* 38 points to file name *} FDSCP : INTEGER; {* 42 actual ZEUS file number *} PREDEFINED : BOOLEAN; {* 44 True if file is a device. *} FNER : BOOLEAN; {* 45 True if File name error. *} BEGIN_BUFFER : INTEGER; {* 46 Start loc of buffer. *} END_BUFFER : INTEGER; {* 48 top loc of buffer. *} IEOF : BOOLEAN; {* 50 Flag if EOF ever seen. For ^Zs. *} BUFFER : STRING(512); {* 52 Internal buffering. *} PADBUF : STRING(65); {*564 Make same size as MS-Dos. *} {*630 + 4 = 634, see newuqq *} {**********************************************************} {end of section for unit U specific OS information} END; const fm_sequential = sequential; fm_direct = direct; fm_terminal = terminal; END;