The SNOSTORM Returneth

I've resurected Fred Swartz's SNOSTORM preprocessor for SNOBOL4.

The fun/interesting about SNOSTORM is that it adds structured extensions to the SNOBOL4 language, so it looks and feels more like SNOBOL4 than Andrew Koenig's excellent (C flavored) snocone language. Here is an example from the SNOSTORM translator itself:

      IF DIFFER(PARFIELD,NULL)
         LOOP WHILE PARFIELD PARNAME =
            DO CASE (PAR)
 
            CASE ('COM')
               COM = 'YES'
 
            CASE ('NOCOM')
               COM = 'NO'
 
            CASE ('INDENT')
               IF NOT PARFIELD "'" BREAK("'") . INDENTAMT "'" (',' | RPOS(0)) =
                  ERR('BAD INDENT SPECIFICATION: INDENT=' PARFIELD)
                  EXITLOOP
               ENDIF
               DOINDENT = 'YES'
 
            CASE ('NOINDENT')
               DOINDENT = 'NO'
 
            CASE ('LIST')
               LISTING = 'YES'
 
            CASE ('NOLIST')
               LISTING = 'NO'
 
            CASE ('CONVERT')
               IF DIFFER(ALLPARS,'CONVERT')
                  ERR('CONVERT OPTION MAY ONLY BE USED ALONE')
                  *** THIS IS BECAUSE OF THE MAIN PROGRAM, Q.V. ***
               ELSE
                  CONVERTOLD()
               ENDIF
               :(RCEND)
 
            CASE ('DEBUG')
               *** PRODUCE LABELS AND GOTOS FOR ALL STATEMENTS ***
               DEBUG = 'YES'
 
            CASE ('NODEBUG')
               *** DON'T PRODUCE -COPY *SPITDEBUG ***   ????
               DEBUG = 'NO'
 
            CASE ('FRED')
               FRED = 'YES'
               DEBUG('YES MASTER?')
 
            ELSECASE
               ERR('UNRECOGNIZED PAR OPTION:' PAR)
               EXITLOOP
            ENDCASE
         ENDLOOP 
      ENDIF

Files used to bring SNOSTORM pre-processor back to life

flake.sno
SNOBOL4 program; implements JUST enough SNOSTORM to convert flurry.snos
flurry.snos
Chopped down copy of snostorm.snos (cut down by 30%)
Only uses features implemented by flake.sno.
Implements all features needed to translate itself AND snostorm.snos
snostorm.snos
full source of SNOSTORM in SNOSTORM
snostorm.sno
SNOSTORM translated to SNOBOL4 by itself.
Makefile
Un*x Makefile to bootstrap SNOSTORM & perform regression test

All of the above in a gzip'ed tar file: snostorm.tar.gz.

The bootstrap path (demonstrated by Makefile)

Notation:
               +------------+
INPUT FILE  -> | TRANSLATOR | -> OUTPUT FILE
	       +------------+

               +-----------+
flurry.snos -> | flake.sno | -> flurry.sno
	       +-----------+       |
                                   V
                            +------------+
           snostorm.snos -> | flurry.sno | -> fsnostorm.sno
                            +------------+         |
                                                   V
                                           +---------------+		    
                          snostorm.snos -> | fsnostorm.sno | -> snostorm.sno
                                           +---------------+

A regression test is performed:
                                           +--------------+		    
                          snostorm.snos -> | snostorm.sno | -> ss2.sno
                                           +--------------+

And snostorm.sno and ss2.sno are compareed to see that they are identical.