Index: user/alc/PQ_LAUNDRY/bin/ed/main.c =================================================================== --- user/alc/PQ_LAUNDRY/bin/ed/main.c (revision 292469) +++ user/alc/PQ_LAUNDRY/bin/ed/main.c (revision 292470) @@ -1,1417 +1,1419 @@ /* main.c: This file contains the main control and user-interface routines for the ed line editor. */ /*- * Copyright (c) 1993 Andrew Moore, Talke Studio. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef lint #if 0 static const char copyright[] = "@(#) Copyright (c) 1993 Andrew Moore, Talke Studio. \n\ All rights reserved.\n"; #endif #endif /* not lint */ #include __FBSDID("$FreeBSD$"); /* * CREDITS * * This program is based on the editor algorithm described in * Brian W. Kernighan and P. J. Plauger's book "Software Tools * in Pascal," Addison-Wesley, 1981. * * The buffering algorithm is attributed to Rodney Ruddock of * the University of Guelph, Guelph, Ontario. * * The cbc.c encryption code is adapted from * the bdes program by Matt Bishop of Dartmouth College, * Hanover, NH. * */ #include #include #include #include #include #include #include #include "ed.h" #ifdef _POSIX_SOURCE static sigjmp_buf env; #else static jmp_buf env; #endif /* static buffers */ char stdinbuf[1]; /* stdin buffer */ static char *shcmd; /* shell command buffer */ static int shcmdsz; /* shell command buffer size */ static int shcmdi; /* shell command buffer index */ char *ibuf; /* ed command-line buffer */ int ibufsz; /* ed command-line buffer size */ char *ibufp; /* pointer to ed command-line buffer */ /* global flags */ int des = 0; /* if set, use crypt(3) for i/o */ static int garrulous = 0; /* if set, print all error messages */ int isbinary; /* if set, buffer contains ASCII NULs */ int isglobal; /* if set, doing a global command */ int modified; /* if set, buffer modified since last write */ int mutex = 0; /* if set, signals set "sigflags" */ static int red = 0; /* if set, restrict shell/directory access */ int scripted = 0; /* if set, suppress diagnostics */ int sigflags = 0; /* if set, signals received while mutex set */ static int sigactive = 0; /* if set, signal handlers are enabled */ static char old_filename[PATH_MAX] = ""; /* default filename */ long current_addr; /* current address in editor buffer */ long addr_last; /* last address in editor buffer */ int lineno; /* script line number */ static const char *prompt; /* command-line prompt */ static const char *dps = "*"; /* default command-line prompt */ static const char *usage = "usage: %s [-] [-sx] [-p string] [file]\n"; /* ed: line editor */ int main(volatile int argc, char ** volatile argv) { int c, n; long status = 0; (void)setlocale(LC_ALL, ""); red = (n = strlen(argv[0])) > 2 && argv[0][n - 3] == 'r'; top: while ((c = getopt(argc, argv, "p:sx")) != -1) switch(c) { case 'p': /* set prompt */ prompt = optarg; break; case 's': /* run script */ scripted = 1; break; case 'x': /* use crypt */ #ifdef DES des = get_keyword(); #else fprintf(stderr, "crypt unavailable\n?\n"); #endif break; default: fprintf(stderr, usage, red ? "red" : "ed"); exit(1); } argv += optind; argc -= optind; if (argc && **argv == '-') { scripted = 1; if (argc > 1) { optind = 1; goto top; } argv++; argc--; } /* assert: reliable signals! */ #ifdef SIGWINCH handle_winch(SIGWINCH); if (isatty(0)) signal(SIGWINCH, handle_winch); #endif signal(SIGHUP, signal_hup); signal(SIGQUIT, SIG_IGN); signal(SIGINT, signal_int); #ifdef _POSIX_SOURCE if ((status = sigsetjmp(env, 1))) #else if ((status = setjmp(env))) #endif { fputs("\n?\n", stderr); errmsg = "interrupt"; } else { init_buffers(); sigactive = 1; /* enable signal handlers */ if (argc && **argv && is_legal_filename(*argv)) { if (read_file(*argv, 0) < 0 && !isatty(0)) quit(2); else if (**argv != '!') if (strlcpy(old_filename, *argv, sizeof(old_filename)) >= sizeof(old_filename)) quit(2); } else if (argc) { fputs("?\n", stderr); if (**argv == '\0') errmsg = "invalid filename"; if (!isatty(0)) quit(2); } } for (;;) { if (status < 0 && garrulous) fprintf(stderr, "%s\n", errmsg); if (prompt) { printf("%s", prompt); fflush(stdout); } if ((n = get_tty_line()) < 0) { status = ERR; continue; } else if (n == 0) { if (modified && !scripted) { fputs("?\n", stderr); errmsg = "warning: file modified"; if (!isatty(0)) { if (garrulous) fprintf(stderr, "script, line %d: %s\n", lineno, errmsg); quit(2); } clearerr(stdin); modified = 0; status = EMOD; continue; } else quit(0); } else if (ibuf[n - 1] != '\n') { /* discard line */ errmsg = "unexpected end-of-file"; clearerr(stdin); status = ERR; continue; } isglobal = 0; if ((status = extract_addr_range()) >= 0 && (status = exec_command()) >= 0) if (!status || (status = display_lines(current_addr, current_addr, status)) >= 0) continue; switch (status) { case EOF: quit(0); case EMOD: modified = 0; fputs("?\n", stderr); /* give warning */ errmsg = "warning: file modified"; if (!isatty(0)) { if (garrulous) fprintf(stderr, "script, line %d: %s\n", lineno, errmsg); quit(2); } break; case FATAL: if (!isatty(0)) { if (garrulous) fprintf(stderr, "script, line %d: %s\n", lineno, errmsg); } else if (garrulous) fprintf(stderr, "%s\n", errmsg); quit(3); default: fputs("?\n", stderr); if (!isatty(0)) { if (garrulous) fprintf(stderr, "script, line %d: %s\n", lineno, errmsg); quit(2); } break; } } /*NOTREACHED*/ } long first_addr, second_addr; static long addr_cnt; /* extract_addr_range: get line addresses from the command buffer until an illegal address is seen; return status */ int extract_addr_range(void) { long addr; addr_cnt = 0; first_addr = second_addr = current_addr; while ((addr = next_addr()) >= 0) { addr_cnt++; first_addr = second_addr; second_addr = addr; if (*ibufp != ',' && *ibufp != ';') break; else if (*ibufp++ == ';') current_addr = addr; } if ((addr_cnt = min(addr_cnt, 2)) == 1 || second_addr != addr) first_addr = second_addr; return (addr == ERR) ? ERR : 0; } #define SKIP_BLANKS() while (isspace((unsigned char)*ibufp) && *ibufp != '\n') ibufp++ #define MUST_BE_FIRST() do { \ if (!first) { \ errmsg = "invalid address"; \ return ERR; \ } \ } while (0) /* next_addr: return the next line address in the command buffer */ long next_addr(void) { const char *hd; long addr = current_addr; long n; int first = 1; int c; SKIP_BLANKS(); for (hd = ibufp;; first = 0) switch (c = *ibufp) { case '+': case '\t': case ' ': case '-': case '^': ibufp++; SKIP_BLANKS(); if (isdigit((unsigned char)*ibufp)) { STRTOL(n, ibufp); addr += (c == '-' || c == '^') ? -n : n; } else if (!isspace((unsigned char)c)) addr += (c == '-' || c == '^') ? -1 : 1; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': MUST_BE_FIRST(); STRTOL(addr, ibufp); break; case '.': case '$': MUST_BE_FIRST(); ibufp++; addr = (c == '.') ? current_addr : addr_last; break; case '/': case '?': MUST_BE_FIRST(); if ((addr = get_matching_node_addr( get_compiled_pattern(), c == '/')) < 0) return ERR; else if (c == *ibufp) ibufp++; break; case '\'': MUST_BE_FIRST(); ibufp++; if ((addr = get_marked_node_addr(*ibufp++)) < 0) return ERR; break; case '%': case ',': case ';': if (first) { ibufp++; addr_cnt++; second_addr = (c == ';') ? current_addr : 1; addr = addr_last; break; } /* FALLTHROUGH */ default: if (ibufp == hd) return EOF; else if (addr < 0 || addr_last < addr) { errmsg = "invalid address"; return ERR; } else return addr; } /* NOTREACHED */ } #ifdef BACKWARDS /* GET_THIRD_ADDR: get a legal address from the command buffer */ #define GET_THIRD_ADDR(addr) \ { \ long ol1, ol2; \ \ ol1 = first_addr, ol2 = second_addr; \ if (extract_addr_range() < 0) \ return ERR; \ else if (addr_cnt == 0) { \ errmsg = "destination expected"; \ return ERR; \ } else if (second_addr < 0 || addr_last < second_addr) { \ errmsg = "invalid address"; \ return ERR; \ } \ addr = second_addr; \ first_addr = ol1, second_addr = ol2; \ } #else /* BACKWARDS */ /* GET_THIRD_ADDR: get a legal address from the command buffer */ #define GET_THIRD_ADDR(addr) \ { \ long ol1, ol2; \ \ ol1 = first_addr, ol2 = second_addr; \ if (extract_addr_range() < 0) \ return ERR; \ if (second_addr < 0 || addr_last < second_addr) { \ errmsg = "invalid address"; \ return ERR; \ } \ addr = second_addr; \ first_addr = ol1, second_addr = ol2; \ } #endif /* GET_COMMAND_SUFFIX: verify the command suffix in the command buffer */ #define GET_COMMAND_SUFFIX() { \ int done = 0; \ do { \ switch(*ibufp) { \ case 'p': \ gflag |= GPR, ibufp++; \ break; \ case 'l': \ gflag |= GLS, ibufp++; \ break; \ case 'n': \ gflag |= GNP, ibufp++; \ break; \ default: \ done++; \ } \ } while (!done); \ if (*ibufp++ != '\n') { \ errmsg = "invalid command suffix"; \ return ERR; \ } \ } /* sflags */ #define SGG 001 /* complement previous global substitute suffix */ #define SGP 002 /* complement previous print suffix */ #define SGR 004 /* use last regex instead of last pat */ #define SGF 010 /* repeat last substitution */ int patlock = 0; /* if set, pattern not freed by get_compiled_pattern() */ long rows = 22; /* scroll length: ws_row - 2 */ /* exec_command: execute the next command in command buffer; return print request, if any */ int exec_command(void) { static pattern_t *pat = NULL; static int sgflag = 0; static long sgnum = 0; pattern_t *tpat; char *fnp; int gflag = 0; int sflags = 0; long addr = 0; int n = 0; int c; SKIP_BLANKS(); switch(c = *ibufp++) { case 'a': GET_COMMAND_SUFFIX(); if (!isglobal) clear_undo_stack(); if (append_lines(second_addr) < 0) return ERR; break; case 'c': if (check_addr_range(current_addr, current_addr) < 0) return ERR; GET_COMMAND_SUFFIX(); if (!isglobal) clear_undo_stack(); if (delete_lines(first_addr, second_addr) < 0 || append_lines(current_addr) < 0) return ERR; break; case 'd': if (check_addr_range(current_addr, current_addr) < 0) return ERR; GET_COMMAND_SUFFIX(); if (!isglobal) clear_undo_stack(); if (delete_lines(first_addr, second_addr) < 0) return ERR; else if ((addr = INC_MOD(current_addr, addr_last)) != 0) current_addr = addr; break; case 'e': if (modified && !scripted) return EMOD; /* FALLTHROUGH */ case 'E': if (addr_cnt > 0) { errmsg = "unexpected address"; return ERR; } else if (!isspace((unsigned char)*ibufp)) { errmsg = "unexpected command suffix"; return ERR; } else if ((fnp = get_filename()) == NULL) return ERR; GET_COMMAND_SUFFIX(); if (delete_lines(1, addr_last) < 0) return ERR; clear_undo_stack(); if (close_sbuf() < 0) return ERR; else if (open_sbuf() < 0) return FATAL; - if (*fnp && *fnp != '!') strcpy(old_filename, fnp); + if (*fnp && *fnp != '!') + strlcpy(old_filename, fnp, PATH_MAX); #ifdef BACKWARDS if (*fnp == '\0' && *old_filename == '\0') { errmsg = "no current filename"; return ERR; } #endif if (read_file(*fnp ? fnp : old_filename, 0) < 0) return ERR; clear_undo_stack(); modified = 0; u_current_addr = u_addr_last = -1; break; case 'f': if (addr_cnt > 0) { errmsg = "unexpected address"; return ERR; } else if (!isspace((unsigned char)*ibufp)) { errmsg = "unexpected command suffix"; return ERR; } else if ((fnp = get_filename()) == NULL) return ERR; else if (*fnp == '!') { errmsg = "invalid redirection"; return ERR; } GET_COMMAND_SUFFIX(); - if (*fnp) strcpy(old_filename, fnp); + if (*fnp) + strlcpy(old_filename, fnp, PATH_MAX); printf("%s\n", strip_escapes(old_filename)); break; case 'g': case 'v': case 'G': case 'V': if (isglobal) { errmsg = "cannot nest global commands"; return ERR; } else if (check_addr_range(1, addr_last) < 0) return ERR; else if (build_active_list(c == 'g' || c == 'G') < 0) return ERR; else if ((n = (c == 'G' || c == 'V'))) GET_COMMAND_SUFFIX(); isglobal++; if (exec_global(n, gflag) < 0) return ERR; break; case 'h': if (addr_cnt > 0) { errmsg = "unexpected address"; return ERR; } GET_COMMAND_SUFFIX(); if (*errmsg) fprintf(stderr, "%s\n", errmsg); break; case 'H': if (addr_cnt > 0) { errmsg = "unexpected address"; return ERR; } GET_COMMAND_SUFFIX(); if ((garrulous = 1 - garrulous) && *errmsg) fprintf(stderr, "%s\n", errmsg); break; case 'i': if (second_addr == 0) { errmsg = "invalid address"; return ERR; } GET_COMMAND_SUFFIX(); if (!isglobal) clear_undo_stack(); if (append_lines(second_addr - 1) < 0) return ERR; break; case 'j': if (check_addr_range(current_addr, current_addr + 1) < 0) return ERR; GET_COMMAND_SUFFIX(); if (!isglobal) clear_undo_stack(); if (first_addr != second_addr && join_lines(first_addr, second_addr) < 0) return ERR; break; case 'k': c = *ibufp++; if (second_addr == 0) { errmsg = "invalid address"; return ERR; } GET_COMMAND_SUFFIX(); if (mark_line_node(get_addressed_line_node(second_addr), c) < 0) return ERR; break; case 'l': if (check_addr_range(current_addr, current_addr) < 0) return ERR; GET_COMMAND_SUFFIX(); if (display_lines(first_addr, second_addr, gflag | GLS) < 0) return ERR; gflag = 0; break; case 'm': if (check_addr_range(current_addr, current_addr) < 0) return ERR; GET_THIRD_ADDR(addr); if (first_addr <= addr && addr < second_addr) { errmsg = "invalid destination"; return ERR; } GET_COMMAND_SUFFIX(); if (!isglobal) clear_undo_stack(); if (move_lines(addr) < 0) return ERR; break; case 'n': if (check_addr_range(current_addr, current_addr) < 0) return ERR; GET_COMMAND_SUFFIX(); if (display_lines(first_addr, second_addr, gflag | GNP) < 0) return ERR; gflag = 0; break; case 'p': if (check_addr_range(current_addr, current_addr) < 0) return ERR; GET_COMMAND_SUFFIX(); if (display_lines(first_addr, second_addr, gflag | GPR) < 0) return ERR; gflag = 0; break; case 'P': if (addr_cnt > 0) { errmsg = "unexpected address"; return ERR; } GET_COMMAND_SUFFIX(); prompt = prompt ? NULL : optarg ? optarg : dps; break; case 'q': case 'Q': if (addr_cnt > 0) { errmsg = "unexpected address"; return ERR; } GET_COMMAND_SUFFIX(); gflag = (modified && !scripted && c == 'q') ? EMOD : EOF; break; case 'r': if (!isspace((unsigned char)*ibufp)) { errmsg = "unexpected command suffix"; return ERR; } else if (addr_cnt == 0) second_addr = addr_last; if ((fnp = get_filename()) == NULL) return ERR; GET_COMMAND_SUFFIX(); if (!isglobal) clear_undo_stack(); if (*old_filename == '\0' && *fnp != '!') - strcpy(old_filename, fnp); + strlcpy(old_filename, fnp, PATH_MAX); #ifdef BACKWARDS if (*fnp == '\0' && *old_filename == '\0') { errmsg = "no current filename"; return ERR; } #endif if ((addr = read_file(*fnp ? fnp : old_filename, second_addr)) < 0) return ERR; else if (addr && addr != addr_last) modified = 1; break; case 's': do { switch(*ibufp) { case '\n': sflags |=SGF; break; case 'g': sflags |= SGG; ibufp++; break; case 'p': sflags |= SGP; ibufp++; break; case 'r': sflags |= SGR; ibufp++; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': STRTOL(sgnum, ibufp); sflags |= SGF; sgflag &= ~GSG; /* override GSG */ break; default: if (sflags) { errmsg = "invalid command suffix"; return ERR; } } } while (sflags && *ibufp != '\n'); if (sflags && !pat) { errmsg = "no previous substitution"; return ERR; } else if (sflags & SGG) sgnum = 0; /* override numeric arg */ if (*ibufp != '\n' && *(ibufp + 1) == '\n') { errmsg = "invalid pattern delimiter"; return ERR; } tpat = pat; SPL1(); if ((!sflags || (sflags & SGR)) && (tpat = get_compiled_pattern()) == NULL) { SPL0(); return ERR; } else if (tpat != pat) { if (pat) { regfree(pat); free(pat); } pat = tpat; patlock = 1; /* reserve pattern */ } SPL0(); if (!sflags && extract_subst_tail(&sgflag, &sgnum) < 0) return ERR; else if (isglobal) sgflag |= GLB; else sgflag &= ~GLB; if (sflags & SGG) sgflag ^= GSG; if (sflags & SGP) sgflag ^= GPR, sgflag &= ~(GLS | GNP); do { switch(*ibufp) { case 'p': sgflag |= GPR, ibufp++; break; case 'l': sgflag |= GLS, ibufp++; break; case 'n': sgflag |= GNP, ibufp++; break; default: n++; } } while (!n); if (check_addr_range(current_addr, current_addr) < 0) return ERR; GET_COMMAND_SUFFIX(); if (!isglobal) clear_undo_stack(); if (search_and_replace(pat, sgflag, sgnum) < 0) return ERR; break; case 't': if (check_addr_range(current_addr, current_addr) < 0) return ERR; GET_THIRD_ADDR(addr); GET_COMMAND_SUFFIX(); if (!isglobal) clear_undo_stack(); if (copy_lines(addr) < 0) return ERR; break; case 'u': if (addr_cnt > 0) { errmsg = "unexpected address"; return ERR; } GET_COMMAND_SUFFIX(); if (pop_undo_stack() < 0) return ERR; break; case 'w': case 'W': if ((n = *ibufp) == 'q' || n == 'Q') { gflag = EOF; ibufp++; } if (!isspace((unsigned char)*ibufp)) { errmsg = "unexpected command suffix"; return ERR; } else if ((fnp = get_filename()) == NULL) return ERR; if (addr_cnt == 0 && !addr_last) first_addr = second_addr = 0; else if (check_addr_range(1, addr_last) < 0) return ERR; GET_COMMAND_SUFFIX(); if (*old_filename == '\0' && *fnp != '!') - strcpy(old_filename, fnp); + strlcpy(old_filename, fnp, PATH_MAX); #ifdef BACKWARDS if (*fnp == '\0' && *old_filename == '\0') { errmsg = "no current filename"; return ERR; } #endif if ((addr = write_file(*fnp ? fnp : old_filename, (c == 'W') ? "a" : "w", first_addr, second_addr)) < 0) return ERR; else if (addr == addr_last) modified = 0; else if (modified && !scripted && n == 'q') gflag = EMOD; break; case 'x': if (addr_cnt > 0) { errmsg = "unexpected address"; return ERR; } GET_COMMAND_SUFFIX(); #ifdef DES des = get_keyword(); break; #else errmsg = "crypt unavailable"; return ERR; #endif case 'z': #ifdef BACKWARDS if (check_addr_range(first_addr = 1, current_addr + 1) < 0) #else if (check_addr_range(first_addr = 1, current_addr + !isglobal) < 0) #endif return ERR; else if ('0' < *ibufp && *ibufp <= '9') STRTOL(rows, ibufp); GET_COMMAND_SUFFIX(); if (display_lines(second_addr, min(addr_last, second_addr + rows), gflag) < 0) return ERR; gflag = 0; break; case '=': GET_COMMAND_SUFFIX(); printf("%ld\n", addr_cnt ? second_addr : addr_last); break; case '!': if (addr_cnt > 0) { errmsg = "unexpected address"; return ERR; } else if ((sflags = get_shell_command()) < 0) return ERR; GET_COMMAND_SUFFIX(); if (sflags) printf("%s\n", shcmd + 1); system(shcmd + 1); if (!scripted) printf("!\n"); break; case '\n': #ifdef BACKWARDS if (check_addr_range(first_addr = 1, current_addr + 1) < 0 #else if (check_addr_range(first_addr = 1, current_addr + !isglobal) < 0 #endif || display_lines(second_addr, second_addr, 0) < 0) return ERR; break; default: errmsg = "unknown command"; return ERR; } return gflag; } /* check_addr_range: return status of address range check */ int check_addr_range(long n, long m) { if (addr_cnt == 0) { first_addr = n; second_addr = m; } if (first_addr > second_addr || 1 > first_addr || second_addr > addr_last) { errmsg = "invalid address"; return ERR; } return 0; } /* get_matching_node_addr: return the address of the next line matching a pattern in a given direction. wrap around begin/end of editor buffer if necessary */ long get_matching_node_addr(pattern_t *pat, int dir) { char *s; long n = current_addr; line_t *lp; if (!pat) return ERR; do { if ((n = dir ? INC_MOD(n, addr_last) : DEC_MOD(n, addr_last))) { lp = get_addressed_line_node(n); if ((s = get_sbuf_line(lp)) == NULL) return ERR; if (isbinary) NUL_TO_NEWLINE(s, lp->len); if (!regexec(pat, s, 0, NULL, 0)) return n; } } while (n != current_addr); errmsg = "no match"; return ERR; } /* get_filename: return pointer to copy of filename in the command buffer */ char * get_filename(void) { static char *file = NULL; static int filesz = 0; int n; if (*ibufp != '\n') { SKIP_BLANKS(); if (*ibufp == '\n') { errmsg = "invalid filename"; return NULL; } else if ((ibufp = get_extended_line(&n, 1)) == NULL) return NULL; else if (*ibufp == '!') { ibufp++; if ((n = get_shell_command()) < 0) return NULL; if (n) printf("%s\n", shcmd + 1); return shcmd; } else if (n > PATH_MAX - 1) { errmsg = "filename too long"; return NULL; } } #ifndef BACKWARDS else if (*old_filename == '\0') { errmsg = "no current filename"; return NULL; } #endif REALLOC(file, filesz, PATH_MAX, NULL); for (n = 0; *ibufp != '\n';) file[n++] = *ibufp++; file[n] = '\0'; return is_legal_filename(file) ? file : NULL; } /* get_shell_command: read a shell command from stdin; return substitution status */ int get_shell_command(void) { static char *buf = NULL; static int n = 0; char *s; /* substitution char pointer */ int i = 0; int j = 0; if (red) { errmsg = "shell access restricted"; return ERR; } else if ((s = ibufp = get_extended_line(&j, 1)) == NULL) return ERR; REALLOC(buf, n, j + 1, ERR); buf[i++] = '!'; /* prefix command w/ bang */ while (*ibufp != '\n') switch (*ibufp) { default: REALLOC(buf, n, i + 2, ERR); buf[i++] = *ibufp; if (*ibufp++ == '\\') buf[i++] = *ibufp++; break; case '!': if (s != ibufp) { REALLOC(buf, n, i + 1, ERR); buf[i++] = *ibufp++; } #ifdef BACKWARDS else if (shcmd == NULL || *(shcmd + 1) == '\0') #else else if (shcmd == NULL) #endif { errmsg = "no previous command"; return ERR; } else { REALLOC(buf, n, i + shcmdi, ERR); for (s = shcmd + 1; s < shcmd + shcmdi;) buf[i++] = *s++; s = ibufp++; } break; case '%': if (*old_filename == '\0') { errmsg = "no current filename"; return ERR; } j = strlen(s = strip_escapes(old_filename)); REALLOC(buf, n, i + j, ERR); while (j--) buf[i++] = *s++; s = ibufp++; break; } REALLOC(shcmd, shcmdsz, i + 1, ERR); memcpy(shcmd, buf, i); shcmd[shcmdi = i] = '\0'; return *s == '!' || *s == '%'; } /* append_lines: insert text from stdin to after line n; stop when either a single period is read or EOF; return status */ int append_lines(long n) { int l; const char *lp = ibuf; const char *eot; undo_t *up = NULL; for (current_addr = n;;) { if (!isglobal) { if ((l = get_tty_line()) < 0) return ERR; else if (l == 0 || ibuf[l - 1] != '\n') { clearerr(stdin); return l ? EOF : 0; } lp = ibuf; } else if (*(lp = ibufp) == '\0') return 0; else { while (*ibufp++ != '\n') ; l = ibufp - lp; } if (l == 2 && lp[0] == '.' && lp[1] == '\n') { return 0; } eot = lp + l; SPL1(); do { if ((lp = put_sbuf_line(lp)) == NULL) { SPL0(); return ERR; } else if (up) up->t = get_addressed_line_node(current_addr); else if ((up = push_undo_stack(UADD, current_addr, current_addr)) == NULL) { SPL0(); return ERR; } } while (lp != eot); modified = 1; SPL0(); } /* NOTREACHED */ } /* join_lines: replace a range of lines with the joined text of those lines */ int join_lines(long from, long to) { static char *buf = NULL; static int n; char *s; int size = 0; line_t *bp, *ep; ep = get_addressed_line_node(INC_MOD(to, addr_last)); bp = get_addressed_line_node(from); for (; bp != ep; bp = bp->q_forw) { if ((s = get_sbuf_line(bp)) == NULL) return ERR; REALLOC(buf, n, size + bp->len, ERR); memcpy(buf + size, s, bp->len); size += bp->len; } REALLOC(buf, n, size + 2, ERR); memcpy(buf + size, "\n", 2); if (delete_lines(from, to) < 0) return ERR; current_addr = from - 1; SPL1(); if (put_sbuf_line(buf) == NULL || push_undo_stack(UADD, current_addr, current_addr) == NULL) { SPL0(); return ERR; } modified = 1; SPL0(); return 0; } /* move_lines: move a range of lines */ int move_lines(long addr) { line_t *b1, *a1, *b2, *a2; long n = INC_MOD(second_addr, addr_last); long p = first_addr - 1; int done = (addr == first_addr - 1 || addr == second_addr); SPL1(); if (done) { a2 = get_addressed_line_node(n); b2 = get_addressed_line_node(p); current_addr = second_addr; } else if (push_undo_stack(UMOV, p, n) == NULL || push_undo_stack(UMOV, addr, INC_MOD(addr, addr_last)) == NULL) { SPL0(); return ERR; } else { a1 = get_addressed_line_node(n); if (addr < first_addr) { b1 = get_addressed_line_node(p); b2 = get_addressed_line_node(addr); /* this get_addressed_line_node last! */ } else { b2 = get_addressed_line_node(addr); b1 = get_addressed_line_node(p); /* this get_addressed_line_node last! */ } a2 = b2->q_forw; REQUE(b2, b1->q_forw); REQUE(a1->q_back, a2); REQUE(b1, a1); current_addr = addr + ((addr < first_addr) ? second_addr - first_addr + 1 : 0); } if (isglobal) unset_active_nodes(b2->q_forw, a2); modified = 1; SPL0(); return 0; } /* copy_lines: copy a range of lines; return status */ int copy_lines(long addr) { line_t *lp, *np = get_addressed_line_node(first_addr); undo_t *up = NULL; long n = second_addr - first_addr + 1; long m = 0; current_addr = addr; if (first_addr <= addr && addr < second_addr) { n = addr - first_addr + 1; m = second_addr - addr; } for (; n > 0; n=m, m=0, np = get_addressed_line_node(current_addr + 1)) for (; n-- > 0; np = np->q_forw) { SPL1(); if ((lp = dup_line_node(np)) == NULL) { SPL0(); return ERR; } add_line_node(lp); if (up) up->t = lp; else if ((up = push_undo_stack(UADD, current_addr, current_addr)) == NULL) { SPL0(); return ERR; } modified = 1; SPL0(); } return 0; } /* delete_lines: delete a range of lines */ int delete_lines(long from, long to) { line_t *n, *p; SPL1(); if (push_undo_stack(UDEL, from, to) == NULL) { SPL0(); return ERR; } n = get_addressed_line_node(INC_MOD(to, addr_last)); p = get_addressed_line_node(from - 1); /* this get_addressed_line_node last! */ if (isglobal) unset_active_nodes(p->q_forw, n); REQUE(p, n); addr_last -= to - from + 1; current_addr = from - 1; modified = 1; SPL0(); return 0; } /* display_lines: print a range of lines to stdout */ int display_lines(long from, long to, int gflag) { line_t *bp; line_t *ep; char *s; if (!from) { errmsg = "invalid address"; return ERR; } ep = get_addressed_line_node(INC_MOD(to, addr_last)); bp = get_addressed_line_node(from); for (; bp != ep; bp = bp->q_forw) { if ((s = get_sbuf_line(bp)) == NULL) return ERR; if (put_tty_line(s, bp->len, current_addr = from++, gflag) < 0) return ERR; } return 0; } #define MAXMARK 26 /* max number of marks */ static line_t *mark[MAXMARK]; /* line markers */ static int markno; /* line marker count */ /* mark_line_node: set a line node mark */ int mark_line_node(line_t *lp, int n) { if (!islower((unsigned char)n)) { errmsg = "invalid mark character"; return ERR; } else if (mark[n - 'a'] == NULL) markno++; mark[n - 'a'] = lp; return 0; } /* get_marked_node_addr: return address of a marked line */ long get_marked_node_addr(int n) { if (!islower((unsigned char)n)) { errmsg = "invalid mark character"; return ERR; } return get_line_node_addr(mark[n - 'a']); } /* unmark_line_node: clear line node mark */ void unmark_line_node(line_t *lp) { int i; for (i = 0; markno && i < MAXMARK; i++) if (mark[i] == lp) { mark[i] = NULL; markno--; } } /* dup_line_node: return a pointer to a copy of a line node */ line_t * dup_line_node(line_t *lp) { line_t *np; if ((np = (line_t *) malloc(sizeof(line_t))) == NULL) { fprintf(stderr, "%s\n", strerror(errno)); errmsg = "out of memory"; return NULL; } np->seek = lp->seek; np->len = lp->len; return np; } /* has_trailing_escape: return the parity of escapes preceding a character in a string */ int has_trailing_escape(char *s, char *t) { return (s == t || *(t - 1) != '\\') ? 0 : !has_trailing_escape(s, t - 1); } /* strip_escapes: return copy of escaped string of at most length PATH_MAX */ char * strip_escapes(char *s) { static char *file = NULL; static int filesz = 0; int i = 0; REALLOC(file, filesz, PATH_MAX, NULL); while (i < filesz - 1 /* Worry about a possible trailing escape */ && (file[i++] = (*s == '\\') ? *++s : *s)) s++; return file; } void signal_hup(int signo) { if (mutex) sigflags |= (1 << (signo - 1)); else handle_hup(signo); } void signal_int(int signo) { if (mutex) sigflags |= (1 << (signo - 1)); else handle_int(signo); } void handle_hup(int signo) { char *hup = NULL; /* hup filename */ char *s; char ed_hup[] = "ed.hup"; int n; if (!sigactive) quit(1); sigflags &= ~(1 << (signo - 1)); if (addr_last && write_file(ed_hup, "w", 1, addr_last) < 0 && (s = getenv("HOME")) != NULL && (n = strlen(s)) + 8 <= PATH_MAX && /* "ed.hup" + '/' */ (hup = (char *) malloc(n + 10)) != NULL) { strcpy(hup, s); if (hup[n - 1] != '/') hup[n] = '/', hup[n+1] = '\0'; strcat(hup, "ed.hup"); write_file(hup, "w", 1, addr_last); } quit(2); } void handle_int(int signo) { if (!sigactive) quit(1); sigflags &= ~(1 << (signo - 1)); #ifdef _POSIX_SOURCE siglongjmp(env, -1); #else longjmp(env, -1); #endif } int cols = 72; /* wrap column */ void handle_winch(int signo) { int save_errno = errno; struct winsize ws; /* window size structure */ sigflags &= ~(1 << (signo - 1)); if (ioctl(0, TIOCGWINSZ, (char *) &ws) >= 0) { if (ws.ws_row > 2) rows = ws.ws_row - 2; if (ws.ws_col > 8) cols = ws.ws_col - 8; } errno = save_errno; } /* is_legal_filename: return a legal filename */ int is_legal_filename(char *s) { if (red && (*s == '!' || !strcmp(s, "..") || strchr(s, '/'))) { errmsg = "shell access restricted"; return 0; } return 1; } Index: user/alc/PQ_LAUNDRY/share/colldef/Makefile =================================================================== --- user/alc/PQ_LAUNDRY/share/colldef/Makefile (revision 292469) +++ user/alc/PQ_LAUNDRY/share/colldef/Makefile (revision 292470) @@ -1,220 +1,220 @@ # $FreeBSD$ # Warning: Do not edit. This file is automatically generated from the # tools in /usr/src/tools/tools/locale. LOCALEDIR= ${SHAREDIR}/locale FILESNAME= LC_COLLATE .SUFFIXES: .src .LC_COLLATE MAPLOC= ${.CURDIR}/../../tools/tools/locale/etc/final-maps .src.LC_COLLATE: localedef -D -U -i ${.IMPSRC} \ -f ${MAPLOC}/map.UTF-8 ${.OBJDIR}/${.IMPSRC:T:R} LOCALES+= af_ZA.UTF-8 LOCALES+= am_ET.UTF-8 LOCALES+= ar_SA.UTF-8 LOCALES+= be_BY.UTF-8 LOCALES+= ca_AD.UTF-8 LOCALES+= cs_CZ.UTF-8 LOCALES+= da_DK.UTF-8 LOCALES+= el_GR.UTF-8 LOCALES+= en_US.UTF-8 LOCALES+= es_MX.UTF-8 LOCALES+= et_EE.UTF-8 LOCALES+= fi_FI.UTF-8 LOCALES+= he_IL.UTF-8 LOCALES+= hi_IN.UTF-8 LOCALES+= hr_HR.UTF-8 LOCALES+= hu_HU.UTF-8 LOCALES+= hy_AM.UTF-8 LOCALES+= is_IS.UTF-8 LOCALES+= ja_JP.UTF-8 LOCALES+= kk_Cyrl_KZ.UTF-8 LOCALES+= ko_KR.UTF-8 LOCALES+= lt_LT.UTF-8 LOCALES+= lv_LV.UTF-8 LOCALES+= nb_NO.UTF-8 LOCALES+= pl_PL.UTF-8 LOCALES+= ro_RO.UTF-8 LOCALES+= ru_RU.UTF-8 LOCALES+= se_NO.UTF-8 LOCALES+= sk_SK.UTF-8 LOCALES+= sl_SI.UTF-8 LOCALES+= sv_SE.UTF-8 LOCALES+= tr_TR.UTF-8 LOCALES+= uk_UA.UTF-8 LOCALES+= zh_Hans_CN.UTF-8 LOCALES+= zh_Hant_TW.UTF-8 -SAME+= af_ZA.UTF-8:af_ZA.ISO8859-15 -SAME+= af_ZA.UTF-8:af_ZA.ISO8859-1 -SAME+= ar_SA.UTF-8:ar_QA.UTF-8 -SAME+= ar_SA.UTF-8:ar_MA.UTF-8 -SAME+= ar_SA.UTF-8:ar_JO.UTF-8 -SAME+= ar_SA.UTF-8:ar_EG.UTF-8 -SAME+= ar_SA.UTF-8:ar_AE.UTF-8 -SAME+= be_BY.UTF-8:be_BY.ISO8859-5 -SAME+= be_BY.UTF-8:be_BY.CP1251 -SAME+= be_BY.UTF-8:be_BY.CP1131 -SAME+= ru_RU.UTF-8:sr_Cyrl_RS.UTF-8 -SAME+= ru_RU.UTF-8:sr_Cyrl_RS.ISO8859-5 -SAME+= ru_RU.UTF-8:ru_RU.KOI8-R -SAME+= ru_RU.UTF-8:ru_RU.ISO8859-5 -SAME+= ru_RU.UTF-8:ru_RU.CP866 -SAME+= ru_RU.UTF-8:ru_RU.CP1251 -SAME+= ru_RU.UTF-8:mn_Cyrl_MN.UTF-8 -SAME+= ru_RU.UTF-8:bg_BG.UTF-8 -SAME+= ru_RU.UTF-8:bg_BG.CP1251 -SAME+= ca_AD.UTF-8:ca_IT.UTF-8 -SAME+= ca_AD.UTF-8:ca_IT.ISO8859-15 -SAME+= ca_AD.UTF-8:ca_IT.ISO8859-1 -SAME+= ca_AD.UTF-8:ca_FR.UTF-8 -SAME+= ca_AD.UTF-8:ca_FR.ISO8859-15 -SAME+= ca_AD.UTF-8:ca_FR.ISO8859-1 -SAME+= ca_AD.UTF-8:ca_ES.UTF-8 -SAME+= ca_AD.UTF-8:ca_ES.ISO8859-15 -SAME+= ca_AD.UTF-8:ca_ES.ISO8859-1 -SAME+= ca_AD.UTF-8:ca_AD.ISO8859-15 -SAME+= ca_AD.UTF-8:ca_AD.ISO8859-1 -SAME+= cs_CZ.UTF-8:cs_CZ.ISO8859-2 -SAME+= da_DK.UTF-8:da_DK.ISO8859-15 -SAME+= da_DK.UTF-8:da_DK.ISO8859-1 -SAME+= en_US.UTF-8:sr_Latn_RS.UTF-8 -SAME+= en_US.UTF-8:sr_Latn_RS.ISO8859-2 -SAME+= en_US.UTF-8:pt_PT.UTF-8 -SAME+= en_US.UTF-8:pt_PT.ISO8859-15 -SAME+= en_US.UTF-8:pt_PT.ISO8859-1 -SAME+= en_US.UTF-8:pt_BR.UTF-8 -SAME+= en_US.UTF-8:pt_BR.ISO8859-1 -SAME+= en_US.UTF-8:nn_NO.UTF-8 -SAME+= en_US.UTF-8:nn_NO.ISO8859-15 -SAME+= en_US.UTF-8:nn_NO.ISO8859-1 -SAME+= en_US.UTF-8:nl_NL.UTF-8 -SAME+= en_US.UTF-8:nl_NL.ISO8859-15 -SAME+= en_US.UTF-8:nl_NL.ISO8859-1 -SAME+= en_US.UTF-8:nl_BE.UTF-8 -SAME+= en_US.UTF-8:nl_BE.ISO8859-15 -SAME+= en_US.UTF-8:nl_BE.ISO8859-1 -SAME+= en_US.UTF-8:it_IT.UTF-8 -SAME+= en_US.UTF-8:it_IT.ISO8859-15 -SAME+= en_US.UTF-8:it_IT.ISO8859-1 -SAME+= en_US.UTF-8:it_CH.UTF-8 -SAME+= en_US.UTF-8:it_CH.ISO8859-15 -SAME+= en_US.UTF-8:it_CH.ISO8859-1 -SAME+= en_US.UTF-8:fr_FR.UTF-8 -SAME+= en_US.UTF-8:fr_FR.ISO8859-15 -SAME+= en_US.UTF-8:fr_FR.ISO8859-1 -SAME+= en_US.UTF-8:fr_CH.UTF-8 -SAME+= en_US.UTF-8:fr_CH.ISO8859-15 -SAME+= en_US.UTF-8:fr_CH.ISO8859-1 -SAME+= en_US.UTF-8:fr_CA.UTF-8 -SAME+= en_US.UTF-8:fr_CA.ISO8859-15 -SAME+= en_US.UTF-8:fr_CA.ISO8859-1 -SAME+= en_US.UTF-8:fr_BE.UTF-8 -SAME+= en_US.UTF-8:fr_BE.ISO8859-15 -SAME+= en_US.UTF-8:fr_BE.ISO8859-1 -SAME+= en_US.UTF-8:eu_ES.UTF-8 -SAME+= en_US.UTF-8:eu_ES.ISO8859-15 -SAME+= en_US.UTF-8:eu_ES.ISO8859-1 -SAME+= en_US.UTF-8:en_ZA.UTF-8 -SAME+= en_US.UTF-8:en_ZA.US-ASCII -SAME+= en_US.UTF-8:en_ZA.ISO8859-15 -SAME+= en_US.UTF-8:en_ZA.ISO8859-1 -SAME+= en_US.UTF-8:en_US.US-ASCII -SAME+= en_US.UTF-8:en_US.ISO8859-15 -SAME+= en_US.UTF-8:en_US.ISO8859-1 -SAME+= en_US.UTF-8:en_SG.UTF-8 -SAME+= en_US.UTF-8:en_SG.ISO8859-1 -SAME+= en_US.UTF-8:en_PH.UTF-8 -SAME+= en_US.UTF-8:en_NZ.UTF-8 -SAME+= en_US.UTF-8:en_NZ.US-ASCII -SAME+= en_US.UTF-8:en_NZ.ISO8859-15 -SAME+= en_US.UTF-8:en_NZ.ISO8859-1 -SAME+= en_US.UTF-8:en_IE.UTF-8 -SAME+= en_US.UTF-8:en_IE.ISO8859-15 -SAME+= en_US.UTF-8:en_IE.ISO8859-1 -SAME+= en_US.UTF-8:en_HK.UTF-8 -SAME+= en_US.UTF-8:en_HK.ISO8859-1 -SAME+= en_US.UTF-8:en_GB.UTF-8 -SAME+= en_US.UTF-8:en_GB.US-ASCII -SAME+= en_US.UTF-8:en_GB.ISO8859-15 -SAME+= en_US.UTF-8:en_GB.ISO8859-1 -SAME+= en_US.UTF-8:en_CA.UTF-8 -SAME+= en_US.UTF-8:en_CA.US-ASCII -SAME+= en_US.UTF-8:en_CA.ISO8859-15 -SAME+= en_US.UTF-8:en_CA.ISO8859-1 -SAME+= en_US.UTF-8:en_AU.UTF-8 -SAME+= en_US.UTF-8:en_AU.US-ASCII -SAME+= en_US.UTF-8:en_AU.ISO8859-15 -SAME+= en_US.UTF-8:en_AU.ISO8859-1 -SAME+= en_US.UTF-8:de_DE.UTF-8 -SAME+= en_US.UTF-8:de_DE.ISO8859-15 -SAME+= en_US.UTF-8:de_DE.ISO8859-1 -SAME+= en_US.UTF-8:de_CH.UTF-8 -SAME+= en_US.UTF-8:de_CH.ISO8859-15 -SAME+= en_US.UTF-8:de_CH.ISO8859-1 -SAME+= en_US.UTF-8:de_AT.UTF-8 -SAME+= en_US.UTF-8:de_AT.ISO8859-15 -SAME+= en_US.UTF-8:de_AT.ISO8859-1 -SAME+= el_GR.UTF-8:el_GR.ISO8859-7 -SAME+= es_MX.UTF-8:es_MX.ISO8859-1 -SAME+= es_MX.UTF-8:es_ES.UTF-8 -SAME+= es_MX.UTF-8:es_ES.ISO8859-15 -SAME+= es_MX.UTF-8:es_ES.ISO8859-1 -SAME+= es_MX.UTF-8:es_CR.UTF-8 -SAME+= es_MX.UTF-8:es_AR.UTF-8 -SAME+= es_MX.UTF-8:es_AR.ISO8859-1 -SAME+= et_EE.UTF-8:et_EE.ISO8859-15 -SAME+= et_EE.UTF-8:et_EE.ISO8859-1 -SAME+= fi_FI.UTF-8:fi_FI.ISO8859-15 -SAME+= fi_FI.UTF-8:fi_FI.ISO8859-1 -SAME+= hi_IN.UTF-8:hi_IN.ISCII-DEV -SAME+= hr_HR.UTF-8:hr_HR.ISO8859-2 -SAME+= hu_HU.UTF-8:hu_HU.ISO8859-2 -SAME+= hy_AM.UTF-8:hy_AM.ARMSCII-8 -SAME+= is_IS.UTF-8:is_IS.ISO8859-15 -SAME+= is_IS.UTF-8:is_IS.ISO8859-1 -SAME+= ja_JP.UTF-8:ja_JP.SJIS -SAME+= ja_JP.UTF-8:ja_JP.eucJP -SAME+= ko_KR.UTF-8:ko_KR.eucKR -SAME+= lt_LT.UTF-8:lt_LT.ISO8859-13 -SAME+= lv_LV.UTF-8:lv_LV.ISO8859-13 -SAME+= nb_NO.UTF-8:nb_NO.ISO8859-15 -SAME+= nb_NO.UTF-8:nb_NO.ISO8859-1 -SAME+= pl_PL.UTF-8:pl_PL.ISO8859-2 -SAME+= ro_RO.UTF-8:ro_RO.ISO8859-2 -SAME+= se_NO.UTF-8:se_FI.UTF-8 -SAME+= sk_SK.UTF-8:sk_SK.ISO8859-2 -SAME+= sl_SI.UTF-8:sl_SI.ISO8859-2 -SAME+= sv_SE.UTF-8:sv_SE.ISO8859-15 -SAME+= sv_SE.UTF-8:sv_SE.ISO8859-1 -SAME+= sv_SE.UTF-8:sv_FI.UTF-8 -SAME+= sv_SE.UTF-8:sv_FI.ISO8859-15 -SAME+= sv_SE.UTF-8:sv_FI.ISO8859-1 -SAME+= tr_TR.UTF-8:tr_TR.ISO8859-9 -SAME+= uk_UA.UTF-8:uk_UA.KOI8-U -SAME+= uk_UA.UTF-8:uk_UA.ISO8859-5 -SAME+= uk_UA.UTF-8:uk_UA.CP1251 -SAME+= zh_Hans_CN.UTF-8:zh_Hans_CN.GBK -SAME+= zh_Hans_CN.UTF-8:zh_Hans_CN.GB2312 -SAME+= zh_Hans_CN.UTF-8:zh_Hans_CN.GB18030 -SAME+= zh_Hans_CN.UTF-8:zh_Hans_CN.eucCN -SAME+= zh_Hant_TW.UTF-8:zh_Hant_TW.Big5 -SAME+= zh_Hant_TW.UTF-8:zh_Hant_HK.UTF-8 -SAME+= zh_Hant_TW.UTF-8:zh_Hant_HK.Big5HKSCS -SAME+= ko_KR.eucKR:ko_KR.CP949 # legacy (same charset) +SAME+= af_ZA.UTF-8 af_ZA.ISO8859-15 +SAME+= af_ZA.UTF-8 af_ZA.ISO8859-1 +SAME+= ar_SA.UTF-8 ar_QA.UTF-8 +SAME+= ar_SA.UTF-8 ar_MA.UTF-8 +SAME+= ar_SA.UTF-8 ar_JO.UTF-8 +SAME+= ar_SA.UTF-8 ar_EG.UTF-8 +SAME+= ar_SA.UTF-8 ar_AE.UTF-8 +SAME+= be_BY.UTF-8 be_BY.ISO8859-5 +SAME+= be_BY.UTF-8 be_BY.CP1251 +SAME+= be_BY.UTF-8 be_BY.CP1131 +SAME+= ru_RU.UTF-8 sr_Cyrl_RS.UTF-8 +SAME+= ru_RU.UTF-8 sr_Cyrl_RS.ISO8859-5 +SAME+= ru_RU.UTF-8 ru_RU.KOI8-R +SAME+= ru_RU.UTF-8 ru_RU.ISO8859-5 +SAME+= ru_RU.UTF-8 ru_RU.CP866 +SAME+= ru_RU.UTF-8 ru_RU.CP1251 +SAME+= ru_RU.UTF-8 mn_Cyrl_MN.UTF-8 +SAME+= ru_RU.UTF-8 bg_BG.UTF-8 +SAME+= ru_RU.UTF-8 bg_BG.CP1251 +SAME+= ca_AD.UTF-8 ca_IT.UTF-8 +SAME+= ca_AD.UTF-8 ca_IT.ISO8859-15 +SAME+= ca_AD.UTF-8 ca_IT.ISO8859-1 +SAME+= ca_AD.UTF-8 ca_FR.UTF-8 +SAME+= ca_AD.UTF-8 ca_FR.ISO8859-15 +SAME+= ca_AD.UTF-8 ca_FR.ISO8859-1 +SAME+= ca_AD.UTF-8 ca_ES.UTF-8 +SAME+= ca_AD.UTF-8 ca_ES.ISO8859-15 +SAME+= ca_AD.UTF-8 ca_ES.ISO8859-1 +SAME+= ca_AD.UTF-8 ca_AD.ISO8859-15 +SAME+= ca_AD.UTF-8 ca_AD.ISO8859-1 +SAME+= cs_CZ.UTF-8 cs_CZ.ISO8859-2 +SAME+= da_DK.UTF-8 da_DK.ISO8859-15 +SAME+= da_DK.UTF-8 da_DK.ISO8859-1 +SAME+= en_US.UTF-8 sr_Latn_RS.UTF-8 +SAME+= en_US.UTF-8 sr_Latn_RS.ISO8859-2 +SAME+= en_US.UTF-8 pt_PT.UTF-8 +SAME+= en_US.UTF-8 pt_PT.ISO8859-15 +SAME+= en_US.UTF-8 pt_PT.ISO8859-1 +SAME+= en_US.UTF-8 pt_BR.UTF-8 +SAME+= en_US.UTF-8 pt_BR.ISO8859-1 +SAME+= en_US.UTF-8 nn_NO.UTF-8 +SAME+= en_US.UTF-8 nn_NO.ISO8859-15 +SAME+= en_US.UTF-8 nn_NO.ISO8859-1 +SAME+= en_US.UTF-8 nl_NL.UTF-8 +SAME+= en_US.UTF-8 nl_NL.ISO8859-15 +SAME+= en_US.UTF-8 nl_NL.ISO8859-1 +SAME+= en_US.UTF-8 nl_BE.UTF-8 +SAME+= en_US.UTF-8 nl_BE.ISO8859-15 +SAME+= en_US.UTF-8 nl_BE.ISO8859-1 +SAME+= en_US.UTF-8 it_IT.UTF-8 +SAME+= en_US.UTF-8 it_IT.ISO8859-15 +SAME+= en_US.UTF-8 it_IT.ISO8859-1 +SAME+= en_US.UTF-8 it_CH.UTF-8 +SAME+= en_US.UTF-8 it_CH.ISO8859-15 +SAME+= en_US.UTF-8 it_CH.ISO8859-1 +SAME+= en_US.UTF-8 fr_FR.UTF-8 +SAME+= en_US.UTF-8 fr_FR.ISO8859-15 +SAME+= en_US.UTF-8 fr_FR.ISO8859-1 +SAME+= en_US.UTF-8 fr_CH.UTF-8 +SAME+= en_US.UTF-8 fr_CH.ISO8859-15 +SAME+= en_US.UTF-8 fr_CH.ISO8859-1 +SAME+= en_US.UTF-8 fr_CA.UTF-8 +SAME+= en_US.UTF-8 fr_CA.ISO8859-15 +SAME+= en_US.UTF-8 fr_CA.ISO8859-1 +SAME+= en_US.UTF-8 fr_BE.UTF-8 +SAME+= en_US.UTF-8 fr_BE.ISO8859-15 +SAME+= en_US.UTF-8 fr_BE.ISO8859-1 +SAME+= en_US.UTF-8 eu_ES.UTF-8 +SAME+= en_US.UTF-8 eu_ES.ISO8859-15 +SAME+= en_US.UTF-8 eu_ES.ISO8859-1 +SAME+= en_US.UTF-8 en_ZA.UTF-8 +SAME+= en_US.UTF-8 en_ZA.US-ASCII +SAME+= en_US.UTF-8 en_ZA.ISO8859-15 +SAME+= en_US.UTF-8 en_ZA.ISO8859-1 +SAME+= en_US.UTF-8 en_US.US-ASCII +SAME+= en_US.UTF-8 en_US.ISO8859-15 +SAME+= en_US.UTF-8 en_US.ISO8859-1 +SAME+= en_US.UTF-8 en_SG.UTF-8 +SAME+= en_US.UTF-8 en_SG.ISO8859-1 +SAME+= en_US.UTF-8 en_PH.UTF-8 +SAME+= en_US.UTF-8 en_NZ.UTF-8 +SAME+= en_US.UTF-8 en_NZ.US-ASCII +SAME+= en_US.UTF-8 en_NZ.ISO8859-15 +SAME+= en_US.UTF-8 en_NZ.ISO8859-1 +SAME+= en_US.UTF-8 en_IE.UTF-8 +SAME+= en_US.UTF-8 en_IE.ISO8859-15 +SAME+= en_US.UTF-8 en_IE.ISO8859-1 +SAME+= en_US.UTF-8 en_HK.UTF-8 +SAME+= en_US.UTF-8 en_HK.ISO8859-1 +SAME+= en_US.UTF-8 en_GB.UTF-8 +SAME+= en_US.UTF-8 en_GB.US-ASCII +SAME+= en_US.UTF-8 en_GB.ISO8859-15 +SAME+= en_US.UTF-8 en_GB.ISO8859-1 +SAME+= en_US.UTF-8 en_CA.UTF-8 +SAME+= en_US.UTF-8 en_CA.US-ASCII +SAME+= en_US.UTF-8 en_CA.ISO8859-15 +SAME+= en_US.UTF-8 en_CA.ISO8859-1 +SAME+= en_US.UTF-8 en_AU.UTF-8 +SAME+= en_US.UTF-8 en_AU.US-ASCII +SAME+= en_US.UTF-8 en_AU.ISO8859-15 +SAME+= en_US.UTF-8 en_AU.ISO8859-1 +SAME+= en_US.UTF-8 de_DE.UTF-8 +SAME+= en_US.UTF-8 de_DE.ISO8859-15 +SAME+= en_US.UTF-8 de_DE.ISO8859-1 +SAME+= en_US.UTF-8 de_CH.UTF-8 +SAME+= en_US.UTF-8 de_CH.ISO8859-15 +SAME+= en_US.UTF-8 de_CH.ISO8859-1 +SAME+= en_US.UTF-8 de_AT.UTF-8 +SAME+= en_US.UTF-8 de_AT.ISO8859-15 +SAME+= en_US.UTF-8 de_AT.ISO8859-1 +SAME+= el_GR.UTF-8 el_GR.ISO8859-7 +SAME+= es_MX.UTF-8 es_MX.ISO8859-1 +SAME+= es_MX.UTF-8 es_ES.UTF-8 +SAME+= es_MX.UTF-8 es_ES.ISO8859-15 +SAME+= es_MX.UTF-8 es_ES.ISO8859-1 +SAME+= es_MX.UTF-8 es_CR.UTF-8 +SAME+= es_MX.UTF-8 es_AR.UTF-8 +SAME+= es_MX.UTF-8 es_AR.ISO8859-1 +SAME+= et_EE.UTF-8 et_EE.ISO8859-15 +SAME+= et_EE.UTF-8 et_EE.ISO8859-1 +SAME+= fi_FI.UTF-8 fi_FI.ISO8859-15 +SAME+= fi_FI.UTF-8 fi_FI.ISO8859-1 +SAME+= hi_IN.UTF-8 hi_IN.ISCII-DEV +SAME+= hr_HR.UTF-8 hr_HR.ISO8859-2 +SAME+= hu_HU.UTF-8 hu_HU.ISO8859-2 +SAME+= hy_AM.UTF-8 hy_AM.ARMSCII-8 +SAME+= is_IS.UTF-8 is_IS.ISO8859-15 +SAME+= is_IS.UTF-8 is_IS.ISO8859-1 +SAME+= ja_JP.UTF-8 ja_JP.SJIS +SAME+= ja_JP.UTF-8 ja_JP.eucJP +SAME+= ko_KR.UTF-8 ko_KR.eucKR +SAME+= lt_LT.UTF-8 lt_LT.ISO8859-13 +SAME+= lv_LV.UTF-8 lv_LV.ISO8859-13 +SAME+= nb_NO.UTF-8 nb_NO.ISO8859-15 +SAME+= nb_NO.UTF-8 nb_NO.ISO8859-1 +SAME+= pl_PL.UTF-8 pl_PL.ISO8859-2 +SAME+= ro_RO.UTF-8 ro_RO.ISO8859-2 +SAME+= se_NO.UTF-8 se_FI.UTF-8 +SAME+= sk_SK.UTF-8 sk_SK.ISO8859-2 +SAME+= sl_SI.UTF-8 sl_SI.ISO8859-2 +SAME+= sv_SE.UTF-8 sv_SE.ISO8859-15 +SAME+= sv_SE.UTF-8 sv_SE.ISO8859-1 +SAME+= sv_SE.UTF-8 sv_FI.UTF-8 +SAME+= sv_SE.UTF-8 sv_FI.ISO8859-15 +SAME+= sv_SE.UTF-8 sv_FI.ISO8859-1 +SAME+= tr_TR.UTF-8 tr_TR.ISO8859-9 +SAME+= uk_UA.UTF-8 uk_UA.KOI8-U +SAME+= uk_UA.UTF-8 uk_UA.ISO8859-5 +SAME+= uk_UA.UTF-8 uk_UA.CP1251 +SAME+= zh_Hans_CN.UTF-8 zh_Hans_CN.GBK +SAME+= zh_Hans_CN.UTF-8 zh_Hans_CN.GB2312 +SAME+= zh_Hans_CN.UTF-8 zh_Hans_CN.GB18030 +SAME+= zh_Hans_CN.UTF-8 zh_Hans_CN.eucCN +SAME+= zh_Hant_TW.UTF-8 zh_Hant_TW.Big5 +SAME+= zh_Hant_TW.UTF-8 zh_Hant_HK.UTF-8 +SAME+= zh_Hant_TW.UTF-8 zh_Hant_HK.Big5HKSCS +SAME+= ko_KR.eucKR ko_KR.CP949 # legacy (same charset) FILES= ${LOCALES:S/$/.LC_COLLATE/} CLEANFILES= ${FILES} -.for f in ${SAME} -SYMLINKS+= ../${f:C/:.*$//}/${FILESNAME} \ - ${LOCALEDIR}/${f:C/^.*://}/${FILESNAME} +.for f t in ${SAME} +SYMLINKS+= ../$f/${FILESNAME} \ + ${LOCALEDIR}/$t/${FILESNAME} .endfor .for f in ${LOCALES} FILESDIR_${f}.LC_COLLATE= ${LOCALEDIR}/${f} .endfor .include Index: user/alc/PQ_LAUNDRY/share/ctypedef/Makefile =================================================================== --- user/alc/PQ_LAUNDRY/share/ctypedef/Makefile (revision 292469) +++ user/alc/PQ_LAUNDRY/share/ctypedef/Makefile (revision 292470) @@ -1,246 +1,246 @@ # $FreeBSD$ # Warning: Do not edit. This file is automatically generated from the # tools in /usr/src/tools/tools/locale. LOCALEDIR= ${SHAREDIR}/locale FILESNAME= LC_CTYPE .SUFFIXES: .src .LC_CTYPE MAPLOC= ${.CURDIR}/../../tools/tools/locale/etc/final-maps .src.LC_CTYPE: localedef -D -U -c -w ${MAPLOC}/widths.txt \ - -f ${MAPLOC}/map.${.IMPSRC:T:R:C/^.*\.//} \ + -f ${MAPLOC}/map.${.IMPSRC:T:R:E} \ -i ${.IMPSRC} ${.OBJDIR}/${.IMPSRC:T:R} || true LOCALES+= be_BY.CP1131 LOCALES+= ca_IT.ISO8859-1 LOCALES+= ca_IT.ISO8859-15 LOCALES+= el_GR.ISO8859-7 LOCALES+= en_US.ISO8859-1 LOCALES+= en_US.ISO8859-15 LOCALES+= en_US.US-ASCII LOCALES+= en_US.UTF-8 LOCALES+= hi_IN.ISCII-DEV LOCALES+= hy_AM.ARMSCII-8 LOCALES+= ja_JP.SJIS LOCALES+= ja_JP.eucJP LOCALES+= ko_KR.eucKR LOCALES+= lv_LV.ISO8859-13 LOCALES+= ru_RU.CP1251 LOCALES+= ru_RU.CP866 LOCALES+= ru_RU.ISO8859-5 LOCALES+= ru_RU.KOI8-R LOCALES+= sr_Latn_RS.ISO8859-2 LOCALES+= tr_TR.ISO8859-9 LOCALES+= uk_UA.CP1251 LOCALES+= uk_UA.ISO8859-5 LOCALES+= uk_UA.KOI8-U LOCALES+= zh_Hans_CN.GB18030 LOCALES+= zh_Hans_CN.GB2312 LOCALES+= zh_Hans_CN.GBK LOCALES+= zh_Hans_CN.eucCN LOCALES+= zh_Hant_HK.Big5HKSCS LOCALES+= zh_Hant_TW.Big5 -SAME+= en_US.UTF-8:ru_RU.UTF-8 -SAME+= en_US.UTF-8:zh_Hant_TW.UTF-8 -SAME+= en_US.UTF-8:zh_Hant_HK.UTF-8 -SAME+= en_US.UTF-8:zh_Hans_CN.UTF-8 -SAME+= en_US.UTF-8:uk_UA.UTF-8 -SAME+= en_US.UTF-8:tr_TR.UTF-8 -SAME+= en_US.UTF-8:sv_SE.UTF-8 -SAME+= en_US.UTF-8:sv_FI.UTF-8 -SAME+= en_US.UTF-8:sr_Latn_RS.UTF-8 -SAME+= en_US.UTF-8:sr_Cyrl_RS.UTF-8 -SAME+= en_US.UTF-8:sl_SI.UTF-8 -SAME+= en_US.UTF-8:sk_SK.UTF-8 -SAME+= en_US.UTF-8:se_NO.UTF-8 -SAME+= en_US.UTF-8:se_FI.UTF-8 -SAME+= en_US.UTF-8:ro_RO.UTF-8 -SAME+= en_US.UTF-8:pt_PT.UTF-8 -SAME+= en_US.UTF-8:pt_BR.UTF-8 -SAME+= en_US.UTF-8:pl_PL.UTF-8 -SAME+= en_US.UTF-8:nn_NO.UTF-8 -SAME+= en_US.UTF-8:nl_NL.UTF-8 -SAME+= en_US.UTF-8:nl_BE.UTF-8 -SAME+= en_US.UTF-8:nb_NO.UTF-8 -SAME+= en_US.UTF-8:mn_Cyrl_MN.UTF-8 -SAME+= en_US.UTF-8:lv_LV.UTF-8 -SAME+= en_US.UTF-8:lt_LT.UTF-8 -SAME+= en_US.UTF-8:ko_KR.UTF-8 -SAME+= en_US.UTF-8:kk_Cyrl_KZ.UTF-8 -SAME+= en_US.UTF-8:ja_JP.UTF-8 -SAME+= en_US.UTF-8:it_IT.UTF-8 -SAME+= en_US.UTF-8:it_CH.UTF-8 -SAME+= en_US.UTF-8:is_IS.UTF-8 -SAME+= en_US.UTF-8:hy_AM.UTF-8 -SAME+= en_US.UTF-8:hu_HU.UTF-8 -SAME+= en_US.UTF-8:hr_HR.UTF-8 -SAME+= en_US.UTF-8:hi_IN.UTF-8 -SAME+= en_US.UTF-8:he_IL.UTF-8 -SAME+= en_US.UTF-8:fr_FR.UTF-8 -SAME+= en_US.UTF-8:fr_CH.UTF-8 -SAME+= en_US.UTF-8:fr_CA.UTF-8 -SAME+= en_US.UTF-8:fr_BE.UTF-8 -SAME+= en_US.UTF-8:fi_FI.UTF-8 -SAME+= en_US.UTF-8:eu_ES.UTF-8 -SAME+= en_US.UTF-8:et_EE.UTF-8 -SAME+= en_US.UTF-8:es_MX.UTF-8 -SAME+= en_US.UTF-8:es_ES.UTF-8 -SAME+= en_US.UTF-8:es_CR.UTF-8 -SAME+= en_US.UTF-8:es_AR.UTF-8 -SAME+= en_US.UTF-8:en_ZA.UTF-8 -SAME+= en_US.UTF-8:en_SG.UTF-8 -SAME+= en_US.UTF-8:en_PH.UTF-8 -SAME+= en_US.UTF-8:en_NZ.UTF-8 -SAME+= en_US.UTF-8:en_IE.UTF-8 -SAME+= en_US.UTF-8:en_HK.UTF-8 -SAME+= en_US.UTF-8:en_GB.UTF-8 -SAME+= en_US.UTF-8:en_CA.UTF-8 -SAME+= en_US.UTF-8:en_AU.UTF-8 -SAME+= en_US.UTF-8:el_GR.UTF-8 -SAME+= en_US.UTF-8:de_DE.UTF-8 -SAME+= en_US.UTF-8:de_CH.UTF-8 -SAME+= en_US.UTF-8:de_AT.UTF-8 -SAME+= en_US.UTF-8:da_DK.UTF-8 -SAME+= en_US.UTF-8:cs_CZ.UTF-8 -SAME+= en_US.UTF-8:ca_IT.UTF-8 -SAME+= en_US.UTF-8:ca_FR.UTF-8 -SAME+= en_US.UTF-8:ca_ES.UTF-8 -SAME+= en_US.UTF-8:ca_AD.UTF-8 -SAME+= en_US.UTF-8:bg_BG.UTF-8 -SAME+= en_US.UTF-8:be_BY.UTF-8 -SAME+= en_US.UTF-8:ar_SA.UTF-8 -SAME+= en_US.UTF-8:ar_QA.UTF-8 -SAME+= en_US.UTF-8:ar_MA.UTF-8 -SAME+= en_US.UTF-8:ar_JO.UTF-8 -SAME+= en_US.UTF-8:ar_EG.UTF-8 -SAME+= en_US.UTF-8:ar_AE.UTF-8 -SAME+= en_US.UTF-8:am_ET.UTF-8 -SAME+= en_US.UTF-8:af_ZA.UTF-8 -SAME+= en_US.ISO8859-1:sv_SE.ISO8859-1 -SAME+= en_US.ISO8859-1:sv_FI.ISO8859-1 -SAME+= en_US.ISO8859-1:pt_PT.ISO8859-1 -SAME+= en_US.ISO8859-1:pt_BR.ISO8859-1 -SAME+= en_US.ISO8859-1:nn_NO.ISO8859-1 -SAME+= en_US.ISO8859-1:nl_NL.ISO8859-1 -SAME+= en_US.ISO8859-1:nl_BE.ISO8859-1 -SAME+= en_US.ISO8859-1:nb_NO.ISO8859-1 -SAME+= en_US.ISO8859-1:it_IT.ISO8859-1 -SAME+= en_US.ISO8859-1:it_CH.ISO8859-1 -SAME+= en_US.ISO8859-1:is_IS.ISO8859-1 -SAME+= en_US.ISO8859-1:fr_FR.ISO8859-1 -SAME+= en_US.ISO8859-1:fr_CH.ISO8859-1 -SAME+= en_US.ISO8859-1:fr_CA.ISO8859-1 -SAME+= en_US.ISO8859-1:fr_BE.ISO8859-1 -SAME+= en_US.ISO8859-1:fi_FI.ISO8859-1 -SAME+= en_US.ISO8859-1:eu_ES.ISO8859-1 -SAME+= en_US.ISO8859-1:et_EE.ISO8859-1 -SAME+= en_US.ISO8859-1:es_MX.ISO8859-1 -SAME+= en_US.ISO8859-1:es_ES.ISO8859-1 -SAME+= en_US.ISO8859-1:es_AR.ISO8859-1 -SAME+= en_US.ISO8859-1:en_ZA.ISO8859-1 -SAME+= en_US.ISO8859-1:en_SG.ISO8859-1 -SAME+= en_US.ISO8859-1:en_NZ.ISO8859-1 -SAME+= en_US.ISO8859-1:en_IE.ISO8859-1 -SAME+= en_US.ISO8859-1:en_HK.ISO8859-1 -SAME+= en_US.ISO8859-1:en_GB.ISO8859-1 -SAME+= en_US.ISO8859-1:en_CA.ISO8859-1 -SAME+= en_US.ISO8859-1:en_AU.ISO8859-1 -SAME+= en_US.ISO8859-1:de_DE.ISO8859-1 -SAME+= en_US.ISO8859-1:de_CH.ISO8859-1 -SAME+= en_US.ISO8859-1:de_AT.ISO8859-1 -SAME+= en_US.ISO8859-1:da_DK.ISO8859-1 -SAME+= en_US.ISO8859-1:af_ZA.ISO8859-1 -SAME+= en_US.ISO8859-15:en_GB.ISO8859-15 -SAME+= en_US.ISO8859-15:sv_SE.ISO8859-15 -SAME+= en_US.ISO8859-15:sv_FI.ISO8859-15 -SAME+= en_US.ISO8859-15:pt_PT.ISO8859-15 -SAME+= en_US.ISO8859-15:nn_NO.ISO8859-15 -SAME+= en_US.ISO8859-15:nl_NL.ISO8859-15 -SAME+= en_US.ISO8859-15:nl_BE.ISO8859-15 -SAME+= en_US.ISO8859-15:nb_NO.ISO8859-15 -SAME+= en_US.ISO8859-15:it_IT.ISO8859-15 -SAME+= en_US.ISO8859-15:it_CH.ISO8859-15 -SAME+= en_US.ISO8859-15:is_IS.ISO8859-15 -SAME+= en_US.ISO8859-15:fr_FR.ISO8859-15 -SAME+= en_US.ISO8859-15:fr_CH.ISO8859-15 -SAME+= en_US.ISO8859-15:fr_CA.ISO8859-15 -SAME+= en_US.ISO8859-15:fr_BE.ISO8859-15 -SAME+= en_US.ISO8859-15:fi_FI.ISO8859-15 -SAME+= en_US.ISO8859-15:eu_ES.ISO8859-15 -SAME+= en_US.ISO8859-15:et_EE.ISO8859-15 -SAME+= en_US.ISO8859-15:es_ES.ISO8859-15 -SAME+= en_US.ISO8859-15:en_ZA.ISO8859-15 -SAME+= en_US.ISO8859-15:en_NZ.ISO8859-15 -SAME+= en_US.ISO8859-15:en_IE.ISO8859-15 -SAME+= en_US.ISO8859-15:en_CA.ISO8859-15 -SAME+= en_US.ISO8859-15:en_AU.ISO8859-15 -SAME+= en_US.ISO8859-15:de_DE.ISO8859-15 -SAME+= en_US.ISO8859-15:de_CH.ISO8859-15 -SAME+= en_US.ISO8859-15:de_AT.ISO8859-15 -SAME+= en_US.ISO8859-15:da_DK.ISO8859-15 -SAME+= en_US.ISO8859-15:af_ZA.ISO8859-15 -SAME+= ru_RU.CP1251:bg_BG.CP1251 -SAME+= ru_RU.CP1251:be_BY.CP1251 -SAME+= ru_RU.ISO8859-5:sr_Cyrl_RS.ISO8859-5 -SAME+= ru_RU.ISO8859-5:be_BY.ISO8859-5 -SAME+= ca_IT.ISO8859-1:ca_FR.ISO8859-1 -SAME+= ca_IT.ISO8859-1:ca_ES.ISO8859-1 -SAME+= ca_IT.ISO8859-1:ca_AD.ISO8859-1 -SAME+= ca_IT.ISO8859-15:ca_FR.ISO8859-15 -SAME+= ca_IT.ISO8859-15:ca_ES.ISO8859-15 -SAME+= ca_IT.ISO8859-15:ca_AD.ISO8859-15 -SAME+= sr_Latn_RS.ISO8859-2:sl_SI.ISO8859-2 -SAME+= sr_Latn_RS.ISO8859-2:sk_SK.ISO8859-2 -SAME+= sr_Latn_RS.ISO8859-2:ro_RO.ISO8859-2 -SAME+= sr_Latn_RS.ISO8859-2:pl_PL.ISO8859-2 -SAME+= sr_Latn_RS.ISO8859-2:hu_HU.ISO8859-2 -SAME+= sr_Latn_RS.ISO8859-2:hr_HR.ISO8859-2 -SAME+= sr_Latn_RS.ISO8859-2:cs_CZ.ISO8859-2 -SAME+= en_US.US-ASCII:en_ZA.US-ASCII -SAME+= en_US.US-ASCII:en_NZ.US-ASCII -SAME+= en_US.US-ASCII:en_GB.US-ASCII -SAME+= en_US.US-ASCII:en_CA.US-ASCII -SAME+= en_US.US-ASCII:en_AU.US-ASCII -SAME+= lv_LV.ISO8859-13:lt_LT.ISO8859-13 -SAME+= ko_KR.eucKR:ko_KR.CP949 # legacy (same charset) +SAME+= en_US.UTF-8 ru_RU.UTF-8 +SAME+= en_US.UTF-8 zh_Hant_TW.UTF-8 +SAME+= en_US.UTF-8 zh_Hant_HK.UTF-8 +SAME+= en_US.UTF-8 zh_Hans_CN.UTF-8 +SAME+= en_US.UTF-8 uk_UA.UTF-8 +SAME+= en_US.UTF-8 tr_TR.UTF-8 +SAME+= en_US.UTF-8 sv_SE.UTF-8 +SAME+= en_US.UTF-8 sv_FI.UTF-8 +SAME+= en_US.UTF-8 sr_Latn_RS.UTF-8 +SAME+= en_US.UTF-8 sr_Cyrl_RS.UTF-8 +SAME+= en_US.UTF-8 sl_SI.UTF-8 +SAME+= en_US.UTF-8 sk_SK.UTF-8 +SAME+= en_US.UTF-8 se_NO.UTF-8 +SAME+= en_US.UTF-8 se_FI.UTF-8 +SAME+= en_US.UTF-8 ro_RO.UTF-8 +SAME+= en_US.UTF-8 pt_PT.UTF-8 +SAME+= en_US.UTF-8 pt_BR.UTF-8 +SAME+= en_US.UTF-8 pl_PL.UTF-8 +SAME+= en_US.UTF-8 nn_NO.UTF-8 +SAME+= en_US.UTF-8 nl_NL.UTF-8 +SAME+= en_US.UTF-8 nl_BE.UTF-8 +SAME+= en_US.UTF-8 nb_NO.UTF-8 +SAME+= en_US.UTF-8 mn_Cyrl_MN.UTF-8 +SAME+= en_US.UTF-8 lv_LV.UTF-8 +SAME+= en_US.UTF-8 lt_LT.UTF-8 +SAME+= en_US.UTF-8 ko_KR.UTF-8 +SAME+= en_US.UTF-8 kk_Cyrl_KZ.UTF-8 +SAME+= en_US.UTF-8 ja_JP.UTF-8 +SAME+= en_US.UTF-8 it_IT.UTF-8 +SAME+= en_US.UTF-8 it_CH.UTF-8 +SAME+= en_US.UTF-8 is_IS.UTF-8 +SAME+= en_US.UTF-8 hy_AM.UTF-8 +SAME+= en_US.UTF-8 hu_HU.UTF-8 +SAME+= en_US.UTF-8 hr_HR.UTF-8 +SAME+= en_US.UTF-8 hi_IN.UTF-8 +SAME+= en_US.UTF-8 he_IL.UTF-8 +SAME+= en_US.UTF-8 fr_FR.UTF-8 +SAME+= en_US.UTF-8 fr_CH.UTF-8 +SAME+= en_US.UTF-8 fr_CA.UTF-8 +SAME+= en_US.UTF-8 fr_BE.UTF-8 +SAME+= en_US.UTF-8 fi_FI.UTF-8 +SAME+= en_US.UTF-8 eu_ES.UTF-8 +SAME+= en_US.UTF-8 et_EE.UTF-8 +SAME+= en_US.UTF-8 es_MX.UTF-8 +SAME+= en_US.UTF-8 es_ES.UTF-8 +SAME+= en_US.UTF-8 es_CR.UTF-8 +SAME+= en_US.UTF-8 es_AR.UTF-8 +SAME+= en_US.UTF-8 en_ZA.UTF-8 +SAME+= en_US.UTF-8 en_SG.UTF-8 +SAME+= en_US.UTF-8 en_PH.UTF-8 +SAME+= en_US.UTF-8 en_NZ.UTF-8 +SAME+= en_US.UTF-8 en_IE.UTF-8 +SAME+= en_US.UTF-8 en_HK.UTF-8 +SAME+= en_US.UTF-8 en_GB.UTF-8 +SAME+= en_US.UTF-8 en_CA.UTF-8 +SAME+= en_US.UTF-8 en_AU.UTF-8 +SAME+= en_US.UTF-8 el_GR.UTF-8 +SAME+= en_US.UTF-8 de_DE.UTF-8 +SAME+= en_US.UTF-8 de_CH.UTF-8 +SAME+= en_US.UTF-8 de_AT.UTF-8 +SAME+= en_US.UTF-8 da_DK.UTF-8 +SAME+= en_US.UTF-8 cs_CZ.UTF-8 +SAME+= en_US.UTF-8 ca_IT.UTF-8 +SAME+= en_US.UTF-8 ca_FR.UTF-8 +SAME+= en_US.UTF-8 ca_ES.UTF-8 +SAME+= en_US.UTF-8 ca_AD.UTF-8 +SAME+= en_US.UTF-8 bg_BG.UTF-8 +SAME+= en_US.UTF-8 be_BY.UTF-8 +SAME+= en_US.UTF-8 ar_SA.UTF-8 +SAME+= en_US.UTF-8 ar_QA.UTF-8 +SAME+= en_US.UTF-8 ar_MA.UTF-8 +SAME+= en_US.UTF-8 ar_JO.UTF-8 +SAME+= en_US.UTF-8 ar_EG.UTF-8 +SAME+= en_US.UTF-8 ar_AE.UTF-8 +SAME+= en_US.UTF-8 am_ET.UTF-8 +SAME+= en_US.UTF-8 af_ZA.UTF-8 +SAME+= en_US.ISO8859-1 sv_SE.ISO8859-1 +SAME+= en_US.ISO8859-1 sv_FI.ISO8859-1 +SAME+= en_US.ISO8859-1 pt_PT.ISO8859-1 +SAME+= en_US.ISO8859-1 pt_BR.ISO8859-1 +SAME+= en_US.ISO8859-1 nn_NO.ISO8859-1 +SAME+= en_US.ISO8859-1 nl_NL.ISO8859-1 +SAME+= en_US.ISO8859-1 nl_BE.ISO8859-1 +SAME+= en_US.ISO8859-1 nb_NO.ISO8859-1 +SAME+= en_US.ISO8859-1 it_IT.ISO8859-1 +SAME+= en_US.ISO8859-1 it_CH.ISO8859-1 +SAME+= en_US.ISO8859-1 is_IS.ISO8859-1 +SAME+= en_US.ISO8859-1 fr_FR.ISO8859-1 +SAME+= en_US.ISO8859-1 fr_CH.ISO8859-1 +SAME+= en_US.ISO8859-1 fr_CA.ISO8859-1 +SAME+= en_US.ISO8859-1 fr_BE.ISO8859-1 +SAME+= en_US.ISO8859-1 fi_FI.ISO8859-1 +SAME+= en_US.ISO8859-1 eu_ES.ISO8859-1 +SAME+= en_US.ISO8859-1 et_EE.ISO8859-1 +SAME+= en_US.ISO8859-1 es_MX.ISO8859-1 +SAME+= en_US.ISO8859-1 es_ES.ISO8859-1 +SAME+= en_US.ISO8859-1 es_AR.ISO8859-1 +SAME+= en_US.ISO8859-1 en_ZA.ISO8859-1 +SAME+= en_US.ISO8859-1 en_SG.ISO8859-1 +SAME+= en_US.ISO8859-1 en_NZ.ISO8859-1 +SAME+= en_US.ISO8859-1 en_IE.ISO8859-1 +SAME+= en_US.ISO8859-1 en_HK.ISO8859-1 +SAME+= en_US.ISO8859-1 en_GB.ISO8859-1 +SAME+= en_US.ISO8859-1 en_CA.ISO8859-1 +SAME+= en_US.ISO8859-1 en_AU.ISO8859-1 +SAME+= en_US.ISO8859-1 de_DE.ISO8859-1 +SAME+= en_US.ISO8859-1 de_CH.ISO8859-1 +SAME+= en_US.ISO8859-1 de_AT.ISO8859-1 +SAME+= en_US.ISO8859-1 da_DK.ISO8859-1 +SAME+= en_US.ISO8859-1 af_ZA.ISO8859-1 +SAME+= en_US.ISO8859-15 en_GB.ISO8859-15 +SAME+= en_US.ISO8859-15 sv_SE.ISO8859-15 +SAME+= en_US.ISO8859-15 sv_FI.ISO8859-15 +SAME+= en_US.ISO8859-15 pt_PT.ISO8859-15 +SAME+= en_US.ISO8859-15 nn_NO.ISO8859-15 +SAME+= en_US.ISO8859-15 nl_NL.ISO8859-15 +SAME+= en_US.ISO8859-15 nl_BE.ISO8859-15 +SAME+= en_US.ISO8859-15 nb_NO.ISO8859-15 +SAME+= en_US.ISO8859-15 it_IT.ISO8859-15 +SAME+= en_US.ISO8859-15 it_CH.ISO8859-15 +SAME+= en_US.ISO8859-15 is_IS.ISO8859-15 +SAME+= en_US.ISO8859-15 fr_FR.ISO8859-15 +SAME+= en_US.ISO8859-15 fr_CH.ISO8859-15 +SAME+= en_US.ISO8859-15 fr_CA.ISO8859-15 +SAME+= en_US.ISO8859-15 fr_BE.ISO8859-15 +SAME+= en_US.ISO8859-15 fi_FI.ISO8859-15 +SAME+= en_US.ISO8859-15 eu_ES.ISO8859-15 +SAME+= en_US.ISO8859-15 et_EE.ISO8859-15 +SAME+= en_US.ISO8859-15 es_ES.ISO8859-15 +SAME+= en_US.ISO8859-15 en_ZA.ISO8859-15 +SAME+= en_US.ISO8859-15 en_NZ.ISO8859-15 +SAME+= en_US.ISO8859-15 en_IE.ISO8859-15 +SAME+= en_US.ISO8859-15 en_CA.ISO8859-15 +SAME+= en_US.ISO8859-15 en_AU.ISO8859-15 +SAME+= en_US.ISO8859-15 de_DE.ISO8859-15 +SAME+= en_US.ISO8859-15 de_CH.ISO8859-15 +SAME+= en_US.ISO8859-15 de_AT.ISO8859-15 +SAME+= en_US.ISO8859-15 da_DK.ISO8859-15 +SAME+= en_US.ISO8859-15 af_ZA.ISO8859-15 +SAME+= ru_RU.CP1251 bg_BG.CP1251 +SAME+= ru_RU.CP1251 be_BY.CP1251 +SAME+= ru_RU.ISO8859-5 sr_Cyrl_RS.ISO8859-5 +SAME+= ru_RU.ISO8859-5 be_BY.ISO8859-5 +SAME+= ca_IT.ISO8859-1 ca_FR.ISO8859-1 +SAME+= ca_IT.ISO8859-1 ca_ES.ISO8859-1 +SAME+= ca_IT.ISO8859-1 ca_AD.ISO8859-1 +SAME+= ca_IT.ISO8859-15 ca_FR.ISO8859-15 +SAME+= ca_IT.ISO8859-15 ca_ES.ISO8859-15 +SAME+= ca_IT.ISO8859-15 ca_AD.ISO8859-15 +SAME+= sr_Latn_RS.ISO8859-2 sl_SI.ISO8859-2 +SAME+= sr_Latn_RS.ISO8859-2 sk_SK.ISO8859-2 +SAME+= sr_Latn_RS.ISO8859-2 ro_RO.ISO8859-2 +SAME+= sr_Latn_RS.ISO8859-2 pl_PL.ISO8859-2 +SAME+= sr_Latn_RS.ISO8859-2 hu_HU.ISO8859-2 +SAME+= sr_Latn_RS.ISO8859-2 hr_HR.ISO8859-2 +SAME+= sr_Latn_RS.ISO8859-2 cs_CZ.ISO8859-2 +SAME+= en_US.US-ASCII en_ZA.US-ASCII +SAME+= en_US.US-ASCII en_NZ.US-ASCII +SAME+= en_US.US-ASCII en_GB.US-ASCII +SAME+= en_US.US-ASCII en_CA.US-ASCII +SAME+= en_US.US-ASCII en_AU.US-ASCII +SAME+= lv_LV.ISO8859-13 lt_LT.ISO8859-13 +SAME+= ko_KR.eucKR ko_KR.CP949 # legacy (same charset) FILES= ${LOCALES:S/$/.LC_CTYPE/} CLEANFILES= ${FILES} -.for f in ${SAME} -SYMLINKS+= ../${f:C/:.*$//}/${FILESNAME} \ - ${LOCALEDIR}/${f:C/^.*://}/${FILESNAME} +.for f t in ${SAME} +SYMLINKS+= ../$f/${FILESNAME} \ + ${LOCALEDIR}/$t/${FILESNAME} .endfor .for f in ${LOCALES} FILESDIR_${f}.LC_CTYPE= ${LOCALEDIR}/${f} .endfor -SYMPAIRS+= ca_IT.ISO8859-1.src:ca_IT.ISO8859-15.src -SYMPAIRS+= be_BY.CP1131.src:ru_RU.CP1251.src -SYMPAIRS+= be_BY.CP1131.src:ru_RU.CP866.src -SYMPAIRS+= be_BY.CP1131.src:ru_RU.ISO8859-5.src -SYMPAIRS+= be_BY.CP1131.src:ru_RU.KOI8-R.src -SYMPAIRS+= uk_UA.CP1251.src:uk_UA.ISO8859-5.src -SYMPAIRS+= uk_UA.CP1251.src:uk_UA.KOI8-U.src -SYMPAIRS+= zh_Hans_CN.eucCN.src:zh_Hans_CN.GB18030.src -SYMPAIRS+= zh_Hans_CN.eucCN.src:zh_Hans_CN.GB2312.src -SYMPAIRS+= zh_Hans_CN.eucCN.src:zh_Hans_CN.GBK.src -SYMPAIRS+= zh_Hant_HK.Big5HKSCS.src:zh_Hant_TW.Big5.src -SYMPAIRS+= en_US.ISO8859-1.src:en_US.ISO8859-15.src -SYMPAIRS+= en_US.ISO8859-1.src:en_US.US-ASCII.src -SYMPAIRS+= en_US.ISO8859-1.src:lv_LV.ISO8859-13.src -SYMPAIRS+= en_US.ISO8859-1.src:sr_Latn_RS.ISO8859-2.src -SYMPAIRS+= en_US.ISO8859-1.src:tr_TR.ISO8859-9.src -SYMPAIRS+= ja_JP.eucJP.src:ja_JP.SJIS.src +SYMPAIRS+= ca_IT.ISO8859-1.src ca_IT.ISO8859-15.src +SYMPAIRS+= be_BY.CP1131.src ru_RU.CP1251.src +SYMPAIRS+= be_BY.CP1131.src ru_RU.CP866.src +SYMPAIRS+= be_BY.CP1131.src ru_RU.ISO8859-5.src +SYMPAIRS+= be_BY.CP1131.src ru_RU.KOI8-R.src +SYMPAIRS+= uk_UA.CP1251.src uk_UA.ISO8859-5.src +SYMPAIRS+= uk_UA.CP1251.src uk_UA.KOI8-U.src +SYMPAIRS+= zh_Hans_CN.eucCN.src zh_Hans_CN.GB18030.src +SYMPAIRS+= zh_Hans_CN.eucCN.src zh_Hans_CN.GB2312.src +SYMPAIRS+= zh_Hans_CN.eucCN.src zh_Hans_CN.GBK.src +SYMPAIRS+= zh_Hant_HK.Big5HKSCS.src zh_Hant_TW.Big5.src +SYMPAIRS+= en_US.ISO8859-1.src en_US.ISO8859-15.src +SYMPAIRS+= en_US.ISO8859-1.src en_US.US-ASCII.src +SYMPAIRS+= en_US.ISO8859-1.src lv_LV.ISO8859-13.src +SYMPAIRS+= en_US.ISO8859-1.src sr_Latn_RS.ISO8859-2.src +SYMPAIRS+= en_US.ISO8859-1.src tr_TR.ISO8859-9.src +SYMPAIRS+= ja_JP.eucJP.src ja_JP.SJIS.src -.for PAIR in ${SYMPAIRS} -${PAIR:C/^.*://:S/src$/LC_CTYPE/}: ${PAIR:C/:.*//} +.for s t in ${SYMPAIRS} +${t:S/src$/LC_CTYPE/}: $s localedef -D -U -c -w ${MAPLOC}/widths.txt \ -f ${MAPLOC}/map.${.TARGET:T:R:C/^.*\.//} \ -i ${.ALLSRC} ${.OBJDIR}/${.TARGET:T:R} || true .endfor .include Index: user/alc/PQ_LAUNDRY/share/monetdef/Makefile =================================================================== --- user/alc/PQ_LAUNDRY/share/monetdef/Makefile (revision 292469) +++ user/alc/PQ_LAUNDRY/share/monetdef/Makefile (revision 292470) @@ -1,218 +1,218 @@ # $FreeBSD$ # Warning: Do not edit. This file is automatically generated from the # tools in /usr/src/tools/tools/locale. LOCALEDIR= ${SHAREDIR}/locale FILESNAME= LC_MONETARY .SUFFIXES: .src .out .src.out: grep -v -E '^(#$$|#[ ])' < ${.IMPSRC} > ${.TARGET} LOCALES+= am_ET.UTF-8 LOCALES+= ar_AE.UTF-8 LOCALES+= ar_EG.UTF-8 LOCALES+= ar_JO.UTF-8 LOCALES+= ar_MA.UTF-8 LOCALES+= ar_QA.UTF-8 LOCALES+= ar_SA.UTF-8 LOCALES+= be_BY.CP1131 LOCALES+= be_BY.CP1251 LOCALES+= be_BY.ISO8859-5 LOCALES+= be_BY.UTF-8 LOCALES+= bg_BG.CP1251 LOCALES+= bg_BG.UTF-8 LOCALES+= cs_CZ.ISO8859-2 LOCALES+= cs_CZ.UTF-8 LOCALES+= da_DK.UTF-8 LOCALES+= de_AT.ISO8859-1 LOCALES+= de_AT.ISO8859-15 LOCALES+= de_AT.UTF-8 LOCALES+= en_AU.UTF-8 LOCALES+= en_CA.UTF-8 LOCALES+= en_GB.ISO8859-15 LOCALES+= en_GB.US-ASCII LOCALES+= en_GB.UTF-8 LOCALES+= en_IE.ISO8859-1 LOCALES+= en_IE.ISO8859-15 LOCALES+= en_IE.UTF-8 LOCALES+= en_NZ.UTF-8 LOCALES+= en_PH.UTF-8 LOCALES+= en_SG.UTF-8 LOCALES+= en_US.UTF-8 LOCALES+= en_ZA.ISO8859-15 LOCALES+= en_ZA.US-ASCII LOCALES+= en_ZA.UTF-8 LOCALES+= es_AR.UTF-8 LOCALES+= es_CR.UTF-8 LOCALES+= es_MX.UTF-8 LOCALES+= fr_CA.ISO8859-15 LOCALES+= fr_CA.UTF-8 LOCALES+= fr_CH.ISO8859-15 LOCALES+= fr_CH.UTF-8 LOCALES+= he_IL.UTF-8 LOCALES+= hi_IN.ISCII-DEV LOCALES+= hi_IN.UTF-8 LOCALES+= hr_HR.UTF-8 LOCALES+= hu_HU.ISO8859-2 LOCALES+= hu_HU.UTF-8 LOCALES+= hy_AM.ARMSCII-8 LOCALES+= hy_AM.UTF-8 LOCALES+= is_IS.UTF-8 LOCALES+= it_CH.UTF-8 LOCALES+= ja_JP.SJIS LOCALES+= ja_JP.UTF-8 LOCALES+= ja_JP.eucJP LOCALES+= kk_Cyrl_KZ.UTF-8 LOCALES+= ko_KR.UTF-8 LOCALES+= ko_KR.eucKR LOCALES+= lv_LV.ISO8859-13 LOCALES+= lv_LV.UTF-8 LOCALES+= mn_Cyrl_MN.UTF-8 LOCALES+= nb_NO.ISO8859-15 LOCALES+= nb_NO.UTF-8 LOCALES+= nl_BE.ISO8859-15 LOCALES+= nl_NL.ISO8859-1 LOCALES+= nl_NL.ISO8859-15 LOCALES+= nl_NL.UTF-8 LOCALES+= nn_NO.ISO8859-15 LOCALES+= pl_PL.ISO8859-2 LOCALES+= pl_PL.UTF-8 LOCALES+= pt_BR.UTF-8 LOCALES+= ro_RO.UTF-8 LOCALES+= ru_RU.CP1251 LOCALES+= ru_RU.CP866 LOCALES+= ru_RU.ISO8859-5 LOCALES+= ru_RU.KOI8-R LOCALES+= ru_RU.UTF-8 LOCALES+= se_NO.UTF-8 LOCALES+= sk_SK.UTF-8 LOCALES+= sl_SI.ISO8859-2 LOCALES+= sl_SI.UTF-8 LOCALES+= sr_Latn_RS.UTF-8 LOCALES+= sv_FI.ISO8859-1 LOCALES+= sv_FI.ISO8859-15 LOCALES+= sv_FI.UTF-8 LOCALES+= sv_SE.ISO8859-15 LOCALES+= sv_SE.UTF-8 LOCALES+= tr_TR.ISO8859-9 LOCALES+= tr_TR.UTF-8 LOCALES+= uk_UA.CP1251 LOCALES+= uk_UA.ISO8859-5 LOCALES+= uk_UA.KOI8-U LOCALES+= uk_UA.UTF-8 LOCALES+= zh_Hans_CN.GB2312 LOCALES+= zh_Hans_CN.GBK LOCALES+= zh_Hans_CN.UTF-8 LOCALES+= zh_Hans_CN.eucCN LOCALES+= zh_Hant_HK.UTF-8 LOCALES+= zh_Hant_TW.Big5 LOCALES+= zh_Hant_TW.UTF-8 -SAME+= en_ZA.ISO8859-15:en_ZA.ISO8859-1 -SAME+= en_ZA.ISO8859-15:af_ZA.ISO8859-15 -SAME+= en_ZA.ISO8859-15:af_ZA.ISO8859-1 -SAME+= en_ZA.UTF-8:af_ZA.UTF-8 -SAME+= sl_SI.ISO8859-2:nl_BE.ISO8859-1 -SAME+= sl_SI.ISO8859-2:it_IT.ISO8859-1 -SAME+= sl_SI.ISO8859-2:fr_BE.ISO8859-1 -SAME+= sl_SI.ISO8859-2:eu_ES.ISO8859-1 -SAME+= sl_SI.ISO8859-2:es_ES.ISO8859-1 -SAME+= sl_SI.ISO8859-2:de_DE.ISO8859-1 -SAME+= sl_SI.ISO8859-2:ca_IT.ISO8859-1 -SAME+= sl_SI.ISO8859-2:ca_FR.ISO8859-1 -SAME+= sl_SI.ISO8859-2:ca_ES.ISO8859-1 -SAME+= sl_SI.ISO8859-2:ca_AD.ISO8859-1 -SAME+= nl_BE.ISO8859-15:it_IT.ISO8859-15 -SAME+= nl_BE.ISO8859-15:fr_BE.ISO8859-15 -SAME+= nl_BE.ISO8859-15:eu_ES.ISO8859-15 -SAME+= nl_BE.ISO8859-15:es_ES.ISO8859-15 -SAME+= nl_BE.ISO8859-15:el_GR.ISO8859-7 -SAME+= nl_BE.ISO8859-15:de_DE.ISO8859-15 -SAME+= nl_BE.ISO8859-15:ca_IT.ISO8859-15 -SAME+= nl_BE.ISO8859-15:ca_FR.ISO8859-15 -SAME+= nl_BE.ISO8859-15:ca_ES.ISO8859-15 -SAME+= nl_BE.ISO8859-15:ca_AD.ISO8859-15 -SAME+= sl_SI.UTF-8:nl_BE.UTF-8 -SAME+= sl_SI.UTF-8:it_IT.UTF-8 -SAME+= sl_SI.UTF-8:fr_BE.UTF-8 -SAME+= sl_SI.UTF-8:eu_ES.UTF-8 -SAME+= sl_SI.UTF-8:es_ES.UTF-8 -SAME+= sl_SI.UTF-8:el_GR.UTF-8 -SAME+= sl_SI.UTF-8:de_DE.UTF-8 -SAME+= sl_SI.UTF-8:ca_IT.UTF-8 -SAME+= sl_SI.UTF-8:ca_FR.UTF-8 -SAME+= sl_SI.UTF-8:ca_ES.UTF-8 -SAME+= sl_SI.UTF-8:ca_AD.UTF-8 -SAME+= da_DK.UTF-8:da_DK.ISO8859-15 -SAME+= da_DK.UTF-8:da_DK.ISO8859-1 -SAME+= it_CH.UTF-8:it_CH.ISO8859-15 -SAME+= it_CH.UTF-8:it_CH.ISO8859-1 -SAME+= it_CH.UTF-8:de_CH.UTF-8 -SAME+= it_CH.UTF-8:de_CH.ISO8859-15 -SAME+= it_CH.UTF-8:de_CH.ISO8859-1 -SAME+= en_AU.UTF-8:en_AU.US-ASCII -SAME+= en_AU.UTF-8:en_AU.ISO8859-15 -SAME+= en_AU.UTF-8:en_AU.ISO8859-1 -SAME+= en_CA.UTF-8:en_CA.US-ASCII -SAME+= en_CA.UTF-8:en_CA.ISO8859-15 -SAME+= en_CA.UTF-8:en_CA.ISO8859-1 -SAME+= en_GB.ISO8859-15:en_GB.ISO8859-1 -SAME+= zh_Hant_HK.UTF-8:zh_Hant_HK.Big5HKSCS -SAME+= zh_Hant_HK.UTF-8:en_HK.UTF-8 -SAME+= zh_Hant_HK.UTF-8:en_HK.ISO8859-1 -SAME+= en_NZ.UTF-8:en_NZ.US-ASCII -SAME+= en_NZ.UTF-8:en_NZ.ISO8859-15 -SAME+= en_NZ.UTF-8:en_NZ.ISO8859-1 -SAME+= en_SG.UTF-8:en_SG.ISO8859-1 -SAME+= en_US.UTF-8:en_US.US-ASCII -SAME+= en_US.UTF-8:en_US.ISO8859-15 -SAME+= en_US.UTF-8:en_US.ISO8859-1 -SAME+= es_AR.UTF-8:es_AR.ISO8859-1 -SAME+= es_MX.UTF-8:es_MX.ISO8859-1 -SAME+= sv_FI.ISO8859-1:sk_SK.ISO8859-2 -SAME+= sv_FI.ISO8859-1:pt_PT.ISO8859-1 -SAME+= sv_FI.ISO8859-1:lt_LT.ISO8859-13 -SAME+= sv_FI.ISO8859-1:fr_FR.ISO8859-1 -SAME+= sv_FI.ISO8859-1:fi_FI.ISO8859-1 -SAME+= sv_FI.ISO8859-1:et_EE.ISO8859-1 -SAME+= sv_FI.ISO8859-15:pt_PT.ISO8859-15 -SAME+= sv_FI.ISO8859-15:fr_FR.ISO8859-15 -SAME+= sv_FI.ISO8859-15:fi_FI.ISO8859-15 -SAME+= sv_FI.ISO8859-15:et_EE.ISO8859-15 -SAME+= sk_SK.UTF-8:pt_PT.UTF-8 -SAME+= sk_SK.UTF-8:fr_FR.UTF-8 -SAME+= sk_SK.UTF-8:et_EE.UTF-8 -SAME+= sv_FI.UTF-8:se_FI.UTF-8 -SAME+= sv_FI.UTF-8:lt_LT.UTF-8 -SAME+= sv_FI.UTF-8:fi_FI.UTF-8 -SAME+= fr_CA.ISO8859-15:fr_CA.ISO8859-1 -SAME+= fr_CH.ISO8859-15:fr_CH.ISO8859-1 -SAME+= hr_HR.UTF-8:hr_HR.ISO8859-2 -SAME+= is_IS.UTF-8:is_IS.ISO8859-15 -SAME+= is_IS.UTF-8:is_IS.ISO8859-1 -SAME+= nb_NO.ISO8859-15:nb_NO.ISO8859-1 -SAME+= nn_NO.ISO8859-15:nn_NO.ISO8859-1 -SAME+= se_NO.UTF-8:nn_NO.UTF-8 -SAME+= pt_BR.UTF-8:pt_BR.ISO8859-1 -SAME+= ro_RO.UTF-8:ro_RO.ISO8859-2 -SAME+= sr_Latn_RS.UTF-8:sr_Latn_RS.ISO8859-2 -SAME+= sr_Latn_RS.UTF-8:sr_Cyrl_RS.UTF-8 -SAME+= sr_Latn_RS.UTF-8:sr_Cyrl_RS.ISO8859-5 -SAME+= sv_SE.ISO8859-15:sv_SE.ISO8859-1 -SAME+= zh_Hans_CN.GBK:zh_Hans_CN.GB18030 -SAME+= ko_KR.eucKR:ko_KR.CP949 # legacy (same charset) +SAME+= en_ZA.ISO8859-15 en_ZA.ISO8859-1 +SAME+= en_ZA.ISO8859-15 af_ZA.ISO8859-15 +SAME+= en_ZA.ISO8859-15 af_ZA.ISO8859-1 +SAME+= en_ZA.UTF-8 af_ZA.UTF-8 +SAME+= sl_SI.ISO8859-2 nl_BE.ISO8859-1 +SAME+= sl_SI.ISO8859-2 it_IT.ISO8859-1 +SAME+= sl_SI.ISO8859-2 fr_BE.ISO8859-1 +SAME+= sl_SI.ISO8859-2 eu_ES.ISO8859-1 +SAME+= sl_SI.ISO8859-2 es_ES.ISO8859-1 +SAME+= sl_SI.ISO8859-2 de_DE.ISO8859-1 +SAME+= sl_SI.ISO8859-2 ca_IT.ISO8859-1 +SAME+= sl_SI.ISO8859-2 ca_FR.ISO8859-1 +SAME+= sl_SI.ISO8859-2 ca_ES.ISO8859-1 +SAME+= sl_SI.ISO8859-2 ca_AD.ISO8859-1 +SAME+= nl_BE.ISO8859-15 it_IT.ISO8859-15 +SAME+= nl_BE.ISO8859-15 fr_BE.ISO8859-15 +SAME+= nl_BE.ISO8859-15 eu_ES.ISO8859-15 +SAME+= nl_BE.ISO8859-15 es_ES.ISO8859-15 +SAME+= nl_BE.ISO8859-15 el_GR.ISO8859-7 +SAME+= nl_BE.ISO8859-15 de_DE.ISO8859-15 +SAME+= nl_BE.ISO8859-15 ca_IT.ISO8859-15 +SAME+= nl_BE.ISO8859-15 ca_FR.ISO8859-15 +SAME+= nl_BE.ISO8859-15 ca_ES.ISO8859-15 +SAME+= nl_BE.ISO8859-15 ca_AD.ISO8859-15 +SAME+= sl_SI.UTF-8 nl_BE.UTF-8 +SAME+= sl_SI.UTF-8 it_IT.UTF-8 +SAME+= sl_SI.UTF-8 fr_BE.UTF-8 +SAME+= sl_SI.UTF-8 eu_ES.UTF-8 +SAME+= sl_SI.UTF-8 es_ES.UTF-8 +SAME+= sl_SI.UTF-8 el_GR.UTF-8 +SAME+= sl_SI.UTF-8 de_DE.UTF-8 +SAME+= sl_SI.UTF-8 ca_IT.UTF-8 +SAME+= sl_SI.UTF-8 ca_FR.UTF-8 +SAME+= sl_SI.UTF-8 ca_ES.UTF-8 +SAME+= sl_SI.UTF-8 ca_AD.UTF-8 +SAME+= da_DK.UTF-8 da_DK.ISO8859-15 +SAME+= da_DK.UTF-8 da_DK.ISO8859-1 +SAME+= it_CH.UTF-8 it_CH.ISO8859-15 +SAME+= it_CH.UTF-8 it_CH.ISO8859-1 +SAME+= it_CH.UTF-8 de_CH.UTF-8 +SAME+= it_CH.UTF-8 de_CH.ISO8859-15 +SAME+= it_CH.UTF-8 de_CH.ISO8859-1 +SAME+= en_AU.UTF-8 en_AU.US-ASCII +SAME+= en_AU.UTF-8 en_AU.ISO8859-15 +SAME+= en_AU.UTF-8 en_AU.ISO8859-1 +SAME+= en_CA.UTF-8 en_CA.US-ASCII +SAME+= en_CA.UTF-8 en_CA.ISO8859-15 +SAME+= en_CA.UTF-8 en_CA.ISO8859-1 +SAME+= en_GB.ISO8859-15 en_GB.ISO8859-1 +SAME+= zh_Hant_HK.UTF-8 zh_Hant_HK.Big5HKSCS +SAME+= zh_Hant_HK.UTF-8 en_HK.UTF-8 +SAME+= zh_Hant_HK.UTF-8 en_HK.ISO8859-1 +SAME+= en_NZ.UTF-8 en_NZ.US-ASCII +SAME+= en_NZ.UTF-8 en_NZ.ISO8859-15 +SAME+= en_NZ.UTF-8 en_NZ.ISO8859-1 +SAME+= en_SG.UTF-8 en_SG.ISO8859-1 +SAME+= en_US.UTF-8 en_US.US-ASCII +SAME+= en_US.UTF-8 en_US.ISO8859-15 +SAME+= en_US.UTF-8 en_US.ISO8859-1 +SAME+= es_AR.UTF-8 es_AR.ISO8859-1 +SAME+= es_MX.UTF-8 es_MX.ISO8859-1 +SAME+= sv_FI.ISO8859-1 sk_SK.ISO8859-2 +SAME+= sv_FI.ISO8859-1 pt_PT.ISO8859-1 +SAME+= sv_FI.ISO8859-1 lt_LT.ISO8859-13 +SAME+= sv_FI.ISO8859-1 fr_FR.ISO8859-1 +SAME+= sv_FI.ISO8859-1 fi_FI.ISO8859-1 +SAME+= sv_FI.ISO8859-1 et_EE.ISO8859-1 +SAME+= sv_FI.ISO8859-15 pt_PT.ISO8859-15 +SAME+= sv_FI.ISO8859-15 fr_FR.ISO8859-15 +SAME+= sv_FI.ISO8859-15 fi_FI.ISO8859-15 +SAME+= sv_FI.ISO8859-15 et_EE.ISO8859-15 +SAME+= sk_SK.UTF-8 pt_PT.UTF-8 +SAME+= sk_SK.UTF-8 fr_FR.UTF-8 +SAME+= sk_SK.UTF-8 et_EE.UTF-8 +SAME+= sv_FI.UTF-8 se_FI.UTF-8 +SAME+= sv_FI.UTF-8 lt_LT.UTF-8 +SAME+= sv_FI.UTF-8 fi_FI.UTF-8 +SAME+= fr_CA.ISO8859-15 fr_CA.ISO8859-1 +SAME+= fr_CH.ISO8859-15 fr_CH.ISO8859-1 +SAME+= hr_HR.UTF-8 hr_HR.ISO8859-2 +SAME+= is_IS.UTF-8 is_IS.ISO8859-15 +SAME+= is_IS.UTF-8 is_IS.ISO8859-1 +SAME+= nb_NO.ISO8859-15 nb_NO.ISO8859-1 +SAME+= nn_NO.ISO8859-15 nn_NO.ISO8859-1 +SAME+= se_NO.UTF-8 nn_NO.UTF-8 +SAME+= pt_BR.UTF-8 pt_BR.ISO8859-1 +SAME+= ro_RO.UTF-8 ro_RO.ISO8859-2 +SAME+= sr_Latn_RS.UTF-8 sr_Latn_RS.ISO8859-2 +SAME+= sr_Latn_RS.UTF-8 sr_Cyrl_RS.UTF-8 +SAME+= sr_Latn_RS.UTF-8 sr_Cyrl_RS.ISO8859-5 +SAME+= sv_SE.ISO8859-15 sv_SE.ISO8859-1 +SAME+= zh_Hans_CN.GBK zh_Hans_CN.GB18030 +SAME+= ko_KR.eucKR ko_KR.CP949 # legacy (same charset) FILES= ${LOCALES:S/$/.out/} CLEANFILES= ${FILES} -.for f in ${SAME} -SYMLINKS+= ../${f:C/:.*$//}/${FILESNAME} \ - ${LOCALEDIR}/${f:C/^.*://}/${FILESNAME} +.for f t in ${SAME} +SYMLINKS+= ../$f/${FILESNAME} \ + ${LOCALEDIR}/$t/${FILESNAME} .endfor .for f in ${LOCALES} FILESDIR_${f}.out= ${LOCALEDIR}/${f} .endfor .include Index: user/alc/PQ_LAUNDRY/share/msgdef/Makefile =================================================================== --- user/alc/PQ_LAUNDRY/share/msgdef/Makefile (revision 292469) +++ user/alc/PQ_LAUNDRY/share/msgdef/Makefile (revision 292470) @@ -1,218 +1,218 @@ # $FreeBSD$ # Warning: Do not edit. This file is automatically generated from the # tools in /usr/src/tools/tools/locale. LOCALEDIR= ${SHAREDIR}/locale FILESNAME= LC_MESSAGES .SUFFIXES: .src .out .src.out: grep -v -E '^(#$$|#[ ])' < ${.IMPSRC} > ${.TARGET} LOCALES+= am_ET.UTF-8 LOCALES+= ar_SA.UTF-8 LOCALES+= be_BY.CP1131 LOCALES+= be_BY.CP1251 LOCALES+= be_BY.ISO8859-5 LOCALES+= be_BY.UTF-8 LOCALES+= bg_BG.CP1251 LOCALES+= bg_BG.UTF-8 LOCALES+= cs_CZ.UTF-8 LOCALES+= de_DE.UTF-8 LOCALES+= el_GR.ISO8859-7 LOCALES+= el_GR.UTF-8 LOCALES+= en_US.UTF-8 LOCALES+= es_MX.ISO8859-1 LOCALES+= es_MX.UTF-8 LOCALES+= et_EE.UTF-8 LOCALES+= eu_ES.UTF-8 LOCALES+= fi_FI.ISO8859-15 LOCALES+= fi_FI.UTF-8 LOCALES+= fr_FR.UTF-8 LOCALES+= he_IL.UTF-8 LOCALES+= hi_IN.ISCII-DEV LOCALES+= hi_IN.UTF-8 LOCALES+= hu_HU.UTF-8 LOCALES+= hy_AM.ARMSCII-8 LOCALES+= hy_AM.UTF-8 LOCALES+= is_IS.ISO8859-15 LOCALES+= is_IS.UTF-8 LOCALES+= it_IT.ISO8859-15 LOCALES+= it_IT.UTF-8 LOCALES+= ja_JP.SJIS LOCALES+= ja_JP.UTF-8 LOCALES+= ja_JP.eucJP LOCALES+= kk_Cyrl_KZ.UTF-8 LOCALES+= ko_KR.UTF-8 LOCALES+= ko_KR.eucKR LOCALES+= lt_LT.UTF-8 LOCALES+= lv_LV.ISO8859-13 LOCALES+= lv_LV.UTF-8 LOCALES+= mn_Cyrl_MN.UTF-8 LOCALES+= nb_NO.UTF-8 LOCALES+= nl_NL.UTF-8 LOCALES+= nn_NO.UTF-8 LOCALES+= pl_PL.UTF-8 LOCALES+= pt_PT.ISO8859-15 LOCALES+= pt_PT.UTF-8 LOCALES+= ro_RO.UTF-8 LOCALES+= ru_RU.CP1251 LOCALES+= ru_RU.CP866 LOCALES+= ru_RU.ISO8859-5 LOCALES+= ru_RU.KOI8-R LOCALES+= ru_RU.UTF-8 LOCALES+= se_NO.UTF-8 LOCALES+= sk_SK.ISO8859-2 LOCALES+= sk_SK.UTF-8 LOCALES+= sl_SI.UTF-8 LOCALES+= sr_Cyrl_RS.ISO8859-5 LOCALES+= sr_Latn_RS.ISO8859-2 LOCALES+= sr_Latn_RS.UTF-8 LOCALES+= sv_SE.UTF-8 LOCALES+= tr_TR.ISO8859-9 LOCALES+= tr_TR.UTF-8 LOCALES+= uk_UA.CP1251 LOCALES+= uk_UA.ISO8859-5 LOCALES+= uk_UA.KOI8-U LOCALES+= uk_UA.UTF-8 LOCALES+= zh_Hans_CN.GB2312 LOCALES+= zh_Hans_CN.GBK LOCALES+= zh_Hans_CN.UTF-8 LOCALES+= zh_Hant_HK.Big5HKSCS LOCALES+= zh_Hant_HK.UTF-8 LOCALES+= zh_Hant_TW.Big5 LOCALES+= zh_Hant_TW.UTF-8 -SAME+= nl_NL.UTF-8:nl_NL.ISO8859-15 -SAME+= nl_NL.UTF-8:nl_NL.ISO8859-1 -SAME+= nl_NL.UTF-8:nl_BE.UTF-8 -SAME+= nl_NL.UTF-8:nl_BE.ISO8859-15 -SAME+= nl_NL.UTF-8:nl_BE.ISO8859-1 -SAME+= nl_NL.UTF-8:af_ZA.UTF-8 -SAME+= nl_NL.UTF-8:af_ZA.ISO8859-15 -SAME+= nl_NL.UTF-8:af_ZA.ISO8859-1 -SAME+= ar_SA.UTF-8:ar_QA.UTF-8 -SAME+= ar_SA.UTF-8:ar_MA.UTF-8 -SAME+= ar_SA.UTF-8:ar_JO.UTF-8 -SAME+= ar_SA.UTF-8:ar_EG.UTF-8 -SAME+= ar_SA.UTF-8:ar_AE.UTF-8 -SAME+= es_MX.ISO8859-1:es_ES.ISO8859-15 -SAME+= es_MX.ISO8859-1:es_ES.ISO8859-1 -SAME+= es_MX.ISO8859-1:es_AR.ISO8859-1 -SAME+= es_MX.ISO8859-1:ca_IT.ISO8859-15 -SAME+= es_MX.ISO8859-1:ca_IT.ISO8859-1 -SAME+= es_MX.ISO8859-1:ca_FR.ISO8859-15 -SAME+= es_MX.ISO8859-1:ca_FR.ISO8859-1 -SAME+= es_MX.ISO8859-1:ca_ES.ISO8859-15 -SAME+= es_MX.ISO8859-1:ca_ES.ISO8859-1 -SAME+= es_MX.ISO8859-1:ca_AD.ISO8859-15 -SAME+= es_MX.ISO8859-1:ca_AD.ISO8859-1 -SAME+= es_MX.UTF-8:es_ES.UTF-8 -SAME+= es_MX.UTF-8:es_CR.UTF-8 -SAME+= es_MX.UTF-8:es_AR.UTF-8 -SAME+= es_MX.UTF-8:ca_IT.UTF-8 -SAME+= es_MX.UTF-8:ca_FR.UTF-8 -SAME+= es_MX.UTF-8:ca_ES.UTF-8 -SAME+= es_MX.UTF-8:ca_AD.UTF-8 -SAME+= cs_CZ.UTF-8:cs_CZ.ISO8859-2 -SAME+= sv_SE.UTF-8:sv_SE.ISO8859-15 -SAME+= sv_SE.UTF-8:sv_SE.ISO8859-1 -SAME+= sv_SE.UTF-8:sv_FI.UTF-8 -SAME+= sv_SE.UTF-8:sv_FI.ISO8859-15 -SAME+= sv_SE.UTF-8:sv_FI.ISO8859-1 -SAME+= sv_SE.UTF-8:da_DK.UTF-8 -SAME+= sv_SE.UTF-8:da_DK.ISO8859-15 -SAME+= sv_SE.UTF-8:da_DK.ISO8859-1 -SAME+= de_DE.UTF-8:de_DE.ISO8859-15 -SAME+= de_DE.UTF-8:de_DE.ISO8859-1 -SAME+= de_DE.UTF-8:de_CH.UTF-8 -SAME+= de_DE.UTF-8:de_CH.ISO8859-15 -SAME+= de_DE.UTF-8:de_CH.ISO8859-1 -SAME+= de_DE.UTF-8:de_AT.UTF-8 -SAME+= de_DE.UTF-8:de_AT.ISO8859-15 -SAME+= de_DE.UTF-8:de_AT.ISO8859-1 -SAME+= en_US.UTF-8:en_ZA.UTF-8 -SAME+= en_US.UTF-8:en_ZA.US-ASCII -SAME+= en_US.UTF-8:en_ZA.ISO8859-15 -SAME+= en_US.UTF-8:en_ZA.ISO8859-1 -SAME+= en_US.UTF-8:en_US.US-ASCII -SAME+= en_US.UTF-8:en_US.ISO8859-15 -SAME+= en_US.UTF-8:en_US.ISO8859-1 -SAME+= en_US.UTF-8:en_SG.UTF-8 -SAME+= en_US.UTF-8:en_SG.ISO8859-1 -SAME+= en_US.UTF-8:en_PH.UTF-8 -SAME+= en_US.UTF-8:en_NZ.UTF-8 -SAME+= en_US.UTF-8:en_NZ.US-ASCII -SAME+= en_US.UTF-8:en_NZ.ISO8859-15 -SAME+= en_US.UTF-8:en_NZ.ISO8859-1 -SAME+= en_US.UTF-8:en_IE.UTF-8 -SAME+= en_US.UTF-8:en_IE.ISO8859-15 -SAME+= en_US.UTF-8:en_IE.ISO8859-1 -SAME+= en_US.UTF-8:en_HK.UTF-8 -SAME+= en_US.UTF-8:en_HK.ISO8859-1 -SAME+= en_US.UTF-8:en_GB.UTF-8 -SAME+= en_US.UTF-8:en_GB.US-ASCII -SAME+= en_US.UTF-8:en_GB.ISO8859-15 -SAME+= en_US.UTF-8:en_GB.ISO8859-1 -SAME+= en_US.UTF-8:en_CA.UTF-8 -SAME+= en_US.UTF-8:en_CA.US-ASCII -SAME+= en_US.UTF-8:en_CA.ISO8859-15 -SAME+= en_US.UTF-8:en_CA.ISO8859-1 -SAME+= en_US.UTF-8:en_AU.UTF-8 -SAME+= en_US.UTF-8:en_AU.US-ASCII -SAME+= en_US.UTF-8:en_AU.ISO8859-15 -SAME+= en_US.UTF-8:en_AU.ISO8859-1 -SAME+= et_EE.UTF-8:et_EE.ISO8859-15 -SAME+= et_EE.UTF-8:et_EE.ISO8859-1 -SAME+= eu_ES.UTF-8:eu_ES.ISO8859-15 -SAME+= eu_ES.UTF-8:eu_ES.ISO8859-1 -SAME+= fi_FI.ISO8859-15:fi_FI.ISO8859-1 -SAME+= fr_FR.UTF-8:fr_FR.ISO8859-15 -SAME+= fr_FR.UTF-8:fr_FR.ISO8859-1 -SAME+= fr_FR.UTF-8:fr_CH.UTF-8 -SAME+= fr_FR.UTF-8:fr_CH.ISO8859-15 -SAME+= fr_FR.UTF-8:fr_CH.ISO8859-1 -SAME+= fr_FR.UTF-8:fr_CA.UTF-8 -SAME+= fr_FR.UTF-8:fr_CA.ISO8859-15 -SAME+= fr_FR.UTF-8:fr_CA.ISO8859-1 -SAME+= fr_FR.UTF-8:fr_BE.UTF-8 -SAME+= fr_FR.UTF-8:fr_BE.ISO8859-15 -SAME+= fr_FR.UTF-8:fr_BE.ISO8859-1 -SAME+= sl_SI.UTF-8:sl_SI.ISO8859-2 -SAME+= sl_SI.UTF-8:hr_HR.UTF-8 -SAME+= sl_SI.UTF-8:hr_HR.ISO8859-2 -SAME+= hu_HU.UTF-8:hu_HU.ISO8859-2 -SAME+= is_IS.ISO8859-15:is_IS.ISO8859-1 -SAME+= it_IT.ISO8859-15:it_IT.ISO8859-1 -SAME+= it_IT.ISO8859-15:it_CH.ISO8859-15 -SAME+= it_IT.ISO8859-15:it_CH.ISO8859-1 -SAME+= it_IT.UTF-8:it_CH.UTF-8 -SAME+= lt_LT.UTF-8:lt_LT.ISO8859-13 -SAME+= nb_NO.UTF-8:nb_NO.ISO8859-15 -SAME+= nb_NO.UTF-8:nb_NO.ISO8859-1 -SAME+= nn_NO.UTF-8:nn_NO.ISO8859-15 -SAME+= nn_NO.UTF-8:nn_NO.ISO8859-1 -SAME+= pl_PL.UTF-8:pl_PL.ISO8859-2 -SAME+= pt_PT.ISO8859-15:pt_PT.ISO8859-1 -SAME+= pt_PT.ISO8859-15:pt_BR.ISO8859-1 -SAME+= pt_PT.UTF-8:pt_BR.UTF-8 -SAME+= ro_RO.UTF-8:ro_RO.ISO8859-2 -SAME+= se_NO.UTF-8:se_FI.UTF-8 -SAME+= sr_Latn_RS.UTF-8:sr_Cyrl_RS.UTF-8 -SAME+= zh_Hans_CN.GBK:zh_Hans_CN.GB18030 -SAME+= zh_Hans_CN.GBK:zh_Hans_CN.eucCN -SAME+= ko_KR.eucKR:ko_KR.CP949 # legacy (same charset) +SAME+= nl_NL.UTF-8 nl_NL.ISO8859-15 +SAME+= nl_NL.UTF-8 nl_NL.ISO8859-1 +SAME+= nl_NL.UTF-8 nl_BE.UTF-8 +SAME+= nl_NL.UTF-8 nl_BE.ISO8859-15 +SAME+= nl_NL.UTF-8 nl_BE.ISO8859-1 +SAME+= nl_NL.UTF-8 af_ZA.UTF-8 +SAME+= nl_NL.UTF-8 af_ZA.ISO8859-15 +SAME+= nl_NL.UTF-8 af_ZA.ISO8859-1 +SAME+= ar_SA.UTF-8 ar_QA.UTF-8 +SAME+= ar_SA.UTF-8 ar_MA.UTF-8 +SAME+= ar_SA.UTF-8 ar_JO.UTF-8 +SAME+= ar_SA.UTF-8 ar_EG.UTF-8 +SAME+= ar_SA.UTF-8 ar_AE.UTF-8 +SAME+= es_MX.ISO8859-1 es_ES.ISO8859-15 +SAME+= es_MX.ISO8859-1 es_ES.ISO8859-1 +SAME+= es_MX.ISO8859-1 es_AR.ISO8859-1 +SAME+= es_MX.ISO8859-1 ca_IT.ISO8859-15 +SAME+= es_MX.ISO8859-1 ca_IT.ISO8859-1 +SAME+= es_MX.ISO8859-1 ca_FR.ISO8859-15 +SAME+= es_MX.ISO8859-1 ca_FR.ISO8859-1 +SAME+= es_MX.ISO8859-1 ca_ES.ISO8859-15 +SAME+= es_MX.ISO8859-1 ca_ES.ISO8859-1 +SAME+= es_MX.ISO8859-1 ca_AD.ISO8859-15 +SAME+= es_MX.ISO8859-1 ca_AD.ISO8859-1 +SAME+= es_MX.UTF-8 es_ES.UTF-8 +SAME+= es_MX.UTF-8 es_CR.UTF-8 +SAME+= es_MX.UTF-8 es_AR.UTF-8 +SAME+= es_MX.UTF-8 ca_IT.UTF-8 +SAME+= es_MX.UTF-8 ca_FR.UTF-8 +SAME+= es_MX.UTF-8 ca_ES.UTF-8 +SAME+= es_MX.UTF-8 ca_AD.UTF-8 +SAME+= cs_CZ.UTF-8 cs_CZ.ISO8859-2 +SAME+= sv_SE.UTF-8 sv_SE.ISO8859-15 +SAME+= sv_SE.UTF-8 sv_SE.ISO8859-1 +SAME+= sv_SE.UTF-8 sv_FI.UTF-8 +SAME+= sv_SE.UTF-8 sv_FI.ISO8859-15 +SAME+= sv_SE.UTF-8 sv_FI.ISO8859-1 +SAME+= sv_SE.UTF-8 da_DK.UTF-8 +SAME+= sv_SE.UTF-8 da_DK.ISO8859-15 +SAME+= sv_SE.UTF-8 da_DK.ISO8859-1 +SAME+= de_DE.UTF-8 de_DE.ISO8859-15 +SAME+= de_DE.UTF-8 de_DE.ISO8859-1 +SAME+= de_DE.UTF-8 de_CH.UTF-8 +SAME+= de_DE.UTF-8 de_CH.ISO8859-15 +SAME+= de_DE.UTF-8 de_CH.ISO8859-1 +SAME+= de_DE.UTF-8 de_AT.UTF-8 +SAME+= de_DE.UTF-8 de_AT.ISO8859-15 +SAME+= de_DE.UTF-8 de_AT.ISO8859-1 +SAME+= en_US.UTF-8 en_ZA.UTF-8 +SAME+= en_US.UTF-8 en_ZA.US-ASCII +SAME+= en_US.UTF-8 en_ZA.ISO8859-15 +SAME+= en_US.UTF-8 en_ZA.ISO8859-1 +SAME+= en_US.UTF-8 en_US.US-ASCII +SAME+= en_US.UTF-8 en_US.ISO8859-15 +SAME+= en_US.UTF-8 en_US.ISO8859-1 +SAME+= en_US.UTF-8 en_SG.UTF-8 +SAME+= en_US.UTF-8 en_SG.ISO8859-1 +SAME+= en_US.UTF-8 en_PH.UTF-8 +SAME+= en_US.UTF-8 en_NZ.UTF-8 +SAME+= en_US.UTF-8 en_NZ.US-ASCII +SAME+= en_US.UTF-8 en_NZ.ISO8859-15 +SAME+= en_US.UTF-8 en_NZ.ISO8859-1 +SAME+= en_US.UTF-8 en_IE.UTF-8 +SAME+= en_US.UTF-8 en_IE.ISO8859-15 +SAME+= en_US.UTF-8 en_IE.ISO8859-1 +SAME+= en_US.UTF-8 en_HK.UTF-8 +SAME+= en_US.UTF-8 en_HK.ISO8859-1 +SAME+= en_US.UTF-8 en_GB.UTF-8 +SAME+= en_US.UTF-8 en_GB.US-ASCII +SAME+= en_US.UTF-8 en_GB.ISO8859-15 +SAME+= en_US.UTF-8 en_GB.ISO8859-1 +SAME+= en_US.UTF-8 en_CA.UTF-8 +SAME+= en_US.UTF-8 en_CA.US-ASCII +SAME+= en_US.UTF-8 en_CA.ISO8859-15 +SAME+= en_US.UTF-8 en_CA.ISO8859-1 +SAME+= en_US.UTF-8 en_AU.UTF-8 +SAME+= en_US.UTF-8 en_AU.US-ASCII +SAME+= en_US.UTF-8 en_AU.ISO8859-15 +SAME+= en_US.UTF-8 en_AU.ISO8859-1 +SAME+= et_EE.UTF-8 et_EE.ISO8859-15 +SAME+= et_EE.UTF-8 et_EE.ISO8859-1 +SAME+= eu_ES.UTF-8 eu_ES.ISO8859-15 +SAME+= eu_ES.UTF-8 eu_ES.ISO8859-1 +SAME+= fi_FI.ISO8859-15 fi_FI.ISO8859-1 +SAME+= fr_FR.UTF-8 fr_FR.ISO8859-15 +SAME+= fr_FR.UTF-8 fr_FR.ISO8859-1 +SAME+= fr_FR.UTF-8 fr_CH.UTF-8 +SAME+= fr_FR.UTF-8 fr_CH.ISO8859-15 +SAME+= fr_FR.UTF-8 fr_CH.ISO8859-1 +SAME+= fr_FR.UTF-8 fr_CA.UTF-8 +SAME+= fr_FR.UTF-8 fr_CA.ISO8859-15 +SAME+= fr_FR.UTF-8 fr_CA.ISO8859-1 +SAME+= fr_FR.UTF-8 fr_BE.UTF-8 +SAME+= fr_FR.UTF-8 fr_BE.ISO8859-15 +SAME+= fr_FR.UTF-8 fr_BE.ISO8859-1 +SAME+= sl_SI.UTF-8 sl_SI.ISO8859-2 +SAME+= sl_SI.UTF-8 hr_HR.UTF-8 +SAME+= sl_SI.UTF-8 hr_HR.ISO8859-2 +SAME+= hu_HU.UTF-8 hu_HU.ISO8859-2 +SAME+= is_IS.ISO8859-15 is_IS.ISO8859-1 +SAME+= it_IT.ISO8859-15 it_IT.ISO8859-1 +SAME+= it_IT.ISO8859-15 it_CH.ISO8859-15 +SAME+= it_IT.ISO8859-15 it_CH.ISO8859-1 +SAME+= it_IT.UTF-8 it_CH.UTF-8 +SAME+= lt_LT.UTF-8 lt_LT.ISO8859-13 +SAME+= nb_NO.UTF-8 nb_NO.ISO8859-15 +SAME+= nb_NO.UTF-8 nb_NO.ISO8859-1 +SAME+= nn_NO.UTF-8 nn_NO.ISO8859-15 +SAME+= nn_NO.UTF-8 nn_NO.ISO8859-1 +SAME+= pl_PL.UTF-8 pl_PL.ISO8859-2 +SAME+= pt_PT.ISO8859-15 pt_PT.ISO8859-1 +SAME+= pt_PT.ISO8859-15 pt_BR.ISO8859-1 +SAME+= pt_PT.UTF-8 pt_BR.UTF-8 +SAME+= ro_RO.UTF-8 ro_RO.ISO8859-2 +SAME+= se_NO.UTF-8 se_FI.UTF-8 +SAME+= sr_Latn_RS.UTF-8 sr_Cyrl_RS.UTF-8 +SAME+= zh_Hans_CN.GBK zh_Hans_CN.GB18030 +SAME+= zh_Hans_CN.GBK zh_Hans_CN.eucCN +SAME+= ko_KR.eucKR ko_KR.CP949 # legacy (same charset) FILES= ${LOCALES:S/$/.out/} CLEANFILES= ${FILES} -.for f in ${SAME} -SYMLINKS+= ../${f:C/:.*$//}/${FILESNAME} \ - ${LOCALEDIR}/${f:C/^.*://}/${FILESNAME} +.for f t in ${SAME} +SYMLINKS+= ../$f/${FILESNAME} \ + ${LOCALEDIR}/$t/${FILESNAME} .endfor .for f in ${LOCALES} FILESDIR_${f}.out= ${LOCALEDIR}/${f} .endfor .include Index: user/alc/PQ_LAUNDRY/share/numericdef/Makefile =================================================================== --- user/alc/PQ_LAUNDRY/share/numericdef/Makefile (revision 292469) +++ user/alc/PQ_LAUNDRY/share/numericdef/Makefile (revision 292470) @@ -1,218 +1,218 @@ # $FreeBSD$ # Warning: Do not edit. This file is automatically generated from the # tools in /usr/src/tools/tools/locale. LOCALEDIR= ${SHAREDIR}/locale FILESNAME= LC_NUMERIC .SUFFIXES: .src .out .src.out: grep -v -E '^(#$$|#[ ])' < ${.IMPSRC} > ${.TARGET} LOCALES+= ar_SA.UTF-8 LOCALES+= en_US.UTF-8 LOCALES+= en_ZA.US-ASCII LOCALES+= fr_CH.ISO8859-15 LOCALES+= fr_CH.UTF-8 LOCALES+= hi_IN.UTF-8 LOCALES+= hy_AM.UTF-8 LOCALES+= it_CH.UTF-8 LOCALES+= ru_RU.CP866 LOCALES+= sr_Latn_RS.UTF-8 LOCALES+= tr_TR.UTF-8 LOCALES+= uk_UA.ISO8859-5 LOCALES+= uk_UA.KOI8-U LOCALES+= uk_UA.UTF-8 LOCALES+= zh_Hans_CN.GB2312 LOCALES+= zh_Hans_CN.eucCN LOCALES+= zh_Hant_TW.Big5 -SAME+= uk_UA.ISO8859-5:uk_UA.CP1251 -SAME+= uk_UA.ISO8859-5:sv_SE.ISO8859-15 -SAME+= uk_UA.ISO8859-5:sv_SE.ISO8859-1 -SAME+= uk_UA.ISO8859-5:sv_FI.ISO8859-15 -SAME+= uk_UA.ISO8859-5:sv_FI.ISO8859-1 -SAME+= uk_UA.ISO8859-5:sk_SK.ISO8859-2 -SAME+= uk_UA.ISO8859-5:ru_RU.ISO8859-5 -SAME+= uk_UA.ISO8859-5:ru_RU.CP1251 -SAME+= uk_UA.ISO8859-5:pt_PT.ISO8859-15 -SAME+= uk_UA.ISO8859-5:pt_PT.ISO8859-1 -SAME+= uk_UA.ISO8859-5:pl_PL.ISO8859-2 -SAME+= uk_UA.ISO8859-5:nn_NO.ISO8859-15 -SAME+= uk_UA.ISO8859-5:nn_NO.ISO8859-1 -SAME+= uk_UA.ISO8859-5:nb_NO.ISO8859-15 -SAME+= uk_UA.ISO8859-5:nb_NO.ISO8859-1 -SAME+= uk_UA.ISO8859-5:lv_LV.ISO8859-13 -SAME+= uk_UA.ISO8859-5:lt_LT.ISO8859-13 -SAME+= uk_UA.ISO8859-5:hu_HU.ISO8859-2 -SAME+= uk_UA.ISO8859-5:fr_FR.ISO8859-15 -SAME+= uk_UA.ISO8859-5:fr_FR.ISO8859-1 -SAME+= uk_UA.ISO8859-5:fr_CA.ISO8859-15 -SAME+= uk_UA.ISO8859-5:fr_CA.ISO8859-1 -SAME+= uk_UA.ISO8859-5:fi_FI.ISO8859-15 -SAME+= uk_UA.ISO8859-5:fi_FI.ISO8859-1 -SAME+= uk_UA.ISO8859-5:et_EE.ISO8859-15 -SAME+= uk_UA.ISO8859-5:et_EE.ISO8859-1 -SAME+= uk_UA.ISO8859-5:en_ZA.ISO8859-15 -SAME+= uk_UA.ISO8859-5:en_ZA.ISO8859-1 -SAME+= uk_UA.ISO8859-5:cs_CZ.ISO8859-2 -SAME+= uk_UA.ISO8859-5:bg_BG.CP1251 -SAME+= uk_UA.ISO8859-5:be_BY.ISO8859-5 -SAME+= uk_UA.ISO8859-5:be_BY.CP1251 -SAME+= uk_UA.ISO8859-5:af_ZA.ISO8859-15 -SAME+= uk_UA.ISO8859-5:af_ZA.ISO8859-1 -SAME+= uk_UA.UTF-8:sv_SE.UTF-8 -SAME+= uk_UA.UTF-8:sv_FI.UTF-8 -SAME+= uk_UA.UTF-8:sk_SK.UTF-8 -SAME+= uk_UA.UTF-8:se_NO.UTF-8 -SAME+= uk_UA.UTF-8:se_FI.UTF-8 -SAME+= uk_UA.UTF-8:ru_RU.UTF-8 -SAME+= uk_UA.UTF-8:pt_PT.UTF-8 -SAME+= uk_UA.UTF-8:pl_PL.UTF-8 -SAME+= uk_UA.UTF-8:nn_NO.UTF-8 -SAME+= uk_UA.UTF-8:nb_NO.UTF-8 -SAME+= uk_UA.UTF-8:lv_LV.UTF-8 -SAME+= uk_UA.UTF-8:lt_LT.UTF-8 -SAME+= uk_UA.UTF-8:kk_Cyrl_KZ.UTF-8 -SAME+= uk_UA.UTF-8:hu_HU.UTF-8 -SAME+= uk_UA.UTF-8:fr_FR.UTF-8 -SAME+= uk_UA.UTF-8:fr_CA.UTF-8 -SAME+= uk_UA.UTF-8:fi_FI.UTF-8 -SAME+= uk_UA.UTF-8:et_EE.UTF-8 -SAME+= uk_UA.UTF-8:en_ZA.UTF-8 -SAME+= uk_UA.UTF-8:cs_CZ.UTF-8 -SAME+= uk_UA.UTF-8:bg_BG.UTF-8 -SAME+= uk_UA.UTF-8:be_BY.UTF-8 -SAME+= uk_UA.UTF-8:af_ZA.UTF-8 -SAME+= en_US.UTF-8:zh_Hant_TW.UTF-8 -SAME+= en_US.UTF-8:zh_Hant_HK.UTF-8 -SAME+= en_US.UTF-8:zh_Hant_HK.Big5HKSCS -SAME+= en_US.UTF-8:zh_Hans_CN.UTF-8 -SAME+= en_US.UTF-8:zh_Hans_CN.GBK -SAME+= en_US.UTF-8:zh_Hans_CN.GB18030 -SAME+= en_US.UTF-8:mn_Cyrl_MN.UTF-8 -SAME+= en_US.UTF-8:ko_KR.UTF-8 -SAME+= en_US.UTF-8:ko_KR.eucKR -SAME+= en_US.UTF-8:ja_JP.UTF-8 -SAME+= en_US.UTF-8:ja_JP.SJIS -SAME+= en_US.UTF-8:ja_JP.eucJP -SAME+= en_US.UTF-8:he_IL.UTF-8 -SAME+= en_US.UTF-8:es_MX.UTF-8 -SAME+= en_US.UTF-8:es_MX.ISO8859-1 -SAME+= en_US.UTF-8:en_US.US-ASCII -SAME+= en_US.UTF-8:en_US.ISO8859-15 -SAME+= en_US.UTF-8:en_US.ISO8859-1 -SAME+= en_US.UTF-8:en_SG.UTF-8 -SAME+= en_US.UTF-8:en_SG.ISO8859-1 -SAME+= en_US.UTF-8:en_PH.UTF-8 -SAME+= en_US.UTF-8:en_NZ.UTF-8 -SAME+= en_US.UTF-8:en_NZ.US-ASCII -SAME+= en_US.UTF-8:en_NZ.ISO8859-15 -SAME+= en_US.UTF-8:en_NZ.ISO8859-1 -SAME+= en_US.UTF-8:en_IE.UTF-8 -SAME+= en_US.UTF-8:en_IE.ISO8859-15 -SAME+= en_US.UTF-8:en_IE.ISO8859-1 -SAME+= en_US.UTF-8:en_HK.UTF-8 -SAME+= en_US.UTF-8:en_HK.ISO8859-1 -SAME+= en_US.UTF-8:en_GB.UTF-8 -SAME+= en_US.UTF-8:en_GB.US-ASCII -SAME+= en_US.UTF-8:en_GB.ISO8859-15 -SAME+= en_US.UTF-8:en_GB.ISO8859-1 -SAME+= en_US.UTF-8:en_CA.UTF-8 -SAME+= en_US.UTF-8:en_CA.US-ASCII -SAME+= en_US.UTF-8:en_CA.ISO8859-15 -SAME+= en_US.UTF-8:en_CA.ISO8859-1 -SAME+= en_US.UTF-8:en_AU.UTF-8 -SAME+= en_US.UTF-8:en_AU.US-ASCII -SAME+= en_US.UTF-8:en_AU.ISO8859-15 -SAME+= en_US.UTF-8:en_AU.ISO8859-1 -SAME+= en_US.UTF-8:am_ET.UTF-8 -SAME+= ar_SA.UTF-8:ar_QA.UTF-8 -SAME+= ar_SA.UTF-8:ar_JO.UTF-8 -SAME+= ar_SA.UTF-8:ar_EG.UTF-8 -SAME+= ar_SA.UTF-8:ar_AE.UTF-8 -SAME+= tr_TR.UTF-8:tr_TR.ISO8859-9 -SAME+= tr_TR.UTF-8:sl_SI.UTF-8 -SAME+= tr_TR.UTF-8:sl_SI.ISO8859-2 -SAME+= tr_TR.UTF-8:ro_RO.UTF-8 -SAME+= tr_TR.UTF-8:ro_RO.ISO8859-2 -SAME+= tr_TR.UTF-8:pt_BR.UTF-8 -SAME+= tr_TR.UTF-8:pt_BR.ISO8859-1 -SAME+= tr_TR.UTF-8:nl_NL.UTF-8 -SAME+= tr_TR.UTF-8:nl_NL.ISO8859-15 -SAME+= tr_TR.UTF-8:nl_NL.ISO8859-1 -SAME+= tr_TR.UTF-8:nl_BE.UTF-8 -SAME+= tr_TR.UTF-8:nl_BE.ISO8859-15 -SAME+= tr_TR.UTF-8:nl_BE.ISO8859-1 -SAME+= tr_TR.UTF-8:it_IT.UTF-8 -SAME+= tr_TR.UTF-8:it_IT.ISO8859-15 -SAME+= tr_TR.UTF-8:it_IT.ISO8859-1 -SAME+= tr_TR.UTF-8:is_IS.UTF-8 -SAME+= tr_TR.UTF-8:is_IS.ISO8859-15 -SAME+= tr_TR.UTF-8:is_IS.ISO8859-1 -SAME+= tr_TR.UTF-8:hr_HR.UTF-8 -SAME+= tr_TR.UTF-8:hr_HR.ISO8859-2 -SAME+= tr_TR.UTF-8:fr_BE.UTF-8 -SAME+= tr_TR.UTF-8:fr_BE.ISO8859-15 -SAME+= tr_TR.UTF-8:fr_BE.ISO8859-1 -SAME+= tr_TR.UTF-8:eu_ES.UTF-8 -SAME+= tr_TR.UTF-8:eu_ES.ISO8859-15 -SAME+= tr_TR.UTF-8:eu_ES.ISO8859-1 -SAME+= tr_TR.UTF-8:es_ES.UTF-8 -SAME+= tr_TR.UTF-8:es_ES.ISO8859-15 -SAME+= tr_TR.UTF-8:es_ES.ISO8859-1 -SAME+= tr_TR.UTF-8:es_CR.UTF-8 -SAME+= tr_TR.UTF-8:es_AR.UTF-8 -SAME+= tr_TR.UTF-8:es_AR.ISO8859-1 -SAME+= tr_TR.UTF-8:el_GR.UTF-8 -SAME+= tr_TR.UTF-8:el_GR.ISO8859-7 -SAME+= tr_TR.UTF-8:de_DE.UTF-8 -SAME+= tr_TR.UTF-8:de_DE.ISO8859-15 -SAME+= tr_TR.UTF-8:de_DE.ISO8859-1 -SAME+= tr_TR.UTF-8:de_AT.UTF-8 -SAME+= tr_TR.UTF-8:de_AT.ISO8859-15 -SAME+= tr_TR.UTF-8:de_AT.ISO8859-1 -SAME+= tr_TR.UTF-8:da_DK.UTF-8 -SAME+= tr_TR.UTF-8:da_DK.ISO8859-15 -SAME+= tr_TR.UTF-8:da_DK.ISO8859-1 -SAME+= tr_TR.UTF-8:ca_IT.UTF-8 -SAME+= tr_TR.UTF-8:ca_IT.ISO8859-15 -SAME+= tr_TR.UTF-8:ca_IT.ISO8859-1 -SAME+= tr_TR.UTF-8:ca_FR.UTF-8 -SAME+= tr_TR.UTF-8:ca_FR.ISO8859-15 -SAME+= tr_TR.UTF-8:ca_FR.ISO8859-1 -SAME+= tr_TR.UTF-8:ca_ES.UTF-8 -SAME+= tr_TR.UTF-8:ca_ES.ISO8859-15 -SAME+= tr_TR.UTF-8:ca_ES.ISO8859-1 -SAME+= tr_TR.UTF-8:ca_AD.UTF-8 -SAME+= tr_TR.UTF-8:ca_AD.ISO8859-15 -SAME+= tr_TR.UTF-8:ca_AD.ISO8859-1 -SAME+= tr_TR.UTF-8:ar_MA.UTF-8 -SAME+= ru_RU.CP866:be_BY.CP1131 -SAME+= it_CH.UTF-8:it_CH.ISO8859-15 -SAME+= it_CH.UTF-8:it_CH.ISO8859-1 -SAME+= it_CH.UTF-8:de_CH.UTF-8 -SAME+= it_CH.UTF-8:de_CH.ISO8859-15 -SAME+= it_CH.UTF-8:de_CH.ISO8859-1 -SAME+= fr_CH.ISO8859-15:fr_CH.ISO8859-1 -SAME+= hi_IN.UTF-8:hi_IN.ISCII-DEV -SAME+= hy_AM.UTF-8:hy_AM.ARMSCII-8 -SAME+= uk_UA.KOI8-U:ru_RU.KOI8-R -SAME+= sr_Latn_RS.UTF-8:sr_Latn_RS.ISO8859-2 -SAME+= sr_Latn_RS.UTF-8:sr_Cyrl_RS.UTF-8 -SAME+= sr_Latn_RS.UTF-8:sr_Cyrl_RS.ISO8859-5 -SAME+= ko_KR.eucKR:ko_KR.CP949 # legacy (same charset) +SAME+= uk_UA.ISO8859-5 uk_UA.CP1251 +SAME+= uk_UA.ISO8859-5 sv_SE.ISO8859-15 +SAME+= uk_UA.ISO8859-5 sv_SE.ISO8859-1 +SAME+= uk_UA.ISO8859-5 sv_FI.ISO8859-15 +SAME+= uk_UA.ISO8859-5 sv_FI.ISO8859-1 +SAME+= uk_UA.ISO8859-5 sk_SK.ISO8859-2 +SAME+= uk_UA.ISO8859-5 ru_RU.ISO8859-5 +SAME+= uk_UA.ISO8859-5 ru_RU.CP1251 +SAME+= uk_UA.ISO8859-5 pt_PT.ISO8859-15 +SAME+= uk_UA.ISO8859-5 pt_PT.ISO8859-1 +SAME+= uk_UA.ISO8859-5 pl_PL.ISO8859-2 +SAME+= uk_UA.ISO8859-5 nn_NO.ISO8859-15 +SAME+= uk_UA.ISO8859-5 nn_NO.ISO8859-1 +SAME+= uk_UA.ISO8859-5 nb_NO.ISO8859-15 +SAME+= uk_UA.ISO8859-5 nb_NO.ISO8859-1 +SAME+= uk_UA.ISO8859-5 lv_LV.ISO8859-13 +SAME+= uk_UA.ISO8859-5 lt_LT.ISO8859-13 +SAME+= uk_UA.ISO8859-5 hu_HU.ISO8859-2 +SAME+= uk_UA.ISO8859-5 fr_FR.ISO8859-15 +SAME+= uk_UA.ISO8859-5 fr_FR.ISO8859-1 +SAME+= uk_UA.ISO8859-5 fr_CA.ISO8859-15 +SAME+= uk_UA.ISO8859-5 fr_CA.ISO8859-1 +SAME+= uk_UA.ISO8859-5 fi_FI.ISO8859-15 +SAME+= uk_UA.ISO8859-5 fi_FI.ISO8859-1 +SAME+= uk_UA.ISO8859-5 et_EE.ISO8859-15 +SAME+= uk_UA.ISO8859-5 et_EE.ISO8859-1 +SAME+= uk_UA.ISO8859-5 en_ZA.ISO8859-15 +SAME+= uk_UA.ISO8859-5 en_ZA.ISO8859-1 +SAME+= uk_UA.ISO8859-5 cs_CZ.ISO8859-2 +SAME+= uk_UA.ISO8859-5 bg_BG.CP1251 +SAME+= uk_UA.ISO8859-5 be_BY.ISO8859-5 +SAME+= uk_UA.ISO8859-5 be_BY.CP1251 +SAME+= uk_UA.ISO8859-5 af_ZA.ISO8859-15 +SAME+= uk_UA.ISO8859-5 af_ZA.ISO8859-1 +SAME+= uk_UA.UTF-8 sv_SE.UTF-8 +SAME+= uk_UA.UTF-8 sv_FI.UTF-8 +SAME+= uk_UA.UTF-8 sk_SK.UTF-8 +SAME+= uk_UA.UTF-8 se_NO.UTF-8 +SAME+= uk_UA.UTF-8 se_FI.UTF-8 +SAME+= uk_UA.UTF-8 ru_RU.UTF-8 +SAME+= uk_UA.UTF-8 pt_PT.UTF-8 +SAME+= uk_UA.UTF-8 pl_PL.UTF-8 +SAME+= uk_UA.UTF-8 nn_NO.UTF-8 +SAME+= uk_UA.UTF-8 nb_NO.UTF-8 +SAME+= uk_UA.UTF-8 lv_LV.UTF-8 +SAME+= uk_UA.UTF-8 lt_LT.UTF-8 +SAME+= uk_UA.UTF-8 kk_Cyrl_KZ.UTF-8 +SAME+= uk_UA.UTF-8 hu_HU.UTF-8 +SAME+= uk_UA.UTF-8 fr_FR.UTF-8 +SAME+= uk_UA.UTF-8 fr_CA.UTF-8 +SAME+= uk_UA.UTF-8 fi_FI.UTF-8 +SAME+= uk_UA.UTF-8 et_EE.UTF-8 +SAME+= uk_UA.UTF-8 en_ZA.UTF-8 +SAME+= uk_UA.UTF-8 cs_CZ.UTF-8 +SAME+= uk_UA.UTF-8 bg_BG.UTF-8 +SAME+= uk_UA.UTF-8 be_BY.UTF-8 +SAME+= uk_UA.UTF-8 af_ZA.UTF-8 +SAME+= en_US.UTF-8 zh_Hant_TW.UTF-8 +SAME+= en_US.UTF-8 zh_Hant_HK.UTF-8 +SAME+= en_US.UTF-8 zh_Hant_HK.Big5HKSCS +SAME+= en_US.UTF-8 zh_Hans_CN.UTF-8 +SAME+= en_US.UTF-8 zh_Hans_CN.GBK +SAME+= en_US.UTF-8 zh_Hans_CN.GB18030 +SAME+= en_US.UTF-8 mn_Cyrl_MN.UTF-8 +SAME+= en_US.UTF-8 ko_KR.UTF-8 +SAME+= en_US.UTF-8 ko_KR.eucKR +SAME+= en_US.UTF-8 ja_JP.UTF-8 +SAME+= en_US.UTF-8 ja_JP.SJIS +SAME+= en_US.UTF-8 ja_JP.eucJP +SAME+= en_US.UTF-8 he_IL.UTF-8 +SAME+= en_US.UTF-8 es_MX.UTF-8 +SAME+= en_US.UTF-8 es_MX.ISO8859-1 +SAME+= en_US.UTF-8 en_US.US-ASCII +SAME+= en_US.UTF-8 en_US.ISO8859-15 +SAME+= en_US.UTF-8 en_US.ISO8859-1 +SAME+= en_US.UTF-8 en_SG.UTF-8 +SAME+= en_US.UTF-8 en_SG.ISO8859-1 +SAME+= en_US.UTF-8 en_PH.UTF-8 +SAME+= en_US.UTF-8 en_NZ.UTF-8 +SAME+= en_US.UTF-8 en_NZ.US-ASCII +SAME+= en_US.UTF-8 en_NZ.ISO8859-15 +SAME+= en_US.UTF-8 en_NZ.ISO8859-1 +SAME+= en_US.UTF-8 en_IE.UTF-8 +SAME+= en_US.UTF-8 en_IE.ISO8859-15 +SAME+= en_US.UTF-8 en_IE.ISO8859-1 +SAME+= en_US.UTF-8 en_HK.UTF-8 +SAME+= en_US.UTF-8 en_HK.ISO8859-1 +SAME+= en_US.UTF-8 en_GB.UTF-8 +SAME+= en_US.UTF-8 en_GB.US-ASCII +SAME+= en_US.UTF-8 en_GB.ISO8859-15 +SAME+= en_US.UTF-8 en_GB.ISO8859-1 +SAME+= en_US.UTF-8 en_CA.UTF-8 +SAME+= en_US.UTF-8 en_CA.US-ASCII +SAME+= en_US.UTF-8 en_CA.ISO8859-15 +SAME+= en_US.UTF-8 en_CA.ISO8859-1 +SAME+= en_US.UTF-8 en_AU.UTF-8 +SAME+= en_US.UTF-8 en_AU.US-ASCII +SAME+= en_US.UTF-8 en_AU.ISO8859-15 +SAME+= en_US.UTF-8 en_AU.ISO8859-1 +SAME+= en_US.UTF-8 am_ET.UTF-8 +SAME+= ar_SA.UTF-8 ar_QA.UTF-8 +SAME+= ar_SA.UTF-8 ar_JO.UTF-8 +SAME+= ar_SA.UTF-8 ar_EG.UTF-8 +SAME+= ar_SA.UTF-8 ar_AE.UTF-8 +SAME+= tr_TR.UTF-8 tr_TR.ISO8859-9 +SAME+= tr_TR.UTF-8 sl_SI.UTF-8 +SAME+= tr_TR.UTF-8 sl_SI.ISO8859-2 +SAME+= tr_TR.UTF-8 ro_RO.UTF-8 +SAME+= tr_TR.UTF-8 ro_RO.ISO8859-2 +SAME+= tr_TR.UTF-8 pt_BR.UTF-8 +SAME+= tr_TR.UTF-8 pt_BR.ISO8859-1 +SAME+= tr_TR.UTF-8 nl_NL.UTF-8 +SAME+= tr_TR.UTF-8 nl_NL.ISO8859-15 +SAME+= tr_TR.UTF-8 nl_NL.ISO8859-1 +SAME+= tr_TR.UTF-8 nl_BE.UTF-8 +SAME+= tr_TR.UTF-8 nl_BE.ISO8859-15 +SAME+= tr_TR.UTF-8 nl_BE.ISO8859-1 +SAME+= tr_TR.UTF-8 it_IT.UTF-8 +SAME+= tr_TR.UTF-8 it_IT.ISO8859-15 +SAME+= tr_TR.UTF-8 it_IT.ISO8859-1 +SAME+= tr_TR.UTF-8 is_IS.UTF-8 +SAME+= tr_TR.UTF-8 is_IS.ISO8859-15 +SAME+= tr_TR.UTF-8 is_IS.ISO8859-1 +SAME+= tr_TR.UTF-8 hr_HR.UTF-8 +SAME+= tr_TR.UTF-8 hr_HR.ISO8859-2 +SAME+= tr_TR.UTF-8 fr_BE.UTF-8 +SAME+= tr_TR.UTF-8 fr_BE.ISO8859-15 +SAME+= tr_TR.UTF-8 fr_BE.ISO8859-1 +SAME+= tr_TR.UTF-8 eu_ES.UTF-8 +SAME+= tr_TR.UTF-8 eu_ES.ISO8859-15 +SAME+= tr_TR.UTF-8 eu_ES.ISO8859-1 +SAME+= tr_TR.UTF-8 es_ES.UTF-8 +SAME+= tr_TR.UTF-8 es_ES.ISO8859-15 +SAME+= tr_TR.UTF-8 es_ES.ISO8859-1 +SAME+= tr_TR.UTF-8 es_CR.UTF-8 +SAME+= tr_TR.UTF-8 es_AR.UTF-8 +SAME+= tr_TR.UTF-8 es_AR.ISO8859-1 +SAME+= tr_TR.UTF-8 el_GR.UTF-8 +SAME+= tr_TR.UTF-8 el_GR.ISO8859-7 +SAME+= tr_TR.UTF-8 de_DE.UTF-8 +SAME+= tr_TR.UTF-8 de_DE.ISO8859-15 +SAME+= tr_TR.UTF-8 de_DE.ISO8859-1 +SAME+= tr_TR.UTF-8 de_AT.UTF-8 +SAME+= tr_TR.UTF-8 de_AT.ISO8859-15 +SAME+= tr_TR.UTF-8 de_AT.ISO8859-1 +SAME+= tr_TR.UTF-8 da_DK.UTF-8 +SAME+= tr_TR.UTF-8 da_DK.ISO8859-15 +SAME+= tr_TR.UTF-8 da_DK.ISO8859-1 +SAME+= tr_TR.UTF-8 ca_IT.UTF-8 +SAME+= tr_TR.UTF-8 ca_IT.ISO8859-15 +SAME+= tr_TR.UTF-8 ca_IT.ISO8859-1 +SAME+= tr_TR.UTF-8 ca_FR.UTF-8 +SAME+= tr_TR.UTF-8 ca_FR.ISO8859-15 +SAME+= tr_TR.UTF-8 ca_FR.ISO8859-1 +SAME+= tr_TR.UTF-8 ca_ES.UTF-8 +SAME+= tr_TR.UTF-8 ca_ES.ISO8859-15 +SAME+= tr_TR.UTF-8 ca_ES.ISO8859-1 +SAME+= tr_TR.UTF-8 ca_AD.UTF-8 +SAME+= tr_TR.UTF-8 ca_AD.ISO8859-15 +SAME+= tr_TR.UTF-8 ca_AD.ISO8859-1 +SAME+= tr_TR.UTF-8 ar_MA.UTF-8 +SAME+= ru_RU.CP866 be_BY.CP1131 +SAME+= it_CH.UTF-8 it_CH.ISO8859-15 +SAME+= it_CH.UTF-8 it_CH.ISO8859-1 +SAME+= it_CH.UTF-8 de_CH.UTF-8 +SAME+= it_CH.UTF-8 de_CH.ISO8859-15 +SAME+= it_CH.UTF-8 de_CH.ISO8859-1 +SAME+= fr_CH.ISO8859-15 fr_CH.ISO8859-1 +SAME+= hi_IN.UTF-8 hi_IN.ISCII-DEV +SAME+= hy_AM.UTF-8 hy_AM.ARMSCII-8 +SAME+= uk_UA.KOI8-U ru_RU.KOI8-R +SAME+= sr_Latn_RS.UTF-8 sr_Latn_RS.ISO8859-2 +SAME+= sr_Latn_RS.UTF-8 sr_Cyrl_RS.UTF-8 +SAME+= sr_Latn_RS.UTF-8 sr_Cyrl_RS.ISO8859-5 +SAME+= ko_KR.eucKR ko_KR.CP949 # legacy (same charset) FILES= ${LOCALES:S/$/.out/} CLEANFILES= ${FILES} -.for f in ${SAME} -SYMLINKS+= ../${f:C/:.*$//}/${FILESNAME} \ - ${LOCALEDIR}/${f:C/^.*://}/${FILESNAME} +.for f t in ${SAME} +SYMLINKS+= ../$f/${FILESNAME} \ + ${LOCALEDIR}/$t/${FILESNAME} .endfor .for f in ${LOCALES} FILESDIR_${f}.out= ${LOCALEDIR}/${f} .endfor .include Index: user/alc/PQ_LAUNDRY/share/timedef/Makefile =================================================================== --- user/alc/PQ_LAUNDRY/share/timedef/Makefile (revision 292469) +++ user/alc/PQ_LAUNDRY/share/timedef/Makefile (revision 292470) @@ -1,218 +1,218 @@ # $FreeBSD$ # Warning: Do not edit. This file is automatically generated from the # tools in /usr/src/tools/tools/locale. LOCALEDIR= ${SHAREDIR}/locale FILESNAME= LC_TIME .SUFFIXES: .src .out .src.out: grep -v -E '^(#$$|#[ ])' < ${.IMPSRC} > ${.TARGET} LOCALES+= af_ZA.UTF-8 LOCALES+= am_ET.UTF-8 LOCALES+= ar_JO.UTF-8 LOCALES+= ar_MA.UTF-8 LOCALES+= ar_SA.UTF-8 LOCALES+= be_BY.CP1131 LOCALES+= be_BY.CP1251 LOCALES+= be_BY.ISO8859-5 LOCALES+= be_BY.UTF-8 LOCALES+= bg_BG.CP1251 LOCALES+= bg_BG.UTF-8 LOCALES+= ca_IT.ISO8859-15 LOCALES+= ca_IT.UTF-8 LOCALES+= cs_CZ.ISO8859-2 LOCALES+= cs_CZ.UTF-8 LOCALES+= da_DK.ISO8859-15 LOCALES+= da_DK.UTF-8 LOCALES+= de_AT.ISO8859-15 LOCALES+= de_AT.UTF-8 LOCALES+= de_DE.ISO8859-15 LOCALES+= de_DE.UTF-8 LOCALES+= el_GR.ISO8859-7 LOCALES+= el_GR.UTF-8 LOCALES+= en_CA.UTF-8 LOCALES+= en_GB.UTF-8 LOCALES+= en_HK.UTF-8 LOCALES+= en_IE.UTF-8 LOCALES+= en_PH.UTF-8 LOCALES+= en_SG.UTF-8 LOCALES+= en_US.UTF-8 LOCALES+= en_ZA.UTF-8 LOCALES+= es_AR.ISO8859-1 LOCALES+= es_CR.UTF-8 LOCALES+= es_ES.ISO8859-15 LOCALES+= es_ES.UTF-8 LOCALES+= es_MX.ISO8859-1 LOCALES+= es_MX.UTF-8 LOCALES+= et_EE.ISO8859-15 LOCALES+= et_EE.UTF-8 LOCALES+= eu_ES.UTF-8 LOCALES+= fi_FI.ISO8859-15 LOCALES+= fi_FI.UTF-8 LOCALES+= fr_BE.ISO8859-15 LOCALES+= fr_BE.UTF-8 LOCALES+= fr_CA.ISO8859-15 LOCALES+= fr_CA.UTF-8 LOCALES+= fr_CH.ISO8859-15 LOCALES+= fr_CH.UTF-8 LOCALES+= fr_FR.ISO8859-15 LOCALES+= fr_FR.UTF-8 LOCALES+= he_IL.UTF-8 LOCALES+= hi_IN.ISCII-DEV LOCALES+= hi_IN.UTF-8 LOCALES+= hr_HR.ISO8859-2 LOCALES+= hr_HR.UTF-8 LOCALES+= hu_HU.ISO8859-2 LOCALES+= hu_HU.UTF-8 LOCALES+= hy_AM.ARMSCII-8 LOCALES+= hy_AM.UTF-8 LOCALES+= is_IS.ISO8859-15 LOCALES+= is_IS.UTF-8 LOCALES+= it_CH.ISO8859-15 LOCALES+= it_CH.UTF-8 LOCALES+= it_IT.ISO8859-15 LOCALES+= it_IT.UTF-8 LOCALES+= ja_JP.SJIS LOCALES+= ja_JP.UTF-8 LOCALES+= ja_JP.eucJP LOCALES+= kk_Cyrl_KZ.UTF-8 LOCALES+= ko_KR.UTF-8 LOCALES+= ko_KR.eucKR LOCALES+= lt_LT.ISO8859-13 LOCALES+= lt_LT.UTF-8 LOCALES+= lv_LV.ISO8859-13 LOCALES+= lv_LV.UTF-8 LOCALES+= mn_Cyrl_MN.UTF-8 LOCALES+= nb_NO.ISO8859-15 LOCALES+= nb_NO.UTF-8 LOCALES+= nl_BE.UTF-8 LOCALES+= nl_NL.UTF-8 LOCALES+= nn_NO.ISO8859-15 LOCALES+= nn_NO.UTF-8 LOCALES+= pl_PL.ISO8859-2 LOCALES+= pl_PL.UTF-8 LOCALES+= pt_BR.ISO8859-1 LOCALES+= pt_BR.UTF-8 LOCALES+= pt_PT.ISO8859-15 LOCALES+= pt_PT.UTF-8 LOCALES+= ro_RO.ISO8859-2 LOCALES+= ro_RO.UTF-8 LOCALES+= ru_RU.CP1251 LOCALES+= ru_RU.CP866 LOCALES+= ru_RU.ISO8859-5 LOCALES+= ru_RU.KOI8-R LOCALES+= ru_RU.UTF-8 LOCALES+= se_FI.UTF-8 LOCALES+= se_NO.UTF-8 LOCALES+= sk_SK.ISO8859-2 LOCALES+= sk_SK.UTF-8 LOCALES+= sl_SI.ISO8859-2 LOCALES+= sl_SI.UTF-8 LOCALES+= sr_Cyrl_RS.ISO8859-5 LOCALES+= sr_Latn_RS.ISO8859-2 LOCALES+= sr_Latn_RS.UTF-8 LOCALES+= sv_FI.ISO8859-15 LOCALES+= sv_FI.UTF-8 LOCALES+= sv_SE.ISO8859-15 LOCALES+= sv_SE.UTF-8 LOCALES+= tr_TR.ISO8859-9 LOCALES+= tr_TR.UTF-8 LOCALES+= uk_UA.CP1251 LOCALES+= uk_UA.ISO8859-5 LOCALES+= uk_UA.KOI8-U LOCALES+= uk_UA.UTF-8 LOCALES+= zh_Hans_CN.GB2312 LOCALES+= zh_Hans_CN.GBK LOCALES+= zh_Hans_CN.UTF-8 LOCALES+= zh_Hans_CN.eucCN LOCALES+= zh_Hant_HK.Big5HKSCS LOCALES+= zh_Hant_HK.UTF-8 LOCALES+= zh_Hant_TW.Big5 LOCALES+= zh_Hant_TW.UTF-8 -SAME+= af_ZA.UTF-8:af_ZA.ISO8859-15 -SAME+= af_ZA.UTF-8:af_ZA.ISO8859-1 -SAME+= ar_SA.UTF-8:ar_QA.UTF-8 -SAME+= ar_SA.UTF-8:ar_EG.UTF-8 -SAME+= ar_SA.UTF-8:ar_AE.UTF-8 -SAME+= ca_IT.ISO8859-15:ca_IT.ISO8859-1 -SAME+= ca_IT.ISO8859-15:ca_FR.ISO8859-15 -SAME+= ca_IT.ISO8859-15:ca_FR.ISO8859-1 -SAME+= ca_IT.ISO8859-15:ca_ES.ISO8859-15 -SAME+= ca_IT.ISO8859-15:ca_ES.ISO8859-1 -SAME+= ca_IT.ISO8859-15:ca_AD.ISO8859-15 -SAME+= ca_IT.ISO8859-15:ca_AD.ISO8859-1 -SAME+= ca_IT.UTF-8:ca_FR.UTF-8 -SAME+= ca_IT.UTF-8:ca_ES.UTF-8 -SAME+= ca_IT.UTF-8:ca_AD.UTF-8 -SAME+= da_DK.ISO8859-15:da_DK.ISO8859-1 -SAME+= de_AT.ISO8859-15:de_AT.ISO8859-1 -SAME+= de_DE.ISO8859-15:de_DE.ISO8859-1 -SAME+= de_DE.ISO8859-15:de_CH.ISO8859-15 -SAME+= de_DE.ISO8859-15:de_CH.ISO8859-1 -SAME+= de_DE.UTF-8:de_CH.UTF-8 -SAME+= en_HK.UTF-8:en_HK.ISO8859-1 -SAME+= en_HK.UTF-8:en_AU.UTF-8 -SAME+= en_HK.UTF-8:en_AU.US-ASCII -SAME+= en_HK.UTF-8:en_AU.ISO8859-15 -SAME+= en_HK.UTF-8:en_AU.ISO8859-1 -SAME+= en_CA.UTF-8:en_CA.US-ASCII -SAME+= en_CA.UTF-8:en_CA.ISO8859-15 -SAME+= en_CA.UTF-8:en_CA.ISO8859-1 -SAME+= en_GB.UTF-8:en_GB.US-ASCII -SAME+= en_GB.UTF-8:en_GB.ISO8859-15 -SAME+= en_GB.UTF-8:en_GB.ISO8859-1 -SAME+= en_IE.UTF-8:en_IE.ISO8859-15 -SAME+= en_IE.UTF-8:en_IE.ISO8859-1 -SAME+= en_SG.UTF-8:en_SG.ISO8859-1 -SAME+= en_SG.UTF-8:en_NZ.UTF-8 -SAME+= en_SG.UTF-8:en_NZ.US-ASCII -SAME+= en_SG.UTF-8:en_NZ.ISO8859-15 -SAME+= en_SG.UTF-8:en_NZ.ISO8859-1 -SAME+= en_US.UTF-8:en_US.US-ASCII -SAME+= en_US.UTF-8:en_US.ISO8859-15 -SAME+= en_US.UTF-8:en_US.ISO8859-1 -SAME+= en_ZA.UTF-8:en_ZA.US-ASCII -SAME+= en_ZA.UTF-8:en_ZA.ISO8859-15 -SAME+= en_ZA.UTF-8:en_ZA.ISO8859-1 -SAME+= es_CR.UTF-8:es_AR.UTF-8 -SAME+= es_ES.ISO8859-15:es_ES.ISO8859-1 -SAME+= et_EE.ISO8859-15:et_EE.ISO8859-1 -SAME+= eu_ES.UTF-8:eu_ES.ISO8859-15 -SAME+= eu_ES.UTF-8:eu_ES.ISO8859-1 -SAME+= fi_FI.ISO8859-15:fi_FI.ISO8859-1 -SAME+= fr_BE.ISO8859-15:fr_BE.ISO8859-1 -SAME+= fr_CA.ISO8859-15:fr_CA.ISO8859-1 -SAME+= fr_CH.ISO8859-15:fr_CH.ISO8859-1 -SAME+= fr_FR.ISO8859-15:fr_FR.ISO8859-1 -SAME+= is_IS.ISO8859-15:is_IS.ISO8859-1 -SAME+= it_CH.ISO8859-15:it_CH.ISO8859-1 -SAME+= it_IT.ISO8859-15:it_IT.ISO8859-1 -SAME+= nb_NO.ISO8859-15:nb_NO.ISO8859-1 -SAME+= nl_BE.UTF-8:nl_BE.ISO8859-15 -SAME+= nl_BE.UTF-8:nl_BE.ISO8859-1 -SAME+= nl_NL.UTF-8:nl_NL.ISO8859-15 -SAME+= nl_NL.UTF-8:nl_NL.ISO8859-1 -SAME+= nn_NO.ISO8859-15:nn_NO.ISO8859-1 -SAME+= pt_PT.ISO8859-15:pt_PT.ISO8859-1 -SAME+= sr_Latn_RS.UTF-8:sr_Cyrl_RS.UTF-8 -SAME+= sv_FI.ISO8859-15:sv_FI.ISO8859-1 -SAME+= sv_SE.ISO8859-15:sv_SE.ISO8859-1 -SAME+= zh_Hans_CN.GBK:zh_Hans_CN.GB18030 -SAME+= ko_KR.eucKR:ko_KR.CP949 # legacy (same charset) +SAME+= af_ZA.UTF-8 af_ZA.ISO8859-15 +SAME+= af_ZA.UTF-8 af_ZA.ISO8859-1 +SAME+= ar_SA.UTF-8 ar_QA.UTF-8 +SAME+= ar_SA.UTF-8 ar_EG.UTF-8 +SAME+= ar_SA.UTF-8 ar_AE.UTF-8 +SAME+= ca_IT.ISO8859-15 ca_IT.ISO8859-1 +SAME+= ca_IT.ISO8859-15 ca_FR.ISO8859-15 +SAME+= ca_IT.ISO8859-15 ca_FR.ISO8859-1 +SAME+= ca_IT.ISO8859-15 ca_ES.ISO8859-15 +SAME+= ca_IT.ISO8859-15 ca_ES.ISO8859-1 +SAME+= ca_IT.ISO8859-15 ca_AD.ISO8859-15 +SAME+= ca_IT.ISO8859-15 ca_AD.ISO8859-1 +SAME+= ca_IT.UTF-8 ca_FR.UTF-8 +SAME+= ca_IT.UTF-8 ca_ES.UTF-8 +SAME+= ca_IT.UTF-8 ca_AD.UTF-8 +SAME+= da_DK.ISO8859-15 da_DK.ISO8859-1 +SAME+= de_AT.ISO8859-15 de_AT.ISO8859-1 +SAME+= de_DE.ISO8859-15 de_DE.ISO8859-1 +SAME+= de_DE.ISO8859-15 de_CH.ISO8859-15 +SAME+= de_DE.ISO8859-15 de_CH.ISO8859-1 +SAME+= de_DE.UTF-8 de_CH.UTF-8 +SAME+= en_HK.UTF-8 en_HK.ISO8859-1 +SAME+= en_HK.UTF-8 en_AU.UTF-8 +SAME+= en_HK.UTF-8 en_AU.US-ASCII +SAME+= en_HK.UTF-8 en_AU.ISO8859-15 +SAME+= en_HK.UTF-8 en_AU.ISO8859-1 +SAME+= en_CA.UTF-8 en_CA.US-ASCII +SAME+= en_CA.UTF-8 en_CA.ISO8859-15 +SAME+= en_CA.UTF-8 en_CA.ISO8859-1 +SAME+= en_GB.UTF-8 en_GB.US-ASCII +SAME+= en_GB.UTF-8 en_GB.ISO8859-15 +SAME+= en_GB.UTF-8 en_GB.ISO8859-1 +SAME+= en_IE.UTF-8 en_IE.ISO8859-15 +SAME+= en_IE.UTF-8 en_IE.ISO8859-1 +SAME+= en_SG.UTF-8 en_SG.ISO8859-1 +SAME+= en_SG.UTF-8 en_NZ.UTF-8 +SAME+= en_SG.UTF-8 en_NZ.US-ASCII +SAME+= en_SG.UTF-8 en_NZ.ISO8859-15 +SAME+= en_SG.UTF-8 en_NZ.ISO8859-1 +SAME+= en_US.UTF-8 en_US.US-ASCII +SAME+= en_US.UTF-8 en_US.ISO8859-15 +SAME+= en_US.UTF-8 en_US.ISO8859-1 +SAME+= en_ZA.UTF-8 en_ZA.US-ASCII +SAME+= en_ZA.UTF-8 en_ZA.ISO8859-15 +SAME+= en_ZA.UTF-8 en_ZA.ISO8859-1 +SAME+= es_CR.UTF-8 es_AR.UTF-8 +SAME+= es_ES.ISO8859-15 es_ES.ISO8859-1 +SAME+= et_EE.ISO8859-15 et_EE.ISO8859-1 +SAME+= eu_ES.UTF-8 eu_ES.ISO8859-15 +SAME+= eu_ES.UTF-8 eu_ES.ISO8859-1 +SAME+= fi_FI.ISO8859-15 fi_FI.ISO8859-1 +SAME+= fr_BE.ISO8859-15 fr_BE.ISO8859-1 +SAME+= fr_CA.ISO8859-15 fr_CA.ISO8859-1 +SAME+= fr_CH.ISO8859-15 fr_CH.ISO8859-1 +SAME+= fr_FR.ISO8859-15 fr_FR.ISO8859-1 +SAME+= is_IS.ISO8859-15 is_IS.ISO8859-1 +SAME+= it_CH.ISO8859-15 it_CH.ISO8859-1 +SAME+= it_IT.ISO8859-15 it_IT.ISO8859-1 +SAME+= nb_NO.ISO8859-15 nb_NO.ISO8859-1 +SAME+= nl_BE.UTF-8 nl_BE.ISO8859-15 +SAME+= nl_BE.UTF-8 nl_BE.ISO8859-1 +SAME+= nl_NL.UTF-8 nl_NL.ISO8859-15 +SAME+= nl_NL.UTF-8 nl_NL.ISO8859-1 +SAME+= nn_NO.ISO8859-15 nn_NO.ISO8859-1 +SAME+= pt_PT.ISO8859-15 pt_PT.ISO8859-1 +SAME+= sr_Latn_RS.UTF-8 sr_Cyrl_RS.UTF-8 +SAME+= sv_FI.ISO8859-15 sv_FI.ISO8859-1 +SAME+= sv_SE.ISO8859-15 sv_SE.ISO8859-1 +SAME+= zh_Hans_CN.GBK zh_Hans_CN.GB18030 +SAME+= ko_KR.eucKR ko_KR.CP949 # legacy (same charset) FILES= ${LOCALES:S/$/.out/} CLEANFILES= ${FILES} -.for f in ${SAME} -SYMLINKS+= ../${f:C/:.*$//}/${FILESNAME} \ - ${LOCALEDIR}/${f:C/^.*://}/${FILESNAME} +.for f t in ${SAME} +SYMLINKS+= ../$f/${FILESNAME} \ + ${LOCALEDIR}/$t/${FILESNAME} .endfor .for f in ${LOCALES} FILESDIR_${f}.out= ${LOCALEDIR}/${f} .endfor .include Index: user/alc/PQ_LAUNDRY/share =================================================================== --- user/alc/PQ_LAUNDRY/share (revision 292469) +++ user/alc/PQ_LAUNDRY/share (revision 292470) Property changes on: user/alc/PQ_LAUNDRY/share ___________________________________________________________________ Modified: svn:mergeinfo ## -0,0 +0,1 ## Merged /head/share:r292449-292469 Index: user/alc/PQ_LAUNDRY/sys/powerpc/pseries/phyp_llan.c =================================================================== --- user/alc/PQ_LAUNDRY/sys/powerpc/pseries/phyp_llan.c (revision 292469) +++ user/alc/PQ_LAUNDRY/sys/powerpc/pseries/phyp_llan.c (revision 292470) @@ -1,512 +1,550 @@ /*- * Copyright 2013 Nathan Whitehorn * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include __FBSDID("$FreeBSD$"); #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LLAN_MAX_RX_PACKETS 100 #define LLAN_MAX_TX_PACKETS 100 #define LLAN_RX_BUF_LEN 8*PAGE_SIZE #define LLAN_BUFDESC_VALID (1ULL << 63) #define LLAN_ADD_MULTICAST 0x1 #define LLAN_DEL_MULTICAST 0x2 #define LLAN_CLEAR_MULTICAST 0x3 struct llan_xfer { struct mbuf *rx_mbuf; bus_dmamap_t rx_dmamap; uint64_t rx_bufdesc; }; struct llan_receive_queue_entry { /* PAPR page 539 */ uint8_t control; uint8_t reserved; uint16_t offset; uint32_t length; uint64_t handle; } __packed; struct llan_softc { device_t dev; struct mtx io_lock; cell_t unit; uint8_t mac_address[8]; + struct ifmedia media; + int irqid; struct resource *irq; void *irq_cookie; bus_dma_tag_t rx_dma_tag; bus_dma_tag_t rxbuf_dma_tag; bus_dma_tag_t tx_dma_tag; bus_dmamap_t tx_dma_map; struct llan_receive_queue_entry *rx_buf; int rx_dma_slot; int rx_valid_val; bus_dmamap_t rx_buf_map; bus_addr_t rx_buf_phys; bus_size_t rx_buf_len; bus_addr_t input_buf_phys; bus_addr_t filter_buf_phys; struct llan_xfer rx_xfer[LLAN_MAX_RX_PACKETS]; struct ifnet *ifp; }; static int llan_probe(device_t); static int llan_attach(device_t); static void llan_intr(void *xsc); static void llan_init(void *xsc); static void llan_start(struct ifnet *ifp); static int llan_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data); +static void llan_media_status(struct ifnet *ifp, struct ifmediareq *ifmr); +static int llan_media_change(struct ifnet *ifp); static void llan_rx_load_cb(void *xsc, bus_dma_segment_t *segs, int nsegs, int err); static int llan_add_rxbuf(struct llan_softc *sc, struct llan_xfer *rx); static int llan_set_multicast(struct llan_softc *sc); static devclass_t llan_devclass; static device_method_t llan_methods[] = { DEVMETHOD(device_probe, llan_probe), DEVMETHOD(device_attach, llan_attach), DEVMETHOD_END }; static driver_t llan_driver = { "llan", llan_methods, sizeof(struct llan_softc) }; DRIVER_MODULE(llan, vdevice, llan_driver, llan_devclass, 0, 0); static int llan_probe(device_t dev) { if (!ofw_bus_is_compatible(dev,"IBM,l-lan")) return (ENXIO); device_set_desc(dev, "POWER Hypervisor Virtual Ethernet"); return (0); } static int llan_attach(device_t dev) { struct llan_softc *sc; phandle_t node; int error, i; sc = device_get_softc(dev); sc->dev = dev; /* Get firmware properties */ node = ofw_bus_get_node(dev); OF_getprop(node, "local-mac-address", sc->mac_address, sizeof(sc->mac_address)); OF_getencprop(node, "reg", &sc->unit, sizeof(sc->unit)); mtx_init(&sc->io_lock, "llan", NULL, MTX_DEF); /* Setup interrupt */ sc->irqid = 0; sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irqid, RF_ACTIVE); if (!sc->irq) { device_printf(dev, "Could not allocate IRQ\n"); mtx_destroy(&sc->io_lock); return (ENXIO); } bus_setup_intr(dev, sc->irq, INTR_TYPE_MISC | INTR_MPSAFE | INTR_ENTROPY, NULL, llan_intr, sc, &sc->irq_cookie); /* Setup DMA */ error = bus_dma_tag_create(bus_get_dma_tag(dev), 16, 0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL, LLAN_RX_BUF_LEN, 1, BUS_SPACE_MAXSIZE_32BIT, 0, NULL, NULL, &sc->rx_dma_tag); error = bus_dma_tag_create(bus_get_dma_tag(dev), 4, 0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL, BUS_SPACE_MAXSIZE, 1, BUS_SPACE_MAXSIZE_32BIT, 0, NULL, NULL, &sc->rxbuf_dma_tag); error = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, BUS_SPACE_MAXSIZE, 6, BUS_SPACE_MAXSIZE_32BIT, 0, busdma_lock_mutex, &sc->io_lock, &sc->tx_dma_tag); error = bus_dmamem_alloc(sc->rx_dma_tag, (void **)&sc->rx_buf, BUS_DMA_WAITOK | BUS_DMA_ZERO, &sc->rx_buf_map); error = bus_dmamap_load(sc->rx_dma_tag, sc->rx_buf_map, sc->rx_buf, LLAN_RX_BUF_LEN, llan_rx_load_cb, sc, 0); /* TX DMA maps */ bus_dmamap_create(sc->tx_dma_tag, 0, &sc->tx_dma_map); /* RX DMA */ for (i = 0; i < LLAN_MAX_RX_PACKETS; i++) { error = bus_dmamap_create(sc->rxbuf_dma_tag, 0, &sc->rx_xfer[i].rx_dmamap); sc->rx_xfer[i].rx_mbuf = NULL; } /* Attach to network stack */ sc->ifp = if_alloc(IFT_ETHER); sc->ifp->if_softc = sc; if_initname(sc->ifp, device_get_name(dev), device_get_unit(dev)); sc->ifp->if_mtu = ETHERMTU; /* XXX max-frame-size from OF? */ sc->ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; sc->ifp->if_hwassist = 0; /* XXX: ibm,illan-options */ sc->ifp->if_capabilities = 0; sc->ifp->if_capenable = 0; sc->ifp->if_start = llan_start; sc->ifp->if_ioctl = llan_ioctl; sc->ifp->if_init = llan_init; + ifmedia_init(&sc->media, IFM_IMASK, llan_media_change, + llan_media_status); + ifmedia_add(&sc->media, IFM_ETHER | IFM_AUTO, 0, NULL); + ifmedia_set(&sc->media, IFM_ETHER | IFM_AUTO); + IFQ_SET_MAXLEN(&sc->ifp->if_snd, LLAN_MAX_TX_PACKETS); sc->ifp->if_snd.ifq_drv_maxlen = LLAN_MAX_TX_PACKETS; IFQ_SET_READY(&sc->ifp->if_snd); ether_ifattach(sc->ifp, &sc->mac_address[2]); + /* We don't have link state reporting, so make it always up */ + if_link_state_change(sc->ifp, LINK_STATE_UP); + return (0); } +static int +llan_media_change(struct ifnet *ifp) +{ + struct llan_softc *sc = ifp->if_softc; + + if (IFM_TYPE(sc->media.ifm_media) != IFM_ETHER) + return (EINVAL); + + if (IFM_SUBTYPE(sc->media.ifm_media) != IFM_AUTO) + return (EINVAL); + + return (0); +} + static void +llan_media_status(struct ifnet *ifp, struct ifmediareq *ifmr) +{ + + ifmr->ifm_status = IFM_AVALID | IFM_ACTIVE | IFM_UNKNOWN | IFM_FDX; + ifmr->ifm_active = IFM_ETHER; +} + +static void llan_rx_load_cb(void *xsc, bus_dma_segment_t *segs, int nsegs, int err) { struct llan_softc *sc = xsc; sc->rx_buf_phys = segs[0].ds_addr; sc->rx_buf_len = segs[0].ds_len - 2*PAGE_SIZE; sc->input_buf_phys = segs[0].ds_addr + segs[0].ds_len - PAGE_SIZE; sc->filter_buf_phys = segs[0].ds_addr + segs[0].ds_len - 2*PAGE_SIZE; } static void llan_init(void *xsc) { struct llan_softc *sc = xsc; uint64_t rx_buf_desc; uint64_t macaddr; int err, i; mtx_lock(&sc->io_lock); phyp_hcall(H_FREE_LOGICAL_LAN, sc->unit); /* Create buffers (page 539) */ sc->rx_dma_slot = 0; sc->rx_valid_val = 1; rx_buf_desc = LLAN_BUFDESC_VALID; rx_buf_desc |= (sc->rx_buf_len << 32); rx_buf_desc |= sc->rx_buf_phys; memcpy(&macaddr, sc->mac_address, 8); err = phyp_hcall(H_REGISTER_LOGICAL_LAN, sc->unit, sc->input_buf_phys, rx_buf_desc, sc->filter_buf_phys, macaddr); for (i = 0; i < LLAN_MAX_RX_PACKETS; i++) llan_add_rxbuf(sc, &sc->rx_xfer[i]); phyp_hcall(H_VIO_SIGNAL, sc->unit, 1); /* Enable interrupts */ /* Tell stack we're up */ sc->ifp->if_drv_flags |= IFF_DRV_RUNNING; sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; mtx_unlock(&sc->io_lock); /* Check for pending receives scheduled before interrupt enable */ llan_intr(sc); } static int llan_add_rxbuf(struct llan_softc *sc, struct llan_xfer *rx) { struct mbuf *m; bus_dma_segment_t segs[1]; int error, nsegs; mtx_assert(&sc->io_lock, MA_OWNED); m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); if (m == NULL) return (ENOBUFS); m->m_len = m->m_pkthdr.len = m->m_ext.ext_size; if (rx->rx_mbuf != NULL) { bus_dmamap_sync(sc->rxbuf_dma_tag, rx->rx_dmamap, BUS_DMASYNC_POSTREAD); bus_dmamap_unload(sc->rxbuf_dma_tag, rx->rx_dmamap); } /* Save pointer to buffer structure */ m_copyback(m, 0, 8, (void *)&rx); error = bus_dmamap_load_mbuf_sg(sc->rxbuf_dma_tag, rx->rx_dmamap, m, segs, &nsegs, BUS_DMA_NOWAIT); if (error != 0) { device_printf(sc->dev, "cannot load RX DMA map %p, error = %d\n", rx, error); m_freem(m); return (error); } /* If nsegs is wrong then the stack is corrupt. */ KASSERT(nsegs == 1, ("%s: too many DMA segments (%d)", __func__, nsegs)); rx->rx_mbuf = m; bus_dmamap_sync(sc->rxbuf_dma_tag, rx->rx_dmamap, BUS_DMASYNC_PREREAD); rx->rx_bufdesc = LLAN_BUFDESC_VALID; rx->rx_bufdesc |= (((uint64_t)segs[0].ds_len) << 32); rx->rx_bufdesc |= segs[0].ds_addr; error = phyp_hcall(H_ADD_LOGICAL_LAN_BUFFER, sc->unit, rx->rx_bufdesc); if (error != 0) { m_freem(m); rx->rx_mbuf = NULL; return (ENOBUFS); } return (0); } static void llan_intr(void *xsc) { struct llan_softc *sc = xsc; struct llan_xfer *rx; struct mbuf *m; mtx_lock(&sc->io_lock); restart: phyp_hcall(H_VIO_SIGNAL, sc->unit, 0); while ((sc->rx_buf[sc->rx_dma_slot].control >> 7) == sc->rx_valid_val) { rx = (struct llan_xfer *)sc->rx_buf[sc->rx_dma_slot].handle; m = rx->rx_mbuf; m_adj(m, sc->rx_buf[sc->rx_dma_slot].offset - 8); m->m_len = sc->rx_buf[sc->rx_dma_slot].length; /* llan_add_rxbuf does DMA sync and unload as well as requeue */ if (llan_add_rxbuf(sc, rx) != 0) { if_inc_counter(sc->ifp, IFCOUNTER_IERRORS, 1); phyp_hcall(H_ADD_LOGICAL_LAN_BUFFER, sc->unit, rx->rx_bufdesc); continue; } if_inc_counter(sc->ifp, IFCOUNTER_IPACKETS, 1); m_adj(m, sc->rx_buf[sc->rx_dma_slot].offset); m->m_len = sc->rx_buf[sc->rx_dma_slot].length; m->m_pkthdr.rcvif = sc->ifp; m->m_pkthdr.len = m->m_len; sc->rx_dma_slot++; if (sc->rx_dma_slot >= sc->rx_buf_len/sizeof(sc->rx_buf[0])) { sc->rx_dma_slot = 0; sc->rx_valid_val = !sc->rx_valid_val; } mtx_unlock(&sc->io_lock); (*sc->ifp->if_input)(sc->ifp, m); mtx_lock(&sc->io_lock); } phyp_hcall(H_VIO_SIGNAL, sc->unit, 1); /* * H_VIO_SIGNAL enables interrupts for future packets only. * Make sure none were queued between the end of the loop and the * enable interrupts call. */ if ((sc->rx_buf[sc->rx_dma_slot].control >> 7) == sc->rx_valid_val) goto restart; mtx_unlock(&sc->io_lock); } static void llan_send_packet(void *xsc, bus_dma_segment_t *segs, int nsegs, bus_size_t mapsize, int error) { struct llan_softc *sc = xsc; uint64_t bufdescs[6]; int i; bzero(bufdescs, sizeof(bufdescs)); for (i = 0; i < nsegs; i++) { bufdescs[i] = LLAN_BUFDESC_VALID; bufdescs[i] |= (((uint64_t)segs[i].ds_len) << 32); bufdescs[i] |= segs[i].ds_addr; } phyp_hcall(H_SEND_LOGICAL_LAN, sc->unit, bufdescs[0], bufdescs[1], bufdescs[2], bufdescs[3], bufdescs[4], bufdescs[5], 0); /* * The hypercall returning implies completion -- or that the call will * not complete. In principle, we should try a few times if we get back * H_BUSY based on the continuation token in R4. For now, just drop * the packet in such cases. */ } static void llan_start_locked(struct ifnet *ifp) { struct llan_softc *sc = ifp->if_softc; bus_addr_t first; int nsegs; struct mbuf *mb_head, *m; mtx_assert(&sc->io_lock, MA_OWNED); first = 0; if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING) return; while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) { IFQ_DRV_DEQUEUE(&ifp->if_snd, mb_head); if (mb_head == NULL) break; BPF_MTAP(ifp, mb_head); for (m = mb_head, nsegs = 0; m != NULL; m = m->m_next) nsegs++; if (nsegs > 6) { m = m_collapse(mb_head, M_NOWAIT, 6); if (m == NULL) { m_freem(mb_head); continue; } } bus_dmamap_load_mbuf(sc->tx_dma_tag, sc->tx_dma_map, mb_head, llan_send_packet, sc, 0); bus_dmamap_unload(sc->tx_dma_tag, sc->tx_dma_map); m_freem(mb_head); } } static void llan_start(struct ifnet *ifp) { struct llan_softc *sc = ifp->if_softc; mtx_lock(&sc->io_lock); llan_start_locked(ifp); mtx_unlock(&sc->io_lock); } static int llan_set_multicast(struct llan_softc *sc) { struct ifnet *ifp = sc->ifp; struct ifmultiaddr *inm; uint64_t macaddr; mtx_assert(&sc->io_lock, MA_OWNED); phyp_hcall(H_MULTICAST_CTRL, sc->unit, LLAN_CLEAR_MULTICAST, 0); if_maddr_rlock(ifp); TAILQ_FOREACH(inm, &ifp->if_multiaddrs, ifma_link) { if (inm->ifma_addr->sa_family != AF_LINK) continue; memcpy((uint8_t *)&macaddr + 2, LLADDR((struct sockaddr_dl *)inm->ifma_addr), 6); phyp_hcall(H_MULTICAST_CTRL, sc->unit, LLAN_ADD_MULTICAST, macaddr); } if_maddr_runlock(ifp); return (0); } static int llan_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) { int err = 0; struct llan_softc *sc = ifp->if_softc; switch (cmd) { case SIOCADDMULTI: case SIOCDELMULTI: mtx_lock(&sc->io_lock); if ((sc->ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) llan_set_multicast(sc); mtx_unlock(&sc->io_lock); + break; + case SIOCGIFMEDIA: + case SIOCSIFMEDIA: + err = ifmedia_ioctl(ifp, (struct ifreq *)data, &sc->media, cmd); break; case SIOCSIFFLAGS: default: err = ether_ioctl(ifp, cmd, data); break; } return (err); } Index: user/alc/PQ_LAUNDRY/sys =================================================================== --- user/alc/PQ_LAUNDRY/sys (revision 292469) +++ user/alc/PQ_LAUNDRY/sys (revision 292470) Property changes on: user/alc/PQ_LAUNDRY/sys ___________________________________________________________________ Modified: svn:mergeinfo ## -0,0 +0,1 ## Merged /head/sys:r292449-292469 Index: user/alc/PQ_LAUNDRY/tools/tools/locale/tools/cldr2def.pl =================================================================== --- user/alc/PQ_LAUNDRY/tools/tools/locale/tools/cldr2def.pl (revision 292469) +++ user/alc/PQ_LAUNDRY/tools/tools/locale/tools/cldr2def.pl (revision 292470) @@ -1,962 +1,962 @@ #!/usr/local/bin/perl -wC # $FreeBSD$ use strict; use File::Copy; use XML::Parser; use Tie::IxHash; use Data::Dumper; use Getopt::Long; use Digest::SHA qw(sha1_hex); require "charmaps.pm"; if ($#ARGV < 2) { print "Usage: $0 --cldr= --unidata= --etc= --type= [--lc=]\n"; exit(1); } my $DEFENCODING = "UTF-8"; my @filter = (); my $CLDRDIR = undef; my $UNIDATADIR = undef; my $ETCDIR = undef; my $TYPE = undef; my $doonly = undef; my $result = GetOptions ( "cldr=s" => \$CLDRDIR, "unidata=s" => \$UNIDATADIR, "etc=s" => \$ETCDIR, "type=s" => \$TYPE, "lc=s" => \$doonly ); my %convertors = (); my %ucd = (); my %values = (); my %hashtable = (); my %languages = (); my %translations = (); my %encodings = (); my %alternativemonths = (); get_languages(); my %utf8map = (); my %utf8aliases = (); get_unidata($UNIDATADIR); get_utf8map("$CLDRDIR/posix/$DEFENCODING.cm"); get_encodings("$ETCDIR/charmaps"); my %keys = (); tie(%keys, "Tie::IxHash"); tie(%hashtable, "Tie::IxHash"); my %FILESNAMES = ( "monetdef" => "LC_MONETARY", "timedef" => "LC_TIME", "msgdef" => "LC_MESSAGES", "numericdef" => "LC_NUMERIC", "colldef" => "LC_COLLATE", "ctypedef" => "LC_CTYPE" ); my %callback = ( mdorder => \&callback_mdorder, altmon => \&callback_altmon, cformat => \&callback_cformat, cbabmon => \&callback_abmon, data => undef, ); my %DESC = ( # numericdef "decimal_point" => "decimal_point", "thousands_sep" => "thousands_sep", "grouping" => "grouping", # monetdef "int_curr_symbol" => "int_curr_symbol (last character always " . "SPACE)", "currency_symbol" => "currency_symbol", "mon_decimal_point" => "mon_decimal_point", "mon_thousands_sep" => "mon_thousands_sep", "mon_grouping" => "mon_grouping", "positive_sign" => "positive_sign", "negative_sign" => "negative_sign", "int_frac_digits" => "int_frac_digits", "frac_digits" => "frac_digits", "p_cs_precedes" => "p_cs_precedes", "p_sep_by_space" => "p_sep_by_space", "n_cs_precedes" => "n_cs_precedes", "n_sep_by_space" => "n_sep_by_space", "p_sign_posn" => "p_sign_posn", "n_sign_posn" => "n_sign_posn", # msgdef "yesexpr" => "yesexpr", "noexpr" => "noexpr", "yesstr" => "yesstr", "nostr" => "nostr", # timedef "abmon" => "Short month names", "mon" => "Long month names (as in a date)", "abday" => "Short weekday names", "day" => "Long weekday names", "t_fmt" => "X_fmt", "d_fmt" => "x_fmt", "c_fmt" => "c_fmt", "am_pm" => "AM/PM", "d_t_fmt" => "date_fmt", "altmon" => "Long month names (without case ending)", "md_order" => "md_order", "t_fmt_ampm" => "ampm_fmt", ); if ($TYPE eq "colldef") { transform_collation(); make_makefile(); } if ($TYPE eq "ctypedef") { transform_ctypes(); make_makefile(); } if ($TYPE eq "numericdef") { %keys = ( "decimal_point" => "s", "thousands_sep" => "s", "grouping" => "ai", ); get_fields(); print_fields(); make_makefile(); } if ($TYPE eq "monetdef") { %keys = ( "int_curr_symbol" => "s", "currency_symbol" => "s", "mon_decimal_point" => "s", "mon_thousands_sep" => "s", "mon_grouping" => "ai", "positive_sign" => "s", "negative_sign" => "s", "int_frac_digits" => "i", "frac_digits" => "i", "p_cs_precedes" => "i", "p_sep_by_space" => "i", "n_cs_precedes" => "i", "n_sep_by_space" => "i", "p_sign_posn" => "i", "n_sign_posn" => "i" ); get_fields(); print_fields(); make_makefile(); } if ($TYPE eq "msgdef") { %keys = ( "yesexpr" => "s", "noexpr" => "s", "yesstr" => "s", "nostr" => "s" ); get_fields(); print_fields(); make_makefile(); } if ($TYPE eq "timedef") { %keys = ( "abmon" => " "as", "abday" => "as", "day" => "as", "t_fmt" => "s", "d_fmt" => "s", "c_fmt" => " "as", "d_fmt" => "s", "d_t_fmt" => "s", "altmon" => " " "s", ); get_fields(); print_fields(); make_makefile(); } sub callback_cformat { my $s = shift; $s =~ s/ %Z//; $s =~ s/ %z//; return $s; }; sub callback_mdorder { my $s = shift; return undef if (!defined $s); $s =~ s/[^dm]//g; return $s; }; sub callback_altmon { # if the language/country is known in %alternative months then # return that, otherwise repeat mon my $s = shift; if (defined $alternativemonths{$callback{data}{l}}{$callback{data}{c}}) { my @altnames = split(";",$alternativemonths{$callback{data}{l}}{$callback{data}{c}}); my @cleaned; foreach (@altnames) { $_ =~ s/^\s+//; $_ =~ s/\s+$//; push @cleaned, $_; } return join(";",@cleaned); } return $s; } sub callback_abmon { # for specified CJK locales, pad result with a space to enable # columns to line up (style established in FreeBSD in 2001) my $s = shift; my $nl = $callback{data}{l} . "_" . $callback{data}{c}; if ($nl eq 'ja_JP' || $nl eq 'ko_KR' || $nl eq 'zh_CN' || $nl eq 'zh_HK' || $nl eq 'zh_TW') { my @monthnames = split(";", $s); my @cleaned; foreach (@monthnames) { if ($_ =~ /^"<(two|three|four|five|six|seven|eight|nine)>/ || ($_ =~ /^"/ && $_ !~ /^"(||)/)) { $_ =~ s/^"/"/; } push @cleaned, $_; } return join(";",@cleaned); } return $s; } ############################ sub get_unidata { my $directory = shift; open(FIN, "$directory/UnicodeData.txt") or die("Cannot open $directory/UnicodeData.txt");; my @lines = ; chomp(@lines); close(FIN); foreach my $l (@lines) { my @a = split(/;/, $l); $ucd{code2name}{"$a[0]"} = $a[1]; # Unicode name $ucd{name2code}{"$a[1]"} = $a[0]; # Unicode code } } sub get_utf8map { my $file = shift; open(FIN, $file); my @lines = ; close(FIN); chomp(@lines); my $prev_k = undef; my $prev_v = ""; my $incharmap = 0; foreach my $l (@lines) { $l =~ s/\r//; next if ($l =~ /^\#/); next if ($l eq ""); if ($l eq "CHARMAP") { $incharmap = 1; next; } next if (!$incharmap); last if ($l eq "END CHARMAP"); $l =~ /^<([^\s]+)>\s+(.*)/; my $k = $1; my $v = $2; $k =~ s/_/ /g; # unicode char string $v =~ s/\\x//g; # UTF-8 char code $utf8map{$k} = $v; $utf8aliases{$k} = $prev_k if ($prev_v eq $v); $prev_v = $v; $prev_k = $k; } } sub get_encodings { my $dir = shift; foreach my $e (sort(keys(%encodings))) { if (!open(FIN, "$dir/$e.TXT")) { print "Cannot open charmap for $e\n"; next; } $encodings{$e} = 1; my @lines = ; close(FIN); chomp(@lines); foreach my $l (@lines) { $l =~ s/\r//; next if ($l =~ /^\#/); next if ($l eq ""); my @a = split(" ", $l); next if ($#a < 1); $a[0] =~ s/^0[xX]//; # local char code $a[1] =~ s/^0[xX]//; # unicode char code $convertors{$e}{uc($a[1])} = uc($a[0]); } } } sub get_languages { my %data = get_xmldata($ETCDIR); %languages = %{$data{L}}; %translations = %{$data{T}}; %alternativemonths = %{$data{AM}}; %encodings = %{$data{E}}; return if (!defined $doonly); my @a = split(/_/, $doonly); if ($#a == 1) { $filter[0] = $a[0]; $filter[1] = "x"; $filter[2] = $a[1]; } elsif ($#a == 2) { $filter[0] = $a[0]; $filter[1] = $a[1]; $filter[2] = $a[2]; } print Dumper(@filter); return; } sub transform_ctypes { foreach my $l (sort keys(%languages)) { foreach my $f (sort keys(%{$languages{$l}})) { foreach my $c (sort keys(%{$languages{$l}{$f}{data}})) { next if ($#filter == 2 && ($filter[0] ne $l || $filter[1] ne $f || $filter[2] ne $c)); next if (defined $languages{$l}{$f}{definitions} && $languages{$l}{$f}{definitions} !~ /$TYPE/); $languages{$l}{$f}{data}{$c}{$DEFENCODING} = 0; # unread my $file; $file = $l . "_"; $file .= $f . "_" if ($f ne "x"); $file .= $c; my $actfile = $file; my $filename = "$CLDRDIR/posix/xx_Comm_US.UTF-8.src"; if (! -f $filename) { print STDERR "Cannot open $filename\n"; next; } open(FIN, "$filename"); print "Reading from $filename for ${l}_${f}_${c}\n"; $languages{$l}{$f}{data}{$c}{$DEFENCODING} = 1; # read my @lines; my $shex; my $uhex; while () { push @lines, $_; } close(FIN); $shex = sha1_hex(join("\n", @lines)); $languages{$l}{$f}{data}{$c}{$DEFENCODING} = $shex; $hashtable{$shex}{"${l}_${f}_${c}.$DEFENCODING"} = 1; open(FOUT, ">$TYPE.draft/$actfile.$DEFENCODING.src"); print FOUT @lines; close(FOUT); foreach my $enc (sort keys(%{$languages{$l}{$f}{data}{$c}})) { next if ($enc eq $DEFENCODING); $filename = "$CLDRDIR/posix/$file.$DEFENCODING.src"; if (! -f $filename) { print STDERR "Cannot open $filename\n"; next; } @lines = (); open(FIN, "$filename"); while () { if ((/^comment_char\s/) || (/^escape_char\s/)){ push @lines, $_; } if (/^LC_CTYPE/../^END LC_CTYPE/) { push @lines, $_; } } close(FIN); $uhex = sha1_hex(join("\n", @lines) . $enc); $languages{$l}{$f}{data}{$c}{$enc} = $uhex; $hashtable{$uhex}{"${l}_${f}_${c}.$enc"} = 1; open(FOUT, ">$TYPE.draft/$actfile.$enc.src"); print FOUT <) { if ((/^comment_char\s/) || (/^escape_char\s/)){ push @lines, $_; } if (/^LC_COLLATE/../^END LC_COLLATE/) { $_ =~ s/[ ]+/ /g; push @lines, $_; } } close(FIN); $shex = sha1_hex(join("\n", @lines)); $languages{$l}{$f}{data}{$c}{$DEFENCODING} = $shex; $hashtable{$shex}{"${l}_${f}_${c}.$DEFENCODING"} = 1; open(FOUT, ">$TYPE.draft/$actfile.$DEFENCODING.src"); print FOUT <; chomp(@lines); close(FIN); my $continue = 0; foreach my $k (keys(%keys)) { foreach my $line (@lines) { $line =~ s/\r//; next if (!$continue && $line !~ /^$k\s/); if ($continue) { $line =~ s/^\s+//; } else { $line =~ s/^$k\s+//; } $values{$l}{$c}{$k} = "" if (!defined $values{$l}{$c}{$k}); $continue = ($line =~ /\/$/); $line =~ s/\/$// if ($continue); while ($line =~ /_/) { $line =~ s/\<([^>_]+)_([^>]+)\>/<$1 $2>/; } die "_ in data - $line" if ($line =~ /_/); $values{$l}{$c}{$k} .= $line; last if (!$continue); } } } } } } sub decodecldr { my $e = shift; my $s = shift; my $v = undef; if ($e eq "UTF-8") { # # Conversion to UTF-8 can be done from the Unicode name to # the UTF-8 character code. # $v = $utf8map{$s}; die "Cannot convert $s in $e (charmap)" if (!defined $v); } else { # # Conversion to these encodings can be done from the Unicode # name to Unicode code to the encodings code. # my $ucc = undef; $ucc = $ucd{name2code}{$s} if (defined $ucd{name2code}{$s}); $ucc = $ucd{name2code}{$utf8aliases{$s}} if (!defined $ucc && $utf8aliases{$s} && defined $ucd{name2code}{$utf8aliases{$s}}); if (!defined $ucc) { if (defined $translations{$e}{$s}{hex}) { $v = $translations{$e}{$s}{hex}; $ucc = 0; } elsif (defined $translations{$e}{$s}{ucc}) { $ucc = $translations{$e}{$s}{ucc}; } } die "Cannot convert $s in $e (ucd string)" if (!defined $ucc); $v = $convertors{$e}{$ucc} if (!defined $v); $v = $translations{$e}{$s}{hex} if (!defined $v && defined $translations{$e}{$s}{hex}); if (!defined $v && defined $translations{$e}{$s}{unicode}) { my $ucn = $translations{$e}{$s}{unicode}; $ucc = $ucd{name2code}{$ucn} if (defined $ucd{name2code}{$ucn}); $ucc = $ucd{name2code}{$utf8aliases{$ucn}} if (!defined $ucc && defined $ucd{name2code}{$utf8aliases{$ucn}}); $v = $convertors{$e}{$ucc}; } die "Cannot convert $s in $e (charmap)" if (!defined $v); } return pack("C", hex($v)) if (length($v) == 2); return pack("CC", hex(substr($v, 0, 2)), hex(substr($v, 2, 2))) if (length($v) == 4); return pack("CCC", hex(substr($v, 0, 2)), hex(substr($v, 2, 2)), hex(substr($v, 4, 2))) if (length($v) == 6); print STDERR "Cannot convert $e $s\n"; return "length = " . length($v); } sub translate { my $enc = shift; my $v = shift; return $translations{$enc}{$v} if (defined $translations{$enc}{$v}); return undef; } sub print_fields { foreach my $l (sort keys(%languages)) { foreach my $f (sort keys(%{$languages{$l}})) { foreach my $c (sort keys(%{$languages{$l}{$f}{data}})) { next if ($#filter == 2 && ($filter[0] ne $l || $filter[1] ne $f || $filter[2] ne $c)); next if (defined $languages{$l}{$f}{definitions} && $languages{$l}{$f}{definitions} !~ /$TYPE/); foreach my $enc (sort keys(%{$languages{$l}{$f}{data}{$c}})) { if ($languages{$l}{$f}{data}{$c}{$DEFENCODING} eq "0") { print "Skipping ${l}_" . ($f eq "x" ? "" : "${f}_") . "${c} - not read\n"; next; } my $file = $l; $file .= "_" . $f if ($f ne "x"); $file .= "_" . $c; print "Writing to $file in $enc\n"; if ($enc ne $DEFENCODING && !defined $convertors{$enc}) { print "Failed! Cannot convert to $enc.\n"; next; }; open(FOUT, ">$TYPE.draft/$file.$enc.new"); my $okay = 1; my $output = ""; print FOUT </) { $k = substr($f, 1); $f = $keys{$k}; } # Callback function if ($f =~ /^\(.*)/) { my $p1 = $1; $cm = $2; my $p3 = $3; my $rv = decodecldr($enc, $cm); # $rv = translate($enc, $cm) # if (!defined $rv); if (!defined $rv) { print STDERR "Could not convert $k ($cm) from $DEFENCODING to $enc\n"; $okay = 0; next; } $v = $p1 . $rv . $p3; } $output .= "$v\n"; next; } if ($f eq "as") { foreach my $v (split(/;/, $v)) { $v =~ s/^"//; $v =~ s/"$//; my $cm = ""; while ($v =~ /^(.*?)<(.*?)>(.*)/) { my $p1 = $1; $cm = $2; my $p3 = $3; my $rv = decodecldr($enc, $cm); # $rv = translate($enc, # $cm) # if (!defined $rv); if (!defined $rv) { print STDERR "Could not convert $k ($cm) from $DEFENCODING to $enc\n"; $okay = 0; next; } $v = $1 . $rv . $3; } $output .= "$v\n"; } next; } die("$k is '$f'"); } $languages{$l}{$f}{data}{$c}{$enc} = sha1_hex($output); $hashtable{sha1_hex($output)}{"${l}_${f}_${c}.$enc"} = 1; print FOUT "$output# EOF\n"; close(FOUT); if ($okay) { rename("$TYPE.draft/$file.$enc.new", "$TYPE.draft/$file.$enc.src"); } else { rename("$TYPE.draft/$file.$enc.new", "$TYPE.draft/$file.$enc.failed"); } } } } } } sub make_makefile { return if ($#filter > -1); print "Creating Makefile for $TYPE\n"; my $SRCOUT; my $SRCOUT2; - my $SRCOUT3; + my $SRCOUT3 = ""; my $MAPLOC; if ($TYPE eq "colldef") { $SRCOUT = "localedef -D -U -i \${.IMPSRC} \\\n" . "\t-f \${MAPLOC}/map.UTF-8 " . "\${.OBJDIR}/\${.IMPSRC:T:R}"; $MAPLOC = "MAPLOC=\t\t\${.CURDIR}/../../tools/tools/" . "locale/etc/final-maps\n"; $SRCOUT2 = "LC_COLLATE"; } elsif ($TYPE eq "ctypedef") { $SRCOUT = "localedef -D -U -c -w \${MAPLOC}/widths.txt \\\n" . - "\t-f \${MAPLOC}/map.\${.IMPSRC:T:R:C/^.*\\.//} " . + "\t-f \${MAPLOC}/map.\${.IMPSRC:T:R:E} " . "\\\n\t-i \${.IMPSRC} \${.OBJDIR}/\${.IMPSRC:T:R} " . " || true"; $SRCOUT2 = "LC_CTYPE"; $MAPLOC = "MAPLOC=\t\t\${.CURDIR}/../../tools/tools/" . "locale/etc/final-maps\n"; $SRCOUT3 = "## SYMPAIRS\n\n" . - ".for PAIR in \${SYMPAIRS}\n" . - "\${PAIR:C/^.*://:S/src\$/LC_CTYPE/}: " . - "\${PAIR:C/:.*//}\n" . + ".for s t in \${SYMPAIRS}\n" . + "\${t:S/src\$/LC_CTYPE/}: " . + "\$s\n" . "\tlocaledef -D -U -c -w \${MAPLOC}/widths.txt \\\n" . "\t-f \${MAPLOC}/map.\${.TARGET:T:R:C/^.*\\.//} " . "\\\n\t-i \${.ALLSRC} \${.OBJDIR}/\${.TARGET:T:R} " . " || true\n" . ".endfor\n\n"; } else { $SRCOUT = "grep -v -E '^(\#\$\$|\#[ ])' < \${.IMPSRC} > \${.TARGET}"; $SRCOUT2 = "out"; $MAPLOC = ""; } open(FOUT, ">$TYPE.draft/Makefile"); print FOUT < 0) { my $link = shift(@files); $link =~ s/_x_/_/; # strip family if none there foreach my $file (@files) { my @a = split(/_/, $file); my @b = split(/\./, $a[-1]); $file =~ s/_x_/_/; - print FOUT "SAME+=\t\t$link:$file\n"; + print FOUT "SAME+=\t\t$link $file\n"; undef($languages{$a[0]}{$a[1]}{data}{$b[0]}{$b[1]}); } } } foreach my $l (sort keys(%languages)) { foreach my $f (sort keys(%{$languages{$l}})) { foreach my $c (sort keys(%{$languages{$l}{$f}{data}})) { next if ($#filter == 2 && ($filter[0] ne $l || $filter[1] ne $f || $filter[2] ne $c)); next if (defined $languages{$l}{$f}{definitions} && $languages{$l}{$f}{definitions} !~ /$TYPE/); if (defined $languages{$l}{$f}{data}{$c}{$DEFENCODING} && $languages{$l}{$f}{data}{$c}{$DEFENCODING} eq "0") { print "Skipping ${l}_" . ($f eq "x" ? "" : "${f}_") . "${c} - not read\n"; next; } foreach my $e (sort keys(%{$languages{$l}{$f}{data}{$c}})) { my $file = $l . "_"; $file .= $f . "_" if ($f ne "x"); $file .= $c; next if (!defined $languages{$l}{$f}{data}{$c}{$e}); print FOUT "LOCALES+=\t$file.$e\n"; } if (defined $languages{$l}{$f}{nc_link}) { foreach my $e (sort keys(%{$languages{$l}{$f}{data}{$c}})) { my $file = $l . "_"; $file .= $f . "_" if ($f ne "x"); $file .= $c; - print FOUT "SAME+=\t\t$file.$e:$languages{$l}{$f}{nc_link}.$e\t# legacy (lang/country change)\n"; + print FOUT "SAME+=\t\t$file.$e $languages{$l}{$f}{nc_link}.$e\t# legacy (lang/country change)\n"; } } if (defined $languages{$l}{$f}{e_link}) { foreach my $el (split(" ", $languages{$l}{$f}{e_link})) { my @a = split(/:/, $el); my $file = $l . "_"; $file .= $f . "_" if ($f ne "x"); $file .= $c; - print FOUT "SAME+=\t\t$file.$a[0]:$file.$a[1]\t# legacy (same charset)\n"; + print FOUT "SAME+=\t\t$file.$a[0] $file.$a[1]\t# legacy (same charset)\n"; } } } } } print FOUT < EOF close(FOUT); } Index: user/alc/PQ_LAUNDRY/tools/tools/locale/tools/finalize =================================================================== --- user/alc/PQ_LAUNDRY/tools/tools/locale/tools/finalize (revision 292469) +++ user/alc/PQ_LAUNDRY/tools/tools/locale/tools/finalize (revision 292470) @@ -1,86 +1,88 @@ #!/bin/sh # +# $FreeBSD$ +# # This is a helper script for the Makefile in the parent directory. # When the localization definitions are generated in the draft area, # this script will copy base ones that others symlink to, and rearrange # the generate makefile to pull the LOCALES first. # usage () { - echo "finalize ' to package standard localization" - echo "type must be one of { monetdef, msgdef, numericdef, timedef, colldef, ctypedef }" - exit 1 + echo "finalize ' to package standard localization" + echo "type must be one of { monetdef, msgdef, numericdef, timedef, colldef, ctypedef }" + exit 1 } [ $# -ne 1 ] && usage [ $1 = "monetdef" -o $1 = "msgdef" -o $1 = "colldef" -o \ $1 = "numericdef" -o $1 = "timedef" -o $1 = "ctypedef" ] || usage self=$(realpath $0) base=$(dirname ${self}) old=${base}/../${1}.draft new=${base}/../${1} TEMP=/tmp/${1}.locales TEMP2=/tmp/${1}.hashes TEMP3=/tmp/${1}.symlinks FULLMAP=/tmp/utf8-map FULLEXTRACT=/tmp/extracted-names AWKCMD="/## PLACEHOLDER/ { \ while ( getline line < \"${TEMP}\" ) {print line} } \ /## SYMPAIRS/ { \ while ( getline line < \"${TEMP3}\" ) {print line} } \ !/## / { print \$0 }" grep '^LOCALES+' ${old}/Makefile > ${TEMP} if [ $1 = "ctypedef" ] then -keep=$(cat ${TEMP} | awk '{ print $2 ".src" }') -(cd ${old} && md5 -r ${keep} | sort) > ${TEMP2} -keep=$(awk '{ if ($1 != last1) print $2; last1 = $1; }' ${TEMP2}) -for original in ${keep} -do - cp ${old}/${original} ${new}/ -done -awk '{ if ($1 == last1) { print "SYMPAIRS+=\t" last2 ":" $2 } \ -else {last1 = $1; last2 = $2}}' ${TEMP2} > ${TEMP3} -rm -f ${TEMP2} + keep=$(cat ${TEMP} | awk '{ print $2 ".src" }') + (cd ${old} && md5 -r ${keep} | sort) > ${TEMP2} + keep=$(awk '{ if ($1 != last1) print $2; last1 = $1; }' ${TEMP2}) + for original in ${keep} + do + cp ${old}/${original} ${new}/ + done + awk '{ if ($1 == last1) { print "SYMPAIRS+=\t" last2 " " $2 } \ + else {last1 = $1; last2 = $2}}' ${TEMP2} > ${TEMP3} + rm -f ${TEMP2} /usr/bin/sed -E -e 's/[ ]+/ /g' \ ${CLDRDIR}/posix/UTF-8.cm \ > ${base}/../etc/final-maps/map.UTF-8 -CHARMAPS="ARMSCII-8 Big5 Big5HKSCS CP1131 CP1251 \ - CP866 GB2312 GBK ISCII-DEV ISO8859-1 \ - ISO8859-13 ISO8859-15 ISO8859-2 ISO8859-4 \ - ISO8859-5 ISO8859-7 ISO8859-9 KOI8-R KOI8-U \ - PT154 SJIS US-ASCII eucCN eucJP eucKR" + CHARMAPS="ARMSCII-8 Big5 Big5HKSCS CP1131 CP1251 \ + CP866 GB2312 GBK ISCII-DEV ISO8859-1 \ + ISO8859-13 ISO8859-15 ISO8859-2 ISO8859-4 \ + ISO8859-5 ISO8859-7 ISO8859-9 KOI8-R KOI8-U \ + PT154 SJIS US-ASCII eucCN eucJP eucKR" -# GB18030 blows up, use pre-generate Illumos version + # GB18030 blows up, use pre-generate Illumos version -for map in ${CHARMAPS} -do -encoding=${map} -if [ ${map} = "Big5HKSCS" ] -then -encoding="Big5" -fi -/usr/local/bin/perl ${base}/convert_map.pl \ - ${base}/../etc/charmaps/${map}.TXT ${encoding} \ - | /usr/bin/sed -E -e 's/ +/ /g' \ - > ${base}/../etc/final-maps/map.${map} - echo map ${map} converted. -done + for map in ${CHARMAPS} + do + encoding=${map} + if [ ${map} = "Big5HKSCS" ] + then + encoding="Big5" + fi + /usr/local/bin/perl ${base}/convert_map.pl \ + ${base}/../etc/charmaps/${map}.TXT ${encoding} \ + | /usr/bin/sed -E -e 's/ +/ /g' \ + > ${base}/../etc/final-maps/map.${map} + echo map ${map} converted. + done else # below is everything but ctypedef -keep=$(cat ${TEMP} | awk '{ print $2 }') -for original in ${keep} -do - cp ${old}/${original}.src ${new}/ -done + keep=$(cat ${TEMP} | awk '{ print $2 }') + for original in ${keep} + do + cp ${old}/${original}.src ${new}/ + done fi grep -v '^LOCALES+' ${old}/Makefile | awk "${AWKCMD}" > ${new}/Makefile rm -f ${TEMP} ${TEMP3} Property changes on: user/alc/PQ_LAUNDRY/tools/tools/locale/tools/finalize ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: user/alc/PQ_LAUNDRY/usr.sbin/ndp/ndp.c =================================================================== --- user/alc/PQ_LAUNDRY/usr.sbin/ndp/ndp.c (revision 292469) +++ user/alc/PQ_LAUNDRY/usr.sbin/ndp/ndp.c (revision 292470) @@ -1,1375 +1,1375 @@ /* $FreeBSD$ */ /* $KAME: ndp.c,v 1.104 2003/06/27 07:48:39 itojun Exp $ */ /* * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * Copyright (c) 1984, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Sun Microsystems, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * Based on: * "@(#) Copyright (c) 1984, 1993\n\ * The Regents of the University of California. All rights reserved.\n"; * * "@(#)arp.c 8.2 (Berkeley) 1/2/94"; */ /* * ndp - display, set, delete and flush neighbor cache */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "gmt2local.h" #define NEXTADDR(w, s) \ if (rtm->rtm_addrs & (w)) { \ bcopy((char *)&s, cp, sizeof(s)); cp += SA_SIZE(&s);} static pid_t pid; static int nflag; static int tflag; static int32_t thiszone; /* time difference with gmt */ static int s = -1; static int repeat = 0; static char host_buf[NI_MAXHOST]; /* getnameinfo() */ static char ifix_buf[IFNAMSIZ]; /* if_indextoname() */ static int file(char *); static void getsocket(void); static int set(int, char **); static void get(char *); static int delete(char *); static void dump(struct sockaddr_in6 *, int); static struct in6_nbrinfo *getnbrinfo(struct in6_addr *, int, int); static char *ether_str(struct sockaddr_dl *); static int ndp_ether_aton(char *, u_char *); static void usage(void); static int rtmsg(int); static void ifinfo(char *, int, char **); static void rtrlist(void); static void plist(void); static void pfx_flush(void); static void rtr_flush(void); static void harmonize_rtr(void); #ifdef SIOCSDEFIFACE_IN6 /* XXX: check SIOCGDEFIFACE_IN6 as well? */ static void getdefif(void); static void setdefif(char *); #endif static char *sec2str(time_t); static void ts_print(const struct timeval *); static char *rtpref_str[] = { "medium", /* 00 */ "high", /* 01 */ "rsv", /* 10 */ "low" /* 11 */ }; int main(int argc, char **argv) { int ch, mode = 0; char *arg = NULL; pid = getpid(); thiszone = gmt2local(0); while ((ch = getopt(argc, argv, "acd:f:Ii:nprstA:HPR")) != -1) switch (ch) { case 'a': case 'c': case 'p': case 'r': case 'H': case 'P': case 'R': case 's': case 'I': if (mode) { usage(); /*NOTREACHED*/ } mode = ch; arg = NULL; break; case 'f': exit(file(optarg) ? 1 : 0); case 'd': case 'i': if (mode) { usage(); /*NOTREACHED*/ } mode = ch; arg = optarg; break; case 'n': nflag = 1; break; case 't': tflag = 1; break; case 'A': if (mode) { usage(); /*NOTREACHED*/ } mode = 'a'; repeat = atoi(optarg); if (repeat < 0) { usage(); /*NOTREACHED*/ } break; default: usage(); } argc -= optind; argv += optind; switch (mode) { case 'a': case 'c': if (argc != 0) { usage(); /*NOTREACHED*/ } dump(0, mode == 'c'); break; case 'd': if (argc != 0) { usage(); /*NOTREACHED*/ } delete(arg); break; case 'I': #ifdef SIOCSDEFIFACE_IN6 /* XXX: check SIOCGDEFIFACE_IN6 as well? */ if (argc > 1) { usage(); /*NOTREACHED*/ } else if (argc == 1) { if (strcmp(*argv, "delete") == 0 || if_nametoindex(*argv)) setdefif(*argv); else errx(1, "invalid interface %s", *argv); } getdefif(); /* always call it to print the result */ break; #else errx(1, "not supported yet"); /*NOTREACHED*/ #endif case 'p': if (argc != 0) { usage(); /*NOTREACHED*/ } plist(); break; case 'i': ifinfo(arg, argc, argv); break; case 'r': if (argc != 0) { usage(); /*NOTREACHED*/ } rtrlist(); break; case 's': if (argc < 2 || argc > 4) usage(); exit(set(argc, argv) ? 1 : 0); case 'H': if (argc != 0) { usage(); /*NOTREACHED*/ } harmonize_rtr(); break; case 'P': if (argc != 0) { usage(); /*NOTREACHED*/ } pfx_flush(); break; case 'R': if (argc != 0) { usage(); /*NOTREACHED*/ } rtr_flush(); break; case 0: if (argc != 1) { usage(); /*NOTREACHED*/ } get(argv[0]); break; } exit(0); } /* * Process a file to set standard ndp entries */ static int file(char *name) { FILE *fp; int i, retval; char line[100], arg[5][50], *args[5], *p; if ((fp = fopen(name, "r")) == NULL) err(1, "cannot open %s", name); args[0] = &arg[0][0]; args[1] = &arg[1][0]; args[2] = &arg[2][0]; args[3] = &arg[3][0]; args[4] = &arg[4][0]; retval = 0; while (fgets(line, sizeof(line), fp) != NULL) { if ((p = strchr(line, '#')) != NULL) *p = '\0'; for (p = line; isblank(*p); p++); if (*p == '\n' || *p == '\0') continue; i = sscanf(line, "%49s %49s %49s %49s %49s", arg[0], arg[1], arg[2], arg[3], arg[4]); if (i < 2) { warnx("bad line: %s", line); retval = 1; continue; } if (set(i, args)) retval = 1; } fclose(fp); return (retval); } static void getsocket() { if (s < 0) { s = socket(PF_ROUTE, SOCK_RAW, 0); if (s < 0) { err(1, "socket"); /* NOTREACHED */ } } } static struct sockaddr_in6 so_mask = { .sin6_len = sizeof(so_mask), .sin6_family = AF_INET6 }; static struct sockaddr_in6 blank_sin = { .sin6_len = sizeof(blank_sin), .sin6_family = AF_INET6 }; static struct sockaddr_in6 sin_m; static struct sockaddr_dl blank_sdl = { .sdl_len = sizeof(blank_sdl), .sdl_family = AF_LINK }; static struct sockaddr_dl sdl_m; static time_t expire_time; static int flags, found_entry; static struct { struct rt_msghdr m_rtm; char m_space[512]; } m_rtmsg; /* * Set an individual neighbor cache entry */ static int set(int argc, char **argv) { register struct sockaddr_in6 *sin = &sin_m; register struct sockaddr_dl *sdl; register struct rt_msghdr *rtm = &(m_rtmsg.m_rtm); struct addrinfo hints, *res; int gai_error; u_char *ea; char *host = argv[0], *eaddr = argv[1]; getsocket(); argc -= 2; argv += 2; sdl_m = blank_sdl; sin_m = blank_sin; bzero(&hints, sizeof(hints)); hints.ai_family = AF_INET6; gai_error = getaddrinfo(host, NULL, &hints, &res); if (gai_error) { fprintf(stderr, "ndp: %s: %s\n", host, gai_strerror(gai_error)); return 1; } sin->sin6_addr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr; sin->sin6_scope_id = ((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id; ea = (u_char *)LLADDR(&sdl_m); if (ndp_ether_aton(eaddr, ea) == 0) sdl_m.sdl_alen = 6; flags = expire_time = 0; while (argc-- > 0) { if (strncmp(argv[0], "temp", 4) == 0) { struct timeval now; gettimeofday(&now, 0); expire_time = now.tv_sec + 20 * 60; } else if (strncmp(argv[0], "proxy", 5) == 0) flags |= RTF_ANNOUNCE; argv++; } if (rtmsg(RTM_GET) < 0) { errx(1, "RTM_GET(%s) failed", host); /* NOTREACHED */ } sin = (struct sockaddr_in6 *)(rtm + 1); sdl = (struct sockaddr_dl *)(ALIGN(sin->sin6_len) + (char *)sin); if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) { if (sdl->sdl_family == AF_LINK && !(rtm->rtm_flags & RTF_GATEWAY)) { switch (sdl->sdl_type) { case IFT_ETHER: case IFT_FDDI: case IFT_ISO88023: case IFT_ISO88024: case IFT_ISO88025: case IFT_L2VLAN: case IFT_BRIDGE: goto overwrite; } } fprintf(stderr, "set: cannot configure a new entry\n"); return 1; } overwrite: if (sdl->sdl_family != AF_LINK) { printf("cannot intuit interface index and type for %s\n", host); return (1); } sdl_m.sdl_type = sdl->sdl_type; sdl_m.sdl_index = sdl->sdl_index; return (rtmsg(RTM_ADD)); } /* * Display an individual neighbor cache entry */ static void get(char *host) { struct sockaddr_in6 *sin = &sin_m; struct addrinfo hints, *res; int gai_error; sin_m = blank_sin; bzero(&hints, sizeof(hints)); hints.ai_family = AF_INET6; gai_error = getaddrinfo(host, NULL, &hints, &res); if (gai_error) { fprintf(stderr, "ndp: %s: %s\n", host, gai_strerror(gai_error)); return; } sin->sin6_addr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr; sin->sin6_scope_id = ((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id; dump(sin, 0); if (found_entry == 0) { getnameinfo((struct sockaddr *)sin, sin->sin6_len, host_buf, sizeof(host_buf), NULL ,0, (nflag ? NI_NUMERICHOST : 0)); printf("%s (%s) -- no entry\n", host, host_buf); exit(1); } } /* * Delete a neighbor cache entry */ static int delete(char *host) { struct sockaddr_in6 *sin = &sin_m; register struct rt_msghdr *rtm = &m_rtmsg.m_rtm; register char *cp = m_rtmsg.m_space; struct sockaddr_dl *sdl; struct addrinfo hints, *res; int gai_error; getsocket(); sin_m = blank_sin; bzero(&hints, sizeof(hints)); hints.ai_family = AF_INET6; gai_error = getaddrinfo(host, NULL, &hints, &res); if (gai_error) { fprintf(stderr, "ndp: %s: %s\n", host, gai_strerror(gai_error)); return 1; } sin->sin6_addr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr; sin->sin6_scope_id = ((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id; if (rtmsg(RTM_GET) < 0) { errx(1, "RTM_GET(%s) failed", host); /* NOTREACHED */ } sin = (struct sockaddr_in6 *)(rtm + 1); sdl = (struct sockaddr_dl *)(ALIGN(sin->sin6_len) + (char *)sin); if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) { if (sdl->sdl_family == AF_LINK && !(rtm->rtm_flags & RTF_GATEWAY)) { goto delete; } fprintf(stderr, "delete: cannot delete non-NDP entry\n"); return 1; } delete: if (sdl->sdl_family != AF_LINK) { printf("cannot locate %s\n", host); return (1); } /* * need to reinit the field because it has rt_key * but we want the actual address */ NEXTADDR(RTA_DST, sin_m); rtm->rtm_flags |= RTF_LLDATA; if (rtmsg(RTM_DELETE) == 0) { getnameinfo((struct sockaddr *)sin, sin->sin6_len, host_buf, sizeof(host_buf), NULL, 0, (nflag ? NI_NUMERICHOST : 0)); printf("%s (%s) deleted\n", host, host_buf); } return 0; } #define W_ADDR 36 #define W_LL 17 #define W_IF 6 /* * Dump the entire neighbor cache */ static void dump(struct sockaddr_in6 *addr, int cflag) { int mib[6]; size_t needed; char *lim, *buf, *next; struct rt_msghdr *rtm; struct sockaddr_in6 *sin; struct sockaddr_dl *sdl; extern int h_errno; struct timeval now; u_long expire; int addrwidth; int llwidth; int ifwidth; char flgbuf[8]; char *ifname; /* Print header */ if (!tflag && !cflag) printf("%-*.*s %-*.*s %*.*s %-9.9s %1s %5s\n", W_ADDR, W_ADDR, "Neighbor", W_LL, W_LL, "Linklayer Address", W_IF, W_IF, "Netif", "Expire", "S", "Flags"); again:; mib[0] = CTL_NET; mib[1] = PF_ROUTE; mib[2] = 0; mib[3] = AF_INET6; mib[4] = NET_RT_FLAGS; #ifdef RTF_LLINFO mib[5] = RTF_LLINFO; #else mib[5] = 0; #endif if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) err(1, "sysctl(PF_ROUTE estimate)"); if (needed > 0) { if ((buf = malloc(needed)) == NULL) err(1, "malloc"); if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) err(1, "sysctl(PF_ROUTE, NET_RT_FLAGS)"); lim = buf + needed; } else buf = lim = NULL; for (next = buf; next && next < lim; next += rtm->rtm_msglen) { int isrouter = 0, prbs = 0; rtm = (struct rt_msghdr *)next; sin = (struct sockaddr_in6 *)(rtm + 1); sdl = (struct sockaddr_dl *)((char *)sin + ALIGN(sin->sin6_len)); /* * Some OSes can produce a route that has the LINK flag but * has a non-AF_LINK gateway (e.g. fe80::xx%lo0 on FreeBSD * and BSD/OS, where xx is not the interface identifier on * lo0). Such routes entry would annoy getnbrinfo() below, * so we skip them. * XXX: such routes should have the GATEWAY flag, not the * LINK flag. However, there is rotten routing software * that advertises all routes that have the GATEWAY flag. * Thus, KAME kernel intentionally does not set the LINK flag. * What is to be fixed is not ndp, but such routing software * (and the kernel workaround)... */ if (sdl->sdl_family != AF_LINK) continue; if (!(rtm->rtm_flags & RTF_HOST)) continue; if (addr) { if (IN6_ARE_ADDR_EQUAL(&addr->sin6_addr, &sin->sin6_addr) == 0 || addr->sin6_scope_id != sin->sin6_scope_id) continue; found_entry = 1; } else if (IN6_IS_ADDR_MULTICAST(&sin->sin6_addr)) continue; if (IN6_IS_ADDR_LINKLOCAL(&sin->sin6_addr) || IN6_IS_ADDR_MC_LINKLOCAL(&sin->sin6_addr)) { /* XXX: should scope id be filled in the kernel? */ if (sin->sin6_scope_id == 0) sin->sin6_scope_id = sdl->sdl_index; } getnameinfo((struct sockaddr *)sin, sin->sin6_len, host_buf, sizeof(host_buf), NULL, 0, (nflag ? NI_NUMERICHOST : 0)); if (cflag) { #ifdef RTF_WASCLONED if (rtm->rtm_flags & RTF_WASCLONED) delete(host_buf); #elif defined(RTF_CLONED) if (rtm->rtm_flags & RTF_CLONED) delete(host_buf); #else if (rtm->rtm_flags & RTF_PINNED) continue; delete(host_buf); #endif continue; } gettimeofday(&now, 0); if (tflag) ts_print(&now); addrwidth = strlen(host_buf); if (addrwidth < W_ADDR) addrwidth = W_ADDR; llwidth = strlen(ether_str(sdl)); if (W_ADDR + W_LL - addrwidth > llwidth) llwidth = W_ADDR + W_LL - addrwidth; ifname = if_indextoname(sdl->sdl_index, ifix_buf); if (!ifname) ifname = "?"; ifwidth = strlen(ifname); if (W_ADDR + W_LL + W_IF - addrwidth - llwidth > ifwidth) ifwidth = W_ADDR + W_LL + W_IF - addrwidth - llwidth; printf("%-*.*s %-*.*s %*.*s", addrwidth, addrwidth, host_buf, llwidth, llwidth, ether_str(sdl), ifwidth, ifwidth, ifname); /* Print neighbor discovery specific information */ expire = rtm->rtm_rmx.rmx_expire; if (expire > now.tv_sec) printf(" %-9.9s", sec2str(expire - now.tv_sec)); else if (expire == 0) printf(" %-9.9s", "permanent"); else printf(" %-9.9s", "expired"); switch (rtm->rtm_rmx.rmx_state) { case ND6_LLINFO_NOSTATE: - printf(" N"); - break; + printf(" N"); + break; #ifdef ND6_LLINFO_WAITDELETE case ND6_LLINFO_WAITDELETE: - printf(" W"); - break; + printf(" W"); + break; #endif case ND6_LLINFO_INCOMPLETE: - printf(" I"); - break; + printf(" I"); + break; case ND6_LLINFO_REACHABLE: - printf(" R"); - break; + printf(" R"); + break; case ND6_LLINFO_STALE: - printf(" S"); - break; + printf(" S"); + break; case ND6_LLINFO_DELAY: - printf(" D"); - break; + printf(" D"); + break; case ND6_LLINFO_PROBE: - printf(" P"); - break; + printf(" P"); + break; default: - printf(" ?"); - break; + printf(" ?"); + break; } isrouter = rtm->rtm_flags & RTF_GATEWAY; prbs = rtm->rtm_rmx.rmx_pksent; /* * other flags. R: router, P: proxy, W: ?? */ if ((rtm->rtm_addrs & RTA_NETMASK) == 0) { snprintf(flgbuf, sizeof(flgbuf), "%s%s", isrouter ? "R" : "", (rtm->rtm_flags & RTF_ANNOUNCE) ? "p" : ""); } else { #if 0 /* W and P are mystery even for us */ sin = (struct sockaddr_in6 *) (sdl->sdl_len + (char *)sdl); snprintf(flgbuf, sizeof(flgbuf), "%s%s%s%s", isrouter ? "R" : "", !IN6_IS_ADDR_UNSPECIFIED(&sin->sin6_addr) ? "P" : "", (sin->sin6_len != sizeof(struct sockaddr_in6)) ? "W" : "", (rtm->rtm_flags & RTF_ANNOUNCE) ? "p" : ""); #else snprintf(flgbuf, sizeof(flgbuf), "%s%s", isrouter ? "R" : "", (rtm->rtm_flags & RTF_ANNOUNCE) ? "p" : ""); #endif } printf(" %s", flgbuf); if (prbs) printf(" %d", prbs); printf("\n"); } if (buf != NULL) free(buf); if (repeat) { printf("\n"); fflush(stdout); sleep(repeat); goto again; } } static struct in6_nbrinfo * getnbrinfo(struct in6_addr *addr, int ifindex, int warning) { static struct in6_nbrinfo nbi; int s; if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) err(1, "socket"); bzero(&nbi, sizeof(nbi)); if_indextoname(ifindex, nbi.ifname); nbi.addr = *addr; if (ioctl(s, SIOCGNBRINFO_IN6, (caddr_t)&nbi) < 0) { if (warning) warn("ioctl(SIOCGNBRINFO_IN6)"); close(s); return(NULL); } close(s); return(&nbi); } static char * ether_str(struct sockaddr_dl *sdl) { static char hbuf[NI_MAXHOST]; if (sdl->sdl_alen == ETHER_ADDR_LEN) { strlcpy(hbuf, ether_ntoa((struct ether_addr *)LLADDR(sdl)), sizeof(hbuf)); } else if (sdl->sdl_alen) { int n = sdl->sdl_nlen > 0 ? sdl->sdl_nlen + 1 : 0; snprintf(hbuf, sizeof(hbuf), "%s", link_ntoa(sdl) + n); } else snprintf(hbuf, sizeof(hbuf), "(incomplete)"); return(hbuf); } static int ndp_ether_aton(char *a, u_char *n) { int i, o[6]; i = sscanf(a, "%x:%x:%x:%x:%x:%x", &o[0], &o[1], &o[2], &o[3], &o[4], &o[5]); if (i != 6) { fprintf(stderr, "ndp: invalid Ethernet address '%s'\n", a); return (1); } for (i = 0; i < 6; i++) n[i] = o[i]; return (0); } static void usage() { printf("usage: ndp [-nt] hostname\n"); printf(" ndp [-nt] -a | -c | -p | -r | -H | -P | -R\n"); printf(" ndp [-nt] -A wait\n"); printf(" ndp [-nt] -d hostname\n"); printf(" ndp [-nt] -f filename\n"); printf(" ndp [-nt] -i interface [flags...]\n"); #ifdef SIOCSDEFIFACE_IN6 printf(" ndp [-nt] -I [interface|delete]\n"); #endif printf(" ndp [-nt] -s nodename etheraddr [temp] [proxy]\n"); exit(1); } static int rtmsg(int cmd) { static int seq; int rlen; register struct rt_msghdr *rtm = &m_rtmsg.m_rtm; register char *cp = m_rtmsg.m_space; register int l; errno = 0; if (cmd == RTM_DELETE) goto doit; bzero((char *)&m_rtmsg, sizeof(m_rtmsg)); rtm->rtm_flags = flags; rtm->rtm_version = RTM_VERSION; switch (cmd) { default: fprintf(stderr, "ndp: internal wrong cmd\n"); exit(1); case RTM_ADD: rtm->rtm_addrs |= RTA_GATEWAY; if (expire_time) { rtm->rtm_rmx.rmx_expire = expire_time; rtm->rtm_inits = RTV_EXPIRE; } rtm->rtm_flags |= (RTF_HOST | RTF_STATIC | RTF_LLDATA); #if 0 /* we don't support ipv6addr/128 type proxying */ if (rtm->rtm_flags & RTF_ANNOUNCE) { rtm->rtm_flags &= ~RTF_HOST; rtm->rtm_addrs |= RTA_NETMASK; } #endif /* FALLTHROUGH */ case RTM_GET: rtm->rtm_addrs |= RTA_DST; } NEXTADDR(RTA_DST, sin_m); NEXTADDR(RTA_GATEWAY, sdl_m); #if 0 /* we don't support ipv6addr/128 type proxying */ memset(&so_mask.sin6_addr, 0xff, sizeof(so_mask.sin6_addr)); NEXTADDR(RTA_NETMASK, so_mask); #endif rtm->rtm_msglen = cp - (char *)&m_rtmsg; doit: l = rtm->rtm_msglen; rtm->rtm_seq = ++seq; rtm->rtm_type = cmd; if ((rlen = write(s, (char *)&m_rtmsg, l)) < 0) { if (errno != ESRCH || cmd != RTM_DELETE) { err(1, "writing to routing socket"); /* NOTREACHED */ } } do { l = read(s, (char *)&m_rtmsg, sizeof(m_rtmsg)); } while (l > 0 && (rtm->rtm_seq != seq || rtm->rtm_pid != pid)); if (l < 0) (void) fprintf(stderr, "ndp: read from routing socket: %s\n", strerror(errno)); return (0); } static void ifinfo(char *ifname, int argc, char **argv) { struct in6_ndireq nd; int i, s; u_int32_t newflags; #ifdef IPV6CTL_USETEMPADDR u_int8_t nullbuf[8]; #endif if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { err(1, "socket"); /* NOTREACHED */ } bzero(&nd, sizeof(nd)); strlcpy(nd.ifname, ifname, sizeof(nd.ifname)); if (ioctl(s, SIOCGIFINFO_IN6, (caddr_t)&nd) < 0) { err(1, "ioctl(SIOCGIFINFO_IN6)"); /* NOTREACHED */ } #define ND nd.ndi newflags = ND.flags; for (i = 0; i < argc; i++) { int clear = 0; char *cp = argv[i]; if (*cp == '-') { clear = 1; cp++; } #define SETFLAG(s, f) \ do {\ if (strcmp(cp, (s)) == 0) {\ if (clear)\ newflags &= ~(f);\ else\ newflags |= (f);\ }\ } while (0) /* * XXX: this macro is not 100% correct, in that it matches "nud" against * "nudbogus". But we just let it go since this is minor. */ #define SETVALUE(f, v) \ do { \ char *valptr; \ unsigned long newval; \ v = 0; /* unspecified */ \ if (strncmp(cp, f, strlen(f)) == 0) { \ valptr = strchr(cp, '='); \ if (valptr == NULL) \ err(1, "syntax error in %s field", (f)); \ errno = 0; \ newval = strtoul(++valptr, NULL, 0); \ if (errno) \ err(1, "syntax error in %s's value", (f)); \ v = newval; \ } \ } while (0) SETFLAG("disabled", ND6_IFF_IFDISABLED); SETFLAG("nud", ND6_IFF_PERFORMNUD); #ifdef ND6_IFF_ACCEPT_RTADV SETFLAG("accept_rtadv", ND6_IFF_ACCEPT_RTADV); #endif #ifdef ND6_IFF_AUTO_LINKLOCAL SETFLAG("auto_linklocal", ND6_IFF_AUTO_LINKLOCAL); #endif #ifdef ND6_IFF_NO_PREFER_IFACE SETFLAG("no_prefer_iface", ND6_IFF_NO_PREFER_IFACE); #endif SETVALUE("basereachable", ND.basereachable); SETVALUE("retrans", ND.retrans); SETVALUE("curhlim", ND.chlim); ND.flags = newflags; if (ioctl(s, SIOCSIFINFO_IN6, (caddr_t)&nd) < 0) { err(1, "ioctl(SIOCSIFINFO_IN6)"); /* NOTREACHED */ } #undef SETFLAG #undef SETVALUE } if (!ND.initialized) { errx(1, "%s: not initialized yet", ifname); /* NOTREACHED */ } if (ioctl(s, SIOCGIFINFO_IN6, (caddr_t)&nd) < 0) { err(1, "ioctl(SIOCGIFINFO_IN6)"); /* NOTREACHED */ } printf("linkmtu=%d", ND.linkmtu); printf(", maxmtu=%d", ND.maxmtu); printf(", curhlim=%d", ND.chlim); printf(", basereachable=%ds%dms", ND.basereachable / 1000, ND.basereachable % 1000); printf(", reachable=%ds", ND.reachable); printf(", retrans=%ds%dms", ND.retrans / 1000, ND.retrans % 1000); #ifdef IPV6CTL_USETEMPADDR memset(nullbuf, 0, sizeof(nullbuf)); if (memcmp(nullbuf, ND.randomid, sizeof(nullbuf)) != 0) { int j; u_int8_t *rbuf; for (i = 0; i < 3; i++) { switch (i) { case 0: printf("\nRandom seed(0): "); rbuf = ND.randomseed0; break; case 1: printf("\nRandom seed(1): "); rbuf = ND.randomseed1; break; case 2: printf("\nRandom ID: "); rbuf = ND.randomid; break; default: errx(1, "impossible case for tempaddr display"); } for (j = 0; j < 8; j++) printf("%02x", rbuf[j]); } } #endif if (ND.flags) { printf("\nFlags: "); #ifdef ND6_IFF_IFDISABLED if ((ND.flags & ND6_IFF_IFDISABLED)) printf("disabled "); #endif if ((ND.flags & ND6_IFF_PERFORMNUD)) printf("nud "); #ifdef ND6_IFF_ACCEPT_RTADV if ((ND.flags & ND6_IFF_ACCEPT_RTADV)) printf("accept_rtadv "); #endif #ifdef ND6_IFF_AUTO_LINKLOCAL if ((ND.flags & ND6_IFF_AUTO_LINKLOCAL)) printf("auto_linklocal "); #endif #ifdef ND6_IFF_NO_PREFER_IFACE if ((ND.flags & ND6_IFF_NO_PREFER_IFACE)) printf("no_prefer_iface "); #endif } putc('\n', stdout); #undef ND close(s); } #ifndef ND_RA_FLAG_RTPREF_MASK /* XXX: just for compilation on *BSD release */ #define ND_RA_FLAG_RTPREF_MASK 0x18 /* 00011000 */ #endif static void rtrlist() { int mib[] = { CTL_NET, PF_INET6, IPPROTO_ICMPV6, ICMPV6CTL_ND6_DRLIST }; char *buf; struct in6_defrouter *p, *ep; size_t l; struct timeval now; if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), NULL, &l, NULL, 0) < 0) { err(1, "sysctl(ICMPV6CTL_ND6_DRLIST)"); /*NOTREACHED*/ } if (l == 0) return; buf = malloc(l); if (!buf) { err(1, "malloc"); /*NOTREACHED*/ } if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), buf, &l, NULL, 0) < 0) { err(1, "sysctl(ICMPV6CTL_ND6_DRLIST)"); /*NOTREACHED*/ } ep = (struct in6_defrouter *)(buf + l); for (p = (struct in6_defrouter *)buf; p < ep; p++) { int rtpref; if (getnameinfo((struct sockaddr *)&p->rtaddr, p->rtaddr.sin6_len, host_buf, sizeof(host_buf), NULL, 0, (nflag ? NI_NUMERICHOST : 0)) != 0) strlcpy(host_buf, "?", sizeof(host_buf)); printf("%s if=%s", host_buf, if_indextoname(p->if_index, ifix_buf)); printf(", flags=%s%s", p->flags & ND_RA_FLAG_MANAGED ? "M" : "", p->flags & ND_RA_FLAG_OTHER ? "O" : ""); rtpref = ((p->flags & ND_RA_FLAG_RTPREF_MASK) >> 3) & 0xff; printf(", pref=%s", rtpref_str[rtpref]); gettimeofday(&now, 0); if (p->expire == 0) printf(", expire=Never\n"); else printf(", expire=%s\n", sec2str(p->expire - now.tv_sec)); } free(buf); } static void plist() { int mib[] = { CTL_NET, PF_INET6, IPPROTO_ICMPV6, ICMPV6CTL_ND6_PRLIST }; char *buf; struct in6_prefix *p, *ep, *n; struct sockaddr_in6 *advrtr; size_t l; struct timeval now; const int niflags = NI_NUMERICHOST; int ninflags = nflag ? NI_NUMERICHOST : 0; char namebuf[NI_MAXHOST]; if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), NULL, &l, NULL, 0) < 0) { err(1, "sysctl(ICMPV6CTL_ND6_PRLIST)"); /*NOTREACHED*/ } buf = malloc(l); if (!buf) { err(1, "malloc"); /*NOTREACHED*/ } if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), buf, &l, NULL, 0) < 0) { err(1, "sysctl(ICMPV6CTL_ND6_PRLIST)"); /*NOTREACHED*/ } ep = (struct in6_prefix *)(buf + l); for (p = (struct in6_prefix *)buf; p < ep; p = n) { advrtr = (struct sockaddr_in6 *)(p + 1); n = (struct in6_prefix *)&advrtr[p->advrtrs]; if (getnameinfo((struct sockaddr *)&p->prefix, p->prefix.sin6_len, namebuf, sizeof(namebuf), NULL, 0, niflags) != 0) strlcpy(namebuf, "?", sizeof(namebuf)); printf("%s/%d if=%s\n", namebuf, p->prefixlen, if_indextoname(p->if_index, ifix_buf)); gettimeofday(&now, 0); /* * meaning of fields, especially flags, is very different * by origin. notify the difference to the users. */ printf("flags=%s%s%s%s%s", p->raflags.onlink ? "L" : "", p->raflags.autonomous ? "A" : "", (p->flags & NDPRF_ONLINK) != 0 ? "O" : "", (p->flags & NDPRF_DETACHED) != 0 ? "D" : "", #ifdef NDPRF_HOME (p->flags & NDPRF_HOME) != 0 ? "H" : "" #else "" #endif ); if (p->vltime == ND6_INFINITE_LIFETIME) printf(" vltime=infinity"); else printf(" vltime=%lu", (unsigned long)p->vltime); if (p->pltime == ND6_INFINITE_LIFETIME) printf(", pltime=infinity"); else printf(", pltime=%lu", (unsigned long)p->pltime); if (p->expire == 0) printf(", expire=Never"); else if (p->expire >= now.tv_sec) printf(", expire=%s", sec2str(p->expire - now.tv_sec)); else printf(", expired"); printf(", ref=%d", p->refcnt); printf("\n"); /* * "advertising router" list is meaningful only if the prefix * information is from RA. */ if (p->advrtrs) { int j; struct sockaddr_in6 *sin6; sin6 = advrtr; printf(" advertised by\n"); for (j = 0; j < p->advrtrs; j++) { struct in6_nbrinfo *nbi; if (getnameinfo((struct sockaddr *)sin6, sin6->sin6_len, namebuf, sizeof(namebuf), NULL, 0, ninflags) != 0) strlcpy(namebuf, "?", sizeof(namebuf)); printf(" %s", namebuf); nbi = getnbrinfo(&sin6->sin6_addr, p->if_index, 0); if (nbi) { switch (nbi->state) { case ND6_LLINFO_REACHABLE: case ND6_LLINFO_STALE: case ND6_LLINFO_DELAY: case ND6_LLINFO_PROBE: printf(" (reachable)\n"); break; default: printf(" (unreachable)\n"); } } else printf(" (no neighbor state)\n"); sin6++; } } else printf(" No advertising router\n"); } free(buf); } static void pfx_flush() { char dummyif[IFNAMSIZ+8]; int s; if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) err(1, "socket"); strlcpy(dummyif, "lo0", sizeof(dummyif)); /* dummy */ if (ioctl(s, SIOCSPFXFLUSH_IN6, (caddr_t)&dummyif) < 0) err(1, "ioctl(SIOCSPFXFLUSH_IN6)"); } static void rtr_flush() { char dummyif[IFNAMSIZ+8]; int s; if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) err(1, "socket"); strlcpy(dummyif, "lo0", sizeof(dummyif)); /* dummy */ if (ioctl(s, SIOCSRTRFLUSH_IN6, (caddr_t)&dummyif) < 0) err(1, "ioctl(SIOCSRTRFLUSH_IN6)"); close(s); } static void harmonize_rtr() { char dummyif[IFNAMSIZ+8]; int s; if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) err(1, "socket"); strlcpy(dummyif, "lo0", sizeof(dummyif)); /* dummy */ if (ioctl(s, SIOCSNDFLUSH_IN6, (caddr_t)&dummyif) < 0) err(1, "ioctl(SIOCSNDFLUSH_IN6)"); close(s); } #ifdef SIOCSDEFIFACE_IN6 /* XXX: check SIOCGDEFIFACE_IN6 as well? */ static void setdefif(char *ifname) { struct in6_ndifreq ndifreq; unsigned int ifindex; if (strcasecmp(ifname, "delete") == 0) ifindex = 0; else { if ((ifindex = if_nametoindex(ifname)) == 0) err(1, "failed to resolve i/f index for %s", ifname); } if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) err(1, "socket"); strlcpy(ndifreq.ifname, "lo0", sizeof(ndifreq.ifname)); /* dummy */ ndifreq.ifindex = ifindex; if (ioctl(s, SIOCSDEFIFACE_IN6, (caddr_t)&ndifreq) < 0) err(1, "ioctl(SIOCSDEFIFACE_IN6)"); close(s); } static void getdefif() { struct in6_ndifreq ndifreq; char ifname[IFNAMSIZ+8]; if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) err(1, "socket"); memset(&ndifreq, 0, sizeof(ndifreq)); strlcpy(ndifreq.ifname, "lo0", sizeof(ndifreq.ifname)); /* dummy */ if (ioctl(s, SIOCGDEFIFACE_IN6, (caddr_t)&ndifreq) < 0) err(1, "ioctl(SIOCGDEFIFACE_IN6)"); if (ndifreq.ifindex == 0) printf("No default interface.\n"); else { if ((if_indextoname(ndifreq.ifindex, ifname)) == NULL) err(1, "failed to resolve ifname for index %lu", ndifreq.ifindex); printf("ND default interface = %s\n", ifname); } close(s); } #endif static char * sec2str(time_t total) { static char result[256]; int days, hours, mins, secs; int first = 1; char *p = result; char *ep = &result[sizeof(result)]; int n; days = total / 3600 / 24; hours = (total / 3600) % 24; mins = (total / 60) % 60; secs = total % 60; if (days) { first = 0; n = snprintf(p, ep - p, "%dd", days); if (n < 0 || n >= ep - p) return "?"; p += n; } if (!first || hours) { first = 0; n = snprintf(p, ep - p, "%dh", hours); if (n < 0 || n >= ep - p) return "?"; p += n; } if (!first || mins) { first = 0; n = snprintf(p, ep - p, "%dm", mins); if (n < 0 || n >= ep - p) return "?"; p += n; } snprintf(p, ep - p, "%ds", secs); return(result); } /* * Print the timestamp * from tcpdump/util.c */ static void ts_print(const struct timeval *tvp) { int s; /* Default */ s = (tvp->tv_sec + thiszone) % 86400; (void)printf("%02d:%02d:%02d.%06u ", s / 3600, (s % 3600) / 60, s % 60, (u_int32_t)tvp->tv_usec); } #undef NEXTADDR Index: user/alc/PQ_LAUNDRY =================================================================== --- user/alc/PQ_LAUNDRY (revision 292469) +++ user/alc/PQ_LAUNDRY (revision 292470) Property changes on: user/alc/PQ_LAUNDRY ___________________________________________________________________ Modified: svn:mergeinfo ## -0,0 +0,1 ## Merged /head:r292449-292469