#!/usr/dt/bin/dtksh
#
# @(#)newpy_udcregister	1.2 01/12/20
# UDC register script of NewPinYin for sdtudctool.
#

if [ $LANG != "zh_CN.GB18030" ]; then export LC_ALL=zh; \
fi
export LD_LIBRARY_PATH=/usr/dt/lib
. /usr/dt/lib/dtksh/DtFuncs.dtsh

umask 000

# Status
status_normal=0
status_error=1

msg_guide='\n    ùڽûԶעȫƴ뷨С\nȷϡťԱûԶּƴϢ\n\nע⣺ֻжϺƴûԶֲ\nȫƴ뷨롣'
msg_title_err=''
msg_titile_inf='ʾ'
msg_title_save='עûԶ'
msg_title_chagefile='ļѡ'
msg_title_update=''
msg_title_filename='ļ'
msg_title_select='ѡ...'
msg_title_apply='ȷ'
msg_title_close='ȡ'
msg_inf_saved='ɹ'
msg_err_notselfile='ļ'
msg_err_arg=''
msg_err_failtosavefile='ļ'
msg_err_nointerfile='мļ'
msg_hinshi=''

remove="/usr/bin/rm -f"
rename="/usr/bin/mv -f"
printf=/usr/bin/printf
touch=/usr/bin/touch
dterror=/usr/dt/bin/dterror.ds

if [ $# -ne 1 ]; then
    exec $dterror "$msg_err_arg" "$msg_title_save" "$msg_title_apply"
fi

intermediate_filename=$1
intermediate_filedir=`dirname $intermediate_filename`
default_filename=$intermediate_filedir/newpyudc.txt
hinshi="$msg_hinshi"

if [ ! -e $intermediate_filename ]; then
    _msg=`$printf "$msg_err_nointerfile" $intermediate_filename`
    exec $dterror "$_msg" "$msg_title_save" "$msg_title_apply"
fi

Warning()
{
    _title="$1"
    _message="$2"
    XtSetValues $ERRORDIAG dialogTitle:"$_title"
    XtSetValues $ERRORDIAG messageString:"$_message"
    XtManageChild $ERRORDIAG
    unset _title _message
}

Info()
{
    _title="$1"
    _message="$2"
    XtSetValues $INFODIAG dialogTitle:"$_title"
    XtSetValues $INFODIAG messageString:"$_message"
    XtManageChild $INFODIAG
    unset _title _message
}

Callback_Ok()
{
    XtGetValues $FILESEL_TEXT value:sel_filename
    if [ -d $sel_filename ] ; then
        Warning "$msg_title_err" "$msg_err_notselfile"
    else
        XtSetValues $FILENAME value:$sel_filename
    fi
}

Callback_ChangeFileName()
{
    XtManageChild $FILESEL
}

CreateFile()
{
    # Backup file
    if [ -e $dic_filename ] ; then
        $rename $dic_filename "$dic_filename".back 2> /dev/null
        if [ $? != $status_normal ] ; then
            _msg=`$printf "$msg_err_failtosavefile" "$dic_filename".back`
            Warning "$msg_title_err" "$_msg"
            return $status_error
        fi
    fi

    $touch $dic_filename 2> /dev/null
    if [ $? != $status_normal ] ; then
        _msg=`$printf "$msg_err_failtosavefile" "$dic_filename"`
        Warning "$msg_title_err" "$_msg"
        return $status_error
    fi

    encode=`grep '# Encode:' $intermediate_filename | sed 's/.*: //g'`
    cmd="cat $intermediate_filename"

    if [ $encode = "zh_CN.euc" ]; then
        printf "[zh_CN.EUC]\n" > $dic_filename  
    else 
    	printf "[zh_CN.GBK]\n" > $dic_filename
    fi
    	
    eval $cmd | nawk '
    BEGIN {
        OFS = "	"           # delemiter of ATOK12 words files (TAB)
    }
    {
    if(/^#/) {
        }
        else {
            word    = "";
            readcnt = 0;
            comment = "";
            for (i = 1; i <= NF; i++) {
                s = $(i)
                if(match(s, "codepoint=") > 0) {
                    gsub("\"", "", s);
                    sub("codepoint=", "", s);
                    word = s;
                }
                if(match(s, "reading=") > 0) {
                    gsub("\"", "", s);
                    sub("reading=", "", s);
                    read[++readcnt] = s;
                }
            }
            for (i = 1; i <= readcnt; i++) {
                print word, read[i]
            }
         }
    }' >> $dic_filename
    
    if [ -e "$dic_filename".back ] ; then
    eval cat "$dic_filename".back | nawk -v encode="$encode" '
    BEGIN {
        OFS = " "           # delemiter of ATOK12 words files (TAB)
        state = 0
    }
    {
    	if(/^\[/) {
    	    for (i = 1; i <= NF; i++) {
    	        s = $(i);
		s = toupper(s);
		encode = toupper(encode);
    	        if(match(s, encode) > 0) {
    	            state = 0;
    	        }
    	        else { 
    	            state = 1;
    	            print $(i)
    	        }
    	    }
    	}
    	else{
    	    if(state != 0) {
    	    	print $0
            }
        }
    }' >> $dic_filename
    fi

    if [ $? != $status_normal ] ; then
        _msg=`$printf "$msg_err_failtosavefile" "$dic_filename"`
        Warning "$msg_title_err" "$_msg"
        return $status_error
    fi

    return $status_normal
}

Callback_NormalExit()
{
    $remove $intermediate_filename
    exit $status_normal
}

Callback_CreateFile()
{
    XtGetValues $FILENAME labelString:dic_filename
    if [ "$dic_filename"_ = "_" ] ; then
        Warning "$msg_title_err" "$msg_err_notselfile"
        return
    fi

    CreateFile
    if [ $? = $status_normal ] ; then
        XtAddCallback $INFODIAG_OK_BUTTON activateCallback Callback_NormalExit
        XtSetSensitive $APPLY False
        XtSetSensitive $CLOSE False
        XtSetSensitive $CHANGE_BUTTON False
        Info "$msg_titile_inf" "$msg_inf_saved"
    fi
}

XtInitialize TOPLEVEL command1 Command1 "$msg_title_save" "$@"
XtDisplay display $TOPLEVEL
XmInternAtom DELETE_ATOM $display "WM_DELETE_WINDOW" false
XmAddWMProtocolCallback $TOPLEVEL $DELETE_ATOM Callback_NormalExit

XmCreateFileSelectionDialog FILESEL $TOPLEVEL filesel \
        directory:$intermediate_filedir \
        okCallback:"Callback_Ok" \
        dialogTitle:"$msg_title_chagefile" \
        autoUnmanage:"True"

XmFileSelectionBoxGetChild FILESEL_TEXT $FILESEL DIALOG_TEXT

XmFileSelectionBoxGetChild FILESEL_HELPBUTTON $FILESEL DIALOG_HELP_BUTTON
XtUnmanageChild $FILESEL_HELPBUTTON

XmFileSelectionBoxGetChild FILESEL_FILTERBUTTON $FILESEL DIALOG_APPLY_BUTTON
XtSetValues $FILESEL_FILTERBUTTON labelString:"$msg_title_update"

XmCreateErrorDialog ERRORDIAG $TOPLEVEL errordiag
XmMessageBoxGetChild ERRORDIAG_CANCEL_BUTTON $ERRORDIAG DIALOG_CANCEL_BUTTON
XtUnmanageChild $ERRORDIAG_CANCEL_BUTTON
XmMessageBoxGetChild ERRORDIAG_HELP_BUTTON $ERRORDIAG DIALOG_HELP_BUTTON
XtUnmanageChild $ERRORDIAG_HELP_BUTTON

XmCreateInformationDialog INFODIAG $TOPLEVEL infodiag
XmMessageBoxGetChild INFODIAG_CANCEL_BUTTON $INFODIAG DIALOG_CANCEL_BUTTON
XtUnmanageChild $INFODIAG_CANCEL_BUTTON
XmMessageBoxGetChild INFODIAG_HELP_BUTTON $INFODIAG DIALOG_HELP_BUTTON
XtUnmanageChild $INFODIAG_HELP_BUTTON
XmMessageBoxGetChild INFODIAG_OK_BUTTON $INFODIAG DIALOG_OK_BUTTON

XtCreateManagedWidget FORM form XmForm $TOPLEVEL \
         width:450

XmCreateScrolledText MESSAGE $FORM message \
         value:"$msg_guide" \
         editable:False \
         topAttachment:ATTACH_FORM \
         editMode:MULTI_LINE_EDIT \
         topOffset:20 \
         leftAttachment:ATTACH_FORM \
	 leftOffset:10 \
         rightAttachment:ATTACH_FORM \
	 rightOffset:10 \
	 height:150 \
	 navigationType:NONE
XtManageChild $MESSAGE

XtCreateManagedWidget NAMELABEL nameLabel XmLabel $FORM \
         topAttachment:ATTACH_WIDGET \
	 topWidget:$MESSAGE \
         topOffset:20 \
	 leftAttachment:ATTACH_FORM \
	 leftOffset:20 \
	 bottomOffset:10 \
         labelString:"$msg_title_filename"

XtCreateManagedWidget FILENAME filename XmLabel $FORM \
         topAttachment:ATTACH_OPPOSITE_WIDGET \
         topWidget:$NAMELABEL \
         topOffset:0 \
         leftAttachment:ATTACH_WIDGET \
         leftWidget:$NAMELABEL \
         rightAttachment:ATTACH_POSITION \
         rightPosition:80 \
	 bottomOffset:10 \
	 labelString:$default_filename \
	 navigationType:TAB_GROUP

#XtCreateManagedWidget CHANGE_BUTTON change_button XmPushButton $FORM \
#        labelString:"$msg_title_select" \
#        topAttachment:ATTACH_OPPOSITE_WIDGET \
#        topWidget:$NAMELABEL \
#        topOffset:-5 \
#        leftAttachment:ATTACH_WIDGET \
#        leftWidget:$FILENAME \
#        leftOffset:5 \
#	 bottomOffset:10 \
#	 navigationType:TAB_GROUP
#	XtAddCallback $CHANGE_BUTTON activateCallback Callback_ChangeFileName

XtCreateManagedWidget SEPLINE sepline XmSeparator $FORM \
         topAttachment:ATTACH_WIDGET \
         topWidget:$FILENAME \
         topOffset:20 \
         rightAttachment:ATTACH_FORM \
         leftAttachment:ATTACH_FORM

XtCreateManagedWidget APPLY apply XmPushButton $FORM \
         labelString:"$msg_title_apply" \
         leftAttachment:ATTACH_POSITION \
         leftPosition:10 \
         rightAttachment:ATTACH_POSITION \
         rightPosition:30 \
         topAttachment:ATTACH_WIDGET \
         topWidget:$SEPLINE \
         topOffset:10 \
         bottomOffset:10 \
         bottomAttachment:ATTACH_FORM \
	 navigationType:TAB_GROUP
XtAddCallback $APPLY activateCallback Callback_CreateFile

XtCreateManagedWidget CLOSE close XmPushButton $FORM \
         labelString:"$msg_title_close" \
         leftAttachment:ATTACH_POSITION \
         leftPosition:70 \
         rightAttachment:ATTACH_POSITION \
         rightPosition:90 \
         topAttachment:ATTACH_WIDGET \
         topWidget:$SEPLINE \
         topOffset:10 \
         bottomOffset:10 \
         bottomAttachment:ATTACH_FORM \
	 navigationType:TAB_GROUP
XtAddCallback $CLOSE activateCallback Callback_NormalExit

XtSetValues $FORM \
	defaultButton:$APPLY \
	cancelButton:$CLOSE \
	navigationType:TAB_GROUP \
#	initialFocus:$FILENAME 

XtRealizeWidget $TOPLEVEL

XtMainLoop
