#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*/ page_init();
int print_lines(char *, int);
int help_art() {
  int cmd;
  page_init();
  if ((cmd = print_lines("Article Selection commands:\n", 1)) ||
      (cmd = print_lines(
           "\nn,SP	Scan forward for next unread article.\nN	Go to "
           "next article.\n^N	Scan forward for next unread article with same "
           "subject.\np,P,^P	Same as n,N,^N, only going "
           "backwards.\n-	Go to previously displayed article.\n",
           0)) ||
      (cmd = print_lines(
           "number	Go to specified article.\nrange{,range} "
           "command{:command}\n	Apply one or more commands to one or more "
           "ranges of articles.\n	Ranges are of the form: number | "
           "number-number.  You may use . for\n	the current article, and $ for "
           "the last article.\n 	Valid commands are: j, m, M, s, S, and "
           "!.\n",
           0)) ||
      (cmd = print_lines(
           "/pattern/modifiers\n	Scan forward for article containing "
           "pattern in the subject line.\n	(Use ?pat? to scan backwards; "
           "append h to scan headers, a to scan\n	entire articles, r to "
           "scan read articles, c to make case "
           "sensitive.\n/pattern/modifiers:command{:command}\n	Apply one or "
           "more commands to the set of articles matching pattern.\n	Use a "
           "K modifier to save entire command to the KILL file for "
           "this\n	newsgroup.  Commands m and M, if first, imply an r "
           "modifier.\n 	Valid commands are: j, m, M, s, S, and !.\n",
           0)) ||
      (cmd =
           print_lines("f,F	Submit a followup article (F = include this "
                       "article).\nr,R	Reply through net mail (R = include "
                       "this article).\ns ...	Save to file or pipe via "
                       "sh.\nS ...	Save via preferred shell.\nw,W	Like s "
                       "and S but save without the header.\n| ...	Same "
                       "as s|...\nC	Cancel this article, if yours.\n",
                       0)) ||
      (cmd =
           print_lines("^R,v	Restart article (v=verbose).\n^X	"
                       "Restart article, rot13 mode.\nc	Catch up (mark all "
                       "articles as read).\n^B	Back up one page.\n^L	"
                       "Refresh the screen.  You can get back to the pager "
                       "with this.\nX	Refresh screen in rot13 mode.\n",
                       0)) ||
      (cmd = print_lines("^	Go to first unread article.  Disables subject "
                         "search mode.\n$	Go to end of newsgroup.  "
                         "Disables subject search mode.\n",
                         0)) ||
      (cmd = print_lines(
           "#       Print last article number.\n&	Print current values "
           "of command-line switches.\n&switch {switch}\n	Set or unset "
           "more switches.\n&&	Print current macro definitions.\n&&def	Define "
           "a new macro.\nj	Junk this article (mark it read).  Stays at "
           "end of article.\nm	Mark article as still unread.\nM	Mark "
           "article as still unread upon exiting newsgroup or Y command.\n",
           0)) ||
      (cmd = print_lines(
           "Y	Yank back articles marked temporarily read via M.\nk	Mark "
           "current SUBJECT as read.\nK	Mark current SUBJECT as read, and save "
           "command in KILL file.\n=	List subjects of unread "
           "articles.\nu	Unsudirribe to this newsgroup.\n^K	Edit "
           "local KILL file (the one for this newsgroup).\nq	Quit this "
           "newsgroup for now.\nQ	Quit newsgroup, staying at current "
           "newsgroup.\n",
           0)))
    return cmd;
  return 0;
}


x86 assembly (clang, -O0):
<help_art>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    $0x0,%al
call   1040 <page_init@plt>
lea    0xeca(%rip),%rdi
mov    $0x1,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_art+0xfc>
lea    0xeca(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_art+0xfc>
lea    0xf81(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_art+0xfc>
lea    0x1089(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_art+0xfc>
lea    0x1264(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_art+0xfc>
lea    0x1362(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_art+0xfc>
lea    0x1429(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_art+0xfc>
lea    0x1486(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_art+0xfc>
lea    0x15cf(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
je     1227 <help_art+0x107>
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    122e <help_art+0x10e>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<help_art>:
push   %rax
xor    %eax,%eax
call   1040 <page_init@plt>
lea    0xed1(%rip),%rdi
mov    $0x1,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_art+0x9b>
lea    0xed9(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_art+0x9b>
lea    0xf98(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_art+0x9b>
lea    0x10a8(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_art+0x9b>
lea    0x128b(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_art+0x9b>
lea    0x1391(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_art+0x9b>
lea    0x1460(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_art+0x9b>
lea    0x14c5(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
je     11bd <help_art+0x9d>
pop    %rcx
ret
lea    0x1614(%rip),%rdi
xor    %esi,%esi
pop    %rax
jmp    1030 <print_lines@plt>

LLVM IR (-O0):
@.str = [29 x i8] c"Article Selection commands:\0A\00"
@.str.1 = [209 x i8] c"\0An,SP\09Scan forward for next unread article.\0AN\09Go to next article.\0A^N\09Scan forward for next unread article with same subject.\0Ap,P,^P\09Same as n,N,^N, only going backwards.\0A-\09Go to previously displayed article.\0A\00"
@.str.2 = [290 x i8] c"number\09Go to specified article.\0Arange{,range} command{:command}\0A\09Apply one or more commands to one or more ranges of articles.\0A\09Ranges are of the form: number | number-number. You may use . for\0A\09the current article, and $ for the last article.\0A \09Valid commands are: j, m, M, s, S, and !.\0A\00"
@.str.3 = [501 x i8] c"/pattern/modifiers\0A\09Scan forward for article containing pattern in the subject line.\0A\09(Use ?pat? to scan backwards; append h to scan headers, a to scan\0A\09entire articles, r to scan read articles, c to make case sensitive.\0A/pattern/modifiers:command{:command}\0A\09Apply one or more commands to the set of articles matching pattern.\0A\09Use a K modifier to save entire command to the KILL file for this\0A\09newsgroup. Commands m and M, if first, imply an r modifier.\0A \09Valid commands are: j, m, M, s, S, and !.\0A\00"
@.str.4 = [280 x i8] c"f,F\09Submit a followup article (F = include this article).\0Ar,R\09Reply through net mail (R = include this article).\0As ...\09Save to file or pipe via sh.\0AS ...\09Save via preferred shell.\0Aw,W\09Like s and S but save without the header.\0A| ...\09Same as s|...\0AC\09Cancel this article, if yours.\0A\00"
@.str.5 = [225 x i8] c"^R,v\09Restart article (v=verbose).\0A^X\09Restart article, rot13 mode.\0Ac\09Catch up (mark all articles as read).\0A^B\09Back up one page.\0A^L\09Refresh the screen. You can get back to the pager with this.\0AX\09Refresh screen in rot13 mode.\0A\00"
@.str.6 = [119 x i8] c"^\09Go to first unread article. Disables subject search mode.\0A$\09Go to end of newsgroup. Disables subject search mode.\0A\00"
@.str.7 = [355 x i8] c"# Print last article number.\0A&\09Print current values of command-line switches.\0A&switch {switch}\0A\09Set or unset more switches.\0A&&\09Print current macro definitions.\0A&&def\09Define a new macro.\0Aj\09Junk this article (mark it read). Stays at end of article.\0Am\09Mark article as still unread.\0AM\09Mark article as still unread upon exiting newsgroup or Y command.\0A\00"
@.str.8 = [350 x i8] c"Y\09Yank back articles marked temporarily read via M.\0Ak\09Mark current SUBJECT as read.\0AK\09Mark current SUBJECT as read, and save command in KILL file.\0A=\09List subjects of unread articles.\0Au\09Unsudirribe to this newsgroup.\0A^K\09Edit local KILL file (the one for this newsgroup).\0Aq\09Quit this newsgroup for now.\0AQ\09Quit newsgroup, staying at current newsgroup.\0A\00"
define i32 @help_art() {
%1 = alloca i32
%2 = alloca i32
%3 = call i32 (...) @page_init()
%4 = call i32 @print_lines(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0), i32 1)
store i32 %4, i32* %2
%5 = icmp ne i32 %4, 0
br i1 %5, label %30, label %6
6: ; preds = %0
%7 = call i32 @print_lines(i8* getelementptr inbounds ([209 x i8], [209 x i8]* @.str.1, i64 0, i64 0), i32 0)
store i32 %7, i32* %2
%8 = icmp ne i32 %7, 0
br i1 %8, label %30, label %9
9: ; preds = %6
%10 = call i32 @print_lines(i8* getelementptr inbounds ([290 x i8], [290 x i8]* @.str.2, i64 0, i64 0), i32 0)
store i32 %10, i32* %2
%11 = icmp ne i32 %10, 0
br i1 %11, label %30, label %12
12: ; preds = %9
%13 = call i32 @print_lines(i8* getelementptr inbounds ([501 x i8], [501 x i8]* @.str.3, i64 0, i64 0), i32 0)
store i32 %13, i32* %2
%14 = icmp ne i32 %13, 0
br i1 %14, label %30, label %15
15: ; preds = %12
%16 = call i32 @print_lines(i8* getelementptr inbounds ([280 x i8], [280 x i8]* @.str.4, i64 0, i64 0), i32 0)
store i32 %16, i32* %2
%17 = icmp ne i32 %16, 0
br i1 %17, label %30, label %18
18: ; preds = %15
%19 = call i32 @print_lines(i8* getelementptr inbounds ([225 x i8], [225 x i8]* @.str.5, i64 0, i64 0), i32 0)
store i32 %19, i32* %2
%20 = icmp ne i32 %19, 0
br i1 %20, label %30, label %21
21: ; preds = %18
%22 = call i32 @print_lines(i8* getelementptr inbounds ([119 x i8], [119 x i8]* @.str.6, i64 0, i64 0), i32 0)
store i32 %22, i32* %2
%23 = icmp ne i32 %22, 0
br i1 %23, label %30, label %24
24: ; preds = %21
%25 = call i32 @print_lines(i8* getelementptr inbounds ([355 x i8], [355 x i8]* @.str.7, i64 0, i64 0), i32 0)
store i32 %25, i32* %2
%26 = icmp ne i32 %25, 0
br i1 %26, label %30, label %27
27: ; preds = %24
%28 = call i32 @print_lines(i8* getelementptr inbounds ([350 x i8], [350 x i8]* @.str.8, i64 0, i64 0), i32 0)
store i32 %28, i32* %2
%29 = icmp ne i32 %28, 0
br i1 %29, label %30, label %32
30: ; preds = %27, %24, %21, %18, %15, %12, %9, %6, %0
%31 = load i32, i32* %2
store i32 %31, i32* %1
br label %33
32: ; preds = %27
store i32 0, i32* %1
br label %33
33: ; preds = %32, %30
%34 = load i32, i32* %1
ret i32 %34
}

LLVM IR (-O2):
@.str = [29 x i8] c"Article Selection commands:\0A\00"
@.str.1 = [209 x i8] c"\0An,SP\09Scan forward for next unread article.\0AN\09Go to next article.\0A^N\09Scan forward for next unread article with same subject.\0Ap,P,^P\09Same as n,N,^N, only going backwards.\0A-\09Go to previously displayed article.\0A\00"
@.str.2 = [290 x i8] c"number\09Go to specified article.\0Arange{,range} command{:command}\0A\09Apply one or more commands to one or more ranges of articles.\0A\09Ranges are of the form: number | number-number. You may use . for\0A\09the current article, and $ for the last article.\0A \09Valid commands are: j, m, M, s, S, and !.\0A\00"
@.str.3 = [501 x i8] c"/pattern/modifiers\0A\09Scan forward for article containing pattern in the subject line.\0A\09(Use ?pat? to scan backwards; append h to scan headers, a to scan\0A\09entire articles, r to scan read articles, c to make case sensitive.\0A/pattern/modifiers:command{:command}\0A\09Apply one or more commands to the set of articles matching pattern.\0A\09Use a K modifier to save entire command to the KILL file for this\0A\09newsgroup. Commands m and M, if first, imply an r modifier.\0A \09Valid commands are: j, m, M, s, S, and !.\0A\00"
@.str.4 = [280 x i8] c"f,F\09Submit a followup article (F = include this article).\0Ar,R\09Reply through net mail (R = include this article).\0As ...\09Save to file or pipe via sh.\0AS ...\09Save via preferred shell.\0Aw,W\09Like s and S but save without the header.\0A| ...\09Same as s|...\0AC\09Cancel this article, if yours.\0A\00"
@.str.5 = [225 x i8] c"^R,v\09Restart article (v=verbose).\0A^X\09Restart article, rot13 mode.\0Ac\09Catch up (mark all articles as read).\0A^B\09Back up one page.\0A^L\09Refresh the screen. You can get back to the pager with this.\0AX\09Refresh screen in rot13 mode.\0A\00"
@.str.6 = [119 x i8] c"^\09Go to first unread article. Disables subject search mode.\0A$\09Go to end of newsgroup. Disables subject search mode.\0A\00"
@.str.7 = [355 x i8] c"# Print last article number.\0A&\09Print current values of command-line switches.\0A&switch {switch}\0A\09Set or unset more switches.\0A&&\09Print current macro definitions.\0A&&def\09Define a new macro.\0Aj\09Junk this article (mark it read). Stays at end of article.\0Am\09Mark article as still unread.\0AM\09Mark article as still unread upon exiting newsgroup or Y command.\0A\00"
@.str.8 = [350 x i8] c"Y\09Yank back articles marked temporarily read via M.\0Ak\09Mark current SUBJECT as read.\0AK\09Mark current SUBJECT as read, and save command in KILL file.\0A=\09List subjects of unread articles.\0Au\09Unsudirribe to this newsgroup.\0A^K\09Edit local KILL file (the one for this newsgroup).\0Aq\09Quit this newsgroup for now.\0AQ\09Quit newsgroup, staying at current newsgroup.\0A\00"
define i32 @help_art() {
%1 = tail call i32 (...) @page_init()
%2 = tail call i32 @print_lines(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0), i32 1)
%3 = icmp eq i32 %2, 0
br i1 %3, label %4, label %27
4: ; preds = %0
%5 = tail call i32 @print_lines(i8* getelementptr inbounds ([209 x i8], [209 x i8]* @.str.1, i64 0, i64 0), i32 0)
%6 = icmp eq i32 %5, 0
br i1 %6, label %7, label %27
7: ; preds = %4
%8 = tail call i32 @print_lines(i8* getelementptr inbounds ([290 x i8], [290 x i8]* @.str.2, i64 0, i64 0), i32 0)
%9 = icmp eq i32 %8, 0
br i1 %9, label %10, label %27
10: ; preds = %7
%11 = tail call i32 @print_lines(i8* getelementptr inbounds ([501 x i8], [501 x i8]* @.str.3, i64 0, i64 0), i32 0)
%12 = icmp eq i32 %11, 0
br i1 %12, label %13, label %27
13: ; preds = %10
%14 = tail call i32 @print_lines(i8* getelementptr inbounds ([280 x i8], [280 x i8]* @.str.4, i64 0, i64 0), i32 0)
%15 = icmp eq i32 %14, 0
br i1 %15, label %16, label %27
16: ; preds = %13
%17 = tail call i32 @print_lines(i8* getelementptr inbounds ([225 x i8], [225 x i8]* @.str.5, i64 0, i64 0), i32 0)
%18 = icmp eq i32 %17, 0
br i1 %18, label %19, label %27
19: ; preds = %16
%20 = tail call i32 @print_lines(i8* getelementptr inbounds ([119 x i8], [119 x i8]* @.str.6, i64 0, i64 0), i32 0)
%21 = icmp eq i32 %20, 0
br i1 %21, label %22, label %27
22: ; preds = %19
%23 = tail call i32 @print_lines(i8* getelementptr inbounds ([355 x i8], [355 x i8]* @.str.7, i64 0, i64 0), i32 0)
%24 = icmp eq i32 %23, 0
br i1 %24, label %25, label %27
25: ; preds = %22
%26 = tail call i32 @print_lines(i8* getelementptr inbounds ([350 x i8], [350 x i8]* @.str.8, i64 0, i64 0), i32 0)
br label %27
27: ; preds = %25, %0, %4, %7, %10, %13, %16, %19, %22
%28 = phi i32 [ %2, %0 ], [ %5, %4 ], [ %8, %7 ], [ %11, %10 ], [ %14, %13 ], [ %17, %16 ], [ %20, %19 ], [ %23, %22 ], [ %26, %25 ]
ret i32 %28
}