jeff@onion.pdx.com (Jeff Beadles) (12/14/90)
Well, there was a bug on some systems with the original version of casefix that I posted last week. Some system's don't handle toupper/tolower properly if the character is not alpha to be begin with. So, I've changed things like ch = tolower(ch) to... if (isupper(ch)) ch = tolower(ch); Also, I've added the provision for '\n\n' to also be considered the end of a sentence. I decided not to post a patch, as the entire source listing is <5k. Have fun, and remember to always post follow-up's to alt.sources.d :-) -Jeff #--------------------------------CUT HERE------------------------------------- #! /bin/sh # # This is a shell archive. Save this into a file, edit it # and delete all lines above this comment. Then give this # file to sh by executing the command "sh file". The files # will be extracted into the current directory owned by # you with default permissions. # # The files contained herein are: # # -rw-r--r-- 1 jeff 601 Dec 13 12:15 README # -rw-r--r-- 1 jeff 2549 Dec 13 12:19 casefix.c # echo 'x - README' if test -f README; then echo 'shar: not overwriting README'; else sed 's/^X//' << '________This_Is_The_END________' > README Xcasefix.c - Copyright 1990, Jeff Beadles. All rights reserved. X XPermission is granted to copy this at NO charge, as long as the copyright Xmessage remains intact. X XThis program will take all all upper/lower case text, and attempt to convert it Xto mixed case. It is not 100% accurate. It doesn't know about things Xlike proper nouns. (But what do you expect for free? :-) X XTo compile: cc -o casefix casefix.c (Simple enough.) X XTo use: casefix < ifile > ofile X XHave fun! Feel free to send constructive comments or patches. X X -Jeff X-- XJeff Beadles jeff@onion.pdx.com (or) uunet!onion.pdx.com!jeff ________This_Is_The_END________ if test `wc -c < README` -ne 601; then echo 'shar: README was damaged during transit (should have been 601 bytes)' fi fi ; : end of overwriting check echo 'x - casefix.c' if test -f casefix.c; then echo 'shar: not overwriting casefix.c'; else sed 's/^X//' << '________This_Is_The_END________' > casefix.c X/* X * Submittor: Jeff Beadles jeff@onion.pdx.com X * Date: Thu Dec 13 12:11:39 PST 1990 X * Name: casefix X * Version: 1.1 X * Machine: Unix X * Synopsis: Fixes all upper/lower case text into mixed case. X * Category: utils X */ X X/* casefix.c - Copyright 1990, Jeff Beadles. All rights reserved. X * Permission is granted to copy this at NO charge, as long as the copyright X * message remains intact. X * X * This is not 100% accurate. It doesn't know about things like proper nouns. X * (But what do you expect for free? :-) X * X * To compile: cc -o casefix casefix.c (Simple enough.) X * X * To use: casefix < ifile > ofile X * X * Have fun! Feel free to send constructive comments or patches to: X * jeff@onion.pdx.com (or) X * uunet!onion.pdx.com!jeff X * X * Version 1.1: Fixed a bug on some machines where if you use toupper/tolower X * on a non-alpha character, it scrambles it. Grr.... X * Also, '\n\n' marks the end of a sentence. X */ X X#include <stdio.h> X#include <ctype.h> X X/* ARGSUSED */ Xmain(argc,argv) Xint argc; Xchar **argv; X X{ X int ch; /* Tmp character holder */ X int lastch; /* Last char displayed */ X int nextch; /* Next character to be displayed (For I') */ X int newsent; /* Start of sentence flag */ X X newsent = 1; /* Start file with a new sentence */ X nextch = lastch = -1; /* Nothing in them yet. */ X X while(1) { X /* if readahead buffer is empty, then get another char */ X if ( nextch == -1) { X if ( (ch = getc(stdin)) == EOF ) X exit(0); X } else { X ch = nextch; X nextch = -1; X } X /* Default, is to make it lower case. */ X if(isupper(ch)) X ch = tolower(ch); X X /* Cap "(For example...)" */ X if ( (lastch == '(') && (islower(ch))) X ch = toupper(ch); X X /* Cap "I will, I've */ X if ( (isspace(lastch)) && (ch == 'i') ) { X if ( (nextch = getchar()) == EOF) { X putchar(ch); X exit(0); X } X /* Don't ungetc nextch, as it will be used next. */ X if ((isspace(nextch)) || (nextch == '\'')) { X if(islower(ch)) { X ch = toupper(ch); X } X } X } X X /* Cap 1st word of a new sentence. */ X if ( (newsent) && isalpha(ch)) { X newsent = 0; X if(islower(ch)) { X ch = toupper(ch); X } X } X X /* Sentences end with '.', '!', ':', '?', or ';'. or '\n\n' */ X if ( (ch == '.') || (ch == '!') || X (ch == ':') || (ch == ';') || (ch == '?') || X ( (ch == '\n') && (lastch == '\n')) ) X newsent = 1; X X /* Finally, display the character */ X putchar(ch); X lastch = ch; X } X} ________This_Is_The_END________ if test `wc -c < casefix.c` -ne 2549; then echo 'shar: casefix.c was damaged during transit (should have been 2549 bytes)' fi fi ; : end of overwriting check exit 0