home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!zaphod.mps.ohio-state.edu!moe.ksu.ksu.edu!cis.ksu.edu!mac
- From: mac@cis.ksu.edu (Myron A. Calhoun)
- Newsgroups: comp.lang.fortran
- Subject: Re: Switching from Fortran to C
- Date: 11 Sep 92 20:48:55 GMT
- Organization: Kansas State University
- Lines: 78
- Message-ID: <mac.716244930@depot.cis.ksu.edu.cis.ksu.edu>
- References: <92253.131825BOYDJ@QUCDN.QueensU.CA> <22578@nntp_server.ems.cdc.com>
- NNTP-Posting-Host: depot.cis.ksu.edu
-
- mstemper@ems.cdc.com (Michael Stemper) writes:
- >And if you really want to drive a hard-core C programmer crazy, show them
- >that their C compiler will accept this file:....
-
- I try to make my C programs look more like Modula 2; here is a module from
- the last big C program I wrote: the C compiler eats it up.
- (#includes, #defines, most comments, & similar lines deleted for brevity)
-
- ------------ cut here ------------ cut here ------------ cut here ------------
- EXTERNAL INTEGER ISATTY();
- EXTERNAL VOID GET_NEXT_SYMBOL(), LINK_INTO_PLACE(), REPORT(),
- TAIL_EXCLUDE(), WRAP_UP();
-
- PROCEDURE MAIN (ARGC,ARGV)
- INTEGER ARGC;
- CHARACTER *ARGV[];
-
- LOCAL_VARIABLES
- UNSIGNED INTEGER count, length, longest_match;
- IMPLICANT_NODE *Pcur_imp_node, *Pnew_imp_node;
- ARRAY_INDEX X;
- CHARACTER file_name[81], *Pnew_symbol, *Pold_symbol;
-
- Pend_of_sequence = &sequence[MAXSEQUENCE-1];
- *(Plast_in_sequence = &sequence[0]) = START_SYMBOL;
-
- FOR (X = 0; (X < MAXSYMBOLS); X++) THEN
- implicant_counts[X] = 0;
- END_FOR
-
- LOOP_FOREVER
- GET_NEXT_SYMBOL(); /* Automagically terminates upon End-Of-File */
-
- IF (Pcur_imp_node) THEN /* At least one implicant exists */
- REPEAT
- FOR (length = (*Pcur_imp_node).implicant_length
- ,Pold_symbol = (*Pcur_imp_node).Pconsequent
- ,Pnew_symbol = Plast_in_sequence
- ,count = 2 /* Length of shortest implicant */
- ;(*--Pnew_symbol == *--Pold_symbol); ) THEN
-
- IF (++count > length) CONTINUE_OUTER_LOOP; /* Exact match! */
- END_FOR
-
- IF (count > longest_match) longest_match = count;
-
- AS_LONG_AS (Pcur_imp_node = (*Pcur_imp_node).Pnext_imp_node);
- END_IF
-
- Pnew_imp_node = (IMPLICANT_NODE *) MALLOC (SIZEOF(IMPLICANT_NODE));
- IF (Pnew_imp_node == NULL) THEN
- PRINTF ("\nALLOCATE_IMPLICANT_NODE: ran out of memory!\n");
- WRAP_UP (2);
- END_IF
-
- ++implicant_counts[symbol];
- (*Pnew_imp_node).implicant_length = longest_match;
-
- TAIL_EXCLUDE (Pnew_imp_node);
-
- LINK_INTO_PLACE (Pnew_imp_node, &Pimplicant_nodes[symbol]);
-
- IF ((*Pnew_imp_node).implicant_length > inductive_base) THEN
- inductive_base = (*Pnew_imp_node).implicant_length;
- PRINTF ("final position %3d", (Prescan - &sequence[0]));
- END_IF
-
- Outer_Loop_End:;
- END_FOREVER
-
- END_PROCEDURE
- ------------ cut here ------------ cut here ------------ cut here ------------
- --Myron.
- --
- # We preserve our freedoms using four boxes: soap, ballot, jury, and cartridge.
- # Myron A. Calhoun, PhD EE; Assoc. Professor (913) 539-4448 home
- # INTERNET: mac@cis.ksu.edu (129.130.10.5) 532-6350 work, 532-7353 fax
- # UUCP: ...rutgers!depot!mac Packet-BBS: W0PBV @ K0VAY.#NEKS.KS.USA.NAOM
-