Exemplo n.º 1
0
namespace Ginger {

Ref * cgiValue( Ref * pc, class MachineClass * vm ) {
	if ( vm->count != 1 ) throw Ginger::Mishap( "ArgsMismatch" );
	
	Ref r = vm->fastPeek();
	if ( !IsStringKind( r ) ) throw Ginger::Mishap( "Non-string argument needed for getEnv" );	
	Ref * str_K = RefToPtr4( r );
	
	char * fieldname = reinterpret_cast< char * >( str_K + 1 );
	const char * value = vm->getAppContext().cgiValue( fieldname );
	vm->fastPeek() = vm->heap().copyString( pc, value );
	return pc;
}
SysInfo infoCgiValue( 
    SysNames( "cgiValue" ), 
    Arity( 1 ), 
    Arity( 1 ), 
    cgiValue, 
    "Returns value of a CGI " 
);

} // namespace Ginger
Exemplo n.º 2
0
namespace Ginger {

Ref * sysIsLowerCase( Ref * pc, class MachineClass * vm ) {
    if ( vm->count != 1 ) throw Ginger::Mishap( "Wrong number of arguments" );
    
    Ref r = vm->fastPeek();
    if ( IsCharacter( r ) ) {
        vm->fastPeek() = islower( CharacterToChar( r ) ) ? SYS_TRUE : SYS_FALSE;
    } else if ( IsString( r ) ) {
        Ref * str_K = RefToPtr4( r );
        char * s = reinterpret_cast< char * >( &str_K[ 1 ] );
        vm->fastPeek() = SYS_TRUE;
        while ( *s != 0 ) {
            if ( not islower( *s++ ) ) {
                vm->fastPeek() = SYS_FALSE;
                break;
            }
        }
    } else {
        throw Ginger::Mishap( "Non-character argument" ).culprit( "Argument", refToShowString( r ) );  
    } 
    
    return pc;
}
SysInfo infoIsLowerCase( 
    SysNames( "isLowerCase" ), 
    Arity( 1 ), 
    Arity( 1 ), 
    sysIsLowerCase, 
    "Returns true for a lower case character or string, otherwise false" 
);

Ref * sysIsUpperCase( Ref * pc, class MachineClass * vm ) {
    if ( vm->count != 1 ) throw Ginger::Mishap( "Wrong number of arguments" );
    
    Ref r = vm->fastPeek();
    if ( IsCharacter( r ) ) {
        vm->fastPeek() = isupper( CharacterToChar( r ) ) ? SYS_TRUE : SYS_FALSE;
    } else if ( IsString( r ) ) {
        Ref * str_K = RefToPtr4( r );
        char * s = reinterpret_cast< char * >( &str_K[ 1 ] );
        vm->fastPeek() = SYS_TRUE;
        while ( *s != 0 ) {
            if ( not isupper( *s++ ) ) {
                vm->fastPeek() = SYS_FALSE;
                break;
            }
        }
    } else {
        throw Ginger::Mishap( "Non-character argument" ).culprit( "Argument", refToShowString( r ) );  
    }     
    return pc;
}
SysInfo infoIsUpperCase( 
    SysNames( "isUpperCase" ), 
    Arity( 1 ), 
    Arity( 1 ), 
    sysIsUpperCase, 
    "Returns true for a upper case character or string, otherwise false" 
);

}