|
|
1.1 ! root 1: %{ ! 2: #include "y.tab.h" ! 3: #include "checkperms.h" ! 4: #include "monitor.h" ! 5: ! 6: #undef input ! 7: ! 8: /* ! 9: * input routine takes care of tab counting. ! 10: */ ! 11: input() ! 12: { ! 13: int c; ! 14: static int here = 0, atstart = 1, atpos = 0, level = 0, stops[20]; ! 15: ! 16: while (atstart) { ! 17: switch (c = my_getchar()) { ! 18: case '\t': ! 19: atpos |= 7; ! 20: case ' ': ! 21: atpos++; ! 22: break; ! 23: case '\n': ! 24: atpos = 0; ! 25: lineno++; ! 26: #if 0 ! 27: /* DEBUG */ fprintf(stderr, "lineno: %d\n", lineno); ! 28: #endif /* 0 */ ! 29: break; ! 30: default: ! 31: my_ungetchar(c); ! 32: atstart = 0; ! 33: if (atpos > here) { ! 34: here = stops[++level] = atpos; ! 35: return(2); ! 36: } ! 37: } /* switch (c = my_getchar()) */ ! 38: ! 39: } ! 40: ! 41: if (atpos < here) { ! 42: here = stops[--level]; ! 43: return(1); ! 44: } ! 45: ! 46: switch (c = my_getchar()) { ! 47: case '\n': ! 48: atstart = 1; ! 49: atpos = 0; ! 50: lineno++; ! 51: #if 0 ! 52: /* DEBUG */ fprintf(stderr, "lineno: %d\n", lineno); ! 53: #endif /* 0 */ ! 54: } ! 55: ! 56: return(c); ! 57: } ! 58: ! 59: lookup(s) ! 60: char *s; ! 61: { ! 62: int i; ! 63: int retval; ! 64: ! 65: retval = 0; ! 66: for (i = 0; i < NUM_TOKENS; ++i){ ! 67: if(strcmp(s, token_table[i].string) == 0) { ! 68: retval = token_table[i].value; ! 69: #ifdef DEBUG ! 70: fprintf(stderr, ! 71: "Token: %s, Line: %d\n", ! 72: token_table[i].string, lineno); ! 73: #endif DEBUG ! 74: } /* if s matches token_table[i].string */ ! 75: } /* for i = 0 to NUM_TOKENS - walk through the table. */ ! 76: ! 77: return(retval); ! 78: } /* lookup() */ ! 79: %} ! 80: ! 81: %% ! 82: "\001" { ! 83: /* If we are at the bottom of a foreach */ ! 84: if (host_looping && (current_path == NULL)) { ! 85: /* We probably want to rewind to the foreach. */ ! 86: if (handle_foreach_unindent() == UNINDENT) { ! 87: /* No, we really are done with the ! 88: * foreach loop. ! 89: */ ! 90: return(UNINDENT); ! 91: } ! 92: } else { /* Otherwise, just an ordinary unindent. */ ! 93: return(UNINDENT); ! 94: } /* if we are at the bottom of a foreach */ ! 95: } /* UNINDENT */ ! 96: ! 97: "\002" { ! 98: if (!ignore_next_indent) { ! 99: return(INDENT); ! 100: } else { ! 101: ignore_next_indent = FALSE; ! 102: } /* if !ignore_next_indent */ ! 103: } /* INDENT */ ! 104: #.*\n { /* Ignore everything after a "#" to end of line. */ } ! 105: [ \t,]+ { /* Internal blanks and commas are white space. */ } ! 106: [ugo]+[+-][strwx]+ { copy_str(&chmod_string, yytext); ! 107: return(CHMOD_PERMISSION); ! 108: } /* Chmod pattern. */ ! 109: \"((\\\")|.)*\" { copy_str(&ret_string, yytext); ! 110: /* Strip off the leading and trailing quotes. */ ! 111: ret_string[strlen(ret_string) - 1] = (char) NULL; ! 112: ++ret_string; ! 113: return(STRING); ! 114: } /* String pattern. */ ! 115: [a-zA-Z][a-zA-Z0-9]* { int retval; ! 116: if ((retval = lookup(yytext)) == 0) { ! 117: fprintf(stderr, ! 118: "Invalid token %s ", ! 119: yytext); ! 120: FATAL("in line %d.\n", lineno); ! 121: } /* if retval invalid */ ! 122: return(retval); } ! 123: "\n" { return(NL); } ! 124: %% ! 125: int ! 126: handle_foreach_unindent() ! 127: { ! 128: #if 0 ! 129: /* DEBUG */ printf("%d: finished a declarator block.\n", lineno); ! 130: #endif /* 0 */ ! 131: if((current_host = next_host()) != NULL){ ! 132: #if 0 ! 133: /* DEBUG */ printf("%d: There is another host.\n", lineno); ! 134: #endif /* 0 */ ! 135: saving_to_monitor_file = FALSE; ! 136: reading_from_monitor_file = TRUE; ! 137: rewind_monitor_file(); ! 138: ignore_next_indent = TRUE; ! 139: } else { ! 140: #if 0 ! 141: /* DEBUG */ printf("%d: No more hosts.\n", lineno); ! 142: #endif /* 0 */ ! 143: close_monitor_file(); /* Throw away old input. */ ! 144: saving_to_monitor_file = FALSE; ! 145: reading_from_monitor_file = FALSE; ! 146: host_looping = FALSE; /* We're done looping. */ ! 147: return(UNINDENT); ! 148: } ! 149: return(0); ! 150: } /* handle_foreach_unindent() */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.