int fly(void) { coord tx, ty; coord ax, ay; int ap_to_target; struct ichrstr *ip; char flightpath[MAX_PATH_LEN]; int cno; struct nstr_item ni_bomb; struct nstr_item ni_esc; union empobj_storage target; struct emp_qelem bomb_list; struct emp_qelem esc_list; int wantflags; struct sctstr ap_sect; char buf[1024]; wantflags = 0; if (get_planes(&ni_bomb, &ni_esc, player->argp[1], player->argp[2]) < 0) return RET_SYN; if (!get_assembly_point(player->argp[3], &ap_sect, buf)) return RET_SYN; ax = ap_sect.sct_x; ay = ap_sect.sct_y; if (!getpath(flightpath, player->argp[4], ax, ay, 0, 0, MOB_FLY)) return RET_SYN; tx = ax; ty = ay; (void)pathtoxy(flightpath, &tx, &ty, fcost); pr("Ending sector is %s\n", xyas(tx, ty, player->cnum)); ip = whatitem(player->argp[5], "transport what? "); if (player->aborted) return RET_SYN; if (pln_where_to_land(tx, ty, &target, &wantflags) < 0) return RET_SYN; cno = target.gen.ef_type == EF_SHIP ? target.gen.uid : -1; if (ip && ip->i_uid == I_CIVIL) { if (target.gen.own != player->cnum) { pr("Your civilians refuse to board a flight abroad!\n"); return RET_FAIL; } if (target.gen.ef_type == EF_SECTOR && target.sect.sct_own != target.sect.sct_oldown) { pr("Can't fly civilians into occupied sectors.\n"); return RET_FAIL; } } ap_to_target = strlen(flightpath); pr("range to target is %d\n", ap_to_target); /* * select planes within range */ pln_sel(&ni_bomb, &bomb_list, &ap_sect, ap_to_target, 1, wantflags, P_M | P_O); pln_sel(&ni_esc, &esc_list, &ap_sect, ap_to_target, 1, wantflags | P_ESC | P_F, P_M | P_O); if (cno >= 0 && !pln_can_land_on_carrier(&bomb_list, &esc_list, &target.ship)) { pr("Not enough room on ship #%d!\n", cno); return RET_FAIL; } /* * now arm and equip the bombers, transports, whatever. */ pln_arm(&bomb_list, ap_to_target, 't', ip); if (QEMPTY(&bomb_list)) { pr("No planes could be equipped for the mission.\n"); return RET_FAIL; } pln_arm(&esc_list, ap_to_target, 'e', NULL); ac_encounter(&bomb_list, &esc_list, ax, ay, flightpath, 0); if (QEMPTY(&bomb_list)) { pr("No planes got through fighter defenses\n"); } else { pln_dropoff(&bomb_list, ip, tx, ty, cno); pln_newlanding(&bomb_list, tx, ty, cno); pln_newlanding(&esc_list, tx, ty, cno); } pln_put(&bomb_list); pln_put(&esc_list); return RET_OK; }
int main(int argc, char *argv[]) { int i, p; double s1, d1, r1, s2, d2, r2, plg[3], azm[3] ; double *eval3, **evec3, M0, Mw, scale ; char pdela[8], pdelo[9], cenla[8],cenlo[9] ; str_quake_params eq ; if (argc < 2) { fprintf(stderr,"Error syntax : %s CMTFILE\n",argv[0]); exit(1) ; } /* Allocate memory */ eq.vm = double_alloc2p(2) ; eq.vm[1] = double_calloc(6) ; /* Read cmtfile */ strcpy(eq.cmtfile,argv[1]) ; get_cmtf(&eq, 2) ; /* Best double couple solution */ get_planes(eq.vm[1], &eval3, &evec3, &s1,&d1,&r1, &s2,&d2,&r2) ; M0 = ((fabs(eval3[0]) + fabs(eval3[2])) * (double)POW) / 2. ; Mw = (log10(M0) - 16.1) / 1.5 ; /* Principal axes */ for (i=0; i<3 ; i++) { azm[i] = atan2(evec3[2][i],-evec3[1][i])/DEG2RAD+360.; scale = evec3[1][i]*evec3[1][i] + evec3[2][i]*evec3[2][i] ; plg[i] = atan2(-evec3[0][i],sqrt(scale))/DEG2RAD; if(plg[i]<0.0) { plg[i] *= -1. ; azm[i] += 180.; } azm[i] = fmod(azm[i], 360.); } /* Scale Seismic moment */ scale = 0. ; for (i=0;i<6;i++) if (fabs(eq.vm[1][i]) > scale) scale = fabs(eq.vm[1][i]) ; p = (int)log10(scale) ; scale = pow(10,(double)p) ; for (i=0;i<6;i++) eq.vm[1][i] /= scale; for (i=0;i<3;i++) eval3[i] /= scale; p += (int)round(log10(POW)); /* Display */ format_latlon(eq.pde_evla, eq.pde_evlo, pdela, pdelo); format_latlon(eq.evla, eq.evlo, cenla, cenlo); printf("Moment mag. : %5.2f\n",Mw) ; printf("PDE location : Lat=%7s; Lon=%8s; Dep=%5.1f km\n",pdela,pdelo,eq.pde_evdp) ; printf("Centroid loc.: Lat=%7s; Lon=%8s; Dep=%5.1f km\n",cenla,cenlo,eq.evdp) ; printf("Origin time : %04d/%02d/%02d %02d:%02d:%05.2f\n", eq.ot_ye,eq.ot_mo, eq.ot_dm,eq.ot_ho,eq.ot_mi, (double)eq.ot_se+(double)eq.ot_ms/1000.) ; printf("Time delay : %-5.1f sec\n",eq.ts) ; printf("Half duration: %-5.1f sec\n\n",eq.hd) ; printf("Moment tensor: scale= 1.0E+%02d dyn.cm\n",p) ; printf("rr=%6.3f ; tt=%6.3f ; pp=%6.3f \n",eq.vm[1][0],eq.vm[1][1],eq.vm[1][2]) ; printf("rt=%6.3f ; rp=%6.3f ; tp=%6.3f \n\n",eq.vm[1][3],eq.vm[1][4],eq.vm[1][5]) ; printf("Principal Axes: \n") ; printf("1.(T) Val=%6.3f ; Plg= %3.0f ; Azm=%3.0f\n",eval3[0],plg[0],azm[0]); printf("2.(N) %6.3f ; %3.0f ; %3.0f\n",eval3[1],plg[1],azm[1]); printf("3.(P) %6.3f ; %3.0f ; %3.0f\n\n",eval3[2],plg[2],azm[2]); printf("Best Double Couple: M0=%8.2E dyn.cm\n",M0) ; printf("NP1: Strike=%5.1f ; Dip=%4.1f ; Slip=%6.1f \n",s1,d1,r1) ; printf("NP2: Strike=%5.1f ; Dip=%4.1f ; Slip=%6.1f \n\n",s2,d2,r2) ; /* printf("NP1: Strike=%3.0f ; Dip=%.4f ; Slip=%3.0f \n",s1,d1,r1) ; */ /* printf("NP2: Strike=%3.0f ; Dip=%.4f ; Slip=%3.0f \n\n",s2,d2,r2) ; */ charplot(eq.vm[1], s1,d1, s2,d2, '-', '#', ' ', '\0','\0','\0', RX, RY, stdout) ; free((void*)eq.vm[1]) ; free((void**)eq.vm) ; for(i=0 ; i<3 ; i++) free((void*)evec3[i]) ; free((void**)evec3) ; free((void*) eval3) ; return 0; }
int drop(void) { coord tx, ty; coord ax, ay; int ap_to_target; struct ichrstr *ip; char flightpath[MAX_PATH_LEN]; struct nstr_item ni_bomb; struct nstr_item ni_esc; struct sctstr target; struct emp_qelem bomb_list; struct emp_qelem esc_list; int wantflags; struct sctstr ap_sect; char buf[1024]; if (get_planes(&ni_bomb, &ni_esc, player->argp[1], player->argp[2]) < 0) return RET_SYN; if (!get_assembly_point(player->argp[3], &ap_sect, buf)) return RET_SYN; ax = ap_sect.sct_x; ay = ap_sect.sct_y; if (!getpath(flightpath, player->argp[4], ax, ay, 0, 0, MOB_FLY)) return RET_SYN; tx = ax; ty = ay; (void)pathtoxy(flightpath, &tx, &ty, fcost); pr("target is %s\n", xyas(tx, ty, player->cnum)); if (!(ip = whatitem(player->argp[5], "Drop off what? "))) return RET_SYN; getsect(tx, ty, &target); if (relations_with(target.sct_own, player->cnum) == ALLIED) { /* own or allied sector: cargo drop */ if (ip->i_uid == I_CIVIL) { if (target.sct_own != player->cnum) { pr("Your civilians refuse to board a flight abroad!\n"); return RET_FAIL; } if (target.sct_own != target.sct_oldown) { pr("Can't drop civilians into occupied sectors.\n"); return RET_FAIL; } } wantflags = P_C; } else { /* into the unknown... */ if (ip->i_uid != I_SHELL) { pr("You don't own %s!\n", xyas(tx, ty, player->cnum)); return RET_FAIL; } /* mine drop */ wantflags = P_MINE; } ap_to_target = strlen(flightpath); if (flightpath[ap_to_target - 1] == 'h') ap_to_target--; pr("range to target is %d\n", ap_to_target); /* * select planes within range */ pln_sel(&ni_bomb, &bomb_list, &ap_sect, ap_to_target, 2, wantflags, P_M | P_O); pln_sel(&ni_esc, &esc_list, &ap_sect, ap_to_target, 2, P_ESC | P_F, P_M | P_O); /* * now arm and equip the bombers, transports, whatever. */ pln_arm(&bomb_list, 2 * ap_to_target, wantflags & P_MINE ? 'm' : 'd', ip); if (QEMPTY(&bomb_list)) { pr("No planes could be equipped for the mission.\n"); return RET_FAIL; } pln_arm(&esc_list, 2 * ap_to_target, 'e', NULL); ac_encounter(&bomb_list, &esc_list, ax, ay, flightpath, 0); if (QEMPTY(&bomb_list)) { pr("No planes got through fighter defenses\n"); } else { if (wantflags & P_MINE) pln_mine(&bomb_list, tx, ty); else pln_dropoff(&bomb_list, ip, tx, ty, -1); } pln_put(&bomb_list); pln_put(&esc_list); return RET_OK; }