C SUBROUTINE TO GET A NAME C C Submitted by: C C R. N. Stillwell C Institute for Lipid Research C Baylor College of Medicine C Houston, Texas 77030 C C (who would be glad to receive comments, suggestions, bug fixes, etc., but C who promises no support whatever). C C Literature reference: C C R. N. Stillwell. A low-overhead laboratory data management system C for the PDP11. Comput. Biomed. Res., 15, 29-38(1982). C C Acknowledgement: C C This software was developed under National Institutes of Health grants C GM-13901 and GM-26611. C C General permission is hereby granted to copy, modify, or distribute this C program, but not for profit. Copyright to this software is and shall C remain in the public domain. C C CALL GETNAM(NAME,MAXLEN) C C NAME BYTE ARRAY RETURNS NAME, NULL TERMINATED C MAXLEN INTEGER MAX LENGTH, INCLUDING NULL C SUBROUTINE GETNAM (NAME,MAXLEN) BYTE NAME(MAXLEN) INTEGER CR,SPACE BYTE ALPNUM(37) DATA CR/"15/ DATA SPACE/"40/ DATA ALPNUM/ 'A','B','C','D','E','F','G','H','I','J','K','L', 1 'M','N','O','P','Q','R','S','T','U','V','W','X', 1 'Y','Z','0','1','2','3','4','5','6','7','8','9', 1 0/ C C FIRST SEE IF NAME IS PASSED VIA MCR C BYTE MCRBUF(80) CALL GETMCR(MCRBUF) LBUF = INDEX(MCRBUF,CR) IF (LBUF.GT.5) MCRBUF(LBUF) = 0 LSP = INDEX(MCRBUF(5),SPACE) MAX=MAXLEN IF (LSP.NE.0) MAX = MIN0(LSP-1,MAXLEN) CALL MVSTR(NAME,MCRBUF(5),MAX) D WRITE (5,9901) NAME,NAME D9901 FORMAT (' NAME: ',10A1/10O5) LFNAM = LENGTH(NAME) CHECK-NAME WHEN (OK) RETURN ELSE CALL EXIT FIN C C OTHERWISE ASK FOR IT C REPEAT UNTIL (OK) WRITE (5,3) 3 FORMAT ('$ENTER THE NAME: ') READ (5,22) LFNAM,NAME 22 FORMAT (Q,80A1) LFNAM = LFNAM+1 NAME(MIN0(MAXLEN,LFNAM)) = 0 LOGICAL*1 OK CHECK-NAME FIN RETURN TO CHECK-NAME OK = .FALSE. CONDITIONAL (LFNAM.GT.MAXLEN) WRITE (5,31) MAXLEN-1 (VERIFY(NAME,ALPNUM).NE.0) WRITE (5,32) (OTHERWISE) OK = .TRUE. FIN 31 FORMAT (' NO MORE THAN ',I2,' CHARACTERS, PLEASE.') 32 FORMAT (' LETTERS AND NUMBERS ONLY, PLEASE.') FIN END