int main(int argc, char * argv[]){ int dev; int i; init_member(); // init int re_input = 0; // 1이면 재입력 로직 printf(MY_STRING "argc : %d\n",argc); if(argc != 4){ printf(MY_STRING "Please Input the right parameter! \n"); printf(MY_STRING "ex) %s -> 1 + 2\n", argv[0]); return -1; } do{ if(re_input == 0){ str_size = strlen(argv[1]); operator = argv[2][0]; if(str_size > MAX_DIGIT){ printf(MY_STRING "Warning! 4 Digit number only\n"); str_size = MAX_DIGIT; } for(i=0; i<str_size; i++){ data[i] = argv[1][i]; temp[i] = argv[1][i]; data2[i] = argv[3][i]; temp2[i] = argv[3][i]; } }else{ init_member(); // init scanf("%s", data); str_size = strlen(data); strcpy(temp, data); scanf("%c", &operator); getchar(); sacnf("%s", data2); strcpy(temp2, data2); } n1 = atoi(temp); n2 = atoi(temp2); if(operator=='+') { sprintf(data,"%04d",(atoi(data)+atoi(data2))); answer = n1 + n2; } else if(operator=='-') { sprintf(data,"%04d",(atoi(data)-atoi(data2))); answer = n1 - n2; } else if(operator=='x') { sprintf(data,"%04d",(atoi(data)*atoi(data2))); answer = n1 * n2; } else if(operator=='/') { sprintf(data,"%04d",(atoi(data)/atoi(data2))); answer = n1 / n2; } else if(operator=='%') { sprintf(data,"%04d",(atoi(data)%atoi(data2))); answer = n1 % n2; } else { printf("OPERATOR ERROR!\n"); return -1; } if(answer <0 || answer > 9999){ re_input = 1; // 범위가 넘어가는 경우에 재 입력 작업 }else{ re_input = 0; // 범위가 넘어가지 않으면 재입력 작업 하지 않는다 } strcpy(ans,data); for(i=0; i<str_size; i++){ if((argv[1][i] < 0x30) || (argv[1][i] > 0x39) ){ printf(MY_STRING "Error! Invalid Value!\n"); return -1; } data[i] = data[i] - 0x30; } }while(re_input); dev = open(FND_DEVICE, O_RDWR); if(dev < 0){ printf(MY_STRING "Device open error! : %s\n", FND_DEVICE); exit(1); } retval = write(dev, &data, 4); if(retval <0){ printf(MY_STRING "Write Error!\n"); return -1; } memset(data, 0, sizeof(data)); memset(data2, 0, sizeof(data2)); sleep(1); retval = read(dev, &data, 4); if(retval < 0){ printf(MY_STRING "Read Error!\n"); return -1; } printf(MY_STRING "Current FND Value : "); printf("%d %c %d = %d\n",n1,operator,n2,answer); close(dev); return 0; }
void Global_as::registerClasses() { registerNatives(*this); function_class_init(*this, NSV::CLASS_FUNCTION); initObjectClass(_objectProto, *this, NSV::CLASS_OBJECT); string_class_init(*this, NSV::CLASS_STRING); array_class_init(*this, NSV::CLASS_ARRAY); // No idea why, but it seems there's a NULL _global.o // defined at player startup... // Probably due to the AS-based initialization // Not enumerable but overridable and deletable. // as_value nullVal; nullVal.set_null(); init_member("o", nullVal, PropFlags::dontEnum); VM& vm = getVM(); // _global functions. // These functions are only available in SWF6+, but this is just // because SWF5 or lower did not have a "_global" // reference at all. init_member("ASnative", createFunction(global_asnative)); init_member("ASconstructor", createFunction(global_asconstructor)); init_member("ASSetPropFlags", vm.getNative(1, 0)); init_member("ASSetNative", vm.getNative(4, 0)); init_member("ASSetNativeAccessor", vm.getNative(4, 1)); init_member("AsSetupError", createFunction(global_assetuperror)); init_member("updateAfterEvent", vm.getNative(9, 0)); init_member("trace", vm.getNative(100, 4)); init_member("setInterval", vm.getNative(250, 0)); init_member("clearInterval", vm.getNative(250, 1)); init_member("setTimeout", vm.getNative(250, 2)); // This is an odd function with no properties. There ought to be // a better way of implementing this. See also TextFormat.getTextExtent. as_function* edc = createFunction(global_enableDebugConsole); edc->clearProperties(); init_member("enableDebugConsole", edc); init_member("showRedrawRegions", vm.getNative(1021, 1)); init_member("clearTimeout", getMember(*this, getURI(vm, "clearInterval"))); _classes.declareAll(avm1Classes()); // SWF8 visibility: const ObjectURI& flash = getURI(vm, "flash"); flash_package_init(*this, flash); init_member("escape", vm.getNative(100, 0)); init_member("unescape", vm.getNative(100, 1)); init_member("parseInt", vm.getNative(100, 2)); init_member("parseFloat", vm.getNative(100, 3)); init_member("isNaN", vm.getNative(200, 18)); init_member("isFinite", vm.getNative(200, 19)); init_member("NaN", as_value(NaN)); init_member("Infinity", as_value( std::numeric_limits<double>::infinity())); loadExtensions(); }