Changeset 468

Show
Ignore:
Timestamp:
09/03/07 02:29:05 (13 months ago)
Author:
krobillard
Message:

Squashed commit of master.

Location:
trunk/thune
Files:
1 added
13 modified

Legend:

Unmodified
Added
Removed
  • trunk/thune/boot.c

    r458 r468  
    124124  "proc :parse.some  ;(data rules -- )\n" 
    125125  "[\n" 
    126   "  0,0,1 :version\n" 
     126  "  0,0,3 :version\n" 
    127127  "  none :os\n" 
    128128  "  [] :devices\n" 
  • trunk/thune/console.c

    r459 r468  
    2121#include <assert.h> 
    2222#include <stdio.h> 
    23 #include "env.h" 
     23#include "urlan.h" 
    2424 
    2525 
     
    113113int main( int argc, char** argv ) 
    114114{ 
    115     UrlanEnv env; 
     115    UrlanEnv* env; 
     116    UThread* ut; 
    116117    char cmd[ 2048 ]; 
    117118    int fileN = 0; 
     
    119120 
    120121 
    121     if( ur_startup( &env, CUSTOM_DT, CUSTOM_DT_COUNT ) != UR_EVAL_OK ) 
    122     { 
    123         printf( "ur_startup failed\n" ); 
     122    env = ur_makeEnv( CUSTOM_DT, CUSTOM_DT_COUNT ); 
     123    if( ! env ) 
     124    { 
     125        printf( "ur_makeEnv failed\n" ); 
    124126        return -1; 
    125127    } 
    126128 
    127129#ifdef THUNE_GL 
    128     if( gx_startup( &env ) != UR_EVAL_OK ) 
     130    if( gx_startup( env ) != UR_EVAL_OK ) 
    129131    { 
    130132        printf( "gx_startup failed\n" ); 
     
    133135#endif 
    134136 
    135     ur_freezeEnv( env.threads, 128, 256 ); 
     137    ur_freezeEnv( env, 128, 256 ); 
     138    ut = ur_thread( env ); 
    136139 
    137140    if( argc > 1 ) 
     
    148151                { 
    149152                    case 's': 
    150                         ur_disable( &env, UR_ENV_SECURE ); 
     153                        ur_disable( env, UR_ENV_SECURE ); 
    151154                        break; 
    152155 
     
    204207        assert( cmd[ sizeof(cmd) - 1 ] == -1 && "cmd buffer overflow" ); 
    205208 
    206         switch( ur_evalCStr( env.threads, cmd, pos - cmd ) ) 
     209        switch( ur_evalCStr( ut, cmd, pos - cmd ) ) 
    207210        { 
    208211            case UR_EVAL_HALT: 
     
    210213 
    211214            case UR_EVAL_ERROR: 
    212                 reportError( env.threads ); 
     215                reportError( ut ); 
    213216                goto prompt; 
    214217        } 
     
    243246            else if( cmd[0] != '\n' ) 
    244247            { 
    245                 switch( ur_evalCStr( env.threads, cmd, -1 ) ) 
     248                switch( ur_evalCStr( ut, cmd, -1 ) ) 
    246249                { 
    247250                    case UR_EVAL_OK: 
     
    250253                        UString str; 
    251254 
    252                         val = ur_result( env.threads, 0 ); 
     255                        val = ur_result( ut, 0 ); 
    253256                        if( ur_is(val, UT_UNSET) || 
    254257                            ur_is(val, UT_CONTEXT) || 
     
    257260 
    258261                        ur_arrayInit( &str, 1, 0 ); 
    259                         ur_toStrT( env.threads, val, &str, 0 ); 
     262                        ur_toStrT( ut, val, &str, 0 ); 
    260263                        if( str.ptr.c ) 
    261264                        { 
     
    284287 
    285288                    case UR_EVAL_ERROR: 
    286                         reportError( env.threads ); 
    287                         ur_threadReset( env.threads ); 
     289                        reportError( ut ); 
     290                        ur_threadReset( ut ); 
    288291                        break; 
    289292                } 
     
    295298 
    296299#ifdef THUNE_GL 
    297     gx_shutdown( &env ); 
    298 #endif 
    299  
    300     ur_shutdown( &env ); 
     300    gx_shutdown( env ); 
     301#endif 
     302 
     303    ur_freeEnv( env ); 
    301304 
    302305    return ret; 
  • trunk/thune/doc/UserManual

    r458 r468  
    523523random       (max -- n)         Generate random number. 
    524524random       (n 'seed -- )      Seed random number generator. 
     525zero?        (n -- logic)       True if number is zero. 
    525526===========  =================  ================= 
    526527 
  • trunk/thune/doc/thune.vim

    r458 r468  
    3636syn match       thuneGetWord    "\a\k*:" 
    3737syn match       thuneLitWord    "'\a\k*" 
    38 "syn match       thuneWord       "\a\k*" 
     38syn match       thuneWord       "\a\k*" 
    3939"syn match       thuneWordPath   "[^[:space:]]/[^[:space]]"ms=s+1,me=e-1 
    4040 
     
    100100"syn keyword     thuneMathFunction  square-root subtract tangent 
    101101" Binary operators 
    102 "syn keyword     thuneBinaryOperator complement and or xor ~ 
     102syn keyword     thuneBinaryOperator complement and or xor 
    103103" Logic operators 
    104104"syn match       thuneLogicOperator "[<>=]=\=" 
     
    131131" Series statements 
    132132"syn keyword     thuneStatement  change clear copy fifth find first format fourth free 
    133 syn keyword     thuneStatement  proc func 
     133syn keyword     thuneStatement  make proc func 
    134134"head insert last match next parse past 
    135135"syn keyword     thuneStatement  pick remove second select skip sort tail third trim length? 
    136136 
    137137" Context 
    138 "syn keyword     thuneStatement  alias bind use 
     138syn keyword     thuneStatement  bind infuse 
    139139 
    140140" Object 
     
    184184  HiLink thuneType              Type 
    185185 
    186 " HiLink thuneWord              Identifier 
     186" HiLink thuneWord              Keyword 
    187187  HiLink thuneOpcode    Operator 
    188188" HiLink thuneWordPath  thuneWord 
  • trunk/thune/env.h

    r458 r468  
    1111#define UR_EMH_STEP     1 
    1212#define UR_EMH_HALT     2 
    13  
    14  
    15 #define UR_ENV_GC           0x01 
    16 #define UR_ENV_SECURE       0x02 
    1713 
    1814 
  • trunk/thune/gl/scripts/view.t

    r458 r468  
    22 
    33<"scripts/stars.t" load do> 
     4 
     5;"scripts/timer_bar.t" load do 
    46 
    570.6 :zoom 
     
    172174[ 
    173175    now start-time sub :flare-sh/time 
     176    ;update-timer-bar 
    174177] 
    175178proc 'sim-update set 
     
    299302        ;enable/? 
    300303        image/trans logo-pos <"image/warpfleetc.png" load.tex.clamp> 
     304 
     305        ;shader matte 
     306        ;call dl-timer-bar 
    301307    ] 
    302308] 
  • trunk/thune/mkboot.t

    r458 r468  
    144144 
    145145[ 
    146   0,0,1 :version 
     146  0,0,3 :version 
    147147  none :os 
    148148  [] :devices 
  • trunk/thune/series.c

    r462 r468  
    31973197 
    31983198 
    3199 //#define REF_CASE_PART   a1+1 
     3199void _lowercaseUcs16( uint16_t* it, uint16_t* end ) 
     3200{ 
     3201    int c; 
     3202    while( it != end ) 
     3203    { 
     3204        c = *it; 
     3205        if( (c >= 'A') && (c <= 'Z') ) 
     3206            *it = c + 32; 
     3207        else if( (c >= 0x00C0) && (c <= 0x00DE) && (c != 0x00D7) ) 
     3208            *it = c + 32; 
     3209        else if( (c >= 0x0391) && (c <= 0x03AB) && (c != 0x03A2) ) 
     3210            *it = c + 32; 
     3211        else if( (c >= 0x0410) && (c <= 0x042F) ) 
     3212            *it = c + 32; 
     3213        else if( (c >= 0x0531) && (c <= 0x0556) ) 
     3214            *it = c + 48; 
     3215        // TODO: Implement full lookup table. 
     3216        ++it; 
     3217    } 
     3218} 
     3219 
     3220void _lowercaseAscii( char* it, char* end ) 
     3221{ 
     3222    int c; 
     3223    while( it != end ) 
     3224    { 
     3225        c = *it; 
     3226        if( (c >= 'A') && (c <= 'Z') ) 
     3227            *it = c + ('a' - 'A'); 
     3228        ++it; 
     3229    } 
     3230} 
     3231 
    32003232 
    32013233/* 
     
    32043236UR_CALL( uc_lowercase ) 
    32053237{ 
     3238    int len; 
     3239    int part; 
     3240    char* cp; 
     3241    char* end; 
     3242    UString* str; 
     3243 
     3244#ifdef LANG_THUNE 
     3245    if( ur_is(tos, UT_INT) ) 
     3246    { 
     3247        UR_S_DROP; 
     3248        part = ur_int(tos); 
     3249        tos = ur_s_prev(tos); 
     3250    } 
     3251    else 
     3252#endif 
     3253    { 
     3254        part = -1; 
     3255    } 
     3256 
     3257    str = ur_stringSlice( ut, tos, &cp, &end ); 
     3258    if( str ) 
     3259    { 
     3260        if( cp ) 
     3261        { 
     3262            if( ur_encoding(tos) == UR_ENC_UTF16 ) 
     3263            { 
     3264                uint16_t* cp16  = (uint16_t*) cp; 
     3265                uint16_t* end16 = (uint16_t*) end; 
     3266                if( part > -1 ) 
     3267                { 
     3268                    len = end16 - cp16; 
     3269                    if( part < len ) 
     3270                        end16 = cp16 + part; 
     3271                } 
     3272                _lowercaseUcs16( cp16, end16 ); 
     3273            } 
     3274            else 
     3275            { 
     3276                if( part > -1 ) 
     3277                { 
     3278                    len = end - cp; 
     3279                    if( part < len ) 
     3280                        end = cp + part; 
     3281                } 
     3282                _lowercaseAscii( cp, end ); 
     3283            } 
     3284        } 
     3285    } 
     3286    else 
     3287    { 
     3288        ur_throwErr( UR_ERR_DATATYPE, "lowercase expected string!" ); 
     3289    } 
     3290} 
     3291 
     3292 
     3293void _uppercaseUcs16( uint16_t* it, uint16_t* end ) 
     3294{ 
    32063295    int c; 
    3207     UString* str = ur_bin(tos); 
    3208     char* cp  = str->ptr.c + tos->series.it; 
    3209     char* end = str->ptr.c + str->used; 
    3210  
    3211     UR_CALL_UNUSED_TH 
    3212 #if 0 
    3213     if( orRefineSet(REF_CASE_PART) ) 
    3214     { 
    3215         char* pend; 
    3216         UCell* a3 = tos + 2; 
    3217         if( ur_ins(a3) < 0 ) 
    3218         { 
    3219             ur_throwErr( 0, "/part less than zero." ); 
    3220             return; 
    3221         } 
    3222         pend = cp + ur_int(a3); 
    3223         if( end > pend ) 
    3224             end = pend; 
    3225     } 
    3226 #endif 
    3227  
    3228     while( cp != end ) 
    3229     { 
    3230         c = *cp; 
    3231         if( (c >= 'A') && (c <= 'Z') ) 
    3232             *cp = c + ('a' - 'A'); 
    3233         ++cp; 
     3296    while( it != end ) 
     3297    { 
     3298        c = *it; 
     3299        if( (c >= 'a') && (c <= 'z') ) 
     3300            *it = c - 32; 
     3301        else if( (c >= 0x00E0) && (c <= 0x00FE) && (c != 0x00F7) ) 
     3302            *it = c - 32; 
     3303        else if( (c >= 0x03B1) && (c <= 0x03CB) && (c != 0x03C2) ) 
     3304            *it = c - 32; 
     3305        else if( (c >= 0x0430) && (c <= 0x044F) ) 
     3306            *it = c - 32; 
     3307        else if( (c >= 0x0561) && (c <= 0x0586) ) 
     3308            *it = c - 48; 
     3309        // TODO: Implement full lookup table. 
     3310        ++it; 
     3311    } 
     3312} 
     3313 
     3314void _uppercaseAscii( char* it, char* end ) 
     3315{ 
     3316    int c; 
     3317    while( it != end ) 
     3318    { 
     3319        c = *it; 
     3320        if( (c >= 'a') && (c <= 'z') ) 
     3321            *it = c - ('a' - 'A'); 
     3322        ++it; 
    32343323    } 
    32353324} 
     
    32383327/* 
    32393328  (str -- str) 
     3329  (str part -- str) 
    32403330*/ 
    32413331UR_CALL( uc_uppercase ) 
    32423332{ 
    3243     int c; 
    3244     UString* str = ur_bin(tos); 
    3245     char* cp  = str->ptr.c + tos->series.it; 
    3246     char* end = str->ptr.c + str->used; 
    3247  
    3248     UR_CALL_UNUSED_TH 
    3249 #if 0 
    3250     if( orRefineSet(REF_CASE_PART) ) 
    3251     { 
    3252         char* pend; 
    3253         UCell* a3 = tos + 2; 
    3254         if( ur_int(a3) < 0 ) 
    3255         { 
    3256             ur_throwErr( 0, "/part less than zero." ); 
    3257             return; 
    3258         } 
    3259         pend = cp + ur_int(a3); 
    3260         if( end > pend ) 
    3261             end = pend; 
    3262     } 
     3333    int len; 
     3334    int part; 
     3335    char* cp; 
     3336    char* end; 
     3337    UString* str; 
     3338 
     3339#ifdef LANG_THUNE 
     3340    if( ur_is(tos, UT_INT) ) 
     3341    { 
     3342        UR_S_DROP; 
     3343        part = ur_int(tos); 
     3344        tos = ur_s_prev(tos); 
     3345    } 
     3346    else 
    32633347#endif 
    3264  
    3265     while( cp != end ) 
    3266     { 
    3267         c = *cp; 
    3268         if( (c >= 'a') && (c <= 'z') ) 
    3269             *cp = c - ('a' - 'A'); 
    3270         ++cp; 
     3348    { 
     3349        part = -1; 
     3350    } 
     3351 
     3352    str = ur_stringSlice( ut, tos, &cp, &end ); 
     3353    if( str ) 
     3354    { 
     3355        if( cp ) 
     3356        { 
     3357            if( ur_encoding(tos) == UR_ENC_UTF16 ) 
     3358            { 
     3359                uint16_t* cp16  = (uint16_t*) cp; 
     3360                uint16_t* end16 = (uint16_t*) end; 
     3361                if( part > -1 ) 
     3362                { 
     3363                    len = end16 - cp16; 
     3364                    if( part < len ) 
     3365                        end16 = cp16 + part; 
     3366                } 
     3367                _uppercaseUcs16( cp16, end16 ); 
     3368            } 
     3369            else 
     3370            { 
     3371                if( part > -1 ) 
     3372                { 
     3373                    len = end - cp; 
     3374                    if( part < len ) 
     3375                        end = cp + part; 
     3376                } 
     3377                _uppercaseAscii( cp, end ); 
     3378            } 
     3379        } 
     3380    } 
     3381    else 
     3382    { 
     3383        ur_throwErr( UR_ERR_DATATYPE, "uppercase expected string!" ); 
    32713384    } 
    32723385} 
  • trunk/thune/tests/working/utf8.good

    r458 r468  
    99 ÑŽÐ³Ð° жОл-был цОтрус? Да, МП фальшОвый экзеЌпляр! ёъ.} 
    1010] 
     11{Les naïfs Êgithales hâtifs pondant à Noël où il gÚle sont sûrs d'être déçus et de voir leurs drÃŽles d'œufs abîmés.} 
     12{LES NAÏFS ÆGITHALES HÂTIFS PONDANT À NOËL OÙ IL GÈLE SONT SÛRS D'ÊTRE DÉÇUS ET DE VOIR LEURS DRÔLES D'œUFS ABÎMÉS.} 
     13{les naïfs Êgithales hâtifs pondant à noël où il gÚle sont sûrs d'être déçus et de voir leurs drÃŽles d'œufs abîmés.} 
     14{Falsches Üben von Xylophonmusik quÀlt jeden größeren Zwerg.} 
     15{FALSCHES ÜBEN VON XYLOPHONMUSIK QUÄLT JEDEN GRÖßEREN ZWERG.} 
     16{falsches ÃŒben von xylophonmusik quÀlt jeden größeren zwerg.} 
     17"Οεσκεπάζω τηΜ ψϠ
     18χοφΞόρα βΎελϠ
     19γΌία" 
     20"ΞΕΣΚΕΠάΖΩ ΀ΗΝ ΚΥΧΟΊΘόΡΑ ΒΔΕΛΥΓΜίΑ" 
     21"Οεσκεπάζω τηΜ ψϠ
     22χοφΞόρα βΎελϠ
     23γΌία" 
     24"SÊvör grét áðan ßví úlpan var ónÜt." 
     25"SÆVÖR GRÉT ÁÐAN ÞVÍ ÚLPAN VAR ÓNÝT." 
     26"sÊvör grét áðan ßví úlpan var ónÜt." 
     27{В чащаѠ
     28 ÑŽÐ³Ð° жОл-был цОтрус? Да, МП фальшОвый экзеЌпляр! ёъ.} 
     29{В ЧАЩАХ ЮГА ЖИЛ-БЫЛ ЊИТРУС? ДА, НО ЀАЛЬКИВЫЙ ЭКЗЕМПЛЯР! ёЪ.} 
     30{в чащаѠ
     31 ÑŽÐ³Ð° жОл-был цОтрус? Ўа, МП фальшОвый экзеЌпляр! ёъ.} 
  • trunk/thune/tests/working/utf8.t

    r458 r468  
    1515 ÑŽÐ³Ð° жОл-был цОтрус? Да, МП фальшОвый экзеЌпляр! ёъ.} 
    1616] 
    17 . 
     17dup . 
    1818 
     19next 
     20[first dup . uppercase dup . lowercase .] 
     21iter/2 
  • trunk/thune/thune.c

    r466 r468  
    11051105 
    11061106    UR_CALL_OP = 0; 
    1107      
     1107 
    11081108op_throw: 
    11091109 
  • trunk/thune/urlan.c

    r458 r468  
    445445 
    446446 
    447 int ur_sizeofUrlanEnv() 
    448 { 
    449     return sizeof(UrlanEnv); 
    450 } 
    451  
    452  
    453447UThread* ur_thread( UrlanEnv* env ) 
    454448{ 
     
    458452 
    459453/** 
    460   Initialize UrlanEnv. 
     454  Create and initialize UrlanEnv. 
    461455 
    462456  \param custom       Pointer to array of cutsom datatypes. 
     
    464458  \param customCount  Number of UDatatype in custom array. 
    465459 
    466   \return  UR_EVAL_ code. 
    467 */ 
    468 int ur_startup( UrlanEnv* env, UDatatype* custom, int customCount ) 
    469 { 
     460  \return pointer to script environment. 
     461*/ 
     462UrlanEnv* ur_makeEnv( UDatatype* custom, int customCount ) 
     463{ 
     464    UrlanEnv* env; 
    470465    UThread* ut; 
    471466    int n; 
     
    474469    _validateEnv(); 
    475470#endif 
     471 
     472    env = memAlloc( sizeof(UrlanEnv) ); 
     473    if( ! env ) 
     474        return 0; 
    476475 
    477476    env->threads  = 0; 
     
    505504        perror( "mutexInit" ); 
    506505#endif 
    507         return UR_EVAL_ERROR; 
     506        return 0; 
    508507    } 
    509508 
     
    535534    n = ur_tokenize( ut, _bootScript, _bootScript + sizeof(_bootScript) ); 
    536535    if( ! n ) 
    537         return UR_EVAL_ERROR; 
     536    { 
     537        ur_freeEnv( env ); 
     538        return 0; 
     539    } 
    538540    ur_bind( n, (UCell*) &ur_thrGlobal ); 
    539541    n = ur_eval( ut, n, 0 ); 
    540542    if( n != UR_EVAL_OK ) 
    541         return n; 
     543    { 
     544        ur_freeEnv( env ); 
     545        return 0; 
     546    } 
    542547#endif 
    543548    n = ur_evalCStr( ut, _envScript, sizeof(_envScript) ); 
     
    573578    ur_installExceptionHandlers(); 
    574579 
    575     return n; 
     580    return env; 
    576581} 
    577582 
     
    630635  before a second thread is created. 
    631636*/ 
    632 void ur_freezeEnv( UThread* ut, int binCount, int blkCount ) 
    633 { 
    634     UrlanEnv* env = ut->env; 
     637void ur_freezeEnv( UrlanEnv* env, int binCount, int blkCount ) 
     638{ 
     639    UThread* ut = env->threads; 
    635640 
    636641    assert( env->bin.arr.ptr.v == 0 ); 
     
    727732  Release all resources used by env. 
    728733*/ 
    729 void ur_shutdown( UrlanEnv* env ) 
     734void ur_freeEnv( UrlanEnv* env ) 
    730735{ 
    731736    UThread* thr; 
    732737    UThread* next; 
     738 
     739    if( ! env ) 
     740        return; 
     741 
    733742    if( (thr = env->threads) ) 
    734743    { 
     
    753762    ur_arrayFree( &env->atoms ); 
    754763    ur_arrayFree( &env->atomNames ); 
     764 
     765    memFree( env ); 
    755766} 
    756767 
  • trunk/thune/urlan.h

    r467 r468  
    421421 
    422422 
    423 #define UR_DSTACK_SIZE       256 
    424 #define UR_CSTACK_SIZE       128 
    425  
    426 #define UR_TASK_RUNNING    1 
    427 #define UR_TASK_READY      2 
    428 #define UR_TASK_BLOCKED    3 
    429 #define UR_TASK_TERM       4 
     423#define UR_ENV_GC           0x01 
     424#define UR_ENV_SECURE       0x02 
     425 
     426#define UR_DSTACK_SIZE      256 
     427#define UR_CSTACK_SIZE      128 
     428 
     429#define UR_TASK_RUNNING     1 
     430#define UR_TASK_READY       2 
     431#define UR_TASK_BLOCKED     3 
     432#define UR_TASK_TERM        4 
    430433 
    431434typedef struct UrlanEnv     UrlanEnv; 
     
    510513