--- /dev/null
+function playback_record()
+ _flip=flip
+ __recording_frame=0
+ __recording_buttons=btn()
+ __recording_buttons_pressed=btnp()
+ __recording_first=true
+ flip=function()
+ _flip()
+ __recording_frame+=1
+ local b,bp=btn(),btnp()
+ if b!=__recording_buttons or bp!=__recording_buttons_pressed then
+ __recording_buttons=b
+ __recording_buttons_pressed=bp
+ printh(__recording_frame..","..__recording_buttons..","..__recording_buttons_pressed,playback_filename,__recording_first)
+ __recording_first=false
+ end
+ end
+
+ menuitem(playback_menu_idx, "end recording",function()
+ flip=_flip
+ playback_default_menu()
+ end)
+end
+
+function playback_play()
+ function playback_read_line()
+ local data=""
+ while stat(120) do
+ serial(0x800,0x4300,1)
+ local c=chr(peek(0x4300))
+ if(c=="\n")break
+ data..=c
+ end
+ if(#data==0)return nil
+ return data
+ end
+
+ local cx,cy=peek2(0x5f28),peek2(0x5f2a)
+ while stat(120)==false do
+ camera()
+ rectfill(10,50,117,78,0)
+ rect(10,50,117,74,7)
+ print("drop playback file",20,60,7)
+ flip()
+ camera(cx,cy)
+ end
+
+ _flip=flip
+ _btn=btn
+ _btnp=btnp
+
+ __playback_frame=0
+ _btn_data=0
+ _btn_p_data=0
+
+ btn=function(b,pl)
+ if(b==nil and pl==nil)return _btn_data
+ if(pl==nil)pl=0
+ return (_btn_data&(1<<(b+pl*6)))>0
+ end
+
+ btnp=function(b,pl)
+ if(b==nil and pl==nil)return _btn_p_data
+ if(pl==nil)pl=0
+ return (_btn_p_data&(1<<(b+pl*6)))>0
+ end
+
+ _playback_next_frame,_playback_next_btn,_playback_next_btnp=unpack(split(playback_read_line()))
+
+ flip=function()
+ _flip()
+ __playback_frame+=1
+
+ if __playback_frame>=_playback_next_frame then
+ _btn_data,_btn_p_data=_playback_next_btn,_playback_next_btnp
+ local line=playback_read_line()
+ if(line!=nil)_playback_next_frame,_playback_next_btn,_playback_next_btnp=unpack(split(line))
+ end
+ end
+
+ menuitem(playback_menu_idx+1, "end playback",function()
+ flip=_flip
+ btn=_btn
+ btnp=_btnp
+ playback_default_menu()
+ end)
+end
+
+function playback_default_menu()
+ menuitem(playback_menu_idx, "record playback",function() playback_record() end)
+ menuitem(playback_menu_idx+1, "play playback",function() playback_play() end)
+end
+
+if(playback_filename==nil)playback_filename="recording"
+if(playback_menu_idx==nil)playback_menu_idx=4
+playback_default_menu()