Show
Ignore:
Timestamp:
09/29/08 21:50:19 (6 years ago)
Author:
fujidig
Message:

文字列型変数をメモリ操作命令に対応。
HSPの文字列型変数の動作をエミュレートするように(代入しても内容と0の後ろに元の内容が残っているなど)

Location:
lang/javascript/hsp-on-js/trunk/src
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/hsp-on-js/trunk/src/builtin-funcs.js

    r20195 r20224  
    116116        0x0a: function sdim(v, strLength, l0, l1, l2, l3) { 
    117117                this.scanArgs(arguments, 'aNNNNN'); 
     118                strLength = strLength ? strLength.toIntValue()._value : 64; 
    118119                l0 = l0 ? l0.toIntValue()._value : 0; 
    119120                l1 = l1 ? l1.toIntValue()._value : 0; 
    120121                l2 = l2 ? l2.toIntValue()._value : 0; 
    121122                l3 = l3 ? l3.toIntValue()._value : 0; 
    122                 v.variable.dim(VarType.STR, l0, l1, l2, l3); 
     123                var ary = new StrArray(); 
     124                ary.strDim(strLength, l0, l1, l2, l3); 
     125                v.variable.value = ary; 
    123126        }, 
    124127        0x0b: function foreach(label) { 
  • lang/javascript/hsp-on-js/trunk/src/hsp-array.js

    r20195 r20224  
    108108}; 
    109109 
     110HSPArray.lengthToIndices = function lengthToIndices(l0, l1, l2, l3) { 
     111        var indices = [l0, l1, l2, l3]; 
     112        // 後ろから 0 を取り除く 
     113        var i = indices.length - 1; 
     114        while(i >= 0) { 
     115                if(indices[i]) break; 
     116                indices.pop(); 
     117                i --; 
     118        } 
     119        for(var i = 0; i < indices.length; i ++) { 
     120                if(indices[i] < 0) { 
     121                        throw new HSPError(ErrorCode.ILLEGAL_FUNCTION, '配列の要素数に負の数が指定されています'); 
     122                } 
     123                if(indices[i] != 0) { 
     124                        indices[i] --; 
     125                } 
     126        } 
     127        return indices; 
     128} 
     129 
    110130if(typeof HSPonJS != 'undefined') { 
    111131        HSPonJS.HSPArray = HSPArray; 
  • lang/javascript/hsp-on-js/trunk/src/run-in-shell

    r20137 r20224  
    5252end 
    5353 
     54if ARGV.delete('--shell') 
     55  filenames << '-' 
     56end 
     57 
    5458if ARGV.delete('--rhino') 
    5559  system(*%w[rhino -w]+filenames.map{|i|["-f", i]}.flatten) 
  • lang/javascript/hsp-on-js/trunk/src/run-in-shell.js

    r20195 r20224  
    2121function main(){ 
    2222        var data = [ 
    23 '\x48\x53\x50\x33\x01\x03\x00\x00\x01\x00\x00\x00\xe9\x00\x00\x00', 
    24 '\x60\x00\x00\x00\x66\x00\x00\x00\xc6\x00\x00\x00\x08\x00\x00\x00', 
    25 '\xce\x00\x00\x00\x04\x00\x00\x00\xd2\x00\x00\x00\x17\x00\x00\x00', 
    26 '\xe9\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00\x00\x00\x00\x00', 
    27 '\xe9\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00\x00\x00\x00\x00', 
    28 '\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 
    29 '\x08\x20\x21\x00\x01\x00\x00\x00\x04\x40\xff\x00\x04\x40\x04\x00', 
    30 '\x09\x20\x0f\x00\x01\x00\x00\x00\x01\x20\x00\x00\x00\x00\x08\x00', 
    31 '\x04\x80\x11\x22\x33\x44\x04\x40\x55\x00\x08\x20\x20\x00\x01\x00', 
    32 '\x00\x00\x01\x40\x00\x00\x04\x40\x04\x00\x04\x40\x00\x00\x04\x40', 
    33 '\x01\x00\x09\x20\x0f\x00\x0d\x00\x00\x01\x00\x00\x28\x00\x01\x00', 
    34 '\x00\x00\x04\x40\x10\x00\x00\x00\x29\x00\x0f\x20\x11\x00\x0f\x20', 
    35 '\x00\x00\x07\x00\x00\x00\x74\x2e\x68\x73\x70\x00\x61\x00\x2d\x00', 
    36 '\x00\x00\xfe\x00\x00\x00\x00\x00\x00\x08\x04\x00\x09\x0c\x0c\x00', 
    37 '\x06\xfd\x06\x00\x00\x00\x00\xff\xff' 
     23'\x48\x53\x50\x33\x01\x03\x00\x00\x01\x00\x00\x00\xaf\x00\x00\x00', 
     24'\x60\x00\x00\x00\x30\x00\x00\x00\x90\x00\x00\x00\x08\x00\x00\x00', 
     25'\x98\x00\x00\x00\x04\x00\x00\x00\x9c\x00\x00\x00\x13\x00\x00\x00', 
     26'\xaf\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00', 
     27'\xaf\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00', 
     28'\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 
     29'\x0f\x20\x0a\x00\x01\x00\x00\x00\x04\x40\x64\x00\x08\x20\x21\x00', 
     30'\x01\x00\x00\x00\x04\x40\x2a\x00\x04\x40\x41\x00\x09\x20\x0f\x00', 
     31'\x01\x00\x00\x00\x0f\x20\x11\x00\x0f\x20\x00\x00\x07\x00\x00\x00', 
     32'\x74\x2e\x68\x73\x70\x00\x61\x00\x12\x00\x00\x00\xfe\x00\x00\x00', 
     33'\x00\x00\x00\x06\x08\x04\x06\xfd\x06\x00\x00\x00\x00\xff\xff' 
    3834        ].join(''); 
    3935 
     
    4945        var evaluator = new Evaluator(axdata, sequence); 
    5046        evaluator.evaluate(); 
     47        return evaluator; 
    5148} 
    5249 
  • lang/javascript/hsp-on-js/trunk/src/str-array.js

    r20137 r20224  
    11function StrArray() { 
    22        HSPArray.call(this); 
    3         this.values = [new StrValue('')]; 
     3        this.values = [Utils.strTimes("\0", 64)]; 
    44} 
    55 
     
    77 
    88Utils.objectExtend(StrArray.prototype, { 
     9        assign: function assign(indices, rhs) { 
     10                this.expand(indices); 
     11                var offset = this.getOffset(indices); 
     12                var value = this.values[offset]; 
     13                rhs = rhs.toStrValue(); 
     14                value = rhs._value + "\0" + value.slice(rhs._value.length + 1); 
     15                this.values[offset] = value; 
     16        }, 
    917        expand: function expand(indices) { 
    1018                var isExpanded = HSPArray.prototype.expand.call(this, indices); 
     
    1220                        var newLen = this.allLength(); 
    1321                        for(var i = this.values.length; i < newLen; i ++) { 
    14                                 this.values[i] = new StrValue(''); 
     22                                this.values[i] = Utils.strTimes("\0", 64); 
    1523                        } 
    1624                } 
    1725                return isExpanded; 
    1826        }, 
     27        at: function at(indices) { 
     28                var offset = this.getOffset(indices); 
     29                if(offset == null) throw new HSPError(ErrorCode.ARRAY_OVERFLOW); 
     30                return new StrValue(Utils.getCStr(this.values[offset])); 
     31        }, 
    1932        getType: function getType() { 
    2033                return VarType.STR; 
     34        }, 
     35        strDim: function strDim(strLength, l0, l1, l2, l3) { 
     36                if(strLength == undefined || strLength < 64) { 
     37                        strLength = 64; 
     38                } 
     39                var indices = HSPArray.lengthToIndices(l0, l1, l2, l3); 
     40                HSPArray.prototype.expand.call(this, indices); 
     41                var len = this.allLength(); 
     42                for(var i = 0; i < len; i ++) { 
     43                        this.values[i] = Utils.strTimes("\0", strLength); 
     44                } 
     45        }, 
     46        getbyte: function getbyte(indices, bytesOffset) { 
     47                var offset = this.getOffset(indices); 
     48                if(offset == null) throw new HSPError(ErrorCode.ARRAY_OVERFLOW); 
     49                if(!(0 <= bytesOffset && bytesOffset < this.values[offset].length)) { 
     50                        throw new HSPError(ErrorCode.ILLEGAL_FUNCTION); 
     51                } 
     52                return this.values[offset].charCodeAt(bytesOffset); 
     53        }, 
     54        setbyte: function setbyte(indices, bytesOffset, val) { 
     55                var offset = this.getOffset(indices); 
     56                if(offset == null) throw new HSPError(ErrorCode.ARRAY_OVERFLOW); 
     57                var str = this.values[offset]; 
     58                if(!(0 <= bytesOffset && bytesOffset < str.length)) { 
     59                        throw new HSPError(ErrorCode.ILLEGAL_FUNCTION); 
     60                } 
     61                this.values[offset] = str.slice(0, bytesOffset) + String.fromCharCode(val & 0xff) + str.slice(bytesOffset + 1); 
    2162        } 
    2263}); 
  • lang/javascript/hsp-on-js/trunk/src/t.hsp

    r20195 r20224  
    1 memset a, 0xff, 4 
     1sdim a, 100 
     2memset a, '*', 65 
    23mes a 
    3  
    4 a = 0x44332211, 0x55 
    5 memcpy a, a, 4, 0, 1 
    6 mes str(a, 16) 
    7  
  • lang/javascript/hsp-on-js/trunk/src/variable.js

    r20195 r20224  
    6969                        throw new HSPError(ErrorCode.ILLEGAL_FUNCTION, '異常な変数型の値です'); 
    7070                } 
    71                 var indices = [l0, l1, l2, l3]; 
    72                 // 後ろから 0 を取り除く 
    73                 var i = indices.length - 1; 
    74                 while(i >= 0) { 
    75                         if(indices[i]) break; 
    76                         indices.pop(); 
    77                         i --; 
    78                 } 
    79                 for(var i = 0; i < indices.length; i ++) { 
    80                         if(indices[i] < 0) { 
    81                                 throw new HSPError(ErrorCode.ILLEGAL_FUNCTION, '配列の要素数に負の数が指定されています'); 
    82                         } 
    83                         if(indices[i] != 0) { 
    84                                 indices[i] --; 
    85                         } 
    86                 } 
     71                var indices = HSPArray.lengthToIndices(l0, l1, l2, l3); 
    8772                ary.expand(indices); 
    8873                this.value = ary;