send_point(double lat, double lon, double ele) { char header[4] = {52, 0, 0, 0}; char data1[8]; char data2[8]; char data3[8]; memcpy(&data1, &lat, sizeof(double)); memcpy(&data2, &lon, sizeof(double)); memcpy(&data3, &ele, sizeof(double)); char *latlon = array_concat(data1, 8, data2, 8, sizeof(char)); char *latlonele = array_concat(latlon, 16, data3, 8, sizeof(char)); char *message = array_concat(header, 4, latlonele, 24, sizeof(char)); bytes_sent = sendto(sock, message, 28, 0, (struct sockaddr*) &sa, sizeof(struct sockaddr_in)); if (bytes_sent < 0) { printf("Error sending packet: %s\n", strerror(errno)); } else { printf("sendto OK %d\n", sizeof(double)); } /* for (int i = 0; i < 28; i++) { if(i == 3 || i == 11 || i == 19 || i == 27) {printf("%d\n", message[i]);} else {printf("%d, ", message[i]);} } */ }
/* Make a new environment by taking the union of two environments. */ static void *unify_environments(void *lhs, void *rhs) { register unsigned int ix; array result = array_concat(array_copy(lhs), array_copy(rhs)); lydia_qsort(result->arr, result->sz, sizeof(result->arr[0]), cmp_nodes); /* Remove duplicate nodes. */ for (ix = result->sz - 1; ix < result->sz; ix--) { if (ix > 0) { atms_node na = result->arr[ix]; atms_node nb = result->arr[ix - 1]; if (nb->index == na->index) { array_delete(result, ix); } } } return result; }