예제 #1
0
void CompilGenerator::generateEnumerationPrefix(const EnumerationSPtr& pEnumeration)
{
    if (pEnumeration->structure().lock())
    {
        if (!table().isEmpty())
        {
            eot(declarationStream);
            eol(declarationStream);
        }
        bAddNewLine = true;
    }

    switch (pEnumeration->cast().value())
    {
        case CastableType::ECast::kWeak: 
            line() << "weak ";
            break;
        case CastableType::ECast::kStrong: 
            line() << "strong ";
            break;
        default:
            assert(false && "unknown cast type");
    }
   
    line()  << "enum";
    TypeSPtr pType = pEnumeration->parameterType().lock();
    if (pType)
    {
        line()  << "<" << pType->name()->value() << ">";
    }
    
    line()  << " " << pEnumeration->name()->value();
    openBlock(declarationStream);
}
예제 #2
0
void get_midi_info(MIDI *midi, midi_info *mi)
{
    dword max_dt = 0;
    mi->tempo_changes = 0;
    bool gottempo = false;
    
    if(midi==NULL)
        goto done;
        
    for(int i=0; midi->track[i].len>0; i++)
    {
        byte *data = midi->track[i].data;
        
        if(data==NULL)
            break;
            
        dword total_dt=0;
        mi->event=0;
        mi->running_status = 0;
        // tempo info should only be in first track, but sometimes it isn't
        bool gettempo = (i==0)||(!gottempo);
        
        while(!eot(mi) && data - midi->track[i].data < midi->track[i].len)
        {
            parse_mtrk(&data,mi);
            total_dt += mi->dt;
            
            if(gettempo && mi->event==0xFF && mi->type==0x51 && mi->tempo_changes<MAX_TEMPO_CHANGES)
            {
                mi->tempo[mi->tempo_changes] = tempo(mi->buf);
                int tempo_c = mi->tempo_c[mi->tempo_changes] = beats(total_dt,midi->divisions);
                
                if(mi->tempo_changes==0 && tempo_c!=0)              // make sure there is a tempo at beat 0
                {
                    mi->tempo_c[0] = 0;
                    mi->tempo_c[1] = tempo_c;
                    mi->tempo[1] = mi->tempo[0];
                    mi->tempo_changes++;
                }
                
                mi->tempo_changes++;
                gottempo=true;
            }
        }
        
        max_dt = zc_max(max_dt,total_dt);
    }
    
done:

    if(mi->tempo_changes==0)                                  // then guess
    {
        mi->tempo_changes=1;
        mi->tempo[0]=120.0;
        mi->tempo_c[0]=0;
    }
    
    mi->len_beats = (midi==NULL) ? 0 : beats(max_dt,midi->divisions);
    mi->len_sec = (midi==NULL) ? 0 : runtime(mi->len_beats,mi);
}
예제 #3
0
void CompilGenerator::generateStructureSuffix(const StructureSPtr&)
{
    eot(declarationStream);
    closeBlock(declarationStream);
    eol(declarationStream);
    bAddNewLine = false;
}
예제 #4
0
bool TapePlayer::play()
{
  if(eot() && !chooseNewTape()) return false;
  
  TapeStep* current = &(tape->strip[pc++]);
  digitalWrite(pin, current->lightOn ? HIGH : LOW);
  
  process->hibernate(random(current->minDelay,current->maxDelay));
  return true;
}
예제 #5
0
bool Tokenizer::expect(Token::Type type, const char* text)
{
    if (eot())
        return false;

    if (check(type, text))
        return true;

    return false;
}
예제 #6
0
void get_midi_text(MIDI *midi, midi_info *mi, char *text)
// must have called get_midi_info() first
{
    byte buf[1024];
    char *out = text;
    int length=4096;
    dword nbytes;
    
    text[0] = 0;
    
    for(int i=0; midi->track[i].len>0; i++)
    {
        byte *data = midi->track[i].data;
        
        if(data==NULL)
            break;
            
        mi->event=0;
        mi->running_status = 0;
        
        while(!eot(mi) && data - midi->track[i].data < midi->track[i].len)
        {
            parse_mtrk(&data,mi);
            
            if(mi->event==0xFF)
            {
                nbytes=zc_min(mi->nbytes, 1023);
                memcpy(buf,mi->buf,nbytes);
                buf[nbytes]=0;
                
                if(decode_text_event(out,length,mi->type,buf))
                {
                    length-=strlen(out);
                    out+=strlen(out);
                }
            }
        }
    }
}
예제 #7
0
파일: spa.c 프로젝트: HEROES-GSFC/SAS
void calculate_eot_and_sun_rise_transit_set(spa_data *spa)
{
    spa_data sun_rts;
    double nu, m, h0, n;
    double alpha[JD_COUNT], delta[JD_COUNT];
    double m_rts[SUN_COUNT], nu_rts[SUN_COUNT], h_rts[SUN_COUNT];
    double alpha_prime[SUN_COUNT], delta_prime[SUN_COUNT], h_prime[SUN_COUNT];
    double h0_prime = -1*(SUN_RADIUS + spa->atmos_refract);
    int i;

    sun_rts  = *spa;
    m        = sun_mean_longitude(spa->jme);
    spa->eot = eot(m, spa->alpha, spa->del_psi, spa->epsilon);

    sun_rts.hour = sun_rts.minute = sun_rts.second = 0;
    sun_rts.timezone = 0.0;

    sun_rts.jd = julian_day (sun_rts.year, sun_rts.month,  sun_rts.day,
                             sun_rts.hour, sun_rts.minute, sun_rts.second, sun_rts.timezone);

    calculate_geocentric_sun_right_ascension_and_declination(&sun_rts);
    nu = sun_rts.nu;

    sun_rts.delta_t = 0;
    sun_rts.jd--;
    for (i = 0; i < JD_COUNT; i++) {
        calculate_geocentric_sun_right_ascension_and_declination(&sun_rts);
        alpha[i] = sun_rts.alpha;
        delta[i] = sun_rts.delta;
        sun_rts.jd++;
    }

    m_rts[SUN_TRANSIT] = approx_sun_transit_time(alpha[JD_ZERO], spa->longitude, nu);
    h0 = sun_hour_angle_at_rise_set(spa->latitude, delta[JD_ZERO], h0_prime);

    if (h0 >= 0) {

        approx_sun_rise_and_set(m_rts, h0);

        for (i = 0; i < SUN_COUNT; i++) {

            nu_rts[i]      = nu + 360.985647*m_rts[i];

            n              = m_rts[i] + spa->delta_t/86400.0;
            alpha_prime[i] = rts_alpha_delta_prime(alpha, n);
            delta_prime[i] = rts_alpha_delta_prime(delta, n);

            h_prime[i]     = limit_degrees180pm(nu_rts[i] + spa->longitude - alpha_prime[i]);

            h_rts[i]       = rts_sun_altitude(spa->latitude, delta_prime[i], h_prime[i]);
        }

        spa->srha = h_prime[SUN_RISE];
        spa->ssha = h_prime[SUN_SET];
        spa->sta  = h_rts[SUN_TRANSIT];

        spa->suntransit = dayfrac_to_local_hr(m_rts[SUN_TRANSIT] - h_prime[SUN_TRANSIT] / 360.0,
                                              spa->timezone);

        spa->sunrise = dayfrac_to_local_hr(sun_rise_and_set(m_rts, h_rts, delta_prime,
                                           spa->latitude, h_prime, h0_prime, SUN_RISE), spa->timezone);

        spa->sunset  = dayfrac_to_local_hr(sun_rise_and_set(m_rts, h_rts, delta_prime,
                                           spa->latitude, h_prime, h0_prime, SUN_SET),  spa->timezone);

    } else spa->srha= spa->ssha= spa->sta= spa->suntransit= spa->sunrise= spa->sunset= -99999;

}
double tcf(int d_,float h_,float long_)     //time correction factor in min
{
	return eot(d_,h_) - 4 *long_ + 60 * Round(long_/15);
}
예제 #9
0
void CompilGenerator::generateEnumerationSuffix(const EnumerationSPtr&)
{
    eot(declarationStream);
    closeBlock(declarationStream);
}
예제 #10
0
void CompilGenerator::generateFactorySuffix(const FactorySPtr&)
{
    eot(declarationStream);
    closeBlock(declarationStream);
}
예제 #11
0
void CompilGenerator::generateSpecimenSuffix(const SpecimenSPtr&)
{
    eot(declarationStream);
    closeBlock(declarationStream);
}
예제 #12
0
파일: lex.yy.c 프로젝트: kjseefried/pm3
yylex(){
   int nstr; extern int yyprevious;
   while((nstr = yylook()) >= 0)
yyfussy: switch(nstr){
case 0:
   if(yywrap()) return(0); break;
case 1:
	{eot(); return(PLUS);}
break;
case 2:
	{eot(); return(MINUS);}
break;
case 3:
	{eot(); return(ASTERISK);}
break;
case 4:
	{eot(); return(SLASH);}
break;
case 5:
	{eot(); return(ASSIGN);}
break;
case 6:
	{eot(); return(AMPERSAND);}
break;
case 7:
	{eot(); return(DOT);}
break;
case 8:
	{eot(); return(COMMA);}
break;
case 9:
	{eot(); return(SEMICOLON);}
break;
case 10:
	{eot(); return(LPAREN);}
break;
case 11:
	{eot(); return(LBRACKET);}
break;
case 12:
	{eot(); return(LBRACE);}
break;
case 13:
	{eot(); return(UPARROW);}
break;
case 14:
	{eot(); return(EQUAL);}
break;
case 15:
             {eot(); return(RARROW);}
break;
case 16:
	{eot(); return(SHARP);}
break;
case 17:
	{eot(); return(LESS);}
break;
case 18:
	{eot(); return(GREATER);}
break;
case 19:
	{eot(); return(LSEQUAL);}
break;
case 20:
             {eot(); return(SUBTYPE);}
break;
case 21:
	{eot(); return(GREQUAL);}
break;
case 22:
	{eot(); return(DOTDOT);}
break;
case 23:
	{eot(); return(COLON);}
break;
case 24:
	{eot(); return(RPAREN);}
break;
case 25:
	{eot(); return(RBRACKET);}
break;
case 26:
	{eot(); return(RBRACE);}
break;
case 27:
	{eot(); return(BAR);}
break;
case 28:
{PTRKEYWORDENTRY tempp;
				 eot();
				 if ((tempp=lookup(yytext))!=NULL){
					return(tempp->lexval);}
				 else {
					strcpy(lastident, yytext);
					return(IDENT);
				     }
				}
break;
case 29:
       {eot(); return(CARD_CONST);}
break;
case 30:
{eot(); return(REAL_CONST);}
break;
case 31:
{
				 eot();
				 return(STR_CONST);}
break;
case 32:
{
				 eot();
				 return(STR_CONST);}
break;
case 33:
 		{eot(); eol();}
break;
case 34:
	{eot(); }
break;
case 35:
	/* other spaces */ /* putchar(' ')*/ eot();
break;
case 36:
{eot(); BEGIN Com;  comdepth=1; }
break;
case 37:
{eot(); comdepth++; }
break;
case 38:
{eot(); comdepth--; if (comdepth==0) BEGIN Prog; }
break;
case 39:
{eot(); BEGIN Prag;  pragdepth=1; }
break;
case 40:
{eot(); pragdepth++; }
break;
case 41:
{eot(); pragdepth--; if (pragdepth==0) BEGIN Prog; }
break;
case 42:
 		{eot(); eol();}
break;
case 43:
 		{eot(); eol();}
break;
case 44:
	{eot();}
break;
case 45:
	{eot();}
break;
case 46:
	{yyless(0); BEGIN Prog;}
break;
case -1:
break;
default:
   fprintf(yyout,"bad switch yylook %d",nstr);
} return(0); }