]> andersk Git - moira.git/blobdiff - lib/fixname.c
Make sq routines check the result of malloc. (Mostly for dbck.)
[moira.git] / lib / fixname.c
index 8bf968e9865de9e3e6bdf9c45ca4771215b10ad6..ae133a412cdc30ba02ddc878fbb148520deffe19 100644 (file)
@@ -4,21 +4,16 @@
  *     $Header$
  *
  *     Copyright (C) 1987 by the Massachusetts Institute of Technology
- *
- *     $Log$
- *     Revision 1.2  1987-09-03 03:21:34  wesommer
- *     upped string lengths to reasonable levels.
- *
- * Revision 1.1  87/08/22  17:14:30  wesommer
- * Initial revision
- * 
+ *     For copying and distribution information, please see the file
+ *     <mit-copyright.h>.
  */
 
 #ifndef lint
 static char *rcsid_fixname_c = "$Header$";
 #endif lint
 
-#include <strings.h>
+#include <mit-copyright.h>
+#include <string.h>
 #include <ctype.h>
 
 #define LAST_LEN               100
@@ -28,7 +23,7 @@ void FixName(ilnm, ifnm, last, first, middle)
        char *ilnm, *ifnm;
        char *first, *last, *middle;
 {
-       int ends_jr=0, ends_iii=0, ends_iv=0;
+       int ends_jr=0, ends_iii=0, ends_iv=0, ends_ii=0, ends_v=0;
 
        Upcase(ilnm);
        Upcase(ifnm);
@@ -36,7 +31,7 @@ void FixName(ilnm, ifnm, last, first, middle)
        /* Last name ... */
 
        TrimTrailingSpace(ilnm);
-       LookForJrAndIII(ilnm, &ends_jr, &ends_iii, &ends_iv);
+       LookForJrAndIII(ilnm, &ends_jr, &ends_ii, &ends_iii, &ends_iv, &ends_v);
        LookForSt(ilnm);
        LookForO(ilnm);
        FixCase(ilnm);
@@ -45,35 +40,18 @@ void FixName(ilnm, ifnm, last, first, middle)
                /* First name  & middle initial ... */
 
        TrimTrailingSpace(ifnm);
-       LookForJrAndIII(ifnm, &ends_jr, &ends_iii, &ends_iv);
+       LookForJrAndIII(ifnm, &ends_jr, &ends_ii, &ends_iii, &ends_iv, &ends_v);
 
         GetMidInit(ifnm, middle);
 
        FixCase(ifnm);
 #ifdef notdef
                /* okay, finish up first name */
-       AppendJrOrIII(ifnm, &ends_jr, &ends_iii, &ends_iv);
+       AppendJrOrIII(ifnm, &ends_jr, &ends_ii, &ends_iii, &ends_iv, &ends_v);
 #endif notdef
        strncpy(first, ifnm, FIRST_LEN);
 }
-#ifdef notdef
-AppendJrOrIII(nm, phas_jr, phas_iii, phas_iv)
-register char *nm;
-register int *phas_jr;
-register int *phas_iii;
-register int *phas_iv;
-{
-    if (*phas_jr) {
-       strcat(nm, ", Jr.");
-    }
-    else if (*phas_iii) {
-       strcat(nm, " III");
-    }
-    else if (*phas_iv) {
-       strcat(nm, " IV");
-    }
-}
-#endif notdef
+
 FixCase(p)
 register char *p;
 {
@@ -81,23 +59,24 @@ register char *p;
                        /* a space or punctuation mark (e.g., '-') */
 
     for (cflag = 0; *p; p++) {
-       if (cflag && isupper(*p)) {
-           *p = tolower(*p);
-       }
-       else if (isspace(*p) || ispunct(*p)) {
-           cflag = 0;
-       }
-       else {
-           cflag = 1;
-       }
+       if (cflag && isupper(*p))
+         *p = tolower(*p);
+       else if (!cflag && islower(*p))
+         *p = toupper(*p);
+       if (isalpha(*p))
+         cflag = 1;
+       else
+         cflag = 0;
     }
 }
 
-LookForJrAndIII(nm, pends_jr, pends_iii, pends_iv)
+LookForJrAndIII(nm, pends_jr, pends_ii, pends_iii, pends_iv, pends_v)
 register char *nm;
 register int *pends_jr;
+int *pends_ii;
 register int *pends_iii;
 register int *pends_iv;
+int *pends_v;
 {
     register int len = strlen(nm);
 
@@ -117,6 +96,14 @@ register int *pends_iv;
        *pends_iii = 1;
        nm[len - 4] = '\0';
     }
+    else if (len >= 4 && !strcmp(nm + len - 3, " II")) {
+       *pends_ii = 1;
+       nm[len - 3] = '\0';
+    }
+    else if (len >= 3 && !strcmp(nm + len - 2, " V")) {
+       *pends_v = 1;
+       nm[len - 2] = '\0';
+    }
 }
 
 LookForSt(nm)          /* ST PIERRE, etc. */
This page took 0.040988 seconds and 4 git commands to generate.