    page    96,132
;§∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞§
;§                                                                          §
;§              ディレクトリエントリ  ソート  ユーティリティ                §
;§                                                                          §
;§                                     ＤＳＯＲＴ．ＥＸＥ  Ｖｅｒ１.１１    §
;§                                                                          §
;§                   Copyright (C) by 福地 邦雄 1991. All rights reserved.  §
;§∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞§
    .MODEL  SMALL,C
;
    DPB struc
drivenumber     db      ?       ;ドライブ番号
unitnumber      db      ?       ;ユニット番号
sectorlength    dw      ?       ;セクタ長
sectorperalloc  db      ?       ;１クラスタ当たりのセクタ数−１
shiftcount      db      ?       ;１クラスタ当たりのセクタ数の２のべき乗
reservedsector  dw      ?       ;先頭のリザーブセクタ数
numberoffat     db      ?       ;ＦＡＴ数
directoryentry  dw      ?       ;ルートディレクトリのエントリ数
datastartsector dw      ?       ;データ領域開始セクタ番号
datasector      dw      ?       ;最大クラスタ数（全クラスタ数＋１）
fatsector       db      ?       ;１ＦＡＴ当たりのセクタ数
directorystart  dw      ?       ;ディレクトリ領域開始セクタ番号
todeviceheader  dd      ?       ;デバイスヘッダへのポインタ
mediadescriptor db      ?       ;メディアディスクリプタ
diskchange      db      ?       ;ディスクの交換可能属性
tonextdpb       dd      ?       ;次のＤＰＢへのポインタ
currentcluster  dw      ?       ;カレントクラスタ
reserved        dw      ?       ;リザーブ
    DPB ends
;
YES     equ 1
NO      equ 0
HEAD    equ 0
BS      equ 8
TAB     equ 9
CR      equ 0dh
LF      equ 0ah
;
    .data
;
    public  sweep,  sortexec,recursive,dirgather,subsearch
    public  dta,    srchname,namebuff,namebuffsiz
    public  dirtype,fattype,attribute,clustcount,clustsect,entrycount
    public  fatdrive,driveno,clustsize,fatsize,dirsize,sectcount
    public  fatbuff,dirbuff,sortbuff,sortcount,drvinf,movecount,adjustroot
    public  sortfuncs,subchain,wildcard,pathbuff
    public  usagemsg,msgsize,veralarm,vermsgsz
    public  procs,dirover,fatover,bothmsg,sortmsg,movemsg,nothmsg
;
sweep       dw  YES     ; ソート対象外のエントリを先頭に集める
sortexec    dw  YES     ; ソートを行う
recursive   dw  NO      ; サブディレクトリを再帰的に処理する
dirgather   dw  HEAD    ; サブディレクトリを集める方向
subsearch   dw  NO      ; 再帰処理内で '.','..'を含まないように判断
attribute   dw  ?       ; ソート対象とするファイル属性を反転したもの
;
dta         dd  ?       ; ディレクトリサーチ用Disk Transfer Address
srchname    dd  ?       ; ディレクトリサーチ名
namebuff    dd  ?       ; ディレクトリ名バッファ
namebuffsiz dw  4096    ; ディレクトリ名バッファサイズ
;
dirtype     dw  ?       ; ディレクトリタイプ  ルート:サブ
fattype     dw  ?       ; ＦＡＴタイプ  12bit:16bit
clustsect   dw  ?       ; １クラスタのセクタ数
sectcount   label   word    ; ルートディレクトリのセクタ数
clustcount  dw  ?       ; サブディレクトリのクラスタ数
clustsize   dw  ?       ; １クラスタのバイトサイズ
entrycount  dw  ?       ; ディレクトリの最大エントリ数
;
fatdrive    dw  -1      ; ＦＡＴドライブ番号
driveno     dw  -1      ; ＤＰＢドライブ番号
fatsize     dw  ?       ; ＦＡＴサイズ
dirsize     dw  ?       ; ディレクトリサイズ
fatbuff     dw  ?       ; ＦＡＴバッファのセグメント
dirbuff     dw  ?       ; ディレクトリバッファのセグメント
sortbuff    dw  ?       ; ソートバッファのセグメント
sortcount   dw  ?       ; ソート対象エントリ数
movecount   dw  ?       ; 先頭詰め対象エントリ数
;
drvinf      DPB <>      ; ＤＰＢのコピー
;
adjustroot  dw  ?       ; ルートエントリ数を実エントリ数でチェックする
;
sortfuncs   dw  33 dup(?)   ; ソート用比較関数のリスト
subchain    dw  129 dup(?)  ; サブディレクトリのＦＡＴチェイン
;
wildcard    db  '\*.*',0    ; ワイルドカード
pathbuff    db  96 dup(?)   ; ディレクトリサーチ用パス名バッファ
;
procs   db  '処理中',TAB,TAB,'    $'
dirover db  'ﾃﾞｨﾚｸﾄﾘが64KB以上',CR,LF,'$'
fatover db  'ＦＡＴが64KB以上',CR,LF,'$'
;
bothmsg db  'ｴﾝﾄﾘをｿｰﾄ/移動',CR,LF,'$'
sortmsg db  'ｴﾝﾄﾘをソート',CR,LF,'$'
movemsg db  'ｴﾝﾄﾘを移動',CR,LF,'$'
nothmsg db  '対象ｴﾝﾄﾘなし',CR,LF,'$'
;
veralarm    db  'このバージョンのMS-DOSはサポートしていません',CR,LF
vermsgsz    =   $-offset veralarm
;
usagemsg    label   byte    ; ヘルプメッセージ
db  TAB,"  ディレクトリ エントリ ソート ユーティリティ 1991/01/01 Ver1.11",CR,LF
db "                          Copyright (C) by 福地 邦雄 1991. All rights reserved.",CR,LF
db  "使い方:DSORT  <ｵﾌﾟｼｮﾝ>  ﾃﾞｨﾚｸﾄﾘｰﾊﾟｽ名･･･",CR,LF
db  TAB,"-?  -->ソート条件指定        +?  -->ソート対象選択",CR,LF
db  "   -f -F  ﾌﾙﾈｰﾑ   11文字",TAB,"+g +G  ｻﾌﾞﾃﾞｨﾚｸﾄﾘを先頭(小文字)又は末尾(大文字)",CR,LF
db  "   -n -N  ﾌｧｲﾙﾈｰﾑ  8文字",TAB,"       に寄せる(無指定時はﾌｧｲﾙと同格に扱う)",CR,LF
db  "   -e -E  拡張子   3文字",TAB,"+t     ﾂﾘｰ構造の下部まで再帰的にｿｰﾄ",CR,LF
db  "   -s -S  ﾌｧｲﾙｻｲｽﾞ",TAB,TAB,"+a +d +v +s +h +r   各属性ｴﾝﾄﾘを対象に加える",CR,LF
db  "   -d -D  最終更新日付",TAB,TAB,"    a=ｱｰｶｲﾌﾞ d=ﾃﾞｨﾚｸﾄﾘ v=ﾎﾞﾘｭｰﾑﾗﾍﾞﾙ s=ｼｽﾃﾑﾌｧｲﾙ",CR,LF
db  "   -t -T  最終更新時刻",TAB,TAB,"    h=隠しﾌｧｲﾙ r=ﾘｰﾄﾞｵﾝﾘｰ     初期指定値= +adr",CR,LF
db  "デフォルト= -f (ﾌﾙﾈｰﾑ･昇順)     +n     ｿｰﾄを行わない 削除ｴﾝﾄﾘ分を詰めるだけ",CR,LF
db  TAB,TAB,TAB,TAB,"+f     ｿｰﾄ対象でないｴﾝﾄﾘを先頭に詰めない",CR,LF
db  "小文字=昇順  大文字=降順      複数指定可能で、指定した順番に比較する｡",CR,LF
db  "+a〜+rの指定は ﾄｸﾞﾙｽｲｯﾁ になっていて、2回指定するとｿｰﾄ対象から外れる｡",CR,LF
db  "ﾃﾞｨﾚｸﾄﾘｰﾊﾟｽ名は必ず指定すること｡  ｶﾚﾝﾄの場合は'.'を、ﾙｰﾄの場合は'\'を使用する｡",CR,LF
msgsize     =   $-offset usagemsg
;
    .stack
;
    end
