Changeset 77 for trunk/orca

Show
Ignore:
Timestamp:
03/08/06 14:59:29 (3 years ago)
Author:
volker
Message:

remove-each added

Location:
trunk/orca
Files:
1 added
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/orca/boot.c

    r71 r77  
    22 
    33static char _natives[] = 
    4   "sizeof: native []\n" 
    5   "comment: native [value]\n" 
     4  "sizeof: native [] \n" 
     5  "comment: native [value] \n" 
    66  "set: native [\n" 
    7   "    word\n" 
    8   "    value\n" 
    9   "]\n" 
     7  "    word \n" 
     8  "    value\n" 
     9  "] \n" 
    1010  "unset: native [\n" 
    1111  "    word [word! block!]\n" 
    12   "]\n" 
    13   "value?: native [val]\n" 
    14   "any-word?: native [val]\n" 
     12  "] \n" 
     13  "value?: native [val] \n" 
     14  "any-word?: native [val] \n" 
    1515  "get: native [\n" 
    1616  "    word\n" 
    17   "]\n" 
     17  "] \n" 
    1818  "do: native [\n" 
    19   "    \"Evaluates a block or any other value.\"\n" 
    20   "    value\n" 
     19  "    \"Evaluates a block or any other value.\" \n" 
     20  "    value \n" 
    2121  "    /args arg\n" 
    22   "]\n" 
     22  "] \n" 
    2323  "make: native [\n" 
    24   "    \"Construct new value\"\n" 
    25   "    type\n" 
     24  "    \"Construct new value\" \n" 
     25  "    type \n" 
    2626  "    spec\n" 
    27   "]\n" 
     27  "] \n" 
    2828  "bind: native [\n" 
    29   "    words [block! word!]\n" 
    30   "    known-word [word! object!]\n" 
     29  "    words [block! word!] \n" 
     30  "    known-word [word! object!] \n" 
    3131  "    /copy\n" 
    32   "]\n" 
     32  "] \n" 
    3333  "in: native [\n" 
    34   "    object [object!]\n" 
     34  "    object [object!] \n" 
    3535  "    word [word!]\n" 
    36   "]\n" 
     36  "] \n" 
    3737  "use: native [\n" 
    38   "    words [block! word!]\n" 
    39   "    body [block!]\n" 
    40   "]\n" 
     38  "    words [block! word!] \n" 
     39  "    body [block!]\n" 
     40  "] \n" 
    4141  "copy: native [\n" 
    42   "    value [series! bitset! matrix!]\n" 
    43   "    /part\n" 
    44   "    range [integer! series!]\n" 
     42  "    value [series! bitset! matrix!] \n" 
     43  "    /part \n" 
     44  "    range [integer! series!] \n" 
    4545  "    /deep\n" 
    46   "]\n" 
     46  "] \n" 
    4747  "change: native [\n" 
    48   "    series [series!]\n" 
    49   "    value\n" 
    50   "    /part\n" 
    51   "    range [integer! series!]\n" 
     48  "    series [series!] \n" 
     49  "    value \n" 
     50  "    /part \n" 
     51  "    range [integer! series!] \n" 
    5252  "    /only\n" 
    53   "]\n" 
     53  "] \n" 
    5454  "find: native [\n" 
    55   "    series [series!]\n" 
    56   "    value\n" 
    57   "    /match\n" 
     55  "    series [series!] \n" 
     56  "    value \n" 
     57  "    /match \n" 
    5858  "    /last\n" 
    59   "]\n" 
     59  "] \n" 
    6060  "reduce: native [\n" 
    6161  "    value\n" 
    62   "]\n" 
     62  "] \n" 
    6363  "compose: native [\n" 
    64   "    value\n" 
     64  "    value \n" 
    6565  "    /deep\n" 
    66   "]\n" 
     66  "] \n" 
    6767  "form: native [\n" 
    6868  "    value\n" 
    69   "]\n" 
     69  "] \n" 
    7070  "mold: native [\n" 
    7171  "    value\n" 
    72   "]\n" 
    73   "not: native [value]\n" 
    74   "print: native [value]\n" 
    75   "prin: native [value]\n" 
     72  "] \n" 
     73  "not: native [value] \n" 
     74  "print: native [value] \n" 
     75  "prin: native [value] \n" 
    7676  "clear: native [\n" 
    7777  "    series [series! none!]\n" 
    78   "]\n" 
     78  "] \n" 
    7979  "skip: native [\n" 
    80   "    series [series!]\n" 
     80  "    series [series!] \n" 
    8181  "    offset [number! logic!]\n" 
    82   "]\n" 
     82  "] \n" 
    8383  "at: native [\n" 
    84   "    series [series!]\n" 
     84  "    series [series!] \n" 
    8585  "    index [number! logic!]\n" 
    86   "]\n" 
     86  "] \n" 
    8787  "pick: native [\n" 
    88   "    series [series! tuple! matrix!]\n" 
     88  "    series [series! tuple! matrix!] \n" 
    8989  "    index [number! logic!]\n" 
    90   "]\n" 
     90  "] \n" 
    9191  "poke: native [\n" 
    92   "    value\n" 
    93   "    index [number! logic!]\n" 
     92  "    value \n" 
     93  "    index [number! logic!] \n" 
    9494  "    data\n" 
    95   "]\n" 
     95  "] \n" 
    9696  "select: native [\n" 
    97   "    series [series!]\n" 
    98   "    value\n" 
    99   "]\n" 
    100   "first: native [value]\n" 
    101   "second: native [value]\n" 
    102   "third: native [value]\n" 
    103   "last: native [value [series! tuple!]]\n" 
     97  "    series [series!] \n" 
     98  "    value\n" 
     99  "] \n" 
     100  "first: native [value] \n" 
     101  "second: native [value] \n" 
     102  "third: native [value] \n" 
     103  "last: native [value [series! tuple!]] \n" 
    104104  "reverse: native [\n" 
    105   "    value [series! tuple! pair!]\n" 
    106   "    /part\n" 
     105  "    value [series! tuple! pair!] \n" 
     106  "    /part \n" 
    107107  "    range [integer! series!]\n" 
    108   "]\n" 
     108  "] \n" 
    109109  "parse: native [\n" 
    110   "    input [series!]\n" 
    111   "    rules [block! string! none!]\n" 
    112   "    /all\n" 
     110  "    input [series!] \n" 
     111  "    rules [block! string! none!] \n" 
     112  "    /all \n" 
    113113  "    /case\n" 
    114   "]\n" 
    115   "type?: native [value /word]\n" 
    116   "length?: native [value [series! tuple!]]\n" 
    117   "any-string?: native [value]\n" 
    118   "any-block?: native [value]\n" 
    119   "binary?:\n" 
    120   "bitset?:\n" 
    121   "block?:\n" 
    122   "char?:\n" 
    123   "datatype?:\n" 
    124   "decimal?:\n" 
    125   "error?:\n" 
    126   "file?:\n" 
    127   "function?:\n" 
    128   "getword?:\n" 
    129   "hash?:\n" 
    130   "integer?:\n" 
    131   "issue?:\n" 
    132   "list?:\n" 
    133   "litpath?:\n" 
    134   "litword?:\n" 
    135   "logic?:\n" 
    136   "native?:\n" 
    137   "none?:\n" 
    138   "number?:\n" 
    139   "object?:\n" 
    140   "op?:\n" 
    141   "pair?:\n" 
    142   "paren?:\n" 
    143   "path?:\n" 
    144   "refinement?:\n" 
    145   "series?:\n" 
    146   "setpath?:\n" 
    147   "setword?:\n" 
    148   "string?:\n" 
    149   "tag?:\n" 
    150   "time?:\n" 
    151   "tuple?:\n" 
    152   "unset?:\n" 
    153   "word?: native [value]\n" 
     114  "] \n" 
     115  "type?: native [value /word] \n" 
     116  "length?: native [value [series! tuple!]] \n" 
     117  "any-string?: native [value] \n" 
     118  "any-block?: native [value] \n" 
     119  "binary?: \n" 
     120  "bitset?: \n" 
     121  "block?: \n" 
     122  "char?: \n" 
     123  "datatype?: \n" 
     124  "decimal?: \n" 
     125  "error?: \n" 
     126  "file?: \n" 
     127  "function?: \n" 
     128  "getword?: \n" 
     129  "hash?: \n" 
     130  "integer?: \n" 
     131  "issue?: \n" 
     132  "list?: \n" 
     133  "litpath?: \n" 
     134  "litword?: \n" 
     135  "logic?: \n" 
     136  "native?: \n" 
     137  "none?: \n" 
     138  "number?: \n" 
     139  "object?: \n" 
     140  "op?: \n" 
     141  "pair?: \n" 
     142  "paren?: \n" 
     143  "path?: \n" 
     144  "refinement?: \n" 
     145  "series?: \n" 
     146  "setpath?: \n" 
     147  "setword?: \n" 
     148  "string?: \n" 
     149  "tag?: \n" 
     150  "time?: \n" 
     151  "tuple?: \n" 
     152  "unset?: \n" 
     153  "word?: native [value] \n" 
    154154  "to: native [\n" 
    155   "    type\n" 
    156   "    value\n" 
    157   "]\n" 
    158   "disarm: native [error [error!]]\n" 
    159   "try: native [block [block!]]\n" 
     155  "    type \n" 
     156  "    value\n" 
     157  "] \n" 
     158  "disarm: native [error [error!]] \n" 
     159  "try: native [block [block!]] \n" 
    160160  "catch: native [\n" 
    161   "    block [block!]\n" 
     161  "    block [block!] \n" 
    162162  "    /name word [word!]\n" 
    163   "]\n" 
    164   "throw: native [value /name word [word!]]\n" 
    165   "does: native [value]\n" 
     163  "] \n" 
     164  "throw: native [value /name word [word!]] \n" 
     165  "does: native [value] \n" 
    166166  "func: native [\n" 
    167   "    spec [block!]\n" 
    168   "    body [block!]\n" 
    169   "]\n" 
     167  "    spec [block!] \n" 
     168  "    body [block!]\n" 
     169  "] \n" 
    170170  "if: native [\n" 
    171   "    condition\n" 
     171  "    condition \n" 
    172172  "    then-block [block!]\n" 
    173   "]\n" 
     173  "] \n" 
    174174  "unless: native [\n" 
    175   "    condition\n" 
     175  "    condition \n" 
    176176  "    then-block [block!]\n" 
    177   "]\n" 
     177  "] \n" 
    178178  "either: native [\n" 
    179   "    condition\n" 
    180   "    then-block [block!]\n" 
     179  "    condition \n" 
     180  "    then-block [block!] \n" 
    181181  "    else-block [block!]\n" 
    182   "]\n" 
     182  "] \n" 
    183183  "any: native [\n" 
    184184  "    block [block!]\n" 
    185   "]\n" 
     185  "] \n" 
    186186  "all: native [\n" 
    187187  "    block [block!]\n" 
    188   "]\n" 
     188  "] \n" 
    189189  "loop: native [\n" 
    190   "    count [integer!]\n" 
     190  "    count [integer!] \n" 
    191191  "    block [block!]\n" 
    192   "]\n" 
     192  "] \n" 
    193193  "repeat: native [\n" 
    194   "    'word [word!]\n" 
    195   "    value [integer! series!]\n" 
     194  "    'word [word!] \n" 
     195  "    value [integer! series!] \n" 
    196196  "    block [block!]\n" 
    197   "]\n" 
     197  "] \n" 
    198198  "foreach: native [\n" 
    199   "    'word [word! block!]\n" 
    200   "    data [series!]\n" 
    201   "    body [block!]\n" 
    202   "]\n" 
     199  "    'word [word! block!] \n" 
     200  "    data [series!] \n" 
     201  "    body [block!]\n" 
     202  "] \n" 
     203  "remove-each: native [\n" 
     204  "    'word [word! block!] \n" 
     205  "    data [series!] \n" 
     206  "    body [block!]\n" 
     207  "] \n" 
    203208  "while: native [\n" 
    204   "    cond [block!]\n" 
    205   "    body [block!]\n" 
    206   "]\n" 
     209  "    cond [block!] \n" 
     210  "    body [block!]\n" 
     211  "] \n" 
    207212  "until: native [\n" 
    208213  "    cond [block!]\n" 
    209   "]\n" 
     214  "] \n" 
    210215  "break: native [\n" 
    211   "    /return\n" 
    212   "    value\n" 
    213   "]\n" 
     216  "    /return \n" 
     217  "    value\n" 
     218  "] \n" 
    214219  "return: native [\n" 
    215220  "    value\n" 
    216   "]\n" 
    217   "exit: native []\n" 
     221  "] \n" 
     222  "exit: native [] \n" 
    218223  "back: native [\n" 
    219224  "    series [series!]\n" 
    220   "]\n" 
     225  "] \n" 
    221226  "next: native [\n" 
    222227  "    series [series!]\n" 
    223   "]\n" 
     228  "] \n" 
    224229  "head: native [\n" 
    225230  "    series [series!]\n" 
    226   "]\n" 
     231  "] \n" 
    227232  "tail: native [\n" 
    228233  "    series [series!]\n" 
    229   "]\n" 
     234  "] \n" 
    230235  "index?: native [\n" 
    231236  "    series [series!]\n" 
    232   "]\n" 
     237  "] \n" 
    233238  "head?: native [\n" 
    234239  "    series [series!]\n" 
    235   "]\n" 
     240  "] \n" 
    236241  "tail?: native [\n" 
    237242  "    series [series!]\n" 
    238   "]\n" 
     243  "] \n" 
    239244  "insert: native [\n" 
    240   "    series [series!]\n" 
    241   "    value\n" 
    242   "    /part\n" 
    243   "    range [integer! series!]\n" 
     245  "    series [series!] \n" 
     246  "    value \n" 
     247  "    /part \n" 
     248  "    range [integer! series!] \n" 
    244249  "    /only\n" 
    245   "]\n" 
     250  "] \n" 
    246251  "remove: native [\n" 
    247   "    series [series! none!]\n" 
    248   "    /part\n" 
     252  "    series [series! none!] \n" 
     253  "    /part \n" 
    249254  "    range [integer! series! pair!]\n" 
    250   "]\n" 
     255  "] \n" 
    251256  "lowercase: native [\n" 
    252   "    string [string! file!]\n" 
     257  "    string [string! file!] \n" 
    253258  "    /part range [integer!]\n" 
    254   "]\n" 
     259  "] \n" 
    255260  "uppercase: native [\n" 
    256   "    string [string! file!]\n" 
     261  "    string [string! file!] \n" 
    257262  "    /part range [integer!]\n" 
    258   "]\n" 
     263  "] \n" 
    259264  "load: native [\n" 
    260265  "    source [file! string!]\n" 
    261   "]\n" 
    262   "open: native [what]\n" 
    263   "close: native [port [port!]]\n" 
     266  "] \n" 
     267  "open: native [what] \n" 
     268  "close: native [port [port!]] \n" 
    264269  "read: native [\n" 
    265   "    source [file! port!]\n" 
    266   "    /binary\n" 
    267   "    /lines\n" 
    268   "    /skip length [number!]\n" 
     270  "    source [file! port!] \n" 
     271  "    /binary \n" 
     272  "    /lines \n" 
     273  "    /skip length [number!] \n" 
    269274  "    /part size [number!]\n" 
    270   "]\n" 
     275  "] \n" 
    271276  "write: native [\n" 
    272   "    dest [file! port! object! block!]\n" 
    273   "    value\n" 
    274   "    /binary\n" 
     277  "    dest [file! port! object! block!] \n" 
     278  "    value \n" 
     279  "    /binary \n" 
    275280  "    /append\n" 
    276   "]\n" 
     281  "] \n" 
    277282  "rename: native [\n" 
    278   "    old [file!]\n" 
     283  "    old [file!] \n" 
    279284  "    new [file! string!]\n" 
    280   "]\n" 
     285  "] \n" 
    281286  "delete: native [\n" 
    282287  "    what [file!]\n" 
    283   "]\n" 
     288  "] \n" 
    284289  "exists?: native [\n" 
    285290  "    target [file!]\n" 
    286   "]\n" 
     291  "] \n" 
    287292  "size?: native [\n" 
    288293  "    target [file!]\n" 
    289   "]\n" 
     294  "] \n" 
    290295  "dir?: native [\n" 
    291296  "    target [file!]\n" 
    292   "]\n" 
     297  "] \n" 
    293298  "modified?: native [\n" 
    294299  "    target [file!]\n" 
    295   "]\n" 
    296   "getenv: native [name [string!]]\n" 
     300  "] \n" 
     301  "getenv: native [name [string!]] \n" 
    297302  "call: native [\n" 
    298   "    command [string! block!]\n" 
    299   "    /output\n" 
    300   "    out [string! file! none!]\n" 
     303  "    command [string! block!] \n" 
     304  "    /output \n" 
     305  "    out [string! file! none!] \n" 
    301306  "    /wait\n" 
    302   "]\n" 
    303   "change-dir: native [value]\n" 
    304   "what-dir: native []\n" 
    305   "make-dir: native [path [file!]]\n" 
    306   "clean-path: native [path [file!]]\n" 
    307   "recycle: native [/off /on]\n" 
    308   "halt: native []\n" 
    309   "quit: native []\n" 
     307  "] \n" 
     308  "change-dir: native [value] \n" 
     309  "what-dir: native [] \n" 
     310  "make-dir: native [path [file!]] \n" 
     311  "clean-path: native [path [file!]] \n" 
     312  "recycle: native [/off /on] \n" 
     313  "halt: native [] \n" 
     314  "quit: native [] \n" 
    310315  "protect: native [\n" 
    311316  "    value [word! block!]\n" 
    312   "]\n" 
     317  "] \n" 
    313318  "now: native [\n" 
    314319  "    /time\n" 
    315   "]\n" 
     320  "] \n" 
    316321  "trim: native [\n" 
    317   "    string [string! series!]\n" 
    318   "    /auto\n" 
    319   "    /head\n" 
     322  "    string [string! series!] \n" 
     323  "    /auto \n" 
     324  "    /head \n" 
    320325  "    /tail\n" 
    321   "]\n" 
    322   "dump: native [val]\n" 
    323   "same?: native [v1 v2]\n" 
    324   "equal?: native [v1 v2]\n" 
    325   "strict-equal?: native [v1 v2]\n" 
    326   "greater-or-equal?: native [v1 v2]\n" 
    327   "greater?: native [v1 v2]\n" 
    328   "lesser-or-equal?: native [v1 v2]\n" 
    329   "lesser?: native [v1 v2]\n" 
    330   "odd?: native [number [number! char!]]\n" 
    331   "even?: native [number [number! char!]]\n" 
    332   "abs: native [number [number! pair!]]\n" 
    333   "complement: native [value [logic! integer! bitset!]]\n" 
    334   "negate: native [number [number! pair! bitset! vec3!]]\n" 
    335   "sine: native [value [number!] /radians]\n" 
    336   "cosine: native [value [number!] /radians]\n" 
    337   "arcsine: native [value [number!] /radians]\n" 
    338   "arccosine: native [value [number!] /radians]\n" 
    339   "tangent: native [value [number!] /radians]\n" 
    340   "arctangent: native [value [number!] /radians]\n" 
    341   "square-root: native [value [number!]]\n" 
    342   "random: native [value /seed /only]\n" 
    343   "power: native [x [number!] y [number!]]\n" 
     326  "] \n" 
     327  "dump: native [val] \n" 
     328  "same?: native [v1 v2] \n" 
     329  "equal?: native [v1 v2] \n" 
     330  "strict-equal?: native [v1 v2] \n" 
     331  "greater-or-equal?: native [v1 v2] \n" 
     332  "greater?: native [v1 v2] \n" 
     333  "lesser-or-equal?: native [v1 v2] \n" 
     334  "lesser?: native [v1 v2] \n" 
     335  "odd?: native [number [number! char!]] \n" 
     336  "even?: native [number [number! char!]] \n" 
     337  "abs: native [number [number! pair!]] \n" 
     338  "complement: native [value [logic! integer! bitset!]] \n" 
     339  "negate: native [number [number! pair! bitset! vec3!]] \n" 
     340  "sine: native [value [number!] /radians] \n" 
     341  "cosine: native [value [number!] /radians] \n" 
     342  "arcsine: native [value [number!] /radians] \n" 
     343  "arccosine: native [value [number!] /radians] \n" 
     344  "tangent: native [value [number!] /radians] \n" 
     345  "arctangent: native [value [number!] /radians] \n" 
     346  "square-root: native [value [number!]] \n" 
     347  "random: native [value /seed /only] \n" 
     348  "power: native [x [number!] y [number!]] \n" 
    344349  "remainder: native [\n" 
    345   "    x [number!]\n" 
     350  "    x [number!] \n" 
    346351  "    y [number!]\n" 
    347   "]\n" 
    348   "compress: native [data [string! binary!]]\n" 
    349   "decompress: native [data [binary!]]\n" 
    350   "dot: native [a [vec3!] b [vec3!]]\n" 
    351   "cross: native [a [vec3!] b [vec3!]]\n" 
     352  "] \n" 
     353  "compress: native [data [string! binary!]] \n" 
     354  "decompress: native [data [binary!]] \n" 
     355  "dot: native [a [vec3!] b [vec3!]] \n" 
     356  "cross: native [a [vec3!] b [vec3!]] \n" 
    352357  "normalize: native [vec [vec3!]]\n" 
    353358; 
    354359 
    355360static char _boot[] = 
    356   "context: func [blk [block!]] [make object! blk]\n" 
    357   "probe: func [value] [print mold :value :value]\n" 
     361  "context: func [blk [block!]] [make object! blk] \n" 
     362  "probe: func [value] [print mold :value :value] \n" 
    358363  "source: func ['word] [\n" 
    359   "    prin rejoin [word \": \"]\n" 
     364  "    prin rejoin [word \": \"] \n" 
    360365  "    either function? get word [\n" 
    361366  "        print mold get word\n" 
    362367  "    ] [\n" 
    363   "        either native? get word\n" 
    364   "        [print mold get word]\n" 
     368  "        either native? get word \n" 
     369  "        [print mold get word] \n" 
    365370  "        [print \"is not a function\"]\n" 
    366371  "    ]\n" 
    367   "]\n" 
     372  "] \n" 
    368373  "function: func [\n" 
    369   "    spec [block!]\n" 
    370   "    vars [block!]\n" 
     374  "    spec [block!] \n" 
     375  "    vars [block!] \n" 
    371376  "    body [block!]\n" 
    372377  "] [\n" 
    373378  "    func head insert insert tail copy spec /local vars body\n" 
    374   "]\n" 
    375   "true: yes: on: make logic! 1\n" 
    376   "false: no: off: make logic! 0\n" 
    377   "newline: #\"^/\"\n" 
    378   "empty?: :tail?\n" 
    379   "q: :quit\n" 
    380   "orca: true\n" 
     379  "] \n" 
     380  "true: yes: on: make logic! 1 \n" 
     381  "false: no: off: make logic! 0 \n" 
     382  "newline: #\"^/\" \n" 
     383  "empty?: :tail? \n" 
     384  "q: :quit \n" 
     385  "orca: true \n" 
    381386  "system: context [\n" 
    382   "    version: 0.0.23\n" 
    383   "    os: none\n" 
     387  "    version: 0.0.23 \n" 
     388  "    os: none \n" 
    384389  "    error: context [\n" 
    385390  "        msg: type: id: near: none\n" 
    386   "    ]\n" 
    387   "    error-types: ['syntax 'script 'math 'access 'internal]\n" 
    388   "    words: none\n" 
     391  "    ] \n" 
     392  "    error-types: ['syntax 'script 'math 'access 'internal] \n" 
     393  "    words: none \n" 
    389394  "    script-proto: context [\n" 
    390   "        args:\n" 
    391   "        path:\n" 
    392   "        parent:\n" 
     395  "        args: \n" 
     396  "        path: \n" 
     397  "        parent: \n" 
    393398  "        header: none\n" 
    394   "    ]\n" 
     399  "    ] \n" 
    395400  "    script: none\n" 
    396   "]\n" 
    397   "protect 'system\n" 
    398   "protect 'datatypes\n" 
    399   "to-binary: func [value] [to binary! :value]\n" 
    400   "to-bitset: func [value] [to bitset! :value]\n" 
    401   "to-block: func [value] [to block! :value]\n" 
    402   "to-char: func [value] [to char! :value]\n" 
    403   "to-decimal: func [value] [to decimal! :value]\n" 
    404   "to-file: func [value] [to file! :value]\n" 
    405   "to-get-word: func [value] [to get-word! :value]\n" 
    406   "to-integer: func [value] [to integer! :value]\n" 
    407   "to-issue: func [value] [to issue! :value]\n" 
    408   "to-lit-path: func [value] [to lit-path! :value]\n" 
    409   "to-lit-word: func [value] [to lit-word! :value]\n" 
    410   "to-logic: func [value] [to logic! :value]\n" 
    411