diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-10-27 23:37:52 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-10-27 23:37:52 +0000 |
commit | 9f6c1fc4947e0b6d007cff159166bc0373386c61 (patch) | |
tree | acf2ed53901c12bf2fa3137cbd4515c4da9d3932 /stdlib | |
parent | 6d5503b16a70cdddc904b7614b9927ee55720a27 (diff) | |
download | glibc-9f6c1fc4947e0b6d007cff159166bc0373386c61.zip glibc-9f6c1fc4947e0b6d007cff159166bc0373386c61.tar.gz glibc-9f6c1fc4947e0b6d007cff159166bc0373386c61.tar.bz2 |
Update.
* stdlib/fmtmsg.c (fmtmsg): Change output format slightly to make
it look better and bring it closer to SysV behavior.
* stdlib/Makefile (distribute): Add tst-fmtmsg.sh.
(test-srcs): Add tst-fmtmsg.
(tests): Add $(objpfx)tst-fmtmsg.out. Add rule to generate it.
* stdlib/tst-fmtmsg.sh: New file.
* stdlib/tst-fmtmsg.c: New file.
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/Makefile | 8 | ||||
-rw-r--r-- | stdlib/fmtmsg.c | 22 | ||||
-rw-r--r-- | stdlib/tst-fmtmsg.c | 52 | ||||
-rwxr-xr-x | stdlib/tst-fmtmsg.sh | 336 |
4 files changed, 405 insertions, 13 deletions
diff --git a/stdlib/Makefile b/stdlib/Makefile index 19e88f3..e9cef42 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -49,7 +49,8 @@ routines := \ strtoimax strtoumax wcstoimax wcstoumax \ getcontext setcontext makecontext swapcontext -distribute := exit.h grouping.h abort-instr.h isomac.c +distribute := exit.h grouping.h abort-instr.h isomac.c tst-fmtmsg.sh +test-srcs := tst-fmtmsg tests := tst-strtol tst-strtod testmb testrand testsort testdiv \ test-canon test-canon2 tst-strtoll tst-environ \ tst-xpg-basename tst-random tst-bsearch tst-limits @@ -130,10 +131,13 @@ endif test-canon-ARGS = --test-dir=${common-objpfx}stdlib # Run a test on the header files we use. -tests: $(objpfx)isomac.out +tests: $(objpfx)isomac.out $(objpfx)tst-fmtmsg.out $(objpfx)isomac.out: $(objpfx)isomac $(dir $<)$(notdir $<) '$(CC)' '-I../include -I.. $(+sysdep-includes)' > $<.out $(objpfx)isomac: isomac.c $(native-compile) + +$(objpfx)tst-fmtmsg.out: tst-fmtmsg.sh $(objpfx)tst-fmtmsg + $(SHELL) -e $< $(common-objpfx) $(common-objpfx)stdlib/ diff --git a/stdlib/fmtmsg.c b/stdlib/fmtmsg.c index 126132d..1c9e429 100644 --- a/stdlib/fmtmsg.c +++ b/stdlib/fmtmsg.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -145,15 +145,15 @@ fmtmsg (long int classification, const char *label, int severity, if (fprintf (stderr, "%s%s%s%s%s%s%s%s%s%s\n", do_label ? label : "", - do_label && (do_severity | do_text) ? ": " : "", + do_label && (do_severity | do_text | do_action | do_tag) + ? ": " : "", do_severity ? severity_rec->string : "", - do_severity && do_text ? ": " : "", + do_severity && (do_text | do_action | do_tag) ? ": " : "", do_text ? text : "", - (do_label | do_severity | do_text) && (do_action | do_tag) - ? "\n" : "", + do_text && (do_action | do_tag) ? "\n" : "", do_action ? "TO FIX: " : "", do_action ? action : "", - do_action && do_tag ? " " : "", + do_action && do_tag ? " " : "", do_tag ? tag : "") == EOF) /* Oh, oh. An error occurred during the output. */ result = MM_NOMSG; @@ -169,15 +169,15 @@ fmtmsg (long int classification, const char *label, int severity, syslog (LOG_ERR, "%s%s%s%s%s%s%s%s%s%s\n", do_label ? label : "", - do_label && (do_severity | do_text) ? ": " : "", + do_label && (do_severity | do_text | do_action | do_tag) + ? ": " : "", do_severity ? severity_rec->string : "", - do_severity && do_text ? ": " : "", + do_severity && (do_text | do_action | do_tag) ? ": " : "", do_text ? text : "", - (do_label | do_severity | do_text) && (do_action | do_tag) - ? "\n" : "", + do_text && (do_action | do_tag) ? "\n" : "", do_action ? "TO FIX: " : "", do_action ? action : "", - do_action && do_tag ? " " : "", + do_action && do_tag ? " " : "", do_tag ? tag : ""); } diff --git a/stdlib/tst-fmtmsg.c b/stdlib/tst-fmtmsg.c new file mode 100644 index 0000000..d5369bd --- /dev/null +++ b/stdlib/tst-fmtmsg.c @@ -0,0 +1,52 @@ +#include <fmtmsg.h> +#include <mcheck.h> +#include <stdio.h> + + +#define MM_TEST 10 + +int +main (void) +{ + int result = 0; + + mtrace (); + + if (addseverity (MM_TEST, "TEST") != MM_OK) + { + puts ("addseverity failed"); + result = 1; + } + + if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_HALT, "halt", + "should print message for MM_HALT", "GLIBC:tst-fmtmsg:1") + != MM_OK) + result = 1; + + if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_ERROR, "halt", + "should print message for MM_ERROR", "GLIBC:tst-fmtmsg:2") + != MM_OK) + result = 1; + + if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_WARNING, "halt", + "should print message for MM_WARNING", "GLIBC:tst-fmtmsg:3") + != MM_OK) + result = 1; + + if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_INFO, "halt", + "should print message for MM_INFO", "GLIBC:tst-fmtmsg:4") + != MM_OK) + result = 1; + + if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_NOSEV, "halt", + "should print message for MM_NOSEV", "GLIBC:tst-fmtmsg:5") + != MM_OK) + result = 1; + + if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_TEST, "halt", + "should print message for MM_TEST", "GLIBC:tst-fmtmsg:6") + != MM_OK) + result = 1; + + return result; +} diff --git a/stdlib/tst-fmtmsg.sh b/stdlib/tst-fmtmsg.sh new file mode 100755 index 0000000..6f083ca --- /dev/null +++ b/stdlib/tst-fmtmsg.sh @@ -0,0 +1,336 @@ +#! /bin/sh +# Test of fmtmsg function family. +# Copyright (C) 2000 Free Software Foundation, Inc. +# This file is part of the GNU C Library. +# +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with the GNU C Library; see the file COPYING.LIB. If +# not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +common_objpfx=$1 +objpfx=$2 + +test="${common_objpfx}elf/ld.so --library-path $common_objpfx \ +${objpfx}tst-fmtmsg" +out=${objpfx}tst-fmtmsg.out + +LC_ALL=C +export LC_ALL + +(MSGVERB= $test || exit 1; + MSGVERB=label $test || exit 1; + MSGVERB=severity $test || exit 1; + MSGVERB=severity:label $test || exit 1; + MSGVERB=text $test || exit 1; + MSGVERB=text:label $test || exit 1; + MSGVERB=text:severity $test || exit 1; + MSGVERB=text:severity:label $test || exit 1; + MSGVERB=action $test || exit 1; + MSGVERB=action:label $test || exit 1; + MSGVERB=action:severity $test || exit 1; + MSGVERB=action:severity:label $test || exit 1; + MSGVERB=action:text $test || exit 1; + MSGVERB=action:text:label $test || exit 1; + MSGVERB=action:text:severity $test || exit 1; + MSGVERB=action:text:severity:label $test || exit 1; + MSGVERB=tag $test || exit 1; + MSGVERB=tag:label $test || exit 1; + MSGVERB=tag:severity $test || exit 1; + MSGVERB=tag:severity:label $test || exit 1; + MSGVERB=tag:text $test || exit 1; + MSGVERB=tag:text:label $test || exit 1; + MSGVERB=tag:text:severity $test || exit 1; + MSGVERB=tag:text:severity:label $test || exit 1; + MSGVERB=tag:action $test || exit 1; + MSGVERB=tag:action:label $test || exit 1; + MSGVERB=tag:action:severity $test || exit 1; + MSGVERB=tag:action:severity:label $test || exit 1; + MSGVERB=tag:action:text $test || exit 1; + MSGVERB=tag:action:text:label $test || exit 1; + MSGVERB=tag:action:text:severity $test || exit 1; + MSGVERB=tag:action:text:severity:label $test || exit 1;) 2> $out + +cmp $out <<EOF +GLIBC:tst-fmtmsg: HALT: halt +TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1 +GLIBC:tst-fmtmsg: ERROR: halt +TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2 +GLIBC:tst-fmtmsg: WARNING: halt +TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3 +GLIBC:tst-fmtmsg: INFO: halt +TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5 +GLIBC:tst-fmtmsg: TEST: halt +TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6 +GLIBC:tst-fmtmsg +GLIBC:tst-fmtmsg +GLIBC:tst-fmtmsg +GLIBC:tst-fmtmsg +GLIBC:tst-fmtmsg +GLIBC:tst-fmtmsg +HALT +ERROR +WARNING +INFO + +TEST +GLIBC:tst-fmtmsg: HALT +GLIBC:tst-fmtmsg: ERROR +GLIBC:tst-fmtmsg: WARNING +GLIBC:tst-fmtmsg: INFO +GLIBC:tst-fmtmsg +GLIBC:tst-fmtmsg: TEST +halt +halt +halt +halt +halt +halt +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg: halt +HALT: halt +ERROR: halt +WARNING: halt +INFO: halt +halt +TEST: halt +GLIBC:tst-fmtmsg: HALT: halt +GLIBC:tst-fmtmsg: ERROR: halt +GLIBC:tst-fmtmsg: WARNING: halt +GLIBC:tst-fmtmsg: INFO: halt +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg: TEST: halt +TO FIX: should print message for MM_HALT +TO FIX: should print message for MM_ERROR +TO FIX: should print message for MM_WARNING +TO FIX: should print message for MM_INFO +TO FIX: should print message for MM_NOSEV +TO FIX: should print message for MM_TEST +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_HALT +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_ERROR +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_WARNING +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_INFO +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_TEST +HALT: TO FIX: should print message for MM_HALT +ERROR: TO FIX: should print message for MM_ERROR +WARNING: TO FIX: should print message for MM_WARNING +INFO: TO FIX: should print message for MM_INFO +TO FIX: should print message for MM_NOSEV +TEST: TO FIX: should print message for MM_TEST +GLIBC:tst-fmtmsg: HALT: TO FIX: should print message for MM_HALT +GLIBC:tst-fmtmsg: ERROR: TO FIX: should print message for MM_ERROR +GLIBC:tst-fmtmsg: WARNING: TO FIX: should print message for MM_WARNING +GLIBC:tst-fmtmsg: INFO: TO FIX: should print message for MM_INFO +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV +GLIBC:tst-fmtmsg: TEST: TO FIX: should print message for MM_TEST +halt +TO FIX: should print message for MM_HALT +halt +TO FIX: should print message for MM_ERROR +halt +TO FIX: should print message for MM_WARNING +halt +TO FIX: should print message for MM_INFO +halt +TO FIX: should print message for MM_NOSEV +halt +TO FIX: should print message for MM_TEST +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_HALT +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_ERROR +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_WARNING +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_INFO +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_NOSEV +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_TEST +HALT: halt +TO FIX: should print message for MM_HALT +ERROR: halt +TO FIX: should print message for MM_ERROR +WARNING: halt +TO FIX: should print message for MM_WARNING +INFO: halt +TO FIX: should print message for MM_INFO +halt +TO FIX: should print message for MM_NOSEV +TEST: halt +TO FIX: should print message for MM_TEST +GLIBC:tst-fmtmsg: HALT: halt +TO FIX: should print message for MM_HALT +GLIBC:tst-fmtmsg: ERROR: halt +TO FIX: should print message for MM_ERROR +GLIBC:tst-fmtmsg: WARNING: halt +TO FIX: should print message for MM_WARNING +GLIBC:tst-fmtmsg: INFO: halt +TO FIX: should print message for MM_INFO +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_NOSEV +GLIBC:tst-fmtmsg: TEST: halt +TO FIX: should print message for MM_TEST +GLIBC:tst-fmtmsg:1 +GLIBC:tst-fmtmsg:2 +GLIBC:tst-fmtmsg:3 +GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg:5 +GLIBC:tst-fmtmsg:6 +GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:1 +GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:2 +GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:3 +GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:5 +GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:6 +HALT: GLIBC:tst-fmtmsg:1 +ERROR: GLIBC:tst-fmtmsg:2 +WARNING: GLIBC:tst-fmtmsg:3 +INFO: GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg:5 +TEST: GLIBC:tst-fmtmsg:6 +GLIBC:tst-fmtmsg: HALT: GLIBC:tst-fmtmsg:1 +GLIBC:tst-fmtmsg: ERROR: GLIBC:tst-fmtmsg:2 +GLIBC:tst-fmtmsg: WARNING: GLIBC:tst-fmtmsg:3 +GLIBC:tst-fmtmsg: INFO: GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:5 +GLIBC:tst-fmtmsg: TEST: GLIBC:tst-fmtmsg:6 +halt +GLIBC:tst-fmtmsg:1 +halt +GLIBC:tst-fmtmsg:2 +halt +GLIBC:tst-fmtmsg:3 +halt +GLIBC:tst-fmtmsg:4 +halt +GLIBC:tst-fmtmsg:5 +halt +GLIBC:tst-fmtmsg:6 +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg:1 +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg:2 +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg:3 +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg:5 +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg:6 +HALT: halt +GLIBC:tst-fmtmsg:1 +ERROR: halt +GLIBC:tst-fmtmsg:2 +WARNING: halt +GLIBC:tst-fmtmsg:3 +INFO: halt +GLIBC:tst-fmtmsg:4 +halt +GLIBC:tst-fmtmsg:5 +TEST: halt +GLIBC:tst-fmtmsg:6 +GLIBC:tst-fmtmsg: HALT: halt +GLIBC:tst-fmtmsg:1 +GLIBC:tst-fmtmsg: ERROR: halt +GLIBC:tst-fmtmsg:2 +GLIBC:tst-fmtmsg: WARNING: halt +GLIBC:tst-fmtmsg:3 +GLIBC:tst-fmtmsg: INFO: halt +GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg: halt +GLIBC:tst-fmtmsg:5 +GLIBC:tst-fmtmsg: TEST: halt +GLIBC:tst-fmtmsg:6 +TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1 +TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2 +TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3 +TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4 +TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5 +TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6 +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1 +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2 +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3 +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5 +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6 +HALT: TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1 +ERROR: TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2 +WARNING: TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3 +INFO: TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4 +TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5 +TEST: TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6 +GLIBC:tst-fmtmsg: HALT: TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1 +GLIBC:tst-fmtmsg: ERROR: TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2 +GLIBC:tst-fmtmsg: WARNING: TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3 +GLIBC:tst-fmtmsg: INFO: TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5 +GLIBC:tst-fmtmsg: TEST: TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6 +halt +TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1 +halt +TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2 +halt +TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3 +halt +TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4 +halt +TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5 +halt +TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6 +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1 +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2 +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3 +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5 +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6 +HALT: halt +TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1 +ERROR: halt +TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2 +WARNING: halt +TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3 +INFO: halt +TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4 +halt +TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5 +TEST: halt +TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6 +GLIBC:tst-fmtmsg: HALT: halt +TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1 +GLIBC:tst-fmtmsg: ERROR: halt +TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2 +GLIBC:tst-fmtmsg: WARNING: halt +TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3 +GLIBC:tst-fmtmsg: INFO: halt +TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4 +GLIBC:tst-fmtmsg: halt +TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5 +GLIBC:tst-fmtmsg: TEST: halt +TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6 +EOF +exit $? |