home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #20 / NN_1992_20.iso / spool / comp / lang / fortran / 3525 < prev    next >
Encoding:
Internet Message Format  |  1992-09-11  |  3.2 KB

  1. Path: sparky!uunet!zaphod.mps.ohio-state.edu!moe.ksu.ksu.edu!cis.ksu.edu!mac
  2. From: mac@cis.ksu.edu (Myron A. Calhoun)
  3. Newsgroups: comp.lang.fortran
  4. Subject: Re: Switching from Fortran to C
  5. Date: 11 Sep 92 20:48:55 GMT
  6. Organization: Kansas State University
  7. Lines: 78
  8. Message-ID: <mac.716244930@depot.cis.ksu.edu.cis.ksu.edu>
  9. References: <92253.131825BOYDJ@QUCDN.QueensU.CA> <22578@nntp_server.ems.cdc.com>
  10. NNTP-Posting-Host: depot.cis.ksu.edu
  11.  
  12. mstemper@ems.cdc.com (Michael Stemper) writes:
  13. >And if you really want to drive a hard-core C programmer crazy, show them
  14. >that their C compiler will accept this file:....
  15.  
  16. I try to make my C programs look more like Modula 2; here is a module from
  17. the last big C program I wrote:  the C compiler eats it up.
  18. (#includes, #defines, most comments, & similar lines deleted for brevity)
  19.  
  20. ------------ cut here ------------ cut here ------------ cut here ------------
  21. EXTERNAL INTEGER ISATTY();
  22. EXTERNAL VOID    GET_NEXT_SYMBOL(), LINK_INTO_PLACE(), REPORT(), 
  23.                  TAIL_EXCLUDE(), WRAP_UP();
  24.  
  25. PROCEDURE MAIN (ARGC,ARGV)
  26.   INTEGER    ARGC;
  27.   CHARACTER *ARGV[];
  28.  
  29. LOCAL_VARIABLES
  30.   UNSIGNED INTEGER count, length, longest_match;
  31.   IMPLICANT_NODE  *Pcur_imp_node, *Pnew_imp_node;
  32.   ARRAY_INDEX      X;
  33.   CHARACTER        file_name[81], *Pnew_symbol, *Pold_symbol;
  34.  
  35.    Pend_of_sequence  = &sequence[MAXSEQUENCE-1];
  36.    *(Plast_in_sequence = &sequence[0]) = START_SYMBOL;
  37.  
  38.    FOR (X = 0; (X < MAXSYMBOLS); X++) THEN
  39.        implicant_counts[X] = 0;
  40.    END_FOR
  41.  
  42.    LOOP_FOREVER
  43.       GET_NEXT_SYMBOL();  /* Automagically terminates upon End-Of-File */
  44.  
  45.       IF (Pcur_imp_node) THEN        /* At least one implicant exists */
  46.          REPEAT
  47.              FOR (length = (*Pcur_imp_node).implicant_length
  48.                  ,Pold_symbol = (*Pcur_imp_node).Pconsequent
  49.                  ,Pnew_symbol = Plast_in_sequence
  50.                  ,count       = 2    /* Length of shortest implicant */
  51.                  ;(*--Pnew_symbol == *--Pold_symbol); ) THEN
  52.  
  53.                  IF (++count > length) CONTINUE_OUTER_LOOP; /* Exact match! */
  54.              END_FOR
  55.  
  56.              IF (count > longest_match) longest_match = count;
  57.  
  58.          AS_LONG_AS (Pcur_imp_node = (*Pcur_imp_node).Pnext_imp_node);
  59.       END_IF
  60.  
  61.       Pnew_imp_node = (IMPLICANT_NODE *) MALLOC (SIZEOF(IMPLICANT_NODE));
  62.       IF (Pnew_imp_node == NULL) THEN
  63.          PRINTF ("\nALLOCATE_IMPLICANT_NODE:  ran out of memory!\n");
  64.          WRAP_UP (2);
  65.       END_IF
  66.  
  67.       ++implicant_counts[symbol];
  68.       (*Pnew_imp_node).implicant_length = longest_match;
  69.  
  70.       TAIL_EXCLUDE (Pnew_imp_node);
  71.  
  72.       LINK_INTO_PLACE (Pnew_imp_node, &Pimplicant_nodes[symbol]);
  73.  
  74.       IF ((*Pnew_imp_node).implicant_length > inductive_base) THEN
  75.          inductive_base = (*Pnew_imp_node).implicant_length;
  76.          PRINTF ("final position %3d", (Prescan - &sequence[0]));
  77.       END_IF
  78.  
  79. Outer_Loop_End:;
  80.    END_FOREVER
  81.  
  82. END_PROCEDURE
  83. ------------ cut here ------------ cut here ------------ cut here ------------
  84. --Myron.
  85. -- 
  86. # We preserve our freedoms using four boxes:  soap, ballot, jury, and cartridge.
  87. # Myron A. Calhoun, PhD EE; Assoc. Professor  (913) 539-4448 home
  88. # INTERNET: mac@cis.ksu.edu (129.130.10.5)          532-6350 work, 532-7353 fax
  89. #     UUCP: ...rutgers!depot!mac     Packet-BBS: W0PBV @ K0VAY.#NEKS.KS.USA.NAOM
  90.