#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 */
typedef int /*<<< orphan*/ time_t;
struct tm {
  int dummy;
};

/* Variables and functions */
int /*<<< orphan*/ CORE_CODE(int);
int /*<<< orphan*/ GET_FILE(char *);
int /*<<< orphan*/ GET_UPDATE();
char *asctime(struct tm *);
int chdir(char *);
int fopen(char *, char *);
struct tm *localtime(int /*<<< orphan*/ *);
int mkdir(char *);
int /*<<< orphan*/ printf(char *, ...);
scalar_t__ strcmp(char *, char *);
char *strtok(char *, char const *);
int /*<<< orphan*/ system(char *);
int /*<<< orphan*/ time(int /*<<< orphan*/ *);
int FORCEX_EXECUTION(char *str) {
  int nextf;
  const char s[2] = " ";
  char *cmd;
  cmd = strtok(str, s);
  while (cmd != NULL) {
    if (nextf == 1) {
      if (chdir(cmd) == -1) {
        printf("Directory %s not found\n", cmd);
      } else {
        printf("[>>]\n");
      }
      nextf = 0;
    } else if (nextf == 2) {
      if (fopen(cmd, "w") == -1) {
        printf("Error making file %s", cmd);
      } else {
        printf("[>>]\n");
      }
    } else if (nextf == 3) {
      if (mkdir(cmd) == -1) {
        printf("Error making directory %s", cmd);
      } else {
        printf("[>>]");
      }
    } else if (nextf == 4) {
      GET_FILE(cmd);
    } else if (strcmp(cmd, "help") == 0) {
      printf("HELP\n");
      printf("CD [DIR]\n");
      printf("HALT\n");
      printf("STOP");
      printf("TIME\n");
      printf("INFO\n");
      printf("LS\n");
      printf("MKFILE [NAME]\n");
      printf("MKDIR [NAME]\n");
      printf("DL [NAME]\n");
      printf("UPDATE\n");
    } else if (strcmp(cmd, "time") == 0) {
      time_t rawtime;
      struct tm *timeinfo;
      time(&rawtime);
      timeinfo = localtime(&rawtime);
      printf("Current System Time: %s", asctime(timeinfo));
    } else if (strcmp(cmd, "update") == 0) {
      GET_UPDATE();
      printf("Complete. Reboot to apply update\n");
    } else if (strcmp(cmd, "info") == 0) {
      printf("Force OS:\n");
      printf("Created By DatOneLefty\n");
      printf("Copyright 2016 Force Co.\n");
      printf("Version Alpha\n");
      printf("OS Type: Force\n");
      printf("OS Name: Force OS\n");
      printf("Codename: Cryptic Catfish\n");
      printf("Compatablity: UNIX\n");
      printf("Force CO. is not responsible for any damage done to your "
             "computer when using this software\n");
    } else if (strcmp(cmd, "cd") == 0) {
      nextf = 1;
    } else if (strcmp(cmd, "mkfile") == 0) {
      nextf = 2;
    } else if (strcmp(cmd, "mkdir") == 0) {
      nextf = 3;
    } else if (strcmp(cmd, "ls") == 0) {
      system("ls");
    } else if (strcmp(cmd, "dl") == 0) {
      nextf = 4;
    } else {
      CORE_CODE(205);
    }
    cmd = strtok(NULL, s);
  }
}


x86 assembly (clang, -O0):
<FORCEX_EXECUTION>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    0xe1d(%rip),%ax
mov    %ax,-0x16(%rbp)
mov    -0x10(%rbp),%rdi
lea    -0x16(%rbp),%rsi
call   10e0 <strtok@plt>
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x20(%rbp)
je     15f3 <FORCEX_EXECUTION+0x423>
cmpl   $0x1,-0x14(%rbp)
jne    1250 <FORCEX_EXECUTION+0x80>
mov    -0x20(%rbp),%rdi
call   1060 <chdir@plt>
cmp    $0xffffffff,%eax
jne    1236 <FORCEX_EXECUTION+0x66>
mov    -0x20(%rbp),%rsi
lea    0xdd8(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
jmp    1244 <FORCEX_EXECUTION+0x74>
lea    0xddd(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
movl   $0x0,-0x14(%rbp)
jmp    15dd <FORCEX_EXECUTION+0x40d>
cmpl   $0x2,-0x14(%rbp)
jne    129d <FORCEX_EXECUTION+0xcd>
mov    -0x20(%rbp),%rdi
lea    0xdbb(%rip),%rsi
call   10d0 <fopen@plt>
cmp    $0xffffffff,%eax
jne    128a <FORCEX_EXECUTION+0xba>
mov    -0x20(%rbp),%rsi
lea    0xda4(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
jmp    1298 <FORCEX_EXECUTION+0xc8>
lea    0xd89(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
jmp    15d8 <FORCEX_EXECUTION+0x408>
cmpl   $0x3,-0x14(%rbp)
jne    12e3 <FORCEX_EXECUTION+0x113>
mov    -0x20(%rbp),%rdi
call   1050 <mkdir@plt>
cmp    $0xffffffff,%eax
jne    12d0 <FORCEX_EXECUTION+0x100>
mov    -0x20(%rbp),%rsi
lea    0xd73(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
jmp    12de <FORCEX_EXECUTION+0x10e>
lea    0xd7a(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
jmp    15d3 <FORCEX_EXECUTION+0x403>
cmpl   $0x4,-0x14(%rbp)
jne    12fb <FORCEX_EXECUTION+0x12b>
mov    -0x20(%rbp),%rdi
call   10f0 <GET_FILE@plt>
jmp    15ce <FORCEX_EXECUTION+0x3fe>
mov    -0x20(%rbp),%rdi
lea    0xd50(%rip),%rsi
call   10a0 <strcmp@plt>
cmp    $0x0,%rax
jne    13b4 <FORCEX_EXECUTION+0x1e4>
lea    0xd3f(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xd37(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xd33(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xd2b(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xd22(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xd1a(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xd12(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xd08(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xd09(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xd09(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xd06(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
jmp    15c9 <FORCEX_EXECUTION+0x3f9>
mov    -0x20(%rbp),%rdi
lea    0xcf7(%rip),%rsi
call   10a0 <strcmp@plt>
cmp    $0x0,%rax
jne    1403 <FORCEX_EXECUTION+0x233>
lea    -0x24(%rbp),%rdi
call   10c0 <time@plt>
lea    -0x24(%rbp),%rdi
call   1040 <localtime@plt>
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rdi
call   1070 <asctime@plt>
mov    %rax,%rsi
lea    0xcc4(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
jmp    15c4 <FORCEX_EXECUTION+0x3f4>
mov    -0x20(%rbp),%rdi
lea    0xcc5(%rip),%rsi
call   10a0 <strcmp@plt>
cmp    $0x0,%rax
jne    1437 <FORCEX_EXECUTION+0x267>
mov    $0x0,%al
call   1030 <GET_UPDATE@plt>
lea    0xcaf(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
jmp    15bf <FORCEX_EXECUTION+0x3ef>
mov    -0x20(%rbp),%rdi
lea    0xcba(%rip),%rsi
call   10a0 <strcmp@plt>
cmp    $0x0,%rax
jne    14d4 <FORCEX_EXECUTION+0x304>
lea    0xca9(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xca6(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xcb0(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xcbc(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xcbd(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xcbf(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xcc4(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xcd1(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
lea    0xcd7(%rip),%rdi
mov    $0x0,%al
call   1090 <printf@plt>
jmp    15ba <FORCEX_EXECUTION+0x3ea>
mov    -0x20(%rbp),%rdi
lea    0xd1c(%rip),%rsi
call   10a0 <strcmp@plt>
cmp    $0x0,%rax
jne    14fa <FORCEX_EXECUTION+0x32a>
movl   $0x1,-0x14(%rbp)
jmp    15b5 <FORCEX_EXECUTION+0x3e5>
mov    -0x20(%rbp),%rdi
lea    0xcf9(%rip),%rsi
call   10a0 <strcmp@plt>
cmp    $0x0,%rax
jne    1520 <FORCEX_EXECUTION+0x350>
movl   $0x2,-0x14(%rbp)
jmp    15b0 <FORCEX_EXECUTION+0x3e0>
mov    -0x20(%rbp),%rdi
lea    0xcda(%rip),%rsi
call   10a0 <strcmp@plt>
cmp    $0x0,%rax
jne    1546 <FORCEX_EXECUTION+0x376>
movl   $0x3,-0x14(%rbp)
jmp    15ab <FORCEX_EXECUTION+0x3db>
mov    -0x20(%rbp),%rdi
lea    0xcba(%rip),%rsi
call   10a0 <strcmp@plt>
cmp    $0x0,%rax
jne    1571 <FORCEX_EXECUTION+0x3a1>
lea    0xca4(%rip),%rdi
call   1080 <system@plt>
jmp    15a6 <FORCEX_EXECUTION+0x3d6>
mov    -0x20(%rbp),%rdi
lea    0xc92(%rip),%rsi
call   10a0 <strcmp@plt>
cmp    $0x0,%rax
jne    1597 <FORCEX_EXECUTION+0x3c7>
movl   $0x4,-0x14(%rbp)
jmp    15a1 <FORCEX_EXECUTION+0x3d1>
mov    $0xcd,%edi
call   10b0 <CORE_CODE@plt>
jmp    15a6 <FORCEX_EXECUTION+0x3d6>
jmp    15ab <FORCEX_EXECUTION+0x3db>
jmp    15b0 <FORCEX_EXECUTION+0x3e0>
jmp    15b5 <FORCEX_EXECUTION+0x3e5>
jmp    15ba <FORCEX_EXECUTION+0x3ea>
jmp    15bf <FORCEX_EXECUTION+0x3ef>
jmp    15c4 <FORCEX_EXECUTION+0x3f4>
jmp    15c9 <FORCEX_EXECUTION+0x3f9>
jmp    15ce <FORCEX_EXECUTION+0x3fe>
jmp    15d3 <FORCEX_EXECUTION+0x403>
jmp    15d8 <FORCEX_EXECUTION+0x408>
jmp    15dd <FORCEX_EXECUTION+0x40d>
lea    -0x16(%rbp),%rsi
xor    %eax,%eax
mov    %eax,%edi
call   10e0 <strtok@plt>
mov    %rax,-0x20(%rbp)
jmp    11f8 <FORCEX_EXECUTION+0x28>
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<FORCEX_EXECUTION>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
movw   $0x20,0x2(%rsp)
lea    0x2(%rsp),%rsi
call   10f0 <strtok@plt>
test   %rax,%rax
je     1585 <FORCEX_EXECUTION+0x3a5>
mov    %rax,%r12
lea    0xf97(%rip),%rbp
lea    0x2(%rsp),%r14
lea    0xde5(%rip),%r15
lea    0xfd7(%rip),%r13
jmp    1266 <FORCEX_EXECUTION+0x86>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r12,%rdi
call   1050 <mkdir@plt>
cmp    $0xffffffff,%eax
je     13c2 <FORCEX_EXECUTION+0x1e2>
mov    %r13,%rdi
xor    %eax,%eax
call   10a0 <printf@plt>
mov    $0x3,%ebx
xor    %edi,%edi
mov    %r14,%rsi
call   10f0 <strtok@plt>
mov    %rax,%r12
test   %rax,%rax
je     1585 <FORCEX_EXECUTION+0x3a5>
lea    -0x1(%rbx),%eax
cmp    $0x3,%eax
ja     12a0 <FORCEX_EXECUTION+0xc0>
movslq (%r15,%rax,4),%rax
add    %r15,%rax
jmp    *%rax
mov    %r12,%rdi
call   1070 <chdir@plt>
cmp    $0xffffffff,%eax
je     13dd <FORCEX_EXECUTION+0x1fd>
mov    %r13,%rdi
call   1060 <puts@plt>
xor    %ebx,%ebx
jmp    1250 <FORCEX_EXECUTION+0x70>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r12,%rdi
lea    0xdaf(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     13ee <FORCEX_EXECUTION+0x20e>
mov    %r12,%rdi
lea    0xda1(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     1494 <FORCEX_EXECUTION+0x2b4>
mov    %r12,%rdi
mov    %rbp,%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     14cd <FORCEX_EXECUTION+0x2ed>
mov    %r12,%rdi
lea    0xd92(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     14e5 <FORCEX_EXECUTION+0x305>
mov    %r12,%rdi
lea    0xd7f(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     1556 <FORCEX_EXECUTION+0x376>
mov    %r12,%rdi
lea    0xd6a(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     1560 <FORCEX_EXECUTION+0x380>
mov    %r12,%rdi
lea    0xd59(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     156a <FORCEX_EXECUTION+0x38a>
mov    %r12,%rdi
lea    0xd47(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     1574 <FORCEX_EXECUTION+0x394>
mov    %r12,%rdi
lea    0xd32(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     13b8 <FORCEX_EXECUTION+0x1d8>
mov    $0xcd,%edi
call   10c0 <CORE_CODE@plt>
jmp    1250 <FORCEX_EXECUTION+0x70>
nop
mov    %r12,%rdi
lea    0xc9e(%rip),%rsi
call   10e0 <fopen@plt>
cmp    $0xffffffff,%eax
je     1479 <FORCEX_EXECUTION+0x299>
mov    %r13,%rdi
call   1060 <puts@plt>
mov    $0x2,%ebx
jmp    1250 <FORCEX_EXECUTION+0x70>
nopw   0x0(%rax,%rax,1)
mov    %r12,%rdi
call   1100 <GET_FILE@plt>
mov    $0x4,%ebx
jmp    1250 <FORCEX_EXECUTION+0x70>
lea    0xc76(%rip),%rdi
mov    %r12,%rsi
xor    %eax,%eax
call   10a0 <printf@plt>
mov    $0x3,%ebx
jmp    1250 <FORCEX_EXECUTION+0x70>
xor    %ebx,%ebx
lea    0xc2a(%rip),%rdi
mov    %r12,%rsi
jmp    14c1 <FORCEX_EXECUTION+0x2e1>
lea    0xdb8(%rip),%rdi
call   1060 <puts@plt>
lea    0xdb1(%rip),%rdi
call   1060 <puts@plt>
lea    0xdae(%rip),%rdi
call   1060 <puts@plt>
lea    0xc45(%rip),%rdi
xor    %eax,%eax
call   10a0 <printf@plt>
lea    0xd99(%rip),%rdi
call   1060 <puts@plt>
lea    0xd92(%rip),%rdi
call   1060 <puts@plt>
lea    0xd8b(%rip),%rdi
call   1060 <puts@plt>
lea    0xd82(%rip),%rdi
call   1060 <puts@plt>
lea    0xd84(%rip),%rdi
call   1060 <puts@plt>
lea    0xd85(%rip),%rdi
call   1060 <puts@plt>
lea    0xd83(%rip),%rdi
call   1060 <puts@plt>
jmp    1250 <FORCEX_EXECUTION+0x70>
lea    0xbaa(%rip),%rdi
mov    %r12,%rsi
xor    %eax,%eax
call   10a0 <printf@plt>
mov    $0x2,%ebx
jmp    1250 <FORCEX_EXECUTION+0x70>
mov    %rbp,%r12
lea    0x4(%rsp),%rbp
mov    %rbp,%rdi
call   10d0 <time@plt>
mov    %rbp,%rdi
mov    %r12,%rbp
call   1040 <localtime@plt>
mov    %rax,%rdi
call   1080 <asctime@plt>
lea    0xbaa(%rip),%rdi
mov    %rax,%rsi
xor    %eax,%eax
call   10a0 <printf@plt>
jmp    1250 <FORCEX_EXECUTION+0x70>
xor    %eax,%eax
call   1030 <GET_UPDATE@plt>
lea    0xcb1(%rip),%rdi
call   1060 <puts@plt>
jmp    1250 <FORCEX_EXECUTION+0x70>
lea    0xbaf(%rip),%rdi
call   1060 <puts@plt>
lea    0xbad(%rip),%rdi
call   1060 <puts@plt>
lea    0xbb8(%rip),%rdi
call   1060 <puts@plt>
lea    0xbc5(%rip),%rdi
call   1060 <puts@plt>
lea    0xbc7(%rip),%rdi
call   1060 <puts@plt>
lea    0xbca(%rip),%rdi
call   1060 <puts@plt>
lea    0xbd0(%rip),%rdi
call   1060 <puts@plt>
lea    0xbde(%rip),%rdi
call   1060 <puts@plt>
lea    0xbe5(%rip),%rdi
call   1060 <puts@plt>
jmp    1250 <FORCEX_EXECUTION+0x70>
mov    $0x1,%ebx
jmp    1250 <FORCEX_EXECUTION+0x70>
mov    $0x2,%ebx
jmp    1250 <FORCEX_EXECUTION+0x70>
mov    $0x3,%ebx
jmp    1250 <FORCEX_EXECUTION+0x70>
lea    0xb1a(%rip),%rdi
call   1090 <system@plt>
jmp    1250 <FORCEX_EXECUTION+0x70>
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
%struct.tm = type { i32 }
@__const.FORCEX_EXECUTION.s = [2 x i8] c" \00"
@.str = [24 x i8] c"Directory %s not found\0A\00"
@.str.1 = [6 x i8] c"[>>]\0A\00"
@.str.2 = [2 x i8] c"w\00"
@.str.3 = [21 x i8] c"Error making file %s\00"
@.str.4 = [26 x i8] c"Error making directory %s\00"
@.str.5 = [5 x i8] c"[>>]\00"
@.str.6 = [5 x i8] c"help\00"
@.str.7 = [6 x i8] c"HELP\0A\00"
@.str.8 = [10 x i8] c"CD [DIR]\0A\00"
@.str.9 = [6 x i8] c"HALT\0A\00"
@.str.10 = [5 x i8] c"STOP\00"
@.str.11 = [6 x i8] c"TIME\0A\00"
@.str.12 = [6 x i8] c"INFO\0A\00"
@.str.13 = [4 x i8] c"LS\0A\00"
@.str.14 = [15 x i8] c"MKFILE [NAME]\0A\00"
@.str.15 = [14 x i8] c"MKDIR [NAME]\0A\00"
@.str.16 = [11 x i8] c"DL [NAME]\0A\00"
@.str.17 = [8 x i8] c"UPDATE\0A\00"
@.str.18 = [5 x i8] c"time\00"
@.str.19 = [24 x i8] c"Current System Time: %s\00"
@.str.20 = [7 x i8] c"update\00"
@.str.21 = [34 x i8] c"Complete. Reboot to apply update\0A\00"
@.str.22 = [5 x i8] c"info\00"
@.str.23 = [11 x i8] c"Force OS:\0A\00"
@.str.24 = [24 x i8] c"Created By DatOneLefty\0A\00"
@.str.25 = [26 x i8] c"Copyright 2016 Force Co.\0A\00"
@.str.26 = [15 x i8] c"Version Alpha\0A\00"
@.str.27 = [16 x i8] c"OS Type: Force\0A\00"
@.str.28 = [19 x i8] c"OS Name: Force OS\0A\00"
@.str.29 = [27 x i8] c"Codename: Cryptic Catfish\0A\00"
@.str.30 = [20 x i8] c"Compatablity: UNIX\0A\00"
@.str.31 = [92 x i8] c"Force CO. is not responsible for any damage done to your computer when using this software\0A\00"
@.str.32 = [3 x i8] c"cd\00"
@.str.33 = [7 x i8] c"mkfile\00"
@.str.34 = [6 x i8] c"mkdir\00"
@.str.35 = [3 x i8] c"ls\00"
@.str.36 = [3 x i8] c"dl\00"
define i32 @FORCEX_EXECUTION(i8* %0) {
%2 = alloca i32
%3 = alloca i8*
%4 = alloca i32
%5 = alloca [2 x i8]
%6 = alloca i8*
%7 = alloca i32
%8 = alloca %struct.tm*
store i8* %0, i8** %3
%9 = bitcast [2 x i8]* %5 to i8*
%10 = load i8*, i8** %3
%11 = getelementptr inbounds [2 x i8], [2 x i8]* %5, i64 0, i64 0
%12 = call i8* @strtok(i8* %10, i8* %11)
store i8* %12, i8** %6
br label %13
13: ; preds = %148, %1
%14 = load i8*, i8** %6
%15 = icmp ne i8* %14, null
br i1 %15, label %16, label %151
16: ; preds = %13
%17 = load i32, i32* %4
%18 = icmp eq i32 %17, 1
br i1 %18, label %19, label %29
19: ; preds = %16
%20 = load i8*, i8** %6
%21 = call i32 @chdir(i8* %20)
%22 = icmp eq i32 %21, -1
br i1 %22, label %23, label %26
23: ; preds = %19
%24 = load i8*, i8** %6
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0), i8* %24)
br label %28
26: ; preds = %19
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %28
28: ; preds = %26, %23
store i32 0, i32* %4
br label %148
29: ; preds = %16
%30 = load i32, i32* %4
%31 = icmp eq i32 %30, 2
br i1 %31, label %32, label %42
32: ; preds = %29
%33 = load i8*, i8** %6
%34 = call i32 @fopen(i8* %33, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%35 = icmp eq i32 %34, -1
br i1 %35, label %36, label %39
36: ; preds = %32
%37 = load i8*, i8** %6
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0), i8* %37)
br label %41
39: ; preds = %32
%40 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %41
41: ; preds = %39, %36
br label %147
42: ; preds = %29
%43 = load i32, i32* %4
%44 = icmp eq i32 %43, 3
br i1 %44, label %45, label %55
45: ; preds = %42
%46 = load i8*, i8** %6
%47 = call i32 @mkdir(i8* %46)
%48 = icmp eq i32 %47, -1
br i1 %48, label %49, label %52
49: ; preds = %45
%50 = load i8*, i8** %6
%51 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.4, i64 0, i64 0), i8* %50)
br label %54
52: ; preds = %45
%53 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
br label %54
54: ; preds = %52, %49
br label %146
55: ; preds = %42
%56 = load i32, i32* %4
%57 = icmp eq i32 %56, 4
br i1 %57, label %58, label %61
58: ; preds = %55
%59 = load i8*, i8** %6
%60 = call i32 @GET_FILE(i8* %59)
br label %145
61: ; preds = %55
%62 = load i8*, i8** %6
%63 = call i64 @strcmp(i8* %62, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
%64 = icmp eq i64 %63, 0
br i1 %64, label %65, label %77
65: ; preds = %61
%66 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.7, i64 0, i64 0))
%67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.8, i64 0, i64 0))
%68 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0))
%69 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
%70 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0))
%71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0))
%72 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.13, i64 0, i64 0))
%73 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.14, i64 0, i64 0))
%74 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.15, i64 0, i64 0))
%75 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.16, i64 0, i64 0))
%76 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.17, i64 0, i64 0))
br label %144
77: ; preds = %61
%78 = load i8*, i8** %6
%79 = call i64 @strcmp(i8* %78, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.18, i64 0, i64 0))
%80 = icmp eq i64 %79, 0
br i1 %80, label %81, label %87
81: ; preds = %77
%82 = call i32 @time(i32* %7)
%83 = call %struct.tm* @localtime(i32* %7)
store %struct.tm* %83, %struct.tm** %8
%84 = load %struct.tm*, %struct.tm** %8
%85 = call i8* @asctime(%struct.tm* %84)
%86 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.19, i64 0, i64 0), i8* %85)
br label %143
87: ; preds = %77
%88 = load i8*, i8** %6
%89 = call i64 @strcmp(i8* %88, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.20, i64 0, i64 0))
%90 = icmp eq i64 %89, 0
br i1 %90, label %91, label %94
91: ; preds = %87
%92 = call i32 (...) @GET_UPDATE()
%93 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.21, i64 0, i64 0))
br label %142
94: ; preds = %87
%95 = load i8*, i8** %6
%96 = call i64 @strcmp(i8* %95, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.22, i64 0, i64 0))
%97 = icmp eq i64 %96, 0
br i1 %97, label %98, label %108
98: ; preds = %94
%99 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.23, i64 0, i64 0))
%100 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.24, i64 0, i64 0))
%101 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.25, i64 0, i64 0))
%102 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.26, i64 0, i64 0))
%103 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.27, i64 0, i64 0))
%104 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.28, i64 0, i64 0))
%105 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.29, i64 0, i64 0))
%106 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.30, i64 0, i64 0))
%107 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([92 x i8], [92 x i8]* @.str.31, i64 0, i64 0))
br label %141
108: ; preds = %94
%109 = load i8*, i8** %6
%110 = call i64 @strcmp(i8* %109, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.32, i64 0, i64 0))
%111 = icmp eq i64 %110, 0
br i1 %111, label %112, label %113
112: ; preds = %108
store i32 1, i32* %4
br label %140
113: ; preds = %108
%114 = load i8*, i8** %6
%115 = call i64 @strcmp(i8* %114, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.33, i64 0, i64 0))
%116 = icmp eq i64 %115, 0
br i1 %116, label %117, label %118
117: ; preds = %113
store i32 2, i32* %4
br label %139
118: ; preds = %113
%119 = load i8*, i8** %6
%120 = call i64 @strcmp(i8* %119, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.34, i64 0, i64 0))
%121 = icmp eq i64 %120, 0
br i1 %121, label %122, label %123
122: ; preds = %118
store i32 3, i32* %4
br label %138
123: ; preds = %118
%124 = load i8*, i8** %6
%125 = call i64 @strcmp(i8* %124, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i64 0, i64 0))
%126 = icmp eq i64 %125, 0
br i1 %126, label %127, label %129
127: ; preds = %123
%128 = call i32 @system(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i64 0, i64 0))
br label %137
129: ; preds = %123
%130 = load i8*, i8** %6
%131 = call i64 @strcmp(i8* %130, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.36, i64 0, i64 0))
%132 = icmp eq i64 %131, 0
br i1 %132, label %133, label %134
133: ; preds = %129
store i32 4, i32* %4
br label %136
134: ; preds = %129
%135 = call i32 @CORE_CODE(i32 205)
br label %136
136: ; preds = %134, %133
br label %137
137: ; preds = %136, %127
br label %138
138: ; preds = %137, %122
br label %139
139: ; preds = %138, %117
br label %140
140: ; preds = %139, %112
br label %141
141: ; preds = %140, %98
br label %142
142: ; preds = %141, %91
br label %143
143: ; preds = %142, %81
br label %144
144: ; preds = %143, %65
br label %145
145: ; preds = %144, %58
br label %146
146: ; preds = %145, %54
br label %147
147: ; preds = %146, %41
br label %148
148: ; preds = %147, %28
%149 = getelementptr inbounds [2 x i8], [2 x i8]* %5, i64 0, i64 0
%150 = call i8* @strtok(i8* null, i8* %149)
store i8* %150, i8** %6
br label %13
151: ; preds = %13
%152 = load i32, i32* %2
ret i32 %152
}

LLVM IR (-O2):
%struct.tm = type { i32 }
@.str = [24 x i8] c"Directory %s not found\0A\00"
@.str.2 = [2 x i8] c"w\00"
@.str.3 = [21 x i8] c"Error making file %s\00"
@.str.4 = [26 x i8] c"Error making directory %s\00"
@.str.6 = [5 x i8] c"help\00"
@.str.10 = [5 x i8] c"STOP\00"
@.str.18 = [5 x i8] c"time\00"
@.str.19 = [24 x i8] c"Current System Time: %s\00"
@.str.20 = [7 x i8] c"update\00"
@.str.22 = [5 x i8] c"info\00"
@.str.32 = [3 x i8] c"cd\00"
@.str.33 = [7 x i8] c"mkfile\00"
@.str.34 = [6 x i8] c"mkdir\00"
@.str.35 = [3 x i8] c"ls\00"
@.str.36 = [3 x i8] c"dl\00"
@str = [10 x i8] c"Force OS:\00"
@str.37 = [23 x i8] c"Created By DatOneLefty\00"
@str.38 = [25 x i8] c"Copyright 2016 Force Co.\00"
@str.39 = [14 x i8] c"Version Alpha\00"
@str.40 = [15 x i8] c"OS Type: Force\00"
@str.41 = [18 x i8] c"OS Name: Force OS\00"
@str.42 = [26 x i8] c"Codename: Cryptic Catfish\00"
@str.43 = [19 x i8] c"Compatablity: UNIX\00"
@str.44 = [91 x i8] c"Force CO. is not responsible for any damage done to your computer when using this software\00"
@str.45 = [33 x i8] c"Complete. Reboot to apply update\00"
@str.46 = [5 x i8] c"HELP\00"
@str.47 = [9 x i8] c"CD [DIR]\00"
@str.48 = [5 x i8] c"HALT\00"
@str.49 = [5 x i8] c"TIME\00"
@str.50 = [5 x i8] c"INFO\00"
@str.51 = [3 x i8] c"LS\00"
@str.52 = [14 x i8] c"MKFILE [NAME]\00"
@str.53 = [13 x i8] c"MKDIR [NAME]\00"
@str.54 = [10 x i8] c"DL [NAME]\00"
@str.55 = [7 x i8] c"UPDATE\00"
@str.57 = [5 x i8] c"[>>]\00"
define i32 @FORCEX_EXECUTION(i8* %0) {
%2 = alloca i16
%3 = alloca i32
%4 = bitcast i16* %2 to i8*
store i16 32, i16* %2
%5 = call i8* @strtok(i8* %0, i8* %4)
%6 = icmp eq i8* %5, null
br i1 %6, label %100, label %7
7: ; preds = %1
%8 = bitcast i32* %3 to i8*
br label %9
9: ; preds = %7, %96
%10 = phi i32 [ undef, %7 ], [ %97, %96 ]
%11 = phi i8* [ %5, %7 ], [ %98, %96 ]
switch i32 %10, label %35 [
i32 1, label %12
i32 2, label %19
i32 3, label %26
i32 4, label %33
]
12: ; preds = %9
%13 = call i32 @chdir(i8* %11)
%14 = icmp eq i32 %13, -1
br i1 %14, label %15, label %17
15: ; preds = %12
%16 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0), i8* %11)
br label %96
17: ; preds = %12
%18 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @str.57, i64 0, i64 0))
br label %96
19: ; preds = %9
%20 = call i32 @fopen(i8* %11, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%21 = icmp eq i32 %20, -1
br i1 %21, label %22, label %24
22: ; preds = %19
%23 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0), i8* %11)
br label %96
24: ; preds = %19
%25 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @str.57, i64 0, i64 0))
br label %96
26: ; preds = %9
%27 = call i32 @mkdir(i8* %11)
%28 = icmp eq i32 %27, -1
br i1 %28, label %29, label %31
29: ; preds = %26
%30 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.4, i64 0, i64 0), i8* %11)
br label %96
31: ; preds = %26
%32 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @str.57, i64 0, i64 0))
br label %96
33: ; preds = %9
%34 = call i32 @GET_FILE(i8* %11)
br label %96
35: ; preds = %9
%36 = call i64 @strcmp(i8* %11, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
%37 = icmp eq i64 %36, 0
br i1 %37, label %38, label %50
38: ; preds = %35
%39 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @str.46, i64 0, i64 0))
%40 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.47, i64 0, i64 0))
%41 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @str.48, i64 0, i64 0))
%42 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
%43 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @str.49, i64 0, i64 0))
%44 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @str.50, i64 0, i64 0))
%45 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.51, i64 0, i64 0))
%46 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.52, i64 0, i64 0))
%47 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @str.53, i64 0, i64 0))
%48 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.54, i64 0, i64 0))
%49 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.55, i64 0, i64 0))
br label %96
50: ; preds = %35
%51 = call i64 @strcmp(i8* %11, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.18, i64 0, i64 0))
%52 = icmp eq i64 %51, 0
br i1 %52, label %53, label %58
53: ; preds = %50
%54 = call i32 @time(i32* %3)
%55 = call %struct.tm* @localtime(i32* %3)
%56 = call i8* @asctime(%struct.tm* %55)
%57 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.19, i64 0, i64 0), i8* %56)
br label %96
58: ; preds = %50
%59 = call i64 @strcmp(i8* %11, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.20, i64 0, i64 0))
%60 = icmp eq i64 %59, 0
br i1 %60, label %61, label %64
61: ; preds = %58
%62 = call i32 (...) @GET_UPDATE()
%63 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.45, i64 0, i64 0))
br label %96
64: ; preds = %58
%65 = call i64 @strcmp(i8* %11, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.22, i64 0, i64 0))
%66 = icmp eq i64 %65, 0
br i1 %66, label %67, label %77
67: ; preds = %64
%68 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str, i64 0, i64 0))
%69 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str.37, i64 0, i64 0))
%70 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.38, i64 0, i64 0))
%71 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.39, i64 0, i64 0))
%72 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.40, i64 0, i64 0))
%73 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str.41, i64 0, i64 0))
%74 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.42, i64 0, i64 0))
%75 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.43, i64 0, i64 0))
%76 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([91 x i8], [91 x i8]* @str.44, i64 0, i64 0))
br label %96
77: ; preds = %64
%78 = call i64 @strcmp(i8* %11, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.32, i64 0, i64 0))
%79 = icmp eq i64 %78, 0
br i1 %79, label %96, label %80
80: ; preds = %77
%81 = call i64 @strcmp(i8* %11, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.33, i64 0, i64 0))
%82 = icmp eq i64 %81, 0
br i1 %82, label %96, label %83
83: ; preds = %80
%84 = call i64 @strcmp(i8* %11, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.34, i64 0, i64 0))
%85 = icmp eq i64 %84, 0
br i1 %85, label %96, label %86
86: ; preds = %83
%87 = call i64 @strcmp(i8* %11, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i64 0, i64 0))
%88 = icmp eq i64 %87, 0
br i1 %88, label %89, label %91
89: ; preds = %86
%90 = call i32 @system(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i64 0, i64 0))
br label %96
91: ; preds = %86
%92 = call i64 @strcmp(i8* %11, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.36, i64 0, i64 0))
%93 = icmp eq i64 %92, 0
br i1 %93, label %96, label %94
94: ; preds = %91
%95 = call i32 @CORE_CODE(i32 205)
br label %96
96: ; preds = %91, %83, %80, %77, %15, %17, %24, %22, %33, %53, %67, %89, %94, %61, %38, %29, %31
%97 = phi i32 [ 2, %22 ], [ 2, %24 ], [ 3, %29 ], [ 3, %31 ], [ 4, %33 ], [ %10, %38 ], [ %10, %53 ], [ %10, %61 ], [ %10, %67 ], [ %10, %89 ], [ %10, %94 ], [ 0, %17 ], [ 0, %15 ], [ 1, %77 ], [ 2, %80 ], [ 3, %83 ], [ 4, %91 ]
%98 = call i8* @strtok(i8* null, i8* %4)
%99 = icmp eq i8* %98, null
br i1 %99, label %100, label %9
100: ; preds = %96, %1
ret i32 undef
}