09-127 To: J3 From: Malcolm Cohen Subject: Spurious defined terms in clause 9. Date: 2009 February 03 1. Introduction --------------- The system for "defining" terms we used in previous versions of the standard is not in accordance with the ISO guidelines, so we need to stop using it. We have already introduced the ISO-compliant defined terms subclause, and moved/copied many definitions into it. However, quite a lot have not been revised. These should either - be turned into normal text ("untermified") or - become proper defined terms. This paper deals with the terms in clause 9. 2. Terms and what to do with them --------------------------------- As expected, there are lots of terms here. Most of the more significant ones are already proper "defined terms" in clause 1. We really only need to make something a proper defined term if it's widely used - for a local usage, as long as there is no problem with the meaning in context there is no need to elevate it to clause 1. Many of these are close calls though. - input statement: Normal Usage; = untermify, do not index (this isn't a definition even though it claims to be one). Do index "input statement" (and "output statement") at 9.6, which is where READ, WRITE and PRINT are defined. - reading: Normal Usage; = untermify, do not index (this waffle doesn't contribute any real information viz add to/subtract from the Computer English meaning). - output statement: Normal Usage; = untermify, do not index (this isn't a definition even though it claims to be one). - writing: Normal Usage; = untermify, do not index (same comment as for "reading"). - data transfer input statement: Defined Elsewhere; = untermify, Let it be defined elsewhere. Hang on, please let me in on the secret - what's this other "input statement" that does not do "data transfer"? {I.e. why do we have two names for the identical same thing.} - data transfer output statement: Ditto; = ditto. - file connection statement; Used Exactly Once; = delete, replace use with "OPEN or CLOSE statement". - file inquiry statement: Never Used; = delete. - file positioning statements: Used Frequently; = untermify, do not index (should be indexed in the right place, i.e. the file positioning statement subclause). NOTE: If this is meant to be complete, it is missing classification of WAIT and FLUSH! - record file: Special Term; = termify, index as definition. Maybe this isn't used enough to warrant being a term? We could just index it instead... - stream file: Special Term; = termify, index as definition. This is used more than "record file"... but we could just index it instead. - formatted record: Special Term; I don't think this is significant enough to be a term, so... = untermify, index as definition. - unformatted record: Ditto; = ditto. - endfile record: Special Term, Hardly Used; = untermify, index as definition. - access methods: Special Term, Insignificant, Clause 9 Only; = untermify, index not as definition (this isn't the definition!). - forms: Ditto; = ditto. - actions: Ditto; = ditto. - record length: Normal Usage; = untermify, do not index. - named file: Normal Usage; = untermify, do not index. - position: Normal Usage, Misleading; = untermify, index "file position" not as definition. - exist: Normal Usage, Multiple Meanings; = untermify, index not as definition. Actually, we could just omit the indexing here... or index "file existence" (viz the subclause title). - sequential access: Special Term, Only in Clause 9; = untermify, index as definition. - direct access: Special Term, Only in Clause 9; = untermify, index as definition. - record number: Special Term, Only in Clause 9; = untermify, index as definition. - stream access: Special Term, Only in Clause 9; = untermify, index as definition. - initial point: Normal Usage, Only in Clause 9; = untermify, do not index. - terminal point: Normal Usage, Only in Clause 9; = untermify, do not index. - current record: Normal Usage, Widely Used (well, in c09 and c10 anyway); = untermify, index as definition. - preceding record: Normal Usage; = untermify, do not index. - next record: Normal Usage; = untermify, do not index; - advancing input/output statement: Not A Definition; = untermify, index not as definition. - nonadvancing input/output statement: Not A Definition; = untermify, index not as definition. - exist [second definition!]: Normal Usage, Not A Definition; = untermify, index not as definition. Actually, I don't think we really need to index it. Or we could index "unit existence" instead. - preconnection: Special Term, Only In Clause 9; = untermify, index as definition. - OPEN statement: It's A Statement; = untermify, index as statement. - Unicode: Special, Misleading; = untermify, index "Unicode file" as definition. - CLOSE statement: It's A Statement; = untermify, index as statement. - READ statement: It's A Statement; = untermify, index as statement. - WRITE statement: It's A Statement; = untermify, index as statement. - PRINT statement: It's A Statement; = untermify, index as statement. - control information list: BNF Analogue, Only Used Twice; = untermify, index as definition, replace uses with BNF refs. - formatted input/output statement: Statement Classification; = untermify, index as definition. - unformatted input/output statement: Statement Classification; = untermify, index as definition. - list-directed input/output statement: Statement Classification; = untermify, index as definition. - namelist input/output statement: Statement Classification; = untermify, index as definition. - asynchronous: Normal Usage, Not A Definition; = untermify, index as definition? not as definition? This is a close call; even though it's not a definition of "asynchronous", it does define the meaning of "asynchronous i/o"... maybe we should be indexing "asynchronous i/o" instead? Especially since with coarrays we have other asynchronous things happening. I have put alternative edits in. - synchronous: Ditto; = ditto. - affector: Too Cryptic, Only Used Twice; This is always "pending input/output storage sequence affector"; And the uses have a cross-reference; = untermify, do not index. (Alternatively, index the whole name "p i/o s s a" both in the defn and the use. I've not put in an alternative edit for that though, because then it's too long.) - direct access input/output statement: Statement Classification, Not Used Much; = untermify, index as definition. - sequential access input/output statement: Ditto; = ditto. - stream access input/output statement: Ditto; = ditto. - defined input/output: Special Term; = termify, index as definition. - parent data transfer statement: Mostly Only Used In Clause 9; = untermify, index as definition, add cross-ref to use in c13. - child data transfer statement: Ditto; = untermify, index as definition, add cross-ref to use in c10. - wait operation: Mostly Only Used In Clause 9; = untermify, index as definition, add cross-ref to use in c16. - WAIT statement: It's A Statement; = untermify, index as statement. - BACKSPACE statement: It's A Statement; = untermify, index as statement. - ENDFILE statement: It's A Statement; = untermify, index as statement. - REWIND statement: It's A Statement; = untermify, index as statement. - FLUSH statement: It's A Statement; = untermify, index as statement. - INQUIRE statement: It's A Statement; = untermify, index as statement. - inquire by file: Hardly Used, All In 9.10; = untermify, do not index. (As far as readability goes, it's not much of an improvement on "INQUIRE with a FILE= specifier" anyway. It's only used 4 times, we could just change those and delete the definition.) - inquire by unit: Ditto; = untermify, do not index. - inquire by output list: Ditto; = untermify, do not index. - end-of-record condition: Special Term, Obvious, Widely Used; = untermify, index as definition. (This is a close call: we could make it a special term in clause 1, but it's so obvious that I don't think we need to do that.) - end-of-file condition: Normal Usage; = untermify, index as definition. - recursive input/output statement: Special Term, Hardly Used; In fact it is only used twice, paras 3 and 5 (after the defn in para 2) of 9.12. It would be easier if we joined all these together. = untermify, reword, index as definition. 3. Other glitches ----------------- Missing "statement" after second "INQUIRE" in Note 9.46 on p229. Missing name on the PROGRAM statement near the end of Note 9.48 on p230. 4. Edits to 09-007 ------------------ [] Define terms "\term{defined input/output} input/output defined by a procedure and accessed via a \si{defined-io-generic-spec} (\snref{defined-io-generic-spec}, \ref{D9:User-defined derived-type input/output}) \term{record file} file composed of a sequence of records (\ref{D9:Input/output concepts}) \term{stream file} file composed of a sequence of file storage units (\ref{D9:Input/output concepts})" {The refs in "defined input/output" are "(R1208, 9.6.4.7)".} [throughout] Hyperlink the above terms as appropriate. [199:3(9.1p1)] Unembolden "Input statements", do not index. [199:4(9.1p1)] Unembolden "reading", do not index. [199:4(9.1p1)] Unembolden "Output statements", do not index. [199:6(9.1p1)] Unembolden "writing", do not index. [199:9(9.1p3)] Sort statement list into alphabetic order. {Order of occurrence in the clause is cute, but not particularly helpful.} [199:11-14] Delete entire paragraph? {Classifying the i/o statements is cute but unnecessary. In this case it is also incomplete - we forgot to add FLUSH and WAIT to the scheme. And they are all defined in their own subclauses anyway when we need.} ALTERNATIVE: [199:12-13] Delete sentence beginning "The OPEN". [199:13] Delete sentence beginning "The INQUIRY". [199:11-14] Unembolden everything left, do not index. {These terms are never ever referenced.} [199:16(9.1p5)] Unembolden "record file", hyperlink & index as definition. [199:17(9.1p5)] Unembolden "stream file", hyperlink & index as definition. [199:30(9.2.2p1)] Unembolden "formatted record", index as definition. [200:2(9.2.3p1)] Unembolden "unformatted record", index as definition. [200:8(9.2.4p1)] Unembolden "endfile record", index as definition. [200:19(9.3.1p2)] Unembolden "access methods", index "file access method" not as definition. [200:20(9.3.1p2)] Unembolden "actions", index "action" not as definition. [200:20-21(9.3.1p2)] Unembolden "record lengths", do not index. [200:22(9.3.1p3)] Unembolden "named file", do not index. [200:25(9.3.1p4)] Unembolden "position", index "file position" not as defn. [201:1(9.3.2p1)] Unembolden "exist", index not as definition. [201:10(9.3.3)] Index "file access method" as definition for all of 9.3.3. [201:17(9.3.3.2p1)] Unembolden "Sequential access", index as definition. [201:30(9.3.3.3p1)] Unembolden "Direct access", index as definition. [201:32(9.3.3.3p2)] Unembolden "record number", index as definition. [201:15(9.3.3.4p1)] Unembolden "Stream access", index as definition. [201:5(9.3.4.1p2)] Unembolden "initial point", do not index. [201:5(9.3.4.1p2)] Unembolden "terminal point", do not index. [201:8(9.3.4.1p3)] Unembolden "current record", index as definition. [201:11(9.3.4.1p4)] Unembolden "preceding record", do not index. [201:15(9.3.4.1p5)] Unembolden "next record", do not index. [201:21(9.3.4.2p1)] Unembolden "advancing input/output statement", index not as definition. [201:23(9.3.4.2p2)] Unembolden "nonadvancing input/output statement", index not as definition. [205:31(9.4,last bullet)] "file connection statement or a file positioning" ->"CLOSE, INQUIRE, or OPEN". {The only use of those two "terms": simplify, remove need for terms.} [207:16(9.5.3p1)] Unembolden "exist", index not as definition. [208:5(9.5.5p1)] Unembolden "Preconnection", index as definition. [208:9(9.5.6.1p1)] Unembolden "OPEN statement", index as statement. [210:38(9.5.6.9p1)] Unembolden "Unicode", index "Unicode file" as definition. [212:25(9.5.7.1p1)] Unembolden "CLOSE statement", index as statement. [213:29-30(9.6.1p1)] Index "input statement" as definition, index "data transfer input statement" as definition, index "output statement" as definition. index "data transfer output statement" as definition, unembolden "READ statement", index as statement unembolden "WRITE statement", index as statement, unembolden "PRINT statement", index as statement. [214:7(9.6.2.1p1)] Unembolden "control information list", index as defn. [215:22(9.6.2.1 C922)] "control information list" ->"". {Consistently use the BNF.} [215:37-38(9.6.2.1p3)] Unembolden "formatted input/output statement", index as definition. [215:38(9.6.2.1p3)] Unembolden "unformatted input/output statement", index as definition. [216:16(9.6.2.2p4)] Unembolden "list-directed input/output statement", index as definition. [216:20(9.6.2.3p2)] Unembolden "namelist input/output statement", index as definition. [216:30(9.6.2.5p1)] Unembolden "asynchronous", index as definition. {Misleading, but we aren't indexing "asynchronous input/output", and we need to.} [216:31(9.6.2.5p1)] Unembolden "synchronous", index as definition. [throughout] Search all references to (a)synchronous, check indexing. ALTERNATIVE: [216:30-31] Index "asynchronous input/output" and "synchronous ..." instead of just "asynchronous"/"synchronous", and change indexing in other places as appropriate. [217:16(9.6.2.5p7)] Unembolden "affector", do not index. [218:25(9.6.2.12p1)] "control information list"->"". {BNF is better than a mysterious (non-)term.} [218:25-26(9.6.2.12p1)] Unembolden "direct access input/output statement", index as definition. [218:27-28(9.6.2.12p1)] Unembolden "sequential access input/output statement", index as definition. [218:28(9.6.2.12p1)] Unembolden "stream access input/output statement", index as definition. [225:21(9.6.4.7)] Index the whole of 9.6.4.7 as the definition of "defined input/output". [225:24-25(9.6.4.7.1p1)] Unembolden "defined input/output". [225:33(9.6.4.7.2p2)] Unembolden "parent data transfer statement", index as definition. [rest of c09] Index "parent d.t.s." not as definition everywhere else that it appears. [225:35(9.6.4.7.2p2)] Unembolden "child data transfer statement", index as definition. [rest of c09] Index "child d.t.s." not as defn for other appearances. [229:20-2(9.6.4.7 Note 9.46)] Before "provides values" insert "statement". {Fix.} [230:0+26(9.6.4.7 Note 9.48, near the end before the USE statement)] After "PROGRAM" insert "committee". {Missing name on the PROGRAM statement.} [232:11(9.7.1p2)] Unembolden "wait operation", index as definition. [232:23(9.7.2p1)] Unembolden "WAIT statement", index as statement. [234:4(9.8.2p1)] Unembolden "BACKSPACE statement", index as statement. [234:12(9.8.3p1)] Unembolden "ENDFILE statement", index as statement. [234:27(9.8.4p1)] Unembolden "REWIND statement", index as statement. [235:18(9.9p2)] Unembolden "FLUSH statement", index as statement. [236:3(9.10.1p1)] Unembolden "INQUIRE statement", index as statement. [236:4(9.10.1p1)] Unembolden "inquire by file", do not index. [236:5(9.10.1p1)] Unembolden "inquire by unit", do not index. [236:5(9.10.1p1)] Unembolden "inquire by output list", do not index. [242:22(9.11.1p2)] Unembolden "end-of-record condition", index as defn. [242:25(9.11.1p3)] Unembolden "end-of-file condition", index as defn. [244:25-29,245:1-2(9.12p2-3,5)] Rewrite and join these three paragraphs as follows: [244:25] Delete "called", [244:26] Unembolden "recursive input/output statement", index defn., [244:26-29] Join paragraphs into one, [245:1-2] Move this paragraph and join it; Thus making the recursive i/o statement stuff into a single paragraph that reads "An input/output statement that is executed while another input/output statement is being executed is called a recursive input/output statement. A recursive input/output statement shall not identify an external unit that is identified by another input/output statement being executed except that a child data transfer statement may identify its parent data transfer statement external unit. A recursive input/output statement shall not modify the value of any internal unit except that a recursive WRITE statement may modify the internal unit identified by that recursive WRITE statement." [262:2(10.8.1.1p1)] After "nonchild data transfer" insert "(9.6.4.7.2)". {That is "(\ref{D9:Executing defined input/output data transfers})".} [404:18+3(13.8.2.15 Note 13.26)] After "parent data transfer statement" insert "(9.6.4.7.2)". {That is "(\ref{D9:Executing defined input/output data transfers})".} [462:1(16.6.5 item 9)] After "wait operation" insert "(9.7.1)". {That is "(\ref{D9:Wait operation})".} [464:14(16.6.6 item 17)] "WAIT operation"->"wait operation (9.7.1)". {Fix typo, add cross-ref.} ===END===