// File: AsherGlick[P]CommentHeader/source/main.cpp
// Function: help()
void help() {
  string languageflags = "";
  map<char, headerStyle>::iterator it = headerStyles.begin();
  while (it != headerStyles.end()) {
    languageflags += it->first;
    it++;
  }
  cout << "usage: chead [-" + languageflags + "] [-hsbtf] [-ge] [-ov] [-ic] [-nmr]" << endl;
  cout << "             [-l #] [-w #] <Input> [Input ...] " << endl;
  cout << endl;

  cout << "Output Size and Shape" << endl;
  cout << " -l --lines         Change how many rows are formatted within the title" << endl;
  cout << " -w --width         Change how many columns the text box takes up defaults to 80" << endl;
  cout << endl;

  cout << "Output Formats" << endl;
  cout << " -h --help          Bring up this help menu" << endl;
  cout << " -s --signature     Output your signature form sigfile correctly formatted" << endl;
  cout << " -b --bsd-license   Output a BSD license using the input as the copyright holder" << endl;
  cout << " -t --title         Output a title style header" << endl;
  cout << " -f --function      Output a function style header, default option" << endl;
  cout << endl;

  cout << "Bounding Box Options" << endl;
  cout << " -g --hanging       Function Output: Leave right hand side hanging with no padding" << endl;
  cout << " -e --enclosed      Function Output: Pad right hand side with whitespace and decorations" << endl;
  cout << endl;

  cout << "Output Destinations" << endl;
  cout << " -o --stdout         Write the output to the terminal" << endl;
  cout << " -v --clipboard-out  Copy the output to the clipboard instead of stdout" << endl;
  cout << endl;

  cout << "Input Formats" << endl;
  cout << " -i --stdin         Parse title from args and content input from stdin" << endl;
  // cout << " -a --argument-only Parse title from first arg and content from remainder" << endl;
  cout << " -c --clipboard-in  Parse title from args and content from clipboard" << endl;
  cout << endl;

  cout << "Content Alignment" << endl;
  cout << " -n --left-align    Content aligned to the left" << endl;
  cout << " -m --middle-align  Content aligned to the middle" << endl;
  cout << " -r --right-align   Content alligned to the right" << endl;
  cout << endl;

  // Dynamically create the language section based on the languages initialized
  cout << "Languages" << endl;
  it = headerStyles.begin();
  while (it != headerStyles.end()) {
    cout << " -" << it->first  << " --" << languageNames[it->first];
    for (int i = 0; i < (14 - languageNames[it->first].length()); i++) {
      cout << " ";
    }
    cout << languageDescription[it->first] << endl;
    it++;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1c0, %rsp            # imm = 0x1C0
leaq -0x21(%rbp), %rdi
movq %rdi, -0xb8(%rbp)
callq 0x3470
movq -0xb8(%rbp), %rdx
leaq 0x8710(%rip), %rsi      # 0x18bf9
leaq -0x20(%rbp), %rdi
callq 0x33a0
jmp 0x104f4
leaq -0x21(%rbp), %rdi
callq 0x3300
leaq 0x1101c(%rip), %rdi     # 0x21520
callq 0x13cd0
movq %rax, -0x40(%rbp)
leaq 0x1100c(%rip), %rdi     # 0x21520
callq 0x8850
movq %rax, -0x48(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x13650
testb $0x1, %al
jne 0x10530
jmp 0x10583
leaq -0x40(%rbp), %rdi
callq 0x13d00
movsbl (%rax), %esi
leaq -0x20(%rbp), %rdi
callq 0x31b0
jmp 0x10547
leaq -0x40(%rbp), %rdi
xorl %esi, %esi
callq 0x13d20
movq %rax, -0x50(%rbp)
jmp 0x1050d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x21(%rbp), %rdi
callq 0x3300
jmp 0x10d35
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x10d2c
leaq 0x807c(%rip), %rsi      # 0x18606
leaq -0x90(%rbp), %rdi
leaq -0x20(%rbp), %rdx
callq 0x13a20
jmp 0x1059c
leaq 0x8073(%rip), %rdx      # 0x18616
leaq -0x70(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x13d60
jmp 0x105b5
movq 0x10a04(%rip), %rdi     # 0x20fc0
leaq -0x70(%rbp), %rsi
callq 0x3230
movq %rax, -0xc0(%rbp)
jmp 0x105ce
movq -0xc0(%rbp), %rdi
movq 0x109d4(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x105e3
leaq -0x70(%rbp), %rdi
callq 0x31a0
leaq -0x90(%rbp), %rdi
callq 0x31a0
movq 0x109c1(%rip), %rdi     # 0x20fc0
leaq 0x8034(%rip), %rsi      # 0x1863a
callq 0x32a0
movq %rax, -0xc8(%rbp)
jmp 0x10614
movq -0xc8(%rbp), %rdi
movq 0x1098e(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10629
movq 0x10990(%rip), %rdi     # 0x20fc0
movq 0x10979(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x1063e
movq 0x1097b(%rip), %rdi     # 0x20fc0
leaq 0x801e(%rip), %rsi      # 0x1866a
callq 0x32a0
movq %rax, -0xd0(%rbp)
jmp 0x1065a
movq -0xd0(%rbp), %rdi
movq 0x10948(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x1066f
movq 0x1094a(%rip), %rdi     # 0x20fc0
leaq 0x8003(%rip), %rsi      # 0x18680
callq 0x32a0
movq %rax, -0xd8(%rbp)
jmp 0x1068b
movq -0xd8(%rbp), %rdi
movq 0x10917(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x106a0
movq 0x10919(%rip), %rdi     # 0x20fc0
leaq 0x801a(%rip), %rsi      # 0x186c8
callq 0x32a0
movq %rax, -0xe0(%rbp)
jmp 0x106bc
movq -0xe0(%rbp), %rdi
movq 0x108e6(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x106d1
movq 0x108e8(%rip), %rdi     # 0x20fc0
movq 0x108d1(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x106e6
movq 0x108d3(%rip), %rdi     # 0x20fc0
leaq 0x8025(%rip), %rsi      # 0x18719
callq 0x32a0
movq %rax, -0xe8(%rbp)
jmp 0x10702
movq -0xe8(%rbp), %rdi
movq 0x108a0(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10717
movq 0x108a2(%rip), %rdi     # 0x20fc0
leaq 0x8003(%rip), %rsi      # 0x18728
callq 0x32a0
movq %rax, -0xf0(%rbp)
jmp 0x10733
movq -0xf0(%rbp), %rdi
movq 0x1086f(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10748
movq 0x10871(%rip), %rdi     # 0x20fc0
leaq 0x7ffe(%rip), %rsi      # 0x18754
callq 0x32a0
movq %rax, -0xf8(%rbp)
jmp 0x10764
movq -0xf8(%rbp), %rdi
movq 0x1083e(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10779
movq 0x10840(%rip), %rdi     # 0x20fc0
leaq 0x8018(%rip), %rsi      # 0x1879f
callq 0x32a0
movq %rax, -0x100(%rbp)
jmp 0x10795
movq -0x100(%rbp), %rdi
movq 0x1080d(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x107aa
movq 0x1080f(%rip), %rdi     # 0x20fc0
leaq 0x8038(%rip), %rsi      # 0x187f0
callq 0x32a0
movq %rax, -0x108(%rbp)
jmp 0x107c6
movq -0x108(%rbp), %rdi
movq 0x107dc(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x107db
movq 0x107de(%rip), %rdi     # 0x20fc0
leaq 0x8037(%rip), %rsi      # 0x18820
callq 0x32a0
movq %rax, -0x110(%rbp)
jmp 0x107f7
movq -0x110(%rbp), %rdi
movq 0x107ab(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x1080c
movq 0x107ad(%rip), %rdi     # 0x20fc0
movq 0x10796(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10821
movq 0x10798(%rip), %rdi     # 0x20fc0
leaq 0x8034(%rip), %rsi      # 0x18863
callq 0x32a0
movq %rax, -0x118(%rbp)
jmp 0x1083d
movq -0x118(%rbp), %rdi
movq 0x10765(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10852
movq 0x10767(%rip), %rdi     # 0x20fc0
leaq 0x8018(%rip), %rsi      # 0x18878
callq 0x32a0
movq %rax, -0x120(%rbp)
jmp 0x1086e
movq -0x120(%rbp), %rdi
movq 0x10734(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10883
movq 0x10736(%rip), %rdi     # 0x20fc0
leaq 0x803a(%rip), %rsi      # 0x188cb
callq 0x32a0
movq %rax, -0x128(%rbp)
jmp 0x1089f
movq -0x128(%rbp), %rdi
movq 0x10703(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x108b4
movq 0x10705(%rip), %rdi     # 0x20fc0
movq 0x106ee(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x108c9
movq 0x106f0(%rip), %rdi     # 0x20fc0
leaq 0x804d(%rip), %rsi      # 0x18924
callq 0x32a0
movq %rax, -0x130(%rbp)
jmp 0x108e5
movq -0x130(%rbp), %rdi
movq 0x106bd(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x108fa
movq 0x106bf(%rip), %rdi     # 0x20fc0
leaq 0x8030(%rip), %rsi      # 0x18938
callq 0x32a0
movq %rax, -0x138(%rbp)
jmp 0x10916
movq -0x138(%rbp), %rdi
movq 0x1068c(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x1092b
movq 0x1068e(%rip), %rdi     # 0x20fc0
leaq 0x8035(%rip), %rsi      # 0x1896e
callq 0x32a0
movq %rax, -0x140(%rbp)
jmp 0x10947
movq -0x140(%rbp), %rdi
movq 0x1065b(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x1095c
movq 0x1065d(%rip), %rdi     # 0x20fc0
movq 0x10646(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10971
movq 0x10648(%rip), %rdi     # 0x20fc0
leaq 0x8037(%rip), %rsi      # 0x189b6
callq 0x32a0
movq %rax, -0x148(%rbp)
jmp 0x1098d
movq -0x148(%rbp), %rdi
movq 0x10615(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x109a2
movq 0x10617(%rip), %rdi     # 0x20fc0
leaq 0x8014(%rip), %rsi      # 0x189c4
callq 0x32a0
movq %rax, -0x150(%rbp)
jmp 0x109be
movq -0x150(%rbp), %rdi
movq 0x105e4(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x109d3
movq 0x105e6(%rip), %rdi     # 0x20fc0
leaq 0x802a(%rip), %rsi      # 0x18a0b
callq 0x32a0
movq %rax, -0x158(%rbp)
jmp 0x109ef
movq -0x158(%rbp), %rdi
movq 0x105b3(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10a04
movq 0x105b5(%rip), %rdi     # 0x20fc0
movq 0x1059e(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10a19
movq 0x105a0(%rip), %rdi     # 0x20fc0
leaq 0x8029(%rip), %rsi      # 0x18a50
callq 0x32a0
movq %rax, -0x160(%rbp)
jmp 0x10a35
movq -0x160(%rbp), %rdi
movq 0x1056d(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10a4a
movq 0x1056f(%rip), %rdi     # 0x20fc0
leaq 0x800a(%rip), %rsi      # 0x18a62
callq 0x32a0
movq %rax, -0x168(%rbp)
jmp 0x10a66
movq -0x168(%rbp), %rdi
movq 0x1053c(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10a7b
movq 0x1053e(%rip), %rdi     # 0x20fc0
leaq 0x8009(%rip), %rsi      # 0x18a92
callq 0x32a0
movq %rax, -0x170(%rbp)
jmp 0x10a97
movq -0x170(%rbp), %rdi
movq 0x1050b(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10aac
movq 0x1050d(%rip), %rdi     # 0x20fc0
leaq 0x800a(%rip), %rsi      # 0x18ac4
callq 0x32a0
movq %rax, -0x178(%rbp)
jmp 0x10ac8
movq -0x178(%rbp), %rdi
movq 0x104da(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10add
movq 0x104dc(%rip), %rdi     # 0x20fc0
movq 0x104c5(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10af2
movq 0x104c7(%rip), %rdi     # 0x20fc0
leaq 0x7ff6(%rip), %rsi      # 0x18af6
callq 0x32a0
movq %rax, -0x180(%rbp)
jmp 0x10b0e
movq -0x180(%rbp), %rdi
movq 0x10494(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10b23
leaq 0x109f6(%rip), %rdi     # 0x21520
callq 0x13cd0
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x40(%rbp)
leaq 0x109d8(%rip), %rdi     # 0x21520
callq 0x8850
movq %rax, -0xa0(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x13650
testb $0x1, %al
jne 0x10b6d
jmp 0x10d1a
movq 0x1044c(%rip), %rdi     # 0x20fc0
leaq 0x7f85(%rip), %rsi      # 0x18b00
callq 0x32a0
movq %rax, -0x188(%rbp)
jmp 0x10b89
leaq -0x40(%rbp), %rdi
callq 0x13d00
movq -0x188(%rbp), %rdi
movsbl (%rax), %esi
callq 0x3330
movq %rax, -0x190(%rbp)
jmp 0x10baa
movq -0x190(%rbp), %rdi
leaq 0x7f4b(%rip), %rsi      # 0x18b03
callq 0x32a0
movq %rax, -0x198(%rbp)
jmp 0x10bc6
leaq -0x40(%rbp), %rdi
callq 0x13d00
movq %rax, %rsi
leaq 0x109a7(%rip), %rdi     # 0x21580
callq 0x13db0
movq %rax, -0x1a0(%rbp)
jmp 0x10be7
movq -0x1a0(%rbp), %rsi
movq -0x198(%rbp), %rdi
callq 0x3230
jmp 0x10bfc
movl $0x0, -0xa4(%rbp)
movslq -0xa4(%rbp), %rax
movq %rax, -0x1b0(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x13d00
movq %rax, %rsi
leaq 0x10959(%rip), %rdi     # 0x21580
callq 0x13db0
movq %rax, -0x1a8(%rbp)
jmp 0x10c35
movq -0x1a8(%rbp), %rdi
callq 0x33e0
movq %rax, %rdx
movq -0x1b0(%rbp), %rax
movl $0xe, %ecx
subq %rdx, %rcx
cmpq %rcx, %rax
jae 0x10cb1
movq 0x10361(%rip), %rdi     # 0x20fc0
leaq 0x73b6(%rip), %rsi      # 0x1801c
callq 0x32a0
jmp 0x10c6d
jmp 0x10c6f
movl -0xa4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa4(%rbp)
jmp 0x10c06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x10ca3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x31a0
leaq -0x90(%rbp), %rdi
callq 0x31a0
jmp 0x10d2c
leaq -0x40(%rbp), %rdi
callq 0x13d00
movq %rax, %rsi
leaq 0x108ec(%rip), %rdi     # 0x215b0
callq 0x13db0
movq %rax, -0x1b8(%rbp)
jmp 0x10cd2
movq -0x1b8(%rbp), %rsi
movq 0x102e0(%rip), %rdi     # 0x20fc0
callq 0x3230
movq %rax, -0x1c0(%rbp)
jmp 0x10cee
movq -0x1c0(%rbp), %rdi
movq 0x102b4(%rip), %rsi     # 0x20fb0
callq 0x32e0
jmp 0x10d03
leaq -0x40(%rbp), %rdi
xorl %esi, %esi
callq 0x13d20
movq %rax, -0xb0(%rbp)
jmp 0x10b41
leaq -0x20(%rbp), %rdi
callq 0x31a0
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbp
retq
leaq -0x20(%rbp), %rdi
callq 0x31a0
movq -0x30(%rbp), %rdi
callq 0x3460
nop