#include <stdio.h>
#include <string.h>

/*
IBCMC.EXE	Ver0.70 1998/07/20
Ipmsg BroadCast setup files Maker Command line edition.
Copyright (C); 1997,1998 RONA shun-shin / Kanou Toshinobu, ALL RIGHT RESERVED
IP Messenger の Broadcast 設定用のファイルを作成するプログラム
LSI C-86 Ver.3.30c 試食版（エル・エス・アイ ジャパン(株)製）にてコンパイル
ＤＯＳ系ＯＳ上（９５，ＮＴ含む）にて実行可能（なはず）
MKBCREG.EXE より改名
*/


int main(int argc,char *argv[]){

	FILE *input;	/* IPアドレス入力ファイルへのファイルポインタ	*/
	FILE *out32;	/* 32bit用出力ファイルへのファイルポインタ	*/
	FILE *out16;	/* 16bit用出力ファイルへのファイルポインタ	*/
	FILE *outMac;	/* Mac用出力ファイルへのファイルポインタ	*/
	FILE *outEtc;	/* Java,X用出力ファイルへのファイルポインタ	*/

	char IPaddress[18];	/* IPアドレスのリスト	*/
	char *temp;		/* テンポラリ	*/
	int i;			/* ループ用	*/
	int aaa,bbb,ccc,ddd;	/* IPアドレスの各要素	*/

	printf("IBCMC.EXE Ver0.70 1998/07/20\n");
	printf("Ipmsg BroadCast setup files Maker Command line edition.\n");
	printf("Copyright (C); 1997,1998"); 
	printf(" RONA shun-shin / Kanou Toshinobu, ALL RIGHT RESERVED\n");
	printf("http://member.nifty.ne.jp/rona/kobo/\n");
	printf("mailto:rona.kanou@nifty.ne.jp\n\n");
		/* 著作権表示	*/

	if(argc == 1){
		/* ファイル名が指定されていない場合	*/
		printf("入力するファイル名を指定して下さい\n");
		printf("usage: ibcmc inputfilename\n");
		return(1);
	}

	if((input = fopen(argv[1],"rt") ) == NULL){
		/* 入力ファイルのオープン	*/
		/* 処理系によっては "rt" ではなく "r" にする必要あり	*/
		printf("入力ファイルをオープンできません\n");
		fcloseall();
		return(1);
	}

	if((out32 = fopen("ipmsg32.reg","wt") ) == NULL){
		/* 32bit用の出力ファイルオープン	*/
		/* 処理系によっては "wt" ではなく "w" にする必要あり	*/
		printf("Win32用出力ファイルをオープンできません\n");
		fcloseall();
		return(1);
	}

	if((out16 = fopen("ipmsg16.reg","wt") ) == NULL){
		/* 16bit用の出力ファイルオープン	*/
		/* 処理系によっては "wt" ではなく "w" にする必要あり	*/
		printf("Win16用出力ファイルをオープンできません\n");
		fcloseall();
		return(1);
	}

	if((outMac = fopen("ip_bcast.","w") ) == NULL){
		/* Mac用の出力ファイルオープン	*/
		printf("Mac用出力ファイルをオープンできません\n");
		fcloseall();
		return(1);
	}

	if((outEtc = fopen("ip.lst","wt") ) == NULL){
		/* Java,X用の出力ファイルオープン	*/
		/* 処理系によっては "wt" ではなく "w" にする必要あり	*/
		printf("Java,X用出力ファイルをオープンできません\n");
		fcloseall();
		return(1);
	}

	fprintf(out32,"REGEDIT4\n");
		/* Win32bit用のレジストリエディタ用の呪文	*/
	fprintf(out16,"REGEDIT\n");
		/* Win16bit用のレジストリエディタ用の呪文	*/
	fprintf(outMac,"  %c%c%c%c",255,255,255,255);
		/* Mac用の呪文	*/
	fprintf(outEtc,"255.255.255.255");
		/* Java,X用の呪文	*/

	for(i=0;fgets(IPaddress,17,input) != NULL;i++){
		/* 読み込めるIPアドレスがなくなるまで繰り返し	*/
		if((temp = strchr(IPaddress,'\n')) != NULL){
		/* 文字列に改行が含まれていた場合、ヌルに置き換える	*/
			*temp = '\0';
		}

		fprintf(out32,"[HKEY_CURRENT_USER\\Software\\HSTools\\IPMsg\\BroadCast\\%d]\n\"\"=\"%s\"\n",i,IPaddress);
			/* Win32bit用のレジストリ登録文字列出力	*/

		fprintf(out16,"HKEY_CLASSES_ROOT\\HSTools\\IPMsg\\BroadCast\\%d = %s\n",i,IPaddress);
			/* Win16bit用のレジストリ登録文字列出力	*/

		sscanf(IPaddress,"%d.%d.%d.%d",&aaa,&bbb,&ccc,&ddd);
			/* IPアドレス文字列から各要素を抽出	*/
		fprintf(outMac,"%c%c%c%c",(unsigned char)aaa,(unsigned char)bbb,(unsigned char)ccc,(unsigned char)ddd);
			/* Mac用の文字列出力	*/

		fprintf(outEtc,",%s",IPaddress);
			/* Java,X用の文字列出力	*/
	}
	fseek(outMac, (long)0, SEEK_SET);
		/* Mac用のファイルの先頭に移動	*/
	i++;	/* BroadCastアドレス(255.255.255.255)の分を足す	*/
	fprintf(outMac,"%c%c",(unsigned char)(i/256),(unsigned char)(i%256));
		/* Mac用のファイルの先頭にIPアドレス数を書き込み	*/

	fprintf(outEtc,"\n");
		/* Java,X用のファイルの最後に改行を追加	*/

	fcloseall();
	printf("設定ファイルは正常に作成されました\n");
	return(0);
}
