user: 下面的汇编指令对应的C源代码是什么:

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0xfe8,%rsp
  lea    D206(%rip),%rbp
  lea    D286(%rip),%rdi
  mov    %rbp,%rsi
  lea    D527(%rip),%r13
  mov    %fs:0x28,%rax
  mov    %rax,0x1fd8(%rsp)
  xor    %eax,%eax
  call   <fopen@plt>
  mov    %rbp,%rsi
  lea    D272(%rip),%rdi
  mov    %rax,%r15
  mov    %rax,0x18(%rsp)
  call   <fopen@plt>
  mov    %rbp,%rsi
  lea    D588(%rip),%rdi
  lea    D152(%rip),%rbp
  mov    %rax,%r14
  mov    %rax,0x8(%rsp)
  call   <fopen@plt>
  mov    %r15,%rcx
  mov    $0x42,%edx
  mov    $0x1,%esi
  lea    D115(%rip),%rdi
  mov    %rax,%rbx
  call   <fwrite@plt>
  mov    %r15,%rcx
  mov    $0x42,%edx
  mov    $0x1,%esi
  lea    D141(%rip),%rdi
  call   <fwrite@plt>
  mov    %r15,%rcx
  mov    $0x29,%edx
  mov    $0x1,%esi
  lea    D168(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  mov    %r15,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %r15,%rcx
  mov    $0x42,%edx
  mov    $0x1,%esi
  lea    D193(%rip),%rdi
  call   <fwrite@plt>
  mov    %r15,%rcx
  mov    $0x3a,%edx
  mov    $0x1,%esi
  lea    D333(%rip),%rdi
  call   <fwrite@plt>
  mov    %r15,%rcx
  mov    $0x1b,%edx
  mov    $0x1,%esi
  lea    D253(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  mov    %r15,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D125(%rip),%rbp
  call   <fwrite@plt>
  mov    %r15,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D513(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x41,%edx
  mov    $0x1,%esi
  lea    D180(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x41,%edx
  mov    $0x1,%esi
  lea    D99(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x26,%edx
  mov    $0x1,%esi
  lea    D300(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    %rbp,%rdi
  mov    $0x2,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x41,%edx
  mov    $0x1,%esi
  lea    D533(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x39,%edx
  mov    $0x1,%esi
  lea    D98(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D170(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    %rbp,%rdi
  mov    $0x2,%edx
  lea    D334(%rip),%rbp
  mov    $0x1,%esi
  lea    D111(%rip),%r14
  call   <fwrite@plt>
  mov    %rbp,%rdi
  mov    %rbx,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x21,%edx
  mov    $0x1,%esi
  lea    D437(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  mov    %rbx,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x3e,%edx
  mov    $0x1,%esi
  lea    D549(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x1d,%edx
  mov    $0x1,%esi
  lea    D526(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  mov    %rbx,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  mov    %rbx,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x41,%edx
  mov    $0x1,%esi
  lea    D256(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x39,%edx
  mov    $0x1,%esi
  lea    D142(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D430(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  mov    %rbx,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  mov    %rbx,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  lea    0x60(%rsp),%rbp
  call   <fwrite@plt>
  lea    D188(%rip),%rsi
  lea    D34(%rip),%rdi
  call   <fopen@plt>
  mov    %rax,%r12
  jmp    L158
  nopl   0x0(%rax,%rax,1)
L230:
  mov    %r12,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  mov    $0x6,%edx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L328
  mov    $0x6,%edx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L251
L158:
  mov    %r12,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L230
L132:
  lea    D217(%rip),%rdi
  call   <puts@plt>
  lea    D261(%rip),%rdi
  call   <puts@plt>
L136:
  lea    D398(%rip),%rdi
  call   <puts@plt>
  lea    D370(%rip),%rdi
  call   <puts@plt>
  lea    D52(%rip),%rdi
  call   <puts@plt>
  mov    0x1fd8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L333
  add    $0x1fe8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L328:
  mov    $0xfffffffffffefffe,%rdx
L188:
  lea    0x66(%rsp),%rax
  mov    %rbx,0x10(%rsp)
  mov    %rdx,%rbx
  mov    %rax,0x28(%rsp)
  lea    0x840(%rsp),%rax
  mov    %rax,(%rsp)
L81:
  mov    (%rsp),%r15
  mov    0x28(%rsp),%rsi
  mov    %r15,%rdi
  call   <strcpy@plt>
  mov    %r15,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  je     L112
  sub    $0x1,%eax
  cltq
  cmpb   $0xa,0x840(%rsp,%rax,1)
  jne    L112
  movb   $0x0,0x840(%rsp,%rax,1)
  nopw   0x0(%rax,%rax,1)
L112:
  mov    %r12,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L132
  mov    $0x9,%edx
  lea    D46(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L299
  lea    0x40(%rsp),%r14
  lea    0x69(%rsp),%rsi
  mov    %r14,%rdi
  call   <strcpy@plt>
  lea    0x3c(%rsp),%rdx
  lea    D566(%rip),%rsi
  mov    %r14,%rdi
  call   <sscanf@plt>
  movslq 0x3c(%rsp),%rax
  cmp    %rbx,%rax
  jne    L301
  mov    %r12,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  sub    $0x1,%rbx
  call   <fgets@plt>
  test   %rax,%rax
  je     L132
  mov    $0x7,%edx
  lea    D257(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L10
  lea    0x1020(%rsp),%r14
  lea    0x67(%rsp),%rsi
  mov    %r14,%rdi
  call   <strcpy@plt>
  mov    %r14,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  je     L92
  sub    $0x1,%eax
  cltq
  cmpb   $0xa,0x1020(%rsp,%rax,1)
  jne    L92
  movb   $0x0,0x1020(%rsp,%rax,1)
  nopl   0x0(%rax)
L92:
  mov    %r12,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L132
  mov    $0xa,%edx
  lea    D498(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L62
  lea    0x1800(%rsp),%r15
  lea    0x6a(%rsp),%rsi
  mov    %r15,%rdi
  call   <strcpy@plt>
  mov    %r15,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  je     L113
  sub    $0x1,%eax
  cltq
  cmpb   $0xa,0x1800(%rsp,%rax,1)
  jne    L113
  movb   $0x0,0x1800(%rsp,%rax,1)
  xchg   %ax,%ax
L113:
  mov    (%rsp),%r15
  mov    0x3c(%rsp),%ecx
  lea    D311(%rip),%rsi
  xor    %eax,%eax
  mov    0x18(%rsp),%rdi
  mov    %r15,%rdx
  call   <fprintf@plt>
  mov    0x8(%rsp),%rdi
  mov    %r15,%rdx
  xor    %eax,%eax
  lea    D282(%rip),%rsi
  call   <fprintf@plt>
  mov    0x8(%rsp),%rdi
  mov    0x3c(%rsp),%ecx
  xor    %eax,%eax
  mov    %r15,%rdx
  lea    D123(%rip),%rsi
  mov    %r15,(%rsp)
  call   <fprintf@plt>
  mov    %r12,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L132
  lea    D496(%rip),%r15
  mov    $0x6,%edx
  mov    %rbp,%rdi
  mov    %r15,%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L201
  mov    (%rsp),%rdx
  mov    0x10(%rsp),%rdi
  mov    %r14,%rcx
  lea    D119(%rip),%rsi
  lea    D276(%rip),%r15
  lea    D537(%rip),%r14
  call   <fprintf@plt>
  mov    %rbx,0x20(%rsp)
  mov    0x10(%rsp),%rbx
  jmp    L46
  nopl   (%rax)
L288:
  mov    $0x2,%edx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L93
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <fputs@plt>
L46:
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  mov    %r12,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L288
L93:
  mov    $0x2,%edx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  mov    0x20(%rsp),%rbx
  call   <strncmp@plt>
  test   %rax,%rax
  je     L144
  jmp    L206
  nop
L68:
  mov    %r12,%rdx
  mov    $0x7d0,%esi
  mov    %rbp,%rdi
  sub    $0x1,%rbx
  call   <fgets@plt>
  test   %rax,%rax
  je     L206
L144:
  mov    $0x6,%edx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L68
  lea    D111(%rip),%r15
  mov    $0x6,%edx
  mov    %rbp,%rdi
  mov    %r15,%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L81
L201:
  lea    D6(%rip),%rdi
  call   <puts@plt>
  mov    %r15,%rsi
  lea    D573(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rsi
  lea    D74(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L136
L206:
  mov    %r12,%rdi
  lea    D200(%rip),%rbp
  lea    D298(%rip),%r12
  call   <fclose@plt>
  mov    0x18(%rsp),%rdi
  call   <fclose@plt>
  mov    0x8(%rsp),%rdi
  call   <fclose@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  lea    D307(%rip),%rdi
  call   <puts@plt>
  lea    D351(%rip),%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  xor    %edi,%edi
  call   <exit@plt>
  jmp    L132
L251:
  mov    $0xfffffffffffeffff,%rdx
  jmp    L188
L301:
  lea    D68(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x3c(%rsp),%esi
  mov    %rbx,%rdx
  xor    %eax,%eax
  lea    D341(%rip),%rdi
  call   <printf@plt>
  jmp    L136
L299:
  lea    D46(%rip),%r15
  jmp    L201
L10:
  lea    D257(%rip),%r15
  jmp    L201
L62:
  lea    D498(%rip),%r15
  jmp    L201
L333:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D206
type: string
name: disassemble_data
arguments: tag: D286
type: string
name: disassemble_data
arguments: tag: D527
type: string
name: disassemble_data
arguments: tag: D272
type: string
name: disassemble_data
arguments: tag: D588
type: string
name: disassemble_data
arguments: tag: D152
type: string
name: disassemble_data
arguments: tag: D115
type: string
name: disassemble_data
arguments: tag: D141
type: string
name: disassemble_data
arguments: tag: D168
type: string
name: disassemble_data
arguments: tag: D193
type: string
name: disassemble_data
arguments: tag: D333
type: string
name: disassemble_data
arguments: tag: D253
type: string
name: disassemble_data
arguments: tag: D125
type: string
name: disassemble_data
arguments: tag: D513
type: string
name: disassemble_data
arguments: tag: D180
type: string
name: disassemble_data
arguments: tag: D99
type: string
name: disassemble_data
arguments: tag: D300
type: string
name: disassemble_data
arguments: tag: D533
type: string
name: disassemble_data
arguments: tag: D98
type: string
name: disassemble_data
arguments: tag: D170
type: string
name: disassemble_data
arguments: tag: D334
type: string
name: disassemble_data
arguments: tag: D111
type: string
name: disassemble_data
arguments: tag: D437
type: string
name: disassemble_data
arguments: tag: D549
type: string
name: disassemble_data
arguments: tag: D526
type: string
name: disassemble_data
arguments: tag: D256
type: string
name: disassemble_data
arguments: tag: D142
type: string
name: disassemble_data
arguments: tag: D430
type: string
name: disassemble_data
arguments: tag: D188
type: string
name: disassemble_data
arguments: tag: D34
type: string
name: disassemble_data
arguments: tag: D217
type: string
name: disassemble_data
arguments: tag: D261
type: string
name: disassemble_data
arguments: tag: D398
type: string
name: disassemble_data
arguments: tag: D370
type: string
name: disassemble_data
arguments: tag: D52
type: string
name: disassemble_data
arguments: tag: D46
type: string
name: disassemble_data
arguments: tag: D566
type: string
name: disassemble_data
arguments: tag: D257
type: string
name: disassemble_data
arguments: tag: D498
type: string
name: disassemble_data
arguments: tag: D311
type: string
name: disassemble_data
arguments: tag: D282
type: string
name: disassemble_data
arguments: tag: D123
type: string
name: disassemble_data
arguments: tag: D496
type: string
name: disassemble_data
arguments: tag: D119
type: string
name: disassemble_data
arguments: tag: D276
type: string
name: disassemble_data
arguments: tag: D537
type: string
name: disassemble_data
arguments: tag: D6
type: string
name: disassemble_data
arguments: tag: D573
type: string
name: disassemble_data
arguments: tag: D74
type: string
name: disassemble_data
arguments: tag: D200
type: string
name: disassemble_data
arguments: tag: D298
type: string
name: disassemble_data
arguments: tag: D307
type: string
name: disassemble_data
arguments: tag: D351
type: string
name: disassemble_data
arguments: tag: D68
type: string
name: disassemble_data
arguments: tag: D341
type: string

tool: D206: w

tool: D286: verrdefs.h

tool: D527: %%SKIP

tool: D272: verrdefs.fin

tool: D588: vrdifac.msg

tool: D152:  *


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


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


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


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


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


tool: D253:  *		change VRDIERRORS.COM.


tool: D125: C


tool: D513:  */


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


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


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


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


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


tool: D170: C		change VRDIERRORS.COM.


tool: D334: !


tool: D111: %%KEY 

tool: D437: !	Message file for facility VIC2


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


tool: D526: !  the VRDI internal errors.


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


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


tool: D430: !		change VRDIERRORS.COM.


tool: D188: r

tool: D34: vrdierrs.dat

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

tool: D261: **** Check file contents

tool: 

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

tool: D52: ERROR file build aborted

tool: D46: %%NUMBER 

tool: D566:  %d

tool: D257: %%NAME 

tool: D498: %%MESSAGE 

tool: D311: #define %s %d


tool: D282:       INTEGER %s


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


tool: D496: %%HELP

tool: D119: .KEY %s	! %s


tool: D276:   

tool: D537: %%

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

tool: D573: **** Expected %s


tool: D74: **** Found %s


tool: D200: ****************************************

tool: D298: *                                      *

tool: D307: * VRDIERRORS.COM:                      *

tool: D351: * All files successfully created       *

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

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


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");
}
```