From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,8d5bda3619cce0f8 X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news3.google.com!goblin3!goblin2!goblin.stu.neva.ru!news.net.uni-c.dk!dotsrc.org!filter.dotsrc.org!news.dotsrc.org!not-for-mail Date: Tue, 17 Feb 2009 08:19:01 +0100 From: Thomas Locke User-Agent: Thunderbird 2.0.0.19 (X11/20081209) MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: C getchar() functionality in Ada References: <4999ce31$0$90266$14726298@news.sunsite.dk> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Message-ID: <499a64e6$0$90264$14726298@news.sunsite.dk> Organization: SunSITE.dk - Supporting Open source NNTP-Posting-Host: 83.91.213.86 X-Trace: news.sunsite.dk DXC=fe[bK7WKNGYD]J=fIXJe6_YSB=nbEKnk[5l7JOAVQ`jR]KcSoP8OK@X@kCUDmHHZ?U:WTk`c[X5;_BZnCPI@fbM?9T X-Complaints-To: staff@sunsite.dk Xref: g2news1.google.com comp.lang.ada:3664 Date: 2009-02-17T08:19:01+01:00 List-Id: Adam Beneschan wrote: > I'd be surprised if the program actually ignores *all* linefeeds--- > that would indicate something is wrong with your compiler. But you're > probably seeing that blank lines get ignored---is that correct? Yes, that is correct. Just as you say, I've found that the Get and Get_Line functions ignore linefeeds. Get_Immediate on the other hand, appears to be "aware" of linefeeds. > > Ada doesn't think of Text_IO files just as streams of characters (with > linefeed being one of the characters); files are structured in terms > of lines and pages, without specifying just what form the line > separators and page separators look like. Here, End_Of_Line tests to > see if the input file is at the end of the line, but it does *not* > "eat" the line separator. You'll have to use Skip_Line for that. > Also, Get will skip over any line separators that it's facing. So if > there are two or more line separators in a row, End_Of_Line will not > swallow any of them, and then Get will swallow all of them. > Furthermore, if there are multiple line separators followed by the end- > of-file, End_Of_File will not return True because there are additional > "empty" lines, but then Get will eat all the line separators and then > raise End_Error because there is no character to read. That is *exactly* what I'm seeing. > I think that with this information you can probably figure out how to > make it work, as close as possible. But keep in mind that you are > *still* not going to be reading and writing individual characters the > same as in C. On Windows, the line separator is often CR LF (two > characters), and there's really no way in Ada (using Text_IO) to treat > that as two separate characters. If you need that, you'll have to go > outside the standard Ada library. Plus there's no telling what your > implementation will do if it sees CR or LF by itself, or LF CR, or > other mutant combinations of those control characters. Very good point. I wonder how the C getchar() program would handle itself with a file of CRLF terminated lines on a *nix machine. Am I right in assuming that Ada handles itself uniformly across all supported platforms? > In any event, the program you're writing probably has no practical > use. If you really want to read individual characters and treat > control characters just like all other characters, you probably don't > want to use Text_IO. If that isn't what you want, then you likely > don't want to read individual characters. I realize that this is not > a practical program that you're trying to mimic, but rather a example > to demonstrate some point. Yes, that was what Jeffrey also said. But now that I better understand why Text_IO behaves as it does, I think I'd rather build 2-3 small Ada programs to mimick the one C program, each program focusing on a specific area of behavior. I'm really only doing this to learn Ada, so doing a bit more code is probably not the worst idea. :o) For now, I will leave Streams for the future. I can easily see myself failing miserably with Streams, as they are probably a bit more complicated than Text_IO, and understanding Text_IO is, currently, a big enough challenge. > Hope this helps, > > -- Adam It did, very much. Thank you. :o) /Thomas