home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Phoenix Heaven Sunny 2
/
APPARE2.BIN
/
oh_towns
/
install
/
instexec.c
< prev
next >
Wrap
Text File
|
1995-06-20
|
9KB
|
308 lines
/*************************************************************************
* インストール処理
*************************************************************************/
int install_exec( char **probuf )
{
int ret, i, fcopy_att, drv, argc, srcdrv;
char **argv, *p, *typename;
char instdir[256];
char softname[80];
char srcdir[128], instfile[128];
char helpfn[128];
char item_ttl[80],item_prog[32], item_para[128];
int item_setup, item_num, item_att;
char arcfn[128], arcdir[128], arcflag;
char runfn[128], runpara[128];
char demo_msg[80], demo_func[80];
char *lhalib;
char *dlgTxm;
char tmp[256], tmp2[256];
fcopy_att = FCOPY_ATT_SUBDIR | FCOPY_ATT_TIMESTAMP | FCOPY_ATT_CHK_OVERWRITE;
instdir[0] = '\0';
srcdir[0] = '\0';
instfile[0] = '\0';
helpfn[0] = '\0';
item_num = 0;
item_ttl[0] = '\0';
arcfn[0] = '\0';
arcdir[0] = '\0';
arcflag = 0;
runpara[0] = '\0';
runfn[0] = '\0';
demo_msg[0] = '\0';
demo_func[0] = '\0';
srcdrv = toupper(DirStart[0]) - 'A';
/* インストールプロジェクト設定 --------------------------------*/
for ( i = 0; probuf[i] != NULL; ++i )
{
if ( (argc = DTA_makeArg(probuf[i],&argv)) > 0 )
{
typename = argv[0];
if ( strcmpi(typename,"softname") == 0 )
{
if ( argc >= 2 )
strcpy( softname, argv[1]);
} else if ( strcmpi(typename,"instfile") == 0 )
{
if ( argc >= 2 )
strcpy(srcdir , argv[1]);
if ( argc >= 3 )
strcpy(instfile, argv[2]);
if ( argc >= 4 )
{
if ( strcmpi(argv[3],"-nocopydir") == 0 )
fcopy_att &= (~FCOPY_ATT_SUBDIR);
}
} else if ( strcmpi(typename,"help") == 0 )
{
if ( argc >= 2 )
{
if ( FS_isDelim(argv[1][0]) )
strcpy(helpfn, argv[1]);
else if ( srcdir[0] != '\0' )
sprintf(helpfn,"%s/%s",srcdir,argv[1]);
}
} else if ( strcmpi(typename,"item") == 0 )
{
++item_num;
if ( argc >= 5 )
{
strcpy(item_ttl , argv[1]);
strcpy(item_prog, argv[2]);
strcpy(item_para, argv[3]);
item_att = atoi(argv[4]);
}
} else if ( strcmpi(typename,"arcfile") == 0 )
{ /* arcfile "filename.lzh" <展開ディクトリ> */
if ( argc >= 2 )
{
strcpy( arcfn , argv[1]);
arcflag = 1;
}
if ( argc >= 3 ) /* ソースリストとみなす */
strcpy( arcdir, argv[2]);
} else if ( strcmpi(typename,"runexp") == 0 )
{
if ( argc >= 2 && srcdir[0] )
{
strcpy(runfn,srcdir);
add_path_fn(runfn,argv[1]);
}
if ( argc >= 3 )
strcpy(runpara,argv[2]);
} else if ( strcmpi(typename,"demo") == 0 )
{
if ( argc >= 3 )
{
strcpy(demo_msg ,argv[1]);
strcpy(demo_func,argv[2]);
}
}
DTA_clearArg(argc,argv);
}
}
/* インストールトップメニュー ------------------------------------*/
_TOP:
syl_putf("%s",softname);
dlgTxm = DlgTxm_open(ColBoxNormal);
DlgTxm_setTitle(dlgTxm,Fnt16x16,softname);
DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER,
"%s をインストールします。", softname );
DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\r' , KA_EXEC ,
1, "", NULL, "インストール : [実行]");
DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, 'H' , KA_H ,
2, "inst_help", helpfn, "説明 : [H]");
if ( runfn[0] )
{
DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, 'R' , KA_R ,
3, "", NULL, "実行 : [R]");
} else if ( demo_msg[0] )
{
DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, 'D' , KA_D ,
3, "", NULL, "%s : [D]", demo_msg);
}
DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\x1B', KA_CANCEL,
4, "", NULL, "取消 : [取消]");
DlgTxm_setSize(dlgTxm,320,40);
DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);
do
{
ret = DlgTxm_start(dlgTxm);
} while ( ret == 2 );
DlgTxm_close(dlgTxm);
if ( ret == 3 )
{
if ( runfn[0] )
{
dlgTxm = DlgTxm_open(ColBoxCaution);
DlgTxm_setTitle(dlgTxm,Fnt16x16,softname);
DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER,
"%s を実行します。", softname );
DlgTxm_putf( dlgTxm, Fnt16x12, TXMDAT_ATT_CENTER,"");
DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER,
"※ メモリが不足している場合は実行できません。" );
DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\r' , KA_EXEC ,
1, "", NULL, "実行 : [実行]");
DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\x1B', KA_CANCEL,
0, "", NULL, "取消 : [取消]");
DlgTxm_setSize(dlgTxm,400,40);
DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);
ret = DlgTxm_start(dlgTxm);
DlgTxm_close(dlgTxm);
if ( ret == 1 )
exprun(runfn,runpara);
} else if ( demo_msg )
{
_funcCall(demo_func, 0);
}
goto _TOP;
} else if ( ret != 1 )
goto _RET;
/* ソース展開確認 ------------------------------------------------*/
if ( arcfn[0] && arcdir[0] )
{
dlgTxm = DlgTxm_open(ColBoxNormal);
DlgTxm_setTitle(dlgTxm,Fnt16x16,softname);
DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER,
"ソースプログラムもインストールしますか?" );
DlgTxm_setBtn( dlgTxm, Fnt16x16, 160, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, 'S' , KA_S ,
1, "", 0, "ソースをインストールする : [S]");
DlgTxm_setBtn( dlgTxm, Fnt16x16, 160, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\x1B', KA_CANCEL,
0, "", 0, "インストールしない : [取消]");
DlgTxm_setSize(dlgTxm,480,40);
DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);
ret = DlgTxm_start(dlgTxm);
DlgTxm_close(dlgTxm);
arcflag = (ret == 1) ? 1 : 0;
}
/* インストール先指定 --------------------------------------------*/
ret = APL_setInstallDir(instdir,"%s : インストール先指定", softname);
if ( ret )
goto _TOP;
dlgTxm = DlgTxm_open(ColBoxNormal);
DlgTxm_setTitle(dlgTxm,Fnt16x16,softname);
DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER,
"%s", instdir );
DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER,
"このディレクトリにインストールしてもいいですか?" );
DlgTxm_putf( dlgTxm, Fnt16x12, TXMDAT_ATT_CENTER,"");
if ( item_ttl[0] )
{
DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER,
"インストール1 … ファイルを複写してTownsMENU にアイテム登録");
DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER,
"インストール2 … ファイルを複写(アイテム登録はしない) ");
DlgTxm_setBtn( dlgTxm, Fnt16x16, 144, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\r' , KA_EXEC , 1, "", 0, "インストール1 : [実行]");
DlgTxm_setBtn( dlgTxm, Fnt16x16, 144, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, 'C' , KA_C , 2, "", 0, "インストール2 : [C]");
} else
{ /* アイテム登録はなし */
DlgTxm_setBtn( dlgTxm, Fnt16x16, 144, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\r' , KA_EXEC , 2, "", 0, "インストール : [実行]");
}
DlgTxm_setBtn( dlgTxm, Fnt16x16, 144, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\x1B', KA_CANCEL, 3, "", 0, "取消 : [取消]");
DlgTxm_setSize(dlgTxm,320,40);
DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);
ret = DlgTxm_start(dlgTxm);
DlgTxm_close(dlgTxm);
if ( ret != 1 && ret != 2 )
goto _TOP;
item_setup = (ret == 1 ? 1 : 0);
/* インストール開始 ------------------------------------------------*/
syl_putf("INSTALL START");
FS_chdrv(srcdrv);
if ( *srcdir == '\0' || *srcdir == '.' )
{
strcpy(tmp,DirStart);
ret = strlen(tmp);
if ( ret > 3 && FS_isDelim(tmp[ret-1]) )
tmp[ret-1] = '\0';
} else
{
if ( FS_isDelim(*srcdir) )
strcpy(tmp,srcdir);
else
sprintf(tmp,"%s%s",DirStart, srcdir);
}
if ( instfile[0] )
{
FS_getFullPn(tmp2,tmp);
srcdir = tmp2;
ret = FCOPY_exec(fcopy_att, srcdir, instfile, instdir);
}
/* 書庫展開 --------------------------------------------------------*/
if ( arcfn[0] && arcflag )
{
syl_putf("ARC(.LZH) FILE EXTRACT");
FS_chdrv(srcdrv);
strcpy(tmp,srcdir);
add_path_fn(tmp,arcfn);
strcpy(tmp2,instdir);
if ( arcdir[0] )
add_path_fn(tmp2,arcdir);
if ( (lhalib = LHA_openArc(tmp)) != NULL )
{
ret = LHA_extractAll(lhalib,tmp2);
LHA_closeArc(lhalib);
} else
{
syl_putf("ARC OPEN ERROR");
ret = ERR;
}
}
/* アイテム登録 ----------------------------------------------------*/
if ( ret == NORMAL && item_setup != 0 )
{
syl_putf("ITEM SETUP");
drv = toupper(instdir[0]) - 'A';
if ( item_num == 1 )
{ /* 単一 */
strcpy(tmp,instdir);
add_path_fn(tmp,item_prog);
item_setApl( drv, 1024, item_ttl, tmp, item_para, item_att );
} else
{ /* 複数登録 */
for ( i = 0; probuf[i] != NULL; ++i )
{
if ( (argc = DTA_makeArg(probuf[i],&argv)) > 0 )
{
typename = argv[0];
if ( strcmpi(typename,"item") == 0 )
{
if ( argc >= 5 )
{
strcpy(item_ttl , argv[1]);
strcpy(item_prog, argv[2]);
strcpy(item_para, argv[3]);
item_att = atoi(argv[4]);
strcpy(tmp,instdir);
add_path_fn(tmp,item_prog);
item_setApl( drv, 1024, item_ttl, tmp, item_para, item_att );
}
}
DTA_clearArg(argc,argv);
}
}
}
}
install_end( softname, ret );
_RET:
syl_clear();
return (0);
}