|
|
1.1 ! root 1: #ifndef lint ! 2: static char RCSid[] = "$Header: misc.c,v 2.1 86/10/11 15:47:55 jqj Exp $"; ! 3: #endif ! 4: ! 5: /* $Log: misc.c,v $ ! 6: * Revision 2.1 86/10/11 15:47:55 jqj ! 7: * in stringtocard(), if passed a null pointer return 0. (per Liebman) ! 8: * ! 9: * Revision 2.0 85/11/21 07:21:41 jqj ! 10: * 4.3BSD standard release ! 11: * ! 12: * Revision 1.3 85/03/11 16:39:50 jqj ! 13: * *** empty log message *** ! 14: * ! 15: * Revision 1.3 85/03/11 16:39:50 jqj ! 16: * Public alpha-test version, released 11 March 1985 ! 17: * ! 18: * Revision 1.2 85/02/21 11:05:34 jqj ! 19: * alpha test version ! 20: * ! 21: * Revision 1.1 85/02/15 13:55:34 jqj ! 22: * Initial revision ! 23: * ! 24: */ ! 25: ! 26: #include "compiler.h" ! 27: ! 28: /* ! 29: * String allocation. ! 30: */ ! 31: char * ! 32: copy(s) ! 33: char *s; ! 34: { ! 35: char *p; ! 36: extern char *malloc(); ! 37: ! 38: if ((p = malloc(strlen(s) + 1)) == NULL) { ! 39: error(FATAL, "out of string space"); ! 40: } ! 41: (void) strcpy(p, s); ! 42: return (p); ! 43: } ! 44: ! 45: ! 46: /* ! 47: * like atoi, convert a string to an integer. Accept ! 48: * 1/ numeric string, e.g. "34" ! 49: * 2/ hex string, e.g. "0x22" ! 50: * 3/ octal string, e.g. "042" ! 51: * Handles only positive integers. ! 52: */ ! 53: int ! 54: stringtocard(str) ! 55: char *str; ! 56: { ! 57: int val; ! 58: ! 59: if (str == (char *) NULL) ! 60: return(0); /* sanity check */ ! 61: if ( ! 62: sscanf(str, " -0x%x", &val) > 0 || ! 63: sscanf(str, " -0%o", &val) > 0) ! 64: return( -val); ! 65: if ( ! 66: sscanf(str, " 0x%x", &val) > 0 || ! 67: sscanf(str, " 0%o", &val) > 0 || ! 68: sscanf(str, " %d", &val) > 0 ! 69: ) ! 70: return(val); ! 71: return(0); ! 72: } ! 73: ! 74: ! 75: /* ! 76: * Lisp operations. ! 77: */ ! 78: list ! 79: cons(a, b) ! 80: list a, b; ! 81: { ! 82: list p; ! 83: ! 84: if ((p = New(struct cons)) == NIL) { ! 85: error(FATAL,"Out of list space."); ! 86: } ! 87: car(p) = a; ! 88: cdr(p) = b; ! 89: return (p); ! 90: } ! 91: ! 92: length(p) ! 93: list p; ! 94: { ! 95: int n; ! 96: ! 97: for (n = 0; p != NIL; p = cdr(p), n++) ! 98: ; ! 99: return (n); ! 100: } ! 101: ! 102: list ! 103: nconc(p, q) ! 104: list p, q; ! 105: { ! 106: list pp; ! 107: ! 108: pp = p; ! 109: if (p == NIL) ! 110: return (q); ! 111: while (cdr(p) != NIL) ! 112: p = cdr(p); ! 113: cdr(p) = q; ! 114: return (pp); ! 115: } ! 116:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.