#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*/ WaveformDiagram();
int /*<<< orphan*/ printf(char *);
void help() {
  printf("*********************************************************************"
         "****************\n");
  printf("********************************* Kicker Help "
         "***************************************\n");
  printf("*********************************************************************"
         "****************\n");
  printf("Commands: \n");
  printf(" 1 - status - display the menu and hence current status \n");
  printf(" 2 - run cycling - take data according to the selected cycle\n");
  printf("   - possible cycles are: \n");
  printf("      - takeaway: sample is made in front of the detectors\n");
  printf("      - normal: sample is moved to the detectors\n");
  printf("      - pause: sample delivery in normal mode is delayed to allow "
         "shorter half-lves to decay\n");
  printf(" 3 - stop cycling - end the run but can be restarted \n");
  printf(" 4 - beam ON - turn off all signals on LabJack so that beam is "
         "delivered to tape \n");
  printf(" 5 - beam OFF - turn on the kicker so that beam is deflected from "
         "the tape \n");
  printf(" 6 - mtc move - issue a move command to the MTC controller \n");
  printf(" 7 - change parameters - alter the cycle configuration \n");
  printf("      - initially set beam on (grow-in) and beam off (decay-out) "
         "cycles \n");
  printf("      - can return to cycling at this point sinc ethis is most "
         "common change\n");
  printf("      - other parameters can be changed; note that if the settings "
         "are OK and you skip to the end\n");
  printf("      - options are not shown once they have been modified\n");
  printf(" 8 - reset cycle stats - reset the cycle statistics for data, "
         "background, and total\n");
  printf(" 9 - reset mtc faults - reset the values that are read after each "
         "mtc move \n");
  printf("10 - laser calib on - controls the laser gain correction part of the "
         "cycle (untested)  \n");
  printf("11 - all LJ chan OFF - essentially ensures all digital output "
         "signals set to 0 \n");
  printf("99 - help - print this menu  \n");
  printf(" 0 - end this program - can be done at any time and restarted to "
         "control cycles.  Can have multiple copies running\n");
  printf("100- End all programs - end this and all kicker-related programs \n");
  printf(" \n");
  printf("Options: \n");
  printf("  Boolean value have 0=FALSE, 1=TRUE\n");
  printf("  Modes = TRUE ; Normal, Takeaway, or Pause (in pause mode normal is "
         "also TRUE)\n");
  printf("  Beam w/ measure = TRUE; Take data while making the sample (always "
         "TRUE in takeaway mode)\n");
  printf("  Measure w/ beam = TRUE: Option in normal and Pause modes to make "
         "the next sample while measuring previous sample\n");
  printf("  Trigger w/ beam = TRUE: Have the beam on when trigger signal "
         "indicates start of the cycle\n");
  printf("  Laser w/ beam = TRUE: Have the beam on when taking laser "
         "calibration data\n");
  printf("  Data/Back Ratio: ratio of data cycles to background cycle (beam is "
         "kicked away for entire cycle)\n");
  printf("     -1 = all data\n");
  printf("      0 = all background\n");
  printf("  Num = number of data cycle for each background cycle \n");
  printf(" \n");
  printf("Settings/Statistics: \n");
  printf("  Tape fault error from status of MTC controller\n");
  printf("  Tape break error from status of MTC controller\n");
  printf("  Grow-in time in milliseconds: beam ON time\n");
  printf("  Decay-out time in milliseconds: beam OFF time\n");
  printf("  MTC move  time in milliseconds: time for tape to complete its "
         "movement\n");
  printf("  Lite time: time in milliseconds: time for laser to be on "
         "(untested) \n");
  printf("  Pause time: time in milliseconds: time for waiting for "
         "contaminents to decay\n");
  printf("  Trig width: width of trigger signal that indicates start of a "
         "cycle - steps of 16 us will be issued \n");
  printf("  Num moves: the number of moves after normal and pause modes - this "
         "allows an old sample to be moved further away\n");
  printf("  Cycling ON/OFF - indicates the status of the cycling\n");
  printf("  MTC OK/ERROR - indicates the status of the MTC controller\n");
  printf("  LabJack SN: serial number of the Labjack - nust be given in "
         "configuration file in sub-directory include\n");
  printf("  pid: process ID of the memory map so that you can be sure you got "
         "the right one\n");
  printf(
      "  Time running: the time in seconds since the start of the rpogram: If "
      "it changes the main program is updating the memory mapped file \n");
  printf("\n");
  WaveformDiagram();
  printf("\n");
  printf("*********************************************************************"
         "****************\n");
  return;
}


x86 assembly (clang, -O0):
<help>:
push   %rbp
mov    %rsp,%rbp
lea    0xed5(%rip),%rdi
call   1030 <printf@plt>
lea    0xf20(%rip),%rdi
call   1030 <printf@plt>
lea    0xebd(%rip),%rdi
call   1030 <printf@plt>
lea    0xf5f(%rip),%rdi
call   1030 <printf@plt>
lea    0xf5f(%rip),%rdi
call   1030 <printf@plt>
lea    0xf8d(%rip),%rdi
call   1030 <printf@plt>
lea    0xfbf(%rip),%rdi
call   1030 <printf@plt>
lea    0xfcf(%rip),%rdi
call   1030 <printf@plt>
lea    0xfff(%rip),%rdi
call   1030 <printf@plt>
lea    0x1025(%rip),%rdi
call   1030 <printf@plt>
lea    0x1077(%rip),%rdi
call   1030 <printf@plt>
lea    0x10a2(%rip),%rdi
call   1030 <printf@plt>
lea    0x10e9(%rip),%rdi
call   1030 <printf@plt>
lea    0x112a(%rip),%rdi
call   1030 <printf@plt>
lea    0x115b(%rip),%rdi
call   1030 <printf@plt>
lea    0x1188(%rip),%rdi
call   1030 <printf@plt>
lea    0x11c6(%rip),%rdi
call   1030 <printf@plt>
lea    0x1208(%rip),%rdi
call   1030 <printf@plt>
lea    0x125f(%rip),%rdi
call   1030 <printf@plt>
lea    0x128f(%rip),%rdi
call   1030 <printf@plt>
lea    0x12d8(%rip),%rdi
call   1030 <printf@plt>
lea    0x1319(%rip),%rdi
call   1030 <printf@plt>
lea    0x1366(%rip),%rdi
call   1030 <printf@plt>
lea    0x13ab(%rip),%rdi
call   1030 <printf@plt>
lea    0x13be(%rip),%rdi
call   1030 <printf@plt>
lea    0x1426(%rip),%rdi
call   1030 <printf@plt>
lea    0x1333(%rip),%rdi
call   1030 <printf@plt>
lea    0x1451(%rip),%rdi
call   1030 <printf@plt>
lea    0x1450(%rip),%rdi
call   1030 <printf@plt>
lea    0x146a(%rip),%rdi
call   1030 <printf@plt>
lea    0x14af(%rip),%rdi
call   1030 <printf@plt>
lea    0x14ff(%rip),%rdi
call   1030 <printf@plt>
lea    0x1567(%rip),%rdi
call   1030 <printf@plt>
lea    0x15b8(%rip),%rdi
call   1030 <printf@plt>
lea    0x15f9(%rip),%rdi
call   1030 <printf@plt>
lea    0x1651(%rip),%rdi
call   1030 <printf@plt>
lea    0x1659(%rip),%rdi
call   1030 <printf@plt>
lea    0x1667(%rip),%rdi
call   1030 <printf@plt>
lea    0x12a3(%rip),%rdi
call   1030 <printf@plt>
lea    0x1688(%rip),%rdi
call   1030 <printf@plt>
lea    0x1693(%rip),%rdi
call   1030 <printf@plt>
lea    0x16b9(%rip),%rdi
call   1030 <printf@plt>
lea    0x16df(%rip),%rdi
call   1030 <printf@plt>
lea    0x1701(%rip),%rdi
call   1030 <printf@plt>
lea    0x1726(%rip),%rdi
call   1030 <printf@plt>
lea    0x1764(%rip),%rdi
call   1030 <printf@plt>
lea    0x17a0(%rip),%rdi
call   1030 <printf@plt>
lea    0x17e4(%rip),%rdi
call   1030 <printf@plt>
lea    0x1840(%rip),%rdi
call   1030 <printf@plt>
lea    0x18a8(%rip),%rdi
call   1030 <printf@plt>
lea    0x18d4(%rip),%rdi
call   1030 <printf@plt>
lea    0x1905(%rip),%rdi
call   1030 <printf@plt>
lea    0x1964(%rip),%rdi
call   1030 <printf@plt>
lea    0x19ab(%rip),%rdi
call   1030 <printf@plt>
lea    0x11e4(%rip),%rdi
call   1030 <printf@plt>
mov    $0x0,%al
call   1040 <WaveformDiagram@plt>
lea    0x11d1(%rip),%rdi
call   1030 <printf@plt>
lea    0xc2e(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<help>:
push   %r14
push   %rbx
push   %rax
lea    0x1c16(%rip),%r14
mov    %r14,%rdi
call   1040 <puts@plt>
lea    0xeb6(%rip),%rdi
call   1040 <puts@plt>
mov    %r14,%rdi
call   1040 <puts@plt>
lea    0xef8(%rip),%rdi
call   1040 <puts@plt>
lea    0xef7(%rip),%rdi
call   1040 <puts@plt>
lea    0xf24(%rip),%rdi
call   1040 <puts@plt>
lea    0xf55(%rip),%rdi
call   1040 <puts@plt>
lea    0xf64(%rip),%rdi
call   1040 <puts@plt>
lea    0xf93(%rip),%rdi
call   1040 <puts@plt>
lea    0xfb8(%rip),%rdi
call   1040 <puts@plt>
lea    0x1009(%rip),%rdi
call   1040 <puts@plt>
lea    0x1033(%rip),%rdi
call   1040 <puts@plt>
lea    0x1079(%rip),%rdi
call   1040 <puts@plt>
lea    0x10b9(%rip),%rdi
call   1040 <puts@plt>
lea    0x10e9(%rip),%rdi
call   1040 <puts@plt>
lea    0x1115(%rip),%rdi
call   1040 <puts@plt>
lea    0x1152(%rip),%rdi
call   1040 <puts@plt>
lea    0x1193(%rip),%rdi
call   1040 <puts@plt>
lea    0x11e9(%rip),%rdi
call   1040 <puts@plt>
lea    0x1218(%rip),%rdi
call   1040 <puts@plt>
lea    0x1260(%rip),%rdi
call   1040 <puts@plt>
lea    0x12a0(%rip),%rdi
call   1040 <puts@plt>
lea    0x12ec(%rip),%rdi
call   1040 <puts@plt>
lea    0x1330(%rip),%rdi
call   1040 <puts@plt>
lea    0x1342(%rip),%rdi
call   1040 <puts@plt>
lea    0x13a9(%rip),%rdi
call   1040 <puts@plt>
lea    0x12ba(%rip),%rbx
mov    %rbx,%rdi
call   1040 <puts@plt>
lea    0x13d0(%rip),%rdi
call   1040 <puts@plt>
lea    0x13ce(%rip),%rdi
call   1040 <puts@plt>
lea    0x13e7(%rip),%rdi
call   1040 <puts@plt>
lea    0x142b(%rip),%rdi
call   1040 <puts@plt>
lea    0x147a(%rip),%rdi
call   1040 <puts@plt>
lea    0x14e1(%rip),%rdi
call   1040 <puts@plt>
lea    0x1531(%rip),%rdi
call   1040 <puts@plt>
lea    0x1571(%rip),%rdi
call   1040 <puts@plt>
lea    0x15c8(%rip),%rdi
call   1040 <puts@plt>
lea    0x15cf(%rip),%rdi
call   1040 <puts@plt>
lea    0x15dc(%rip),%rdi
call   1040 <puts@plt>
mov    %rbx,%rdi
call   1040 <puts@plt>
lea    0x1600(%rip),%rdi
call   1040 <puts@plt>
lea    0x160a(%rip),%rdi
call   1040 <puts@plt>
lea    0x162f(%rip),%rdi
call   1040 <puts@plt>
lea    0x1654(%rip),%rdi
call   1040 <puts@plt>
lea    0x1675(%rip),%rdi
call   1040 <puts@plt>
lea    0x1699(%rip),%rdi
call   1040 <puts@plt>
lea    0x16d6(%rip),%rdi
call   1040 <puts@plt>
lea    0x1711(%rip),%rdi
call   1040 <puts@plt>
lea    0x1754(%rip),%rdi
call   1040 <puts@plt>
lea    0x17af(%rip),%rdi
call   1040 <puts@plt>
lea    0x1816(%rip),%rdi
call   1040 <puts@plt>
lea    0x1841(%rip),%rdi
call   1040 <puts@plt>
lea    0x1871(%rip),%rdi
call   1040 <puts@plt>
lea    0x18cf(%rip),%rdi
call   1040 <puts@plt>
lea    0x1915(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <WaveformDiagram@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r14
jmp    1040 <puts@plt>

LLVM IR (-O0):
@.str = [87 x i8] c"*************************************************************************************\0A\00"
@.str.1 = [87 x i8] c"********************************* Kicker Help ***************************************\0A\00"
@.str.2 = [12 x i8] c"Commands: \0A\00"
@.str.3 = [58 x i8] c" 1 - status - display the menu and hence current status \0A\00"
@.str.4 = [62 x i8] c" 2 - run cycling - take data according to the selected cycle\0A\00"
@.str.5 = [28 x i8] c" - possible cycles are: \0A\00"
@.str.6 = [60 x i8] c" - takeaway: sample is made in front of the detectors\0A\00"
@.str.7 = [50 x i8] c" - normal: sample is moved to the detectors\0A\00"
@.str.8 = [94 x i8] c" - pause: sample delivery in normal mode is delayed to allow shorter half-lves to decay\0A\00"
@.str.9 = [55 x i8] c" 3 - stop cycling - end the run but can be restarted \0A\00"
@.str.10 = [83 x i8] c" 4 - beam ON - turn off all signals on LabJack so that beam is delivered to tape \0A\00"
@.str.11 = [77 x i8] c" 5 - beam OFF - turn on the kicker so that beam is deflected from the tape \0A\00"
@.str.12 = [61 x i8] c" 6 - mtc move - issue a move command to the MTC controller \0A\00"
@.str.13 = [57 x i8] c" 7 - change parameters - alter the cycle configuration \0A\00"
@.str.14 = [74 x i8] c" - initially set beam on (grow-in) and beam off (decay-out) cycles \0A\00"
@.str.15 = [78 x i8] c" - can return to cycling at this point sinc ethis is most common change\0A\00"
@.str.16 = [99 x i8] c" - other parameters can be changed; note that if the settings are OK and you skip to the end\0A\00"
@.str.17 = [60 x i8] c" - options are not shown once they have been modified\0A\00"
@.str.18 = [85 x i8] c" 8 - reset cycle stats - reset the cycle statistics for data, background, and total\0A\00"
@.str.19 = [77 x i8] c" 9 - reset mtc faults - reset the values that are read after each mtc move \0A\00"
@.str.20 = [89 x i8] c"10 - laser calib on - controls the laser gain correction part of the cycle (untested) \0A\00"
@.str.21 = [81 x i8] c"11 - all LJ chan OFF - essentially ensures all digital output signals set to 0 \0A\00"
@.str.22 = [31 x i8] c"99 - help - print this menu \0A\00"
@.str.23 = [116 x i8] c" 0 - end this program - can be done at any time and restarted to control cycles. Can have multiple copies running\0A\00"
@.str.24 = [67 x i8] c"100- End all programs - end this and all kicker-related programs \0A\00"
@.str.25 = [3 x i8] c" \0A\00"
@.str.26 = [11 x i8] c"Options: \0A\00"
@.str.27 = [38 x i8] c" Boolean value have 0=FALSE, 1=TRUE\0A\00"
@.str.28 = [81 x i8] c" Modes = TRUE ; Normal, Takeaway, or Pause (in pause mode normal is also TRUE)\0A\00"
@.str.29 = [92 x i8] c" Beam w/ measure = TRUE; Take data while making the sample (always TRUE in takeaway mode)\0A\00"
@.str.30 = [116 x i8] c" Measure w/ beam = TRUE: Option in normal and Pause modes to make the next sample while measuring previous sample\0A\00"
@.str.31 = [93 x i8] c" Trigger w/ beam = TRUE: Have the beam on when trigger signal indicates start of the cycle\0A\00"
@.str.32 = [77 x i8] c" Laser w/ beam = TRUE: Have the beam on when taking laser calibration data\0A\00"
@.str.33 = [100 x i8] c" Data/Back Ratio: ratio of data cycles to background cycle (beam is kicked away for entire cycle)\0A\00"
@.str.34 = [20 x i8] c" -1 = all data\0A\00"
@.str.35 = [26 x i8] c" 0 = all background\0A\00"
@.str.36 = [57 x i8] c" Num = number of data cycle for each background cycle \0A\00"
@.str.37 = [23 x i8] c"Settings/Statistics: \0A\00"
@.str.38 = [50 x i8] c" Tape fault error from status of MTC controller\0A\00"
@.str.39 = [50 x i8] c" Tape break error from status of MTC controller\0A\00"
@.str.40 = [46 x i8] c" Grow-in time in milliseconds: beam ON time\0A\00"
@.str.41 = [49 x i8] c" Decay-out time in milliseconds: beam OFF time\0A\00"
@.str.42 = [74 x i8] c" MTC move time in milliseconds: time for tape to complete its movement\0A\00"
@.str.43 = [72 x i8] c" Lite time: time in milliseconds: time for laser to be on (untested) \0A\00"
@.str.44 = [80 x i8] c" Pause time: time in milliseconds: time for waiting for contaminents to decay\0A\00"
@.str.45 = [104 x i8] c" Trig width: width of trigger signal that indicates start of a cycle - steps of 16 us will be issued \0A\00"
@.str.46 = [116 x i8] c" Num moves: the number of moves after normal and pause modes - this allows an old sample to be moved further away\0A\00"
@.str.47 = [56 x i8] c" Cycling ON/OFF - indicates the status of the cycling\0A\00"
@.str.48 = [61 x i8] c" MTC OK/ERROR - indicates the status of the MTC controller\0A\00"
@.str.49 = [107 x i8] c" LabJack SN: serial number of the Labjack - nust be given in configuration file in sub-directory include\0A\00"
@.str.50 = [83 x i8] c" pid: process ID of the memory map so that you can be sure you got the right one\0A\00"
@.str.51 = [136 x i8] c" Time running: the time in seconds since the start of the rpogram: If it changes the main program is updating the memory mapped file \0A\00"
@.str.52 = [2 x i8] c"\0A\00"
define void @help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str, i64 0, i64 0))
%4 = call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0))
%5 = call i32 @printf(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.3, i64 0, i64 0))
%6 = call i32 @printf(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.4, i64 0, i64 0))
%7 = call i32 @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.5, i64 0, i64 0))
%8 = call i32 @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.6, i64 0, i64 0))
%9 = call i32 @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.7, i64 0, i64 0))
%10 = call i32 @printf(i8* getelementptr inbounds ([94 x i8], [94 x i8]* @.str.8, i64 0, i64 0))
%11 = call i32 @printf(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.9, i64 0, i64 0))
%12 = call i32 @printf(i8* getelementptr inbounds ([83 x i8], [83 x i8]* @.str.10, i64 0, i64 0))
%13 = call i32 @printf(i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.11, i64 0, i64 0))
%14 = call i32 @printf(i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.12, i64 0, i64 0))
%15 = call i32 @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.13, i64 0, i64 0))
%16 = call i32 @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.14, i64 0, i64 0))
%17 = call i32 @printf(i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.15, i64 0, i64 0))
%18 = call i32 @printf(i8* getelementptr inbounds ([99 x i8], [99 x i8]* @.str.16, i64 0, i64 0))
%19 = call i32 @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.17, i64 0, i64 0))
%20 = call i32 @printf(i8* getelementptr inbounds ([85 x i8], [85 x i8]* @.str.18, i64 0, i64 0))
%21 = call i32 @printf(i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.19, i64 0, i64 0))
%22 = call i32 @printf(i8* getelementptr inbounds ([89 x i8], [89 x i8]* @.str.20, i64 0, i64 0))
%23 = call i32 @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.21, i64 0, i64 0))
%24 = call i32 @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.22, i64 0, i64 0))
%25 = call i32 @printf(i8* getelementptr inbounds ([116 x i8], [116 x i8]* @.str.23, i64 0, i64 0))
%26 = call i32 @printf(i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.24, i64 0, i64 0))
%27 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.25, i64 0, i64 0))
%28 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.26, i64 0, i64 0))
%29 = call i32 @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.27, i64 0, i64 0))
%30 = call i32 @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.28, i64 0, i64 0))
%31 = call i32 @printf(i8* getelementptr inbounds ([92 x i8], [92 x i8]* @.str.29, i64 0, i64 0))
%32 = call i32 @printf(i8* getelementptr inbounds ([116 x i8], [116 x i8]* @.str.30, i64 0, i64 0))
%33 = call i32 @printf(i8* getelementptr inbounds ([93 x i8], [93 x i8]* @.str.31, i64 0, i64 0))
%34 = call i32 @printf(i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.32, i64 0, i64 0))
%35 = call i32 @printf(i8* getelementptr inbounds ([100 x i8], [100 x i8]* @.str.33, i64 0, i64 0))
%36 = call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.34, i64 0, i64 0))
%37 = call i32 @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.35, i64 0, i64 0))
%38 = call i32 @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.36, i64 0, i64 0))
%39 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.25, i64 0, i64 0))
%40 = call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.37, i64 0, i64 0))
%41 = call i32 @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.38, i64 0, i64 0))
%42 = call i32 @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.39, i64 0, i64 0))
%43 = call i32 @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.40, i64 0, i64 0))
%44 = call i32 @printf(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.41, i64 0, i64 0))
%45 = call i32 @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.42, i64 0, i64 0))
%46 = call i32 @printf(i8* getelementptr inbounds ([72 x i8], [72 x i8]* @.str.43, i64 0, i64 0))
%47 = call i32 @printf(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.44, i64 0, i64 0))
%48 = call i32 @printf(i8* getelementptr inbounds ([104 x i8], [104 x i8]* @.str.45, i64 0, i64 0))
%49 = call i32 @printf(i8* getelementptr inbounds ([116 x i8], [116 x i8]* @.str.46, i64 0, i64 0))
%50 = call i32 @printf(i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.47, i64 0, i64 0))
%51 = call i32 @printf(i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.48, i64 0, i64 0))
%52 = call i32 @printf(i8* getelementptr inbounds ([107 x i8], [107 x i8]* @.str.49, i64 0, i64 0))
%53 = call i32 @printf(i8* getelementptr inbounds ([83 x i8], [83 x i8]* @.str.50, i64 0, i64 0))
%54 = call i32 @printf(i8* getelementptr inbounds ([136 x i8], [136 x i8]* @.str.51, i64 0, i64 0))
%55 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.52, i64 0, i64 0))
%56 = call i32 (...) @WaveformDiagram()
%57 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.52, i64 0, i64 0))
%58 = call i32 @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str.53 = [86 x i8] c"********************************* Kicker Help ***************************************\00"
@str.55 = [11 x i8] c"Commands: \00"
@str.56 = [57 x i8] c" 1 - status - display the menu and hence current status \00"
@str.57 = [61 x i8] c" 2 - run cycling - take data according to the selected cycle\00"
@str.58 = [27 x i8] c" - possible cycles are: \00"
@str.59 = [59 x i8] c" - takeaway: sample is made in front of the detectors\00"
@str.60 = [49 x i8] c" - normal: sample is moved to the detectors\00"
@str.61 = [93 x i8] c" - pause: sample delivery in normal mode is delayed to allow shorter half-lves to decay\00"
@str.62 = [54 x i8] c" 3 - stop cycling - end the run but can be restarted \00"
@str.63 = [82 x i8] c" 4 - beam ON - turn off all signals on LabJack so that beam is delivered to tape \00"
@str.64 = [76 x i8] c" 5 - beam OFF - turn on the kicker so that beam is deflected from the tape \00"
@str.65 = [60 x i8] c" 6 - mtc move - issue a move command to the MTC controller \00"
@str.66 = [56 x i8] c" 7 - change parameters - alter the cycle configuration \00"
@str.67 = [73 x i8] c" - initially set beam on (grow-in) and beam off (decay-out) cycles \00"
@str.68 = [77 x i8] c" - can return to cycling at this point sinc ethis is most common change\00"
@str.69 = [98 x i8] c" - other parameters can be changed; note that if the settings are OK and you skip to the end\00"
@str.70 = [59 x i8] c" - options are not shown once they have been modified\00"
@str.71 = [84 x i8] c" 8 - reset cycle stats - reset the cycle statistics for data, background, and total\00"
@str.72 = [76 x i8] c" 9 - reset mtc faults - reset the values that are read after each mtc move \00"
@str.73 = [88 x i8] c"10 - laser calib on - controls the laser gain correction part of the cycle (untested) \00"
@str.74 = [80 x i8] c"11 - all LJ chan OFF - essentially ensures all digital output signals set to 0 \00"
@str.75 = [30 x i8] c"99 - help - print this menu \00"
@str.76 = [115 x i8] c" 0 - end this program - can be done at any time and restarted to control cycles. Can have multiple copies running\00"
@str.77 = [66 x i8] c"100- End all programs - end this and all kicker-related programs \00"
@str.79 = [10 x i8] c"Options: \00"
@str.80 = [37 x i8] c" Boolean value have 0=FALSE, 1=TRUE\00"
@str.81 = [80 x i8] c" Modes = TRUE ; Normal, Takeaway, or Pause (in pause mode normal is also TRUE)\00"
@str.82 = [91 x i8] c" Beam w/ measure = TRUE; Take data while making the sample (always TRUE in takeaway mode)\00"
@str.83 = [115 x i8] c" Measure w/ beam = TRUE: Option in normal and Pause modes to make the next sample while measuring previous sample\00"
@str.84 = [92 x i8] c" Trigger w/ beam = TRUE: Have the beam on when trigger signal indicates start of the cycle\00"
@str.85 = [76 x i8] c" Laser w/ beam = TRUE: Have the beam on when taking laser calibration data\00"
@str.86 = [99 x i8] c" Data/Back Ratio: ratio of data cycles to background cycle (beam is kicked away for entire cycle)\00"
@str.87 = [19 x i8] c" -1 = all data\00"
@str.88 = [25 x i8] c" 0 = all background\00"
@str.89 = [56 x i8] c" Num = number of data cycle for each background cycle \00"
@str.90 = [2 x i8] c" \00"
@str.91 = [22 x i8] c"Settings/Statistics: \00"
@str.92 = [49 x i8] c" Tape fault error from status of MTC controller\00"
@str.93 = [49 x i8] c" Tape break error from status of MTC controller\00"
@str.94 = [45 x i8] c" Grow-in time in milliseconds: beam ON time\00"
@str.95 = [48 x i8] c" Decay-out time in milliseconds: beam OFF time\00"
@str.96 = [73 x i8] c" MTC move time in milliseconds: time for tape to complete its movement\00"
@str.97 = [71 x i8] c" Lite time: time in milliseconds: time for laser to be on (untested) \00"
@str.98 = [79 x i8] c" Pause time: time in milliseconds: time for waiting for contaminents to decay\00"
@str.99 = [103 x i8] c" Trig width: width of trigger signal that indicates start of a cycle - steps of 16 us will be issued \00"
@str.100 = [115 x i8] c" Num moves: the number of moves after normal and pause modes - this allows an old sample to be moved further away\00"
@str.101 = [55 x i8] c" Cycling ON/OFF - indicates the status of the cycling\00"
@str.102 = [60 x i8] c" MTC OK/ERROR - indicates the status of the MTC controller\00"
@str.103 = [106 x i8] c" LabJack SN: serial number of the Labjack - nust be given in configuration file in sub-directory include\00"
@str.104 = [82 x i8] c" pid: process ID of the memory map so that you can be sure you got the right one\00"
@str.105 = [135 x i8] c" Time running: the time in seconds since the start of the rpogram: If it changes the main program is updating the memory mapped file \00"
@str.106 = [86 x i8] c"*************************************************************************************\00"
define void @help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.106, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.53, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.106, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.55, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @str.56, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([61 x i8], [61 x i8]* @str.57, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @str.58, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([59 x i8], [59 x i8]* @str.59, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([49 x i8], [49 x i8]* @str.60, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([93 x i8], [93 x i8]* @str.61, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @str.62, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([82 x i8], [82 x i8]* @str.63, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([76 x i8], [76 x i8]* @str.64, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([60 x i8], [60 x i8]* @str.65, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([56 x i8], [56 x i8]* @str.66, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str.67, i64 0, i64 0))
%17 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([77 x i8], [77 x i8]* @str.68, i64 0, i64 0))
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([98 x i8], [98 x i8]* @str.69, i64 0, i64 0))
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([59 x i8], [59 x i8]* @str.70, i64 0, i64 0))
%20 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([84 x i8], [84 x i8]* @str.71, i64 0, i64 0))
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([76 x i8], [76 x i8]* @str.72, i64 0, i64 0))
%22 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([88 x i8], [88 x i8]* @str.73, i64 0, i64 0))
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([80 x i8], [80 x i8]* @str.74, i64 0, i64 0))
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @str.75, i64 0, i64 0))
%25 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([115 x i8], [115 x i8]* @str.76, i64 0, i64 0))
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @str.77, i64 0, i64 0))
%27 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2 x i8], [2 x i8]* @str.90, i64 0, i64 0))
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.79, i64 0, i64 0))
%29 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.80, i64 0, i64 0))
%30 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([80 x i8], [80 x i8]* @str.81, i64 0, i64 0))
%31 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([91 x i8], [91 x i8]* @str.82, i64 0, i64 0))
%32 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([115 x i8], [115 x i8]* @str.83, i64 0, i64 0))
%33 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([92 x i8], [92 x i8]* @str.84, i64 0, i64 0))
%34 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([76 x i8], [76 x i8]* @str.85, i64 0, i64 0))
%35 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([99 x i8], [99 x i8]* @str.86, i64 0, i64 0))
%36 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.87, i64 0, i64 0))
%37 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.88, i64 0, i64 0))
%38 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([56 x i8], [56 x i8]* @str.89, i64 0, i64 0))
%39 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2 x i8], [2 x i8]* @str.90, i64 0, i64 0))
%40 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @str.91, i64 0, i64 0))
%41 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([49 x i8], [49 x i8]* @str.92, i64 0, i64 0))
%42 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([49 x i8], [49 x i8]* @str.93, i64 0, i64 0))
%43 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @str.94, i64 0, i64 0))
%44 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @str.95, i64 0, i64 0))
%45 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str.96, i64 0, i64 0))
%46 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([71 x i8], [71 x i8]* @str.97, i64 0, i64 0))
%47 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([79 x i8], [79 x i8]* @str.98, i64 0, i64 0))
%48 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([103 x i8], [103 x i8]* @str.99, i64 0, i64 0))
%49 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([115 x i8], [115 x i8]* @str.100, i64 0, i64 0))
%50 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([55 x i8], [55 x i8]* @str.101, i64 0, i64 0))
%51 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([60 x i8], [60 x i8]* @str.102, i64 0, i64 0))
%52 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([106 x i8], [106 x i8]* @str.103, i64 0, i64 0))
%53 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([82 x i8], [82 x i8]* @str.104, i64 0, i64 0))
%54 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([135 x i8], [135 x i8]* @str.105, i64 0, i64 0))
%55 = tail call i32 @putchar(i32 10)
%56 = tail call i32 (...) @WaveformDiagram()
%57 = tail call i32 @putchar(i32 10)
%58 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.106, i64 0, i64 0))
ret void
}