* IXXUNINSTALL.TXT
PROGRAM=NOT
CONTROL=PROGRAM,ERROR,SQL_DBO
BEGIN
=SET{WC.TRACE=1};
FORM=       システムを全て削除します。 
DATA={N}DUMMY{1}
W+=SET{WC.ERASE='ERASE /Q',WC.RMDIR='RMDIR /S /Q',WC.COPY_DIR='XCOPY /C /E /I /Y',WC.COPY_DIR_P=,WC.DQ='"',WC.EXT='.EXE'};
U+=SET{WC.ERASE='rm -f'   ,WC.RMDIR='rm -R -f'   ,WC.COPY_DIR='cp -R',WC.COPY_DIR_P='/*',WC.DQ=,WC.EXT=};
W+=SET{WC.JAVA_MONO=};
U+=SET{WC.JAVA_MONO='mono'};IF{_FRAMEWORK='J'}SET{WC.JAVA_MONO='java'};
=SET{WC.R_T1='R',WC.R_T2='T'};
=SET{WC.M_W1='M',WC.M_W2='W'};
=SET{WC.D_I_O_L1='D',WC.D_I_O_L2='I',WC.D_I_O_L3='O',WC.D_I_O_L4='L'};
=SET{W0CNT=0,WSYSTEM=,WSEP=};
=DIR_DIR{?_OS_DRIVE??_P?I};
=DIR_DIR_NEXT:DIR_DIR_NEXT{WC.DIR}JUMP{DIR_DIR_END};
=SET{W0LEN=WC.DIR@LENGTH};COMPUTE{W0LEN-=2};
***=IF{WC.DIR%'.I'}COMPUTE{W0CNT+=1}BACK{DIR_DIR_NEXT};
=IF{WC.DIR/'I.'}SET{WSYSTEM+=WSEP+WC.DIR[3],WSEP=','}COMPUTE{W0CNT+=1}BACK{DIR_DIR_NEXT};
=BACK{DIR_DIR_NEXT};
=DIR_DIR_END:IF_NAME{#SYSTEM}SET{SYSTEMX=#SYSTEM}EXIT2{SYSTEMX};
FORM= SYSTEM= @@@@@@@@ 
DATA=SYSTEMX{8,1,}
CHECK1=?WSYSTEM? 
=SET{_SYSTEM=SYSTEMX,W0SYSTEM_LENGTH=SYSTEMX@LENGTH};
=COMPUTE{W0DB_LENGTH=W0SYSTEM_LENGTH+3};
=READ_OPEN{1,?_OS_DRIVE??_P?I?_P?I.?_SYSTEM??_P?BAT?_P?Z_SETUP.CFG,/};
=READ_NEXT{1,DRIVE1,DRIVE2,DRIVE3,DRIVE4,DRIVE5,OS_LOGIN,SECRET,GUEST,ARCHIVE,I_VER,I_JAVA_MONO,JAR,INSTALL_PATH,DATABASE_PATH};
=READ_CLOSE{1};
=IF{_IV!=I_VER}ERROR{VERSION ERROR ?_IV?!=?I_VER?};
=IF{WC.JAVA_MONO!=I_JAVA_MONO}ERROR{FRAMEWORK ERROR ?WC.JAVA_MONO?!=?I_JAVA_MONO?};
=READ_OPEN{1,?_OS_DRIVE??_P?I?_P?BIN?_IV??_P?I_?_SERVER_NAME?_?_SYSTEM?.I,/};
=READ_NEXT{1,LANG_SYSTEM,SERVER,SYSTEM,DB_SOFT,SETUP,INSTANCE,SYSTEM_NAME,WC.PASSWORD_REAL
=,WC.PASSWORD_TEST,WC.PASSWORD_LINK};READ_CLOSE{1};
=SET{_DB_SOFT=DB_SOFT,_SETUP=SETUP,_INSTANCE=INSTANCE};
=SET{LOGIN_ID=_LOGIN_ID_ADMIN};
=SET{WC.FILE=_IV+'UNINSTALL_'+_SYSTEM};
=IF{SYSTEMX!=SYSTEM}ERROR{SYSTEM ERROR ?SYSTEMX?!=?SYSTEM?};
=IF{_FRAMEWORK='J'}IF{#SYSTEM=}JUMP{EXE};
=IF{_DB='I',_DB='O'}EXIT{};
=EXIT{LOGIN_ID};
=EXE:EXE{java,-cp /home/I/BIN?_IV?/purejavacomm.jar:/home/I/BIN?_IV?/jna.jar:/home/I/BIN?_IV?/?JAR?:/home/I/BIN?_IV?/IJAVA.jar imenu_l JA 30/600/trace ?_IV?UNINSTALL.TXT SYSTEM=?SYSTEM?};
=EXIT{_END};
FORM=        REAL= @@@@@@@@ REAL_ETC= @@@@@@@@
FORM=        TEST= @@@@@@@@ TEST_ETC= @@@@@@@@ BACKUP= @@@@@@@@  
REPEAT=5
DATA={O}DRIVE##{8}
REPEAT=
FORM= OS_LOGIN= @@@ SECRET= @@@ GUEST= @@@ ARCHIVE @@@ I_VER @@@ I_JAVA_MONO @@@@
DATA={O}OS_LOGIN{3}
DATA={O}SECRET{3}
DATA={O}GUEST{3}
DATA={O}ARCHIVE{3}
DATA={O}I_VER{3}
DATA={O}I_JAVA_MONO{4}
FORM=JAR            @
DATA={O}JAR{50}
FORM=INSTALL_PATH   @
DATA={O}INSTALL_PATH{50}
FORM=DATABASEL_PATH @
DATA={O}DATABASE_PATH{50}
FORM= LANG_SYSTEM= @@
FORM=      SERVER= @@@@@@@@@@@@@@@
FORM=      SYSTEM= @@@@@@@@
FORM=     DB_SOFT= @@@@@@@@
FORM=     SETUP= @
FORM=    INSTANCE= @@@@@@@@@@@@@@@@
FORM= SYSTEM_NAME= @
DATA={O}LANG_SYSTEM{2}
DATA={O}SERVER{16}
DATA={O}SYSTEM{8}
DATA={O}DB_SOFT{8}
DATA={O}SETUP{50}
DATA={O}INSTANCE{16}
DATA={O}SYSTEM_NAME{30}
FORM=@ (内容を確認。Enterで続行します。）
DATA=RUN{1}
=EXIT{+1}; 
FORM=      ADMIN LOGIN-ID @@@@@@@@@@@@@@
DATA=LOGIN_ID{14,1,!}ログインID
=SET{_LOGIN_ID=LOGIN_ID};
W+I-=JUMP{USER_SKIP};
W+=SET{WC.USER=_LOGIN_ID};
U+=SET{WC.USER='root'};
=IF{WC.USER!=_USER}ERROR{Bad User ?_USER? (?WC.USER?)};
=USER_SKIP:
=IF{_DB='I'}EXIT3{PASSWORD_ADIN};
FORM=      ADMIN PASSWORD 
FORM=@
DATA=PASSWORD_ADMIN{80,,!,*}管理者パスワード
=SET{WSW=0};
=SET{_LOGIN_PASSWORD='***'};
=SET{_TRACE=0};
=SET{_LOGIN_PASSWORD=PASSWORD_ADMIN};
=SET{_TRACE=WC.TRACE};
=SET{WC.SKIP_SW=0};
=IF_NOT{_DB='D',_DB='I',_DB='P',_DB='H'}IF_ERROR_LOGIN_SQL{SELECT 0 ?_FROM_DUAL?}ERROR{};
=IF    {_DB='H'}IF_ERROR_LOGIN_SQL{SELECT 0 FROM MASTER.SQL_USERS}ERROR{};
PROGRAM=NOT
CONTROL=PROGRAM,ERROR,SQL_DBO
FORM=       UNINSTALL 2 
FORM=YES @@@@ {YES,NO} {*警告*データベースを含め全てのファイルが削除されます*}
DATA=YES{4}{YES,NO}
=IF{_DATA!='YES'}EXIT{YES};
****************************************( 2 )***************************************************************
=SET{W0.MSG=0};
=WRITE_OPEN{1,?_TMP??WC.FILE?.TMP,OT,/};WRITE_CLOSE{1};
U+=COMMAND{chmod 777 ?_TMP??WC.FILE?.TMP};
=WRITE_OPEN{1,?_TMP??WC.FILE?.BAT,OT,/};
I+|O+|P+=WRITE_OPEN{2,?_TMP??WC.FILE?.TXT,OT,/};
***( L,M データベース削除　)******************
L-M-=JUMP{SKIP};
L+=LOGIN_SQL1{select distinct db from mysql.db where upper(left(db,?W0DB_LENGTH?))='I_?_SYSTEM?_'};
M+=LOGIN_SQL1{select name from master.sys.databases where ?_SUBSTR(name;1;(W0DB_LENGTH))?='I_?_SYSTEM?_'};
=SQL1_NEXT:LOGIN_SQL1_NEXT{WC.DB}JUMP{SQL1_END};
=IF_ERROR_LOGIN_SQL{DROP DATABASE ?WC.DB?}
NAME=ERROR
=   SET{WN.ERROR=_ERROR}IF{_DB_I_ERROR!='NOT_EXIST'}COMPUTE{W0.MSG+=1}SPLIT_FORM{WN.}{WN.ERROR}{80}SET{WN.MSG?W0.MSG?=WN.1};
NAME=
M+=IF_ERROR_LOGIN_SQL{EXEC SP_DROPDEVICE '?WC.DB?_DAT','DELFILE'}
M+COPY=ERROR
M+=IF_ERROR_LOGIN_SQL{EXEC SP_DROPDEVICE '?WC.DB?_LOG','DELFILE'}
M+COPY=ERROR
=BACK{SQL1_NEXT};
=SQL1_END:
=SKIP:
***( L,M ユーザー削除　)******************
L-M-=JUMP{SKIP};
*H+=COMPUTE{W0DB_LENGTH_M2=W0DB_LENGTH-2};
*H+=LOGIN_SQL1{SELECT USER_ID FROM MASTER.SQL_USERS  where ?_SUBSTR(USER_ID;1;(W0DB_LENGTH_M2))?='I?_SYSTEM?'};
L+=SET{WC.NAME='user'   ,WC.TABLE='mysql.user',WC.USER_LOGIN='USER'};
M+=SET{WC.NAME='name'   ,WC.TABLE='master.sys.syslogins',WC.USER_LOGIN='LOGIN'};
=LOGIN_SQL1{select distinct ?WC.NAME? from ?WC.TABLE? where upper((left(?WC.NAME?,?W0DB_LENGTH?)))='I_?_SYSTEM?_'};
=SQL1_NEXT:LOGIN_SQL1_NEXT{WC.USER}JUMP{SQL1_END};
=IF_ERROR_LOGIN_SQL{DROP ?WC.USER_LOGIN? ?WC.USER?}
COPY=ERROR
*H+=IF_ERROR_LOGIN_SQL{DROP SCHEMA AUTHORIZATION ?WC.USER?}NOP{};
*H+=IF_ERROR_LOGIN_SQL{REVOKE DBA     FROM ?WC.USER?}NOP{};
*H+=IF_ERROR_LOGIN_SQL{REVOKE CONNECT FROM ?WC.USER?}NOP{};
=BACK{SQL1_NEXT};
=SQL1_END:
***( L ユーザー削除　)******************
L-=JUMP{SKIP};
=LOGIN_SQL1{select distinct db,table_name,user,host from mysql.tables_priv
= where upper(left(db,?W0DB_LENGTH?))='I_?_SYSTEM?_'};
=SQL1_NEXT:LOGIN_SQL1_NEXT{WC.DB,WC.NAME,WC.USER,WC.HOST}JUMP{SQL1_END};
=IF_ERROR_LOGIN_SQL{REVOKE ALL ON ?WC.DB?.?WC.NAME? FROM '?WC.USER?'@'?WC.HOST?'}
COPY=ERROR
=BACK{SQL1_NEXT};
=SQL1_END:
=LOGIN_SQL1{select distinct routine_type,db,routine_name,user,host from mysql.procs_priv
= where upper(left(db,?W0DB_LENGTH?))='I_?_SYSTEM?_'};
=SQL1_NEXT:LOGIN_SQL1_NEXT{WC.TYPE,WC.DB,WC.NAME,WC.USER,WC.HOST}JUMP{SQL1_END};
=IF_ERROR_LOGIN_SQL{REVOKE ALL ON ?WC.TYPE? ?WC.DB?.?WC.NAME? FROM '?WC.USER?'@'?WC.HOST?'}
COPY=ERROR
=BACK{SQL1_NEXT};
=SQL1_END:
=SKIP:
***( Z_PERMISSION.CFG 読み込み　W0.PERMISSION,WC.PERMISSION##)**********
L-M-=READ_OPEN{1,?_OS_DRIVE??_P?I?_P?I.?_SYSTEM??_P?BAT?_P?Z_PERMISSION.CFG,/};
L-M-=SET{W0.PERMISSION=0};
L-M-=READ_NEXT_R1:READ_NEXT{1,}JUMP{READ_END_R1};
L-M-=COMPUTE{W0.PERMISSION+=1};SET{WC.PERMISSION?W0.PERMISSION?=_READ_DATA};
L-M-=BACK{READ_NEXT_R1};
L-M-=READ_END_R1:READ_CLOSE{1};
****( O　書き込)**********
O+=WRITE{1,'sqlplus -l / as sysdba @?_TMP??WC.FILE?.TXT 2>>?_TMP??WC.FILE?.TMP'};
O+W+=SET{WC.DRV1=$DRIVE1+':',WC.DRV2=$DRIVE3+':'};
O+U+=SET{WC.DRV1='/'+$DRIVE1,WC.DRV2='/'+$DRIVE3};
O+=SET{W0.CNT=1};
O+=LOOP: PERMISSION*
O+=SET{WC.PERMISSION=WC.PERMISSION?W0.CNT?};
O+REPEAT=2  ##=R,T
O+REPEAT2=2 $$=M,W
O+=WRITE{2,'DROP TABLESPACE I_?_SYSTEM?_?WC.R_T##?_?WC.M_W$$?_?WC.PERMISSION? INCLUDING CONTENTS;'};
O+=WRITE{1,'?WC.ERASE? ?WC.DRV##??_P?I?_P?DATABASE_DAT_?_DB??_P?I_?_SYSTEM?_?WC.R_T##?_?WC.M_W$$?_?WC.PERMISSION?.ora 2>>?_TMP??WC.FILE?.TMP'};
O+REPEAT=
O+=IF{W0.CNT<W0.PERMISSION}COMPUTE{W0.CNT+=1}BACK{LOOP};
W+P+=SET{WC.P_PATH='?_DB_SOFT[2;1]?.?_DB_SOFT[3;1]?'};
W+P+=IF{_DB_SOFT[2;1]!='9'}SET{WC.P_PATH=_DB_SOFT[2;2]};
W+D+=SET{WC.P_PATH='?_DB_SOFT[2;1]?_?_DB_SOFT[3;1]?'};
W+P+=SET{INSTALL_PATH=_OS_DRIVE+_P+'Program Files'+_P+'PostgreSQL'+_P+WC.P_PATH};
W+D+=SET{INSTALL_PATH=_OS_DRIVE+_P+'Program Files'+_P+'Firebird'+_P+'Firebird_'+WC.P_PATH};
W+P+|D+=EXIT3{INSTALL_PATH}
W+P+|D+FORM=INSTALL_PATH @
W+P+|D+DATA=INSTALL_PATH{65}
W+P+=SET{WC.DROPDB=INSTALL_PATH+_P+'bin'+_P+'dropdb?WC.EXT?'};
W+P+=SET{WC.EXE=INSTALL_PATH+_P+'bin'+_P+'psql?WC.EXT?'};
W+D+=SET{WC.EXE=INSTALL_PATH+_P+'bin'+_P+'gsec?WC.EXT?'};
W+P+|D+=IF_FILE_NOT{?WC.EXE?}ERROR{(?WC.EXE?) not found};
W+D+=SET{WC.DB=_INSTANCE+_P+'I'+_P+'DATABASE'+_P+_SYSTEM+'.I'+_P+'I_'+_SYSTEM+'.FDB'};
*=SET{_LOWER=_SYSTEM,WC.SYSTEM_LOWER=_LOWER};
D+=WRITE{1,'?WC.ERASE? ?_INSTANCE??_P?I?_P?DATABASE_DAT_D?_P?I_?_SYSTEM?.FDB　2>>?_TMP??WC.FILE?.TMP'};
W+P+=WRITE{1,'"?WC.DROPDB?"  -U ?_LOGIN_ID? i_?_SYSTEM@LOWER? 2>>?_TMP??WC.FILE?.TMP'};
U+P+=WRITE{1,su - -c 'dropdb i_?_SYSTEM@LOWER? 2>>?_TMP??WC.FILE?.TMP' postgres};
W+P+=WRITE{1,       '"?WC.EXE?" -U postgres -f ?_TMP??WC.FILE?.TXT 2>>?_TMP??WC.FILE?.TMP'};
U+P+=WRITE{1,su - -c '?WC.EXE?  -U postgres -f ?_TMP??WC.FILE?.TXT 2>>?_TMP??WC.FILE?.TMP' postgres};
*****( I データベース )*****************
I+W+=SET{WC.DB2='DB2CMD -I -C -W DB2',WC.DB2_END=};
I+U+=SET{WC.DB2='su - -c ''db2',WC.DB2_END=''' db2inst1'};
I+=WRITE{2,'CONNECT TO I_?_SYSTEM?'};
I+=WRITE{2,'UNQUIESCE DATABASE'};
I+=WRITE{2,'QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS'};
I+=WRITE{2,'UNQUIESCE DATABASE'};
I+=WRITE{2,'CONNECT RESET'};
I+=WRITE{2,'DROP DATABASE I_?_SYSTEM?'};
I+=WRITE{1,'?WC.DB2? -f ?_TMP??WC.FILE?.TXT >>?_TMP??WC.FILE?.TMP 2>&1 ?WC.DB2_END?'}; 
*****( D,I,O,P ユーザー )*****************
I+W+=SET{WC.USER1='NET USER',WC.USER2='/DELETE'};
I+U+=SET{WC.USER1='userdel' ,WC.USER2=};
O-=SET{WC.CASCADE=};
O+=SET{WC.CASCADE='CASCADE'};
D+|I+|O+|P+=SET{W0.C=1};
D+|I+|O+|P+=LOOP:
D+|O+|P+=SET{WC.PERMISSION=WC.PERMISSION?W0.C?};
I+   =SET{WC.PERMISSION=WC.PERMISSION?W0.C?@LOWER};
D+|I+|O+|P+REPEAT=2 r,t
D+|I+|O+|P+REPEAT2=4 d,i,o,l
I+=WRITE{1,'?WC.USER1? ?_SYSTEM@LOWER??WC.R_T##@LOWER??WC.D_I_O_L$$@LOWER??WC.PERMISSION? ?WC.USER2? 2>>?_TMP??WC.FILE?.TMP'};
D+=SET{_TRACE=0};
D+=WRITE{1,'"?WC.EXE?" -user ?_LOGIN_ID? -password ?$PASSWORD_ADMIN? -delete I_?_SYSTEM?_?WC.R_T##?_?WC.D_I_O_L$$?_?WC.PERMISSION?'};
D+=SET{_TRACE=WC.TRACE};
O+|P+=WRITE{2,'DROP USER I_?_SYSTEM?_?WC.R_T##?_?WC.D_I_O_L$$?_?WC.PERMISSION? ?WC.CASCADE?;'};
D+|I+|O+|P+REPEAT=
O+=WRITE{2,'EXIT'};
D+|I+|O+=IF{W0.C<W0.PERMISSION}COMPUTE{W0.C+=1}BACK{LOOP};
=WRITE_CLOSE{1};
U+=COMMAND{chmod 777 ?_TMP??WC.FILE?.BAT};
I+|O+|P+=WRITE_CLOSE{2};
U+=COMMAND{chmod 777 ?_TMP??WC.FILE?.TXT};
=COMMAND{?_TMP??WC.FILE?.BAT};
=ERASE_FILE{?WC.FILE?.BAT};
******(クライアントインストール)**********************************
NAME=MSG_CHK
*******(　結果読み込み W0.MSG,WN.MSG)*************
=READ_OPEN{1,?_TMP??WC.FILE?.TMP,/};
=READ_NEXT_R1:READ_NEXT{1,}JUMP{READ_END_R1};
=IF{_READ_DATA=,='*'}BACK{READ_NEXT_R1};
=IF{_READ_DATA/'SQL1032N  start database manager',/'ORA-12560:'}
=    READ_CLOSE{1}ERROR{サービスが起動していない可能性が有ります。起動してから続行して下さい。};
=COMPUTE{W0.MSG+=1};
=SPLIT_FORM{WN.SPLIT.}{_READ_DATA}{80};
=SET{WN.MSG?W0.MSG?=WN.SPLIT.1};
=BACK{READ_NEXT_R1};
=READ_END_R1:READ_CLOSE{1};
*******( 結果表示 )*************
PROGRAM=NOT
CONTROL=PROGRAM,ERROR,SQL_DBO
FORM= (データベース関連結果確認)
REPEAT=W0.MSG
0+FORM=削除しました。エラーは有りません！
0-FORM=@
0-DATA={O}$WN.MSG##{80}
REPEAT=
NAME=
DATA={N}DUMMY{1}
=IF{W0.MSG=0}SET{YES='YES'}EXIT3{};
FORM=YES @@@@ {YES,NO}(メッセージが在りますが、処理を続行しますか）
DATA=YES{4}{YES,NO}
**************************************************************
=IF{_DATA!='YES'}EXIT{YES};
=WRITE_OPEN{1,?_TMP??WC.FILE?.BAT,OT,/};
=SET{WC.1='WINDOWS',WC.2='LINUX'};
REPEAT=2
=SET{WC.WRITE=WC.ERASE+' '+_OS_DRIVE+_P+'I'+_P+'SHARE'+_P+WC.##+_P+'SETUP_'+_SYSTEM+'_* >>'+_TMP+WC.FILE+'.TMP 2>&1'};
=WRITE{1,WC.WRITE};
=SET{WC.WRITE=WC.ERASE+' '+_OS_DRIVE+_P+'I'+_P+'SHARE'+_P+WC.##+_P+'CLIENT'+_P+'I_'+_SERVER_NAME+'_'+_SYSTEM+'.I >>'+_TMP+WC.FILE+'.TMP 2>&1'};
=WRITE{1,WC.WRITE};
REPEAT=
=SET{WC.WRITE=WC.ERASE+' '+_OS_DRIVE+_P+'I'+_P+'SHARE'+_P+'LINUX'+_P+'CLIENT'+_P+'SETUP_'+_SYSTEM+'_* >>'+_TMP+WC.FILE+'.TMP 2>&1'};
=WRITE{1,WC.WRITE};
=SET{WC.WRITE=WC.RMDIR+' '+_OS_DRIVE+_P+'I'+_P+'I.'+_SYSTEM+' 2>>'+_TMP+WC.FILE+'.TMP'};
=WRITE{1,WC.WRITE};
W+=SET{WC.WRITE=WC.ERASE+' "'+_OS_DRIVE+_P+'ProgramData'+_P+'Microsoft'+_P+'Windows'+_P+'Start Menu'+_P+'Programs'+_P+'StartUp'+_P+_IV+'SERVER_'+_SYSTEM+'_0*" >>'+_TMP+WC.FILE+'.TMP 2>&1'};
W+=WRITE{1,WC.WRITE};
W+=SET{WC.WRITE=WC.ERASE+' "'+_OS_DRIVE+_P+'ProgramData'+_P+'Microsoft'+_P+'Windows'+_P+'Start Menu'+_P+SYSTEM_NAME+'.LNK" >>'+_TMP+WC.FILE+'.TMP 2>&1'};
W+=WRITE{1,WC.WRITE};
W+=SET{WC.WRITE=WC.ERASE+' '+_OS_DRIVE+_P+'Users'+_P+'Public'+_P+'Desktop'+_P+SYSTEM_NAME+'.LNK >>'+_TMP+WC.FILE+'.TMP 2>&1'};
W+=WRITE{1,WC.WRITE};
=WRITE_CLOSE{1};
U+=COMMAND{chmod 777 ?_TMP??WC.FILE?.BAT};
=COMMAND{?_TMP??WC.FILE?.BAT};
=ERASE_FILE{?WC.FILE?.BAT};
****************************************************
COPY=MSG_CHK 
FORM=END @@@@ {YES}
DATA=END{4}{YES,NO}
=IF{_DATA='YES'}EXIT{0};
=EXIT{END};
