#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, char const *);
void help(const char *prog) {
  printf("Usage: %s [OPTION]... [DRIVE] [FILE]...\n"
         "Copy files to a CBM-15[478]1 or compatible drive and vice versa\n"
         "\n"
         "Options:\n"
         "  -r, --read                 transfer 15x1->PC\n"
         "                             (default when started as 'cbmread')\n"
         "  -w, --write                transfer PC->15x1\n"
         "                             (default when started as 'cbmwrite')\n"
         "                             -r and -w are mutually exclusive\n"
         "\n"
         "  -h, --help                 display this help and exit\n"
         "  -V, --version              display version information and exit\n"
         "  -q, --quiet                quiet output\n"
         "  -v, --verbose              control verbosity (repeatedly, up to 3 "
         "times)\n"
         "  -n, --no-progress          do not display progress information\n"
         "\n"
         "  -t, --transfer=TRANSFER    set transfermode; valid modes:\n"
         "                             auto (default)\n"
         "                               serial1 or s1  (slowest)\n"
         "                               serial2 or s2\n"
         "                               parallel       (fastest)\n"
         "                             (can be abbreviated, if unambiguous)\n"
         "                             `serial1' should work in any case;\n"
         "                             `serial2' won't work if more than one "
         "device is\n"
         "                             connected to the IEC bus;\n"
         "                             `parallel' needs a XP1541/XP1571 cable "
         "in addition\n"
         "                             to the serial one.\n"
         "                             `auto' tries to determine the best "
         "option.\n"
         "  -d, --drive-type=TYPE      specify drive type, one of:\n"
         "                               1541, 1570, 1571, 1581\n"
         "  -a, --address=ADDRESS      override file start address\n"
         "  -o, --output=NAME          specifies target name (ASCII, even for "
         "writing).\n"
         "\n"
         "Options for writing:\n"
         "  -f, --file-type            specify CBM file type (D,P,S,U)\n"
         "  -R, --raw                  skip test for PC64 (.p00) and T64 input "
         "file\n"
         "\n",
         prog);
}


x86 assembly (clang, -O0):
<help>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<help>:
mov    %rdi,%rsi
lea    0xee6(%rip),%rdi
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [1835 x i8] c"Usage: %s [OPTION]... [DRIVE] [FILE]...\0ACopy files to a CBM-15[478]1 or compatible drive and vice versa\0A\0AOptions:\0A -r, --read transfer 15x1->PC\0A (default when started as 'cbmread')\0A -w, --write transfer PC->15x1\0A (default when started as 'cbmwrite')\0A -r and -w are mutually exclusive\0A\0A -h, --help display this help and exit\0A -V, --version display version information and exit\0A -q, --quiet quiet output\0A -v, --verbose control verbosity (repeatedly, up to 3 times)\0A -n, --no-progress do not display progress information\0A\0A -t, --transfer=TRANSFER set transfermode; valid modes:\0A auto (default)\0A serial1 or s1 (slowest)\0A serial2 or s2\0A parallel (fastest)\0A (can be abbreviated, if unambiguous)\0A `serial1' should work in any case;\0A `serial2' won't work if more than one device is\0A connected to the IEC bus;\0A `parallel' needs a XP1541/XP1571 cable in addition\0A to the serial one.\0A `auto' tries to determine the best option.\0A -d, --drive-type=TYPE specify drive type, one of:\0A 1541, 1570, 1571, 1581\0A -a, --address=ADDRESS override file start address\0A -o, --output=NAME specifies target name (ASCII, even for writing).\0A\0AOptions for writing:\0A -f, --file-type specify CBM file type (D,P,S,U)\0A -R, --raw skip test for PC64 (.p00) and T64 input file\0A\0A\00"
define void @help(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([1835 x i8], [1835 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [1835 x i8] c"Usage: %s [OPTION]... [DRIVE] [FILE]...\0ACopy files to a CBM-15[478]1 or compatible drive and vice versa\0A\0AOptions:\0A -r, --read transfer 15x1->PC\0A (default when started as 'cbmread')\0A -w, --write transfer PC->15x1\0A (default when started as 'cbmwrite')\0A -r and -w are mutually exclusive\0A\0A -h, --help display this help and exit\0A -V, --version display version information and exit\0A -q, --quiet quiet output\0A -v, --verbose control verbosity (repeatedly, up to 3 times)\0A -n, --no-progress do not display progress information\0A\0A -t, --transfer=TRANSFER set transfermode; valid modes:\0A auto (default)\0A serial1 or s1 (slowest)\0A serial2 or s2\0A parallel (fastest)\0A (can be abbreviated, if unambiguous)\0A `serial1' should work in any case;\0A `serial2' won't work if more than one device is\0A connected to the IEC bus;\0A `parallel' needs a XP1541/XP1571 cable in addition\0A to the serial one.\0A `auto' tries to determine the best option.\0A -d, --drive-type=TYPE specify drive type, one of:\0A 1541, 1570, 1571, 1581\0A -a, --address=ADDRESS override file start address\0A -o, --output=NAME specifies target name (ASCII, even for writing).\0A\0AOptions for writing:\0A -f, --file-type specify CBM file type (D,P,S,U)\0A -R, --raw skip test for PC64 (.p00) and T64 input file\0A\0A\00"
define void @help(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([1835 x i8], [1835 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}