diff --git a/doc/man-pages/check-pod b/doc/man-pages/check-pod index 418f81dd5e..0afaf7bc36 100755 --- a/doc/man-pages/check-pod +++ b/doc/man-pages/check-pod @@ -28,7 +28,7 @@ for ( @ARGV ? @ARGV : @poddirs ) { if ( -f ) { push @list, $_ } elsif ( -d ) { - push @list, all_pod_files( $_ ) + push @list, grep { !m,fragments/, } all_pod_files( $_ ) } } diff --git a/doc/man-pages/merge-pod b/doc/man-pages/merge-pod new file mode 100755 index 0000000000..b1e0da363a --- /dev/null +++ b/doc/man-pages/merge-pod @@ -0,0 +1,44 @@ +#!/usr/bin/perl -w +# +# POD currently doesn't support any sort of =include directive. This +# processor works around that limitation. It takes a list of files ending in +# *.in as its argument and processes any POD directives of the form =include +# in that file, generating a file with the *.in suffix removed. All +# paths are taken to be relative to the directory containing the file being +# processed. +# +# Currently, only single include nesting is supported. The included file is +# not processed for additional =include statements. + +require 5.006; + +use Cwd qw(getcwd); +use File::Basename qw(dirname basename); + +my $start = getcwd; +for my $file (@ARGV) { + chdir $start or die "cannot chdir to $start: $!\n"; + my $dir = dirname ($file); + my $out = $file; + unless ($out =~ s/\.in\z//) { + die "input file $file does not end in .in\n"; + } + open (FILE, '<', $file) or die "cannot open $file: $!\n"; + open (OUT, '>', $out) or die "cannot open $out: $!\n"; + chdir $dir or die "cannot chdir to $dir: $!\n"; + local $/ = ''; + local $_; + while () { + if (/^=include\s+(\S+)/) { + open (INCLUDE, '<', $1) or die "cannot open $1: $!\n"; + local $/; + print OUT or die "cannot read/write from $1: $!\n"; + close INCLUDE or die "cannot read from $1: $!\n"; + print OUT "\n" or die "cannot write to $out: $!\n"; + } else { + print OUT $_ or die "cannot write to $out: $!\n"; + } + } + close OUT or die "cannot write to $out: $!\n"; + close FILE or die "cannot read from $file\n"; +} diff --git a/doc/man-pages/pod1/.gitignore b/doc/man-pages/pod1/.gitignore new file mode 100644 index 0000000000..b794ac38aa --- /dev/null +++ b/doc/man-pages/pod1/.gitignore @@ -0,0 +1,22 @@ +# After changing this file, please run +# git ls-files -i --exclude-standard +# to check that you haven't inadvertently ignored any tracked files. + +/pts_adduser.pod +/pts_chown.pod +/pts_creategroup.pod +/pts_createuser.pod +/pts_delete.pod +/pts_examine.pod +/pts_interactive.pod +/pts_listentries.pod +/pts_listmax.pod +/pts_listowned.pod +/pts_membership.pod +/pts_quit.pod +/pts_removeuser.pod +/pts_rename.pod +/pts_setfields.pod +/pts_setmax.pod +/pts_sleep.pod +/pts_source.pod diff --git a/doc/man-pages/pod1/fragments/pts-common.pod b/doc/man-pages/pod1/fragments/pts-common.pod new file mode 100644 index 0000000000..055262de27 --- /dev/null +++ b/doc/man-pages/pod1/fragments/pts-common.pod @@ -0,0 +1,25 @@ +=item B<-cell> > + +Names the cell in which to run the command. For more details, see +L. + +=item B<-force> + +Enables the command to continue executing as far as possible when errors +or other problems occur, rather than halting execution at the first error. + +=item B<-help> + +Prints the online help for this command. All other valid options are +ignored. + +=item B<-localauth> + +Constructs a server ticket using a key from the local +F file. Do not combine this flag with the B<-cell> +or B<-noauth> options. For more details, see L. + +=item B<-noauth> + +Assigns the unprivileged identity anonymous to the issuer. For more +details, see L. diff --git a/doc/man-pages/pod1/pts_adduser.pod b/doc/man-pages/pod1/pts_adduser.pod.in similarity index 80% rename from doc/man-pages/pod1/pts_adduser.pod rename to doc/man-pages/pod1/pts_adduser.pod.in index cefc97099e..0dfb3e2c6a 100644 --- a/doc/man-pages/pod1/pts_adduser.pod +++ b/doc/man-pages/pod1/pts_adduser.pod.in @@ -50,33 +50,7 @@ Specifies the complete name (including the owner prefix if applicable) of each group to which to add members. The group entry must already exist in the Protection Database. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. The B command interpreter presents the -ticket to the Protection Server during mutual authentication. Do not combine -this flag with the B<-cell> or B<-noauth> options. For more details, see -L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_chown.pod b/doc/man-pages/pod1/pts_chown.pod.in similarity index 79% rename from doc/man-pages/pod1/pts_chown.pod rename to doc/man-pages/pod1/pts_chown.pod.in index c3de2c398e..498b85fd52 100644 --- a/doc/man-pages/pod1/pts_chown.pod +++ b/doc/man-pages/pod1/pts_chown.pod.in @@ -52,31 +52,7 @@ Specifies the current name of the group to which to assign a new owner. Names the user or group to become the group's owner. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the B<-cell> -or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_creategroup.pod b/doc/man-pages/pod1/pts_creategroup.pod.in similarity index 90% rename from doc/man-pages/pod1/pts_creategroup.pod rename to doc/man-pages/pod1/pts_creategroup.pod.in index ed78053b87..e399f27cda 100644 --- a/doc/man-pages/pod1/pts_creategroup.pod +++ b/doc/man-pages/pod1/pts_creategroup.pod.in @@ -144,31 +144,7 @@ there are more GIDs than groups, the excess GIDs are ignored. If any of the GIDs is lower (more negative) than the current value of the C counter, the counter is reset to that value. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_createuser.pod b/doc/man-pages/pod1/pts_createuser.pod.in similarity index 89% rename from doc/man-pages/pod1/pts_createuser.pod rename to doc/man-pages/pod1/pts_createuser.pod.in index 75c8bff147..135af82c9e 100644 --- a/doc/man-pages/pod1/pts_createuser.pod +++ b/doc/man-pages/pod1/pts_createuser.pod.in @@ -128,31 +128,7 @@ counter. If there are more UIDs than entries, the excess UIDs are ignored. If any of the UIDs is greater than the current value of the C counter, the counter is reset to that value. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_delete.pod b/doc/man-pages/pod1/pts_delete.pod.in similarity index 79% rename from doc/man-pages/pod1/pts_delete.pod rename to doc/man-pages/pod1/pts_delete.pod.in index b06b35b0a9..7932fec8b2 100644 --- a/doc/man-pages/pod1/pts_delete.pod +++ b/doc/man-pages/pod1/pts_delete.pod.in @@ -62,31 +62,7 @@ groups on the same command line, as well as names (IP addresses for machines) and IDs. Precede the GID of each group with a hyphen to indicate that it is negative. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_examine.pod b/doc/man-pages/pod1/pts_examine.pod.in similarity index 92% rename from doc/man-pages/pod1/pts_examine.pod rename to doc/man-pages/pod1/pts_examine.pod.in index 7118fa8cea..154ff7858e 100644 --- a/doc/man-pages/pod1/pts_examine.pod +++ b/doc/man-pages/pod1/pts_examine.pod.in @@ -42,36 +42,12 @@ acceptable to mix users, machines, and groups on the same command line, as well as names (IP addresses for machines) and IDs. Precede the GID of each group with a hyphen to indicate that it is negative. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - =item B<-auth> Run using the user's current authentication. This is the default unless the B<-noauth> or B<-localauth> options are used. -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_interactive.pod b/doc/man-pages/pod1/pts_interactive.pod.in similarity index 82% rename from doc/man-pages/pod1/pts_interactive.pod rename to doc/man-pages/pod1/pts_interactive.pod.in index 6c8a641275..c1aa51a621 100644 --- a/doc/man-pages/pod1/pts_interactive.pod +++ b/doc/man-pages/pod1/pts_interactive.pod.in @@ -45,28 +45,7 @@ B only takes the standard B options. =over 4 -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. -This is useful for bulk operations where you would like to continue even -if one of many operations fails. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_listentries.pod b/doc/man-pages/pod1/pts_listentries.pod.in similarity index 79% rename from doc/man-pages/pod1/pts_listentries.pod rename to doc/man-pages/pod1/pts_listentries.pod.in index 79d53c13a2..e2e663ba13 100644 --- a/doc/man-pages/pod1/pts_listentries.pod +++ b/doc/man-pages/pod1/pts_listentries.pod.in @@ -38,31 +38,7 @@ Displays user and machine entries. Displays group entries. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_listmax.pod b/doc/man-pages/pod1/pts_listmax.pod.in similarity index 72% rename from doc/man-pages/pod1/pts_listmax.pod rename to doc/man-pages/pod1/pts_listmax.pod.in index 4fec04e46a..790face368 100644 --- a/doc/man-pages/pod1/pts_listmax.pod +++ b/doc/man-pages/pod1/pts_listmax.pod.in @@ -35,31 +35,7 @@ can issue the B command. =over 4 -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_listowned.pod b/doc/man-pages/pod1/pts_listowned.pod.in similarity index 84% rename from doc/man-pages/pod1/pts_listowned.pod rename to doc/man-pages/pod1/pts_listowned.pod.in index 5baf3a618e..c04ddecf12 100644 --- a/doc/man-pages/pod1/pts_listowned.pod +++ b/doc/man-pages/pod1/pts_listowned.pod.in @@ -41,31 +41,7 @@ negative. A value of 0 (zero) lists group entries for groups whose owners no longer have entries in the Protection Database. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_membership.pod b/doc/man-pages/pod1/pts_membership.pod.in similarity index 91% rename from doc/man-pages/pod1/pts_membership.pod rename to doc/man-pages/pod1/pts_membership.pod.in index 36c1ed3fdd..21241b27fd 100644 --- a/doc/man-pages/pod1/pts_membership.pod +++ b/doc/man-pages/pod1/pts_membership.pod.in @@ -75,31 +75,7 @@ argument. Group membership may be nested when B is compilied with the SUPERGROUPS option enabled. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_quit.pod b/doc/man-pages/pod1/pts_quit.pod.in similarity index 69% rename from doc/man-pages/pod1/pts_quit.pod rename to doc/man-pages/pod1/pts_quit.pod.in index a7a25107ea..d742ec947f 100644 --- a/doc/man-pages/pod1/pts_quit.pod +++ b/doc/man-pages/pod1/pts_quit.pod.in @@ -35,26 +35,7 @@ B options: =over 4 -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_removeuser.pod b/doc/man-pages/pod1/pts_removeuser.pod.in similarity index 80% rename from doc/man-pages/pod1/pts_removeuser.pod rename to doc/man-pages/pod1/pts_removeuser.pod.in index f60a66400c..c2c40174cf 100644 --- a/doc/man-pages/pod1/pts_removeuser.pod +++ b/doc/man-pages/pod1/pts_removeuser.pod.in @@ -47,31 +47,7 @@ wildcard-style) of each machine entry to remove. Names each group from which to remove members. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_rename.pod b/doc/man-pages/pod1/pts_rename.pod.in similarity index 82% rename from doc/man-pages/pod1/pts_rename.pod rename to doc/man-pages/pod1/pts_rename.pod.in index 83ed4b7ed7..775feec9a6 100644 --- a/doc/man-pages/pod1/pts_rename.pod +++ b/doc/man-pages/pod1/pts_rename.pod.in @@ -60,31 +60,7 @@ Specifies the new full name for the entry. For regular groups, the owner field (the part before the colon) of the new name must reflect the actual ownership of the group. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_setfields.pod b/doc/man-pages/pod1/pts_setfields.pod.in similarity index 91% rename from doc/man-pages/pod1/pts_setfields.pod rename to doc/man-pages/pod1/pts_setfields.pod.in index ab17697995..398c40bbd7 100644 --- a/doc/man-pages/pod1/pts_setfields.pod +++ b/doc/man-pages/pod1/pts_setfields.pod.in @@ -195,31 +195,7 @@ Specifies the number of additional groups a user can create (it does not matter how many he or she has created already). Do not include this argument for a group or machine entry. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_setmax.pod b/doc/man-pages/pod1/pts_setmax.pod.in similarity index 76% rename from doc/man-pages/pod1/pts_setmax.pod rename to doc/man-pages/pod1/pts_setmax.pod.in index 97498480b1..1bfca5e6c1 100644 --- a/doc/man-pages/pod1/pts_setmax.pod +++ b/doc/man-pages/pod1/pts_setmax.pod.in @@ -46,31 +46,7 @@ createuser> command to create a user or machine entry and does not include that command's B<-id> argument, the Protection Server assigns the group an AFS UID one greater than this value. -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-help> - -Prints the online help for this command. All other valid options are -ignored. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_sleep.pod b/doc/man-pages/pod1/pts_sleep.pod.in similarity index 72% rename from doc/man-pages/pod1/pts_sleep.pod rename to doc/man-pages/pod1/pts_sleep.pod.in index 4c009081eb..f59d271fd4 100644 --- a/doc/man-pages/pod1/pts_sleep.pod +++ b/doc/man-pages/pod1/pts_sleep.pod.in @@ -38,26 +38,7 @@ B options: =over 4 -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. +=include fragments/pts-common.pod =back diff --git a/doc/man-pages/pod1/pts_source.pod b/doc/man-pages/pod1/pts_source.pod.in similarity index 67% rename from doc/man-pages/pod1/pts_source.pod rename to doc/man-pages/pod1/pts_source.pod.in index 3ad91e8799..3179815192 100644 --- a/doc/man-pages/pod1/pts_source.pod +++ b/doc/man-pages/pod1/pts_source.pod.in @@ -35,32 +35,7 @@ B takes the following options: =over 4 -=item B<-cell> > - -Names the cell in which to run the command. For more details, see -L. - -=item B<-file> > - -Specifies the filename from which to read commands. - -=item B<-force> - -Enables the command to continue executing as far as possible when errors -or other problems occur, rather than halting execution at the first error. -This is useful for bulk operations where you would like to continue even -if one of many operations fails. - -=item B<-noauth> - -Assigns the unprivileged identity anonymous to the issuer. For more -details, see L. - -=item B<-localauth> - -Constructs a server ticket using a key from the local -F file. Do not combine this flag with the -B<-cell> or B<-noauth> options. For more details, see L. +=include fragments/pts-common.pod =back diff --git a/regen.sh b/regen.sh index 8ef4349dcf..7121a839cd 100755 --- a/regen.sh +++ b/regen.sh @@ -45,6 +45,7 @@ else # pod2man available. if test -d doc/man-pages ; then echo "Building man pages" + perl doc/man-pages/merge-pod doc/man-pages/pod1/*.in (cd doc/man-pages && ./generate-man) fi fi