LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_nvs_time()
void parse_nvs_time()
{
double msecs;
u08 scale;
int week;
int i;
double gen_dev;
double time_dev;

   // 0x72 packet
   log_packet_id("nvs_time");

   nvs_msecs = msecs = tsip_fp80(); //  - 67108864.0;  // qqqqqqqqqqqqqq - 67....
   week = (int) (s16) tsip_word();
   scale = tsip_byte();
   gen_dev = tsip_double();   // ref gen deviation
   time_dev = tsip_double();  // sawtooth
   i = (int) (s16) tsip_word();
   if(!user_set_utc_ofs) {
      utc_offset = i;
      check_utc_ofs(12);
   }

   tsip_byte();
   tsip_word();

   dac_voltage = (float) time_dev;
   have_sawtooth = 6666;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
leaq 0xa4aae(%rip), %rdi     # 0x18932d
callq 0x7add0
callq 0x7aa80
movsd %xmm0, -0x8(%rbp)
movsd %xmm0, 0x2e745a(%rip)   # 0x3cbcf0
callq 0x7a560
cwtl
movl %eax, -0x10(%rbp)
callq 0x7a510
movb %al, -0x9(%rbp)
callq 0x7a9d0
movsd %xmm0, -0x20(%rbp)
callq 0x7a9d0
movsd %xmm0, -0x28(%rbp)
callq 0x7a560
cwtl
movl %eax, -0x14(%rbp)
leaq 0x288049(%rip), %rax    # 0x36c914
cmpl $0x0, (%rax)
jne 0xe48e6
movl -0x14(%rbp), %ecx
leaq 0x28802e(%rip), %rax    # 0x36c908
movl %ecx, (%rax)
movl $0xc, %edi
callq 0x7a270
callq 0x7a510
callq 0x7a560
movsd -0x28(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x2872dc(%rip), %rax    # 0x36bbe0
movsd %xmm0, (%rax)
leaq 0x287c95(%rip), %rax    # 0x36c5a4
movl $0x1a0a, (%rax)         # imm = 0x1A0A
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_nvs_survey()
void parse_nvs_survey()
{
u08 mode;
double delay;
int avg_time;

   // 0x73 packet
   log_packet_id("nvs_survey");

   mode = tsip_byte();
   delay = tsip_double();
   avg_time = (int) tsip_word();

   if(mode == 0) {
      if(nvs_traim & 0x04) rcvr_mode = RCVR_MODE_3D;
      else                 rcvr_mode = RCVR_MODE_2D_3D;
   }
   else if(mode == 1) rcvr_mode = RCVR_MODE_HOLD;
   else if(mode == 2) rcvr_mode = RCVR_MODE_SURVEY;
   else               rcvr_mode = RCVR_MODE_UNKNOWN;

   if(mode == 2) {
      minor_alarms |= MINOR_SURVEY;
      do_survey = avg_time;
      survey_why = 33;
   }
   else {
      minor_alarms &= (~MINOR_SURVEY);
      if(precision_survey == 0) {
         do_survey = 0;
         survey_why = (-334);
      }
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
leaq 0xa4a07(%rip), %rdi     # 0x189336
callq 0x7add0
callq 0x7a510
movb %al, -0x1(%rbp)
callq 0x7a9d0
movsd %xmm0, -0x10(%rbp)
callq 0x7a560
movzwl %ax, %eax
movl %eax, -0x14(%rbp)
movzbl -0x1(%rbp), %eax
cmpl $0x0, %eax
jne 0xe4983
leaq 0x19594b(%rip), %rax    # 0x27a2ac
movl (%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0xe4977
leaq 0x28793e(%rip), %rax    # 0x36c2b0
movb $0x4, (%rax)
jmp 0xe4981
leaq 0x287932(%rip), %rax    # 0x36c2b0
movb $0x0, (%rax)
jmp 0xe49bb
movzbl -0x1(%rbp), %eax
cmpl $0x1, %eax
jne 0xe4998
leaq 0x28791d(%rip), %rax    # 0x36c2b0
movb $0x7, (%rax)
jmp 0xe49b9
movzbl -0x1(%rbp), %eax
cmpl $0x2, %eax
jne 0xe49ad
leaq 0x287908(%rip), %rax    # 0x36c2b0
movb $0xb, (%rax)
jmp 0xe49b7
leaq 0x2878fc(%rip), %rax    # 0x36c2b0
movb $0x63, (%rax)
jmp 0xe49b9
jmp 0xe49bb
movzbl -0x1(%rbp), %eax
cmpl $0x2, %eax
jne 0xe49f6
leaq 0x2879ed(%rip), %rax    # 0x36c3b8
movl (%rax), %ecx
orl $0x20, %ecx
leaq 0x2879e1(%rip), %rax    # 0x36c3b8
movl %ecx, (%rax)
movslq -0x14(%rbp), %rcx
leaq 0x288674(%rip), %rax    # 0x36d058
movq %rcx, (%rax)
leaq 0x28867a(%rip), %rax    # 0x36d068
movl $0x21, (%rax)
jmp 0xe4a37
leaq 0x2879bb(%rip), %rax    # 0x36c3b8
movl (%rax), %ecx
andl $-0x21, %ecx
leaq 0x2879af(%rip), %rax    # 0x36c3b8
movl %ecx, (%rax)
leaq 0x288666(%rip), %rax    # 0x36d078
movzbl (%rax), %eax
cmpl $0x0, %eax
jne 0xe4a35
leaq 0x288637(%rip), %rax    # 0x36d058
movq $0x0, (%rax)
leaq 0x288639(%rip), %rax    # 0x36d068
movl $0xfffffeb2, (%rax)     # imm = 0xFFFFFEB2
jmp 0xe4a37
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: fix_nvs_week(int)
int fix_nvs_week(int week)
{
   // adjust week for rollover

   week += 1024;
   if(year > 2019) week += 1024;
   else if(year == 2019) {
      if(month > 4) week += 1024;
      else if((month == 4) && (day >= 6)) week += 1024;
   }

   return week;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movl %edi, -0x4(%rbp)
movl -0x4(%rbp), %eax
addl $0x400, %eax            # imm = 0x400
movl %eax, -0x4(%rbp)
leaq 0x287ad3(%rip), %rax    # 0x36c6bc
cmpl $0x7e3, (%rax)          # imm = 0x7E3
jle 0xe4bfe
movl -0x4(%rbp), %eax
addl $0x400, %eax            # imm = 0x400
movl %eax, -0x4(%rbp)
jmp 0xe4c4f
leaq 0x287ab7(%rip), %rax    # 0x36c6bc
cmpl $0x7e3, (%rax)          # imm = 0x7E3
jne 0xe4c4d
leaq 0x287aa4(%rip), %rax    # 0x36c6b8
cmpl $0x4, (%rax)
jle 0xe4c26
movl -0x4(%rbp), %eax
addl $0x400, %eax            # imm = 0x400
movl %eax, -0x4(%rbp)
jmp 0xe4c4b
leaq 0x287a8b(%rip), %rax    # 0x36c6b8
cmpl $0x4, (%rax)
jne 0xe4c49
leaq 0x287a7b(%rip), %rax    # 0x36c6b4
cmpl $0x6, (%rax)
jl 0xe4c49
movl -0x4(%rbp), %eax
addl $0x400, %eax            # imm = 0x400
movl %eax, -0x4(%rbp)
jmp 0xe4c4b
jmp 0xe4c4d
jmp 0xe4c4f
movl -0x4(%rbp), %eax
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_antd()
void parse_zy_antd()
{
   // cable delay
   log_packet_id("cable delay");

   if(get_msg_field()) {
      cable_delay = atof(msg_field) / 1.0E9;
      have_cable_delay = 62;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa2439(%rip), %rdi     # 0x187f64
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe5b6a
leaq 0x2b50df(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd 0x894da(%rip), %xmm1    # 0x16f028
divsd %xmm1, %xmm0
leaq 0x28744f(%rip), %rax    # 0x36cfa8
movsd %xmm0, (%rax)
leaq 0x286930(%rip), %rax    # 0x36c494
movl $0x3e, (%rax)
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_sigq()
void parse_zy_sigq()
{
int prn;
double snr;
int mode;

   // signal quality
   log_packet_id("signal quality");

   while(1) {
      if(get_msg_field()) prn = atoi(msg_field);
      else break;

      if(get_msg_field()) snr = (atof(msg_field) * 2.500) + 25.0;
      else break;

      if(get_msg_field()) mode = atoi(msg_field);
      else break;

      if((prn >= 1) && (prn <= 32)) { 
         sat[prn].sig_level = (float) snr;
         record_sig_levels(prn);
      }
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
leaq 0xa3461(%rip), %rdi     # 0x1893b0
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe5f6f
leaq 0x2b4cbb(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, -0x4(%rbp)
jmp 0xe5f74
jmp 0xe6004
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe5fa9
leaq 0x2b4c9b(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd 0x891c6(%rip), %xmm1    # 0x16f158
mulsd %xmm1, %xmm0
movsd 0x9d0fa(%rip), %xmm1    # 0x183098
addsd %xmm1, %xmm0
movsd %xmm0, -0x10(%rbp)
jmp 0xe5fab
jmp 0xe6004
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe5fc6
leaq 0x2b4c64(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, -0x14(%rbp)
jmp 0xe5fc8
jmp 0xe6004
cmpl $0x1, -0x4(%rbp)
jl 0xe5fff
cmpl $0x20, -0x4(%rbp)
jg 0xe5fff
movsd -0x10(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
movslq -0x4(%rbp), %rcx
leaq 0x1b81a8(%rip), %rax    # 0x29e190
imulq $0x348, %rcx, %rcx      # imm = 0x348
addq %rcx, %rax
movss %xmm0, 0x20(%rax)
movl -0x4(%rbp), %edi
callq 0x80340
jmp 0xe5f54
addq $0x20, %rsp
popq %rbp
retq
nopw (%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_dacv()
void parse_zy_dacv()
{
double val;

   // dac voltage
   log_packet_id("dac voltage");

   if(get_msg_field()) {
      val = atof(msg_field);
      dac_voltage = (DATA_SIZE) (((val - 32768.0) / 32768.0) * 100.0);
      have_dac = 62;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa33a0(%rip), %rdi     # 0x1893bf
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6080
leaq 0x2b4beb(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
movsd 0x8916c(%rip), %xmm1    # 0x16f1b8
subsd %xmm1, %xmm0
movsd 0x89160(%rip), %xmm1    # 0x16f1b8
divsd %xmm1, %xmm0
movsd 0x88fec(%rip), %xmm1    # 0x16f050
mulsd %xmm1, %xmm0
leaq 0x285b71(%rip), %rax    # 0x36bbe0
movsd %xmm0, (%rax)
leaq 0x286462(%rip), %rax    # 0x36c4dc
movl $0x3e, (%rax)
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_drft()
void parse_zy_drft()
{
   // osc drift
   log_packet_id("osc drift");

   if(get_msg_field()) {
      zyfer_drift = (DATA_SIZE) (atof(msg_field)*1.0E9);
      have_zyfer_drift = 1;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa3330(%rip), %rdi     # 0x1893cb
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe60da
leaq 0x2b4b6f(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd 0x88f6a(%rip), %xmm1    # 0x16f028
mulsd %xmm1, %xmm0
leaq 0x2b675f(%rip), %rax    # 0x39c828
movsd %xmm0, (%rax)
leaq 0x2b675c(%rip), %rax    # 0x39c830
movl $0x1, (%rax)
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_efer()
void parse_zy_efer()
{
double efer;

   // osc freq error
   log_packet_id("freq error");

   if(get_msg_field()) {
      efer = atof(msg_field);
      osc_offset = (DATA_SIZE) ((efer * 1.0E9)*1000.0);
      have_osc_offset = 66;
      have_rcvr_osc = 66;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa3307(%rip), %rdi     # 0x1893f6
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe614d
leaq 0x2b4b1b(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd %xmm0, -0x8(%rbp)
movsd 0x88f11(%rip), %xmm0    # 0x16f028
mulsd -0x8(%rbp), %xmm0
movsd 0x88f0c(%rip), %xmm1    # 0x16f030
mulsd %xmm1, %xmm0
leaq 0x285871(%rip), %rax    # 0x36b9a0
movsd %xmm0, (%rax)
leaq 0x2862da(%rip), %rax    # 0x36c414
movl $0x42, (%rax)
leaq 0x2862e1(%rip), %rax    # 0x36c428
movl $0x42, (%rax)
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_essd()
void parse_zy_essd()
{
   // estimator of tdev
   log_packet_id("tdev estimate");

   if(get_msg_field()) {
      zyfer_tdev = (DATA_SIZE) (atof(msg_field)*1.0E9);
      have_zyfer_tdev = 1;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa326a(%rip), %rdi     # 0x1893d5
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe61aa
leaq 0x2b4a9f(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd 0x88e9a(%rip), %xmm1    # 0x16f028
mulsd %xmm1, %xmm0
leaq 0x2b669f(%rip), %rax    # 0x39c838
movsd %xmm0, (%rax)
leaq 0x2b669c(%rip), %rax    # 0x39c840
movl $0x1, (%rax)
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_essn()
void parse_zy_essn()
{
   // undocumented - incrementing counter
   log_packet_id("essn");

   if(get_msg_field()) {
      zyfer_essn = (DATA_SIZE) atof(msg_field);
      have_zyfer_essn = 1;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa3228(%rip), %rdi     # 0x1893e3
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe61ee
leaq 0x2b4a4f(%rip), %rdi    # 0x39ac20
callq 0x9480
leaq 0x2b666b(%rip), %rax    # 0x39c848
movsd %xmm0, (%rax)
leaq 0x2b6668(%rip), %rax    # 0x39c850
movl $0x1, (%rax)
popq %rbp
retq
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_gdop()
void parse_zy_gdop()
{
   // undocumented GDOP command
   log_packet_id("gdop");

   if(get_msg_field()) {
      gdop = (DATA_SIZE) atof(msg_field);
      have_dops |= GDOP;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0x8bf2b(%rip), %rdi     # 0x1721b6
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe62c6
leaq 0x2b497f(%rip), %rdi    # 0x39ac20
callq 0x9480
leaq 0x19c433(%rip), %rax    # 0x2826e0
movsd %xmm0, (%rax)
leaq 0x19c40c(%rip), %rax    # 0x2826c4
movl (%rax), %ecx
orl $0x8, %ecx
leaq 0x19c400(%rip), %rax    # 0x2826c4
movl %ecx, (%rax)
popq %rbp
retq
nopl (%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_hefe()
void parse_zy_hefe()
{

   // undocumented (holdover estimated freq error?)
   log_packet_id("holdover freq error");

   if(get_msg_field()) {
      zyfer_hefe = atof(msg_field)*1.0E9;
      have_zyfer_hefe = 1;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa3112(%rip), %rdi     # 0x1893ed
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe631a
leaq 0x2b492f(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd 0x88d2a(%rip), %xmm1    # 0x16f028
mulsd %xmm1, %xmm0
leaq 0x2b654f(%rip), %rax    # 0x39c858
movsd %xmm0, (%rax)
leaq 0x2b654c(%rip), %rax    # 0x39c860
movl $0x1, (%rax)
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_hint()
void parse_zy_hint()
{
   // holdover integrity
   log_packet_id("holdover integrity");

   zy_hflag = 2;
   zy_pll_bad = zy_gps_bad = zy_fix_bad = zy_bias_bad = (2);

   if(get_msg_field()) zy_hflag = atoi(msg_field);

   if(get_msg_field()) zy_pll_bad = atoi(msg_field);  // holdover reason
   if(get_msg_field()) zy_gps_bad = atoi(msg_field);
   if(get_msg_field()) zy_fix_bad = atoi(msg_field);
   if(get_msg_field()) zy_bias_bad = atoi(msg_field);

   have_zyfer_hint = 1;
   have_gps_status = 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa3079(%rip), %rdi     # 0x189424
callq 0x7add0
leaq 0x2b64d1(%rip), %rax    # 0x39c888
movl $0x2, (%rax)
leaq 0x2b64d4(%rip), %rax    # 0x39c898
movl $0x2, (%rax)
leaq 0x2b64c3(%rip), %rax    # 0x39c894
movl $0x2, (%rax)
leaq 0x2b64b2(%rip), %rax    # 0x39c890
movl $0x2, (%rax)
leaq 0x2b64a1(%rip), %rax    # 0x39c88c
movl $0x2, (%rax)
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6412
leaq 0x2b481e(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, %ecx
leaq 0x2b6478(%rip), %rax    # 0x39c888
movl %ecx, (%rax)
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6433
leaq 0x2b47fd(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, %ecx
leaq 0x2b645b(%rip), %rax    # 0x39c88c
movl %ecx, (%rax)
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6454
leaq 0x2b47dc(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, %ecx
leaq 0x2b643e(%rip), %rax    # 0x39c890
movl %ecx, (%rax)
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6475
leaq 0x2b47bb(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, %ecx
leaq 0x2b6421(%rip), %rax    # 0x39c894
movl %ecx, (%rax)
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6496
leaq 0x2b479a(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, %ecx
leaq 0x2b6404(%rip), %rax    # 0x39c898
movl %ecx, (%rax)
leaq 0x2b63e7(%rip), %rax    # 0x39c884
movl $0x1, (%rax)
leaq 0x285fe6(%rip), %rax    # 0x36c490
movl $0x0, (%rax)
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_leap()
void parse_zy_leap()
{
int p, f;

   // utc and leapsecond info
   log_packet_id("leapsecond info");

   p = f = 0;
   if(get_msg_field()) p = atoi(msg_field);
   if(get_msg_field()) f = atoi(msg_field);

   if(p) {
      if(!user_set_utc_ofs) utc_offset = p;
      check_utc_ofs(33);
   }

   minor_alarms &= (~MINOR_LEAP_PEND);
   if(p != f) {  // leap pending
      minor_alarms |= MINOR_LEAP_PEND;
   }
   have_leap_info = 33;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa05aa(%rip), %rdi     # 0x186a79
callq 0x7add0
movl $0x0, -0x8(%rbp)
movl $0x0, -0x4(%rbp)
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe64fb
leaq 0x2b472d(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, -0x4(%rbp)
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6514
leaq 0x2b4714(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, -0x8(%rbp)
cmpl $0x0, -0x4(%rbp)
je 0xe653c
leaq 0x2863f3(%rip), %rax    # 0x36c914
cmpl $0x0, (%rax)
jne 0xe6532
movl -0x4(%rbp), %ecx
leaq 0x2863d8(%rip), %rax    # 0x36c908
movl %ecx, (%rax)
movl $0x21, %edi
callq 0x7a270
leaq 0x285e75(%rip), %rax    # 0x36c3b8
movl (%rax), %ecx
andl $0xffffff7f, %ecx       # imm = 0xFFFFFF7F
leaq 0x285e66(%rip), %rax    # 0x36c3b8
movl %ecx, (%rax)
movl -0x4(%rbp), %eax
cmpl -0x8(%rbp), %eax
je 0xe6574
leaq 0x285e55(%rip), %rax    # 0x36c3b8
movl (%rax), %ecx
orl $0x80, %ecx
leaq 0x285e46(%rip), %rax    # 0x36c3b8
movl %ecx, (%rax)
leaq 0x285efd(%rip), %rax    # 0x36c478
movl $0x21, (%rax)
addq $0x10, %rsp
popq %rbp
retq
nopw (%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_mang()
void parse_zy_mang()
{
double el_val;

   // elevation mask
   log_packet_id("elevation mask");

   if(get_msg_field()) {
      el_val = atof(msg_field);
      if((el_val >= 0.0) && (el_val <= 90.0)) {
         el_mask = (float) el_val;
         have_el_mask = 1;
      }
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0x926b5(%rip), %rdi     # 0x178c54
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe65ff
leaq 0x2b466b(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0xe65fd
movsd 0x88ab3(%rip), %xmm0    # 0x16f088
ucomisd -0x8(%rbp), %xmm0
jb 0xe65fd
movsd -0x8(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
leaq 0x285ca8(%rip), %rax    # 0x36c294
movss %xmm0, (%rax)
leaq 0x285fe5(%rip), %rax    # 0x36c5dc
movl $0x1, (%rax)
jmp 0xe65ff
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_ntlc()
void parse_zy_ntlc()
{
u32 val;
   // not time locked (holdover) count
   log_packet_id("not time locked");

   if(get_msg_field()) {
      val = (u32) atoi(msg_field);
      if(val) holdover = val;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa2e18(%rip), %rdi     # 0x189437
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6651
leaq 0x2b45eb(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, -0x4(%rbp)
cmpl $0x0, -0x4(%rbp)
je 0xe664f
movl -0x4(%rbp), %ecx
leaq 0x285feb(%rip), %rax    # 0x36c638
movl %ecx, (%rax)
jmp 0xe6651
addq $0x10, %rsp
popq %rbp
retq
nopw (%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_ofst()
void parse_zy_ofst()
{
   // PPS output delay
   log_packet_id("pps delay");

   if(get_msg_field()) {  // PPS output delay
      pps1_delay = atof(msg_field) / 1.0E9;
      have_pps_delay |= 0x01;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa18e3(%rip), %rdi     # 0x187f4e
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe66b2
leaq 0x2b459f(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd 0x8899a(%rip), %xmm1    # 0x16f028
divsd %xmm1, %xmm0
leaq 0x28691f(%rip), %rax    # 0x36cfb8
movsd %xmm0, (%rax)
leaq 0x285df4(%rip), %rax    # 0x36c498
movl (%rax), %ecx
orl $0x1, %ecx
leaq 0x285de8(%rip), %rax    # 0x36c498
movl %ecx, (%rax)
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_vers()
void parse_zy_vers()
{
   // version info
   log_packet_id("version info");

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_app_vers, msg_field);
   }

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_app_date, msg_field);
   }

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_gps, msg_field);
   }

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_app_prog, msg_field);
   }

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_option, msg_field);
   }

   have_info |= VERSION_INFO;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa2b5f(%rip), %rdi     # 0x18945a
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6928
leaq 0x2b430f(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5e24(%rip), %rdi    # 0x39c740
leaq 0x2b42fd(%rip), %rsi    # 0x39ac20
callq 0x9350
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6950
leaq 0x2b42e7(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5e5c(%rip), %rdi    # 0x39c7a0
leaq 0x2b42d5(%rip), %rsi    # 0x39ac20
callq 0x9350
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6978
leaq 0x2b42bf(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5da4(%rip), %rdi    # 0x39c710
leaq 0x2b42ad(%rip), %rsi    # 0x39ac20
callq 0x9350
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe69a0
leaq 0x2b4297(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5ddc(%rip), %rdi    # 0x39c770
leaq 0x2b4285(%rip), %rsi    # 0x39ac20
callq 0x9350
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe69c8
leaq 0x2b426f(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5e14(%rip), %rdi    # 0x39c7d0
leaq 0x2b425d(%rip), %rsi    # 0x39ac20
callq 0x9350
leaq 0x286185(%rip), %rax    # 0x36cb54
movl (%rax), %ecx
orl $0x4, %ecx
leaq 0x286179(%rip), %rax    # 0x36cb54
movl %ecx, (%rax)
popq %rbp
retq
nop
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_mani()
void parse_zy_mani()
{
   // mfg info
   log_packet_id("mfg info");

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_mfgid, msg_field);
   }

   have_info |= MFG_INFO;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa2a7c(%rip), %rdi     # 0x189467
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6a18
leaq 0x2b421f(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5ca4(%rip), %rdi    # 0x39c6b0
leaq 0x2b420d(%rip), %rsi    # 0x39ac20
callq 0x9350
leaq 0x286135(%rip), %rax    # 0x36cb54
movl (%rax), %ecx
orl $0x8, %ecx
leaq 0x286129(%rip), %rax    # 0x36cb54
movl %ecx, (%rax)
popq %rbp
retq
nop
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_prid()
void parse_zy_prid()
{
   // product id
   log_packet_id("product id");

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_id, msg_field);
   }

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_prod, msg_field);
   }

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_sn, msg_field);
   }

   have_info |= MANUF_PARAMS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa2a35(%rip), %rdi     # 0x189470
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6a68
leaq 0x2b41cf(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5b34(%rip), %rdi    # 0x39c590
leaq 0x2b41bd(%rip), %rsi    # 0x39ac20
callq 0x9350
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6a90
leaq 0x2b41a7(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5b3c(%rip), %rdi    # 0x39c5c0
leaq 0x2b4195(%rip), %rsi    # 0x39ac20
callq 0x9350
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6ab8
leaq 0x2b417f(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5b44(%rip), %rdi    # 0x39c5f0
leaq 0x2b416d(%rip), %rsi    # 0x39ac20
callq 0x9350
leaq 0x286095(%rip), %rax    # 0x36cb54
movl (%rax), %ecx
orl $0x1, %ecx
leaq 0x286089(%rip), %rax    # 0x36cb54
movl %ecx, (%rax)
popq %rbp
retq
nop
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_unid()
void parse_zy_unid()
{
   // unit id
   log_packet_id("unit id");

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_pn, msg_field);
   }

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_rev, msg_field);
   }

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_date, msg_field);
   }

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_sn, msg_field);
   }

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_fw, msg_field);
   }

   have_info |= PRODN_PARAMS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa29a0(%rip), %rdi     # 0x18947b
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6b08
leaq 0x2b412f(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5b24(%rip), %rdi    # 0x39c620
leaq 0x2b411d(%rip), %rsi    # 0x39ac20
callq 0x9350
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6b30
leaq 0x2b4107(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5b5c(%rip), %rdi    # 0x39c680
leaq 0x2b40f5(%rip), %rsi    # 0x39ac20
callq 0x9350
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6b58
leaq 0x2b40df(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5b94(%rip), %rdi    # 0x39c6e0
leaq 0x2b40cd(%rip), %rsi    # 0x39ac20
callq 0x9350
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6b80
leaq 0x2b40b7(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5a7c(%rip), %rdi    # 0x39c5f0
leaq 0x2b40a5(%rip), %rsi    # 0x39ac20
callq 0x9350
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6ba8
leaq 0x2b408f(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b5ab4(%rip), %rdi    # 0x39c650
leaq 0x2b407d(%rip), %rsi    # 0x39ac20
callq 0x9350
leaq 0x285fa5(%rip), %rax    # 0x36cb54
movl (%rax), %ecx
orl $0x2, %ecx
leaq 0x285f99(%rip), %rax    # 0x36cb54
movl %ecx, (%rax)
popq %rbp
retq
nop
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_pulp()
void parse_zy_pulp()
{
   // pps polarity
   log_packet_id("pps polarity");

   if(get_msg_field()) {
      if(msg_field[0] == '+') pps_polarity = 0;
      else if(msg_field[0] == '-') pps_polarity = 1;
      else return;
      have_pps_polarity = 1;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa28b8(%rip), %rdi     # 0x189483
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6c27
leaq 0x2b403f(%rip), %rax    # 0x39ac20
movsbl (%rax), %eax
cmpl $0x2b, %eax
jne 0xe6bf8
leaq 0x286308(%rip), %rax    # 0x36cef8
movl $0x0, (%rax)
jmp 0xe6c1a
leaq 0x2b4021(%rip), %rax    # 0x39ac20
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0xe6c16
leaq 0x2862ea(%rip), %rax    # 0x36cef8
movl $0x1, (%rax)
jmp 0xe6c18
jmp 0xe6c27
jmp 0xe6c1a
leaq 0x28589f(%rip), %rax    # 0x36c4c0
movl $0x1, (%rax)
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_pulr()
void parse_zy_pulr()
{
int rate;

   // PPS pulse rate
   log_packet_id("pps rate");

   if(get_msg_field()) {
      rate = atoi(msg_field);
      if(rate == 1) pps_rate = RATE_1PPS;
      else if(rate == 2) pps_rate = RATE_PP2S;
      else return;
      have_pps_rate = 33;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa12c4(%rip), %rdi     # 0x187f03
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6c92
leaq 0x2b3fcb(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, -0x4(%rbp)
cmpl $0x1, -0x4(%rbp)
jne 0xe6c6f
leaq 0x286299(%rip), %rax    # 0x36cf03
movb $0x2, (%rax)
jmp 0xe6c85
cmpl $0x2, -0x4(%rbp)
jne 0xe6c81
leaq 0x286287(%rip), %rax    # 0x36cf03
movb $-0x7e, (%rax)
jmp 0xe6c83
jmp 0xe6c92
jmp 0xe6c85
leaq 0x285824(%rip), %rax    # 0x36c4b0
movl $0x21, (%rax)
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_pulw()
void parse_zy_pulw()
{
double width;

   // PPS pulse width
   log_packet_id("pps width");

   if(get_msg_field()) {
      width = atof(msg_field);
      zyfer_pps_width = width;
      if(width == (-2.0)) width = 20.0E-6;
      else if(width == (-1.0)) width = 10.0E-6;
      else width /= 1000.0;
      have_pps_duty = 0x01;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa0f92(%rip), %rdi     # 0x187c41
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6d50
leaq 0x2b3f57(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
leaq 0x286259(%rip), %rax    # 0x36cf38
movsd %xmm0, (%rax)
movsd -0x8(%rbp), %xmm0
movsd 0x8aab0(%rip), %xmm1    # 0x1717a0
ucomisd %xmm1, %xmm0
jne 0xe6d07
jp 0xe6d07
movsd 0x9c3c0(%rip), %xmm0    # 0x1830c0
movsd %xmm0, -0x8(%rbp)
jmp 0xe6d43
movsd -0x8(%rbp), %xmm0
movsd 0x88404(%rip), %xmm1    # 0x16f118
ucomisd %xmm1, %xmm0
jne 0xe6d2b
jp 0xe6d2b
movsd 0x8a8fc(%rip), %xmm0    # 0x171620
movsd %xmm0, -0x8(%rbp)
jmp 0xe6d41
movsd -0x8(%rbp), %xmm0
movsd 0x882f8(%rip), %xmm1    # 0x16f030
divsd %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0xe6d43
leaq 0x2861fa(%rip), %rax    # 0x36cf44
movl $0x1, (%rax)
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_rsah()
void parse_zy_rsah()
{
int prn;
int c;

   // sat health
   log_packet_id("sat health");

   if(get_msg_field()) {
      reset_sat_health();
      for(prn=1; prn<=32; prn++) {
         c = msg_field[prn-1];
         if(c == 0) break;
         if(c == '0') sat[prn].health_flag = 1;      // unhealthy
         else if(c == '1') sat[prn].health_flag = 2; // healthy
         else continue;
      }
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa2721(%rip), %rdi     # 0x189490
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6e06
callq 0x81c70
movl $0x1, -0x4(%rbp)
cmpl $0x20, -0x4(%rbp)
jg 0xe6e04
movl -0x4(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rcx
leaq 0x2b3e7c(%rip), %rax    # 0x39ac20
movsbl (%rax,%rcx), %eax
movl %eax, -0x8(%rbp)
cmpl $0x0, -0x8(%rbp)
jne 0xe6db3
jmp 0xe6e04
cmpl $0x30, -0x8(%rbp)
jne 0xe6dd3
movslq -0x4(%rbp), %rcx
leaq 0x1b73cc(%rip), %rax    # 0x29e190
imulq $0x348, %rcx, %rcx      # imm = 0x348
addq %rcx, %rax
movb $0x1, (%rax)
jmp 0xe6df7
cmpl $0x31, -0x8(%rbp)
jne 0xe6df3
movslq -0x4(%rbp), %rcx
leaq 0x1b73ac(%rip), %rax    # 0x29e190
imulq $0x348, %rcx, %rcx      # imm = 0x348
addq %rcx, %rax
movb $0x2, (%rax)
jmp 0xe6df5
jmp 0xe6df9
jmp 0xe6df7
jmp 0xe6df9
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0xe6d8e
jmp 0xe6e06
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_sslt()
void parse_zy_sslt()
{
u32 val;
int prn;
int c;

   // satellite enables
   log_packet_id("sat enables");

   val = 0;
   if(get_msg_field()) {
      for(prn=1; prn<=32; prn++) {
         c = msg_field[prn-1];
         if(c == 0) break;
         if(c == '0') sat[prn].disabled = 0;
         else if(c == '1') sat[prn].disabled = 1;
         else continue;
         if(!sat[prn].disabled) val |= 1 << (prn-1);
      }
      sats_enabled = val;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa267c(%rip), %rdi     # 0x18949b
callq 0x7add0
movl $0x0, -0x4(%rbp)
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6efc
movl $0x1, -0x8(%rbp)
cmpl $0x20, -0x8(%rbp)
jg 0xe6ef0
movl -0x8(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rcx
leaq 0x2b3dc6(%rip), %rax    # 0x39ac20
movsbl (%rax,%rcx), %eax
movl %eax, -0xc(%rbp)
cmpl $0x0, -0xc(%rbp)
jne 0xe6e6c
jmp 0xe6ef0
cmpl $0x30, -0xc(%rbp)
jne 0xe6e8d
movslq -0x8(%rbp), %rcx
leaq 0x1b7313(%rip), %rax    # 0x29e190
imulq $0x348, %rcx, %rcx      # imm = 0x348
addq %rcx, %rax
movb $0x0, 0x1(%rax)
jmp 0xe6eb2
cmpl $0x31, -0xc(%rbp)
jne 0xe6eae
movslq -0x8(%rbp), %rcx
leaq 0x1b72f2(%rip), %rax    # 0x29e190
imulq $0x348, %rcx, %rcx      # imm = 0x348
addq %rcx, %rax
movb $0x1, 0x1(%rax)
jmp 0xe6eb0
jmp 0xe6ee2
jmp 0xe6eb2
movslq -0x8(%rbp), %rcx
leaq 0x1b72d3(%rip), %rax    # 0x29e190
imulq $0x348, %rcx, %rcx      # imm = 0x348
addq %rcx, %rax
cmpb $0x0, 0x1(%rax)
jne 0xe6ee0
movl -0x8(%rbp), %ecx
subl $0x1, %ecx
movl $0x1, %eax
shll %cl, %eax
orl -0x4(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0xe6ee2
movl -0x8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8(%rbp)
jmp 0xe6e40
movl -0x4(%rbp), %ecx
leaq 0x2853ca(%rip), %rax    # 0x36c2c4
movl %ecx, (%rax)
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_stat()
void parse_zy_stat()
{
int sats;
int hex1,hex2,hex3;

   // status
   log_packet_id("status");

   if(get_msg_field()) sats = atoi(msg_field);
   else return;

   if(get_msg_field()) {
      msg_field[32] = 0;
      strcpy(zy_osc_type, msg_field);
   }
   else return;

   if(get_msg_field()) hex1 = atohex(msg_field);
   else return;
   if(get_msg_field()) hex2 = atohex(msg_field);
   else return;
   if(get_msg_field()) hex3 = atohex(msg_field);
   else return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa1f26(%rip), %rdi     # 0x188e45
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6f3f
leaq 0x2b3ceb(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, -0x4(%rbp)
jmp 0xe6f44
jmp 0xe6fc7
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6f6e
leaq 0x2b3ccb(%rip), %rax    # 0x39ac20
movb $0x0, 0x20(%rax)
leaq 0x2b58a0(%rip), %rdi    # 0x39c800
leaq 0x2b3cb9(%rip), %rsi    # 0x39ac20
callq 0x9350
jmp 0xe6f70
jmp 0xe6fc7
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6f8b
leaq 0x2b3c9f(%rip), %rdi    # 0x39ac20
callq 0x98d0
movl %eax, -0x8(%rbp)
jmp 0xe6f8d
jmp 0xe6fc7
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6fa8
leaq 0x2b3c82(%rip), %rdi    # 0x39ac20
callq 0x98d0
movl %eax, -0xc(%rbp)
jmp 0xe6faa
jmp 0xe6fc7
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe6fc5
leaq 0x2b3c65(%rip), %rdi    # 0x39ac20
callq 0x98d0
movl %eax, -0x10(%rbp)
jmp 0xe6fc7
jmp 0xe6fc7
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_temp()
void parse_zy_temp()
{
   // temperature
   log_packet_id("temperature");

   if(get_msg_field()) {
      temperature = (DATA_SIZE) atof(msg_field);
      have_temperature = 115;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa0786(%rip), %rdi     # 0x187761
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe700e
leaq 0x2b3c2f(%rip), %rdi    # 0x39ac20
callq 0x9480
leaq 0x284bfb(%rip), %rax    # 0x36bbf8
movsd %xmm0, (%rax)
leaq 0x285424(%rip), %rax    # 0x36c42c
movl $0x73, (%rax)
popq %rbp
retq
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_timd()
void parse_zy_timd()
{
double timd;

   // gps/pps time difference
   log_packet_id("time difference");

   if(get_msg_field()) {
      timd = atof(msg_field);// / 1.0E9;
      pps_offset = timd;
      have_pps_offset = 66;
      have_rcvr_pps = 66;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa2488(%rip), %rdi     # 0x1894a7
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7069
leaq 0x2b3beb(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
leaq 0x28494d(%rip), %rax    # 0x36b998
movsd %xmm0, (%rax)
leaq 0x2853c2(%rip), %rax    # 0x36c418
movl $0x42, (%rax)
leaq 0x2853c1(%rip), %rax    # 0x36c424
movl $0x42, (%rax)
addq $0x10, %rsp
popq %rbp
retq
nop
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_timi()
void parse_zy_timi()
{
double timi;

   // undocumented  (time interval?)
   log_packet_id("time interval");

   if(get_msg_field()) {
      timi = atof(msg_field);// / 1.0E9;
      pps_offset = timi;
      have_pps_offset = 69;
      have_rcvr_pps = 69;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa2438(%rip), %rdi     # 0x1894b7
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe70c9
leaq 0x2b3b8b(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
leaq 0x2848ed(%rip), %rax    # 0x36b998
movsd %xmm0, (%rax)
leaq 0x285362(%rip), %rax    # 0x36c418
movl $0x45, (%rax)
leaq 0x285361(%rip), %rax    # 0x36c424
movl $0x45, (%rax)
addq $0x10, %rsp
popq %rbp
retq
nop
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_timm()
void parse_zy_timm()
{
int tmode;

   // timing mode
   log_packet_id("timing mode");

   if(get_msg_field()) {
      tmode = atoi(msg_field);
      if((tmode == 1) || (tmode == 4)) { 
         time_flags &= (~TFLAGS_UTC);
         timing_mode = TMODE_GPS;
         have_timing_mode = 1;
      }
      else if((tmode == 2) || (tmode == 3)) {  // utc time
         time_flags |= (TFLAGS_UTC);
         timing_mode = TMODE_UTC;
         have_timing_mode = 1;
      }
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa0bf9(%rip), %rdi     # 0x187f58
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe73f7
leaq 0x2b38a7(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, -0x4(%rbp)
cmpl $0x1, -0x4(%rbp)
je 0xe738d
cmpl $0x4, -0x4(%rbp)
jne 0xe73bb
leaq 0x2852f0(%rip), %rax    # 0x36c684
movl (%rax), %ecx
andl $-0x2, %ecx
leaq 0x2852e4(%rip), %rax    # 0x36c684
movl %ecx, (%rax)
leaq 0x2852f4(%rip), %rax    # 0x36c69d
movb $0x0, (%rax)
leaq 0x2851f9(%rip), %rax    # 0x36c5ac
movl $0x1, (%rax)
jmp 0xe73f5
cmpl $0x2, -0x4(%rbp)
je 0xe73c7
cmpl $0x3, -0x4(%rbp)
jne 0xe73f3
leaq 0x2852b6(%rip), %rax    # 0x36c684
movl (%rax), %ecx
orl $0x1, %ecx
leaq 0x2852aa(%rip), %rax    # 0x36c684
movl %ecx, (%rax)
leaq 0x2852ba(%rip), %rax    # 0x36c69d
movb $0x3, (%rax)
leaq 0x2851bf(%rip), %rax    # 0x36c5ac
movl $0x1, (%rax)
jmp 0xe73f5
jmp 0xe73f7
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_zy_trmo()
void parse_zy_trmo()
{
char trmo;

   // surveying / position hold mode
   log_packet_id("survey info");

   if(get_msg_field()) {
      trmo = msg_field[0];  // P=position average mode   K=known position
      if(trmo == 'P') {
         minor_alarms |= MINOR_SURVEY;
         rcvr_mode = RCVR_MODE_SURVEY;
      }
      else if(trmo == 'K') {
         minor_alarms &= (~MINOR_SURVEY);
         rcvr_mode = RCVR_MODE_HOLD;
      }
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xa20b6(%rip), %rdi     # 0x1894c5
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7480
leaq 0x2b37fb(%rip), %rax    # 0x39ac20
movb (%rax), %al
movb %al, -0x1(%rbp)
movsbl -0x1(%rbp), %eax
cmpl $0x50, %eax
jne 0xe7454
leaq 0x284f7e(%rip), %rax    # 0x36c3b8
movl (%rax), %ecx
orl $0x20, %ecx
leaq 0x284f72(%rip), %rax    # 0x36c3b8
movl %ecx, (%rax)
leaq 0x284e61(%rip), %rax    # 0x36c2b0
movb $0xb, (%rax)
jmp 0xe747e
movsbl -0x1(%rbp), %eax
cmpl $0x4b, %eax
jne 0xe747c
leaq 0x284f54(%rip), %rax    # 0x36c3b8
movl (%rax), %ecx
andl $-0x21, %ecx
leaq 0x284f48(%rip), %rax    # 0x36c3b8
movl %ecx, (%rax)
leaq 0x284e37(%rip), %rax    # 0x36c2b0
movb $0x7, (%rax)
jmp 0xe747e
jmp 0xe7480
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_true_clock()
void parse_true_clock()
{
double jd;
int utc;

   log_packet_id("clock");

   if(get_msg_field()) jd = atof(msg_field);
   else return;

   if(get_msg_field()) utc = atoi(msg_field);
   else return;

   if(get_msg_field()) {
      tfom = atoi(msg_field);
      have_tfom = 1;
   }
   else return;

   jd /= (24.0*60.0*60.0);
   jd += GPS_EPOCH;

   if(!user_set_utc_ofs && utc) utc_offset = (int) utc;
   check_utc_ofs(33);

   set_gregorian_time(jd);
   if(time_flags & TFLAGS_UTC) {
      gps_to_utc();
   }

   update_gps_screen(4387);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0xad759(%rip), %rdi     # 0x194c28
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe74f1
leaq 0x2b373b(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd %xmm0, -0x8(%rbp)
jmp 0xe74f6
jmp 0xe75c2
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7511
leaq 0x2b3719(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, -0xc(%rbp)
jmp 0xe7516
jmp 0xe75c2
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7546
leaq 0x2b36f9(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, %ecx
leaq 0x2848fb(%rip), %rax    # 0x36be30
movl %ecx, (%rax)
leaq 0x2848f6(%rip), %rax    # 0x36be34
movl $0x1, (%rax)
jmp 0xe7548
jmp 0xe75c2
movsd -0x8(%rbp), %xmm0
movsd 0x87ab3(%rip), %xmm1    # 0x16f008
divsd %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x8a0b2(%rip), %xmm0    # 0x171618
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
leaq 0x28539d(%rip), %rax    # 0x36c914
cmpl $0x0, (%rax)
jne 0xe758e
cmpl $0x0, -0xc(%rbp)
je 0xe758e
movl -0xc(%rbp), %ecx
leaq 0x28537c(%rip), %rax    # 0x36c908
movl %ecx, (%rax)
movl $0x21, %edi
callq 0x7a270
movsd -0x8(%rbp), %xmm0
callq 0x7fb00
leaq 0x2850db(%rip), %rax    # 0x36c684
movl (%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0xe75b8
callq 0x7fcb0
movl $0x1123, %edi           # imm = 0x1123
callq 0x9d790
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_true_extstatus()
void parse_true_extstatus()
{
   log_packet_id("extstatus");

   if(get_msg_field()) {  // position questionable?  0=normal  1=survey?
   }
   else return;

   if(get_msg_field()) {  // sat count related?
   }
   else return;

   if(get_msg_field()) {  // seems to be related to operating mode 
      true_eval = atof(msg_field);  // ,,, much noisier during survey, 
                                    // ... stable in position hold mode
                                    // ... might be 1PPS or osc error related
      have_true_eval = 1;
   }
   else return;

   if(get_msg_field()) {
      temperature = (DATA_SIZE) atof(msg_field);
      if(temperature && (have_temperature == 0)) {
         new_queue(RESET_ALL_QUEUES, 6543); // clear the queues so temp scales nicely
         have_temperature = 116;
      }
   }
   else return;

   if(get_msg_field()) {  // ?
   }
   else return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa1f87(%rip), %rdi     # 0x189562
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe75ec
jmp 0xe75f1
jmp 0xe76a7
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe75fd
jmp 0xe7602
jmp 0xe76a7
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7632
leaq 0x2b360d(%rip), %rdi    # 0x39ac20
callq 0x9480
leaq 0x2b4f29(%rip), %rax    # 0x39c548
movsd %xmm0, (%rax)
leaq 0x2b4f26(%rip), %rax    # 0x39c550
movl $0x1, (%rax)
jmp 0xe7634
jmp 0xe76a7
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7697
leaq 0x2b35db(%rip), %rdi    # 0x39ac20
callq 0x9480
leaq 0x2845a7(%rip), %rax    # 0x36bbf8
movsd %xmm0, (%rax)
leaq 0x28459c(%rip), %rax    # 0x36bbf8
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xe766d
jp 0xe766d
jmp 0xe7695
leaq 0x284db8(%rip), %rax    # 0x36c42c
cmpl $0x0, (%rax)
jne 0xe7695
movl $0x7, %edi
movl $0x198f, %esi           # imm = 0x198F
callq 0x14df0
leaq 0x284d9d(%rip), %rax    # 0x36c42c
movl $0x74, (%rax)
jmp 0xe7699
jmp 0xe76a7
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe76a5
jmp 0xe76a7
jmp 0xe76a7
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_true_geta()
void parse_true_geta()
{
   // attenuator
   log_packet_id("geta");

   if(get_msg_field()) {
      atten_val = atof(msg_field);
      have_atten = 1;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa1eb1(%rip), %rdi     # 0x18956c
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe76ee
leaq 0x2b354f(%rip), %rdi    # 0x39ac20
callq 0x9480
leaq 0x2b4e8b(%rip), %rax    # 0x39c568
movsd %xmm0, (%rax)
leaq 0x2b4e88(%rip), %rax    # 0x39c570
movl $0x1, (%rax)
popq %rbp
retq
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_true_getp()
void parse_true_getp()
{
   // get "pot" values
   log_packet_id("getp");

   if(get_msg_field()) {  // integer
      true_pot1 = atoi(msg_field);
      have_true_pot |= 0x01;
   }
   if(get_msg_field()) {  // integer
      true_pot2 = atoi(msg_field);
      have_true_pot |= 0x02;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa1e76(%rip), %rdi     # 0x189571
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7736
leaq 0x2b350f(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, %ecx
leaq 0x2b4e55(%rip), %rax    # 0x39c574
movl %ecx, (%rax)
leaq 0x2b4e54(%rip), %rax    # 0x39c57c
movl (%rax), %ecx
orl $0x1, %ecx
leaq 0x2b4e48(%rip), %rax    # 0x39c57c
movl %ecx, (%rax)
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe776c
leaq 0x2b34d9(%rip), %rdi    # 0x39ac20
callq 0x95c0
movl %eax, %ecx
leaq 0x2b4e23(%rip), %rax    # 0x39c578
movl %ecx, (%rax)
leaq 0x2b4e1e(%rip), %rax    # 0x39c57c
movl (%rax), %ecx
orl $0x2, %ecx
leaq 0x2b4e12(%rip), %rax    # 0x39c57c
movl %ecx, (%rax)
popq %rbp
retq
nop
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_true_getdelay()
void parse_true_getdelay()
{
   log_packet_id("getdelay");

   if(get_msg_field()) {
      cable_delay = atof(msg_field) / 1.0E9;
      have_cable_delay = 444;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa1dfb(%rip), %rdi     # 0x189576
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe77ba
leaq 0x2b348f(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd 0x8788a(%rip), %xmm1    # 0x16f028
divsd %xmm1, %xmm0
leaq 0x2857ff(%rip), %rax    # 0x36cfa8
movsd %xmm0, (%rax)
leaq 0x284ce0(%rip), %rax    # 0x36c494
movl $0x1bc, (%rax)          # imm = 0x1BC
popq %rbp
retq
nopl (%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_true_getbdelay()
void parse_true_getbdelay()
{
   log_packet_id("getbdelay");

   if(get_msg_field()) {
      pps1_delay = atof(msg_field) / 1.0E9;
      have_pps_delay |= 0x01;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa1db4(%rip), %rdi     # 0x18957f
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7812
leaq 0x2b343f(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd 0x8783a(%rip), %xmm1    # 0x16f028
divsd %xmm1, %xmm0
leaq 0x2857bf(%rip), %rax    # 0x36cfb8
movsd %xmm0, (%rax)
leaq 0x284c94(%rip), %rax    # 0x36c498
movl (%rax), %ecx
orl $0x1, %ecx
leaq 0x284c88(%rip), %rax    # 0x36c498
movl %ecx, (%rax)
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_true_ppsdbg()
void parse_true_ppsdbg()
{
   log_packet_id("ppsdbg");

   get_msg_field();  // GPS time
   get_msg_field();  // Status - 0
   if(get_msg_field()) { // 32.42914e3   // EFC?
      dac_voltage = (DATA_SIZE) (atof(msg_field) * 4.096 / 65536.0);  // EFC DAC
      if(dac_voltage && (have_dac == 0)) {
         new_queue(RESET_ALL_QUEUES, 6544); // clear the queues so dac scales nicely
         have_dac = 66;
      }
   }
   get_msg_field();  // 0, -3, -2, -1

   if(get_msg_field()) {
//    dac_voltage = (DATA_SIZE) atof(msg_field);  // sawtooth?
//    have_sawtooth = 1;
   }

   get_msg_field();  // 0, 2
   get_msg_field();  // 0,1,3

   if(get_msg_field()) {  // temperature
//    temperature = (DATA_SIZE) atof(msg_field);
//    have_temperature = 117;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa1d5e(%rip), %rdi     # 0x189589
callq 0x7add0
callq 0xb0bd0
callq 0xb0bd0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe78b5
leaq 0x2b33d5(%rip), %rdi    # 0x39ac20
callq 0x9480
movsd 0x9b870(%rip), %xmm1    # 0x1830c8
mulsd %xmm1, %xmm0
movsd 0x9b814(%rip), %xmm1    # 0x183078
divsd %xmm1, %xmm0
leaq 0x284371(%rip), %rax    # 0x36bbe0
movsd %xmm0, (%rax)
leaq 0x284366(%rip), %rax    # 0x36bbe0
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xe788b
jp 0xe788b
jmp 0xe78b3
leaq 0x284c4a(%rip), %rax    # 0x36c4dc
cmpl $0x0, (%rax)
jne 0xe78b3
movl $0x7, %edi
movl $0x1990, %esi           # imm = 0x1990
callq 0x14df0
leaq 0x284c2f(%rip), %rax    # 0x36c4dc
movl $0x42, (%rax)
jmp 0xe78b5
callq 0xb0bd0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe78c6
jmp 0xe78c6
callq 0xb0bd0
callq 0xb0bd0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe78dc
jmp 0xe78dc
popq %rbp
retq
nop
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_true_kaldbg()
void parse_true_kaldbg()
{
   log_packet_id("kaldbg");

   if(get_msg_field()) {} ;  // Unix time
   if(get_msg_field()) {} ;  // -0.32
   if(get_msg_field()) {} ;  // PPS related - 31.42890e3
   if(get_msg_field()) {} ;  // -0.336e-3
   if(get_msg_field()) {} ;  // 0.291      // smoothed phase error in approx 6.5 ns steps
   if(get_msg_field()) {} ;  // 0
   if(get_msg_field()) {} ;  // 0
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa1ca5(%rip), %rdi     # 0x189590
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe78fc
jmp 0xe78fc
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7908
jmp 0xe7908
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7914
jmp 0xe7914
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7920
jmp 0xe7920
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe792c
jmp 0xe792c
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7938
jmp 0xe7938
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe7944
jmp 0xe7944
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: jkingan[P]ladyheather/heathgps.cpp
// Function: parse_true_scale()
void parse_true_scale()
{
   log_packet_id("scalefactor");

   if(get_msg_field()) {
      true_scalefactor = atof(msg_field);
      have_true_scale = 1;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xa1c3c(%rip), %rdi     # 0x189597
callq 0x7add0
callq 0xb0bd0
cmpl $0x0, %eax
je 0xe798e
leaq 0x2b32af(%rip), %rdi    # 0x39ac20
callq 0x9480
leaq 0x2b4bdb(%rip), %rax    # 0x39c558
movsd %xmm0, (%rax)
leaq 0x2b4bd8(%rip), %rax    # 0x39c560
movl $0x1, (%rax)
popq %rbp
retq