Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Moved the "Strings are of Words, Not of Bytes or Characters" section of the CC8 user manual up within the document to be after the "Character Set" section, where it fits better. (This wasn't really possible back when the latter section was part of the stdio section.) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
7f8d8bcff5fa2d72a69530c63d003507 |
User & Date: | tangent 2019-02-13 19:13:25.170 |
Context
2019-02-19
| ||
03:13 | Cherrypicked [52aa88863c] onto trunk, primarily to ensure that those with recent trunk checkouts don't get unexpectedly sent to branch cc8-cleanups. This change is harmless to have in both places. check-in: 0c7432da84 user: tangent tags: trunk | |
01:23 | Moved [f]printf() buffer down into the otherwise sparsely used zero page, and rearranged the constants previously declared there to make better use of the space available. This then opens another half-page of space for the stack. Updated docs to cover all of this. EDIT: This is the start of a new branch because this checkin breaks some things, and some of the subsequent checkins destabilize CC8. I'm moving it to a branch until all that's fixed. check-in: 1ea9133a37 user: tangent tags: cc8-libc-zp-reorg | |
2019-02-13
| ||
19:13 | Moved the "Strings are of Words, Not of Bytes or Characters" section of the CC8 user manual up within the document to be after the "Character Set" section, where it fits better. (This wasn't really possible back when the latter section was part of the stdio section.) check-in: 7f8d8bcff5 user: tangent tags: trunk | |
19:12 | Added more detail about file I/O limitations to the LIBC user documentation section of the CC8 manual. (What used to be the "stdio" section is now broken up into several sections at the same level.) check-in: 23f92ab553 user: tangent tags: trunk | |
Changes
Changes to doc/cc8-manual.md.
︙ | ︙ | |||
546 547 548 549 550 551 552 553 554 555 556 557 558 559 | implementation. Even if you are reading your files with some other code which is capable of handling 8-bit data, there are further difficulties such as a lack of functions taking an explicit length, like `fwrite()`, which makes dealing with ASCII NUL difficult. You could write a NUL to an output file with `fputc()`, but not with `fputs()`, since NUL terminates the output string. ### <a id="fiolim"></a>File I/O Limitations Because LIBC’s stdio implementation is built atop the OS/8 FORTRAN II library, it only allows one file to be open at a time for reading and one for writing. OS/8’s underlying limit is 5 output files and 9 input files, which appears to be an accommodation specifically for its FORTRAN | > > > > > > > > > > > > > > > > > > > > > > | 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 | implementation. Even if you are reading your files with some other code which is capable of handling 8-bit data, there are further difficulties such as a lack of functions taking an explicit length, like `fwrite()`, which makes dealing with ASCII NUL difficult. You could write a NUL to an output file with `fputc()`, but not with `fputs()`, since NUL terminates the output string. ### <a id="wordstr"></a>Strings are of Words, Not of Bytes or Characters In several places, the Standard says a conforming C library is supposed to operate on “bytes” or “characters,” at least according to [our chosen interpretation][cppr]. Except for the text I/O restrictions called out [above](#cset), LIBC operates on strings of PDP-8 words, not on these modern notions of fixed 8-bit bytes or the ever-nebulous “characters.” Because you may be used to the idea that string and memory functions like [`memcpy()`](#memcpy) and [`strcat()`](#strcat) will operate on bytes, we’ve marked all of these cases with a reference back to this section. By the same token, most functions that operate on NUL-terminated string buffers in a conforming C library implementation actually check for a word equal to 0000₈ in this implementation. The key thing to understand is that these routines are not carefully masking off the top 4 or 5 bits to check *only* against a 7- or 8-bit NUL character. This is another manifestation of [CC8’s typeless nature](#typeless). ### <a id="fiolim"></a>File I/O Limitations Because LIBC’s stdio implementation is built atop the OS/8 FORTRAN II library, it only allows one file to be open at a time for reading and one for writing. OS/8’s underlying limit is 5 output files and 9 input files, which appears to be an accommodation specifically for its FORTRAN |
︙ | ︙ | |||
603 604 605 606 607 608 609 | corrupted the OS’s resident parts — or restart the PDP-8. (You can restart OS/8 by causing a jump to core memory location 07600. Within the `pidp8i` environment, you can hit Ctrl-E, then say “`go 7600`”. From the front panel, press the Stop key, toggle 7600 into the switch register, press the Load Add key, then press the Start key.) | < < < < < < < < < < < < < < < < < < < < < < | 625 626 627 628 629 630 631 632 633 634 635 636 637 638 | corrupted the OS’s resident parts — or restart the PDP-8. (You can restart OS/8 by causing a jump to core memory location 07600. Within the `pidp8i` environment, you can hit Ctrl-E, then say “`go 7600`”. From the front panel, press the Stop key, toggle 7600 into the switch register, press the Load Add key, then press the Start key.) ### <a id="missing"></a>Missing Functions The bulk of the Standard C Library is not provided, including some functions you’d think would go along nicely with those we do provide, such as `feof()` or `fseek()`. Keep in mind that the library is currently restricted to [a single 4 kWord field](#memory), and we |
︙ | ︙ |