![]() |
#1 |
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 456
Karma: 1287375
Join Date: Jan 2013
Location: West Gardiner, Maine
Device: Touch (5.3.7)
|
Alsaplayer
WIP - works with the fronter extension only from the command line, as there is no way to kill it (yet).
To play files, I can run it like: Code:
LD_LIBRARY_PATH=/mnt/us/extensions/alsaplayer/usr/lib ./alsaplayer I was trying for the old "press the power button to kill it" thing like on the draw extension, but it locks up always. I have not looked into a quit button yet like twobob did on rgbpaint (awesome!), but that seems the way to go. If you configure, make sure you have libmad0-dev installed, as that is the mp3 lib. ![]() attachment removed: https://www.mobileread.com/forums/sho...d.php?t=224097 Twobob did it again! Last edited by brianinmaine; 10-05-2013 at 05:45 AM. |
![]() |
![]() |
![]() |
#2 |
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299991
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
Thanks Brian
![]() EDIT: FULL PORT IS HERE MATE --> https://www.mobileread.com/forums/sho...d.php?t=224097 Enjoy (I did the diff like you asked) Last edited by twobob; 10-04-2013 at 11:37 PM. |
![]() |
![]() |
Advert | |
|
![]() |
#3 |
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299991
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
A note on getting started patching...
jump into debian, cd to /usr/local/src, get the sources root@dev:/usr/local/src# apt-get source alsaplayer get the build-dep's root@dev:/usr/local/src# apt-get build-dep alsaplayer jump into the sources folder and check for references to title. root@dev:/usr/local/src/alsaplayer-0.99.80# grep -R "title" ./* Code:
./alsaplayer/Playlist.h: std::string title; ./alsaplayer/playitem.h: gchar *title; ./alsaplayer/playitem.h:void ap_playitem_set_title (ApPlayItem *playitem, ./alsaplayer/playitem.h: const gchar *title); ./alsaplayer/playitem.h:G_CONST_RETURN gchar* ap_playitem_get_title (ApPlayItem *playitem); ./alsaplayer/input_plugin.h: * The song title. ./alsaplayer/input_plugin.h: char title[128]; ./alsaplayer/control.h:int ap_get_title(int session, char *str); ./app/ControlSocket.cpp: if (item->title.size()) { ./app/ControlSocket.cpp: sprintf(tmp, "%s %s", item->title.c_str(), ./app/ControlSocket.cpp: ap_message_add_string(reply, "string", info.title); ./app/Playlist.cpp:// t - sort by title in descending direction, ./app/Playlist.cpp:// T - sort by title in ascending direction, ./app/Playlist.cpp: case 't': // Compare titles, descending ./app/Playlist.cpp: COMPARE(title, DESCENDING); ./app/Playlist.cpp: case 'T': // Compare titles, ascending ./app/Playlist.cpp: COMPARE(title, ASCENDING); ./app/Playlist.cpp: (*p).title = info.title; ./app/Playlist.cpp: /* Ignore title/length lines */ ./app/Main.cpp: if (ap_get_title(use_session, res) && strlen(res)) ./app/Main.cpp: fprintf(stdout, "title: %s\n", res); ./ChangeLog:* Madej: fixed song title in title bar when unknow name ./ChangeLog:* Madej: song title in title bar with preference option ./ChangeLog: the title bar and the quit menu. ./ChangeLog:* Song artist - title - time displaying in the playlist. ./debian/alsaplayer-gtk.menu:?package(alsaplayer-gtk,alsaplayer-common):needs="X11" section="Applications/Sound" title="AlsaPlayer" \ ./debian/alsaplayer-gtk.menu: longtitle="AlsaPlayer (GTK interface)" command="/usr/bin/alsaplayer -i gtk2" ./debian/alsaplayer-daemon.menu: title="AlsaPlayer (daemon)" \ ./debian/alsaplayer-daemon.menu: longtitle="AlsaPlayer (daemon interface)" \ ./debian/alsaplayer-xosd.menu: title="AlsaPlayer (xosd)" \ ./debian/alsaplayer-xosd.menu: longtitle="AlsaPlayer (xosd daemon interface)" \ ./examples/speed.c: char title[AP_TITLE_MAX]; ./examples/speed.c: if (ap_get_title(session_id, title) && ./examples/speed.c: printf("File playing: %s - %s\n", title, artist); ./input/vorbis/vorbis_engine.c: t = vorbis_comment_query(comment, "title", 0); ./input/vorbis/vorbis_engine.c: snprintf(info->title, sizeof(info->title), "%s", t ? t : ""); ./input/vorbis/vorbis_engine.c: snprintf(info->title, sizeof(info->title), "%s", data->path); ./input/audiofile/audiofile_engine.c: strcpy(info->title, data->filename); ./input/sndfile/sndfile_engine.c: strcpy(info->title, data->filename); ./input/mad/mad_engine.c: fill_from_id3v2 (info->title, buf + name_size + start, ./input/mad/mad_engine.c: sizeof (info->title), size - start); ./input/mad/mad_engine.c: /* title */ ./input/mad/mad_engine.c: strncpy (info->title, buf + 3, 30); ./input/mad/mad_engine.c: rstrip (info->title); ./input/mad/mad_engine.c: sprintf(data->sinfo.title, "%s", data->filename); ./input/mad/mad_engine.c: if ((len = strlen(data->sinfo.title))) { ./input/mad/mad_engine.c: s = data->sinfo.title + (len - 1); ./input/mad/mad_engine.c: while (s != data->sinfo.title && *s == ' ') ./input/mad/mad_engine.c: snprintf(data->sinfo.title, 128, "%s", s); ./input/cdda/cdda_engine.c: * open the filename and put music title's into the global variable ./input/cdda/cdda_engine.c: info->title[0] = 0; ./input/cdda/cdda_engine.c: sprintf(info->title, "Full CD length playback"); ./input/cdda/cdda_engine.c: sprintf(info->title, "%s", data->tracks[data->track_nr].track); ./input/cdda/cdda_engine.c: //alsaplayer_error("title = %s\nalbum = %s\nartist = %s", ./input/cdda/cdda_engine.c: // info->title, info->album, info->artist); ./input/flac/FlacPlugin.cpp: if (t && ! t->title ().empty ()) ./input/flac/FlacPlugin.cpp: strncpy (info->title, t->title ().c_str (), 128); ./input/flac/FlacPlugin.cpp: strncpy (info->title, fname, 128); ./input/flac/FlacPlugin.cpp: info->title[0] = 0; ./input/flac/FlacPlugin.cpp: info->title[0] = 0; ./input/flac/FlacId3v1Tag.cpp: char title[31]; ./input/flac/FlacId3v1Tag.cpp: memcpy(tag.title, tag.raw+3, 30); ./input/flac/FlacId3v1Tag.cpp: _title = tag.title; ./input/flac/FlacMetadataTag.cpp: { "TITLE", &FlacMetadataTag::_title }, ./input/flac/FlacTag.h: const std::string title (); ./input/flac/FlacTag.h: std::string _title; ./input/flac/FlacTag.h:FlacTag::title () ./input/flac/FlacTag.h: return _title; ./input/mikmod/mikmod_engine.c: strcpy (info->title, (data->mf->songname[0]) ? data->mf->songname : data->fname); ./input/wav/wav_engine.c: info->title[0] = 0; ./interface/xosd/xosd.cpp: if (*info.title) ./interface/xosd/xosd.cpp: xosd_display(osd, 1, XOSD_string, info.title); ./interface/xosd/xosd.cpp: xosd_display(osd, 1, XOSD_string, "Playing unknown title"); ./interface/gtk2/info_window.h: GtkWidget *title; ./interface/gtk2/info_window.h: void set_title(const gchar*); ./interface/gtk2/gtk_interface.cpp: char title_string[256]; ./interface/gtk2/gtk_interface.cpp: sprintf(info.title, _("No stream")); ./interface/gtk2/gtk_interface.cpp: sprintf(title_string, "%s - %s", info.artist, info.title); ./interface/gtk2/gtk_interface.cpp: infowindow->set_title(title_string); ./interface/gtk2/gtk_interface.cpp: if (prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", 0)) ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), title_string); ./interface/gtk2/gtk_interface.cpp: } else if (strlen(info.title)) { ./interface/gtk2/gtk_interface.cpp: sprintf(title_string, "%s", info.title); ./interface/gtk2/gtk_interface.cpp: infowindow->set_title(title_string); ./interface/gtk2/gtk_interface.cpp: if (prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", 0)) ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), title_string); ./interface/gtk2/gtk_interface.cpp: infowindow->set_title(p); ./interface/gtk2/gtk_interface.cpp: if (prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", 0)) ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), p); ./interface/gtk2/gtk_interface.cpp: infowindow->set_title(info.path); ./interface/gtk2/gtk_interface.cpp: if (prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", 0)) ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), info.path); ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(main_window), "AlsaPlayer"); ./interface/gtk2/info_window.cpp: GtkWidget *title_label; ./interface/gtk2/info_window.cpp: title_label = gtk_label_new(NULL); ./interface/gtk2/info_window.cpp: g_object_set_data(G_OBJECT(frame), "title_label", title_label); ./interface/gtk2/info_window.cpp: gtk_layout_put(GTK_LAYOUT(main_box), title_label, 0, 0); ./interface/gtk2/info_window.cpp: title = GTK_WIDGET(g_object_get_data(G_OBJECT(window), "title_label")); ./interface/gtk2/info_window.cpp: gtk_widget_set_size_request (this->title, width - x - this->rightwidth - this->labelheight, -1); ./interface/gtk2/info_window.cpp: gtk_layout_move(GTK_LAYOUT(this->layout), this->title, x, y); ./interface/gtk2/info_window.cpp:void InfoWindow::set_title(const gchar *text) ./interface/gtk2/info_window.cpp: gtk_label_set_text (GTK_LABEL(this->title), text); ./interface/gtk2/info_window.cpp: gtk_widget_modify_fg(this->title, GTK_STATE_NORMAL, &color); ./interface/gtk2/info_window.cpp: gtk_widget_modify_font(this->title, fonts); ./interface/gtk2/PlaylistWindow.cpp: if (item->title.size()) ./interface/gtk2/PlaylistWindow.cpp: list_item[2] = g_strdup(item->title.c_str()); ./interface/gtk2/PlaylistWindow.cpp: column = gtk_tree_view_column_new_with_attributes("title", renderer, "text", 2, NULL); ./interface/gtk2/PreferencesWindow.cpp: GtkWidget *title = GTK_WIDGET(g_object_get_data(G_OBJECT(dialog), "pref_play_on_title")); ./interface/gtk2/PreferencesWindow.cpp: what = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title)); ./interface/gtk2/PreferencesWindow.cpp: prefs_set_bool(ap_prefs, "gtk2_interface", "play_on_title", what); ./interface/gtk2/PreferencesWindow.cpp: gtk_window_set_title(GTK_WINDOW(main_window), "AlsaPlayer"); ./interface/gtk2/PreferencesWindow.cpp: GtkWidget *pref_play_on_title; ./interface/gtk2/PreferencesWindow.cpp: pref_play_on_title = gtk_check_button_new_with_label(_("Show title in title-bar")); ./interface/gtk2/PreferencesWindow.cpp: gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(pref_play_on_title), prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", FALSE)); ./interface/gtk2/PreferencesWindow.cpp: g_object_set_data(G_OBJECT(dialog), "pref_play_on_title", pref_play_on_title); ./interface/gtk2/PreferencesWindow.cpp: gtk_box_pack_start(GTK_BOX(pref_play), pref_play_on_title, FALSE, FALSE, 0); ./interface/text/text.cpp: // single title loop ./interface/text/text.cpp: snprintf(out_text, i, "%s - %s", info.artist, info.title); ./interface/text/text.cpp: else if (*info.title) ./interface/text/text.cpp: snprintf(out_text, i, "%s", info.title); ./interface/text/text.cpp: snprintf(out_text, i, "(no title information available)"); ./libalsaplayer/message.c:int ap_get_title(int session, char *str) ./po/de.po:msgid "Show title in title-bar" ./po/en_GB.po:msgid "Show title in title-bar" ./po/fr.po:msgid "Show title in title-bar" ./po/alsaplayer.pot:msgid "Show title in title-bar" ./po/pl.po:msgid "Show title in title-bar" ./po/sv.po:msgid "Show title in title-bar" ./scopes2/logbarfft/logbarfft.c: gtk_window_set_title(GTK_WINDOW(fftscope_win), "logFFTscope"); ./scopes2/monoscope/monoscope.c: gtk_window_set_title(GTK_WINDOW(monoscope_win), "Monoscope"); ./scopes2/synaescope/synaescope.c: gtk_window_set_title(GTK_WINDOW(synaescope_win), "Synaescope"); ./scopes2/spacescope/spacescope.c: gtk_window_set_title(GTK_WINDOW(spacescope_win), "Spacescope"); ./scopes2/blurscope/blurscope.c: gtk_window_set_title(GTK_WINDOW(window),"Blurscope"); ./scopes2/levelmeter/levelmeter.c: gtk_window_set_title(GTK_WINDOW(levelmeter_win), "Levelmeter"); Oh so a couple then... Any way we can get that list down a bit??? root@dev:/usr/local/src/alsaplayer-0.99.80# grep -R "gtk_window_set_title" ./* Code:
./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), title_string); ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), title_string); ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), p); ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), info.path); ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(main_window), "AlsaPlayer"); ./interface/gtk2/PreferencesWindow.cpp: gtk_window_set_title(GTK_WINDOW(main_window), "AlsaPlayer"); ./scopes2/logbarfft/logbarfft.c: gtk_window_set_title(GTK_WINDOW(fftscope_win), "logFFTscope"); ./scopes2/monoscope/monoscope.c: gtk_window_set_title(GTK_WINDOW(monoscope_win), "Monoscope"); ./scopes2/synaescope/synaescope.c: gtk_window_set_title(GTK_WINDOW(synaescope_win), "Synaescope"); ./scopes2/spacescope/spacescope.c: gtk_window_set_title(GTK_WINDOW(spacescope_win), "Spacescope"); ./scopes2/blurscope/blurscope.c: gtk_window_set_title(GTK_WINDOW(window),"Blurscope"); ./scopes2/levelmeter/levelmeter.c: gtk_window_set_title(GTK_WINDOW(levelmeter_win), "Levelmeter"); would be a bare minimum I would think. anything else we should be looking at? root@dev:/usr/local/src/alsaplayer-0.99.80# grep -R "gtk_message_dialog_new" ./* Code:
./interface/gtk2/gtk_interface.cpp: md = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error !")); ./interface/gtk2/gtk_interface.cpp: md = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, _("Warning !")); ./interface/gtk2/gtk_interface.cpp: md = gtk_message_dialog_new(GTK_WINDOW(parent), (GtkDialogFlags) (GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT), GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Excuse me !")); I would start there. Then see what I missed. ALSO: ./interface/gtk2/AboutWindow.cpp: I kind of recall there being no obvious way to set the "default about" windows sub-title - so perhaps think about eliding it. Hope it helps. Last edited by twobob; 10-04-2013 at 06:26 AM. |
![]() |
![]() |
![]() |
#4 |
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299991
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
root@dev:/usr/local/src/alsaplayer-0.99.80# grep -R "gtk_dialog_new_with_buttons" ./*
Code:
./interface/gtk2/ScopesWindow.cpp: scopes_window = gtk_dialog_new_with_buttons(_("Scopes"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, ./interface/gtk2/PreferencesWindow.cpp: dialog = gtk_dialog_new_with_buttons(_("Preferences"), GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT, root@dev:/usr/local/src/alsaplayer-0.99.80# grep -R "gtk_file_chooser_dialog_new" ./* Code:
./interface/gtk2/PlaylistWindow.cpp: filechooser = gtk_file_chooser_dialog_new("Choose playlist" , main_window, GTK_FILE_CHOOSER_ACTION_OPEN, ./interface/gtk2/PlaylistWindow.cpp: filechooser = gtk_file_chooser_dialog_new("Save playlist" , main_window, GTK_FILE_CHOOSER_ACTION_SAVE, ./interface/gtk2/PlaylistWindow.cpp: filechooser = gtk_file_chooser_dialog_new(_("Choose file or URL"), main_window, GTK_FILE_CHOOSER_ACTION_OPEN, Last edited by twobob; 10-04-2013 at 12:53 PM. |
![]() |
![]() |
![]() |
#5 | ||||
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299991
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
Hack up the titles (including the ones with spaces)
example: Quote:
and maybe that should be strlen... fix the -fpermissive errors in /usr/local/src/alsaplayer-0.99.80/input/flac/FlacPlugin.cpp Quote:
![]() also usr/local/src/alsaplayer-0.99.80/app/ControlSocket.cpp:245:21: error: ‘PATH_MAX’ was not declared in this scope ControlSocket.cpp:246:15: error: ‘save_path’ was not declared in this scope Quote:
root@dev:/usr/local/src/alsaplayer-0.99.80# ./configure --prefix=/mnt/us/extensions/alsaplayer --enable-gtk2 --disable-jack --disable-esd --disable-sparc --disable-sgi --disable-opengl --enable-static --enable-threads=posix --disable-nls --with-gnu-ld Quote:
root@dev:/usr/local/src/alsaplayer-0.99.80# make install Now.... I didn't check a whole host of stuff and you would probably want :PC_N on the titles. This isn't meant to be a complete guide. Just thought I would help you quickly over the stumbling blocks. regards, |
||||
![]() |
![]() |
Advert | |
|
![]() |
#6 |
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299991
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
Here's quick guide for the libs you will need to kill the missing symbols
[root@kindle root]# ls -p /mnt/us/extensions/alsaplayer/lib | grep -v "/" Code:
libFLAC.so.8 libX11.so.6 libXcomposite.so.1 libXcursor.so.1 libalsaplayer.so libalsaplayer.so.0 libalsaplayer.so.0.0.2 libgdk-x11-2.0.so.0 libgdk_pixbuf-2.0.so.0 libgdk_pixbuf_xlib-2.0.so.0 libglib-2.0.so.0 libgobject-2.0.so.0 libgthread-2.0.so.0 libgtk-x11-2.0.so.0 libid3tag.so.0 libmad.so.0 libmikmod.so.2 libpcre.so.3 libsndfile.so.1 libvorbis.so.0 libvorbisenc.so.2 libvorbisfile.so.3 Last edited by twobob; 10-04-2013 at 02:57 PM. |
![]() |
![]() |
![]() |
#7 |
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 456
Karma: 1287375
Join Date: Jan 2013
Location: West Gardiner, Maine
Device: Touch (5.3.7)
|
Looks like your on the way! Go ahead - save me a patch like rgbpaint if you would, that was great! Any idea how to add a quit button? Is that the same also, adding it into the toolbar?
|
![]() |
![]() |
![]() |
#8 |
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299991
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
okay.
I'll get it done then. The quit button has been there the whole time. Code:
gboolean alsaplayer_button_press(GtkWidget *widget, GdkEventButton *event, gpointer data) { if (event->button == 3) { gtk_menu_popup (GTK_MENU (data), NULL, NULL, NULL, NULL, event->button, event->time); return true; } return false; } I'll hi-jack the pointless CD button then - try welding it onto there. This was just supposed to be a help-you-along guide. There is probably a RAFT of other things that need tweaking... Hey ho. I'll give it go. |
![]() |
![]() |
![]() |
#9 |
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 456
Karma: 1287375
Join Date: Jan 2013
Location: West Gardiner, Maine
Device: Touch (5.3.7)
|
|
![]() |
![]() |
![]() |
#10 |
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299991
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
Most welcome. might wanna take down that top attachment now...
To save confusion. |
![]() |
![]() |