一括表示

− 野ざらし言 −

[5506] コピー&移動

キャロル 2024/02/22(Thu) 21:19
DosBox でVzを起動している場合の質問です。
ファイラー画面「F」で、コピーやファイル移動をする問題です。ソフトは、zcopy です。ファイルを1つだけ選択していると、コピーや異動が可能です。ところが、複数ファイルを選択してコピーや移動を指示すると、以下のようになってできません。

c:\>zcopy @FILES.$$$ G:\
File not found
c:\vz

 これは仕様なのでしょうか。

[5507] Re: コピー&移動

めざら 2024/02/22(Thu) 22:14
[5506]へのコメント http://mezala.la.coocan.jp/
最近はすっかり長いファイル名を扱える rcp32 ばかり使っていて,zcopy は使っていなかったために,この現象にはまったく気付いていませんでした。

わたしの dosvaxj3 環境では,次のようなコマンドで表示されています。
[VZ]<C:\VZ>ZCOPY /v @\FILES.$$$ C:\HOGE
File not found

どうやら,レスポンスファイル Files.$$$ の作成される場所が問題ですね。

VTDOS 環境では,次のように展開されます。
[VZ]<C:\VZ>ZCOPY /v @C:\windows\temp\FILES.$$$ C:\HOGE

つまり,作業パスが認識されていないようですね。両者の違いはドライブのマウント手順の違いと思われるわけですが,VTDOS の展開を見ると環境変数 TEMP がそのまま通っているのに対し,dosvaxj3 は通っていないようです。

SET コマンドで環境変数を確認すると,TEMPは設定済となっているのですが何故か展開されないですね。(この辺りの情報は見つからない)

わたしの手元と環境が異なる可能性も高いので,まずは順序をたどって検証してみましょう。わたしも一緒に学習させていただきます。

まず,コマンドラインで SET を実行して,環境変数のリストを見てください。
TEMP=◯◯◯◯◯◯◯
……という項目がきっとあると思います。

[5508] Re^2: コピー&移動

konno 2024/02/22(Thu) 22:54
[5507]へのコメント
> まず,コマンドラインで SET を実行して,環境変数のリストを見てください。
> TEMP=◯◯◯◯◯◯◯
> ……という項目がきっとあると思います。

VZが参照するのは、TMP だと思います。
私の環境は

TMP=C:\TMP

としていて、ZCOPY は dosvaxj3 環境で複数ファイルが正常にコピーされます。


追記

環境変数 TMP はマニュアルP29 に記述ありました。
Windowsが TEMP を使用するので、両方必要です。

TMPが無い場合はVZ起動時のカレントに一時ファイルが作られるようです。
カレントを移動すると誤動作するのでしょう。

[5509] Re^3: コピー&移動

めざら 2024/02/23(Fri) 10:39
[5508]へのコメント http://mezala.la.coocan.jp/
konno さん,追記もありがとうございます。無事に解決しそうです。
(dosbox の説明にはないところなので,まだ確信はありませんが……)

システムの詳細設定から環境変数を確認したところ,ユーザの環境変数とシステム環境変数の両方に TEMP も TMP も参照先同一で設定されていましたが,dosvaxj3 からは一部のみ参照していたようです(少なくとも set コマンドでの表示では)。

dosboxj.conf の [autoexec] セクションに……
set TMP=c:\windows\temp
……を書き加えたところ,レスポンスファイルが正常に参照されるようになりました。

と言うことで,キャロルさん
上記の通り,設定してみてください。

なお,VTDOS でも正常にレスポンスファイルが参照されるよう,システムの詳細設定から環境変数を念の為に確認してみてください。ここはお渡しした SD に入っていないところですので,個別の環境設定に従いますから。

[5510] Re^4: コピー&移動

キャロル 2024/02/23(Fri) 10:57
[5509]へのコメント
konnoさん
 めざらさん

 ありがとうございます。
 複数ファイルのコピーが、問題なくできるようになりました。
 すっきりした気持ちで、仕事に取りかかれます。
 仕事終わりのバックアップが、たいへん楽になりました。

[5511] Re^2: コピー&移動

キャロル 2024/02/23(Fri) 15:21
[5507]へのコメント
めざらさん

rcp32

というのがあるんですね。
さっそく探してダウンロードしてみました。
説明通りにVzに組み込んでみたのですが、シンタックスエラーとなりました。
ちなみに、dosbox のコマンドラインから

rcp32

と打ち込むと、

This program must be run under Win32

そこで次に、試しに、

rcp

と打ち込むと、スイッチの説明が表示され、最後に

This System is unable to Use MS-DOS Function for LongFileName

と表示されました。
dosbox では、使えないということでしょうか。

[5512] Re^3: コピー&移動

めざら 2024/02/23(Fri) 17:36
[5511]へのコメント http://mezala.la.coocan.jp/
えーと(^^;,そのへんは Si さんの説明を熟読していただきたく……

簡単に言うと,RCP は DOS 汎用ですが Win9x系の DOS 窓で長いファイル名を扱え,RCP32 は WinNT 以降の 32ビット環境のコンソールアプリケーションです。

VTDOS 環境では 32ビットのプログラム(RCP32/zcpy32)も実行できます。
dosbox 環境では 16ビットのプログラム(RCP/zcopy)が実行できます。

そろそろ,これらの違いを認識してくださいね。お願い。


なお,シンタックスエラーになる場合の設定やコマンドラインでの動きなどを書いていただかないと,何もわかりません。

[5513] Re^4: コピー&移動

キャロル 2024/02/23(Fri) 17:49
[5512]へのコメント

 めざらさん

 rcp.txt で以下のように書かれています。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■MS-DOS 版 RCP での LFN の展開について

MS-DOS の拡張ファンクションを利用していますが、Windows NT ではこの拡張フ
ァンクションに対応していないらしいので本プログラムでは LFN を利用できま
せん。Windows98 は未確認ですがたぶん大丈夫だと思います。

RCP をパラメーターなしで実行すると下のように簡単な使用方法が表示されます
が、ここで拡張ファンクションが利用できる環境かどうかを確認できます。

A:\>RCP
expand Rename & Copy RCP v2.15.0 (MS-DOS) 1999-2000 (c) by Si
[Usage] RCP.EXE [/opt] [=format] <srcpath|@filelist> [[skipmask]] [dstdir]
command | RCP.EXE [/opt] [=format] @ [[skipmask]] [dstdir]
/A: *Attribute copy /B: create Backup file
/D: Date search(/Ddate1, /Ddate1-, /Ddate1-date2, /D-date2)
date1,2 formats are yyyymmdd or yyyymm or mmdd
/DEL: Delete src file
/DEL!: move to \TRASH$$$ /DEL+: move to \RECYCLED(WIN32)
/F: extension rename Forth /C: *Check drivesize
/I: Incremental copy (append srcfile to dst's samenamefile)
/L: Lower filename /L+: upper filename
/U: Update copy /M: Move (delete source file)
/O: Overwrite only /N: No overwrite
/S: Subdirectories struct /G: Gather
/S+, /G+: matching key directory of src and dst
/E: Echo mode (not execute) /Y: always 'YES' to confirmation
/CHECK: dsp parameter and confirm execution
=?: usgae for rename format /V: Verbose mode
/V+: verbose mode(powered) /V-: not verbose mode
skipmask: [dir dir ...](skipdir) or [.ext.ext.ext ...](skipfile)
This System is unable to Use MS-DOS Function for LongFileName

これは MS-DOS6.2 上で実行した場合の表示です。 Windows95 の DOS 窓などの
LFN 対応拡張ファンクションの利用できる環境では、最後の行が

「This System is able to Use MS-DOS Function for LongFileName
^^^^
のメッセージに変わります。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
 dosbox のコマンドラインでは、
 MS-DOS6.2
 の場合と同じ表示になるので、使えないのかと思いましたが、どうなんでしょうか。

[5514] Re^5: コピー&移動

めざら 2024/02/23(Fri) 20:33
[5513]へのコメント http://mezala.la.coocan.jp/
使えますよ。ちゃんとオプション一覧も表示されていますね。
ただ,長いファイル名を扱えるかどうかは別の話ということになります。

dosbox はあくまでも DOS のエミュレータであって,Win9x 系の DOS 窓とは別です。

DOS 汎用のプログラムですから実行に問題はありませんが,DOS 拡張ファンクションの使える環境でなければ長いファイル名を扱うことはできません。

でも,長いファイル名を扱えないことは「使えない」ということではありませんよね。

dosbox じたいは長いファイル名を扱えるのにな〜……とわたしも思いますが,DOS 拡張ファンクションとは別の手法で実現しているのでしょう。

[5515] Re^6: コピー&移動

キャロル 2024/02/23(Fri) 21:20
[5514]へのコメント
 そうですか。
 ということは zcopy と同じですね。
 難問(?)は回避して、zcopy でしばらく仕事をしますね。

[5518] Re^7: コピー&移動

めざら 2024/02/23(Fri) 22:13
[5515]へのコメント http://mezala.la.coocan.jp/
>  ということは zcopy と同じですね。

それが,同じではないんですよ〜

バックアップコピーというこの上なく素晴らしい機能があるのですよ。
VZ マクロで,連番バックアップ保存機能を持ったものがありますが,これに似た機能があります。

バックアップ目的なら絶対におすすめですよ!

[5516] Re^5: コピー&移動

konno 2024/02/23(Fri) 21:39
[5513]へのコメント
>  dosbox のコマンドラインでは、
>  MS-DOS6.2
>  の場合と同じ表示になるので、使えないのかと思いましたが、どうなんでしょうか。

MS-DOS6.2 と同じということは
This System is unable to Use MS-DOS Function for LongFileName
        ^^^^^^
できない、という表示なのですよね。
作者の Siさんのサイトを見ると最新版は version 2.16.3 ですが

> [2003/10/24] 	2.16.3d+ RC1で DOS の LFN対応拡張ファンクションが
> 有効か無効かチェックする処理にバグがみつかりました。また他にも
> 挙動のおかしな部分も見つかっているので配布を中止します。既に
> ダウンロードされた方は利用を中止して下さい(Thanks としきさん)。

> 2003/10/19 	v2.16.3→2.16.3d+ RC1
> 	[RCP]
> ◇[その他] Windows の DOSプロンプトだけで行っていた LFN利用可否のチェック機能を
> 生DOS環境でも動作させるようにした。その結果、LFNをサポートするドライバが常駐して
> れば生 DOS上でも RCP の LFN機能が利用できるかもケースがある知れない。ただし、
> 作者自身は動作未確認   その他の仕様、機能、不具合は v2.16.3 そのままです。 

この 2.16.3d+ は生 DOS上でも RCP の LFN機能が利用できるかも、とあるので
もしかしたら DOSVAXJ3 でも LFN が使えるかもしれませんね。

としきさんがチェックされたようなので、もしかしてまだお持ちではないでしょうか。
もしもお持ちであればメールで送ってもらえるとありがたいです。>としきさん

だめなら Siさんの掲示板で要望してみるしかないかも。(^^;

[5517] Re^6: コピー&移動

としき 2024/02/23(Fri) 22:03
[5516]へのコメント http://toshiki.la.coocan.jp/
> もしもお持ちであればメールで送ってもらえるとありがたいです。>としきさん

当時のいきさつを全く覚えていません。これから捜索に入ります。
が、なんとなく、DCの会議室で話題に出ているのではないかなぁ。
みなさんの方で過去ログを検索していただくのが早いかも。
ちなみに私、今は酔いどれているので、明日まではあてにしないでください。

[5520] Re^7: コピー&移動

konno 2024/02/23(Fri) 23:58
[5517]へのコメント
> > もしもお持ちであればメールで送ってもらえるとありがたいです。>としきさん
> 当時のいきさつを全く覚えていません。これから捜索に入ります。
> が、なんとなく、DCの会議室で話題に出ているのではないかなぁ。
> みなさんの方で過去ログを検索していただくのが早いかも。
> ちなみに私、今は酔いどれているので、明日まではあてにしないでください。

ありがとうございます。
待っているだけでは何なので私も探してみたら、結構ありました。(^^;

1999/07/24 02:14 49,226 RCPO.EXE
2001/07/01 02:16 49,370 RCP16-1.EXE
2002/07/28 02:16 51,706 rcp16-2.exe
2001/07/01 02:16 89,600 RCP32.EXE

一番下は32ビット版ですね。
RCP16-2.EXE を実行してみたら
expand rename & copy RCP v2.16.3D (MS-DOS) 1999-2002 (c) by Si

これは・・・幻の最新版ではないですか! と一瞬思ったのですが、

> 2003/10/19 v2.16.3→2.16.3d+ RC1

最新版とは日付が違いました。(>_<)
これらの16ビット版を実行させてみたら
VTDOS と DOSVAXJ3 では LFNが使えないと出ましたが
MS-DOS Player では、使えると表示されました。
これはVZ高橋版のLFNチェックと同じ状況かもしれませんねぇ。

[5519] Re^6: コピー&移動

めざら 2024/02/23(Fri) 22:24
[5516]へのコメント http://mezala.la.coocan.jp/
なんかボタンの懸け違え的などんでん返しで構わないから,対応できるものにならないものかなぁ……なんて思っちゃいますね。

dosbox 側で LFN に対応しているのだから,何かしら方法があるのですよね。

環境の選択肢は多いほうがいいから,知らない間に出来てるといいなぁ……

もしかして判定ルーチンを殺したら出来ちゃったりして……
(まるで高橋版の LFN 対応的な……)

[5521] Re^7: コピー&移動

konno 2024/02/24(Sat) 00:06
[5519]へのコメント
> もしかして判定ルーチンを殺したら出来ちゃったりして……
> (まるで高橋版の LFN 対応的な……)

私もこれを疑っています。
#5520 で書きましたが

> これらの16ビット版を実行させてみたら
> VTDOS と DOSVAXJ3 では LFNが使えないと出ましたが
> MS-DOS Player では、使えると表示されました。
> これはVZ高橋版のLFNチェックと同じ状況かもしれませんねぇ。

確か VTDOSの LFN ルーチンは、NT系に合わせていると聞いたことがあります。
MS-DOS Player は、Win95系に合わせているのではないかと想像します。
ということは、DOSVAXJ3の作者様にお願いすれば・・・

[5522] Re^8: コピー&移動

めざら 2024/02/24(Sat) 08:09
[5521]へのコメント http://mezala.la.coocan.jp/
> ということは、DOSVAXJ3の作者様にお願いすれば・・・

え〜〜(^o^;

> Wengier Wu 氏による DOSBox-lfn の修正を取り込み、ロングファイルネームや

…と書かれているので,他に影響を及ぼすのではなかろうかと想像します。

お願いするなら,まず RCP の作者様にというのが筋ではないでしょうか。

[5523] DOSVAXJ3 は悪くない?

konno 2024/02/24(Sat) 16:10
[5522]へのコメント
> > ということは、DOSVAXJ3の作者様にお願いすれば・・・
> え〜〜(^o^;

顔が笑ってますよ。(^^;

> > Wengier Wu 氏による DOSBox-lfn の修正を取り込み、ロングファイルネームや
> …と書かれているので,他に影響を及ぼすのではなかろうかと想像します。

そうなんですが、オプションにしてもらえば行けると思います。(^^;

=== int_71A0.def ===

LFN が使えない場合(生DOS)の返り値は必ず AX=7100 CF=0 になる。
生DOS     AX == 7100  CF0
Win95/98系  AX != 7100  CF0
WinNT系    AX != 7100  CF?
LFNファンクションの返り値を、NT系でも CF=0 にすればどちらでも使える。

*m
80  ^\ "LFN? "
    ax$71A0,&i($21)		;LONG FILENAME - GET VOLUME INFORMATION
    &m(" AX=%04x  CF=%d",ax,r)	;AX71A0 をドライブ指定無しで呼んだ場合
    .
*

そう思ってこのマクロを DOSVAXJ3 で実行してみたら

AX=0000  CF=0

になりました。あれえ?  

RCP.EXE のソースを見てみたら、それっぽいルーチンを見つけました。
xdos.c  369行目

	Function 71A0h  ボリューム情報の取得
	int is_LFNsystem :	1 LFN サポート
				0     非サポート

	regs.x.ax = 0x71a0;
	regs.x.cx = 5;
	regs.x.dx = FP_OFF(drive);
	sregs.ds  = FP_SEG(drive);
	regs.x.di = FP_OFF(filesystem);
	sregs.es  = FP_SEG(filesystem);
	intdosx(&regs, &regs, &sregs);
/*	if(regs.x.bx & FS_LFN_APIS) */		ここを
	if(regs.x.ax != 0x7100)			これに変えてみた
	{
		return 1;
	}else
	{
		return 0;
	}

もしかして、BXの値で判断しているのかしら。
変更して Turbo C (Tc201) でエラー箇所をコメントにしてコンパイルしたら
LFNが使える、というメッセージが出ました。
ただこの実行ファイルは不完全なようで、コピーなどが出来ません。

やっぱり Siさんに相談かな。
メールがわからないので、掲示板に書いてみようと思います。

[5524] Re: DOSVAXJ3 は悪くない?

konno 2024/02/24(Sat) 16:48
[5523]へのコメント
> やっぱり Siさんに相談かな。
> メールがわからないので、掲示板に書いてみようと思います。

Siさんの掲示板に書こうとしましたが、書けなくなっていました。(>_<)
メールの欄も使えなくなっています。

どなたか Siさんのメールアドレスを知っていたらメールで教えてください。
または、BCCで RCP.EXE をコンパイル出来る環境をお持ちの方がいたら
メールください。
m(__)m

[5525] Re^2: DOSVAXJ3 は悪くない?

めざら 2024/02/24(Sat) 17:50
[5524]へのコメント http://mezala.la.coocan.jp/
メールの欄って,このフォームじゃなくて?
http://dmz.xrea.jp/dahlia/mail/mail.html

[5526] Re^3: SIさんのメルアドは

konno 2024/02/24(Sat) 19:32
[5525]へのコメント
> メールの欄って,このフォームじゃなくて?
> http://dmz.xrea.jp/dahlia/mail/mail.html

めざらさん、ありがとうございます。
サイトのメール欄からだと、404 になってしまうのです。

それで、書き込んで送信ボタンを押したら、
サイトが見つかりません
となって、結局送れませんでした。(>_<)

SIさんのメールアドレスって、まだ使えるんでしょうか。

[5527] Re^4: SIさんのメルアドは

shadow 2024/02/24(Sat) 20:33
[5526]へのコメント
> > メールの欄って,このフォームじゃなくて?
> > http://dmz.xrea.jp/dahlia/mail/mail.html
>
nifty退会してもメールアドレスを維持する方法は提供されてたのでダメもとでソースのメールアドレスに送れば何らかの反応があると思います。

[5528] Re^5: SIさんのメルアドは

konno 2024/02/24(Sat) 21:20
[5527]へのコメント
> nifty退会してもメールアドレスを維持する方法は提供されてたのでダメもとでソースのメールアドレスに送れば何らかの反応があると思います。

おお、流石 shadowさん。
早速 niftyIDのアドレスで送ってみました。
宛先不明とかで返ってきてはいないので、とりあえず送れたようです。
ありがとうございます。

[5529] Re^6: コピー&移動

としき 2024/02/25(Sun) 00:47
[5516]へのコメント http://toshiki.la.coocan.jp/
だんだん思い出してきた。

> > [2003/10/24] 2.16.3d+ RC1で DOS の LFN対応拡張ファンクションが
> > 有効か無効かチェックする処理にバグがみつかりました。また他にも
> > 挙動のおかしな部分も見つかっているので配布を中止します。既に
> > ダウンロードされた方は利用を中止して下さい(Thanks としきさん)。

たしかこれ、Siさんの旧掲示板になにやら書いたような記憶があります。
が、今ではアクセスできないようですね。
WebArchiveでも見れないようだし、Siさん本人がログを保存していない限り、もはや電子の藻屑かと。

> この 2.16.3d+ は生 DOS上でも RCP の LFN機能が利用できるかも、とあるので

この部分は、その直上でも引用されている

> > ◇[その他] Windows の DOSプロンプトだけで行っていた LFN利用可否のチェック機能を
> > 生DOS環境でも動作させるようにした。その結果、LFNをサポートするドライバが常駐して
> > れば生 DOS上でも RCP の LFN機能が利用できるかもケースがある知れない。ただし、

ここの部分に関係しています。つまり、LFNサポートドライバと同様のファンクションコールのサポートが必要、ということです。
なお、この部分については、nifty:FGALDC/MES/13/9705 からのツリーで話題となっています。

> もしもお持ちであればメールで送ってもらえるとありがたいです。>としきさん

手元にはWin32環境なんで、RCP32しかありませんでした。
それも
1999/07/24(Sat) v2.14.1
などという古いやつだけ。
16bit版のRCPはおそらく、実家のPC-98のHDDの中だけだと思う。
でも、実家で整理済みのソフトは
http://toshiki.la.coocan.jp/computer/library/ls-lr.txt
にまとめてあるけど、これをみると、16bit版のRCPはrcp2141.lzhとなっているので、バージョン番号的には同じ値。本当に新しいバージョンを持っているとすると、テスト版という位置づけで、整理済みのフォルダに入れていないのだと思う。あるいは、バグあり通知を受けて消してしまったとか。

[5530] 環境変数 WINDIR で出来た!

konno 2024/02/25(Sun) 17:29
[5529]へのコメント
> たしかこれ、Siさんの旧掲示板になにやら書いたような記憶があります。
> が、今ではアクセスできないようですね。
> WebArchiveでも見れないようだし、Siさん本人がログを保存していない限り、もはや電子の藻屑かと。

現行掲示板もスパムが酷くて止めてるようだし、メールも駄目だと望み薄ですね。残念です。
niftyIDでメールしましたが、IDメールは迷惑メール扱いされていそうですし。

> なお、この部分については、nifty:FGALDC/MES/13/9705 からのツリーで話題となっています。

ありました、これですね。

> 09742/09921 xxxxxxxx としき RE:DOSLFN is not LFNDOS
> (13) 03/10/15 23:15 09738へのコメント
>
> RCP の16ビット版あたりでできませんかね。
>
> (ゴソゴソ)
>
> おぉ、なんかできてしまいました。
> 環境変数 WINDIR または WINBOOTDIR のどちらか(両方でもOK)に、何でもい
> いからダミーの値を設定しておけば、DOSLFN 常駐時に長い名前のままファイルの
> コピーができました。
> そうか、そういうOSの機能判定をやっているのね。

環境変数 WINDIR または WINBOOTDIR のどちらかを設定すれば使えたのですね。
この話をどこかで見たと思ってDOCを見ても見つけられなかったので。

#5523 に書きましたが、判定ルーチンと思しき所を見つけたので、コンパイル出来れば何とかなりそうな気が。

> 16bit版のRCPはおそらく、実家のPC-98のHDDの中だけだと思う。
> 16bit版のRCPはrcp2141.lzhとなっているので、バージョン番号的には同じ値。

これってソースは無いですよね。というのは、古いVerは TurboC でコンパイルしていたらしいので
もしかしたら TC201 で出来るかもと思ったのです。

> あるいは、バグあり通知を受けて消してしまったとか。

可能性は高いですね、バグがあるということは、もしあったとしても動作テストNGかもですね。
ということで、テスト版はあきらめます。今なんとかコンパイル出来ないかやっています。
調べてくださってありがとうございました。

というか、環境変数 WINDIR を試さなくては・・・・

おお、DOSVAXJ3 の dosboxj.conf に
SET WINDIR=LFN
と入れたら、LFNのコピー出来ました!
これでとりあえず使えそうです。
ありがとうございました。

[5531] Re: 環境変数 WINDIR で出来た!

めざら 2024/02/25(Sun) 21:43
[5530]へのコメント http://mezala.la.coocan.jp/
> SET WINDIR=LFN

おおっ!! dosbox の RCP で LFN がコピーできる!!

> キャロルさん! 朗報!朗報!

あれ? 難題ってなんだい?
(いや,難問だから)

[5532] Re^2: 環境変数 WINDIR で出来た!

としき 2024/02/25(Sun) 23:25
[5531]へのコメント http://toshiki.la.coocan.jp/
> おおっ!! dosbox の RCP で LFN がコピーできる!!

結構、古い情報も役に立つものですね。温故知新、というか。
こういうものを保存しておいて下さった、文太さまさま、といったところですね。

[5534] Re^2: 環境変数 WINDIR で出来た!

キャロル 2024/02/26(Mon) 17:36
[5531]へのコメント
> > SET WINDIR=LFN
>
> おおっ!! dosbox の RCP で LFN がコピーできる!!
>
> > キャロルさん! 朗報!朗報!


 めざらさん
 後日、東京に帰ってから、初歩的な質問をします。
 いま、93歳の母の様子を見に、海なし県に来ています。
 
 
 

↑ このページの先頭