#!/usr/bin/env sh


readonly 'VERSION=w3maction 2.3.2'



set -efu
umask '0022'
readonly "LC_ALL_ORG=${LC_ALL-}"
LC_ALL='C'
IFS=$(printf ' \t\n_')
IFS="${IFS%_}"
PATH="${PATH-}${PATH:+:}$(command -p getconf 'PATH')"
UNIX_STD='2003'         # HP-UX POSIX mode
XPG_SUS_ENV='ON'        # AIX POSIX mode
XPG_UNIX98='OFF'        # AIX UNIX 03 mode
POSIXLY_CORRECT='1'     # GNU Coreutils POSIX mode
COMMAND_MODE='unix2003' # macOS UNIX 03 mode
export 'LC_ALL' 'IFS' 'PATH' 'UNIX_STD' 'XPG_SUS_ENV' 'XPG_UNIX98' 'POSIXLY_CORRECT' 'COMMAND_MODE'




readonly 'EX_OK=0' # successful termination

readonly 'EX__BASE=64' # base value for error messages

readonly 'EX_USAGE=64'       # command line usage error
readonly 'EX_DATAERR=65'     # data format error
readonly 'EX_NOINPUT=66'     # cannot open input
readonly 'EX_NOUSER=67'      # addressee unknown
readonly 'EX_NOHOST=68'      # host name unknown
readonly 'EX_UNAVAILABLE=69' # service unavailable
readonly 'EX_SOFTWARE=70'    # internal software error
readonly 'EX_OSERR=71'       # system error (e.g., can't fork)
readonly 'EX_OSFILE=72'      # critical OS file missing
readonly 'EX_CANTCREAT=73'   # can't create (user) output file
readonly 'EX_IOERR=74'       # input/output error
readonly 'EX_TEMPFAIL=75'    # temp failure; user is invited to retry
readonly 'EX_PROTOCOL=76'    # remote error in protocol
readonly 'EX_NOPERM=77'      # permission denied
readonly 'EX_CONFIG=78'      # configuration error

readonly 'EX__MAX=78' # maximum listed value

trap 'case "${?}" in 0) end_call;; *) end_call "${EX_SOFTWARE}";; esac' 0 # EXIT
trap 'end_call 129' 1                                                     # SIGHUP
trap 'end_call 130' 2                                                     # SIGINT
trap 'end_call 131' 3                                                     # SIGQUIT
trap 'end_call 143' 15                                                    # SIGTERM

alias org_lc='LC_ALL="${LC_ALL_ORG}"'


end_call() {
	trap '' 0 # EXIT
	rm -fr -- ${tmpDir:+"${tmpDir}"}
	exit "${1:-0}"
}



option_error() {
	printf '%s: %s\n' "${0##*/}" "${1}" >&2
	printf "詳細については '%s' を実行してください。\\n" "${0##*/} --help" >&2

	end_call "${EX_USAGE}"
}



regex_match() {
	awk -- '
		BEGIN {
			for(i = 2; i < ARGC; i++) {
				if(ARGV[1] !~ ARGV[i]) {
					exit 1
				}
			}

			exit
		}
	' ${@+"${@}"} || return 1

	return 0
}



append_array_posix() {
	while [ 2 -le "${#}" ]; do
		__append_array_posix "${1}" "${2}"

		eval "shift 2; set -- '${1}'" '${@+"${@}"}'
	done
}


__append_array_posix() {
	set "${1}" "${2-}" ''

	until [ "${2#*\'}" '=' "${2}" ]; do
		set -- "${1}" "${2#*\'}" "${3}${2%%\'*}'\"'\"'"
	done

	eval "${1}=\"\${${1}-}\${${1}:+ }'\${3}\${2}'\""
}

parser_definition() {
	setup REST plus:true abbr:true error:option_error no:0 help:usage \
		-- 'Usage:' "  ${2##*/} [OPTION]... ACTION VARIABLE_NAME" \
		'' 'Options:'

	param data -d --data-type init:='raw' pattern:'raw | base64 | urlencode' var:'raw | base64 | urlencode' -- '変数のエンコードタイプを指定する'
	disp :usage -h --help -- 'このヘルプを表示して終了する'
	disp VERSION -v --version -- 'バージョン情報を表示して終了する'

	msg -- '' 'ACTION:'

	cmd exec-shell -- 'VARIABLE_NAME を基に EXEC_SHELL を実行する'
	cmd goto -- 'VARIABLE_NAME にアクセスする'
	cmd read-shell -- 'VARIABLE_NAME を基に READ_SHELL を実行する'
	cmd setenv -- 'VARIABLE_NAME を別の変数に代入する'
	cmd yank -- 'VARIABLE_NAME の値のヤンクを行う'

	msg -- '' 'Exit Status:' \
		'    0 - successful termination' \
		'   64 - command line usage error' \
		'   65 - data format error' \
		'   66 - cannot open input' \
		'   67 - addressee unknown' \
		'   68 - host name unknown' \
		'   69 - service unavailable' \
		'   70 - internal software error' \
		"   71 - system error (e.g., can't fork)" \
		'   72 - critical OS file missing' \
		"   73 - can't create (user) output file" \
		'   74 - input/output error' \
		'   75 - temp failure; user is invited to retry' \
		'   76 - remote error in protocol' \
		'   77 - permission denied' \
		'   78 - configuration error' \
		'  129 - received SIGHUP' \
		'  130 - received SIGINT' \
		'  131 - received SIGQUIT' \
		'  143 - received SIGTERM'
}

parser_definition_goto() {
	setup REST plus:true abbr:true error:option_error no:0 help:usage_goto \
		-- 'Usage:' "  ${2##*/} [OPTION]... goto VARIABLE_NAME [SUB_OPTION]... [COMMNAD_ARG].." \
		'' 'Sub options:'

	param :'append_array_posix "option" "${1}" "${OPTARG}"' --a1 --a2 --a3 --a4 --a5 --a6 --a7 --a8 --a9 var:W3M_COMMAND -- 'n個目の URI アクセス後に W3M_COMMAND を実行する'
	param :'append_array_posix "option" "${1}" "${OPTARG}"' --b1 --b2 --b3 --b4 --b5 --b6 --b7 --b8 --b9 var:W3M_COMMAND -- 'n個目の URI アクセス前に W3M_COMMAND を実行する'
	param :'append_array_posix "option" "${1}" "${OPTARG}"' -t --tab var:'current | del-prebuf | newtab | open-newtab' -- 'タブの動作を指定する'
	disp :usage_goto -h --help -- 'このヘルプを表示して終了する'
}

parser_definition_setenv() {
	setup REST plus:true abbr:true error:option_error no:0 help:usage_setenv \
		-- 'Usage:' "  ${2##*/} [OPTION]... setenv VARIABLE_NAME [SUB_OPTION]..." \
		'' 'Sub options:'

	param encode -e --encode-type init:='raw' pattern:'raw | base64 | urlencode'
	disp :usage_setenv -h --help -- 'このヘルプを表示して終了する'
}

data='raw'
REST=''
parse() {
	OPTIND=$(($# + 1))
	while OPTARG= && [ $# -gt 0 ]; do
		set -- "${1%%\=*}" "${1#*\=}" "$@"
		while [ ${#1} -gt 2 ]; do
			case $1 in *[!a-zA-Z0-9_-]*) break ;; esac
			case '--data-type' in
			"$1")
				OPTARG=
				break
				;;
			$1*) OPTARG="$OPTARG --data-type" ;;
			esac
			case '--help' in
			"$1")
				OPTARG=
				break
				;;
			$1*) OPTARG="$OPTARG --help" ;;
			esac
			case '--version' in
			"$1")
				OPTARG=
				break
				;;
			$1*) OPTARG="$OPTARG --version" ;;
			esac
			break
		done
		case ${OPTARG# } in
		*\ *)
			eval "set -- $OPTARG $1 $OPTARG"
			OPTIND=$((($# + 1) / 2)) OPTARG=$1
			shift
			while [ $# -gt "$OPTIND" ]; do
				OPTARG="$OPTARG, $1"
				shift
			done
			set "Ambiguous option: $1 (could be $OPTARG)" ambiguous "$@"
			option_error "$@" >&2 || exit $?
			echo "$1" >&2
			exit 1
			;;
		?*)
			[ "$2" = "$3" ] || OPTARG="$OPTARG=$2"
			shift 3
			eval 'set -- "${OPTARG# }"' ${1+'"$@"'}
			OPTARG=
			;;
		*) shift 2 ;;
		esac
		case $1 in
		--?*=*)
			OPTARG=$1
			shift
			eval 'set -- "${OPTARG%%\=*}" "${OPTARG#*\=}"' ${1+'"$@"'}
			;;
		--no-* | --without-*) unset OPTARG ;;
		-[d]?*)
			OPTARG=$1
			shift
			eval 'set -- "${OPTARG%"${OPTARG#??}"}" "${OPTARG#??}"' ${1+'"$@"'}
			;;
		-[hv]?*)
			OPTARG=$1
			shift
			eval 'set -- "${OPTARG%"${OPTARG#??}"}" -"${OPTARG#??}"' ${1+'"$@"'}
			OPTARG=
			;;
		+*) unset OPTARG ;;
		esac
		case $1 in
		'-d' | '--data-type')
			[ $# -le 1 ] && set "required" "$1" && break
			OPTARG=$2
			case $OPTARG in raw | base64 | urlencode) ;;
			*)
				set "pattern:raw | base64 | urlencode" "$1"
				break
				;;
			esac
			data="$OPTARG"
			shift
			;;
		'-h' | '--help')
			usage
			exit 0
			;;
		'-v' | '--version')
			echo "${VERSION}"
			exit 0
			;;
		--)
			while [ $# -gt 0 ]; do
				REST="${REST} \"\${$((OPTIND - $#))}\""
				shift
			done
			break
			;;
		[-+]?*)
			set "unknown" "$1"
			break
			;;
		*)
			case $1 in 'exec-shell' | 'goto' | 'read-shell' | 'setenv' | 'yank') ;;
			*)
				set "notcmd" "$1"
				break
				;;
			esac
			while [ $# -gt 0 ]; do
				REST="${REST} \"\${$((OPTIND - $#))}\""
				shift
			done
			break
			;;
		esac
		shift
	done
	[ $# -eq 0 ] && {
		OPTIND=1
		unset OPTARG
		return 0
	}
	case $1 in
	unknown) set "Unrecognized option: $2" "$@" ;;
	noarg) set "Does not allow an argument: $2" "$@" ;;
	required) set "Requires an argument: $2" "$@" ;;
	pattern:*) set "Does not match the pattern (${1#*:}): $2" "$@" ;;
	notcmd) set "Not a command: $2" "$@" ;;
	*) set "Validation error ($1): $2" "$@" ;;
	esac
	option_error "$@" >&2 || exit $?
	echo "$1" >&2
	exit 1
}
usage() {
	cat <<'GETOPTIONSHERE'
Usage:
  w3maction [OPTION]... ACTION VARIABLE_NAME

Options:
  -d,     --data-type raw | base64 | urlencode 
                              変数のエンコードタイプを指定する
  -h,     --help              このヘルプを表示して終了する
  -v,     --version           バージョン情報を表示して終了する

ACTION:
  exec-shell 
            VARIABLE_NAME を基に EXEC_SHELL を実行する
  goto      VARIABLE_NAME にアクセスする
  read-shell 
            VARIABLE_NAME を基に READ_SHELL を実行する
  setenv    VARIABLE_NAME を別の変数に代入する
  yank      VARIABLE_NAME の値のヤンクを行う

Exit Status:
    0 - successful termination
   64 - command line usage error
   65 - data format error
   66 - cannot open input
   67 - addressee unknown
   68 - host name unknown
   69 - service unavailable
   70 - internal software error
   71 - system error (e.g., can't fork)
   72 - critical OS file missing
   73 - can't create (user) output file
   74 - input/output error
   75 - temp failure; user is invited to retry
   76 - remote error in protocol
   77 - permission denied
   78 - configuration error
  129 - received SIGHUP
  130 - received SIGINT
  131 - received SIGQUIT
  143 - received SIGTERM
GETOPTIONSHERE
}

parse ${@+"${@}"}
eval "set -- ${REST}"

case "${#}" in '0' | '1')
	printf '%s: 引数が不足しています。\n' "${0##*/}" >&2
	printf "詳細については '%s' を実行してください。\\n" "${0##*/} --help" >&2

	end_call "${EX_USAGE}"
	;;
esac

action="${1}"
variableName="${2}"
shift 2

if ! regex_match "${variableName}" '^[_A-Za-z][_0-9A-Za-z]*$'; then
	printf "%s: '%s' -- VARIABLE_NAME の値が不正です。\\n" "${0##*/}" "${variableName}" >&2
	printf "詳細については '%s' を実行してください。\\n" "${0##*/} --help" >&2

	end_call "${EX_USAGE}"
fi

eval "value=\"\${${variableName}-}\""

case "${data}" in
'base64')
	value=$(
		printf '%s' "${value}" | base64 -d
		printf '_'
	)
	value="${value%_}"
	;;
'urlencode')
	value=$(
		printf '%s' "${value}" | urldecode
		printf '_'
	)
	value="${value%_}"
	;;
esac

case "${value}" in '')
	org_lc httpresponse -H 'W3m-control: BACK'
	exit
	;;
esac

case "${action}" in
'exec-shell' | 'read-shell')
	case "${action}" in
	'exec-shell') w3mcmd='EXEC_SHELL' ;;
	'read-shell') w3mcmd='READ_SHELL' ;;
	esac

	case "${#}" in '0')
		set -- 'cat'
		;;
	esac

	command=$(printf '%s' "${*}" | base64 | tr -d '\n')
	value=$(printf '%s' "${value}" | base64 | tr -d '\n')

	org_lc httpresponse \
		-H 'W3m-control: BACK' \
		-H "W3m-control: ${w3mcmd} printf '%s' '${value}' | base64 -d | eval \"\$(printf '%s' '${command}' | base64 -d)\""
	;;
'goto')
	REST=''
	parse_goto() {
		OPTIND=$(($# + 1))
		while OPTARG= && [ $# -gt 0 ]; do
			set -- "${1%%\=*}" "${1#*\=}" "$@"
			while [ ${#1} -gt 2 ]; do
				case $1 in *[!a-zA-Z0-9_-]*) break ;; esac
				case '--a1' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --a1" ;;
				esac
				case '--a2' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --a2" ;;
				esac
				case '--a3' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --a3" ;;
				esac
				case '--a4' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --a4" ;;
				esac
				case '--a5' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --a5" ;;
				esac
				case '--a6' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --a6" ;;
				esac
				case '--a7' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --a7" ;;
				esac
				case '--a8' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --a8" ;;
				esac
				case '--a9' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --a9" ;;
				esac
				case '--b1' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --b1" ;;
				esac
				case '--b2' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --b2" ;;
				esac
				case '--b3' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --b3" ;;
				esac
				case '--b4' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --b4" ;;
				esac
				case '--b5' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --b5" ;;
				esac
				case '--b6' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --b6" ;;
				esac
				case '--b7' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --b7" ;;
				esac
				case '--b8' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --b8" ;;
				esac
				case '--b9' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --b9" ;;
				esac
				case '--tab' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --tab" ;;
				esac
				case '--help' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --help" ;;
				esac
				break
			done
			case ${OPTARG# } in
			*\ *)
				eval "set -- $OPTARG $1 $OPTARG"
				OPTIND=$((($# + 1) / 2)) OPTARG=$1
				shift
				while [ $# -gt "$OPTIND" ]; do
					OPTARG="$OPTARG, $1"
					shift
				done
				set "Ambiguous option: $1 (could be $OPTARG)" ambiguous "$@"
				option_error "$@" >&2 || exit $?
				echo "$1" >&2
				exit 1
				;;
			?*)
				[ "$2" = "$3" ] || OPTARG="$OPTARG=$2"
				shift 3
				eval 'set -- "${OPTARG# }"' ${1+'"$@"'}
				OPTARG=
				;;
			*) shift 2 ;;
			esac
			case $1 in
			--?*=*)
				OPTARG=$1
				shift
				eval 'set -- "${OPTARG%%\=*}" "${OPTARG#*\=}"' ${1+'"$@"'}
				;;
			--no-* | --without-*) unset OPTARG ;;
			-[t]?*)
				OPTARG=$1
				shift
				eval 'set -- "${OPTARG%"${OPTARG#??}"}" "${OPTARG#??}"' ${1+'"$@"'}
				;;
			-[h]?*)
				OPTARG=$1
				shift
				eval 'set -- "${OPTARG%"${OPTARG#??}"}" -"${OPTARG#??}"' ${1+'"$@"'}
				OPTARG=
				;;
			+*) unset OPTARG ;;
			esac
			case $1 in
			'--a1' | '--a2' | '--a3' | '--a4' | '--a5' | '--a6' | '--a7' | '--a8' | '--a9')
				[ $# -le 1 ] && set "required" "$1" && break
				OPTARG=$2
				append_array_posix "option" "${1}" "${OPTARG}"
				shift
				;;
			'--b1' | '--b2' | '--b3' | '--b4' | '--b5' | '--b6' | '--b7' | '--b8' | '--b9')
				[ $# -le 1 ] && set "required" "$1" && break
				OPTARG=$2
				append_array_posix "option" "${1}" "${OPTARG}"
				shift
				;;
			'-t' | '--tab')
				[ $# -le 1 ] && set "required" "$1" && break
				OPTARG=$2
				append_array_posix "option" "${1}" "${OPTARG}"
				shift
				;;
			'-h' | '--help')
				usage_goto
				exit 0
				;;
			--)
				shift
				while [ $# -gt 0 ]; do
					REST="${REST} \"\${$((OPTIND - $#))}\""
					shift
				done
				break
				;;
			[-+]?*)
				set "unknown" "$1"
				break
				;;
			*)
				REST="${REST} \"\${$((OPTIND - $#))}\""
				;;
			esac
			shift
		done
		[ $# -eq 0 ] && {
			OPTIND=1
			unset OPTARG
			return 0
		}
		case $1 in
		unknown) set "Unrecognized option: $2" "$@" ;;
		noarg) set "Does not allow an argument: $2" "$@" ;;
		required) set "Requires an argument: $2" "$@" ;;
		pattern:*) set "Does not match the pattern (${1#*:}): $2" "$@" ;;
		notcmd) set "Not a command: $2" "$@" ;;
		*) set "Validation error ($1): $2" "$@" ;;
		esac
		option_error "$@" >&2 || exit $?
		echo "$1" >&2
		exit 1
	}
	usage_goto() {
		cat <<'GETOPTIONSHERE'
Usage:
  w3maction [OPTION]... goto VARIABLE_NAME [SUB_OPTION]... [COMMNAD_ARG]..

Sub options:
          --a1, --a2, --a3, --a4, --a5, --a6, --a7, --a8, --a9 W3M_COMMAND 
                              n個目の URI アクセス後に W3M_COMMAND を実行する
          --b1, --b2, --b3, --b4, --b5, --b6, --b7, --b8, --b9 W3M_COMMAND 
                              n個目の URI アクセス前に W3M_COMMAND を実行する
  -t,     --tab current | del-prebuf | newtab | open-newtab 
                              タブの動作を指定する
  -h,     --help              このヘルプを表示して終了する
GETOPTIONSHERE
	}

	parse_goto ${@+"${@}"}
	eval "set -- ${REST}"

	case "${#}" in [1-9]*)
		value=$(
			printf '%s' "${value}" | org_lc sh -c "${*}" 'sh' || :
			printf '_'
		)
		value="${value%_}"
		;;
	esac

	eval org_lc "w3mredirect ${option-} -- \${value}"
	;;
'setenv')
	encode='raw'
	REST=''
	parse_setenv() {
		OPTIND=$(($# + 1))
		while OPTARG= && [ $# -gt 0 ]; do
			set -- "${1%%\=*}" "${1#*\=}" "$@"
			while [ ${#1} -gt 2 ]; do
				case $1 in *[!a-zA-Z0-9_-]*) break ;; esac
				case '--encode-type' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --encode-type" ;;
				esac
				case '--help' in
				"$1")
					OPTARG=
					break
					;;
				$1*) OPTARG="$OPTARG --help" ;;
				esac
				break
			done
			case ${OPTARG# } in
			*\ *)
				eval "set -- $OPTARG $1 $OPTARG"
				OPTIND=$((($# + 1) / 2)) OPTARG=$1
				shift
				while [ $# -gt "$OPTIND" ]; do
					OPTARG="$OPTARG, $1"
					shift
				done
				set "Ambiguous option: $1 (could be $OPTARG)" ambiguous "$@"
				option_error "$@" >&2 || exit $?
				echo "$1" >&2
				exit 1
				;;
			?*)
				[ "$2" = "$3" ] || OPTARG="$OPTARG=$2"
				shift 3
				eval 'set -- "${OPTARG# }"' ${1+'"$@"'}
				OPTARG=
				;;
			*) shift 2 ;;
			esac
			case $1 in
			--?*=*)
				OPTARG=$1
				shift
				eval 'set -- "${OPTARG%%\=*}" "${OPTARG#*\=}"' ${1+'"$@"'}
				;;
			--no-* | --without-*) unset OPTARG ;;
			-[e]?*)
				OPTARG=$1
				shift
				eval 'set -- "${OPTARG%"${OPTARG#??}"}" "${OPTARG#??}"' ${1+'"$@"'}
				;;
			-[h]?*)
				OPTARG=$1
				shift
				eval 'set -- "${OPTARG%"${OPTARG#??}"}" -"${OPTARG#??}"' ${1+'"$@"'}
				OPTARG=
				;;
			+*) unset OPTARG ;;
			esac
			case $1 in
			'-e' | '--encode-type')
				[ $# -le 1 ] && set "required" "$1" && break
				OPTARG=$2
				case $OPTARG in raw | base64 | urlencode) ;;
				*)
					set "pattern:raw | base64 | urlencode" "$1"
					break
					;;
				esac
				encode="$OPTARG"
				shift
				;;
			'-h' | '--help')
				usage_setenv
				exit 0
				;;
			--)
				shift
				while [ $# -gt 0 ]; do
					REST="${REST} \"\${$((OPTIND - $#))}\""
					shift
				done
				break
				;;
			[-+]?*)
				set "unknown" "$1"
				break
				;;
			*)
				REST="${REST} \"\${$((OPTIND - $#))}\""
				;;
			esac
			shift
		done
		[ $# -eq 0 ] && {
			OPTIND=1
			unset OPTARG
			return 0
		}
		case $1 in
		unknown) set "Unrecognized option: $2" "$@" ;;
		noarg) set "Does not allow an argument: $2" "$@" ;;
		required) set "Requires an argument: $2" "$@" ;;
		pattern:*) set "Does not match the pattern (${1#*:}): $2" "$@" ;;
		notcmd) set "Not a command: $2" "$@" ;;
		*) set "Validation error ($1): $2" "$@" ;;
		esac
		option_error "$@" >&2 || exit $?
		echo "$1" >&2
		exit 1
	}
	usage_setenv() {
		cat <<'GETOPTIONSHERE'
Usage:
  w3maction [OPTION]... setenv VARIABLE_NAME [SUB_OPTION]...

Sub options:
  -e,     --encode-type encode 
  -h,     --help              このヘルプを表示して終了する
GETOPTIONSHERE
	}

	parse_setenv ${@+"${@}"}
	eval "set -- ${REST}"

	case "${encode}" in
	'base64') value=$(printf '%s' "${value}" | base64 | tr -d '\n') ;;
	'urlencode') value=$(printf '%s' "${value}" | urlencode) ;;
	esac

	org_lc httpresponse \
		-H 'W3m-control: BACK' \
		-H "W3m-control: SETENV ${1}=${value}"
	;;
'yank')
	printf '%s' "${value}" | org_lc sh -c -- "${*}" 'sh' || :

	org_lc httpresponse -H 'W3m-control: BACK'
	;;
esac
