#!/usr/local/bin/wish4.2jp
proc set_vendor {} {
    .f2.f1.vendor insert end "ץ"
    .f2.f1.vendor insert end "Υ"
    .f2.f1.vendor insert end "HP"
    .f2.f1.vendor insert end "ץ"
    .f2.f1.vendor insert end "ŵ"
    .f2.f1.vendor insert end "ŵ"
    .f2.f1.vendor insert end "GSɥ饤" 
}

proc set_type {x y} {
    set n [.f2.f1.vendor index @$x,$y]
    set_typen $n
}

proc set_typen {n} {
    global gs

    set vendor [.f2.f1.vendor get $n]
    .f2.f1.type delete 0 end
    switch $vendor {
        "ץ" {
            foreach name {
            	"PM-9000C" "PM-7000C" "PM-5000C" "PM-3300C" "PM-3000C" "PM-2000C" \
            	"PM-800C" "PM-800DC" "PM-770C" "PM-760C" "PM-750C" \
            	"PM-670C" "PM-700C" "PM-600C" "MJ-8000C" \
                "MJ-6000C" "MJ-5100C" "MJ-5000C" "MJ-3000CU" "MJ-930C" "MJ-910C" "MJ-900C" \
                "MJ-830C" "MJ-810C" "MJ-700V2C" "MJ-3000C" "MJ-800C" "MJ-520C" \
                "MJ-510C" "MJ-520C" "MJ-1100" "MJ-1050" "MJ-1050V2" "MJ-450" \
                "LP-2000" "LP-3000" "LP-7000" "LP-7000G" "LP-1000" "LP-1500" "LP-1500S" \
                "LP-8000" "LP-8000S" "LP-8000SE" "LP-8000SX" "LP-800" "LP-1600" \
                "LP-1700" "LP-1700S" "LP-1800" "LP-8200" "LP-8300" "LP-8300S" "LP-8400" \
                "LP-8500" "LP-8600" "LP-9000" "LP-9200" "LP-9200S" "LP-9200SX"} {
                .f2.f1.type insert end $name
            }
        }
        "Υ" {
            foreach name {
            	"BJ-F6000" "BJ-F600" "BJ-F200" "BJ-F100" \
            	"BJC-880J" "BJC-680J" "BJC-80v" "BJC-50v" "BJC-35v" "BJC-35vII" \
            	"BJC-700J" "BJC-610J" "BJC-600J" "BJC-455J" "BJC-465J" "BJC-400J" \
            	"BJC-410J" "BJC-420J" "BJC-430J" "BJC-440J" "BJ-10v" "BJ-15v" \
            	"LBP-2160" "LBP-2040" "LBP-2030" "LBP-850" "LBP-840" "LBP-930" "LBP-930EX" \
            	"LBP-830" "LBP-750" "LBP-740" "LBP-730" "LBP-720" "LBP-450" \
            	"LBP-430" "LPB-310" "LBP-320" "LBP-320Pro" "LBP-A309G II" "LBP-A304G II"\
            	"LBP-A304E" "LBP-A304E II" "LBP-B404G" "LBP-B404G II" "LBP-B406E" \
            	"LBP-B406E II" "LBP-B406D(lips3)" "LBP-B406S(lips3)" "LBP-A404F" \
            	"LBP-A404G II" "LBP-A405Jr." "LBP-A404E" "LBP-A404(lips3)"} {
                .f2.f1.type insert end $name
            }
        }
        "HP" {
            foreach name {
            	"DJ-970Cxi" "DJ-955C" "PS-P1100" "PS-P1000" "DJ-815C" \
            	"DJ-1600C" "DJ-1120C" "DJ-1100C" "DJ-855C" "DJ-850C" "DJ-694C" \
            	"DJ-690C" "DJ-680C" "DJ-890C" "DJ-895Cxi" "DJ-880C" "DJ-672C" "DJ-670C" \
            	"DJ-1000C" "DJ-820C" "DJ-720C" "DJ-712C" "DJ-710C" \
            	"LaserJet4" "LaserJet4L" "LaserJet Plus" "LaserJet5" "LaserJet5L" \
            	"LaserJet6" "LaserJet6L" } {
                .f2.f1.type insert end $name
            }
        }
        "ץ" {
            foreach name {"MD-5000" "MD-4000J" "MD-2000J" "MD-1500J" "MD-1300J" "MD-1000J"} {
                .f2.f1.type insert end $name
            }
        }
        "ŵ" {
            foreach name {"PICTY180" "PICTY700" "PICTY900" "PICTY4000" "PICTY920G" \
                "MultiWriter2400X" "MultiWriter2650" "MultiWriter2250" \
                "MultiWriter2050" "MultiWriter1400X" } {
                .f2.f1.type insert end $name
            }
        }
        "ŵ" {
            foreach name {"MICROLINE-12n" "MICROLINE-620CL" "MICROLINE-600CL"} {
                .f2.f1.type insert end $name
            }
        }
        "GSɥ饤" {
            foreach name {"mjcxxx" "escp" "bjc600" "bj10v" "cdj1600" "cdj850" \
                "cdj880" "cdj890" "cdj670" "mdxxx" "lp2000" "escpage" "epag" \
                "lips4" "lips3" "ljet4 lj4dith" "lj5mono lj5gray" \
                "ljetplus" "npdl" "picty180" "picty180hi" "pbm2ppa" } {
                .f2.f1.type insert end $name
            }
        }
    }
    if {$gs(vendor) != $vendor} {
        .f0.set configure -state disabled
    }
    set gs(vendor) $vendor
}

proc set_printer {x y} {
    global gs

    set n [.f2.f1.type index @$x,$y]
    set gs(localattr) ""
    set_printern $n
}

proc make_scale {wd title name f t m digit interval reso} {
    frame $wd
    pack $wd -side top -fill x
    label $wd.f0 -text $title
    scale $wd.f1 -from $f -to $t -digit $digit -tickinterval $interval \
        -resolution $reso -sliderlength 20 -orient horizontal -variable gs($name) -length 256
    pack $wd.f0 $wd.f1 -side left
    $wd.f1 set $m
}

proc make_radio {wd title name texts values n} {
    frame $wd
    pack $wd -side top -fill x
    label $wd.f0 -text $title
    pack $wd.f0 -side left
    set i 0
    foreach text $texts {
    	set value [lindex $values $i]
    	incr i
        radiobutton $wd.f$i -text $text -variable gs($name) -value $value
        pack $wd.f$i -side left
    }
    $wd.f$n select
}

proc set_mjc {} {
    global gs conffile uppfile

    set device ""
    foreach devs $gs(devlist) {
        if {$gs(model) == "MJ-6000C" && $devs == "mj6000c"} {
            set device $devs
            break
        }
        if {$gs(model) == "MJ-8000C" && $devs == "mj8000c"} {
            set device $devs
            break
        }
        if {$devs == "mj700v2c"} {
            set device $devs
        }
    }
    if {$device == ""} {
        switch $gs(reso) {
            "180" {set device "mjc180"}
            "360" {set device "mjc180"}
            "720" {set device "mjc720"}
        }
    }
    if {$gs(reso) == "1440x720"} {
    	set fd [open $uppfile "w"]
    	puts $fd "-supModel=\"Epson PM, 1440x720DpI, Special Paper\""
        puts $fd "-sDEVICE=uniprint\n-dNOPAUSE\n-dSAFER\n-dupColorModel=/DeviceCMYKgenerate"
        puts $fd "-dupRendering=/ErrorDiffusion\n-dupOutputFormat=/EscP2\n-r1440x720"
        puts $fd "-dupMargins=\"{ 9.0 39.96 9.0 9.0}\""
        puts $fd "-dupWeaveYPasses=6\n-dupOutputPins=20"
        puts $fd "-dupWeaveYFeeds=\"{20 20 19 22 16 23}\""
        puts $fd "-dupWeaveInitialYFeeds\"{1  1  1  1  1 19}\""
        puts $fd "-dupWeaveInitialPins=\"{  4 20  7 17 10 13}\""
        puts $fd "-dupBeginPageCommand=\"<"
        puts $fd "   1b40   1b40"
        puts $fd "   1b2847 0100 01"
        puts $fd "   1b2855 0100 05"
        puts $fd "   1b2843 0200 0000"
        puts $fd "   1b2863 0400 0000 0000"
        if {$gs(direct) == 1} {
             puts $fd "   1b5500"
        } else {
             puts $fd "   1b5501"
        }
        puts $fd "   1b2865 0200 0002"
        puts $fd "   1b284b 0200 0002"
        puts $fd ">\""
        puts $fd "-dupAdjustPageLengthCommand\n-dupAdjustTopMarginCommand"
        puts $fd "-dupAdjustBottomMarginCommand\n-dupEndPageCommand=\"(\\033@\\014)\""
        puts $fd "-dupAbortCommand=\"(\\033@\\15\\12\\12\\12\\12    Printout-Aborted\\15\\014)\""
        close $fd
        set fd [open $conffile "w"]
        set_common $fd
        puts $fd "$gs(reso) $gs(color) $gs(density) $gs(cyan) $gs(magenta) $gs(yellow) $gs(black) $gs(mw) $gs(dot) $gs(direct)"
        set com "@$uppfile -sPAPERSIZE=$gs(size)"
        puts $fd $com
        close $fd
    } else {
        set direct $gs(direct)
        incr direct
        set fd [open $conffile "w"]
        set_common $fd
        puts $fd "$gs(reso) $gs(color) $gs(density) $gs(cyan) $gs(magenta) $gs(yellow) $gs(black) $gs(mw) $gs(dot) $gs(direct)"
        set com "-sDEVICE=$device -sPAPERSIZE=$gs(size) -dDensity=$gs(density) -dCyan=$gs(magenta) -dMagenta=$gs(cyan) -dYellow=$gs(yellow) -dBlack=$gs(black) -dDirection=$direct -r$gs(reso)"
        if {$gs(color) < 4} {
            set com "$com -dColorComponent=$gs(color)"
        }
        if {$gs(mw) == 1} {
            set com "$com -dMicroWeave=1"
        }
        if {$gs(dot) == 1} {
            set com "$com -dDotSize=1"
        }
        puts $fd "$com"
        close $fd
    }
    exit
}

proc set_mjc_attr {} {
    global gs
    if {$gs(localattr) != ""} {
        set gs(reso) [lindex $gs(localattr) 0]
        set gs(color) [lindex $gs(localattr) 1]
        set gs(density) [lindex $gs(localattr) 2]
        set gs(cyan) [lindex $gs(localattr) 3]
        set gs(magenta) [lindex $gs(localattr) 4]
        set gs(yellow) [lindex $gs(localattr) 5]
        set gs(black) [lindex $gs(localattr) 6]
        set gs(mw) [lindex $gs(localattr) 7]
        set gs(dot) [lindex $gs(localattr) 8]
        set gs(direct) [lindex $gs(localattr) 9]
    }
}

proc set_md {} {
    global gs conffile

    set fd [open $conffile "w"]
    set_common $fd
    puts $fd "$gs(reso) $gs(color) $gs(dith) $gs(cyan) $gs(magenta) $gs(yellow) $gs(black)"
    if {$gs(color) == "md50Eco"} {
        puts $fd "-sDEVICE=md50Eco -sPAPERSIZE=$gs(size) -r$gs(reso)"
    } else {
        puts $fd "-sDEVICE=md2k -sPAPERSIZE=$gs(size) -dDither=$gs(dith) -dCyan=$gs(cyan) -dMagenta=$gs(magenta) -dYellow=$gs(yellow) -dBlack=$gs(black) -dColor=$gs(color) -r$gs(reso)"
    }
    close $fd
    exit
}

proc set_md_attr {} {
    global gs
    if {$gs(localattr) != ""} {
        set gs(reso) [lindex $gs(localattr) 0]
        set gs(color) [lindex $gs(localattr) 1]
        set gs(dith) [lindex $gs(localattr) 2]
        set gs(cyan) [lindex $gs(localattr) 3]
        set gs(magenta) [lindex $gs(localattr) 4]
        set gs(yellow) [lindex $gs(localattr) 5]
        set gs(black) [lindex $gs(localattr) 6]
        if {$gs(color) == 0} {
            .f2.f4.reso.f3 configure -state normal
        }
        if {$gs(color) == "md50Eco"} {
            .f2.f4.etc.dith configure -state disabled
        }
    }
}

proc set_escpage {dev} {
    global gs conffile

    set fd [open $conffile "w"]
    set_common $fd
    puts $fd "$gs(reso) $gs(num) $gs(duplex) $gs(tumble)"
    set com "-sDEVICE=$dev -sPAPERSIZE=$gs(size) -r$gs(reso) -dNumCopies=$gs(num)"
    if {$gs(duplex) == 1} {set com "$com -dDuplex"}
    if {$gs(tumble) == 1} {set com "$com -dTumble"}
    puts $fd "$com"
    close $fd
    exit
}

proc set_escpage_attr {} {
    global gs
    if {$gs(localattr) != ""} {
        set gs(reso) [lindex $gs(localattr) 0]
        set gs(num) [lindex $gs(localattr) 1]
        set gs(duplex) [lindex $gs(localattr) 2]
        set gs(tumble) [lindex $gs(localattr) 3]
    }
}

proc set_lips4_attr {} {
    global gs
    if {$gs(localattr) != ""} {
        set gs(reso) [lindex $gs(localattr) 0]
        set gs(driver) [lindex $gs(localattr) 1]
        set gs(vector) [lindex $gs(localattr) 2]
        set gs(num) [lindex $gs(localattr) 3]
        set gs(duplex) [lindex $gs(localattr) 4]
        set gs(tumble) [lindex $gs(localattr) 5]
    }
}

proc set_lips4 {} {
    global gs conffile

    set fd [open $conffile "w"]
    set_common $fd
    puts $fd "$gs(reso) $gs(driver) $gs(vector) $gs(num) $gs(duplex) $gs(tumble)"
    set col $gs(driver)
    if {$gs(vector) == 1} {
        set dev "lips4v"
    } else {
        set dev "lips4"
    }
    set com "-sDEVICE=$dev -sPAPERSIZE=$gs(size) -r$gs(reso)"
    if {$col == "lips4c"} {
        set com "$com -dBitsPerPixel=24"
    }
    puts $fd "$com"
    close $fd
    exit
}

proc set_ppa {hpconf} {
    global gs conffile

    set fd [open $conffile "w"]
    set_common $fd
    puts $fd "600"
    puts $fd "-sDEVICE=pbm -sPAPERSIZE=$gs(size) -r600 | pbm2ppa -f $hpconf - - "
    close $fd
    exit
}

proc set_cdj880_attr {} {
    global gs
    if {$gs(localattr) != ""} {
        set gs(reso) [lindex $gs(localattr) 0]
        set gs(paper) [lindex $gs(localattr) 1]
        set gs(quality) [lindex $gs(localattr) 2]
        set gs(rit) [lindex $gs(localattr) 3]
        set gs(gamma) [lindex $gs(localattr) 4]
    }
}

proc set_cdj880 {dev} {
    global gs conffile

    set fd [open $conffile "w"]
    set_common $fd
    puts $fd "$gs(reso) $gs(paper) $gs(quality) $gs(rit) $gs(gamma)"
    set com "-sDEVICE=$dev -sPAPERSIZE=$gs(size) -r$gs(reso) -dPapertype=$gs(paper) -dRetStatus=$gs(rit) -dMasterGamma=$gs(gamma)"
    if {$gs(quality) != 0} {
        set com "$com -dQuality=$gs(quality)"
    }
    puts $fd $com
    close $fd
    exit
}

proc set_general_attr {} {
    global gs
    if {$gs(localattr) != ""} {
        set gs(reso) [lindex $gs(localattr) 0]
    }
}

proc set_general {dev} {
    global gs conffile

    set fd [open $conffile "w"]
    set_common $fd
    puts $fd $gs(reso)
    puts $fd "-sDEVICE=$dev -sPAPERSIZE=$gs(size) -r$gs(reso)"
    close $fd
    exit
}

proc set_general_opt_attr {opt} {
    global gs
    if {$gs(localattr) != ""} {
        set gs(reso) [lindex $gs(localattr) 0]
        set gs($opt) [lindex $gs(localattr) 1]
    }
}

proc set_general_opt {dev opt} {
    global gs conffile

    set fd [open $conffile "w"]
    set_common $fd
    puts $fd "$gs(reso) $gs($opt)"
    puts $fd "-sDEVICE=$dev -sPAPERSIZE=$gs(size) -r$gs(reso)"
    close $fd
    exit
}

proc set_printern {n} {
    global gs

    set type [.f2.f1.type get $n]
    set gs(model) $type
    catch {
    	destroy .f2.f4
    }
    switch $type {
        "MJ-3000C" -
        "MJ-800C" -
        "MJ-520C" -
        "MJ-510C" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {180 360} {180 360} 2
            make_radio .f2.f4.color  color {3(CMY) } {3 1} 1
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.direct -text "" -variable gs(direct)
            pack .f2.f4.etc.direct -side left
            make_scale .f2.f4.density "̩" density 0 2048 1024 4 512 16
            make_scale .f2.f4.cyan "忧" cyan 0 2048 1024 4 512 16
            make_scale .f2.f4.magenta "翧" magenta 0 2048 1024 4 512 16
            make_scale .f2.f4.yellow "" yellow 0 2048 1024 4 512 16
            set gs(black) 1024
            set gs(mw) 0
            set gs(dot) 0
            set_mjc_attr
            .f0.set configure -command set_mjc
        }
        "PM-3300C" -
        "PM-3000C" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {180 360 720 1440x720} {180 360 720 1440x720} 2
            make_radio .f2.f4.color  color {4(CMYK) 3(CMY) } {4 3 1} 1
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.mw -text "ޥ" -variable gs(mw)
            pack .f2.f4.etc.mw -side left
            checkbutton .f2.f4.etc.dot -text "̾ɥå" -variable gs(dot)
            pack .f2.f4.etc.dot -side left
            checkbutton .f2.f4.etc.direct -text "" -variable gs(direct)
            pack .f2.f4.etc.direct -side left
            make_scale .f2.f4.density "̩" density 0 2048 1024 4 512 16
            make_scale .f2.f4.black "ǻø" black 0 2048 1024 4 512 16
            make_scale .f2.f4.cyan "忧" cyan 0 2048 1024 4 512 16
            make_scale .f2.f4.magenta "翧" magenta 0 2048 1024 4 512 16
            make_scale .f2.f4.yellow "" yellow 0 2048 1024 4 512 16
            set_mjc_attr
            .f0.set configure -command set_mjc
        }
        "PM-9000C" -
        "PM-7000C" -
        "PM-800C" -
        "PM-800DC" -
        "PM-670C" -
        "PM-750C" -
        "PM-770C" -
        "PM-5000C" -
        "PM-2000C" -
        "PM-600C" -
        "PM-760C" -
        "PM-700C" -
        "MJ-8000C" -
        "MJ-6000C" -
        "MJ-5100C" -
        "MJ-5000C" -
        "MJ-3000CU" -
        "MJ-930C" -
        "MJ-910C" -
        "MJ-900C" -
        "MJ-830C" -
        "MJ-810C" -
        "MJ-700V2C" -
        "mjcxxx" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {180 360 720} {180 360 720} 2
            make_radio .f2.f4.color  color {4(CMYK) 3(CMY) } {4 3 1} 1
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.mw -text "ޥ" -variable gs(mw)
            pack .f2.f4.etc.mw -side left
            checkbutton .f2.f4.etc.dot -text "̾ɥå" -variable gs(dot)
            pack .f2.f4.etc.dot -side left
            checkbutton .f2.f4.etc.direct -text "" -variable gs(direct)
            pack .f2.f4.etc.direct -side left
            make_scale .f2.f4.density "̩" density 0 2048 1024 4 512 16
            make_scale .f2.f4.black "ǻø" black 0 2048 1024 4 512 16
            make_scale .f2.f4.cyan "忧" cyan 0 2048 1024 4 512 16
            make_scale .f2.f4.magenta "翧" magenta 0 2048 1024 4 512 16
            make_scale .f2.f4.yellow "" yellow 0 2048 1024 4 512 16
            set_mjc_attr
            .f0.set configure -command set_mjc
        }
        "MJ-1100" -
        "MJ-1050" -
        "MJ-1050V2" -
        "MJ-450" -
        "escp" {
            set gs(reso) 180
            .f0.set configure -command "set_general escp"
        }
        "epag" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600} {300 600} 2
            set_general_attr
            .f0.set configure -command "set_general epag"
        }
        "LP-2000" -
        "LP-3000" {
            set gs(reso) 240
            .f0.set configure -command "set_general lp2000"
        }
        "LP-7000" -
        "LP-7000G" {
            set gs(reso) 300
            .f0.set configure -command "set_general lp2000"
        }
        "lp2000" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {240 300} {240 300} 2
            set_general_attr
            .f0.set configure -command "set_general lp2000"
        }
        "LP-1000" -
        "LP-1500" - 
        "LP-1500S" -
        "LP-8000" -
        "LP-8000S" -
        "LP-8000SE" -
        "LP-8000SX" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.duplex -text "ξ̰" -variable gs(duplex)
            pack .f2.f4.etc.duplex -side left
            checkbutton .f2.f4.etc.tumble -text "ûդȤ" -variable gs(tumble)
            pack .f2.f4.etc.tumble -side left
            make_scale .f2.f4.num "" num 1 255 1 3 64 1
            set gs(reso) 300
            set_escpage_attr
            .f0.set configure -command
        }
        "LP-800" -
        "LP-1600" -
        "LP-1700" -
        "LP-1700S" -
        "LP-1800" -
        "LP-8200" -
        "LP-8300" -
        "LP-8300S" -
        "LP-8400" -
        "LP-8500" -
        "LP-8600" -
        "LP-9000" -
        "LP-9200" -
        "LP-9200S" -
        "LP-9200SX" -
        "escpage" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600} {300 600} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.duplex -text "ξ̰" -variable gs(duplex)
            pack .f2.f4.etc.duplex -side left
            checkbutton .f2.f4.etc.tumble -text "ûդȤ" -variable gs(tumble)
            pack .f2.f4.etc.tumble -side left
            make_scale .f2.f4.num "" num 1 255 1 3 64 1
            set_escpage_attr
            .f0.set configure -command "set_escpage escpage"
        }
        "BJC-880J" -
        "BJC-680J" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.color  driver { 顼} {lips4 lips4c} 1
            set gs(reso) 360x360
            set_general_opt_attr driver
            .f0.set configure -command {set_general_opt $gs(driver) driver}
        }
        "BJ-F6000" -
        "BJ-F600" -
        "BJ-F200" -
        "BJ-F100" -
        "BJC-80v" -
        "BJC-50v" -
        "BJC-35v" -
        "BJC-35vII" -
        "BJC-455J" -
        "BJC-465J" -
        "BJC-400J" -
        "BJC-410J" -
        "BJC-420J" -
        "BJC-430J" -
        "BJC-440J" -
        "BJC-610J" -
        "BJC-600J" -
        "bjc600" {
            set gs(reso) 360
            .f0.set configure -command "set_general bjc600"
        }
        "BJC-700J" {
            set gs(reso) 600
            .f0.set configure -command "set_general bjc600"
        }
        "BJ-10v" -
        "BJ-15v" -
        "bj10v" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {180x180 360x180 360x360} {180x180 360x180 360x360} 3
            set_general_attr
            .f0.set configure -command "set_general bj10v"
        }
        "LBP-2160" -
        "LBP-2040" -
        "LBP-2030" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600} {360 600} 2
            make_radio .f2.f4.color  driver { 顼} {lips4 lips4c} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.vector -text "٥" -variable gs(vector)
            pack .f2.f4.etc.vector -side left
            checkbutton .f2.f4.etc.duplex -text "ξ̰" -variable gs(duplex)
            pack .f2.f4.etc.duplex -side left
            checkbutton .f2.f4.etc.tumble -text "ûդȤ" -variable gs(tumble)
            pack .f2.f4.etc.tumble -side left
            make_scale .f2.f4.num "" num 1 255 1 3 64 1
            set_lips4_attr
            .f0.set configure -command set_lips4
        }
        "LBP-850" -
        "LBP-840" -
        "lips4" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600 1200} {300 600 1200} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.vector -text "٥" -variable gs(vector)
            pack .f2.f4.etc.vector -side left
            checkbutton .f2.f4.etc.duplex -text "ξ̰" -variable gs(duplex)
            pack .f2.f4.etc.duplex -side left
            checkbutton .f2.f4.etc.tumble -text "ûդȤ" -variable gs(tumble)
            pack .f2.f4.etc.tumble -side left
            make_scale .f2.f4.num "" num 1 255 1 3 64 1
            set gs(driver) lips4
            set_lips4_attr
            .f0.set configure -command 
        }
        "LBP-930" -
        "LBP-930EX" -
        "LBP-830" -
        "LBP-750" -
        "LBP-740" -
        "LBP-730" -
        "LBP-720" -
        "LBP-450" -
        "LBP-430" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600} {300 600} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.duplex -text "ξ̰" -variable gs(duplex)
            pack .f2.f4.etc.duplex -side left
            checkbutton .f2.f4.etc.tumble -text "ûդȤ" -variable gs(tumble)
            pack .f2.f4.etc.tumble -side left
            make_scale .f2.f4.num "" num 1 255 1 3 64 1
            set gs(driver) lips4
            set gs(vector) 0
            set_lips4_attr
            .f0.set configure -command set_lips4
        }
        "LPB-310" -
        "LBP-320" -
        "LBP-320Pro" -
        "LBP-A309G II" -
        "LBP-A304G II" -
        "LBP-A304E" -
        "LBP-A304E II" -
        "LBP-B404G" -
        "LBP-B404G II" -
        "LBP-B406E" -
        "LBP-B406E II" -
        "LBP-B406D(lips3)" -
        "LBP-B406S(lips3)" -
        "LBP-A404F" -
        "LBP-A404G II" -
        "LBP-A405Jr." -
        "LBP-A404E" -
        "LBP-A404(lips3)" {
            set gs(reso) 300
            .f0.set configure -command "set_general lips3"
        }
      	"DJ-1600C" -
      	"cdj1600" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600} {300 600} 2
            make_radio .f2.f4.paper  paper {    Ʃ} {0 1 2 3 4 5} 1
            make_radio .f2.f4.quality ʼ quality {ɥե ʰ } {-1 0 1} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.rit -text "顼ޡ" -variable gs(rit)
            pack .f2.f4.etc.rit -side left
            make_scale .f2.f4.gamma "Ĵ" gamma 1 10 3 3 2 0.1
            set gs(rit) 1
            set_cdj880_attr
            .f0.set configure -command "set_cdj880 cdj1600"
      	}
        "DJ-970Cxi" -
        "DJ-955C" -
        "PS-P1100" -
        "PS-P1000" -
        "DJ-815C" -
      	"DJ-1120C" -
      	"DJ-1100C" -
      	"DJ-855C" -
      	"DJ-850C" -
      	"DJ-694C" -
      	"DJ-690C" -
      	"DJ-680C" -
      	"PICTY4000" -
      	"cdj850" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600} {300 600} 2
            make_radio .f2.f4.paper  paper {    Ʃ} {0 1 2 3 4 5} 1
            make_radio .f2.f4.quality ʼ quality {ɥե ʰ } {-1 0 1} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.rit -text "顼ޡ" -variable gs(rit)
            pack .f2.f4.etc.rit -side left
            make_scale .f2.f4.gamma "Ĵ" gamma 1 10 3 3 2 0.1
            set gs(rit) 1
            set_cdj880_attr
            .f0.set configure -command "set_cdj880 cdj850"
      	}
      	"DJ-890C" -
      	"cdj890" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600} {300 600} 2
            make_radio .f2.f4.paper  paper {    Ʃ} {0 1 2 3 4 5} 1
            make_radio .f2.f4.quality ʼ quality {ɥե ʰ } {-1 0 1} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.rit -text "顼ޡ" -variable gs(rit)
            pack .f2.f4.etc.rit -side left
            make_scale .f2.f4.gamma "Ĵ" gamma 1 10 3 3 2 0.1
            set gs(rit) 1
            set_cdj880_attr
            .f0.set configure -command "set_cdj880 cdj890"
      	}
      	"DJ-895Cxi" -
      	"DJ-880C" -
      	"PICTY920G" -
      	"PICTY900" -
      	"PICTY700" -
      	"cdj880" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600} {300 600} 2
            make_radio .f2.f4.paper  paper {    Ʃ} {0 1 2 3 4 5} 1
            make_radio .f2.f4.quality ʼ quality {ɥե ʰ } {-1 0 1} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.rit -text "顼ޡ" -variable gs(rit)
            pack .f2.f4.etc.rit -side left
            make_scale .f2.f4.gamma "Ĵ" gamma 1 10 3 3 2 0.1
            set gs(rit) 1
            set_cdj880_attr
            .f0.set configure -command "set_cdj880 cdj880"
      	}
      	"DJ-672C" -
      	"DJ-670C" -
      	"cdj670" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600} {300 600} 2
            make_radio .f2.f4.paper  paper {    Ʃ} {0 1 2 3 4 5} 1
            make_radio .f2.f4.quality ʼ quality {ɥե ʰ } {-1 0 1} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.rit -text "顼ޡ" -variable gs(rit)
            pack .f2.f4.etc.rit -side left
            make_scale .f2.f4.gamma "Ĵ" gamma 1 10 3 3 2 0.1
            set gs(rit) 1
            set_cdj880_attr
            .f0.set configure -command "set_cdj880 cdj670"
      	}
        "PICTY180" -
        "picty180" {
            set gs(reso) 300
            .f0.set configure -command "set_general picty180"
        }
        "picty180hi" {
            set gs(reso) 300
            .f0.set configure -command "set_general picty180hi"
        }
        "DJ-1000C" {
             .f0.set configure -command "set_ppa /etc/pbm2ppa.conf.hp1000"
        }
        "DJ-720C" -
        "DJ-712C" -
        "DJ-710C" {
             .f0.set configure -command "set_ppa /etc/pbm2ppa.conf.hp720"
        }
        "DJ-820C" -
        "pbm2ppa" {
            .f0.set configure -command "set_ppa /etc/pbm2ppa.conf.hp820"
        }
        "LaserJet Plus" -
      	"ljetplus" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {100 150 300} {100 150 300} 3
            set_general_attr
            .f0.set configure -command "set_general ljetplus"
      	}
      	"LaserJet4" -
      	"LaserJet4L" -
      	"LaserJet5L" -
      	"LaserJet6L" -
        "MICROLINE-12n" -
        "ljet4 lj4dith" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {100 150 300 600} {100 150 300 600} 4
            make_radio .f2.f4.driver Ĵ driver {2Ĵ ϡեȡ} {ljet4 lj4dith} 1
            set_general_opt_attr driver
            .f0.set configure -command {set_general_opt $gs(driver) driver}
      	}
      	"LaserJet5" -
      	"LaserJet6" -
      	"lj5mono lj5gray" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300 600} {300 600} 2
            make_radio .f2.f4.driver Ĵ driver {2Ĵ ϡեȡ} {lj5mono lj5gray} 1
            set_general_opt_attr driver
            .f0.set configure -command {set_general_opt $gs(driver) driver}
        }
        "MICROLINE-620CL" -
        "MICROLINE-600CL" -
        "ml600" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {300x300 600x600 600x1200} {300x300 600x600 600x1200} 3
            set_general_attr
            .f0.set configure -command "set_general ml600"
        }
        "MD-5000" -
        "mdxxx" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.color  color {顼  ֥å} {1 0 md50Eco} 1
            .f2.f4.color.f1 configure -command {
            	global gs
                .f2.f4.reso.f3 configure -state disabled
                .f2.f4.etc.dith configure -state normal
                set gs(reso) 600
            }
            .f2.f4.color.f2 configure -command {
            	global gs
                .f2.f4.reso.f3 configure -state normal
                .f2.f4.etc.dith configure -state normal
            }
            .f2.f4.color.f3 configure -command {
            	global gs
                .f2.f4.reso.f3 configure -state disabled
                .f2.f4.etc.dith configure -state disabled
                set gs(reso) 600
                set gs(dith) 0
            }
            make_radio .f2.f4.reso (DPI) reso {300 600 1200x600} {300 600 1200x600} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.dith -text "ǥ" -variable gs(dith)
            pack .f2.f4.etc.dith -side left
            make_scale .f2.f4.black "ǻø" black 0 2048 1024 4 512 16
            make_scale .f2.f4.cyan "忧" cyan 0 2048 1024 4 512 16
            make_scale .f2.f4.magenta "翧" magenta 0 2048 1024 4 512 16
            make_scale .f2.f4.yellow "" yellow 0 2048 1024 4 512 16
            .f2.f4.reso.f3 configure -state disabled
            set_md_attr
            .f0.set configure -command set_md
        }
        "MD-4000J" -
        "MD-2000J" -
        "MD-1500J" -
        "MD-1300J" -
        "MD-1000J" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.color  color {顼 } {1 0} 1
            .f2.f4.color.f1 configure -command {
            	global gs
                .f2.f4.reso.f3 configure -state disabled
                set gs(reso) 600
            }
            .f2.f4.color.f2 configure -command {
            	global gs
                .f2.f4.reso.f3 configure -state normal
            }
            make_radio .f2.f4.reso (DPI) reso {300 600 1200x600} {300 600 1200x600} 2
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.dith -text "ǥ" -variable gs(dith)
            pack .f2.f4.etc.dith -side left
            make_scale .f2.f4.black "ǻø" black 0 2048 1024 4 512 16
            make_scale .f2.f4.cyan "忧" cyan 0 2048 1024 4 512 16
            make_scale .f2.f4.magenta "翧" magenta 0 2048 1024 4 512 16
            make_scale .f2.f4.yellow "" yellow 0 2048 1024 4 512 16
            .f2.f4.reso.f3 configure -state disabled
            set_md_attr
            .f0.set configure -command set_md
        }
        "MultiWriter2400X" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {160 200 240 400} {160 200 240 400} 4
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.duplex -text "ξ̰" -variable gs(duplex)
            pack .f2.f4.etc.duplex -side left
            checkbutton .f2.f4.etc.tumble -text "ûդȤ" -variable gs(tumble)
            pack .f2.f4.etc.tumble -side left
            make_scale .f2.f4.num "" num 1 99 1 2 20 1
            set_escpage_attr
            .f0.set configure -command "set_escpage npdl"
        }
        "MultiWriter2650" -
        "MultiWriter2250" -
        "MultiWriter2050" -
        "MultiWriter1400X" -
        "npdl" {
            frame .f2.f4
            pack .f2.f4 -side left -fill both
            make_radio .f2.f4.reso (DPI) reso {160 200 240 400 600} {160 200 240 400 600} 5
            frame .f2.f4.etc
            pack .f2.f4.etc -side top -fill x
            checkbutton .f2.f4.etc.duplex -text "ξ̰" -variable gs(duplex)
            pack .f2.f4.etc.duplex -side left
            checkbutton .f2.f4.etc.tumble -text "ûդȤ" -variable gs(tumble)
            pack .f2.f4.etc.tumble -side left
            make_scale .f2.f4.num "" num 1 99 1 2 20 1
            set_escpage_attr
            .f0.set configure -command "set_escpage npdl"
        }
    }
    set gs(type) $type
    if {$gs(vendor) != "" && $type != ""} {
        .f3.msg configure -text "ߤϡ$gs(vendor)$type Ǥ"
        .f0.set configure -state normal
    } else {
        .f3.msg configure -text "ץ󥿤ꤵƤޤ"
        .f0.set configure -state disabled
    }
}

proc set_common {fd} {
    global gs

    set pages [.f2.f3.p5 get]
    if {$pages == ""} {set pages "none"}
    puts $fd "$gs(vendor) $gs(type) $gs(size) $gs(orient) $gs(page) $pages $gs(multi)"
}

proc dsk_print_setup {} {
    global gs env

    set gsfd [open "| gs \-h" r]
    set flag 0
    set devices ""
    while {[gets $gsfd gsline] >= 0} {
      if {$gsline == "Search path:"} {set flag 0}
      if {$flag == 1} {set devices "$devices $gsline"}
      if {$gsline == "Available devices:"} {set flag 1}
    }
    close $gsfd
    set gs(devlist) $devices
    frame .f1
    pack .f1 -side top -fill x
    label .f1.title -text "ץ󥿤 Ver 0.60    2000/7/26" -fg darkgreen -bg orange
    pack .f1.title -fill x -ipady 8 -ipadx 8

    frame .f3
    pack .f3 -side top -fill x -pady 2
    label .f3.msg -anchor w -text "ץ󥿤ꤵƤޤ" -bg peachpuff -fg navy
    pack .f3.msg -fill x -ipady 2

    frame .f2
    pack .f2 -side top
    frame .f2.f1
    pack .f2.f1 -side left -fill y
    listbox .f2.f1.vendor -width 10 -yscroll ".f2.f1.vendory set"
    pack .f2.f1.vendor -side left -fill y
    bind .f2.f1.vendor <Double-Button-1> "set_type %x %y"
    scrollbar .f2.f1.vendory -orient vertical -width 10 -command "yview"
    pack .f2.f1.vendory -side left -fill y
    listbox .f2.f1.type -width 16 -yscroll ".f2.f1.typey set"
    pack .f2.f1.type -side left -fill y
    bind .f2.f1.type <Double-Button-1> "set_printer %x %y"
    scrollbar .f2.f1.typey -orient vertical -width 10 -command ".f2.f1.type yview"
    pack .f2.f1.typey -side left -fill y

    frame .f2.f2
    pack .f2.f2 -side left -fill y
    label .f2.f2.s0 -text "ѻ極"
    radiobutton .f2.f2.s1 -text "A3" -variable gs(size) -value "a3" -anchor w
    radiobutton .f2.f2.s2 -text "B4" -variable gs(size) -value "b4" -anchor w
    radiobutton .f2.f2.s3 -text "A4" -variable gs(size) -value "a4" -anchor w
    radiobutton .f2.f2.s4 -text "B5" -variable gs(size) -value "b5" -anchor w
    radiobutton .f2.f2.s5 -text "A5" -variable gs(size) -value "a5" -anchor w
    radiobutton .f2.f2.s6 -text "쥿" -variable gs(size) -value "letter" -anchor w
    pack .f2.f2.s0 .f2.f2.s1 .f2.f2.s2 .f2.f2.s3 .f2.f2.s4 .f2.f2.s5 .f2.f2.s6 -side top -fill x
    .f2.f2.s3 select
    label .f2.f2.o0 -text "ѻ"
    radiobutton .f2.f2.o1 -text "" -variable gs(orient) -value "portrait" -anchor w
    radiobutton .f2.f2.o2 -text "" -variable gs(orient) -value "landscape" -anchor w
    pack .f2.f2.o0 .f2.f2.o1 .f2.f2.o2 -side top -fill x
    .f2.f2.o1 select

    frame .f2.f3
    pack .f2.f3 -side left -fill y
    label .f2.f3.p0 -text "ڡ"
    radiobutton .f2.f3.p1 -text "ư" -variable gs(page) -value "all" -anchor w
    radiobutton .f2.f3.p2 -text "ڡ" -variable gs(page) -value "page" -anchor w
    label .f2.f3.p6 -text "ϰϻ: 1-5" -fg blue
    label .f2.f3.p7 -text "̻: 1,4" -fg blue
    radiobutton .f2.f3.p3 -text "" -variable gs(page) -value "odd" -anchor w
    radiobutton .f2.f3.p4 -text "" -variable gs(page) -value "even" -anchor w
    entry .f2.f3.p5 -width 9 -bg white
    pack .f2.f3.p0 .f2.f3.p1 .f2.f3.p2 -fill x -side top
    pack .f2.f3.p5 -side top
    pack .f2.f3.p6 .f2.f3.p7 -side top
    pack .f2.f3.p3 .f2.f3.p4 -fill x -side top
    .f2.f3.p1 select

    label .f2.f3.m0 -text "ڡ޹"
    radiobutton .f2.f3.m1 -text "1" -variable gs(multi) -value 1 -anchor w
    radiobutton .f2.f3.m2 -text "2" -variable gs(multi) -value 2 -anchor w
    radiobutton .f2.f3.m3 -text "4" -variable gs(multi) -value 4 -anchor w
    pack .f2.f3.m0 .f2.f3.m1 .f2.f3.m2 .f2.f3.m3 -side top -fill x
    .f2.f3.m1 select

    frame .f4
    pack .f4 -side bottom -fill x
    label .f4.msg -bg yellow -fg red -anchor c -text "ѻ極ϥץꥱǤ꤬ͥ褷ޤ"
    pack .f4.msg -fill x
    
    frame .f0
    pack .f0 -side bottom -fill x
    button .f0.set -text "¹" -state disabled
    pack .f0.set -side left
    button .f0.out -text "" -command {
        destroy .f0
        destroy .f1
        destroy .f2
        destroy .f3
        destroy .f4
        dsk_gen_printcap
    }
    pack .f0.out -side left
    button .f0.stat -text "Ͼ" -command {
        destroy .f0
        destroy .f1
        destroy .f2
        destroy .f3
        destroy .f4
        dsk_view_job
    }
    pack .f0.stat -side left
    button .f0.exit -text "󥻥" -command exit
    pack .f0.exit -side right
    set gs(vendor) ""

    set_vendor
    
    set gs(attrlist) ""
    set gs(localattr) ""
    set conffile "$env(HOME)/.printconf"
    catch {set fd [open $conffile "r"]}
    if ![info exists fd] {return}
    set gs(attrlist) [gets $fd]
    set gs(localattr) [gets $fd]
    close $fd

    set vendorlist [.f2.f1.vendor get 0 end]
    set a [lindex $gs(attrlist) 0]
    set i 0
    set n -1
    foreach item $vendorlist {
        if {$item == $a} {set n $i}
        incr i
    }
    set_typen $n
    set typelist [.f2.f1.type get 0 end]
    set a [lindex $gs(attrlist) 1]
    set i 0
    set n -1
    foreach item $typelist {
        if {$item == $a} {set n $i}
        incr i
    }
    set_printern $n
    .f2.f1.type selection set $n
    set gs(size) [lindex $gs(attrlist) 2]
    set gs(orient) [lindex $gs(attrlist) 3]
    set gs(page) [lindex $gs(attrlist) 4]
    if {$gs(page) == "page"} {
        .f2.f3.p5 insert end [lindex $gs(attrlist) 5]
    }
    set gs(multi) [lindex $gs(attrlist) 6]
}

proc separate {firstline filename} {
    global gsattr gscom

    set ext [file extension $filename]
    set paper [lindex $gsattr 2]
    set orient [lindex $gsattr 3]
    set page [lindex $gsattr 4]
    set pages [lindex $gsattr 5]
    set multi [lindex $gsattr 6]
    set head4 [string range $firstline 0 3]
    set head3 [string range $firstline 0 2]
    set selcom "psselect -q"
    set e2ps "e2ps -nh -$paper -line 110"
    if {$paper == "letter"} {
        set e2ps "e2ps -nh -le -line 110"
    }
    if {$multi == 2} {
        switch $orient {
            "landscape" {set e2ps "$e2ps -p"}
            "portrait" {set e2ps "$e2ps -l"}
        }
    } else {
        switch $orient {
            "landscape" {set e2ps "$e2ps -l"}
            "portrait" {set e2ps "$e2ps -p"}
        }
    }
    set name [file tail $filename]
    set gscom "gs -q $gscom -sOutputFile=/tmp/$name - "
    set com ""
    switch $page {
        "odd" {set com "$selcom -o"}
        "even" {set com "$selcom -e"}
        "page" {set com "$selcom -p$pages"}
    }
    if {$multi >= 2} {
    	if {$com == ""} {
            set com "psnup -q -$multi -p$paper"
        } else {
            set com "$com | psnup -q -$multi -p$paper"
        }
    }
    if {$com == ""} {
        set com $gscom
    } else {
        set com "$com | $gscom"
    }
    if {$head4 == "%!PS" || $ext == ".ps"} {
        set com "cat $filename | $com"
        exec sh -c $com
        cd /tmp
        exec lpr $name
        exec rm $name
    } else {
    	if {$head3 == "GIF"} {
    	    set com "giftopnm $filename | pnmtops | $com"
            catch {exec sh -c $com}
            cd /tmp
            catch {exec lpr $name}
            catch {exec rm $name}
        } else {
            set com "$e2ps $filename | $com"
            exec sh -c $com
            cd /tmp
            exec lpr $name
            exec rm $name
        }
    }
}

proc dsk_printtool {argc argv} {
    global env conffile uppfile gsattr gslocal gscom

    if {$argc < 1} {
        dsk_print_setup
        return
    }
    set filename [lindex $argv 0]
    set conffile "$env(HOME)/.printconf"
    set uppfile "$env(HOME)/.uniprint"
    if {$filename == "--setup"} {
        dsk_print_setup
    } elseif {$filename == "--printcap"} {
        dsk_gen_printcap
    } elseif {$filename == "--viewjob"} {
        dsk_view_job
    } else {
        catch {set fd [open $conffile "r"]}
        if ![info exists fd] {exit}
        set gsattr [gets $fd]
        set gslocal [gets $fd]
        set gscom [gets $fd]
        close $fd
        catch {set fd [open $filename "r"]}
        if ![info exists fd] {exit}
        gets $fd firstline
        close $fd

        frame .f
        pack .f
        label .f.title1 -text "Ǥ" -fg red -bg peachpuff
        pack .f.title1 -fill x -ipady 20 -ipadx 20 -side top
        set vendor [lindex $gsattr 0]
        set type [lindex $gsattr 1]
        label .f.title2 -text "$filename  $vendor $type Ȥץ󥿤˽ϤƤޤ" -fg navy -bg peachpuff
        pack .f.title2 -fill x -side top
        update

        set fd [open $filename "r"]
        separate $firstline $filename
        close $fd
        exit
    }
}

proc dsk_gen_printcap {} {
    frame .f1
    pack .f1 -side top -fill x
    label .f1.title -text "" -fg darkgreen -bg orange
    pack .f1.title -fill x -ipady 8 -ipadx 8
    frame .f2
    pack .f2 -side top -fill x
    button .f2.local -text "" -command {
        catch {destroy .f3}
        catch {destroy .f4}
        frame .f3
        pack .f3 -side top
        listbox .f3.lpt -height 7 -selectmode single
        pack .f3.lpt -side left
        set num 0
        set fd [open "| setcap" r]
        while {[gets $fd dev] >= 0} {
                .f3.lpt insert end $dev
                incr num
        }
        catch {.f3.lpt selection set 0 0}
        if {$num == 0} {
            destroy .f3
        }
        .f5.set configure -command {
            set lpname [.f3.lpt get [.f3.lpt curselection]]
            set pid [dsk_get_lpd_pid]
            exec setcap $pid $lpname
            exit
        }
    }
    button .f2.rem -text "⡼" -command {
        catch {destroy .f3}
        catch {destroy .f4}
        frame .f3
        frame .f4
        label .f3.title -text "ۥ̾"
        label .f4.title -text "ץ̾"
        entry .f3.name -width 14 -bg white
        entry .f4.name -width 12 -bg white
        pack .f3 .f4 -side top
        pack .f3.title .f3.name -side left
        pack .f4.title .f4.name -side left
        .f5.set configure -command {
            set host [.f3.name get]
            set lpr [.f4.name get]
            set pid [dsk_get_lpd_pid]
            exec setcap $pid $host $lpr
            exit
        }
    }
    pack .f2.local .f2.rem -side left -fill x
    frame .f5
    pack .f5 -side bottom -fill x
    button .f5.set -text ""
    pack .f5.set -side left
    button .f5.can -text "Ĥ" -command exit
    pack .f5.can -side right
}

proc dsk_get_lpd_pid {} {
    set fd [open "| ps ax" "r"]
    if {$fd != ""} {
        gets $fd title
        set index 0
        set pid_index 0
        set command_index 4
    	set lpd_pid 0
    	foreach item $title {
    	    set item [string tolower $item]
    	    if {$item == "pid"} {
    	         set pid_index $index
    	    }
    	    if {$item == "command"} {
    	         set command_index $index
    	    }
    	    incr index
    	}
        while {[gets $fd items] >= 0} {
            set pid [lindex $items $pid_index]
            set command [lindex $items $command_index]
            set command [file tail $command]
            if {$command == "lpd"} {
                set lpd_pid $pid
            }
        }
        close $fd
        return $lpd_pid
    }
    return 0
}

proc dsk_view_job {} {
    frame .f1
    pack .f1 -side top -fill x
    label .f1.title -text "ץ󥿤ξ" -fg darkgreen -bg orange
    pack .f1.title -fill x -ipady 8 -ipadx 8
    frame .f2
    pack .f2 -side top -fill x
    label .f2.label -text "  桼 ֹ   ե̾\t\t"
    pack .f2.label -side left -fill x
    frame .f3
    pack .f3 -side top
    listbox .f3.job -width 80 -selectmode extended
    pack .f3.job -side left
    frame .f5
    pack .f5 -side bottom -fill x
    button .f5.del -text "" -command "dsk_view_job_delete .f3.job"
    pack .f5.del -side left
    button .f5.delall -text "ƺ" -command "dsk_view_job_deleteall .f3.job"
    pack .f5.delall -side left
    button .f5.can -text "Ĥ" -command exit
    pack .f5.can -side right
    dsk_view_job_replace .f3.job
}

proc dsk_view_job_replace {w} {
    dsk_view_job_lpq $w
    after 3000 dsk_view_job_replace $w
}

proc dsk_view_job_lpq {w} {
    global lpq_job_index

    set lpq_job_index 2
    set select [$w curselection]
    $w delete 0 end
    set fd [open "| lpq" r]
    while {[gets $fd title] >= 0} {
       set match 0
       foreach item $title {
            set item [string tolower $item]
            if {$item == "rank"} {incr match}
            if {$item == "job"} {incr match}
            if {$item == "files"} {incr match}
            if {$item == "size"} {incr match}
            if {$item == "time"} {incr match}
            if {$item == "total"} {incr match}
            if {$item == "owner"} {incr match}
            if {$item == "owner/id"} {incr match}
        }
        if {$match > 2} {break}
    }
    set index 0
    foreach item $title {
        set item [string tolower $item]
        if {$item == "job"} {
            set lpq_job_index $index
        }
        incr index
    }
    while {[gets $fd message] >= 0} {
        $w insert end $message
    }
    foreach index $select {
        catch {$w selection set $index}
    }
    close $fd
}

proc dsk_view_job_delete {w} {
    global lpq_job_index

    set select [$w curselection]
    foreach index $select {
        set lines [$w get $index]
        set jobnum [lindex $lines $lpq_job_index]
        exec lprm job $jobnum
    }
    dsk_view_job_lpq $w
}

proc dsk_view_job_deleteall {w} {
    global lpq_job_index

    set all [$w get 0 end]
    foreach lines $all {
        set jobnum [lindex $lines $lpq_job_index]
        exec lprm job $jobnum
    }
    dsk_view_job_lpq $w
}

dsk_printtool $argc $argv