user: What is the c source code of the assembly code below:

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0xfb8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x1fa8(%rsp)
  xor    %eax,%eax
  lea    D369(%rip),%rbx
  mov    %rbx,%rsi
  lea    D422(%rip),%rdi
  call   <fopen@plt>
  mov    %rax,%r13
  mov    %rbx,%rsi
  lea    D471(%rip),%rdi
  call   <fopen@plt>
  mov    %rax,%r14
  mov    %rbx,%rsi
  lea    D156(%rip),%rdi
  call   <fopen@plt>
  mov    %rax,%r12
  mov    %r13,%rcx
  mov    $0x42,%edx
  mov    $0x1,%esi
  lea    D345(%rip),%rdi
  call   <fwrite@plt>
  mov    %r13,%rcx
  mov    $0x42,%edx
  mov    $0x1,%esi
  lea    D562(%rip),%rdi
  call   <fwrite@plt>
  mov    %r13,%rcx
  mov    $0x29,%edx
  mov    $0x1,%esi
  lea    D491(%rip),%rdi
  call   <fwrite@plt>
  mov    %r13,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D384(%rip),%rbx
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r13,%rcx
  mov    $0x42,%edx
  mov    $0x1,%esi
  lea    D622(%rip),%rdi
  call   <fwrite@plt>
  mov    %r13,%rcx
  mov    $0x3a,%edx
  mov    $0x1,%esi
  lea    D495(%rip),%rdi
  call   <fwrite@plt>
  mov    %r13,%rcx
  mov    $0x1b,%edx
  mov    $0x1,%esi
  lea    D446(%rip),%rdi
  call   <fwrite@plt>
  mov    %r13,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r13,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D317(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x41,%edx
  mov    $0x1,%esi
  lea    D272(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x41,%edx
  mov    $0x1,%esi
  lea    D475(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x26,%edx
  mov    $0x1,%esi
  lea    D303(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  lea    D262(%rip),%rbx
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x41,%edx
  mov    $0x1,%esi
  lea    D146(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x39,%edx
  mov    $0x1,%esi
  lea    D515(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D164(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  lea    D286(%rip),%rbx
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x21,%edx
  mov    $0x1,%esi
  lea    D114(%rip),%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x3e,%edx
  mov    $0x1,%esi
  lea    D129(%rip),%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x1d,%edx
  mov    $0x1,%esi
  lea    D326(%rip),%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x41,%edx
  mov    $0x1,%esi
  lea    D459(%rip),%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x39,%edx
  mov    $0x1,%esi
  lea    D403(%rip),%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D543(%rip),%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r12,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  lea    D431(%rip),%rsi
  lea    D275(%rip),%rdi
  call   <fopen@plt>
  mov    %rax,%rbx
  lea    0x30(%rsp),%rbp
  lea    D476(%rip),%r15
L346:
  mov    %rbx,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L316
  mov    %rbx,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  mov    $0x6,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L28
  mov    $0x6,%edx
  lea    D390(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L346
  mov    $0xfffffffffffeffff,%r15
  jmp    L22
L28:
  mov    $0xfffffffffffefffe,%r15
  jmp    L22
L257:
  movb   $0x0,0x810(%rsp,%rdx,1)
  jmp    L215
L327:
  lea    D454(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r15,%rdx
  mov    0xc(%rsp),%esi
  lea    D204(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L197
L134:
  movb   $0x0,0xff0(%rsp,%rdx,1)
  jmp    L174
L211:
  movb   $0x0,0x17d0(%rsp,%rdx,1)
  jmp    L114
L193:
  lea    0x30(%rsp),%rdi
  mov    $0x2,%edx
  lea    D58(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L117
  lea    D476(%rip),%rbp
L237:
  lea    0x30(%rsp),%rdi
  mov    $0x6,%edx
  mov    %rbp,%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L288
  sub    $0x1,%r15
  lea    0x30(%rsp),%rdi
  mov    %rbx,%rdx
  mov    $0x7d0,%esi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L237
L117:
  mov    %rbx,%rdi
  call   <fclose@plt>
  mov    %r13,%rdi
  call   <fclose@plt>
  mov    %r14,%rdi
  call   <fclose@plt>
  lea    D213(%rip),%rbx
  mov    %rbx,%rdi
  call   <puts@plt>
  lea    D565(%rip),%rbp
  mov    %rbp,%rdi
  call   <puts@plt>
  lea    D616(%rip),%rdi
  call   <puts@plt>
  lea    D509(%rip),%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  mov    %rbx,%rdi
  call   <puts@plt>
  mov    $0x0,%edi
  call   <exit@plt>
L316:
  lea    D453(%rip),%rdi
  call   <puts@plt>
  lea    D183(%rip),%rdi
  call   <puts@plt>
L197:
  lea    D227(%rip),%rdi
  call   <puts@plt>
  lea    D38(%rip),%rdi
  call   <puts@plt>
  lea    D138(%rip),%rdi
  call   <puts@plt>
  mov    0x1fa8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L42
  mov    $0x0,%eax
  add    $0x1fb8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L288:
  lea    0x30(%rsp),%rdi
  mov    $0x6,%edx
  lea    D390(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L11
L22:
  lea    0x36(%rsp),%rsi
  lea    0x810(%rsp),%rbp
  mov    %rbp,%rdi
  call   <strcpy@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  je     L215
  sub    $0x1,%eax
  movslq %eax,%rdx
  cmpb   $0xa,0x810(%rsp,%rdx,1)
  je     L257
L215:
  lea    0x30(%rsp),%rdi
  mov    %rbx,%rdx
  mov    $0x7d0,%esi
  call   <fgets@plt>
  test   %rax,%rax
  je     L316
  lea    0x30(%rsp),%rdi
  mov    $0x9,%edx
  lea    D383(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L339
  lea    0x39(%rsp),%rsi
  lea    0x10(%rsp),%rbp
  mov    %rbp,%rdi
  call   <strcpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D190(%rip),%rsi
  mov    %rbp,%rdi
  call   <sscanf@plt>
  movslq 0xc(%rsp),%rax
  cmp    %r15,%rax
  jne    L327
  sub    $0x1,%r15
  lea    0x30(%rsp),%rdi
  mov    %rbx,%rdx
  mov    $0x7d0,%esi
  call   <fgets@plt>
  test   %rax,%rax
  je     L316
  lea    0x30(%rsp),%rdi
  mov    $0x7,%edx
  lea    D226(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L136
  lea    0x37(%rsp),%rsi
  lea    0xff0(%rsp),%rbp
  mov    %rbp,%rdi
  call   <strcpy@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  je     L174
  sub    $0x1,%eax
  movslq %eax,%rdx
  cmpb   $0xa,0xff0(%rsp,%rdx,1)
  je     L134
L174:
  lea    0x30(%rsp),%rdi
  mov    %rbx,%rdx
  mov    $0x7d0,%esi
  call   <fgets@plt>
  test   %rax,%rax
  je     L316
  lea    0x30(%rsp),%rdi
  mov    $0xa,%edx
  lea    D621(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L183
  lea    0x3a(%rsp),%rsi
  lea    0x17d0(%rsp),%rbp
  mov    %rbp,%rdi
  call   <strcpy@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  je     L114
  sub    $0x1,%eax
  movslq %eax,%rdx
  cmpb   $0xa,0x17d0(%rsp,%rdx,1)
  je     L211
L114:
  lea    0x810(%rsp),%rbp
  mov    0xc(%rsp),%ecx
  mov    %rbp,%rdx
  lea    D382(%rip),%rsi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdx
  lea    D333(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    0xc(%rsp),%ecx
  mov    %rbp,%rdx
  lea    D1(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    0x30(%rsp),%rdi
  mov    %rbx,%rdx
  mov    $0x7d0,%esi
  call   <fgets@plt>
  test   %rax,%rax
  je     L316
  lea    0x30(%rsp),%rdi
  mov    $0x6,%edx
  lea    D551(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L145
  lea    0xff0(%rsp),%rcx
  mov    %rbp,%rdx
  lea    D95(%rip),%rsi
  mov    %r12,%rdi
  call   <fprintf@plt>
  lea    0x30(%rsp),%rbp
L241:
  lea    D614(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  mov    %rbx,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L193
  mov    $0x2,%edx
  lea    D58(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L193
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <fputs@plt>
  jmp    L241
L339:
  lea    D383(%rip),%rbx
L312:
  lea    D357(%rip),%rdi
  call   <puts@plt>
  mov    %rbx,%rsi
  lea    D590(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x30(%rsp),%rsi
  lea    D497(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L197
L136:
  lea    D226(%rip),%rbx
  jmp    L312
L183:
  lea    D621(%rip),%rbx
  jmp    L312
L145:
  lea    D551(%rip),%rbx
  jmp    L312
L11:
  lea    D390(%rip),%rbx
  jmp    L312
L42:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: label: D369
type_guessed: string
name: read_data
arguments: label: D422
type_guessed: string
name: read_data
arguments: label: D471
type_guessed: string
name: read_data
arguments: label: D156
type_guessed: string
name: read_data
arguments: label: D345
type_guessed: string
name: read_data
arguments: label: D562
type_guessed: string
name: read_data
arguments: label: D491
type_guessed: string
name: read_data
arguments: label: D384
type_guessed: string
name: read_data
arguments: label: D622
type_guessed: string
name: read_data
arguments: label: D495
type_guessed: string
name: read_data
arguments: label: D446
type_guessed: string
name: read_data
arguments: label: D317
type_guessed: string
name: read_data
arguments: label: D272
type_guessed: string
name: read_data
arguments: label: D475
type_guessed: string
name: read_data
arguments: label: D303
type_guessed: string
name: read_data
arguments: label: D262
type_guessed: string
name: read_data
arguments: label: D146
type_guessed: string
name: read_data
arguments: label: D515
type_guessed: string
name: read_data
arguments: label: D164
type_guessed: string
name: read_data
arguments: label: D286
type_guessed: string
name: read_data
arguments: label: D114
type_guessed: string
name: read_data
arguments: label: D129
type_guessed: string
name: read_data
arguments: label: D326
type_guessed: string
name: read_data
arguments: label: D459
type_guessed: string
name: read_data
arguments: label: D403
type_guessed: string
name: read_data
arguments: label: D543
type_guessed: string
name: read_data
arguments: label: D431
type_guessed: string
name: read_data
arguments: label: D275
type_guessed: string
name: read_data
arguments: label: D476
type_guessed: string
name: read_data
arguments: label: D390
type_guessed: string
name: read_data
arguments: label: D454
type_guessed: string
name: read_data
arguments: label: D204
type_guessed: string
name: read_data
arguments: label: D58
type_guessed: string
name: read_data
arguments: label: D213
type_guessed: string
name: read_data
arguments: label: D565
type_guessed: string
name: read_data
arguments: label: D616
type_guessed: string
name: read_data
arguments: label: D509
type_guessed: string
name: read_data
arguments: label: D453
type_guessed: string
name: read_data
arguments: label: D183
type_guessed: string
name: read_data
arguments: label: D227
type_guessed: string
name: read_data
arguments: label: D38
type_guessed: string
name: read_data
arguments: label: D138
type_guessed: string
name: read_data
arguments: label: D383
type_guessed: string
name: read_data
arguments: label: D190
type_guessed: string
name: read_data
arguments: label: D226
type_guessed: string
name: read_data
arguments: label: D621
type_guessed: string
name: read_data
arguments: label: D382
type_guessed: string
name: read_data
arguments: label: D333
type_guessed: string
name: read_data
arguments: label: D1
type_guessed: string
name: read_data
arguments: label: D551
type_guessed: string
name: read_data
arguments: label: D95
type_guessed: string
name: read_data
arguments: label: D614
type_guessed: string
name: read_data
arguments: label: D357
type_guessed: string
name: read_data
arguments: label: D590
type_guessed: string
name: read_data
arguments: label: D497
type_guessed: string

tool: D369: w

tool: D422: verrdefs.h

tool: D471: verrdefs.fin

tool: D156: vrdifac.msg

tool: D345: /* VERRDEFS -- Definition of all symbolic names for VRDI internal


tool: D562:  * errors.  This module is used by application programs to define


tool: D491:  * symbolic names for the VRDI errors.  


tool: D384:  *


tool: D622:  *	NOTE :  This file is built by VRDIERRORS.COM.  It should never


tool: D495:  *		be modified directly.  To make changes to the source,


tool: D446:  *		change VRDIERRORS.COM.


tool: D317:  */


tool: D272: C VERRDEFS -- Definition of all symbolic names for VRDI internal


tool: D475: C errors.  This module is used by application programs to define


tool: D303: C symbolic names for the VRDI errors.


tool: D262: C


tool: D146: C	NOTE :  This file is built by VRDIERRORS.COM.  It should never


tool: D515: C		be modified directly.  To make changes to the source,


tool: D164: C		change VRDIERRORS.COM.


tool: D286: !


tool: D114: !	Message file for facility VIC2


tool: D129: !  This file contains the message id's and detailed texts for


tool: D326: !  the VRDI internal errors.


tool: D459: !	NOTE :  This file is built by VRDIERRORS.COM.  It should never


tool: D403: !		be modified directly.  To make changes to the source,


tool: D543: !		change VRDIERRORS.COM.


tool: D431: r

tool: D275: vrdierrs.dat

tool: D476: %%SKIP

tool: D390: %%KEY 

tool: D454: **** Numbering sequence in VRDIERRS.DAT is bad

tool: D204: **** Found %d when expecting %ld


tool: D58: %%

tool: D213: ****************************************

tool: D565: *                                      *

tool: D616: * VRDIERRORS.COM:                      *

tool: D509: * All files successfully created       *

tool: D453: **** Premature end of file encountered processing VRDIERRS.DAT

tool: D183: **** Check file contents

tool: 

tool: D38: Please see documentation in ERRORBLD.COM and fix

tool: D138: ERROR file build aborted

tool: D383: %%NUMBER 

tool: D190:  %d

tool: D226: %%NAME 

tool: D621: %%MESSAGE 

tool: D382: #define %s %d


tool: D333:       INTEGER %s


tool: D1:       PARAMETER (%s = %d)


tool: D551: %%HELP

tool: D95: .KEY %s	! %s


tool: D614:   

tool: D357: **** Bad directive in VRDIERRS.DAT

tool: D590: **** Expected %s


tool: D497: **** Found %s


assistant: ```c
main() {
  FILE *vrdierrs_dat;
  FILE *verrordefs_h;
  FILE *verrdefs_fin;
  FILE *vrdifac_msg;
  char *expected;
  long cur_num;
  int len;
  char number_str[25];
  int number;
  char in_record[2001];
  char key[2001];
  char name[2001];
  char fname[2001];
  char message[2001];
  verrordefs_h = fopen("verrdefs.h", "w");
  verrdefs_fin = fopen("verrdefs.fin", "w");
  vrdifac_msg = fopen("vrdifac.msg", "w");
  fputs("/* VERRDEFS -- Definition of all symbolic names for VRDI internal\n", verrordefs_h);
  fputs(" * errors.  This module is used by application programs to define\n", verrordefs_h);
  fputs(" * symbolic names for the VRDI errors.  \n", verrordefs_h);
  fputs(" *\n", verrordefs_h);
  fputs(" *\tNOTE :  This file is built by VRDIERRORS.COM.  It should never\n", verrordefs_h);
  fputs(" *\t\tbe modified directly.  To make changes to the source,\n", verrordefs_h);
  fputs(" *\t\tchange VRDIERRORS.COM.\n", verrordefs_h);
  fputs(" *\n", verrordefs_h);
  fputs(" */\n", verrordefs_h);
  fputs("C VERRDEFS -- Definition of all symbolic names for VRDI internal\n", verrdefs_fin);
  fputs("C errors.  This module is used by application programs to define\n", verrdefs_fin);
  fputs("C symbolic names for the VRDI errors.\n", verrdefs_fin);
  fputs("C\n", verrdefs_fin);
  fputs("C\tNOTE :  This file is built by VRDIERRORS.COM.  It should never\n", verrdefs_fin);
  fputs("C\t\tbe modified directly.  To make changes to the source,\n", verrdefs_fin);
  fputs("C\t\tchange VRDIERRORS.COM.\n", verrdefs_fin);
  fputs("C\n", verrdefs_fin);
  fputs("!\n", vrdifac_msg);
  fputs("!\tMessage file for facility VIC2\n", vrdifac_msg);
  fputs("!\n", vrdifac_msg);
  fputs("!  This file contains the message id's and detailed texts for\n", vrdifac_msg);
  fputs("!  the VRDI internal errors.\n", vrdifac_msg);
  fputs("!\n", vrdifac_msg);
  fputs("!\n", vrdifac_msg);
  fputs("!\tNOTE :  This file is built by VRDIERRORS.COM.  It should never\n", vrdifac_msg);
  fputs("!\t\tbe modified directly.  To make changes to the source,\n", vrdifac_msg);
  fputs("!\t\tchange VRDIERRORS.COM.\n", vrdifac_msg);
  fputs("!\n", vrdifac_msg);
  fputs("!\n", vrdifac_msg);
  cur_num = -65537;
  vrdierrs_dat = fopen("vrdierrs.dat", "r");
FIND_TOP:
  if (fgets(in_record, 2000, vrdierrs_dat) == NULL)
    goto EARLY_END;
  fgets(in_record, 2000, vrdierrs_dat);
  if (strncmp(in_record, "%%SKIP", 6) == 0) {
    cur_num = cur_num - 1;
  } else if (strncmp(in_record, "%%KEY ", 6) != 0)
    goto FIND_TOP;
TOP:
  strcpy(key, &in_record[6]);
  if ((len = strlen(key)) != 0)
    if (key[len - 1] == '\n')
      key[len - 1] = '\0';
  if (fgets(in_record, 2000, vrdierrs_dat) == NULL)
    goto EARLY_END;
  expected = "%%NUMBER ";
  if (strncmp(in_record, "%%NUMBER ", 9) != 0)
    goto BAD_DIRECTIVE;
  strcpy(number_str, &in_record[9]);
  sscanf(number_str, " %d", &number);
  if (number != cur_num)
    goto BAD_NUMBER;
  cur_num = cur_num - 1;
  if (fgets(in_record, 2000, vrdierrs_dat) == NULL)
    goto EARLY_END;
  expected = "%%NAME ";
  if (strncmp(in_record, "%%NAME ", 7) != 0)
    goto BAD_DIRECTIVE;
  strcpy(name, &in_record[7]);
  if ((len = strlen(name)) != 0)
    if (name[len - 1] == '\n')
      name[len - 1] = '\0';
  if (fgets(in_record, 2000, vrdierrs_dat) == NULL)
    goto EARLY_END;
  expected = "%%MESSAGE ";
  if (strncmp(in_record, "%%MESSAGE ", 10) != 0)
    goto BAD_DIRECTIVE;
  strcpy(message, &in_record[10]);
  if ((len = strlen(message)) != 0)
    if (message[len - 1] == '\n')
      message[len - 1] = '\0';
  fprintf(verrordefs_h, "#define %s %d\n", key, number);
  fprintf(verrdefs_fin, "      INTEGER %s\n", key);
  fprintf(verrdefs_fin, "      PARAMETER (%s = %d)\n", key, number);
  if (fgets(in_record, 2000, vrdierrs_dat) == NULL)
    goto EARLY_END;
  expected = "%%HELP";
  if (strncmp(in_record, "%%HELP", 6) != 0)
    goto BAD_DIRECTIVE;
  fprintf(vrdifac_msg, ".KEY %s\t! %s\n", key, name);
WRT_HLP:
  strcpy(in_record, "  ");
  if (fgets(in_record, 2000, vrdierrs_dat) == NULL)
    goto HLP_DONE;
  if (strncmp(in_record, "%%", 2) == 0)
    goto HLP_DONE;
  fputs(in_record, vrdifac_msg);
  goto WRT_HLP;
HLP_DONE:
  if (strncmp(in_record, "%%", 2) != 0)
    goto DONE;
CHECK_SKIP:
  if (strncmp(in_record, "%%SKIP", 6) != 0)
    goto CHECK_KEY;
  cur_num = cur_num - 1;
  if (fgets(in_record, 2000, vrdierrs_dat) == NULL)
    goto DONE;
  goto CHECK_SKIP;
CHECK_KEY:
  expected = "%%KEY ";
  if (strncmp(in_record, "%%KEY ", 6) != 0)
    goto BAD_DIRECTIVE;
  goto TOP;
DONE:
  fclose(vrdierrs_dat);
  fclose(verrordefs_h);
  fclose(verrdefs_fin);
  puts("****************************************");
  puts("*                                      *");
  puts("* VRDIERRORS.COM:                      *");
  puts("* All files successfully created       *");
  puts("*                                      *");
  puts("****************************************");
  exit(0);
EARLY_END:
  printf("**** Premature end of file encountered processing VRDIERRS.DAT\n");
  printf("**** Check file contents\n");
  goto PLS_FIX;
BAD_DIRECTIVE:
  printf("**** Bad directive in VRDIERRS.DAT\n");
  printf("**** Expected %s\n", expected);
  printf("**** Found %s\n", in_record);
  goto PLS_FIX;
BAD_NUMBER:
  printf("**** Numbering sequence in VRDIERRS.DAT is bad");
  printf("**** Found %d when expecting %ld\n", number, cur_num);
PLS_FIX:
  puts("");
  puts("Please see documentation in ERRORBLD.COM and fix");
  puts("ERROR file build aborted");
}
```