@@ -423,42 +423,46 @@ static int pico8_fget(lua_State* L)
423423
424424static int pico8_fillp (lua_State * L )
425425{
426- uint16_t pattern = fix32_to_uint16 ( luaL_optnumber ( L , 1 , 0 )) ;
426+ uint32_t pattern = 0 ;
427427
428- #if 0
429- // Predefined pattern values.
430- // P8SCI, 128 - 135.
431- switch (pattern )
428+ if (lua_type (L , 1 ) == LUA_TNUMBER )
432429 {
433- case 0 :
434- case 0x25CB : // 128, Solid.
435- pattern = 0x0000 ;
436- break ;
437- case 0x2588 : // 129, Checkerboard.
438- pattern = 0x5A5A ;
439- break ;
440- case 0x1F431 : // 130, Jelpi.
441- pattern = 0x511F ;
442- break ;
443- case 0x2B07FE0F : // 131, Down key.
444- pattern = 0x0003 ;
445- break ;
446- case 0x2591 : // 132, Dot pattern.
447- pattern = 0x7070 ;
448- break ;
449- case 0x273D : // 133, Throwing star.
450- pattern = 0x8810 ;
451- break ;
452- case 0x25CF : // 134, Ball.
453- pattern = 0xF99F ;
454- break ;
455- case 0x2665 : // 135, Heart.
456- pattern = 0x51BF ;
457- break ;
458- default :
459- break ;
430+ pattern = fix32_to_uint32 (luaL_optnumber (L , 1 , 0 ));
431+ }
432+ else if (lua_type (L , 1 ) == LUA_TSTRING )
433+ {
434+ const char * str = luaL_checkstring (L , 1 );
435+ uint8_t fillc = str [0 ];
436+
437+ switch (fillc )
438+ {
439+ default :
440+ case 128 : // Solid.
441+ pattern = 0b0000000000000000 ;
442+ break ;
443+ case 129 : // Checkerboard.
444+ pattern = 0b0101101001011010 ;
445+ break ;
446+ case 130 : // Jelpi.
447+ pattern = 0b0101000100011111 ;
448+ break ;
449+ case 131 : // Down key.
450+ pattern = 0b0000000000000011 ;
451+ break ;
452+ case 132 : // Dot pattern.
453+ pattern = 0b0111110101111101 ;
454+ break ;
455+ case 133 : // Throwing star.
456+ pattern = 0b1011100000011101 ;
457+ break ;
458+ case 134 : // Ball.
459+ pattern = 0b1111100110011111 ;
460+ break ;
461+ case 135 : // Heart.
462+ pattern = 0b0101000110111111 ;
463+ break ;
464+ }
460465 }
461- #endif
462466
463467 pico8_ram [0x5f31 ] = (pattern & 0xFF00 ) >> 8 ;
464468 pico8_ram [0x5f32 ] = pattern & 0x00FF ;
@@ -605,7 +609,7 @@ static int pico8_print(lua_State* L)
605609
606610 uint8_t w , h ;
607611 blit_char_to_screen (text [i ], cursor_x , cursor_y , color , & w , & h );
608- cursor_x += (w + 1 ) ;
612+ cursor_x += (w == 3 ) ? w + 1 : w - 1 ;
609613 }
610614
611615 cursor_y += 6 ;
@@ -1004,6 +1008,23 @@ static int pico8_poke4(lua_State* L)
10041008 return 0 ;
10051009}
10061010
1011+ // System functions.
1012+
1013+ static int pico8_menuitem (lua_State * L )
1014+ {
1015+ TO_BE_DONE ;
1016+ }
1017+
1018+ static int pico8_extcmd (lua_State * L )
1019+ {
1020+ TO_BE_DONE ;
1021+ }
1022+
1023+ static int pico8_run (lua_State * L )
1024+ {
1025+ TO_BE_DONE ;
1026+ }
1027+
10071028// Table functions.
10081029
10091030static int pico8_add (lua_State * L )
@@ -1301,6 +1322,14 @@ void init_api(lua_State* L)
13011322 lua_pushcfunction (L , pico8_poke4 );
13021323 lua_setglobal (L , "poke4" );
13031324
1325+ // System
1326+ lua_pushcfunction (L , pico8_menuitem );
1327+ lua_setglobal (L , "menuitem" );
1328+ lua_pushcfunction (L , pico8_extcmd );
1329+ lua_setglobal (L , "extcmd" );
1330+ lua_pushcfunction (L , pico8_run );
1331+ lua_setglobal (L , "run" );
1332+
13041333 // Tables.
13051334 lua_pushcfunction (L , pico8_add );
13061335 lua_setglobal (L , "add" );
0 commit comments