Factor trim format function out
[mmh] / sbr / seq_nameok.c
index e10ef92..54d63ee 100644 (file)
@@ -1,55 +1,59 @@
 /*
- * seq_nameok.c -- check if a sequence name is ok
- *
- * This code is Copyright (c) 2002, by the authors of nmh.  See the
- * COPYRIGHT file in the root directory of the nmh distribution for
- * complete copyright information.
- */
+** seq_nameok.c -- check if a name is ok for a user-defined sequence
+**
+** This code is Copyright (c) 2002, by the authors of nmh.  See the
+** COPYRIGHT file in the root directory of the nmh distribution for
+** complete copyright information.
+*/
 
 #include <h/mh.h>
+#include <ctype.h>
 
 
+/*
+** returns true if it is a valid name for a user-defined sequence
+*/
 int
-seq_nameok (unsigned char *s)
+seq_nameok(unsigned char *s)
 {
        unsigned char *pp;
 
        if (s == NULL || *s == '\0') {
-               advise (NULL, "empty sequence name");
+               advise(NULL, "empty sequence name");
                return 0;
        }
 
        /*
-        * Make sure sequence name doesn't clash with one
-        * of the `reserved' sequence names.
-        */
-       if (!(strcmp (s, "new") &&
-                 strcmp (s, "all") &&
-                 strcmp (s, "first") &&
-                 strcmp (s, "last") &&
-                 strcmp (s, "prev") &&
-                 strcmp (s, "next"))) {
-               advise (NULL, "illegal sequence name: %s", s);
+       ** Make sure sequence name doesn't clash with one
+       ** of the `reserved' sequence names.
+       ** Note: Accept `cur' here! But why is it treated special? --meillo
+       */
+       if (strcmp(s, seq_first)==0 || strcmp(s, seq_last)==0 ||
+                       strcmp(s, seq_prev)==0 || strcmp(s, seq_next)==0 ||
+                       strcmp(s, seq_all)==0 || strcmp(s, seq_beyond)==0) {
+               advise(NULL, "collision with reserved sequence name: `%s'", s);
                return 0;
        }
 
        /*
-        * First character in a sequence name must be
-        * an alphabetic character ...
-        */
-       if (!isalpha (*s)) {
-               advise (NULL, "illegal sequence name: %s", s);
+       ** First character in a sequence name must be
+       ** an alphabetic character ...
+       */
+       if (!isalpha(*s)) {
+               advise(NULL, "sequence name must start with a letter: %s", s);
                return 0;
        }
 
        /*
-        * and can be followed by zero or more alphanumeric characters
-        */
-       for (pp = s + 1; *pp; pp++)
-               if (!isalnum (*pp)) {
-                       advise (NULL, "illegal sequence name: %s", s);
+       ** and can be followed by zero or more alphanumeric characters
+       */
+       for (pp = s+1; *pp; pp++) {
+               if (!isalnum(*pp)) {
+                       advise(NULL, "sequence name must only contain "
+                                       "letters and digits: %s", s);
                        return 0;
                }
+       }
 
        return 1;
 }