void check_keyword() { char *argv[MAX_ARGC + 1] = {NULL}; char cmdstr[CMDBUF_SIZE]; int argc = 1; int i; find_events(); fill_arg(cmdstr, cmd[cur_his]); argv[0] = cmdtok(cmdstr); if (!argv[0]) return; for(argc = 1 ; argv[argc-1] && argc < MAX_ARGC ; argc++) if(!(argv[argc] = cmdtok(NULL))) break; for (i = 0; i < CMD_COUNT; i++) { if (!strcmp(argv[0], cmd_data[i].cmd)) { cmd_data[i].func(argc, argv); break; } } if (i == CMD_COUNT) { write(fdout, argv[0], strlen(argv[0]) + 1); write(fdout, ": command not found", 20); write(fdout, next_line, 3); } }
void check_keyword() { char *argv[MAX_ARGC + 1] = {NULL}; char cmdstr[CMDBUF_SIZE]; char buffer[CMDBUF_SIZE * MAX_ENVVALUE / 2 + 1]; char *p = buffer; int argc = 1; int i; find_events(); strcpy(cmdstr, cmd[cur_his]); argv[0] = cmdtok(cmdstr); if (!argv[0]) return; while (1) { argv[argc] = cmdtok(NULL); if (!argv[argc]) break; argc++; if (argc >= MAX_ARGC) break; } for(i = 0; i < argc; i++) { int l = fill_arg(p, argv[i]); argv[i] = p; p += l + 1; } for (i = 0; i < CMD_COUNT; i++) { if (!strcmp(argv[0], cmd_data[i].cmd)) { cmd_data[i].func(argc, argv); break; } } if (i == CMD_COUNT) { write(fdout, argv[0], strlen(argv[0]) + 1); write(fdout, ": command not found", 20); write(fdout, next_line, 3); } }
int main( int argc, char **argv) { int i, j, k, julian = 0, sat_no = 15, n_days = 30, gap; int n_events = 0, n_sun, n_earth; double t1, t2; long jd; EVENT *e; FILE *ofile = NULL, *data_file = NULL; FILE *vsop_file; char *vsop_tbuff; vsop_file = fopen( "vsop.bin", "rb"); if( !vsop_file) { printf( "Couldn't open vsop.bin"); return( -3); } vsop_tbuff = (char *)malloc( VSOP_CHUNK); vsop_data = (char FAR *)FMALLOC( VSOP_CHUNK * 22U); for( i = 0; i < 22; i++) { fread( vsop_tbuff, VSOP_CHUNK, 1, vsop_file); memcpy( vsop_data + (unsigned)i * VSOP_CHUNK, vsop_tbuff, VSOP_CHUNK); } fclose( vsop_file); free( vsop_tbuff); if( argc < 4) { printf( "JEVENT calculates Jovian satellite events (transits, eclipses,\n"); printf( "shadows, occultations) as seen from Earth. It requires, as a\n"); printf( "minimum, a day, month, and year. Given, say, the command\n"); printf( "\nJEVENT 18 4 1993\n\n"); printf( "JEVENT will calculate all events from 18 Apr 1993 for the next\n"); printf( "thirty days. You can add on the following parameters:\n\n"); printf( " -j Use Julian calendar\n"); printf( " -d(#) Calculate for (#) days instead of 30\n"); printf( " -f(name) Put results in ASCII file (name) as well as on screen\n"); return( -2); } for( i = 0; i < argc; i++) if( argv[i][0] == '-') switch( argv[i][1]) { case 'j': case 'J': julian = 1; break; case 'q': case 'Q': quiet = 1; break; case 's': case 'S': sat_no = atoi( argv[i] + 2); break; case 'd': case 'D': n_days = atoi( argv[i] + 2); break; case 'f': case 'F': ofile = fopen( argv[i] + 2, "wb"); break; case 'r': case 'R': data_file = fopen( argv[i] + 2, "ab"); printf( "Appending data to %s\n", argv[i] + 2); break; default: break; } e = (EVENT *)calloc( MAX_EVENTS, sizeof( EVENT)); if( !e) return( -1); jd = dmy_to_day( 0, atoi( argv[2]), atol( argv[3]), julian); t1 = (double)jd - .5 + atof( argv[1]); t2 = t1 + (double)n_days; printf( "JD %lf to %lf\n", t1, t2); for( i = 0; i < 4; i++) if( sat_no & (1 << i)) { printf( "Sat %d from sun\n", i + 1); n_sun = find_events( i + 1, t1 - 1., t2 + 1., 0, e + n_events); printf( "Sat %d from earth\n", i + 1); n_earth = find_events( i + 1, t1 - 1., t2 + 1., 1, e + n_events + n_sun); printf( "Finding hidden events\n"); k = n_events + n_sun; for( j = n_events; j < n_events + n_sun; j++) while( k < n_events + n_sun + n_earth && e[k].t < e[j].t) { if( e[k + 1].t > e[j].t) if( !(e[j].event_type & IN_FRONT)) e[j].event_type |= EVENT_UNSEEN; k += 2; } k = n_events; for( j = n_events + n_sun; j < n_events + n_sun + n_earth; j++) while( k < n_events + n_sun && e[k].t < e[j].t) { if( e[k + 1].t > e[j].t) if( !(e[j].event_type & IN_FRONT)) e[j].event_type |= EVENT_UNSEEN; k += 2; } n_events += n_earth + n_sun; } printf( "Sorting %d events\n", n_events); for( gap = 1; gap < n_events / 3; gap = gap * 3 + 1) ; while( gap) { for( i = 0; i < gap; i++) for( j = i; j + gap < n_events; j += gap) if( e[j].t > e[j + gap].t) { EVENT temp; memcpy( &temp, e + j + gap, sizeof( EVENT)); memcpy( e + j + gap, e + j, sizeof( EVENT)); memcpy( e + j, &temp, sizeof( EVENT)); if( j >= gap) j -= gap + gap; } gap /= 3; } if( !quiet) { printf( "Final results:\n"); for( i = 0; i < n_events; i++) if( e[i].t > t1 && e[i].t < t2) show_event( stdout, e + i); } if( ofile) { for( i = 0; i < n_events; i++) if( e[i].t > t1 && e[i].t < t2) show_event( ofile, e + i); fclose( ofile); } if( data_file) { for( i = 0; i < n_events; i++) if( e[i].t > t1 && e[i].t < t2) if( !( e[i].event_type & EVENT_UNSEEN)) { char buff[5]; /* store minutes from 2000.0 */ *(long *)buff = (long)( (e[i].t - 2451545.0) * 1440.); buff[4] = (char)( (e[i].event_type & 7) | (e[i].sat << 3)); fwrite( buff, 1, 5, data_file); } fclose( data_file); } return( 0); }