#include <windows.h>
#include <stdio.h>
#include <string.h>

void die( char *mes )
{
	fprintf( stderr, "%s\n", mes );
	getchar();
	exit(1);
}
void zipsend( char *me, char *folder )
{
	int len = strlen( folder );
	char *cmdbuf = (char *) malloc( strlen( folder ) *2 );
	char *mydir = (char *) malloc( strlen( folder ) +2 );
	char *inifile = (char *) malloc( strlen( folder ) +2 );
	char *p;
	int quote = 0;
	int quotefolder = 0;

	FILE *fpR, *fpW;
	char *filer = (char *) malloc( strlen( folder ) *2 );
	char *filew = (char *) malloc( strlen( folder ) *2 );
	long filelen;
	int c;
	#define READBUF 1048576
	char *buf = (char *) malloc( READBUF );

	strcpy( mydir, me );
	p = strstr( mydir, "\\zipsend.exe" );
	if ( p == NULL ) die( "call me with name zipsend.exe");
	*p = '\0';
	if ( strrchr( me, ' ' ) != NULL ) quote = 1;
	if ( strrchr( folder, ' ' ) != NULL ) quotefolder = 1;

	p = strrchr( folder, '\\' );
	p++;

	*cmdbuf = '\0';

	if ( quote ) strcat( cmdbuf, "\"" );
	strcat( cmdbuf, mydir );
	strcat( cmdbuf, "\\zip.exe" );
	if ( quote ) strcat( cmdbuf, "\"" );

	strcat( cmdbuf, " " );

	if ( quote ) strcat( cmdbuf, "\"" );
	strcat( cmdbuf, mydir );
	strcat( cmdbuf, "\\" );
	strcat( cmdbuf, p );
	strcat( cmdbuf, ".zip" );
	if ( quote ) strcat( cmdbuf, "\"" );

	strcat( cmdbuf, " " );

	if ( quotefolder ) strcat( cmdbuf, "\"" );
	strcat( cmdbuf, folder );
	if ( quotefolder ) strcat( cmdbuf, "\"" );

	strcat( cmdbuf, " -r" );
//	sprintf( cmdbuf, "%s\\zip.exe %s\\%s.zip %s -r", mydir, mydir, p, folder );

	printf( "exec %s\n", cmdbuf );
	system( cmdbuf );

	sprintf( filer, "%s\\%s.zip", mydir, p );
	sprintf( filew, "%s\\%s.post", mydir, p );

	fpR = fopen( filer, "rb" );
	if ( fpR == NULL ) die( "fopen for read failed" );
	fpW = fopen( filew, "wb" );
	if ( fpW == NULL ) die( "fopen for read failed" );

	fprintf( fpW, "--%s\r\n", p );
	fprintf( fpW, "Content-Disposition: form-data; name=\"uploaded_file\"; filename=\"%s.zip\"\r\n", p );
	fprintf( fpW, "Content-Type: application/octet-stream\r\n" );
	fprintf( fpW, "\r\n" );

	fseek( fpR, 0, SEEK_END );
	filelen = ftell( fpR );
	fseek( fpR, 0, SEEK_SET );
	c = filelen;
	while ( c > 0 ) {
		int mylen = READBUF < c ? READBUF : c;
		fread( buf, mylen, 1, fpR );
		fwrite( buf, mylen, 1, fpW );
		c -= mylen;
	}

	fprintf( fpW, "\r\n" );
	fprintf( fpW, "--%s--\r\n", p );

	fclose( fpR );
	fclose( fpW );


/*
wget $url --header="Content-Type: multipart/form-data; boundary=$bstr" \
--post-file=test.post --proxy=off -S
*/
	*cmdbuf = '\0';

	if ( quote ) strcat( cmdbuf, "\"" );
	strcat( cmdbuf, mydir );
	strcat( cmdbuf, "\\wget.exe" );
	if ( quote ) strcat( cmdbuf, "\"" );

	strcat( cmdbuf, " " );

	strcat( cmdbuf, "\"--header\" \"Content-Type: multipart/form-data; boundary=" );
	strcat( cmdbuf, p );
	strcat( cmdbuf, "\"" );

	strcat( cmdbuf, " " );

	strcat( cmdbuf, "--post-file " );

	if ( quote ) strcat( cmdbuf, "\"" );
	strcat( cmdbuf, mydir );
	strcat( cmdbuf, "\\" );
	strcat( cmdbuf, p );
	strcat( cmdbuf, ".post" );
	if ( quote ) strcat( cmdbuf, "\"" );

	strcat( cmdbuf, " -O " );

	if ( quote ) strcat( cmdbuf, "\"" );
	strcat( cmdbuf, mydir );
	strcat( cmdbuf, "\\" );
	strcat( cmdbuf, p );
	strcat( cmdbuf, ".out" );
	if ( quote ) strcat( cmdbuf, "\"" );

	*inifile = '\0';
	strcat( inifile, mydir );
	strcat( inifile, "\\zipsend.ini" );

	GetPrivateProfileString("wget", "url", "http://sandbox.woremacx.com/backend/",
		buf, READBUF, inifile );

	strcat( cmdbuf, " " );
	strcat( cmdbuf, buf );

	printf( "exec %s\n", cmdbuf );
	system( cmdbuf );

	getcwd(buf, READBUF);
	printf("pwd:%s\n",buf);
}
main( int argc, char *argv[] )
{
    int c;

    for ( c = 0; c < argc; c++ ) {
		printf( "argv[%d]: %s\n", c, argv[c] );
	}

	zipsend( argv[0], argv[1] );

	getchar();

	return 0;
}



#if 0
* requires

  * zip.exe
    - http://www.csdinc.co.jp/archiver/app/dosp/zuz.html#download
    - http://www.csdinc.co.jp/archiver/app/dosp/zuz002.lzh

  * zip32.dll
    - http://www.csdinc.co.jp/archiver/lib/zip32j.html#download
    - http://www.csdinc.co.jp/archiver/lib/zip231dN.zip

  * zip32j.dll
    - http://www.csdinc.co.jp/archiver/lib/zip32j.html#download
    - http://www.csdinc.co.jp/archiver/lib/zip3j037.lzh

  * wget.exe
    - http://users.ugent.be/~bpuype/wget/#download
    - http://users.ugent.be/~bpuype/cgi-bin/fetch.pl?dl=wget/wget.exe

* firefox setting:
  - about:config
    - scrapbook.zipsendcmd: c:\path_to\zipsend.exe

#endif
