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
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" ); }