From d0b6781beeffe75dad099ed7a6a6d93766c3fa71 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Fri, 23 Apr 2004 02:32:55 +0000 Subject: "" svn path=/trunk/; revision=1628 --- externals/grill/flext/source/fllib.cpp | 68 ++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 28 deletions(-) (limited to 'externals/grill/flext/source/fllib.cpp') diff --git a/externals/grill/flext/source/fllib.cpp b/externals/grill/flext/source/fllib.cpp index 203d65e3..203f4aa9 100755 --- a/externals/grill/flext/source/fllib.cpp +++ b/externals/grill/flext/source/fllib.cpp @@ -324,38 +324,50 @@ flext_hdr *flext_obj::obj_new(const t_symbol *s,int _argc_,t_atom *argv) if(lo->argc > FLEXT_MAXNEWARGS) { ERRINTERNAL(); ok = false; } #endif - if(argc == lo->argc) { - for(int i = 0; /*ok &&*/ i < lo->argc; ++i) { - switch(lo->argv[i]) { + int misnum = 0; + if(argc > lo->argc) { ok = false; misnum = 1; } + + for(int i = 0; ok && i < lo->argc; ++i) { + switch(lo->argv[i]) { #if FLEXT_SYS != FLEXT_SYS_PD - case FLEXTTPN_INT: - if(IsInt(argv[i])) args[i] = argv[i]; - else if(flext::IsFloat(argv[i])) flext::SetInt(args[i],(int)flext::GetFloat(argv[i])); - else ok = false; - break; + case FLEXTTPN_INT: + case FLEXTTPN_DEFINT: + if(i >= argc) + if(lo->argv[i] == FLEXTTPN_DEFINT) SetInt(args[i],0); + else { misnum = -1,ok = false; break; } + else if(IsInt(argv[i])) args[i] = argv[i]; + else if(IsFloat(argv[i])) SetInt(args[i],(int)GetFloat(argv[i])); + else ok = false; + break; #endif - case FLEXTTPN_FLOAT: - if(IsInt(argv[i])) flext::SetFloat(args[i],(float)flext::GetInt(argv[i])); - else if(flext::IsFloat(argv[i])) args[i] = argv[i]; - else ok = false; - break; - case FLEXTTPN_SYM: - // \todo shall we analyze the patcher args????... should already be done! - if(IsSymbol(argv[i])) + case FLEXTTPN_FLOAT: + case FLEXTTPN_DEFFLOAT: + if(i >= argc) + if(lo->argv[i] == FLEXTTPN_DEFFLOAT) SetFloat(args[i],0); + else { misnum = -1,ok = false; break; } + else if(IsInt(argv[i])) SetFloat(args[i],(float)GetInt(argv[i])); + else if(IsFloat(argv[i])) args[i] = argv[i]; + else ok = false; + break; + case FLEXTTPN_SYM: + case FLEXTTPN_DEFSYM: + // \todo shall we analyze the patcher args????... should already be done! + if(i >= argc) + if(lo->argv[i] == FLEXTTPN_DEFSYM) SetSymbol(args[i],sym__); + else { misnum = -1,ok = false; break; } + else if(IsSymbol(argv[i])) // SetSymbol(args[i],GetParamSym(GetSymbol(argv[i]),NULL)); - args[i] = argv[i]; - else ok = false; - break; - } - } - - if(!ok) - post("%s: Creation arguments do not match",GetString(s)); - } - else { - error("%s: %s creation arguments",GetString(s),argc < lo->argc?"Not enough":"Too many"); - ok = false; + args[i] = argv[i]; + else ok = false; + break; + } } + + if(!ok) + if(misnum) + error("%s: %s creation arguments",GetString(s),misnum < 0?"Not enough":"Too many"); + else + error("%s: Creation arguments do not match",GetString(s)); } if(ok) { -- cgit v1.2.1