// File: BleuLlama[P]msf-tools/msf-autosave.cpp
// Function: main
int main( int argc, char ** argv )
{
	char * pth;

	pth = getenv( "VOICERECORDER" );
	if( !pth ) {
		usage( argv[0] );
		return -1;
	}

	if( argc != 2 ) {
		usage( argv[0] );
		return -3;
	}

	std::string targetDir( argv[1] );
	if( !DiskUtils::IsValidDir( targetDir ))
	{
		DiskUtils::MakeDir( targetDir );

		if( !DiskUtils::IsValidDir( targetDir ))
		{
			std::cerr << "Unable to use target directory: " << targetDir << std::endl;
			return -4;
		}
	}

	// NOTE: on windows, put in a scan for a drive with label "IC_RECORDER"

	VoiceFile vf( pth );
	if( !vf.Valid() ) {
		std::cerr << "Directory is invalid: " << pth << std::endl;
		return -2;
	}


	for( int f=0 ; f<vf.GetFolderCount() ; f++ )
	{
		int fc = vf.GetFileCountForFolder( f );
		if( fc > 0 ) {
			std::string plural = "s";
			if( fc == 1 ) plural = "";

			std::cout << std::endl;
			std::cout << vf.GetFolderName( f ) << ": Extracting " << fc << " item" << plural << "." << std::endl;
	
			std::string folderPath = vf.GetPathForFolder( f );

			for( int i=0 ; i < fc ; i ++ ) {
				std::string sourceFile( folderPath );
				sourceFile.append( "/" );
				sourceFile.append( vf.GetFileInFolder( i, f ));

				std::string destFile( targetDir );
				destFile.append( "/" );
				destFile.append( vf.GetFolderName( f ));

				DiskUtils::MakeDir( destFile );

				destFile.append( "/" );
				destFile.append( vf.SortableDateForFileInFolder( i, f ));
				destFile.append( "__" );
				destFile.append( vf.GetFileInFolder( i, f ) );

				float fs = ((float)DiskUtils::FileSize( sourceFile )) / 1024.0/1024.0; 
				std::cout << "  Copying " << vf.GetFileInFolder( i, f )
					  << "  --  " << vf.PrintableDateForFileInFolder( i, f ) 
					  << " (" << std::setprecision( 2 ) << fs << " MB)";

				bool skipped = DiskUtils::CopyFile( sourceFile, destFile );
				if( skipped ) {
					std::cout << " (skipped)";
				}
				std::cout << std::endl;
			}
		}
	}

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x450, %rsp            # imm = 0x450
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq 0x1721(%rip), %rdi      # 0x6311
callq 0x2230
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x4c18
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4a80
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x57c9
cmpl $0x2, -0x8(%rbp)
je 0x4c36
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4a80
movl $0xfffffffd, -0x4(%rbp) # imm = 0xFFFFFFFD
jmp 0x57c9
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x368(%rbp)
leaq -0x39(%rbp), %rdi
movq %rdi, -0x360(%rbp)
callq 0x2330
movq -0x368(%rbp), %rsi
movq -0x360(%rbp), %rdx
leaq -0x38(%rbp), %rdi
callq 0x2e40
jmp 0x4c6e
leaq -0x39(%rbp), %rdi
callq 0x21c0
leaq -0x70(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x20a0
jmp 0x4c86
leaq -0x70(%rbp), %rdi
callq 0x2640
movb %al, -0x369(%rbp)
jmp 0x4c97
movb -0x369(%rbp), %al
xorb $-0x1, %al
movb %al, -0x36a(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x20e0
movb -0x36a(%rbp), %al
testb $0x1, %al
jne 0x4cbd
jmp 0x4e19
leaq -0x90(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x20a0
jmp 0x4ccf
leaq -0x90(%rbp), %rdi
callq 0x25c0
jmp 0x4cdd
leaq -0x90(%rbp), %rdi
callq 0x20e0
leaq -0xb0(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x20a0
jmp 0x4cfb
leaq -0xb0(%rbp), %rdi
callq 0x2640
movb %al, -0x36b(%rbp)
jmp 0x4d0f
movb -0x36b(%rbp), %al
xorb $-0x1, %al
movb %al, -0x36c(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x20e0
movb -0x36c(%rbp), %al
testb $0x1, %al
jne 0x4d38
jmp 0x4e17
movq 0x42b1(%rip), %rdi      # 0x8ff0
leaq 0x15d9(%rip), %rsi      # 0x631f
callq 0x2180
movq %rax, -0x378(%rbp)
jmp 0x4d54
movq -0x378(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x2150
movq %rax, -0x380(%rbp)
jmp 0x4d6d
movq -0x380(%rbp), %rdi
movq 0x4245(%rip), %rsi      # 0x8fc0
callq 0x21a0
jmp 0x4d82
movl $0xfffffffc, -0x4(%rbp) # imm = 0xFFFFFFFC
movl $0x1, -0xb4(%rbp)
jmp 0x57b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x39(%rbp), %rdi
callq 0x21c0
jmp 0x57d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x57be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x20e0
jmp 0x57be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x20e0
jmp 0x57be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x20e0
jmp 0x57be
jmp 0x4e19
movq -0x18(%rbp), %rax
movq %rax, -0x390(%rbp)
leaq -0x149(%rbp), %rdi
movq %rdi, -0x388(%rbp)
callq 0x2330
movq -0x390(%rbp), %rsi
movq -0x388(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x2e40
jmp 0x4e53
leaq -0x128(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x3210
jmp 0x4e68
leaq -0x148(%rbp), %rdi
callq 0x20e0
leaq -0x149(%rbp), %rdi
callq 0x21c0
leaq -0x128(%rbp), %rdi
callq 0x57e0
movb %al, -0x391(%rbp)
jmp 0x4e94
movb -0x391(%rbp), %al
testb $0x1, %al
jne 0x4f4c
jmp 0x4ea4
movq 0x4145(%rip), %rdi      # 0x8ff0
leaq 0x148e(%rip), %rsi      # 0x6340
callq 0x2180
movq %rax, -0x3a0(%rbp)
jmp 0x4ec0
movq -0x3a0(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2180
movq %rax, -0x3a8(%rbp)
jmp 0x4ed9
movq -0x3a8(%rbp), %rdi
movq 0x40d9(%rip), %rsi      # 0x8fc0
callq 0x21a0
jmp 0x4eee
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
movl $0x1, -0xb4(%rbp)
jmp 0x5797
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4f2a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x20e0
leaq -0x149(%rbp), %rdi
callq 0x21c0
jmp 0x57be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x57a5
movl $0x0, -0x150(%rbp)
movl -0x150(%rbp), %eax
movl %eax, -0x3b0(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x4000
movl %eax, -0x3ac(%rbp)
jmp 0x4f76
movl -0x3b0(%rbp), %eax
movl -0x3ac(%rbp), %ecx
cmpl %ecx, %eax
jge 0x5786
movl -0x150(%rbp), %esi
leaq -0x128(%rbp), %rdi
callq 0x4240
movl %eax, -0x3b4(%rbp)
jmp 0x4fa4
movl -0x3b4(%rbp), %eax
movl %eax, -0x154(%rbp)
cmpl $0x0, -0x154(%rbp)
jle 0x5770
leaq -0x179(%rbp), %rdi
movq %rdi, -0x3c0(%rbp)
callq 0x2330
movq -0x3c0(%rbp), %rdx
leaq 0x1379(%rip), %rsi      # 0x6357
leaq -0x178(%rbp), %rdi
callq 0x2e40
jmp 0x4fec
leaq -0x179(%rbp), %rdi
callq 0x21c0
cmpl $0x1, -0x154(%rbp)
jne 0x5046
leaq 0x11a4(%rip), %rsi      # 0x61ac
leaq -0x178(%rbp), %rdi
callq 0x2260
jmp 0x5016
jmp 0x5046
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x179(%rbp), %rdi
callq 0x21c0
jmp 0x57a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x5762
movq 0x3f83(%rip), %rdi      # 0x8fd0
movq 0x3f6c(%rip), %rsi      # 0x8fc0
callq 0x21a0
jmp 0x505b
movl -0x150(%rbp), %edx
leaq -0x1a0(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x4010
jmp 0x5076
movq 0x3f53(%rip), %rdi      # 0x8fd0
leaq -0x1a0(%rbp), %rsi
callq 0x2150
movq %rax, -0x3c8(%rbp)
jmp 0x5092
movq -0x3c8(%rbp), %rdi
leaq 0x12b9(%rip), %rsi      # 0x6359
callq 0x2180
movq %rax, -0x3d0(%rbp)
jmp 0x50ae
movq -0x3d0(%rbp), %rdi
movl -0x154(%rbp), %esi
callq 0x2310
movq %rax, -0x3d8(%rbp)
jmp 0x50c9
movq -0x3d8(%rbp), %rdi
leaq 0x1290(%rip), %rsi      # 0x6367
callq 0x2180
movq %rax, -0x3e0(%rbp)
jmp 0x50e5
movq -0x3e0(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x2150
movq %rax, -0x3e8(%rbp)
jmp 0x5101
movq -0x3e8(%rbp), %rdi
leaq 0xf0e(%rip), %rsi       # 0x601d
callq 0x2180
movq %rax, -0x3f0(%rbp)
jmp 0x511d
movq -0x3f0(%rbp), %rdi
movq 0x3e95(%rip), %rsi      # 0x8fc0
callq 0x21a0
jmp 0x5132
leaq -0x1a0(%rbp), %rdi
callq 0x20e0
movl -0x150(%rbp), %edx
leaq -0x1c0(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x4110
jmp 0x5159
movl $0x0, -0x1c4(%rbp)
movl -0x1c4(%rbp), %eax
cmpl -0x154(%rbp), %eax
jge 0x573c
leaq -0x1e8(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x20a0
jmp 0x518a
leaq 0xf84(%rip), %rsi       # 0x6115
leaq -0x1e8(%rbp), %rdi
callq 0x2360
jmp 0x519f
movl -0x1c4(%rbp), %edx
movl -0x150(%rbp), %ecx
leaq -0x208(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x42f0
jmp 0x51c0
leaq -0x1e8(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x2390
jmp 0x51d5
leaq -0x208(%rbp), %rdi
callq 0x20e0
leaq -0x228(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x20a0
jmp 0x51f3
leaq 0xf1b(%rip), %rsi       # 0x6115
leaq -0x228(%rbp), %rdi
callq 0x2360
jmp 0x5208
movl -0x150(%rbp), %edx
leaq -0x248(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x4010
jmp 0x5223
leaq -0x228(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x2390
jmp 0x5238
leaq -0x248(%rbp), %rdi
callq 0x20e0
leaq -0x268(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x20a0
jmp 0x5259
leaq -0x268(%rbp), %rdi
callq 0x25c0
jmp 0x5267
leaq -0x268(%rbp), %rdi
callq 0x20e0
leaq 0xe9b(%rip), %rsi       # 0x6115
leaq -0x228(%rbp), %rdi
callq 0x2360
jmp 0x5288
movl -0x1c4(%rbp), %edx
movl -0x150(%rbp), %ecx
leaq -0x288(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x4630
jmp 0x52a9
leaq -0x228(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x2390
jmp 0x52be
leaq -0x288(%rbp), %rdi
callq 0x20e0
leaq 0xefc(%rip), %rsi       # 0x61cd
leaq -0x228(%rbp), %rdi
callq 0x2360
jmp 0x52df
movl -0x1c4(%rbp), %edx
movl -0x150(%rbp), %ecx
leaq -0x2a8(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x42f0
jmp 0x5300
leaq -0x228(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x2390
jmp 0x5315
leaq -0x2a8(%rbp), %rdi
callq 0x20e0
leaq -0x2d0(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x20a0
jmp 0x5336
leaq -0x2d0(%rbp), %rdi
callq 0x26a0
movq %rax, -0x3f8(%rbp)
jmp 0x534b
movq -0x3f8(%rbp), %rax
cvtsi2ss %rax, %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0xead(%rip), %xmm1      # 0x6210
mulsd %xmm1, %xmm0
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x404(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x20e0
movss -0x404(%rbp), %xmm0
movss %xmm0, -0x2ac(%rbp)
movq 0x3c36(%rip), %rdi      # 0x8fd0
leaq 0xfcc(%rip), %rsi       # 0x636d
callq 0x2180
movq %rax, -0x400(%rbp)
jmp 0x53af
movl -0x1c4(%rbp), %edx
movl -0x150(%rbp), %ecx
leaq -0x2f0(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x42f0
jmp 0x53d0
movq -0x400(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x2150
movq %rax, -0x410(%rbp)
jmp 0x53ec
movq -0x410(%rbp), %rdi
leaq 0xf7e(%rip), %rsi       # 0x6378
callq 0x2180
movq %rax, -0x418(%rbp)
jmp 0x5408
movl -0x1c4(%rbp), %edx
movl -0x150(%rbp), %ecx
leaq -0x310(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x4480
jmp 0x5429
movq -0x418(%rbp), %rdi
leaq -0x310(%rbp), %rsi
callq 0x2150
movq %rax, -0x420(%rbp)
jmp 0x5445
movq -0x420(%rbp), %rdi
leaq 0xf2c(%rip), %rsi       # 0x637f
callq 0x2180
movq %rax, -0x428(%rbp)
jmp 0x5461
movl $0x2, %edi
callq 0x5800
movl %eax, -0x42c(%rbp)
jmp 0x5473
movq -0x428(%rbp), %rdi
movl -0x42c(%rbp), %eax
movl %eax, -0x314(%rbp)
movl -0x314(%rbp), %esi
callq 0x22d0
movq %rax, -0x438(%rbp)
jmp 0x549a
movq -0x438(%rbp), %rdi
movss -0x2ac(%rbp), %xmm0
callq 0x2110
movq %rax, -0x440(%rbp)
jmp 0x54b7
movq -0x440(%rbp), %rdi
leaq 0xebd(%rip), %rsi       # 0x6382
callq 0x2180
jmp 0x54cc
leaq -0x310(%rbp), %rdi
callq 0x20e0
leaq -0x2f0(%rbp), %rdi
callq 0x20e0
leaq -0x338(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x20a0
jmp 0x54f9
leaq -0x358(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x20a0
jmp 0x550e
leaq -0x338(%rbp), %rdi
leaq -0x358(%rbp), %rsi
movl $0x1, %edx
callq 0x2bf0
movb %al, -0x441(%rbp)
jmp 0x552e
leaq -0x358(%rbp), %rdi
callq 0x20e0
leaq -0x338(%rbp), %rdi
callq 0x20e0
movb -0x441(%rbp), %al
andb $0x1, %al
movb %al, -0x315(%rbp)
testb $0x1, -0x315(%rbp)
je 0x56e1
movq 0x3a68(%rip), %rdi      # 0x8fd0
leaq 0xe18(%rip), %rsi       # 0x6387
callq 0x2180
jmp 0x5576
jmp 0x56e1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x1a0(%rbp), %rdi
callq 0x20e0
jmp 0x5762
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x5756
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x572e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x20e0
jmp 0x572e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x5722
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x248(%rbp), %rdi
callq 0x20e0
jmp 0x5722
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x20e0
jmp 0x5722
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x288(%rbp), %rdi
callq 0x20e0
jmp 0x5722
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0x20e0
jmp 0x5722
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x20e0
jmp 0x5722
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x569f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x310(%rbp), %rdi
callq 0x20e0
leaq -0x2f0(%rbp), %rdi
callq 0x20e0
jmp 0x5722
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x56d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x358(%rbp), %rdi
callq 0x20e0
leaq -0x338(%rbp), %rdi
callq 0x20e0
jmp 0x5722
movq 0x38e8(%rip), %rdi      # 0x8fd0
movq 0x38d1(%rip), %rsi      # 0x8fc0
callq 0x21a0
jmp 0x56f6
leaq -0x228(%rbp), %rdi
callq 0x20e0
leaq -0x1e8(%rbp), %rdi
callq 0x20e0
movl -0x1c4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c4(%rbp)
jmp 0x5163
leaq -0x228(%rbp), %rdi
callq 0x20e0
leaq -0x1e8(%rbp), %rdi
callq 0x20e0
jmp 0x5756
leaq -0x1c0(%rbp), %rdi
callq 0x20e0
leaq -0x178(%rbp), %rdi
callq 0x20e0
jmp 0x5770
leaq -0x1c0(%rbp), %rdi
callq 0x20e0
leaq -0x178(%rbp), %rdi
callq 0x20e0
jmp 0x57a5
jmp 0x5772
movl -0x150(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x150(%rbp)
jmp 0x4f56
movl $0x0, -0x4(%rbp)
movl $0x1, -0xb4(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x37a0
jmp 0x57b3
leaq -0x128(%rbp), %rdi
callq 0x37a0
jmp 0x57be
leaq -0x38(%rbp), %rdi
callq 0x20e0
jmp 0x57c9
leaq -0x38(%rbp), %rdi
callq 0x20e0
jmp 0x57d5
movl -0x4(%rbp), %eax
addq $0x450, %rsp            # imm = 0x450
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x2320
nop