OSDN Git Service

client 0.6.1 release
[unagi/old-svn-converted.git] / client / tag / 0.6.1 / anago / script_common.c
1 #include <assert.h>
2 #include <stdio.h>
3 #include <squirrel.h>
4 #include <sqstdio.h>
5 #include <sqstdaux.h>
6 #include "type.h"
7 #include "squirrel_wrap.h"
8 #include "script_common.h"
9
10 SQInteger script_nop(HSQUIRRELVM v)
11 {
12         return 0;
13 }
14
15 SQInteger range_check(HSQUIRRELVM v, const char *name, long target, const struct range *range)
16 {
17         if((target < range->start) || (target > range->end)){
18                 printf("%s range must be 0x%06x to 0x%06x", name, (int) range->start, (int) range->end);
19                 return sq_throwerror(v, "script logical error");
20         }
21         return 0;
22 }
23
24 SQInteger cpu_write_check(HSQUIRRELVM v)
25 {
26         static const struct range range_address = {0x4000, 0x10000};
27         static const struct range range_data = {0x0, 0xff};
28         long address, data;
29         SQRESULT r = qr_argument_get(v, 2, &address, &data);
30         if(SQ_FAILED(r)){
31                 return r;
32         }
33         r = range_check(v, "address", address, &range_address);
34         if(SQ_FAILED(r)){
35                 return r;
36         }
37         return range_check(v, "data", data, &range_data);
38 }
39
40 SQInteger script_require(HSQUIRRELVM v)
41 {
42         if(sq_gettop(v) != 2){
43                 return sq_throwerror(v, "argument number error");
44         }
45         if(sq_gettype(v, 2) != OT_STRING){
46                 return sq_throwerror(v, "argument type error");
47         }
48         const SQChar *file;
49         if(SQ_FAILED(sq_getstring(v, 2, &file))){
50                 return sq_throwerror(v, "require error");
51         }
52         if(SQ_FAILED(sqstd_dofile(v, _SC(file), SQFalse, SQTrue))){
53                 return sq_throwerror(v, "require error");
54         }
55         return 0;
56 }