user: Demonstrate the C code that generates the assembly output below:

```asm
<tst_doublesize>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  movl   $0x0,-0x8(%rbp)
  jmp    L80
L4:
  mov    -0x8(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    $0x2,%edi
  call   <ed@plt>
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <cup@plt>
  cmpl   $0x0,-0x8(%rbp)
  je     L19
  lea    D213(%rip),%rax
  mov    %rax,%rdi
  call   <sm@plt>
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L37
L19:
  lea    D213(%rip),%rax
  mov    %rax,%rdi
  call   <rm@plt>
  lea    D245(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L37:
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  add    $0x3,%eax
  mov    %eax,%esi
  mov    $0x5,%edi
  call   <cup@plt>
  lea    D128(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  add    $0x3,%eax
  mov    %eax,%esi
  mov    $0x7,%edi
  call   <cup@plt>
  lea    D186(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    $0x0,%eax
  call   <decdwl@plt>
  mov    $0x0,%eax
  call   <decswl@plt>
  mov    -0x4(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%esi
  mov    $0x9,%edi
  call   <cup@plt>
  lea    D329(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <decswl@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    $0x0,%eax
  call   <decdwl@plt>
  mov    -0x4(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%esi
  mov    $0xb,%edi
  call   <cup@plt>
  mov    $0x0,%eax
  call   <decdwl@plt>
  mov    $0x0,%eax
  call   <decswl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%esi
  mov    $0xc,%edi
  call   <cup@plt>
  mov    $0x0,%eax
  call   <decdwl@plt>
  mov    $0x0,%eax
  call   <decswl@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%esi
  mov    $0xe,%edi
  call   <cup@plt>
  mov    $0x0,%eax
  call   <decdwl@plt>
  mov    $0x0,%eax
  call   <decswl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  mov    $0x2,%edi
  call   <el@plt>
  lea    D34(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%esi
  mov    $0xf,%edi
  call   <cup@plt>
  mov    $0x0,%eax
  call   <decdwl@plt>
  mov    $0x0,%eax
  call   <decswl@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  lea    D34(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  add    $0x3,%eax
  mov    %eax,%esi
  mov    $0x11,%edi
  call   <cup@plt>
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x15,%edi
  call   <cup@plt>
  lea    D271(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0xc(%rbp)
  jmp    L66
L74:
  mov    $0x6,%esi
  mov    $0x15,%edi
  call   <cup@plt>
  cmpl   $0x0,-0xc(%rbp)
  je     L106
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <decdwl@plt>
  jmp    L41
L106:
  lea    D107(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <decswl@plt>
L41:
  mov    $0x1,%esi
  mov    $0x17,%edi
  call   <cup@plt>
  mov    $0x0,%eax
  call   <holdit@plt>
  addl   $0x1,-0xc(%rbp)
L66:
  cmpl   $0x1,-0xc(%rbp)
  jle    L74
  addl   $0x1,-0x8(%rbp)
L80:
  cmpl   $0x1,-0x8(%rbp)
  jle    L4
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <cup@plt>
  mov    $0x3,%edi
  call   <tbc@plt>
  movl   $0x1,-0x10(%rbp)
  jmp    L55
L9:
  mov    $0x8,%edi
  call   <cuf@plt>
  mov    $0x0,%eax
  call   <hts@plt>
  addl   $0x8,-0x10(%rbp)
L55:
  cmpl   $0x84,-0x10(%rbp)
  jle    L9
  lea    D213(%rip),%rax
  mov    %rax,%rdi
  call   <rm@plt>
  mov    $0x2,%edi
  call   <ed@plt>
  mov    $0x30,%esi
  mov    $0x0,%edi
  call   <scs@plt>
  mov    $0x1,%esi
  mov    $0x8,%edi
  call   <cup@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  lea    D191(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x9,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  lea    D191(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xa,%edi
  call   <cup@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  lea    D324(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xb,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  lea    D324(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xc,%edi
  call   <cup@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  lea    D324(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xd,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  lea    D324(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xe,%edi
  call   <cup@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  lea    D321(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xf,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  lea    D321(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x10,%edi
  call   <cup@plt>
  mov    $0x0,%edi
  call   <decdhl@plt>
  lea    D238(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x11,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  lea    D238(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x42,%esi
  mov    $0x0,%edi
  call   <scs@plt>
  lea    D252(%rip),%rax
  mov    %rax,%rdi
  call   <sgr@plt>
  mov    $0x3,%esi
  mov    $0xc,%edi
  call   <cup@plt>
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x3,%esi
  mov    $0xd,%edi
  call   <cup@plt>
  mov    $0x9,%edi
  call   <putchar@plt>
  mov    $0x6,%edi
  call   <cub@plt>
  lea    D77(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <sgr@plt>
  mov    $0x1,%esi
  mov    $0x16,%edi
  call   <cup@plt>
  lea    D243(%rip),%rax
  mov    %rax,%rdi
  call   <println@plt>
  lea    D179(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <holdit@plt>
  mov    $0x18,%esi
  mov    $0x8,%edi
  call   <decstbm@plt>
  mov    $0x1,%esi
  mov    $0x8,%edi
  call   <cup@plt>
  movl   $0x1,-0xc(%rbp)
  jmp    L60
L108:
  mov    $0x0,%eax
  call   <ri@plt>
  addl   $0x1,-0xc(%rbp)
L60:
  cmpl   $0xc,-0xc(%rbp)
  jle    L108
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <decstbm@plt>
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <cup@plt>
  lea    D49(%rip),%rax
  mov    %rax,%rsi
  lea    D288(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <holdit@plt>
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D213
type: string
name: extract_symbolic_data
arguments: label: D3
type: string
name: extract_symbolic_data
arguments: label: D245
type: string
name: extract_symbolic_data
arguments: label: D128
type: string
name: extract_symbolic_data
arguments: label: D186
type: string
name: extract_symbolic_data
arguments: label: D329
type: string
name: extract_symbolic_data
arguments: label: D106
type: string
name: extract_symbolic_data
arguments: label: D34
type: string
name: extract_symbolic_data
arguments: label: D46
type: string
name: extract_symbolic_data
arguments: label: D271
type: string
name: extract_symbolic_data
arguments: label: D26
type: string
name: extract_symbolic_data
arguments: label: D107
type: string
name: extract_symbolic_data
arguments: label: D191
type: string
name: extract_symbolic_data
arguments: label: D324
type: string
name: extract_symbolic_data
arguments: label: D321
type: string
name: extract_symbolic_data
arguments: label: D238
type: string
name: extract_symbolic_data
arguments: label: D252
type: string
name: extract_symbolic_data
arguments: label: D45
type: string
name: extract_symbolic_data
arguments: label: D77
type: string
name: extract_symbolic_data
arguments: label: D116
type: string
name: extract_symbolic_data
arguments: label: D243
type: string
name: extract_symbolic_data
arguments: label: D179
type: string
name: extract_symbolic_data
arguments: label: D49
type: string
name: extract_symbolic_data
arguments: label: D288
type: string

tool: D213: ?3

tool: D3: 132 column mode

tool: D245:  80 column mode

tool: D128: v------- left margin

tool: D186: This is a normal-sized line

tool: D329: This is a Double-width line

tool: D106: This is a Double-width-and-height line

tool: D34: This is another such line

tool: D46: ^------- left margin

tool: D271: This is not a double-width line

tool: D26: **is**

tool: D107: is not

tool: D191: lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk

tool: D324: x%c%c%c%c%cx

tool: D321: x                                      x

tool: D238: mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

tool: D252: 1;5

tool: D45: * The mad programmer strikes again * 

tool: D77: * The mad programmer strikes again *

tool: D116: 0

tool: D243: Another test pattern...  a frame with blinking bold text,

tool: D179: all in double-height double-width size. 

tool: D49: Exactly half of the box should remain. 

tool: D288: %s

assistant: ```c
tst_doublesize() {
  int col, i, w, w1;
  for (w = 0; w <= 1; w++) {
    w1 = 13 * w;
    ed(2);
    cup(1, 1);
    if (w) {
      sm("?3");
      printf("132 column mode");
    } else {
      rm("?3");
      printf(" 80 column mode");
    }
    cup(5, 3 + 2 * w1);
    printf("v------- left margin");
    cup(7, 3 + 2 * w1);
    printf("This is a normal-sized line");
    decdhl(0);
    decdhl(1);
    decdwl();
    decswl();
    cup(9, 2 + w1);
    printf("This is a Double-width line");
    decswl();
    decdhl(0);
    decdhl(1);
    decdwl();
    cup(11, 2 + w1);
    decdwl();
    decswl();
    decdhl(1);
    decdhl(0);
    printf("This is a Double-width-and-height line");
    cup(12, 2 + w1);
    decdwl();
    decswl();
    decdhl(0);
    decdhl(1);
    printf("This is a Double-width-and-height line");
    cup(14, 2 + w1);
    decdwl();
    decswl();
    decdhl(1);
    decdhl(0);
    el(2);
    printf("This is another such line");
    cup(15, 2 + w1);
    decdwl();
    decswl();
    decdhl(0);
    decdhl(1);
    printf("This is another such line");
    cup(17, 3 + 2 * w1);
    printf("^------- left margin");
    cup(21, 1);
    printf("This is not a double-width line");
    for (i = 0; i <= 1; i++) {
      cup(21, 6);
      if (i) {
        printf("**is**");
        decdwl();
      } else {
        printf("is not");
        decswl();
      }
      cup(23, 1);
      holdit();
    }
  }
  cup(1, 1);
  tbc(3);
  for (col = 1; col <= 132; col += 8) {
    cuf(8);
    hts();
  }
  rm("?3");
  ed(2);
  scs(0, '0');
  cup(8, 1);
  decdhl(0);
  printf("lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk");
  cup(9, 1);
  decdhl(1);
  printf("lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk");
  cup(10, 1);
  decdhl(0);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(11, 1);
  decdhl(1);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(12, 1);
  decdhl(0);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(13, 1);
  decdhl(1);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(14, 1);
  decdhl(0);
  printf("x                                      x");
  cup(15, 1);
  decdhl(1);
  printf("x                                      x");
  cup(16, 1);
  decdhl(0);
  printf("mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj");
  cup(17, 1);
  decdhl(1);
  printf("mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj");
  scs(0, 'B');
  sgr("1;5");
  cup(12, 3);
  printf("* The mad programmer strikes again * ");
  cup(13, 3);
  printf("%c", 9);
  cub(6);
  printf("* The mad programmer strikes again *");
  sgr("0");
  cup(22, 1);
  println("Another test pattern...  a frame with blinking bold text,");
  printf("all in double-height double-width size. ");
  holdit();
  decstbm(8, 24);
  cup(8, 1);
  for (i = 1; i <= 12; i++)
    ri();
  decstbm(0, 0);
  cup(1, 1);
  printf("%s", "Exactly half of the box should remain. ");
  holdit();
}
```