Share directory - advice is needed



   From: "Vadim V. Zhytnikov" <vvzhy at mail>
   
   Share reorganization is on the way but what about converting
   Maxima Lisp code in /src to lower case? Are we going to
   do this now? Or later file by file?
   
This would be a worthy task.  Anyone who wants to undertake it is
welcome to use a little tool I wrote long ago, appended below.  It is
a Unix filter that translates mixed-case Common Lisp code into uniform
lower case.  It should build and run on any Unix or Linux, although I
haven't been maintaining the code in about a decade.

========== downcase.l
%{
/* downcase -- A Common Lisp case unifier.
 * smh		-[Fri Feb 16 09:41:44 1990 by smh]-
 *
 * Copyright 1990 Steven M. Haflich
 * Permission is hereby granted for anyone to use this code for any purpose
 * whatever at his own risk, proivided this copyright is preserved in all
 * copies of this program.  No warrantee is stated, assumed, or implied.
 *
 * This quick hack is a filter for Common Lisp source code to allow
 * code with inconsistent mixedcase to be compiled and run in a
 * case-sensitive-lower Allegro CL image.
 * It takes standard CL with mixed case and downcases all the code, leaving
 * comments and strings alone.  Any symbol that has backslash or vertical-bar
 * escapes is also left alone.  This probably doesn't cope with all standard
 * lisp syntax, so send bugs to smh@franz.com and I'll try to fix them.
 * But what do you want from a program that's nearly all punctuation?
 * (God created Unix regular expression syntax only so we finite-state
 * automata could have something to try to understand.)
 *
 * This does handle standard syntax strings, comments, #| ... |#, symbols
 * with multiple escape chars, and single escape chars everywhere it should.
 * It does not handle nested #| ... |# constructs.
 *
 * After running a case-insensitive Common Lisp source file through this
 * filter, here are the things for which you typically still need to search.
 * (The quoted strings are literals for which you might search.)
 *   Calls to "-package" functions with upper-case string args.
 *   Calls to "(intern" and "(find-symbol" with string args built
 * typicaly using calls to format nil.  In addition, it might be useful to
 * search for "(format ()" and "(format nil".
 *
 * To build:
 *   lex downcase.l; cc -O -o downcase lex.yy.c -ll
 */

#include <ctype.h>
#define P	{ printf("%s",yytext); }

%}
A	[-A-Za-z0-9./\$%\^&\*\?\!\@\[\]\~\=\+\_\<\>\,]

%%

\#\|([^|]|(\|[^#])|\n)*\|\#	{ P }
{A}+				{ char *s;
				  for ( s=yytext; *s; s++)
				      if (isupper(*s))
					  *s = tolower(*s);
				  P }
\\(.|\n)			{ P }
;.*\n				{ P }
\|([^\\|]|(\\(.|\n)))*\|	{ char *s;
				  for ( s=yytext; *s; s++)
				      if (isupper(*s)) {
					 fprintf(stderr,
			"Warning: multi-escaped symbol has uppercase: %s\n",
						yytext);
					 break;
					 }
				  P }
\"([^\\"]|(\\(.|\n)))*\"	{ P }

%%

#define YYLMAX (50000)		/* handle large #| ... |# */

main(ac,av)
 char **av;
{
    if (ac>2) usage(av[0]);
    if (ac==2) {
	if (freopen(av[1],"r",stdin)==NULL) {
	    fprintf(stderr,"%s: can't open %s\n", av[0], av[1]);
	    exit(1);
	}
    }
    yylex();
}

usage(s)
    char *s;
{
    fprintf(stderr, "Usage: %s [input file]\n", s);
}

==========