\o/ \o/ This is the mighty GoogleFS for BeOS, now also for Haiku. \o/ \o/

Quick, before I loose googlefs.h again (bloody /bin/deres which overwrites foo.h for foo.rsrc !!!!)
A makefile is provided for BeOS/Zeta, the Jamfile currently only builds for Haiku. The makefile.ufs is for UserlandFS.
The source code is quite messy, beware.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19873 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
François Revol 2007-01-20 02:04:51 +00:00
parent b3e65bfd2e
commit d256fad4bb
43 changed files with 5268 additions and 0 deletions

View File

@ -0,0 +1,20 @@
SubDir HAIKU_TOP src add-ons kernel file_systems googlefs ;
UsePrivateHeaders kernel ;
#SubDirCcFlags -DTRACK_FILENAME ;
#SubDirCcFlags -DDEBUG_GOOGLEFS=1 ;
KernelAddon googlefs :
attrs.c
google_icon.c
google_request.c
googlefs.c
http_cnx.c
lists2.c
parse_google_html.c
query.c
settings.c
string_utils.c
vnidpool.c
;

View File

@ -0,0 +1,29 @@
Welcome to the Google™ FileSystem for BeOS™, Zeta™ and Haiku™.
Copyright© 2004, 2005, François Revol.
Google is a trademark of Google,Inc.
BeOS is a trademark of PalmSource.
Zeta is a trademark of yellowTAB GmbH.
Haiku is a trademark of Haiku Inc.
REQUIRES BONE
mkdir /google; ndmount googlefs /google
Use "Search Google" query template in this folder to ask google anything.
or:
query -v /google '((name=="*QUESTION*")&&(BEOS:TYPE=="application/x-vnd.Be-bookmark"))'
where QUESTION is what you want to ask google. (googlefs currently filters queries to only answer those)
( you will want to pipe that to catattr:
query -v /google '((name=="*site:bebits.com bone*")&&(BEOS:TYPE=="application/x-vnd.Be-bookmark"))' | xargs catattr META:url
note that won't work with sync_unlink true in the settings)
Included are 2 scripts, google and imlucky that runs such a query using the arguments given on the command line.
An addon for Ingo Weinhold's UserlandFS is provided, compiled with debug printouts, so you can see it at work.
To use it, startUserlandFSServer and run:
ufs_mount googlefs /dev/zero /google
Enjoy.

View File

@ -0,0 +1 @@
/boot/home/config/bin/UserlandFSServer

View File

@ -0,0 +1,10 @@
#!/bin/sh
if [ $# -lt 2 ]; then
echo "attr2c attrname file"
exit 1
fi
#for R5 catattr
/bin/catattr "$1" "$2" | tail +2 | cut -c 10-57 | sed 's/,/, 0x/g;s/ / 0x/;s/ *//;s/$/,/'
#for zeta ??
#catattr "$1" "$2" | tail +2 | cut -c 10-57 | sed 's/,/, 0x/g;s/ / 0x/;s/ *//;s/$/,/'

View File

@ -0,0 +1,273 @@
#include <SupportDefs.h>
#include "googlefs.h"
#define SZSTR(s) sizeof(s), s
#define SZTAB(s) sizeof(s), s
extern const char google_icon_M[];
extern const char google_icon_L[];
struct attr_entry root_folder_attrs[] = {
{ "BEOS:TYPE", /*B_MIME_STRING_TYPE*/'MIMS', SZSTR("application/x-vnd.Be-directory") },
{ "BEOS:M:STD_ICON", 'MICN', 16*16, google_icon_M },
{ "BEOS:L:STD_ICON", 'ICON', 32*32, google_icon_L },
//{ "BEOS:EMBLEMS", 'CSTR', SZSTR("palm") },
{ NULL, 0, 0, NULL } /* end of list */
};
static uint8 folders_attrs_1[] = {
0x52, 0x56, 0xf2, 0x4f, 0x15, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x54, 0x69, 0x74, 0x6c,
0x65, 0x00, 0x00, 0x00, 0x20, 0x42, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00,
0x00, 0x00, 0x4d, 0x45, 0x54, 0x41, 0x3a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x00, 0x52, 0x7d, 0xfb,
0x77, 0x52, 0x54, 0x53, 0x43, 0x00, 0x01, 0x52, 0x56, 0xf2, 0x4f, 0x15, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x55, 0x52, 0x4c, 0x00, 0x00, 0x00, 0x39, 0x43, 0x00, 0x00, 0x2a, 0x43, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4d, 0x45, 0x54, 0x41, 0x3a, 0x75, 0x72, 0x6c, 0x00,
0x52, 0x54, 0x5b, 0xe3, 0x52, 0x54, 0x53, 0x43, 0x00, 0x01, 0x52, 0x56, 0xf2, 0x4f, 0x15, 0x00,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x00, 0x00,
0x00, 0xb9, 0x43, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4d,
0x45, 0x54, 0x41, 0x3a, 0x6b, 0x65, 0x79, 0x77, 0x00, 0x52, 0xdc, 0xf3, 0xdb, 0x52, 0x54, 0x53,
0x43, 0x00, 0x01, 0x52, 0x56, 0xf2, 0x4f, 0x15, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4d,
0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x00, 0x00, 0xc0, 0x00, 0x44, 0x00, 0x00, 0x16, 0x43,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x2f, 0x6d, 0x6f,
0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x00, 0x45, 0x6d, 0x4b, 0x5d, 0x45, 0x4d, 0x49, 0x54, 0x01,
0x00, 0x52, 0x56, 0xf2, 0x4f, 0x15, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x47, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x00, 0x00, 0x00, 0x2a, 0x44, 0x00, 0x00,
0xa0, 0x41, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45,
0x3a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x00, 0x47, 0xde, 0xef, 0xfc, 0x47, 0x4e, 0x4f, 0x4c, 0x00,
0x01 };
static uint8 folders_attrs_2[] = {
0x52, 0xf5, 0x5e, 0x6f, 0x0a, 0x00, 0x00, 0x00, 0x74, 0x73, 0x6c, 0x54, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0xde, 0xef, 0xfc, 0x47, 0x4e, 0x4f, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01 };
struct attr_entry folders_attrs[] = {
{ "BEOS:TYPE", /*B_MIME_STRING_TYPE*/'MIMS', SZSTR("application/x-vnd.Be-directory") },
{ "_trk/columns_le", 'RAWT', SZTAB(folders_attrs_1) },
{ "_trk/viewstate_le", 'RAWT', SZTAB(folders_attrs_2) },
{ "", 'RAWT', SZTAB(folders_attrs_2) },
{ NULL, 0, 0, NULL } /* end of list */
};
struct attr_entry bookmark_attrs[] = {
{ "BEOS:TYPE", /*B_MIME_STRING_TYPE*/'MIMS', SZSTR("application/x-vnd.Be-bookmark") },
{ NULL, 0, 0, NULL } /* end of list */
};
/* for debugging */
static int32 fake_bm_attr_1 = 1;
struct attr_entry fake_bookmark_attrs[] = {
{ "BEOS:TYPE", /*B_MIME_STRING_TYPE*/'MIMS', SZSTR("application/x-vnd.Be-bookmark") },
{ "META:title", 'CSTR', SZSTR("Plop!") },
{ "META:url", 'CSTR', SZSTR("http://127.0.0.1/") },
{ "META:keyw", 'CSTR', SZSTR("plop") },
//{ "GOOGLE:order", 'LONG', sizeof(int32), &fake_bm_attr_1 },
{ NULL, 0, 0, NULL } /* end of list */
};
static uint8 template_1_attrs_1 = 1;
static int32 template_1_attrs_2 = 1;
static uint8 template_1_attrs_3[] = {
0x31, 0x42, 0x4F, 0x46, 0x01, 0x00, 0x00, 0x98, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x0F, 0x47, 0x4E, 0x4F, 0x4C, 0x04, 0x0C, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6F, 0x6E,
0x44, 0x61, 0x74, 0x65, 0x51, 0xEA, 0xC7, 0x41, 0x0F, 0x47, 0x4E, 0x4C, 0x4C, 0x08, 0x08, 0x63,
0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B,
0x52, 0x54, 0x53, 0x43, 0x08, 0x0A, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4E, 0x61, 0x6D, 0x65,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x41, 0x0B, 0x52, 0x54, 0x53, 0x43, 0x10, 0x0A, 0x76,
0x6F, 0x6C, 0x75, 0x6D, 0x65, 0x4E, 0x61, 0x6D, 0x65, 0x07, 0x00, 0x00, 0x00, 0x47, 0x6F, 0x6F,
0x67, 0x6C, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x52, 0x54, 0x53, 0x43, 0x10, 0x07,
0x66, 0x73, 0x68, 0x4E, 0x61, 0x6D, 0x65, 0x09, 0x00, 0x00, 0x00, 0x67, 0x6F, 0x6F, 0x67, 0x6C,
0x65, 0x66, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00 };
static int32 template_1_attrs_4 = 0x4662796E;
static uint8 template_1_attrs_5[] = {
0x00, 0x00, 0x06, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00 };
static int32 template_1_attrs_6 = 0x00000027;
static int32 template_1_attrs_7 = 0x00000000;
static uint8 template_1_attrs_8[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x82, 0x43, 0x00, 0x00, 0xA0, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE0, 0x9F, 0x44, 0x00, 0xC0, 0x7F, 0x44, 0xFF, 0xFF, 0xFF, 0xFF };
static uint8 template_1_attrs_9[] = {
0x00, 0x00, 0x00, 0x00, 0x58, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x44,
0x00, 0x00, 0x0c, 0x44 };
static uint8 template_1_attrs_10[] = {
0x52, 0x56, 0xf2, 0x4f, 0x15, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x54, 0x69, 0x74, 0x6c,
0x65, 0x00, 0x00, 0x00, 0x20, 0x42, 0x00, 0x00, 0x50, 0x43, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00,
0x00, 0x00, 0x4d, 0x45, 0x54, 0x41, 0x3a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x00, 0x52, 0x7d, 0xfb,
0x77, 0x52, 0x54, 0x53, 0x43, 0x00, 0x01, 0x52, 0x56, 0xf2, 0x4f, 0x15, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x55, 0x52, 0x4c, 0x00, 0x00, 0x80, 0x83, 0x43, 0x00, 0x80, 0x85, 0x43, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4d, 0x45, 0x54, 0x41, 0x3a, 0x75, 0x72, 0x6c, 0x00,
0x52, 0x54, 0x5b, 0xe3, 0x52, 0x54, 0x53, 0x43, 0x00, 0x01, 0x52, 0x56, 0xf2, 0x4f, 0x15, 0x00,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x00, 0x00,
0x40, 0x08, 0x44, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4d,
0x45, 0x54, 0x41, 0x3a, 0x6b, 0x65, 0x79, 0x77, 0x00, 0x52, 0xdc, 0xf3, 0xdb, 0x52, 0x54, 0x53,
0x43, 0x00, 0x01, 0x52, 0x56, 0xf2, 0x4f, 0x15, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4d,
0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x00, 0x00, 0x80, 0x2c, 0x44, 0x00, 0x00, 0x16, 0x43,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x2f, 0x6d, 0x6f,
0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x00, 0x45, 0x6d, 0x4b, 0x5d, 0x45, 0x4d, 0x49, 0x54, 0x01,
0x00, 0x52, 0x56, 0xf2, 0x4f, 0x15, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x47, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x00, 0x00, 0xc0, 0x55, 0x44, 0x00, 0x00,
0x70, 0x41, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45,
0x3a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x00, 0x47, 0xde, 0xef, 0xfc, 0x47, 0x4e, 0x4f, 0x4c, 0x00,
0x00 };
static uint8 template_1_attrs_11[] = {
0x52, 0xf5, 0x5e, 0x6f, 0x0a, 0x00, 0x00, 0x00, 0x74, 0x73, 0x6c, 0x54, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0xde, 0xef, 0xfc, 0x47, 0x4e, 0x4f, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01 };
struct attr_entry template_1_attrs[] = {
{ "BEOS:TYPE", /*B_MIME_STRING_TYPE*/'MIMS', SZSTR("application/x-vnd.Be-queryTemplate") },
{ "_trk/qrystr", 'CSTR', SZSTR("((name==\"*[aA][nN][yY] [qQ][uU][eE][sS][tT][iI][oO][nN] [yY][oO][uU]\\'[dD] [lL][iI][kK][eE] [tT][oO] [aA][sS][kK] [gG][oO][oO][gG][lL][eE] ?*\")&&(BEOS:TYPE==\"application/x-vnd.Be-bookmark\"))") },
{ "_trk/queryDynamicDate", 'BOOL', 1, &template_1_attrs_1 },
{ "_trk/recentQuery", 'LONG', sizeof(int32), &template_1_attrs_2 },
{ "_trk/qryvol1", 'MSGG', SZTAB(template_1_attrs_3) },
{ "_trk/qryinitmime", 'CSTR', SZSTR("Bookmark") },
{ "_trk/qryinitmode", 'LONG', sizeof(int32), &template_1_attrs_4 },
{ "_trk/qrymoreoptions_le", 'RAWT', SZTAB(template_1_attrs_5) },
{ "_trk/qryinitstr", 'CSTR', SZSTR("Any question you'd like to ask google ?") },
{ "_trk/focusedView", 'CSTR', SZSTR("TextControl") },
{ "_trk/focusedSelEnd", 'LONG', sizeof(int32), &template_1_attrs_6 },
{ "_trk/focusedSelStart", 'LONG', sizeof(int32), &template_1_attrs_7 },
{ "_trk/xtpinfo_le", 'RAWT', SZTAB(template_1_attrs_8) },
{ "_trk/pinfo_le", 'RAWT', SZTAB(template_1_attrs_9) },
{ "_trk/columns_le", 'RAWT', SZTAB(folders_attrs_1)/*SZTAB(template_1_attrs_10)*/ },
{ "_trk/viewstate_le", 'RAWT', SZTAB(template_1_attrs_11) },
{ NULL, 0, 0, NULL } /* end of list */
};
static int32 text_attrs_1 = 0x0000FFFF;
static int32 text_attrs_2 = 0x00000000;
static uint8 text_attrs_3 = 1;
static uint8 text_attrs_4[] = {
0x41, 0x6c, 0x69, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x53, 0x77, 0x69, 0x73, 0x37, 0x32, 0x31, 0x20, 0x42, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0x60, 0x00, 0x00, 0x42, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x28, 0x53, 0x77, 0x69, 0x73, 0x37, 0x32, 0x31, 0x20, 0x42, 0x54, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x41, 0x60, 0x00, 0x00, 0x42, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x53, 0x77, 0x69, 0x73, 0x37, 0x32, 0x31, 0x20,
0x42, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x60, 0x00, 0x00, 0x42, 0xb4, 0x00, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x53, 0x77, 0x69, 0x73,
0x37, 0x32, 0x31, 0x20, 0x42, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6f, 0x6d, 0x61,
0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x60, 0x00, 0x00,
0x42, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47,
0x53, 0x77, 0x69, 0x73, 0x37, 0x32, 0x31, 0x20, 0x42, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0x20, 0x00, 0x00, 0x42, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 };
struct attr_entry text_attrs[] = {
{ "BEOS:TYPE", /*B_MIME_STRING_TYPE*/'MIMS', SZSTR("text/plain") },
{ "be:encoding", 'LONG', sizeof(int32), &text_attrs_1 },
{ "alignment", 'LONG', sizeof(int32), &text_attrs_2 },
{ "wrap", 'BOOL', sizeof(uint8), &text_attrs_3 },
{ "styles", 'RAWT', SZTAB(text_attrs_4) },
{ NULL, 0, 0, NULL } /* end of list */
};
char *readmestr = \
"Welcome to the Google™ FileSystem for BeOS™, Zeta™ and Haiku™.
Copyright© 2004, 2005, François Revol.
Google is a trademark of Google,Inc.
BeOS is a trademark of PalmSource.
Zeta is a trademark of yellowTAB GmbH.
Haiku is a trademark of Haiku Inc.
Use \"Search Google\" query template in this folder to ask google anything.
";
struct attr_entry mailto_me_bookmark_attrs[] = {
{ "BEOS:TYPE", /*B_MIME_STRING_TYPE*/'MIMS', SZSTR("application/x-person") },
{ "META:email", 'CSTR', SZSTR("revol@free.fr") },
{ "META:name", 'CSTR', SZSTR("François Revol") },
{ "META:country", 'CSTR', SZSTR("France") },
{ "META:nickname", 'CSTR', SZSTR("mmu_man") },
{ "META:company", 'CSTR', SZSTR("yellowTAB GmbH") },
{ "META:url", 'CSTR', SZSTR("") },
{ "META:group", 'CSTR', SZSTR("") },
{ "IM:connections", 'CSTR', SZSTR("icq:77792625") },
#if 0
{ "BEOS:TYPE", /*B_MIME_STRING_TYPE*/'MIMS', SZSTR("application/x-vnd.Be-bookmark") },
{ "META:title", 'CSTR', SZSTR("Report googlefs bugs") },
{ "META:url", 'CSTR', SZSTR("mailto:revol@free.fr"/*"&subject=googlefs bug report""&body=Hi, I found a bug in GoogleFS."*/) },
{ "META:keyw", 'CSTR', SZSTR("googlefs") },
//{ "GOOGLE:order", 'LONG', sizeof(int32), &fake_bm_attr_1 },
#endif
{ NULL, 0, 0, NULL } /* end of list */
};
#if 0
File: Search Google a
Type Size Name Value
---------- ---------- ---------------------------------- -----------------------------------------------------------------
'MIMS' 35 "BEOS:TYPE" "application/x-vnd.Be-queryTemplate"
STRING 191 "_trk/qrystr" "((name==\"*[aA][nN][yY] [qQ][uU][eE][sS][tT][iI][oO][nN] [yY][o"
"O][uU]\\'[dD] [lL][iI][kK][eE] [tT][oO] [aA][sS][kK] [gG][oO][o"
"O][gG][lL][eE] ?*\")&&(BEOS:TYPE==\"application/x-vnd.Be-bookma"
"rk\"))"
BOOL 1 "_trk/queryDynamicDate" TRUE
INT32 4 "_trk/recentQuery" 1 0x00000001
01 0F 47 4E 4F 4C 04 0C-63 72 65 61 74 69 6F 6E ..GNOL..creation
44 61 74 65 51 EA C7 41-0F 47 4E 4C 4C 08 08 63 DateQ..A.GNLL..c
61 70 61 63 69 74 79 00-00 00 00 00 00 00 00 0B apacity.........
52 54 53 43 08 0A 64 65-76 69 63 65 4E 61 6D 65 RTSC..deviceName
01 00 00 00 00 00 70 41-0B 52 54 53 43 10 0A 76 ......pA.RTSC..v
6F 6C 75 6D 65 4E 61 6D-65 07 00 00 00 47 6F 6F olumeName....Goo
67 6C 65 00 00 00 00 00-00 0B 52 54 53 43 10 07 gle.......RTSC..
66 73 68 4E 61 6D 65 09-00 00 00 67 6F 6F 67 6C fshName....googl
65 66 73 00 00 00 00 00- efs.....
STRING 9 "_trk/qryinitmime" "Bookmark"
INT32 4 "_trk/qryinitmode" 1180858734 0x4662796E
RAW 36 "_trk/qrymoreoptions_le" 00 00 06 EC 00 00 00 00-01 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
00 00 00 00 - ....
STRING 40 "_trk/qryinitstr" "Any question you'd like to ask google ?"
STRING 12 "_trk/focusedView" "TextControl"
INT32 4 "_trk/focusedSelEnd" 39 0x00000027
INT32 4 "_trk/focusedSelStart" 0 0x00000000
RAW 60 "_trk/xtpinfo_le" FF FF FF FF 00 00 00 00-00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00-00 00 00 00 01 00 00 00 ................
00 00 82 43 00 00 A0 42-00 00 00 00 00 00 00 00 ...C...B........
00 E0 9F 44 00 C0 7F 44-FF FF FF FF ...D...D....
#endif
#if 0
, 0x41, 0x6E, 0x79, 0x20, 0x71, 0x75, 0x65, 0x73-74, 0x69, 0x6F, 0x6E, 0x20, 0x79, 0x6F, 0x75
, 0x27, 0x64, 0x20, 0x6C, 0x69, 0x6B, 0x65, 0x20-74, 0x6F, 0x20, 0x61, 0x73, 0x6B, 0x20, 0x67
, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x20, 0x3F, 0x00-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6F, 0x6E, 0x74-72, 0x6F, 0x6C, 0x00, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x27, 0x00, 0x00, 0x00, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x00, 0x00, 0x00, 0x00, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
#endif

View File

@ -0,0 +1,45 @@
, 0xValue, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x-----------------------------------------------
, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74-69, 0x6F, 0x6E, 0x2F, 0x78, 0x2D, 0x76, 0x6E
, 0x64, 0x2E, 0x42, 0x65, 0x2D, 0x71, 0x75, 0x65-72, 0x79, 0x54, 0x65, 0x6D, 0x70, 0x6C, 0x61
, 0x74, 0x65, 0x00, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x28, 0x28, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x3D-22, 0x2A, 0x5B, 0x61, 0x41, 0x5D, 0x5B, 0x6E
, 0x4E, 0x5D, 0x5B, 0x79, 0x59, 0x5D, 0x20, 0x5B-71, 0x51, 0x5D, 0x5B, 0x75, 0x55, 0x5D, 0x5B
, 0x65, 0x45, 0x5D, 0x5B, 0x73, 0x53, 0x5D, 0x5B-74, 0x54, 0x5D, 0x5B, 0x69, 0x49, 0x5D, 0x5B
, 0x6F, 0x4F, 0x5D, 0x5B, 0x6E, 0x4E, 0x5D, 0x20-5B, 0x79, 0x59, 0x5D, 0x5B, 0x6F, 0x4F, 0x5D
, 0x5B, 0x75, 0x55, 0x5D, 0x5C, 0x27, 0x5B, 0x64-44, 0x5D, 0x20, 0x5B, 0x6C, 0x4C, 0x5D, 0x5B
, 0x69, 0x49, 0x5D, 0x5B, 0x6B, 0x4B, 0x5D, 0x5B-65, 0x45, 0x5D, 0x20, 0x5B, 0x74, 0x54, 0x5D
, 0x5B, 0x6F, 0x4F, 0x5D, 0x20, 0x5B, 0x61, 0x41-5D, 0x5B, 0x73, 0x53, 0x5D, 0x5B, 0x6B, 0x4B
, 0x5D, 0x20, 0x5B, 0x67, 0x47, 0x5D, 0x5B, 0x6F-4F, 0x5D, 0x5B, 0x6F, 0x4F, 0x5D, 0x5B, 0x67
, 0x47, 0x5D, 0x5B, 0x6C, 0x4C, 0x5D, 0x5B, 0x65-45, 0x5D, 0x20, 0x3F, 0x2A, 0x22, 0x29, 0x26
, 0x26, 0x28, 0x42, 0x45, 0x4F, 0x53, 0x3A, 0x54-59, 0x50, 0x45, 0x3D, 0x3D, 0x22, 0x61, 0x70
, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F-6E, 0x2F, 0x78, 0x2D, 0x76, 0x6E, 0x64, 0x2E
, 0x42, 0x65, 0x2D, 0x62, 0x6F, 0x6F, 0x6B, 0x6D-61, 0x72, 0x6B, 0x22, 0x29, 0x29, 0x00, 0x, 0x, 0x
, 0xFD, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x01, 0x00, 0x00, 0x00, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x31, 0x42, 0x4F, 0x46, 0x01, 0x00, 0x00, 0x98-98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x01, 0x0F, 0x47, 0x4E, 0x4F, 0x4C, 0x04, 0x0C-63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6F, 0x6E
, 0x44, 0x61, 0x74, 0x65, 0x51, 0xEA, 0xC7, 0x41-0F, 0x47, 0x4E, 0x4C, 0x4C, 0x08, 0x08, 0x63
, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x00-00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B
, 0x52, 0x54, 0x53, 0x43, 0x08, 0x0A, 0x64, 0x65-76, 0x69, 0x63, 0x65, 0x4E, 0x61, 0x6D, 0x65
, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x41-0B, 0x52, 0x54, 0x53, 0x43, 0x10, 0x0A, 0x76
, 0x6F, 0x6C, 0x75, 0x6D, 0x65, 0x4E, 0x61, 0x6D-65, 0x07, 0x00, 0x00, 0x00, 0x47, 0x6F, 0x6F
, 0x67, 0x6C, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00-00, 0x0B, 0x52, 0x54, 0x53, 0x43, 0x10, 0x07
, 0x66, 0x73, 0x68, 0x4E, 0x61, 0x6D, 0x65, 0x09-00, 0x00, 0x00, 0x67, 0x6F, 0x6F, 0x67, 0x6C
, 0x65, 0x66, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x42, 0x6F, 0x6F, 0x6B, 0x6D, 0x61, 0x72, 0x6B-00, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x6E, 0x79, 0x62, 0x46, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x00, 0x00, 0x06, 0xEC, 0x00, 0x00, 0x00, 0x00-01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00-00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x41, 0x6E, 0x79, 0x20, 0x71, 0x75, 0x65, 0x73-74, 0x69, 0x6F, 0x6E, 0x20, 0x79, 0x6F, 0x75
, 0x27, 0x64, 0x20, 0x6C, 0x69, 0x6B, 0x65, 0x20-74, 0x6F, 0x20, 0x61, 0x73, 0x6B, 0x20, 0x67
, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x20, 0x3F, 0x00-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6F, 0x6E, 0x74-72, 0x6F, 0x6C, 0x00, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x27, 0x00, 0x00, 0x00, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0x00, 0x00, 0x00, 0x00, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x-, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x
, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00-00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00-00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x82, 0x43, 0x00, 0x00, 0xA0, 0x42-00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0xE0, 0x9F, 0x44, 0x00, 0xC0, 0x7F, 0x44-FF, 0xFF, 0xFF, 0xFF, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x

View File

@ -0,0 +1,33 @@
File: Search Google a
Type Size Name Value
---------- ---------- ---------------------------------- -----------------------------------------------------------------
'MIMS' 35 "BEOS:TYPE" "application/x-vnd.Be-queryTemplate"
STRING 191 "_trk/qrystr" "((name==\"*[aA][nN][yY] [qQ][uU][eE][sS][tT][iI][oO][nN] [yY][o"
"O][uU]\\'[dD] [lL][iI][kK][eE] [tT][oO] [aA][sS][kK] [gG][oO][o"
"O][gG][lL][eE] ?*\")&&(BEOS:TYPE==\"application/x-vnd.Be-bookma"
"rk\"))"
BOOL 1 "_trk/queryDynamicDate" TRUE
INT32 4 "_trk/recentQuery" 1 0x00000001
MESSAGE 152 "_trk/qryvol1" 31 42 4F 46 01 00 00 98-98 00 00 00 00 00 00 00 1BOF............
01 0F 47 4E 4F 4C 04 0C-63 72 65 61 74 69 6F 6E ..GNOL..creation
44 61 74 65 51 EA C7 41-0F 47 4E 4C 4C 08 08 63 DateQ..A.GNLL..c
61 70 61 63 69 74 79 00-00 00 00 00 00 00 00 0B apacity.........
52 54 53 43 08 0A 64 65-76 69 63 65 4E 61 6D 65 RTSC..deviceName
01 00 00 00 00 00 70 41-0B 52 54 53 43 10 0A 76 ......pA.RTSC..v
6F 6C 75 6D 65 4E 61 6D-65 07 00 00 00 47 6F 6F olumeName....Goo
67 6C 65 00 00 00 00 00-00 0B 52 54 53 43 10 07 gle.......RTSC..
66 73 68 4E 61 6D 65 09-00 00 00 67 6F 6F 67 6C fshName....googl
65 66 73 00 00 00 00 00- efs.....
STRING 9 "_trk/qryinitmime" "Bookmark"
INT32 4 "_trk/qryinitmode" 1180858734 0x4662796E
RAW 36 "_trk/qrymoreoptions_le" 00 00 06 EC 00 00 00 00-01 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
00 00 00 00 - ....
STRING 40 "_trk/qryinitstr" "Any question you'd like to ask google ?"
STRING 12 "_trk/focusedView" "TextControl"
INT32 4 "_trk/focusedSelEnd" 39 0x00000027
INT32 4 "_trk/focusedSelStart" 0 0x00000000
RAW 60 "_trk/xtpinfo_le" FF FF FF FF 00 00 00 00-00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00-00 00 00 00 01 00 00 00 ................
00 00 82 43 00 00 A0 42-00 00 00 00 00 00 00 00 ...C...B........
00 E0 9F 44 00 C0 7F 44-FF FF FF FF ...D...D....

View File

@ -0,0 +1,2 @@
#!/bin/sh
query -v /google/ '((name=="*'"$*"'*")&&(BEOS:TYPE=="application/x-vnd.Be-bookmark"))' | xargs catattr META:url

View File

@ -0,0 +1,2 @@
#!/bin/sh
query -v /google/ '((name=="*'"$*"'*")&&(BEOS:TYPE=="application/x-vnd.Be-bookmark"))' | xargs catattr META:url | head -1

View File

@ -0,0 +1,33 @@
/bin/setmime -set application/x-vnd.Be-bookmark -short "Bookmark" -long "Bookmark for a web page." -preferredAppSig application/x-vnd.Be-NPOS \
-attribute "META:url" -attrName "URL" \
-attrType 'CSTR' -attrWidth 170 -attrAlignment left \
-attrViewable 1 -attrEditable 1 -attrExtra 0 \
-attribute "META:keyw" -attrName "Keywords" \
-attrType 'CSTR' -attrWidth 130 -attrAlignment left \
-attrViewable 1 -attrEditable 1 -attrExtra 0 \
-attribute "META:title" -attrName "Title" \
-attrType 'CSTR' -attrWidth 130 -attrAlignment left \
-attrViewable 1 -attrEditable 1 -attrExtra 0 \
-attribute "GOOGLE:order" -attrName "Google order" \
-attrType 'LONG' -attrWidth 40 -attrAlignment right \
-attrViewable 1 -attrEditable 1 -attrExtra 0 \
-miniIcon ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff00003f1b0000ffffffff\
ffffffffff001b1c3f3f3f1b0000ffffffffffffff0000111b1c3f3f3f1b0000ffffff00002d2c0000111b1c3f000e5dffff003f00002d2c2d00001b000f5d00\
ffff003f1b1c00002d2c2d000f5d00ffff001b3f3f3f1b1c00002d2c000011ffff001b1c3f3f3f3f1b00002c2d2d0000005d00001c1b3f3f000e5d00002d2c00\
00005d1c00001c000f5d00ffff00003fffff00005d1b000f5d00ffffffffffffffffffff00005d5d00ffffffffffffffffffffffffff0000ffffffffffffffff \
-largeIcon ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003f0000ffffffffffffffffffffff\
ffffffffffffffffffffffffffffffff001b1c3f3f0000ffffffffffffffffffffffffffffffffffffffffffff0000003f191a1b1c3f3f0000ffffffffffffff\
ffffffffffffffffffffffff003f3f3f3f3f3f191a1b1c3f3f0000ffffffffffffffffffffffffffffffff001b1c1b3f3f3f3f3f3f191a1b1c3f3f000000ffff\
ffffffffffffffffffff000000151b1c1c3f3f3f3f3f3f191a1b1c3f3f0000ffffffffffffffffffffff002b2a0000151b1c1c3f3f3f3f3f3f191a1b1c0000ff\
ffffffffffffffffff00302c2d2b2a0000151b1c1c3f3f3f3f1b1c00001b00ffffffffffffffff00000000302f2c2d2b2b0100151c1b1c3f1b00001c0f005d00\
ffffffffffff001b1c0f0f0000302f2c2d2b2b0100151c1b001c0f0f005d00ffffffffffff001b1c1b1c1c0f0e00002f302c2d2b2a000016000f1b005d000fff\
ffffffff003f3f3f3f1b1c1b1c0f0f00002f302c2d2b2a00001b005d000fffffffffffff003f3f3f3f3f3f1b1c1b1c0f0f00002f302b313132005d000fffffff\
ffffff003f3f3f3f3f3f3f3f3f1b1c1b1c0f0f00002f32313200000fffffffffffffff001b3f3f3f3f3f3f3f3f3f3f1b1c1b1c1c00003231320000000f0fffff\
ffff003f1b3f1b3f3f3f3f3f3f3f3f3f3f1b000000000031312d2b2a00000f0fff00003f3f3f1b3f3f3f3f3f3f3f3f3f3f000e0f1c000031312c2d2c2b2b0000\
ff1b0000003f3f1b1c3f3f3f3f3f3f3f000e1c3f005d000000002d2c2d2d000fff00003f3f00003f3f1b1c3f3f3f3f3f001b3f005d00000effff00002d2c00ff\
005d5d00003f3f00003f3f1b1c3f3f001b3f005d000effffffffffff000000ffff00005d5d00003f3f00003f3f1b3f001b005d000fffffffffffffffffffffff\
ffffff00005d5d00003f3f00003f001b005d000fffffffffffffffffffffffffffffffffff00005d5d00003f3f001b005d000fffffffffffffffffffffffffff\
ffffffffffffff00005d5d00003f005d000effffffffffffffffffffffffffffffffffffffffffffff00005d5d005d000effffffffffffffffffffffffffffff\
ffffffffffffffffffffff00005d000effffffffffffffffffffffffffffffffffffffffffffffffffffffffff000effffffffffffffffffffffffffffffffff

View File

@ -0,0 +1,15 @@
# googlefs configuration file
#
# IP of the google server to query
server 66.102.11.99
# max number of vnodes allowed in the fs (to limit RAM usage)
# 10 <= allowed <= 1000000
max_nodes 5000
# maximum number of results to ask google for
max_results 50
# delete result entries on last query close
sync_unlink 0

View File

@ -0,0 +1,250 @@
#ifndef _FSPROTO_H
#define _FSPROTO_H
//#include <sys/dirent.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <unistd.h>
#include <iovec.h>
#include <OS.h>
#include <fs_attr.h>
#include <fs_info.h>
#include <BeBuild.h>
typedef dev_t nspace_id;
typedef ino_t vnode_id;
/* UGLY UGLY UGLY */
#ifndef _DRIVERS_H
struct selectsync;
typedef struct selectsync selectsync;
#endif
/*
* PUBLIC PART OF THE FILE SYSTEM PROTOCOL
*/
#define WSTAT_MODE 0x0001
#define WSTAT_UID 0x0002
#define WSTAT_GID 0x0004
#define WSTAT_SIZE 0x0008
#define WSTAT_ATIME 0x0010
#define WSTAT_MTIME 0x0020
#define WSTAT_CRTIME 0x0040
#define WFSSTAT_NAME 0x0001
#define B_ENTRY_CREATED 1
#define B_ENTRY_REMOVED 2
#define B_ENTRY_MOVED 3
#define B_STAT_CHANGED 4
#define B_ATTR_CHANGED 5
#define B_DEVICE_MOUNTED 6
#define B_DEVICE_UNMOUNTED 7
#define B_STOP_WATCHING 0x0000
#define B_WATCH_NAME 0x0001
#define B_WATCH_STAT 0x0002
#define B_WATCH_ATTR 0x0004
#define B_WATCH_DIRECTORY 0x0008
/* UGLY UGLY UGLY - that goes to Drivers.h too */
#ifndef SELECT_READ
#define SELECT_READ 1
#define SELECT_WRITE 2
#define SELECT_EXCEPTION 3
#endif
#define B_CUR_FS_API_VERSION 2
struct attr_info;
struct index_info;
typedef int op_read_vnode(void *ns, vnode_id vnid, char r, void **node);
typedef int op_write_vnode(void *ns, void *node, char r);
typedef int op_remove_vnode(void *ns, void *node, char r);
typedef int op_secure_vnode(void *ns, void *node);
typedef int op_walk(void *ns, void *base, const char *file, char **newpath,
vnode_id *vnid);
typedef int op_access(void *ns, void *node, int mode);
typedef int op_create(void *ns, void *dir, const char *name,
int omode, int perms, vnode_id *vnid, void **cookie);
typedef int op_mkdir(void *ns, void *dir, const char *name, int perms);
typedef int op_symlink(void *ns, void *dir, const char *name,
const char *path);
typedef int op_link(void *ns, void *dir, const char *name, void *node);
typedef int op_rename(void *ns, void *olddir, const char *oldname,
void *newdir, const char *newname);
typedef int op_unlink(void *ns, void *dir, const char *name);
typedef int op_rmdir(void *ns, void *dir, const char *name);
typedef int op_readlink(void *ns, void *node, char *buf, size_t *bufsize);
typedef int op_opendir(void *ns, void *node, void **cookie);
typedef int op_closedir(void *ns, void *node, void *cookie);
typedef int op_rewinddir(void *ns, void *node, void *cookie);
typedef int op_readdir(void *ns, void *node, void *cookie, long *num,
struct dirent *buf, size_t bufsize);
typedef int op_open(void *ns, void *node, int omode, void **cookie);
typedef int op_close(void *ns, void *node, void *cookie);
typedef int op_free_cookie(void *ns, void *node, void *cookie);
typedef int op_read(void *ns, void *node, void *cookie, off_t pos, void *buf,
size_t *len);
typedef int op_write(void *ns, void *node, void *cookie, off_t pos,
const void *buf, size_t *len);
typedef int op_readv(void *ns, void *node, void *cookie, off_t pos, const iovec *vec,
size_t count, size_t *len);
typedef int op_writev(void *ns, void *node, void *cookie, off_t pos, const iovec *vec,
size_t count, size_t *len);
typedef int op_ioctl(void *ns, void *node, void *cookie, int cmd, void *buf,
size_t len);
typedef int op_setflags(void *ns, void *node, void *cookie, int flags);
typedef int op_rstat(void *ns, void *node, struct stat *);
typedef int op_wstat(void *ns, void *node, struct stat *, long mask);
typedef int op_fsync(void *ns, void *node);
typedef int op_select(void *ns, void *node, void *cookie, uint8 event,
uint32 ref, selectsync *sync);
typedef int op_deselect(void *ns, void *node, void *cookie, uint8 event,
selectsync *sync);
typedef int op_initialize(const char *devname, void *parms, size_t len);
typedef int op_mount(nspace_id nsid, const char *devname, ulong flags,
void *parms, size_t len, void **data, vnode_id *vnid);
typedef int op_unmount(void *ns);
typedef int op_sync(void *ns);
typedef int op_rfsstat(void *ns, struct fs_info *);
typedef int op_wfsstat(void *ns, struct fs_info *, long mask);
typedef int op_open_attrdir(void *ns, void *node, void **cookie);
typedef int op_close_attrdir(void *ns, void *node, void *cookie);
typedef int op_rewind_attrdir(void *ns, void *node, void *cookie);
typedef int op_read_attrdir(void *ns, void *node, void *cookie, long *num,
struct dirent *buf, size_t bufsize);
typedef int op_remove_attr(void *ns, void *node, const char *name);
typedef int op_rename_attr(void *ns, void *node, const char *oldname,
const char *newname);
typedef int op_stat_attr(void *ns, void *node, const char *name,
struct attr_info *buf);
typedef int op_write_attr(void *ns, void *node, const char *name, int type,
const void *buf, size_t *len, off_t pos);
typedef int op_read_attr(void *ns, void *node, const char *name, int type,
void *buf, size_t *len, off_t pos);
typedef int op_open_indexdir(void *ns, void **cookie);
typedef int op_close_indexdir(void *ns, void *cookie);
typedef int op_rewind_indexdir(void *ns, void *cookie);
typedef int op_read_indexdir(void *ns, void *cookie, long *num,
struct dirent *buf, size_t bufsize);
typedef int op_create_index(void *ns, const char *name, int type, int flags);
typedef int op_remove_index(void *ns, const char *name);
typedef int op_rename_index(void *ns, const char *oldname,
const char *newname);
typedef int op_stat_index(void *ns, const char *name, struct index_info *buf);
typedef int op_open_query(void *ns, const char *query, ulong flags,
port_id port, long token, void **cookie);
typedef int op_close_query(void *ns, void *cookie);
typedef int op_read_query(void *ns, void *cookie, long *num,
struct dirent *buf, size_t bufsize);
typedef struct vnode_ops {
op_read_vnode (*read_vnode);
op_write_vnode (*write_vnode);
op_remove_vnode (*remove_vnode);
op_secure_vnode (*secure_vnode);
op_walk (*walk);
op_access (*access);
op_create (*create);
op_mkdir (*mkdir);
op_symlink (*symlink);
op_link (*link);
op_rename (*rename);
op_unlink (*unlink);
op_rmdir (*rmdir);
op_readlink (*readlink);
op_opendir (*opendir);
op_closedir (*closedir);
op_free_cookie (*free_dircookie);
op_rewinddir (*rewinddir);
op_readdir (*readdir);
op_open (*open);
op_close (*close);
op_free_cookie (*free_cookie);
op_read (*read);
op_write (*write);
op_readv (*readv);
op_writev (*writev);
op_ioctl (*ioctl);
op_setflags (*setflags);
op_rstat (*rstat);
op_wstat (*wstat);
op_fsync (*fsync);
op_initialize (*initialize);
op_mount (*mount);
op_unmount (*unmount);
op_sync (*sync);
op_rfsstat (*rfsstat);
op_wfsstat (*wfsstat);
op_select (*select);
op_deselect (*deselect);
op_open_indexdir (*open_indexdir);
op_close_indexdir (*close_indexdir);
op_free_cookie (*free_indexdircookie);
op_rewind_indexdir (*rewind_indexdir);
op_read_indexdir (*read_indexdir);
op_create_index (*create_index);
op_remove_index (*remove_index);
op_rename_index (*rename_index);
op_stat_index (*stat_index);
op_open_attrdir (*open_attrdir);
op_close_attrdir (*close_attrdir);
op_free_cookie (*free_attrdircookie);
op_rewind_attrdir (*rewind_attrdir);
op_read_attrdir (*read_attrdir);
op_write_attr (*write_attr);
op_read_attr (*read_attr);
op_remove_attr (*remove_attr);
op_rename_attr (*rename_attr);
op_stat_attr (*stat_attr);
op_open_query (*open_query);
op_close_query (*close_query);
op_free_cookie (*free_querycookie);
op_read_query (*read_query);
} vnode_ops;
extern _IMPEXP_KERNEL int new_path(const char *path, char **copy);
extern _IMPEXP_KERNEL void free_path(char *p);
extern _IMPEXP_KERNEL int notify_listener(int op, nspace_id nsid,
vnode_id vnida, vnode_id vnidb,
vnode_id vnidc, const char *name);
extern _IMPEXP_KERNEL void notify_select_event(selectsync *sync, uint32 ref);
extern _IMPEXP_KERNEL int send_notification(port_id port, long token,
ulong what, long op, nspace_id nsida,
nspace_id nsidb, vnode_id vnida,
vnode_id vnidb, vnode_id vnidc,
const char *name);
extern _IMPEXP_KERNEL int get_vnode(nspace_id nsid, vnode_id vnid, void **data);
extern _IMPEXP_KERNEL int put_vnode(nspace_id nsid, vnode_id vnid);
extern _IMPEXP_KERNEL int new_vnode(nspace_id nsid, vnode_id vnid, void *data);
extern _IMPEXP_KERNEL int remove_vnode(nspace_id nsid, vnode_id vnid);
extern _IMPEXP_KERNEL int unremove_vnode(nspace_id nsid, vnode_id vnid);
extern _IMPEXP_KERNEL int is_vnode_removed(nspace_id nsid, vnode_id vnid);
extern _EXPORT vnode_ops fs_entry;
extern _EXPORT int32 api_version;
#endif

View File

@ -0,0 +1,140 @@
<html><head><meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=ISO-8859-1"><title>Google Search: google api help &quot;frequently asked&quot; -plop </title><style><!--
body,td,div,.p,a{font-family:arial,sans-serif }
div,td{color:#000}
.f,.fl:link{color:#6f6f6f}
a:link,.w,a.w:link,.w a:link{color:#00c}
a:visited,.fl:visited{color:#551a8b}
a:active,.fl:active{color:#f00}
.t a:link,.t a:active,.t a:visited,.t{color:#000}
.t{background-color:#e5ecf9}
.k{background-color:#36c}
.j{width:34em}
.h{color:#36c}
.i,.i:link{color:#a90a08}
.a,.a:link{color:#008000}
.z{display:none}
div.n {margin-top: 1ex}
.n a{font-size:10pt; color:#000}
.n .i{font-size:10pt; font-weight:bold}
.q a:visited,.q a:link,.q a:active,.q {color: #00c; }
.b{font-size: 12pt; color:#00c; font-weight:bold}
.ch{cursor:pointer;cursor:hand}
.e{margin-top: .75em; margin-bottom: .75em}
.g{margin-top: 1em; margin-bottom: 1em}
//-->
</style>
<script>
<!--
function ss(w){window.status=w;return true;}
function cs(){window.status='';}
function ga(o,e) {return true;}
//-->
</script>
</head><body bgcolor=#ffffff topmargin=2 marginheight=2><table border=0 cellpadding=0 cellspacing=0><tr><td valign=top><a href="http://www.google.com/webhp?hl=en"><img src="/images/logo_sm.gif" width=150 height=55 alt="Go to Google Home" border=0 vspace=12></a></td><td>&nbsp;&nbsp;</td><td valign=top><table cellpadding=0 cellspacing=0 border=0><tr><td height=14 valign=bottom><table border=0 cellpadding=4 cellspacing=0><tr><td class=q><font size=-1><font color=#000000><b>Web</b></font>&nbsp;&nbsp;&nbsp;&nbsp;<a id=t1a class=q href="http://images.google.com/images?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=&ie=UTF-8&sa=N&as_qdr=m3&tab=wi">Images</a>&nbsp;&nbsp;&nbsp;&nbsp;<a id=t2a class=q href="http://groups-beta.google.com/groups?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=&ie=UTF-8&sa=N&as_qdr=m3&tab=wg">Groups</a><sup><a href="http://groups-beta.google.com/groups?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=&ie=UTF-8&sa=N&as_qdr=m3&tab=wg" style="text-decoration:none;"><font color=red>New!</font></a></sup>&nbsp;&nbsp;&nbsp;&nbsp;<a id=t4a class=q href="http://news.google.com/news?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=&ie=UTF-8&sa=N&as_qdr=m3&tab=wn">News</a>&nbsp;&nbsp;&nbsp;&nbsp;<a id=t5a class=q href="http://froogle.google.com/froogle?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=&ie=UTF-8&sa=N&as_qdr=m3&tab=wf">Froogle</a>&nbsp;&nbsp;&nbsp;&nbsp;</font><font size=-1><b><a href="/options/" class=q>more&nbsp;&raquo;</a></b></font></td></tr></table></td></tr><tr><td><table border=0 cellpadding=0 cellspacing=0><tr><td nowrap><form name=gs method=GET action=/search><input type=hidden name=num value=50><input type=hidden name=hl value="en"><input type=hidden name=lr value="lang_en"><input type=hidden name=ie value="ISO-8859-1"><input type=hidden name=as_qdr value="m3"><input type=text name=q size=41 maxlength=2048 value="google api help &quot;frequently asked&quot; -plop"><font size=-1> &nbsp;<select name=as_qdr><option value="all">anytime<option value="m3" selected>past <b>3</b> <b>months</b><option value="m6">past <b>6</b> <b>months</b><option value="y">past year</select>&nbsp;<input type=submit name="btnG" value="Search"><span id=hf></span></font></td><td nowrap><font size=-2>&nbsp;&nbsp;<a href=/advanced_search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3>Advanced Search</a><br>&nbsp;&nbsp;<a href=/preferences?q=google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3>Preferences</a>&nbsp;&nbsp;&nbsp;&nbsp;</font></td></tr></table></td></tr></table><table cellpadding=0 cellspacing=0 border=0><tr><td><font size=-1><input id=stw type=radio name=lr value="" ><label for=stw>Search the Web</label><input id=lrt type=radio name=lr value=lang_en checked><label for=lrt>Search English pages</label></font></td></tr><tr><td height=7><img width=1 height=1 alt=""></td></tr></table></td></tr></form></table>
<style><!--
.fl:link{color:#7777CC}
-->
</style>
<table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc><img width=1 height=1 alt=""></td></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0 bgcolor=#e5ecf9><tr><td bgcolor=#e5ecf9 nowrap><font size=+1>&nbsp;<b>Web</b></font>&nbsp;</td><td bgcolor=#e5ecf9 align=right nowrap><font size=-1 color=>Results <b>1</b> - <b>50</b> of about <b>12,800</b> <b>English</b> pages over the <b>past <b>3</b> <b>months</b></b> for <b>google api help &quot;frequently asked&quot; -plop</b>. (<b>0.40</b> seconds)&nbsp;</font></td></tr></table><table cellspacing=0 cellpadding=0 width=25% align=right bgColor=#ffffff border=0><tr><td colspan=4><font size=-1>&nbsp;</font></td></tr><tr><td rowspan=5>&nbsp;&nbsp;</td><td width=1 bgcolor=#c9d7f1 rowspan=5><img width=1 height=1 alt=""></td><td rowspan=5>&nbsp;&nbsp;</td><td height=25 align=center><font color=#6f6f6f size=-1>Sponsored Links</font></td></tr><tr height=7><td><img width=1 height=1 alt=""></td></tr><tr><td nowrap><font size=-1><a id=aw1 href=/pagead/iclk?adurl=http://www.google-store.com/index.php%3FcPath%3D24&sa=l&ai=Bqi6_oW-1QZX2MpWyQZLA1cUBibTDB6XtoJYBt7-F5QHQhgMQARgBMAA4AEDKEUi_OaABj-_B_gPIAQE&num=1 onMouseOver="return ss('go to www.GoogleStore.com')" onMouseOut="cs()"><b>Google</b> <b>Help</b></a><br>Better Understand Your Results &amp;<br>Learn Fun Facts Too. Get More Info!<br><font class=a>www.GoogleStore.com</font></font></td></tr><tr height=7><td><img width=1 height=1 alt=""></td></tr><tr><td height=25 align=center><font size=-1><a href="https://adwords.google.com/select/main?cmd=Login&sourceid=awo&subid=symhen1&hl=en" class=fl>See your message here...</a></font></td></tr></table><div><p class=g><a href=http://www.google.com/apis/api_faq.html><b>Google</b> Web APIs - FAQ</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> a custom Java client library, documentation on <b>how</b> <b>to</b> use the <b>...</b> You can find it at
http://<b>api</b>.<b>google</b>.com/GoogleSearch.wsdl <b>...</b> need to get started is in <b>googleapi</b>.jar <b>...</b>
<br><font color=#008000>www.<b>google</b>.com/<b>api</b>s/<b>api</b>_faq.html - 29k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:vR7BaPWutnkJ:www.google.com/apis/api_faq.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.google.com/apis/api_faq.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.seocount.com/faq.php>SEO Count - Keyword Ranking Tool - <b>Frequently</b> <b>Asked</b> Questions</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>Frequently</b> <b>Asked</b> Questions. <b>...</b> that <b>Google</b> only indexes the www version to <b>help</b> increase
Page <b>...</b> Since the <b>Google</b> <b>API</b> provides results for UTF-8 Encoding we are able <b>...</b>
<br><font color=#008000>www.seocount.com/faq.php - 16k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:JUp4DvQqYDsJ:www.seocount.com/faq.php+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.seocount.com/faq.php">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.ebayhacks.com/exec/show/book_faq>eBay Hacks - <b>Frequently</b> <b>Asked</b> Questions</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> If you need <b>help</b> getting started with eBay, you&#39;d <b>...</b> is concerned with programming and
the eBay <b>API</b>; that leaves <b>...</b> 5.36934319 × 10 41 Joules, as reported by <b>Google</b> <b>...</b>
<br><font color=#008000>www.ebayhacks.com/exec/show/book_faq - 8k - 5 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:pM93M0j51uQJ:www.ebayhacks.com/exec/show/book_faq+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.ebayhacks.com/exec/show/book_faq">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.freeprogrammingresources.com/soap.html>Free SOAP Resources, freeprogrammingresources.com</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> The <b>Google</b> <b>API</b> is used as an example. <b>...</b> Tutorials, Links FAQs. <b>...</b> This page explains <b>how</b>
<b>to</b> get started editing the home page of your Manila site using SOAP to make <b>...</b>
<br><font color=#008000>www.freeprogrammingresources.com/soap.html - </font><nobr> <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.freeprogrammingresources.com/soap.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.top25web.com/faq.html>FAQ: SEO Search Engine Optimization <b>Frequently</b> <b>Asked</b> Questions</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> come from the Top25Web.com server, and it is using the <b>Google</b> <b>API</b> which was recently
made available by <b>Google</b>. <b>...</b> Post a message in our forums for more <b>help</b>! <b>...</b>
<br><font color=#008000>www.top25web.com/faq.html - 15k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:52lfVKHHvP0J:www.top25web.com/faq.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.top25web.com/faq.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://interalia.org/archives/2003/03/24/google-api-cocoa-framework>Among Other Things » <b>Google</b> <b>API</b> Cocoa framework</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> to be using the <b>Google</b> <b>API</b> for something <b>...</b> NetBSD/dreamcast NetBSD/dreamcast: <b>How</b> <b>to</b>
use NetBSD/dreamcast NetBSD/dreamcast <b>Frequently</b> <b>Asked</b> Questions The <b>...</b>
<br><font color=#008000>interalia.org/archives/2003/ 03/24/<b>google</b>-<b>api</b>-cocoa-framework - 48k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:c7cLz3BPqFcJ:interalia.org/archives/2003/03/24/google-api-cocoa-framework+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:interalia.org/archives/2003/03/24/google-api-cocoa-framework">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.googleguide.com/links.html><b>Google</b> Guide: Useful Links</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> www.googleguide.com/searchLeader.html; <b>Google&#39;s</b> Online <b>Help</b>: <b>Google</b> <b>Help</b> Central -
www.<b>google</b>.com/<b>help</b>/; <b>...</b> <b>Google</b> Web <b>API</b> - www.<b>google</b>.com/apis/ <b>API</b> stands <b>...</b>
<br><font color=#008000>www.<b>google</b>guide.com/links.html - 12k - 6 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:afR9S_mwClsJ:www.googleguide.com/links.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.googleguide.com/links.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.codecomments.com/Clipper/message320018.html>FAQ: Very <b>Frequently</b> <b>Asked</b> Questions (with answers) v1.29</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> some of the questions that are most <b>frequently</b> <b>asked</b> in comp <b>...</b> <b>Google</b> search:
&lt;URL:http://groups.<b>google</b>.com/groups <b>...</b> URLs contain information on <b>how</b> <b>to</b> reinstate <b>...</b>
<br><font color=#008000>www.codecomments.com/Clipper/message320018.html - 23k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:SNHirYqDNpQJ:www.codecomments.com/Clipper/message320018.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.codecomments.com/Clipper/message320018.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <blockquote class=g><p class=g><a href=http://www.codecomments.com/Prolog/message321541.html>comp.lang.prolog <b>Frequently</b> <b>Asked</b> Questions</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> For details on <b>how</b> <b>to</b> join or send in contributions, check <b>...</b> readers who would be glad
to <b>help</b> people making a <b>...</b> Yes, there are: <b>Google</b> Groups has archives of news <b>...</b>
<br><font color=#008000>www.codecomments.com/Prolog/message321541.html - 42k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:uPuRm5kbI-kJ:www.codecomments.com/Prolog/message321541.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.codecomments.com/Prolog/message321541.html">Similar&nbsp;pages</a></nobr><br>[ <a class=fl href=/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=+site:www.codecomments.com+google+api++help+%22frequently+asked%22+-plop>More results from www.codecomments.com</a> ]</font></td></tr></table> </blockquote><p class=g><a href=http://open.echomine.org/cowiki/20.html><b>Frequently</b> <b>Asked</b> Questions</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> <b>Frequently</b> <b>Asked</b> Questions. <b>...</b> Since the <b>API</b> is entirely modular, we are looking for
people who can <b>help</b> fix bugs or add enhancements to the project. <b>...</b>
<br><font color=#008000>open.echomine.org/cowiki/20.html - 36k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:vxoDXjAbG3IJ:open.echomine.org/cowiki/20.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:open.echomine.org/cowiki/20.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.chat11.com/SEM_-_Paid_Inclusion_Doesn't_Seem_To_Be_Helping>Chat11.com: SEM - Paid Inclusion Doesn&#39;t Seem To Be Helping</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> <b>Google</b>, <b>...</b> I Thought Paid Inclusion Would <b>Help</b>, So Why Are My Pages Not Ranked Better? <b>...</b>
Our Tutorial About <b>How</b> <b>To</b> Increase Visitors To Your Website. <b>...</b>
<br><font color=#008000>www.chat11.com/ SEM_-_Paid_Inclusion_Doesn&#39;t_Seem_To_Be_Helping - 17k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:QNbuFVRJUF4J:www.chat11.com/SEM_-_Paid_Inclusion_Doesn%27t_Seem_To_Be_Helping+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.chat11.com/SEM_-_Paid_Inclusion_Doesn%27t_Seem_To_Be_Helping">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.wwwcoder.com/main/parentid/191/site/3373/68/default.aspx>Data Transformation Services for SQL Server 2005: <b>Frequently</b> <b>Asked</b> <b>...</b></a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Tuesday, November 23, 2004. .: Home Articles/Tutorials SQL_Server : Data Transformation
Services for SQL Server 2005: <b>Frequently</b> <b>Asked</b> Design Questions. <b>...</b>
<br><font color=#008000>www.wwwcoder.com/main/parentid/ 191/site/3373/68/default.aspx - 47k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:F4Tru65giswJ:www.wwwcoder.com/main/parentid/191/site/3373/68/default.aspx+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.wwwcoder.com/main/parentid/191/site/3373/68/default.aspx">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://webservices.xml.com/programming/>Programming Articles on webservices.xml.com</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> month&#39;s XML Endpoints column, Rich Salz explains <b>how</b> <b>to</b> process SOAP <b>...</b> <b>Google&#39;s</b> Gaffe.
By Paul Prescod Paul Prescod explains why moving its <b>API</b> to use <b>...</b>
<br><font color=#008000>webservices.xml.com/programming/ - 38k - 5 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:6Fah1mD4lYoJ:webservices.xml.com/programming/+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:webservices.xml.com/programming/">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.helpware.net/FAR/far_faq.htm>HTML <b>Help</b> FAQs</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> This is a nice site found using <b>Google</b>: <b>...</b> Borland Delphi and HH. Free code examples
show you <b>how</b> <b>to</b> program the HTML <b>Help</b> <b>API</b> via Borland Delphi. <b>...</b>
<br><font color=#008000>www.<b>help</b>ware.net/FAR/far_faq.htm - 101k - 5 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:P4-m_2muxlIJ:www.helpware.net/FAR/far_faq.htm+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.helpware.net/FAR/far_faq.htm">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://ruminations.weblogger.com/>Ruminations</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> <b>Frequently</b> <b>Asked</b> Questions, Getting Started with Radio UserLand, Tips, and Tutorials. <b>...</b>
Using the <b>Google</b> <b>API</b> with Radio and Frontier - <b>How</b> <b>to</b> make requests <b>...</b>
<br><font color=#008000>ruminations.weblogger.com/ - 27k - 5 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:aX1tEUdxrlAJ:ruminations.weblogger.com/+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:ruminations.weblogger.com/">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://news-01.rankforsales.com/news-bf/889-seo-nov-22-04.html><b>Google</b> launches its Deskbar <b>API</b></a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> a big difference in your rankings and our most popular ** <b>How</b> <b>To</b> ** section The <b>...</b> Deskbar
<b>API</b> can be found here: http://deskbar.<b>google</b>.com/<b>help</b>/<b>api</b>/index.html <b>...</b>
<br><font color=#008000>news-01.rankforsales.com/news-bf/889-seo-nov-22-04.html - 18k - 6 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:HmjXK8WGhkgJ:news-01.rankforsales.com/news-bf/889-seo-nov-22-04.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:news-01.rankforsales.com/news-bf/889-seo-nov-22-04.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.physci.org/codes/javafaq.jsp>Java FAQ - <b>Frequently</b> <b>Asked</b> Questions</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Search <b>google</b>. <b>...</b> The JAI <b>API</b> is the subject of discussion in this Sun sponsored mailing <b>...</b>
Java FAQ is written and maintained by Andrew Thompson, with <b>help</b> from the <b>...</b>
<br><font color=#008000>www.physci.org/codes/javafaq.jsp - 53k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:1qVElLEay90J:www.physci.org/codes/javafaq.jsp+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.physci.org/codes/javafaq.jsp">Similar&nbsp;pages</a></nobr></font></td></tr></table> <blockquote class=g><p class=g><a href=http://www.physci.org/guifaq.jsp><b>Frequently</b> <b>Asked</b> Questions - comp.lang.java.gui</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> first document has requested a notice that he is not a <b>help</b> desk for <b>...</b> 7.10 Java 3D
<b>API</b>. <b>...</b> see news:comp.lang.java.3d http://groups.<b>google</b>.com/groups?group=comp.lang <b>...</b>
<br><font color=#008000>www.physci.org/guifaq.jsp - 44k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:k5eyUK79yzcJ:www.physci.org/guifaq.jsp+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.physci.org/guifaq.jsp">Similar&nbsp;pages</a></nobr></font></td></tr></table> </blockquote><p class=g><a href=http://www.googleduel.com/about.php>GoogleDuel - About</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> <b>Asked</b> Questions (FAQ) An old <b>Frequently</b> <b>Asked</b> Questions list <b>...</b> sample source code which
illustrates <b>how</b> <b>to</b> use the <b>...</b> SOAP library to call the <b>Google</b> <b>API</b> from PHP. <b>...</b>
<br><font color=#008000>www.<b>google</b>duel.com/about.php - 12k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:avCr33BPa00J:www.googleduel.com/about.php+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.googleduel.com/about.php">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.bearcanyonseo.com/tips_links.html>Search engine articles, tools, links and resources</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Search Engine <b>Help</b> by Highrankings Search Engine Features Chart <b>...</b> top Guide to frames
usage <b>How</b> <b>to</b> Optimize a <b>...</b> Enumeration <b>Google</b> Count - uses <b>Google</b> <b>API</b> Go Rank <b>...</b>
<br><font color=#008000>www.bearcanyonseo.com/tips_links.html - 29k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:1F1_yTbuk0wJ:www.bearcanyonseo.com/tips_links.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.bearcanyonseo.com/tips_links.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.openoffice.org/faq.html>OpenOffice.org FAQ</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Most <b>Frequently</b> <b>Asked</b> Questions On using OpenOffice.org software in <b>...</b> printing with
the binaries, the <b>help</b> system, licensing <b>...</b> <b>API</b> FAQ Questions and answers on the <b>...</b>
<br><font color=#008000>www.openoffice.org/faq.html - 10k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:UrwdZzIyFLEJ:www.openoffice.org/faq.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.openoffice.org/faq.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.webmasterworld.com/forum80/457-9-10.htm>hey <b>Google</b> - don&#39;t auto-update my toolbar!</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>Google</b> Toolbar, Desktop Search, and <b>API</b> Topics. <b>...</b> <b>Google</b>, there is absolutely no need
for this. <b>...</b> <b>Asked</b> Questions section of the toolbar <b>help</b>: http://toolbar.<b>google</b> <b>...</b>
<br><font color=#008000>www.webmasterworld.com/forum80/457-9-10.htm - </font><nobr> <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.webmasterworld.com/forum80/457-9-10.htm">Similar&nbsp;pages</a></nobr></font></td></tr></table> <blockquote class=g><p class=g><a href=http://www.webmasterworld.com/forum80/457-10-10.htm>hey <b>Google</b> - don&#39;t auto-update my toolbar!</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>Google</b> Toolbar, Desktop Search, and <b>API</b> Topics. <b>...</b> then the very first link is to the
toolbar <b>help</b> page. <b>...</b> If <b>Google</b> is willing to support use of the toolbar without <b>...</b>
<br><font color=#008000>www.webmasterworld.com/forum80/457-10-10.htm - </font><nobr> <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.webmasterworld.com/forum80/457-10-10.htm">Similar&nbsp;pages</a></nobr><br>[ <a class=fl href=/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=+site:www.webmasterworld.com+google+api++help+%22frequently+asked%22+-plop>More results from www.webmasterworld.com</a> ]</font></td></tr></table> </blockquote><p class=g><a href=http://www.kcl.ac.uk/kis/support/cc/fortran/engfaq.html>Michel Olagnon&#39;s Fortran 90 List</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> programs and Microsoft Windows Open Database Connectivity (ODBC) <b>API</b>. <b>...</b> 3.7 - Other
places for <b>Help</b> on Fortran 90. <b>...</b> ftp.cs.unm.edu; Free Software; <b>How</b> <b>to</b> get Fortran <b>...</b>
<br><font color=#008000>www.kcl.ac.uk/kis/support/cc/fortran/engfaq.html - 56k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:_N13Y1xZug0J:www.kcl.ac.uk/kis/support/cc/fortran/engfaq.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.kcl.ac.uk/kis/support/cc/fortran/engfaq.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://confluence.atlassian.com/display/DOC/Frequently+Asked+Questions><b>Frequently</b> <b>Asked</b> Questions - Confluence</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> exporting, searchable attachments, a comprehensive remote <b>API</b>, easy installation <b>...</b>
starting up to tell it <b>how</b> <b>to</b> use its <b>...</b> If you need <b>help</b> with a particular server <b>...</b>
<br><font color=#008000>confluence.atlassian.com/ display/DOC/Frequently+Asked+Questions - 35k - 5 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:vcUvJpLMecwJ:confluence.atlassian.com/display/DOC/Frequently%2BAsked%2BQuestions+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:confluence.atlassian.com/display/DOC/Frequently%2BAsked%2BQuestions">Similar&nbsp;pages</a></nobr></font></td></tr></table> <blockquote class=g><p class=g><a href=http://confluence.atlassian.com/display/DOC/Frequently+Asked+Questions?focusedCommentId=11067><b>Frequently</b> <b>Asked</b> Questions - Confluence</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> I figured-out <b>how</b> <b>to</b> add an inline image. <b>...</b> page hierachies, page subscription, online
<b>help</b>, WebDAV file storage, a more comprehensive remote <b>API</b>... <b>...</b>
<br><font color=#008000>confluence.atlassian.com/display/DOC/ Frequently+Asked+Questions?focusedCommentId=11067 - 72k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:QjC6lo0skiIJ:confluence.atlassian.com/display/DOC/Frequently%2BAsked%2BQuestions%3FfocusedCommentId%3D11067+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:confluence.atlassian.com/display/DOC/Frequently%2BAsked%2BQuestions%3FfocusedCommentId%3D11067">Similar&nbsp;pages</a></nobr><br>[ <a class=fl href=/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=+site:confluence.atlassian.com+google+api++help+%22frequently+asked%22+-plop>More results from confluence.atlassian.com</a> ]</font></td></tr></table> </blockquote><p class=g><a href=http://pages.videotron.com/gbradet/home_bm.htm>Bookmarks for bradg@videotron.ca</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> The Mother of All Search Engines <b>Google</b> SEARCH.COM <b>...</b> J2EE <b>API</b> Java(TM) SE Platform
Documentation Servlets <b>...</b> Franck Allimant - Accueil (Win JDK <b>Help</b> Files) Getting <b>...</b>
<br><font color=#008000>pages.videotron.com/gbradet/home_bm.htm - 30k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:lZSFxlleiEoJ:pages.videotron.com/gbradet/home_bm.htm+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:pages.videotron.com/gbradet/home_bm.htm">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.java201.com/resources/browse/126-all.html>Resources for Java server-side developers: CLDC - Bluetooth <b>API</b> <b>...</b></a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Applications by Qusay H. Mahmoud This two-part series of articles will show you
<b>how</b> <b>to</b> use J2ME <b>...</b> Home &gt; J2ME Technologies &gt; CLDC - Bluetooth <b>API</b> (JSR-82). <b>Google</b>, <b>...</b>
<br><font color=#008000>www.java201.com/resources/browse/126-all.html - 13k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:4nsKRSM4O7sJ:www.java201.com/resources/browse/126-all.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.java201.com/resources/browse/126-all.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://vivisimo.com/html/faq>Vivísimo // <b>Frequently</b> <b>Asked</b> Questions</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> just a small sampling of who we can <b>help</b>: Researchers; Support <b>...</b> well we work on top
of the <b>Google</b> Appliance <b>...</b> delivered as aC software library with an <b>API</b>; they run <b>...</b>
<br><font color=#008000>vivisimo.com/html/faq - 31k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:qfDGPzGoMRsJ:vivisimo.com/html/faq+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:vivisimo.com/html/faq">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.datapower.com/xmldev/tech_resources.html>DataPower: Technical Resources</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Headers DataPower chief security architect Rich Salz explains <b>how</b> <b>to</b> process SOAP <b>...</b>
of WSDL, with particular reference to the new <b>Google</b> web services <b>API</b>. <b>...</b>
<br><font color=#008000>www.datapower.com/xmldev/tech_resources.html - 19k - 5 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:hPj-fnnugHcJ:www.datapower.com/xmldev/tech_resources.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.datapower.com/xmldev/tech_resources.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://myst-technology.com/mysmartchannels/public/search?q=mysmartchannels&scheme=standalone>Search Results | MySmartChannels</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Search <b>Google</b>, <b>...</b> MySmartChannels I agree that actually trying out the different SQL
functions on a computer will <b>help</b> with the <b>...</b> Is there an <b>API</b> to MySmartChannels? <b>...</b>
<br><font color=#008000>myst-technology.com/mysmartchannels/ public/search?q=mysmartchannels&amp;scheme=standalone - 101k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:yJQnPyVodzMJ:myst-technology.com/mysmartchannels/public/search%3Fq%3Dmysmartchannels%26scheme%3Dstandalone+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:myst-technology.com/mysmartchannels/public/search%3Fq%3Dmysmartchannels%26scheme%3Dstandalone">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.macromedia.com/support/ultradev/ts/documents/ultradev_faq.htm>Macromedia -UltraDevTechNotes:UltraDev Technical FAQ (<b>Frequently</b> <b>...</b></a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Printable instructions on <b>how</b> <b>to</b> create objects and server behaviors using UltraDev&#39;s
JavaScript <b>API</b> are available <b>...</b> Search powered by Powered by <b>Google</b>.
<br><font color=#008000>www.macromedia.com/support/ ultradev/ts/documents/ultradev_faq.htm - 28k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:FTjaxwaZiDcJ:www.macromedia.com/support/ultradev/ts/documents/ultradev_faq.htm+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.macromedia.com/support/ultradev/ts/documents/ultradev_faq.htm">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://mensniche.com/forum/archive/index.php/f-2.html>Mensniche.com Forum - Main Forum</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> SG Forum - Great Resource; need <b>help</b>; PPC Results; 404 Traffic; www.volume <b>...</b> Meta Tags
Optimization; Pre-Sell; <b>Google</b> PageRank, &amp; <b>How</b> <b>to</b> Get It; Nice <b>Google</b> <b>API</b> tool <b>...</b>
<br><font color=#008000>mensniche.com/forum/archive/index.php/f-2.html - 15k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:LkQMpFdTDxUJ:mensniche.com/forum/archive/index.php/f-2.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:mensniche.com/forum/archive/index.php/f-2.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.bookshare.org/web/SingleTitle.html?submittitleid=19778>Bookshare.org - Book Information</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> new <b>Google</b> <b>API</b>, including <b>how</b> <b>to</b> build and modify scripts that can become custom
business applications based on <b>Google</b>. <b>Google</b> Hacks contains 100 tips, tricks <b>...</b>
<br><font color=#008000>www.bookshare.org/web/SingleTitle. html?submittitleid=19778 - 18k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:4HvQgJGUodoJ:www.bookshare.org/web/SingleTitle.html%3Fsubmittitleid%3D19778+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.bookshare.org/web/SingleTitle.html%3Fsubmittitleid%3D19778">Similar&nbsp;pages</a></nobr></font></td></tr></table> <blockquote class=g><p class=g><a href=http://www.bookshare.org/web/BooksByAuthor.html?author_id=10726>Bookshare.org - Books by Author</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> advanced search interface and the new <b>Google</b> <b>API</b>, including <b>how</b> <b>...</b> <b>Google</b> Hacks contains
100 tips, tricks and scripts <b>...</b> tips, tricks, and tools to <b>help</b> serious Mac <b>...</b>
<br><font color=#008000>www.bookshare.org/web/ BooksByAuthor.html?author_id=10726 - 29k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:TvaTFQWAcrwJ:www.bookshare.org/web/BooksByAuthor.html%3Fauthor_id%3D10726+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.bookshare.org/web/BooksByAuthor.html%3Fauthor_id%3D10726">Similar&nbsp;pages</a></nobr></font></td></tr></table> </blockquote><p class=g><a href=http://www.page87.net/links/>page87 - links</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> PHP Implementation of the <b>Google</b> Web <b>API</b> System 26 <b>...</b> Promotion <b>Google</b> ranking tips
<b>Google&#39;s</b> AdWords Advertising Program <b>How</b> <b>to</b> Advertise Responsibly <b>...</b>
<br><font color=#008000>www.page87.net/links/ - 70k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:jBj9jqz-IcEJ:www.page87.net/links/+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.page87.net/links/">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.iwalt.com/weblog/2002/04/>April 2002 | iWalt.com</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Its an AppleScript which calls the <b>Google</b> <b>API</b> and gets the top result for your
query. <b>...</b> <b>Frequently</b> <b>Asked</b> Questions. <b>...</b> <b>Help</b> define the site. =-). <b>...</b>
<br><font color=#008000>www.iwalt.com/weblog/2002/04/ - 39k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:UwgNxjrX5pgJ:www.iwalt.com/weblog/2002/04/+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.iwalt.com/weblog/2002/04/">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.apl.jhu.edu/~hall/java/FAQs-and-Tutorials.html>Java Programming FAQs and Tutorials: Learning Java</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Search the Web: <b>Google</b>. <b>...</b> Tutorials, online courses and more, to <b>help</b> you pass your
Java certification <b>...</b> Learning <b>how</b> <b>to</b> generate high-quality printouts of components <b>...</b>
<br><font color=#008000>www.apl.jhu.edu/~hall/java/FAQs-and-Tutorials.html - 21k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:6rqbxjg93QoJ:www.apl.jhu.edu/~hall/java/FAQs-and-Tutorials.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.apl.jhu.edu/~hall/java/FAQs-and-Tutorials.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.ihelpyouservices.com/forums/showthread.php?s=&threadid=13023>Keyword density research report - Best Practices Search Engine <b>...</b></a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> everything come from the <b>Google</b> <b>API</b>? Did <b>Google</b> have to approve this? If so,
do you have any tips on getting <b>API</b> applications approved? <b>...</b>
<br><font color=#008000>www.i<b>help</b>youservices.com/forums/ showthread.php?s=&amp;threadid=13023 - 63k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:fHRmB5iB2W4J:www.ihelpyouservices.com/forums/showthread.php%3Fs%3D%26threadid%3D13023+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.ihelpyouservices.com/forums/showthread.php%3Fs%3D%26threadid%3D13023">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.clarkconnect.org/forums/showflat.php?Cat=&Board=howtos&Number=40192>Recommended Reading List / Answers to <b>Frequently</b> <b>Asked</b> Questions</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Guide Clark Connect <b>Help</b> Downloadable User Guides Webconfig <b>API</b> (For those <b>...</b> relay
host(I can&#39;t send email) <b>Help</b>, I can <b>...</b> Also, don&#39;t forget to <b>google</b> Note: All the <b>...</b>
<br><font color=#008000>www.clarkconnect.org/forums/showflat. php?Cat=&amp;Board=howtos&amp;Number=40192 - 31k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:loNtIpVl0qYJ:www.clarkconnect.org/forums/showflat.php%3FCat%3D%26Board%3Dhowtos%26Number%3D40192+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.clarkconnect.org/forums/showflat.php%3FCat%3D%26Board%3Dhowtos%26Number%3D40192">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.xmlhub.com/dir/index/Computers/Programming/Languages/Visual_FoxPro/>XMLhub.com Web Directory: Computers: Programming: Languages <b>...</b></a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Microsoft: Visual FoxPro v3.0+ - Technical support forums and mutual <b>help</b> system
for <b>...</b> Usenet microsoft.public.fox.vfp.lck-<b>api</b> - news: - <b>Google</b> Groups; Usenet <b>...</b>
<br><font color=#008000>www.xmlhub.com/dir/index/Computers/ Programming/Languages/Visual_FoxPro/ - 18k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:qRSpMPab8EkJ:www.xmlhub.com/dir/index/Computers/Programming/Languages/Visual_FoxPro/+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.xmlhub.com/dir/index/Computers/Programming/Languages/Visual_FoxPro/">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.gamedev.net/community/forums/showfaq.asp?forum_id=31>Forum FAQ - GameDev.Net Discussion Forums</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> If you&#39;re looking for <b>API</b> specific tutorials, here are some of the most common to
<b>help</b> get you <b>...</b> could easily answer yourself with a quick <b>Google</b> search or a <b>...</b>
<br><font color=#008000>www.gamedev.net/community/ forums/showfaq.asp?forum_id=31 - 32k - 5 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:LWwtVOLqs_wJ:www.gamedev.net/community/forums/showfaq.asp%3Fforum_id%3D31+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.gamedev.net/community/forums/showfaq.asp%3Fforum_id%3D31">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.ndis.com/faq/QA10290101.htm>NDIS <b>Frequently</b> <b>Asked</b> Questions</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> The Microsoft DDK <b>help</b> file and DDK samples, as well as <b>...</b> On the other hand, the
user-mode WMI <b>API</b> is fairly <b>...</b> useful information is to perform a <b>Google</b> Search on <b>...</b>
<br><font color=#008000>www.ndis.com/faq/QA10290101.htm - 35k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:oGxlF6CRgvQJ:www.ndis.com/faq/QA10290101.htm+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.ndis.com/faq/QA10290101.htm">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://confluence.public.thoughtworks.org/display/CC/Managing+CruiseControl+With+JMX>Managing CruiseControl With JMX - Confluence</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> It is ridiculously easy to enable controling CC using the JMX (Java Mananagement
eXtensions) <b>api</b>. Here&#39;s what you get : <b>...</b> <b>How</b> <b>to</b> enable the JMX server. <b>...</b>
<br><font color=#008000>confluence.public.thoughtworks.org/ display/CC/Managing+CruiseControl+With+JMX - 26k - 6 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:XFv2_d2WTGYJ:confluence.public.thoughtworks.org/display/CC/Managing%2BCruiseControl%2BWith%2BJMX+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:confluence.public.thoughtworks.org/display/CC/Managing%2BCruiseControl%2BWith%2BJMX">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://chris.pirillo.com/blog/cmd=post_comment/article_id=119543/parent_id=165843>Post Comment</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Gone Wild General RSS Stuff Hardware <b>Help</b> HijackThis Logs <b>...</b> And why has the <b>Google</b>
<b>API</b> stagnated for 2.5 years <b>...</b> So what should <b>Google</b>, MSNbot and Yahoo search (to <b>...</b>
<br><font color=#008000>chris.pirillo.com/blog/cmd=post_comment/ article_id=119543/parent_id=165843 - 57k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:cXqz06lseBMJ:chris.pirillo.com/blog/cmd%3Dpost_comment/article_id%3D119543/parent_id%3D165843+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:chris.pirillo.com/blog/cmd%3Dpost_comment/article_id%3D119543/parent_id%3D165843">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.fwe.org/p/p.asp?mlid=354&jid=1018>FWE - National Headquarters - Job Search - View Job</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Northwest-Software Engineering <b>GOOGLE</b> - C++, Win32 <b>API</b>, and Linux Kernel Engineering
Opportunities POSTED: 9/30/2004 JOB TITLE: Software Engineer <b>Google</b> is <b>...</b>
<br><font color=#008000>www.fwe.org/p/p.asp?mlid=354&amp;jid=1018 - 43k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:K1muKibnvKMJ:www.fwe.org/p/p.asp%3Fmlid%3D354%26jid%3D1018+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.fwe.org/p/p.asp%3Fmlid%3D354%26jid%3D1018">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.mozilla.org/support/firefox/faq>Firefox <b>Help</b>: Firefox FAQ</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> be able to find packages using <b>Google</b>. <b>...</b> EWH32.<b>api</b> , printme.<b>api</b> and search.<b>api</b> from
plug_ins_disabled <b>...</b> can convert the bookmarks with the <b>help</b> from BookmarkPriest <b>...</b>
<br><font color=#008000>www.mozilla.org/support/firefox/faq - 35k - 5 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:8x4HfNYboxgJ:www.mozilla.org/support/firefox/faq+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.mozilla.org/support/firefox/faq">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://directory.thestar.com.my/cat.asp?/Computers/Programming/Internet/ASP/FAQs,_Help,_and_Tutorials/>The Star Online Directory - FAQs, <b>Help</b>, and Tutorials</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Active Server Pages, and the Internet Server <b>API</b>. <b>...</b> public.inetserver.iis.activeserverpages
- news: - <b>Google</b> Groups. <b>Help</b> build the largest human-edited directory <b>...</b>
<br><font color=#008000>directory.thestar.com.my/cat.asp?/Computers/ Programming/Internet/ASP/FAQs,_Help,_and_Tutorials/ - 15k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:bVTPAXck5cYJ:directory.thestar.com.my/cat.asp%3F/Computers/Programming/Internet/ASP/FAQs,_Help,_and_Tutorials/+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:directory.thestar.com.my/cat.asp%3F/Computers/Programming/Internet/ASP/FAQs,_Help,_and_Tutorials/">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.spheri.ca/resources.html>eMarketing Resources @ Spherica</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Rank Checker SEO Count Advanced <b>API</b> Rank Checker <b>...</b> <b>Google</b> AdWords Keyword Suggestion
Tool Additional eTools Spider <b>...</b> Index: Simple formula to <b>help</b> determine the <b>...</b>
<br><font color=#008000>www.spheri.ca/resources.html - 18k - 5 Dec 2004 - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:Xm9eqoc7__0J:www.spheri.ca/resources.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.spheri.ca/resources.html">Similar&nbsp;pages</a></nobr></font></td></tr></table> <p class=g><a href=http://www.learningtree.com/courses/508qa.htm>Building XML Web Services with .NET: Hands-On - Course FAQ</a><table cellpadding=0 cellspacing=0 border=0><tr><td class=j><font size=-1><b>...</b> Web services currently available include the <b>Google</b> <b>API</b>, Microsofts <b>...</b> You learn <b>how</b>
<b>to</b> use the .NET System.Xml class <b>...</b> Does this course <b>help</b> me prepare for the <b>...</b>
<br><font color=#008000>www.learningtree.com/courses/508qa.htm - 29k - </font><nobr> <a class=fl href="http://216.239.59.104/search?q=cache:YgHddX6KqgoJ:www.learningtree.com/courses/508qa.htm+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&q=related:www.learningtree.com/courses/508qa.htm">Similar&nbsp;pages</a></nobr></font></td></tr></table> </div><br clear=all><div class=n><table border=0 cellpadding=0 width=1% cellspacing=0 align=center><tr align=center valign=top><td valign=bottom nowrap><font size=-1>Result&nbsp;Page:&nbsp;</font><td><img src=/nav_first.gif width=18 height=26 alt=""><br><td><img src=/nav_current.gif width=16 height=26 alt=""><br><span class=i>1</span><td><a href=/search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&start=50&sa=N><img src=/nav_page.gif width=16 height=26 alt="" border=0><br>2</a><td><a href=/search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&start=100&sa=N><img src=/nav_page.gif width=16 height=26 alt="" border=0><br>3</a><td><a href=/search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&start=150&sa=N><img src=/nav_page.gif width=16 height=26 alt="" border=0><br>4</a><td><a href=/search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&start=200&sa=N><img src=/nav_page.gif width=16 height=26 alt="" border=0><br>5</a><td><a href=/search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&start=250&sa=N><img src=/nav_page.gif width=16 height=26 alt="" border=0><br>6</a><td><a href=/search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&start=300&sa=N><img src=/nav_page.gif width=16 height=26 alt="" border=0><br>7</a><td><a href=/search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&start=350&sa=N><img src=/nav_page.gif width=16 height=26 alt="" border=0><br>8</a><td><a href=/search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&start=400&sa=N><img src=/nav_page.gif width=16 height=26 alt="" border=0><br>9</a><td><a href=/search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&start=450&sa=N><img src=/nav_page.gif width=16 height=26 alt="" border=0><br>10</a><td nowrap><a href=/search?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&start=50&sa=N><img src=/nav_next.gif width=100 height=26 alt="" border=0><br><span class=b>Next</span></a></table></div><center>
<br clear=all><br><table cellspacing=0 cellpadding=0 border=0 width="100%"><tr><td class=k><img height=1 alt="" width=1></td></tr><tr><td align=center bgcolor=#e5ecf9>&nbsp;<br><table border=0 cellpadding=0 cellspacing=0 align=center><form method=GET action=/search><tr><td nowrap>
<font size=-1><input type=text name=q size=31 maxlength=2048 value="google api help &quot;frequently asked&quot; -plop"> <input type=submit name=btnG VALUE="Search"><input type=hidden name=num value=50><input type=hidden name=hl value="en"><input type=hidden name=lr value="lang_en"><input type=hidden name=ie value="ISO-8859-1"><input type=hidden name=as_qdr value="m3"><input type=hidden name=as_qdr value=m3></font></td></tr></form></table><br><font size=-1><a href=/swr?q=google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3&swrnum=12800>Search&nbsp;within&nbsp;results</a> | <a href=/language_tools?q=google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3>Language Tools</a> | <a href=/help/>Search&nbsp;Tips</a> | <a href=/quality_form?q=google+api++help+%22frequently+asked%22+-plop&num=50&hl=en&lr=lang_en&ie=UTF-8&as_qdr=m3 target=_blank>Dissatisfied? Help us improve</a></font><br><br></td></tr><tr><td class=k><img height=1 alt="" width=1></td></tr></table></center><center><p><hr class=z><table width=100% cellpadding=2 cellspacing=0 border=0><tr><td align=center><font size=-1><a href="http://www.google.com/">Google&nbsp;Home</a> - <a href="/ads/">Advertising&nbsp;Programs</a> - <a href="/services/">Business&nbsp;Solutions</a> - <a href=/about.html>About Google</a></font></table><br><font size=-1 class=p>&copy;2004 Google</font></center></body></html>

View File

@ -0,0 +1,29 @@
# Mozilla/Google plug-in by amitp+mozilla@google.com
<search
name="Google"
description="Google Search"
method="GET"
action="http://www.google.com/search"
update="http://www.google.com/mozilla/google.src"
updateCheckDays=1
queryEncoding="utf-8"
queryCharset="utf-8"
>
<input name="q" user>
<input name="sourceid" value="mozilla-search">
<inputnext name="start" factor="10">
<inputprev name="start" factor="10">
<input name="ie" value="utf-8">
<input name="oe" value="utf-8">
<interpret
browserResultType="result"
charset = "UTF-8"
resultListStart="<!--a-->"
resultListEnd="<!--z-->"
resultItemStart="<!--m-->"
resultItemEnd="<!--n-->"
>
</search>

View File

@ -0,0 +1,175 @@
#if 0
/* old one */
const char google_icon_M[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1e, 0x1b, 0xd9, 0xd9, 0x1d, 0xff, 0xff,
0xff, 0xff, 0x1d, 0x82, 0x82, 0x19, 0xff, 0xff, 0x1e, 0xd8, 0x64, 0x63, 0x63, 0xd8, 0x1b, 0xff,
0xff, 0x1a, 0x2c, 0x2d, 0x2d, 0x2c, 0xc4, 0x1d, 0x62, 0x63, 0x1c, 0x3f, 0x1e, 0x63, 0xd8, 0x1d,
0x1a, 0x2c, 0xca, 0x1a, 0x1d, 0x82, 0x2d, 0xa3, 0xd8, 0x62, 0x3f, 0x3f, 0x3f, 0x1e, 0xd8, 0x1a,
0x82, 0x2d, 0x1a, 0x3f, 0x3f, 0x3f, 0xa3, 0x2d, 0xd8, 0x62, 0x0e, 0x1e, 0x3f, 0x1f, 0xd8, 0x62,
0x82, 0x2d, 0x1d, 0x3f, 0x3f, 0x0f, 0x82, 0x2e, 0x63, 0x83, 0x0a, 0x1e, 0x3f, 0xfd, 0x64, 0x1b,
0x19, 0x2c, 0x5a, 0x3f, 0x1e, 0x0b, 0xc4, 0xeb, 0x1a, 0x64, 0xd8, 0xd9, 0xd9, 0x64, 0x83, 0xff,
0xff, 0xca, 0x2c, 0xa3, 0x5a, 0xc4, 0x2e, 0x82, 0xff, 0x1b, 0x83, 0x8a, 0x89, 0x17, 0x17, 0xff,
0xff, 0x1a, 0xa9, 0x2e, 0x2e, 0xca, 0x82, 0x17, 0xff, 0xff, 0xff, 0x17, 0x17, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x1a, 0x1a, 0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
const char google_icon_L[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x1b, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x1c, 0x62, 0x63, 0xd8, 0xd8, 0xd8, 0x63, 0x62, 0x1d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1e, 0x1e, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x1a, 0xd8, 0xd8, 0xd8, 0xf8, 0xd8, 0xf8, 0xd8, 0xd8, 0x63, 0x1b, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x1a, 0x18, 0xa3, 0xc4, 0xc4, 0xc4, 0xa9, 0x82, 0x1a, 0xff, 0xff, 0xff,
0xff, 0x1a, 0xd8, 0xd8, 0x64, 0x84, 0x83, 0x63, 0x63, 0x84, 0xf8, 0xd8, 0x63, 0x1b, 0xff, 0xff,
0xff, 0xff, 0xff, 0x1c, 0xa3, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0xc4, 0x1a, 0xff, 0xff,
0x1c, 0x63, 0xf8, 0x84, 0x83, 0x1d, 0x1f, 0x3f, 0x1f, 0x1c, 0x63, 0x64, 0xd8, 0x63, 0x1d, 0xff,
0xff, 0xff, 0x1c, 0xc4, 0x2c, 0x2c, 0x2d, 0x2e, 0x2e, 0x2e, 0x2e, 0x2c, 0x2c, 0x2c, 0x19, 0xff,
0x62, 0xd8, 0x84, 0x63, 0x1f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1e, 0x63, 0xf8, 0xd8, 0x62, 0xff,
0xff, 0x1a, 0xa3, 0x2c, 0x2d, 0x2e, 0xa3, 0x1a, 0x1c, 0x1a, 0x82, 0x2e, 0x2d, 0x2c, 0xc4, 0x1b,
0x63, 0xf8, 0x84, 0x1d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1b, 0xf8, 0xd8, 0x63, 0x1a,
0xff, 0x18, 0x2c, 0x2d, 0x2f, 0x82, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1a, 0x2d, 0x2c, 0x2c, 0xa9,
0xd8, 0x64, 0x83, 0x1f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1e, 0xd8, 0xd8, 0x83, 0x1a,
0x1a, 0xa3, 0x2c, 0xeb, 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x82, 0x2d, 0x2c, 0xca,
0xd8, 0x64, 0x83, 0x1f, 0x19, 0x1b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1f, 0xd8, 0xd8, 0x83, 0x1a,
0x1a, 0xc4, 0x2c, 0x2f, 0x61, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1d, 0xc4, 0x2c, 0xeb,
0xd8, 0xf8, 0x83, 0x15, 0x01, 0x03, 0x1b, 0x3f, 0x3f, 0x3f, 0x3f, 0x1e, 0xd8, 0xf8, 0x83, 0x1a,
0x1a, 0xc4, 0x2c, 0x2f, 0x1c, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1c, 0x1b, 0x1e, 0xc4, 0x2d, 0x2f,
0x83, 0xd8, 0x64, 0x0f, 0x00, 0x01, 0x19, 0x3f, 0x3f, 0x3f, 0x3f, 0xfd, 0xd8, 0x64, 0x14, 0x1a,
0x1a, 0xc4, 0x2c, 0x2d, 0xda, 0x3f, 0x3f, 0x3f, 0x3f, 0x1c, 0x04, 0x02, 0x16, 0xc4, 0x2d, 0x2f,
0x89, 0xf8, 0xd8, 0x63, 0x12, 0x15, 0x1f, 0x3f, 0x3f, 0x3f, 0xfe, 0xd8, 0xf8, 0x84, 0x18, 0xff,
0x1a, 0xa9, 0x2c, 0x2c, 0x82, 0x3f, 0x3f, 0x3f, 0x3f, 0x1b, 0x02, 0x00, 0xa9, 0x2c, 0x2e, 0x2f,
0x1a, 0x83, 0xf8, 0xf8, 0xd8, 0xfd, 0x1f, 0x1f, 0x1e, 0xfd, 0xd8, 0xf8, 0x84, 0x89, 0x1a, 0xff,
0xff, 0x82, 0x2d, 0x2c, 0x2c, 0xda, 0x3f, 0x3f, 0x3f, 0x3f, 0x17, 0x13, 0xc4, 0x2d, 0xeb, 0xa9,
0x1a, 0x1a, 0x83, 0x84, 0x64, 0xf8, 0xd8, 0xd8, 0xd8, 0xf8, 0xf8, 0x84, 0x89, 0x1b, 0xff, 0xff,
0xff, 0x1a, 0xca, 0x2d, 0x2c, 0x2c, 0x5a, 0x1e, 0x3f, 0x1f, 0xda, 0xc4, 0x2c, 0xeb, 0x2f, 0x18,
0xff, 0xff, 0x1a, 0x89, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x8a, 0x89, 0x1b, 0xff, 0xff, 0xff,
0xff, 0xff, 0x19, 0xeb, 0x2d, 0x2c, 0x2c, 0x2c, 0xc4, 0x2c, 0x2c, 0x2c, 0x2e, 0x2f, 0x13, 0xff,
0xff, 0xff, 0xff, 0x1a, 0x17, 0x89, 0x89, 0x8a, 0x89, 0x89, 0x18, 0x1a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x19, 0xca, 0x2e, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0xeb, 0x2f, 0x13, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x1a, 0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x1c, 0xa9, 0xca, 0xeb, 0xeb, 0xeb, 0xca, 0xa9, 0x18, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x1a, 0x18, 0x61, 0x1b, 0x1a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
#endif
// icons by ahwayakchih
const char google_icon_M[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0xd9, 0xd9, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x82, 0x82, 0x19, 0xff, 0xff, 0xff, 0xd8, 0x64, 0x63, 0x63, 0xd8, 0xff, 0xff,
0xff, 0xff, 0x2c, 0x2d, 0x2d, 0x2c, 0xc4, 0xff, 0x62, 0x63, 0x1c, 0x3f, 0x1e, 0x63, 0xd8, 0xff,
0xff, 0x2c, 0xca, 0x1a, 0x1d, 0x82, 0x2d, 0xa3, 0xd8, 0x62, 0x3f, 0x3f, 0x3f, 0x1e, 0xd8, 0x1a,
0x82, 0x2d, 0x1a, 0x3f, 0x3f, 0x3f, 0xa3, 0x2d, 0xd8, 0x62, 0x0e, 0x1e, 0x3f, 0x1f, 0xd8, 0x62,
0x82, 0x2d, 0x1d, 0x3f, 0x3f, 0x0f, 0x82, 0x2e, 0x63, 0x83, 0x0a, 0x1e, 0x3f, 0xfd, 0x64, 0xff,
0xff, 0x2c, 0x5a, 0x3f, 0x1e, 0x0b, 0xc4, 0xeb, 0xff, 0x64, 0xd8, 0xd9, 0xd9, 0x64, 0x83, 0xff,
0xff, 0xca, 0x2c, 0xa3, 0x5a, 0xc4, 0x2e, 0x82, 0xff, 0xff, 0x83, 0x8a, 0x89, 0x17, 0xff, 0xff,
0xff, 0xff, 0xa9, 0x2e, 0x2e, 0xca, 0x82, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
const char google_icon_L[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x1b,
0x09, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x04, 0x1c,
0x1b, 0x1c, 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x1b, 0x09, 0x08,
0x1c, 0x1c, 0x1b, 0x1c, 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x04, 0x1c, 0x1b, 0x1c,
0x08, 0x09, 0x1c, 0x1b, 0x1c, 0x1b, 0x09, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x1b, 0x09, 0x08, 0x1c, 0x1c,
0x1b, 0x1c, 0x08, 0x09, 0x1c, 0x1b, 0x1c, 0x1b, 0x09, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x04, 0x1c, 0x1b, 0x1c, 0x08, 0x09,
0x1c, 0x1b, 0x1c, 0x1b, 0x09, 0x08, 0x1c, 0x1c, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x1b, 0x09, 0x08, 0x1c, 0x1c, 0x1b, 0x1c,
0x08, 0x09, 0x1c, 0x1b, 0x1c, 0x1b, 0x09, 0x00, 0x1c, 0x00, 0xd9, 0x00, 0x00, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x04, 0x04, 0x1c, 0x1c, 0x1b, 0x09, 0x08, 0x1c, 0x1b,
0x1c, 0x1c, 0x08, 0x09, 0x1b, 0x1c, 0x1c, 0x00, 0x15, 0x00, 0xd1, 0xd9, 0xd9, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x3f, 0x08, 0x09, 0x1b, 0x1c, 0x1b, 0x1c, 0x09, 0x08,
0x1c, 0x1b, 0x1c, 0x1c, 0x08, 0x00, 0x1c, 0x00, 0x15, 0x00, 0xd1, 0xd1, 0xd9, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x04, 0x04, 0x04, 0x1c, 0x3f, 0x3f, 0x08, 0x09, 0x1b, 0x1c, 0x1b, 0x1c,
0x09, 0x08, 0x1c, 0x1b, 0x1c, 0x00, 0x15, 0x00, 0x15, 0x00, 0xd1, 0xd9, 0xaa, 0x01, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x04, 0x3f, 0x08, 0x09, 0x1b, 0x1c, 0x3f, 0x3f, 0x08, 0x09, 0x1b, 0x1c,
0x1b, 0x1c, 0x09, 0x00, 0x1b, 0x00, 0x15, 0x00, 0x0f, 0x00, 0xd9, 0xaa, 0xaa, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x04, 0x3f, 0x3f, 0x3f, 0x08, 0x09, 0x1b, 0x1c, 0x3f, 0x3f, 0x08, 0x09,
0x1b, 0x1c, 0x1b, 0x00, 0x16, 0x00, 0x15, 0x00, 0x0f, 0xd9, 0xaa, 0xaa, 0xaa, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0x04, 0x3f, 0x1b, 0x1c, 0x3f, 0x3f, 0x08, 0x09, 0x1b, 0x1c, 0x3f, 0x3f,
0x08, 0x00, 0x1c, 0x00, 0x15, 0x00, 0x0f, 0x00, 0xd9, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0xff, 0xff,
0xff, 0xff, 0x00, 0xd9, 0x04, 0x3f, 0x1b, 0x1c, 0x1b, 0x1c, 0x3f, 0x3f, 0x08, 0x09, 0x1b, 0x1c,
0x3f, 0x00, 0x15, 0x00, 0x15, 0x00, 0x0f, 0xd9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x0f, 0xff,
0xff, 0x00, 0xd9, 0xd1, 0x04, 0x15, 0x1a, 0x19, 0x1c, 0x1b, 0x1c, 0x1c, 0x3f, 0x3f, 0x08, 0x00,
0x1c, 0x00, 0x15, 0x00, 0x0f, 0x00, 0x63, 0xd8, 0xd8, 0xd8, 0x63, 0x62, 0xaa, 0x00, 0x0f, 0xff,
0xff, 0x00, 0xd9, 0xd9, 0x04, 0x0f, 0x15, 0x15, 0x1a, 0x19, 0x1c, 0x1c, 0x1b, 0x1c, 0x3f, 0x00,
0x15, 0x00, 0x15, 0x00, 0xd8, 0xd8, 0xd8, 0xf8, 0xd8, 0xf8, 0xd8, 0xd8, 0x63, 0x0f, 0x0f, 0xff,
0xff, 0x00, 0x83, 0x83, 0xd9, 0xd9, 0x0f, 0xa3, 0xc4, 0xc4, 0xc4, 0xa9, 0x82, 0x1c, 0x1b, 0x00,
0x15, 0x00, 0x0f, 0xd8, 0xd8, 0x64, 0x84, 0x83, 0x63, 0x63, 0x84, 0xf8, 0xd8, 0x63, 0xff, 0xff,
0xff, 0x00, 0x83, 0x83, 0x83, 0xa3, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0xc4, 0x1c, 0x00,
0x15, 0x00, 0x63, 0xf8, 0x84, 0x83, 0x1d, 0x3f, 0x3f, 0x3f, 0x1c, 0x63, 0x64, 0xd8, 0x63, 0xff,
0xff, 0x00, 0x83, 0x83, 0xc4, 0x2c, 0x2c, 0x2d, 0xeb, 0xeb, 0xeb, 0xeb, 0x2c, 0x2c, 0x2c, 0x00,
0x0f, 0x62, 0xd8, 0x84, 0x63, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1e, 0x63, 0xf8, 0xd8, 0x62,
0xff, 0x00, 0x83, 0xa3, 0x2c, 0x2d, 0xeb, 0xa3, 0x1a, 0x1c, 0x1a, 0x82, 0xeb, 0x2d, 0x2c, 0xc4,
0x0f, 0x63, 0xf8, 0x84, 0x1d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1b, 0xf8, 0xd8, 0x63,
0xff, 0x00, 0x83, 0x2c, 0x2d, 0x2f, 0x82, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1a, 0x2d, 0x2c, 0x2c,
0xa9, 0xd8, 0x64, 0x83, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1e, 0xd8, 0xd8, 0x83,
0xff, 0x00, 0xa3, 0x2c, 0xeb, 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x82, 0x2d, 0x2c,
0xca, 0xd8, 0x64, 0x83, 0x3f, 0x19, 0x1b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd8, 0xd8, 0x83,
0xff, 0x00, 0xc4, 0x2c, 0x2f, 0x19, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1d, 0xc4, 0x2c,
0xeb, 0xd8, 0xf8, 0x83, 0x15, 0x01, 0x03, 0x1b, 0x3f, 0x3f, 0x3f, 0x3f, 0x1e, 0xd8, 0xf8, 0x83,
0xff, 0x00, 0xc4, 0x2c, 0x2f, 0x1c, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1c, 0x1b, 0x1e, 0xc4, 0x2d,
0x2f, 0x83, 0xd8, 0x64, 0x0f, 0x00, 0x01, 0x19, 0x3f, 0x3f, 0x3f, 0x3f, 0xfd, 0xd8, 0x64, 0x14,
0xff, 0x00, 0xc4, 0x2c, 0x2d, 0xda, 0x3f, 0x3f, 0x3f, 0x3f, 0x1c, 0x04, 0x02, 0x16, 0xc4, 0x2d,
0x2f, 0x89, 0xf8, 0xd8, 0x63, 0x12, 0x15, 0x3f, 0x3f, 0x3f, 0x3f, 0xfe, 0xd8, 0xf8, 0x84, 0x14,
0xff, 0xff, 0xa9, 0x2c, 0x2c, 0x82, 0x3f, 0x3f, 0x3f, 0x3f, 0x1b, 0x02, 0x00, 0xa9, 0x2c, 0xeb,
0x2f, 0xaa, 0x83, 0xf8, 0xf8, 0xd8, 0xfd, 0x3f, 0x3f, 0x1e, 0xfd, 0xd8, 0xf8, 0x84, 0x89, 0xff,
0xff, 0xff, 0x82, 0x2d, 0x2c, 0x2c, 0xda, 0x3f, 0x3f, 0x3f, 0x3f, 0x17, 0x13, 0xc4, 0x2d, 0xeb,
0xa9, 0x00, 0x0f, 0x83, 0x84, 0x64, 0xf8, 0xd8, 0xd8, 0xd8, 0xf8, 0xf8, 0x84, 0x89, 0xff, 0xff,
0xff, 0xff, 0xff, 0xca, 0x2d, 0x2c, 0x2c, 0x5a, 0x1e, 0x3f, 0x3f, 0xda, 0xc4, 0x2c, 0xeb, 0x2f,
0x00, 0x0f, 0x0f, 0xff, 0x89, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x8a, 0x89, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xeb, 0x2d, 0x2c, 0x2c, 0x2c, 0xc4, 0x2c, 0x2c, 0x2c, 0xeb, 0x2f, 0x00,
0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x89, 0x89, 0x8a, 0x89, 0x89, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xca, 0xeb, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0xeb, 0x2f, 0x00, 0x0f,
0x0e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa9, 0xca, 0xeb, 0xeb, 0xeb, 0xca, 0xa9, 0x00, 0x0e, 0x0f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};

View File

@ -0,0 +1,212 @@
#include <OS.h>
#include <KernelExport.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <malloc.h>
#include <sys/socket.h>
#include "http_cnx.h"
#include "google_request.h"
#include "lists2.h"
#include "settings.h"
#define DO_PUBLISH
//#define FAKE_INPUT "/boot/home/devel/drivers/googlefs/log2.html"
//#define TESTURL "http://www.google.com/search?as_q=google+api+&num=50&hl=en&ie=ISO-8859-1&btnG=Google+Search&as_epq=frequently+asked&as_oq=help&as_eq=plop&lr=lang_en&as_ft=i&as_filetype=&as_qdr=m3&as_nlo=&as_nhi=&as_occt=any&as_dt=i&as_sitesearch="
//#define BASEURL "http://www.google.com/search?as_q="
//#define Q "google+api+"
//#define EXTRAURL "&num=50&hl=en&ie=ISO-8859-1&btnG=Google+Search&as_epq=frequently+asked&as_oq=help&as_eq=plop&lr=lang_en&as_ft=i&as_filetype=&as_qdr=m3&as_nlo=&as_nhi=&as_occt=any&as_dt=i&as_sitesearch="
#define TESTURL "http://www.google.com/search?hl=en&ie=UTF-8&num=50&q=beos"
//#define BASEURL "http://www.google.com/search?hl=en&ie=UTF-8&num=50&q="
#define BASEURL "/search?hl=en&ie=UTF-8&oe=UTF-8"
#define FMT_NUM "&num=%u"
#define FMT_Q "&q=%s"
/* parse_google_html.c */
extern int google_parse_results(const char *html, size_t htmlsize, struct google_result **results);
// move that to ksocket inlined
static kinet_aton(const char *in, struct in_addr *addr)
{
int i;
unsigned long a;
uint32 inaddr = 0L;
const char *p = in;
for (i = 0; i < 4; i++) {
a = strtoul(p, &p, 10);
if (!p)
return -1;
inaddr = (inaddr >> 8) | ((a & 0x0ff) << 24);
*(uint32 *)addr = inaddr;
if (!*p)
return 0;
p++;
}
return 0;
}
status_t google_request_init()
{
status_t err;
err = http_init();
return err;
}
status_t google_request_uninit()
{
status_t err;
err = http_uninit();
return err;
}
status_t google_request_process(struct google_request *req)
{
struct sockaddr_in sin;
struct http_cnx *cnx = NULL;
struct google_result *res;
int err, i, count;
size_t len;
char *p = NULL;
char *url = NULL;
err = http_create(&cnx);
if (err)
return err;
err = ENOMEM;
req->cnx = cnx;
#ifndef FAKE_INPUT
sin.sin_len = sizeof(struct sockaddr_in);
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
if (kinet_aton(google_server, &sin.sin_addr) < 0)
goto err_cnx;
sin.sin_port = htons(google_server_port);
err = http_connect(cnx, &sin);
dprintf("google_request: http_connect: error 0x%08lx\n", err);
if (err)
goto err_cnx;
err = ENOMEM;
p = urlify_string(req->query_string);
if (!p)
goto err_con;
err = ENOMEM;
url = malloc(strlen(BASEURL)+strlen(FMT_NUM)+10+strlen(FMT_Q)+strlen(p)+2);
if (!url)
goto err_url;
strcpy(url, BASEURL);
sprintf(url+strlen(url), FMT_NUM, max_results);
sprintf(url+strlen(url), FMT_Q, p);
dprintf("google_request: final URL: %s\n", url);
err = http_get(cnx, url);
dprintf("google_request: http_get: error 0x%08lx\n", err);
if (err < 0)
goto err_url2;
dprintf("google_request: http_get: HEADERS %d:%s\n", cnx->headerslen, cnx->headers);
//dprintf("DATA: %d:%s\n", cnx->datalen, cnx->data);
dprintf("google_request: buffer @ %p, len %ld\n", cnx->data, cnx->datalen);
{
int fd;
// debug output
fd = open("/tmp/google.html", O_CREAT|O_TRUNC|O_RDWR, 0644);
write(fd, cnx->data, cnx->datalen);
close(fd);
}
#else
{
int fd;
struct stat st;
// debug output
fd = open(FAKE_INPUT, O_RDONLY, 0644);
if (fd < 0)
return -1;
if (fstat(fd, &st) < 0)
return -1;
cnx->datalen = st.st_size;
cnx->data = malloc(cnx->datalen);
if (!cnx->data)
return ENOMEM;
if (read(fd, cnx->data, cnx->datalen) < cnx->datalen)
return -1;
close(fd);
}
#endif /* FAKE_INPUT */
err = count = google_parse_results(req->cnx->data, req->cnx->datalen, &req->results);
if (err < 0)
goto err_get;
#ifdef DO_PUBLISH
while ((res = SLL_DEQUEUE(req->results, next))) {
res->next = NULL;
googlefs_push_result_to_query(req, res);
}
#endif
free(url);
free(p);
/* close now */
http_close(cnx);
return B_OK;
err_get:
err_url2:
free(url);
err_url:
free(p);
err_con:
http_close(cnx);
err_cnx:
http_delete(cnx);
req->cnx = NULL;
return err;
}
status_t google_request_process_async(struct google_request *req)
{
return ENOSYS;
}
status_t google_request_close(struct google_request *req)
{
if (!req)
return EINVAL;
if (!req->cnx)
return B_OK;
http_close(req->cnx);
http_delete(req->cnx);
req->cnx = NULL;
return B_OK;
}
status_t google_request_open(const char *query_string, struct fs_nspace *ns, struct fs_node *query_node, struct google_request **req)
{
struct google_request *r;
if (!req)
return EINVAL;
r = malloc(sizeof(struct google_request));
if (!r)
return ENOMEM;
memset(r, 0, sizeof(struct google_request));
r->query_string = strdup(query_string);
r->ns = ns;
r->query_node = query_node;
*req = r;
return B_OK;
}
status_t google_request_free(struct google_request *req)
{
if (!req)
return EINVAL;
free(req->query_string);
free(req);
}

View File

@ -0,0 +1,37 @@
#ifndef _GOOGLE_REQUEST_H
#define _GOOGLE_REQUEST_H
struct google_request {
struct google_request *next;
struct fs_nspace *ns;
struct fs_node *query_node; /* root folder for that query */
char *query_string;
struct http_cnx *cnx;
struct google_result *results;
};
/* those are quite arbitrary values */
#define GR_MAX_NAME 70
#define GR_MAX_PROTO 16
#define GR_MAX_URL 1024
#define GR_MAX_SNIPSET 256
struct google_result {
struct google_result *next;
long id;
char name[GR_MAX_NAME];
char proto[GR_MAX_PROTO];
char url[GR_MAX_URL];
char snipset[GR_MAX_SNIPSET];
char cache_url[GR_MAX_URL];
char similar_url[GR_MAX_URL];
};
extern status_t google_request_init();
extern status_t google_request_uninit();
extern status_t google_request_process(struct google_request *req);
extern status_t google_request_process_async(struct google_request *req);
extern status_t google_request_close(struct google_request *req);
extern status_t google_request_open(const char *query_string, struct fs_nspace *ns, struct fs_node *query_node, struct google_request **req);
extern status_t google_request_free(struct google_request *req);
#endif /* _GOOGLE_REQUEST_H */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
======================
pointers to docs
parsing google results from python (+ diffs on User-Agent ?):
http://forums.devshed.com/archive/t-154742
perl hack: plain old XML instead of SOAP:
http://hacks.oreilly.com/pub/h/173
http://www.webmasterworld.com/forum10003/2856.htm

View File

@ -0,0 +1,131 @@
#ifndef _GOOGLEFS_H
#define _GOOGLEFS_H
/* wrappers */
#ifdef __HAIKU__
#include <fs_interface.h>
#include <kernel/lock.h>
#include <fs_info.h>
#include <NodeMonitor.h>
#define lock benaphore
#define new_lock benaphore_init
#define free_lock benaphore_destroy
#define LOCK benaphore_lock
#define UNLOCK benaphore_unlock
typedef dev_t nspace_id;
#else
#include "fsproto.h"
#include "lock.h"
#define publish_vnode new_vnode
#endif
#include "lists2.h"
#include <Errors.h>
#include <sys/stat.h>
#include <SupportDefs.h>
/* should be more than enough */
//#define GOOGLEFS_NAME_LEN B_OS_NAME_LENGTH
//#define GOOGLEFS_NAME_LEN 64 /* GR_MAX_NAME */
/* some google results are a bit more than 64 */
#define GOOGLEFS_NAME_LEN 70 /* GR_MAX_NAME */
#define GOOGLEFS_NAME "googlefs"
#define GOOGLEFS_PRETTY_NAME "Google Bookmark File System"
#define MAX_VNIDS 5000
struct attr_entry {
const char *name;
uint32 type;
size_t size;
void *value;
};
#define ASSERT(op) if (!(op)) panic("ASSERT: %s in %s:%s", #op, __FILE__, __FUNCTION__)
struct mount_fs_params
{
/* no param */
};
struct fs_file_cookie;
struct fs_node
{
struct fs_node *nlnext; /* node list */
struct fs_node *qnext; /* query list */
struct fs_node *next; /* next in folder */
struct fs_node *parent, *children;
struct fs_file_cookie *opened; /* opened on this node */
char name[GOOGLEFS_NAME_LEN];
vnode_id vnid;
lock l;
int is_perm:1; /* don't delete on last close */
int deleted:1;
int qcompleted:1;
int hidden:1; /* don't list in readdir */
struct stat st; /* including S_IFDIR in st_mode */
struct google_request *request; /* set on root folder for a query */
struct google_result *result; /* for query results */
struct attr_entry *attrs_indirect;
struct attr_entry attrs[10];
void *data;
size_t data_size;
};
struct vnidpool;
struct fs_nspace
{
nspace_id nsid;
vnode_id rootid;
struct vnidpool *vnids;
struct fs_node *root; /* fast access for stat time change */
struct fs_node *nodes;
struct fs_node *queries;
vint32 nodecount; /* just for statvfs() */
lock l;
};
struct fs_file_cookie
{
struct fs_file_cookie *next; /* must stay here */
struct fs_node *node;
int dir_current; /* current entry for readdir() */
int omode;
int type; /* S_IF* of the *cookie* */
struct attr_entry *attr;
};
/* just for type */
#define S_IFQUERY 00000070000
typedef struct attr_entry attr_entry;
typedef struct fs_nspace fs_nspace;
typedef struct fs_node fs_node;
typedef struct fs_file_cookie fs_file_cookie;
/* not much different */
#define fs_dir_cookie fs_file_cookie
#define fs_attr_dir_cookie fs_file_cookie
#define fs_query_cookie fs_file_cookie
vnode_id new_vnid(fs_nspace *ns);
int googlefs_free_vnode(fs_nspace *ns, fs_node *node);
int googlefs_event(fs_nspace *ns, fs_node *node, int flags);
/* used by the requester to publish entries in queries
* result = NULL to notify end of list
*/
extern int googlefs_push_result_to_query(struct google_request *request, struct google_result *result);
#endif

View File

@ -0,0 +1,88 @@
/*
** googlefs.rdef
**
** Automatically generated by BResourceParser on
** Saturday, January 20, 2007 at 01:48:42.
**
*/
resource(1, "BEOS:APP_VERSION") #'APPV' array {
$"0000000000000000010000000000000000000000476F6F676C65465300000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000476F6F676C65465320C2A920"
$"323030342C204672616EC3A76F6973205265766F6C0000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000000000000000000000000000000000000000000000000000"
$"0000000000000000"
};
resource(1, "BEOS:L:STD_ICON") #'ICON' array {
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFF0400FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFF041B0908FFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFF0400041C1B1C0809FFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFF041B09081C1C1B1C0809FFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFF0400041C1B1C08091C1B1C1B0908FFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFF041B09081C1C1B1C08091C1B1C1B0900FFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFF0400041C1B1C08091C1B1C1B09081C1C1B0000FFFFFFFFFF"
$"FFFFFFFFFFFFFFFF041B09081C1C1B1C08091C1B1C1B09001C00D90000FFFFFF"
$"FFFFFFFFFFFF0404041C1C1B09081C1B1C1C08091B1C1C001500D1D9D900FFFF"
$"FFFFFFFFFFFF043F08091B1C1B1C09081C1B1C1C08001C001500D1D1D900FFFF"
$"FFFFFFFF0404041C3F3F08091B1C1B1C09081C1B1C0015001500D1D9AA01FFFF"
$"FFFFFFFF043F08091B1C3F3F08091B1C1B1C09001B0015000F00D9AAAA00FFFF"
$"FFFFFFFF043F3F3F08091B1C3F3F08091B1C1B00160015000FD9AAAAAA00FFFF"
$"FFFFFF00043F1B1C3F3F08091B1C3F3F08001C0015000F00D9AAAAAAAA00FFFF"
$"FFFF00D9043F1B1C1B1C3F3F08091B1C3F00150015000FD9AAAAAAAAAA000FFF"
$"FF00D9D104151A191C1B1C1C3F3F08001C0015000F0063D8D8D86362AA000FFF"
$"FF00D9D9040F15151A191C1C1B1C3F0015001500D8D8D8F8D8F8D8D8630F0FFF"
$"FF008383D9D90FA3C4C4C4A9821C1B0015000FD8D8648483636384F8D863FFFF"
$"FF00838383A32C2C2C2C2C2C2CC41C00150063F884831D3F3F3F1C6364D863FF"
$"FF008383C42C2C2DEBEBEBEB2C2C2C000F62D884633F3F3F3F3F3F1E63F8D862"
$"FF0083A32C2DEBA31A1C1A82EB2D2CC40F63F8841D3F3F3F3F3F3F3F1BF8D863"
$"FF00832C2D2F823F3F3F3F3F1A2D2C2CA9D864833F3F3F3F3F3F3F3F1ED8D883"
$"FF00A32CEBA93F3F3F3F3F3F3F822D2CCAD864833F191B3F3F3F3F3F3FD8D883"
$"FF00C42C2F193F3F3F3F3F3F3F1DC42CEBD8F8831501031B3F3F3F3F1ED8F883"
$"FF00C42C2F1C3F3F3F3F3F1C1B1EC42D2F83D8640F0001193F3F3F3FFDD86414"
$"FF00C42C2DDA3F3F3F3F1C040216C42D2F89F8D86312153F3F3F3FFED8F88414"
$"FFFFA92C2C823F3F3F3F1B0200A92CEB2FAA83F8F8D8FD3F3F1EFDD8F88489FF"
$"FFFF822D2C2CDA3F3F3F3F1713C42DEBA9000F838464F8D8D8D8F8F88489FFFF"
$"FFFFFFCA2D2C2C5A1E3F3FDAC42CEB2F000F0FFF898484848484848A89FFFFFF"
$"FFFFFFFFEB2D2C2C2CC42C2C2CEB2F000F0FFFFFFFFF89898A8989FFFFFFFFFF"
$"FFFFFFFFFFCAEB2D2D2D2D2DEB2F000F0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFA9CAEBEBEBCAA9000E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
};
resource(1, "BEOS:M:STD_ICON") #'MICN' array {
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFF1BD9D9FFFFFF"
$"FFFFFF828219FFFFFFD8646363D8FFFF"
$"FFFF2C2D2D2CC4FF62631C3F1E63D8FF"
$"FF2CCA1A1D822DA3D8623F3F3F1ED81A"
$"822D1A3F3F3FA32DD8620E1E3F1FD862"
$"822D1D3F3F0F822E63830A1E3FFD64FF"
$"FF2C5A3F1E0BC4EBFF64D8D9D96483FF"
$"FFCA2CA35AC42E82FFFF838A8917FFFF"
$"FFFFA92E2ECA82FFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
};

View File

@ -0,0 +1,235 @@
#include <errno.h>
#include <sys/param.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "ksocket.h"
#include <netinet/in.h>
#include <arpa/inet.h>
#include "http_cnx.h"
//#define TESTME
#ifdef _KERNEL_MODE
#include <KernelExport.h>
#define printf dprintf
#undef TESTME
#endif
#define DBG "googlefs: http_cnx: "
#define HTTPVER "1.0"
#define GOOGLEFS_UA "GoogleFS"
#ifdef TESTME
#define BUFSZ (128*1024)
#endif
KSOCKET_MODULE_DECL;
status_t http_init()
{
return ksocket_init();
}
status_t http_uninit()
{
return ksocket_cleanup();
}
status_t http_create(struct http_cnx **cnx)
{
struct http_cnx *c;
int err;
c = malloc(sizeof(struct http_cnx));
if (!c)
return ENOMEM;
memset(c, 0, sizeof(struct http_cnx));
err = c->sock = ksocket(AF_INET, SOCK_STREAM, 0);
if (err < 0) {
free(c);
return errno;
}
*cnx = c;
return B_OK;
}
status_t http_delete(struct http_cnx *cnx)
{
if (!cnx)
return EINVAL;
if ((unsigned long)cnx < 0x40) {
dprintf("http: WARNING: cnx ptr = %p\n", cnx);
return B_OK;
}
if (cnx->sock >= 0) {
kclosesocket(cnx->sock);
cnx->sock = -1;
}
if (cnx->buffer)
free(cnx->buffer);
cnx->buffer = 0xaa55aa55;//XXX
free(cnx);
return B_OK;
}
status_t http_connect(struct http_cnx *cnx, struct sockaddr_in *sin)
{
int err;
uint32 ip;
uint16 port;
if (!sin) {
dprintf("http_connect(, NULL)!!\n");
return EINVAL;
}
ip = sin->sin_addr.s_addr;
port = sin->sin_port;
dprintf("http_connect(, %d.%d.%d.%d:%d), sock = %ld\n", ip & 0xff, (ip >> 8) & 0xff, (ip >> 16) & 0xff, (ip >> 24) & 0xff, ntohs(port), cnx->sock);
err = kconnect(cnx->sock, (struct sockaddr *)sin, sin->sin_len);
cnx->err = 0;
if (err == -1)
return errno;
return err;
}
status_t http_close(struct http_cnx *cnx)
{
int err;
if (!cnx)
return EINVAL;
if (cnx->sock < 0)
return 0;
err = kclosesocket(cnx->sock);
cnx->sock = -1;
return err;
}
status_t http_get(struct http_cnx *cnx, const char *url)
{
char *req, *p;
int reqlen;
int len;
int err;
long headerslen = 0;
long contentlen = 0;
if (strlen(url) > 4096 - 128)
return EINVAL;
req = malloc(4096);
if (!req)
return B_NO_MEMORY;
/* no snprintf in kernel :( */
sprintf(req, "GET %s HTTP/"HTTPVER"\nUser-Agent: " GOOGLEFS_UA "/" "0.1" "\nAccept: */*\n\n", url);
reqlen = strlen(req);
err = len = write(cnx->sock, req, reqlen);
if (len < 1)
goto err0;
reqlen = 4096;
err = len = read(cnx->sock, req, reqlen);
printf("read(sock) = %d\n", len);
//write(1, req, len);
err = B_NO_MEMORY;
if (len < 10)
goto err0;
if (!strstr(req, "\r\n\r\n")) {
if (!strstr(req, "\n\n")) /* shouldn't happen */
goto err0;
headerslen = strstr(req, "\n\n") - req + 2;
req[headerslen-1] = '\0';
req[headerslen-2] = '\0';
} else {
headerslen = strstr(req, "\r\n\r\n") - req + 4;
req[headerslen-3] = '\0';
req[headerslen-4] = '\0';
}
if (headerslen < 2 || headerslen > 4095)
goto err0;
p = strstr(req, "HTTP/1.");
if (!p)
goto err0;
p += strlen("HTTP/1.");
if (strlen(p) < 5)
goto err0;
p += strlen("1 ");
cnx->err = strtol(p, &p, 10);
if (cnx->err < 200 || cnx->err > 299)
goto err0;
printf("REQ: %d\n", cnx->err);
contentlen = len - headerslen;
// if (!strstr(req, "\n\n") && !strstr(req, "\r\n\r\n"))
// goto err0;
while (len > 0) {
long left = reqlen - headerslen - contentlen;
if (left < 128) {
reqlen += 4096;
p = realloc(req, reqlen);
left += 4096;
if (!p)
goto err0;
req = p;
}
err = len = read(cnx->sock, req + headerslen + contentlen, left);
if (len < 0)
goto err0;
contentlen += len;
}
cnx->buffer = req;
cnx->headers = req;
cnx->headerslen = headerslen;
cnx->data = req + headerslen;
cnx->datalen = contentlen;
cnx->data[contentlen] = '\0'; /* we have at least 128 bytes allocated ahead */
return B_OK;
err0:
if (err > -1)
err = -1;
free(req);
return err;
}
#ifdef TESTME
//#define TESTURL "/"
//#define TESTURL "http://www.google.com/search?as_q=google+api+&num=50&hl=en&ie=ISO-8859-1&btnG=Google+Search&as_epq=frequently+asked&as_oq=help&as_eq=plop&lr=lang_en&as_ft=i&as_filetype=&as_qdr=m3&as_nlo=&as_nhi=&as_occt=any&as_dt=i&as_sitesearch="
#define TESTURL "http://www.google.com/search?hl=en&ie=UTF-8&num=50&q=beos"
int main(int argc, char **argv)
{
struct sockaddr_in sin;
struct http_cnx *cnx;
size_t len;
char *p;
int err;
http_init();
err = http_create(&cnx);
printf("error 0x%08lx\n", err);
sin.sin_len = sizeof(struct sockaddr_in);
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
inet_aton("66.102.11.99", &sin.sin_addr);
sin.sin_port = htons(80);
err = http_connect(cnx, &sin);
printf("error 0x%08lx\n", err);
err = http_get(cnx, TESTURL);
printf("error 0x%08lx\n", err);
if (err < 0)
return 1;
printf("HEADERS %d:%s\n", cnx->headerslen, cnx->headers);
printf("DATA: %d:%s\n", cnx->datalen, cnx->data);
http_close(cnx);
http_delete(cnx);
return 0;
}
#endif

View File

@ -0,0 +1,31 @@
#ifndef _HTTP_CNX_H
#define _HTTP_CNX_H
struct http_cnx {
int sock;
status_t err; /* 404, ... */
char *headers;
size_t headerslen;
char *data;
size_t datalen;
/* for bookkeeping */
char *buffer;
};
struct sockaddr_in;
extern status_t http_init();
extern status_t http_uninit();
extern status_t http_create(struct http_cnx **);
extern status_t http_delete(struct http_cnx *cnx);
extern status_t http_connect(struct http_cnx *cnx, struct sockaddr_in *sin);
extern status_t http_close(struct http_cnx *cnx);
extern status_t http_get(struct http_cnx *cnx, const char *url);
//extern status_t http_post(struct http_cnx *cnx, const char *url);
/* read the actual data in the buffer */
//extern status_t http_fetch_data(struct http_cnx *cnx);
#endif /* _HTTP_CNX_H */

View File

@ -0,0 +1,114 @@
/*
* kernel-level support for sockets, includes userland support as well for testing.
* François Revol.
*/
#ifndef _KSOCKET_H
#define _KSOCKET_H
#include <sys/socket.h>
#ifndef _KERNEL_MODE /* userland wrapper */
#define ksocket socket
#define kbind bind
#define kconnect connect
#define kgetsockname getsockname
#define kgetpeername getpeername
#define kaccept accept
#define ksendmsg sendmsg
#define krecvmsg recvmsg
#define krecvfrom recvfrom
#define ksendto sendto
#define krecv recv
#define ksend send
#define klisten listen
#define kshutdown shutdown
#define kclosesocket close
#define ksocket_init() ({B_OK;})
#define ksocket_cleanup() ({B_OK;})
#define kmessage(fmt, ...) printf(fmt "\n", ##__VA_ARGS__)
#define KSOCKET_MODULE_DECL /* nothing */
#elif defined(__HAIKU__)
/* Haiku socket module */
#include <os/drivers/socket_interface.h>
extern struct socket_module_info *gSocket;
#define ksocket (gSocket->socket)
#define kbind (gSocket->bind)
#define kconnect (gSocket->connect)
#define kgetsockname (gSocket->getsockname)
#define kgetpeername (gSocket->getpeername)
#define kaccept (gSocket->accept)
//#define kaccept(_fd, _addr, _sz) ({int thesock; thesock = (gSocket->accept)(_fd, _addr, _sz); dprintf("kaccept(%d, , ) = %d\n", _fd, thesock); thesock; })
#define ksendmsg (gSocket->sendmsg)
#define krecvmsg (gSocket->recvmsg)
#define krecvfrom (gSocket->recvfrom)
#define ksendto (gSocket->sendto)
#define krecv (gSocket->recv)
#define ksend (gSocket->send)
#define klisten (gSocket->listen)
#define kshutdown (gSocket->shutdown)
#define kclosesocket close
#define kmessage(fmt, ...) dprintf("ksocket: " fmt "\n", ##__VA_ARGS__)
extern status_t ksocket_init ();
extern status_t ksocket_cleanup ();
#define KSOCKET_MODULE_DECL \
struct socket_module_info *gSocket; \
status_t ksocket_init () { \
return get_module(B_SOCKET_MODULE_NAME, (module_info **)&gSocket); \
} \
\
status_t ksocket_cleanup () { \
return put_module(B_SOCKET_MODULE_NAME); \
}
#elif defined(BONE_VERSION)
/* BONE socket module */
#include <sys/socket_module.h>
extern bone_socket_info_t *gSocket;
#define ksocket (gSocket->socket)
//#define ksocket(_fam, _typ, _pro) ({int thesock; thesock = (gSocket->socket)(_fam, _typ, _pro); dprintf("ksocket(%d, %d, %d) = %d\n", _fam, _typ, _pro, thesock); thesock;})
#define kbind (gSocket->bind)
#define kconnect (gSocket->connect)
#define kgetsockname (gSocket->getsockname)
#define kgetpeername (gSocket->getpeername)
#define kaccept (gSocket->accept)
//#define kaccept(_fd, _addr, _sz) ({int thesock; thesock = (gSocket->accept)(_fd, _addr, _sz); dprintf("kaccept(%d, , ) = %d\n", _fd, thesock); thesock; })
#define ksendmsg _ERROR_no_sendmsg_in_BONE
#define krecvmsg _ERROR_no_recvmsg_in_BONE
#define krecvfrom (gSocket->recvfrom)
#define ksendto (gSocket->sendto)
#define krecv (gSocket->recv)
#define ksend (gSocket->send)
#define klisten (gSocket->listen)
#define kshutdown (gSocket->shutdown)
#define kclosesocket close
#define kmessage(fmt, ...) dprintf("ksocket: " fmt "\n", ##__VA_ARGS__)
extern status_t ksocket_init ();
extern status_t ksocket_cleanup ();
#define KSOCKET_MODULE_DECL \
bone_socket_info_t *gSocket; \
status_t ksocket_init () { \
return get_module(BONE_SOCKET_MODULE, (module_info **)&gSocket); \
} \
\
status_t ksocket_cleanup () { \
return put_module(BONE_SOCKET_MODULE); \
}
#else /* _KERNEL_MODE, !BONE_VERSION */
#error feel free to put back ksocketd support if you dare
#endif /* _KERNEL_MODE, BONE_VERSION */
#endif /* _KSOCKET_H */

View File

@ -0,0 +1,80 @@
#include <OS.h>
#include "lists.h"
void slist_init(struct _slist_entry *item)
{
item->next = NULL;
}
void slist_uninit(struct _slist_entry *item)
{
item->next = NULL;
}
struct _slist_entry *slist_find(struct _slist_entry *head, slist_compare_func func, void *id)
{
struct _slist_entry *p = head;
if (head == NULL)
return NULL;
while (p) {
if (func(p, id) == 0)
return p;
p = p->next;
}
return NULL;
}
status_t slist_insert_head(struct _slist_entry **head, struct _slist_entry *item)
{
struct _slist_entry *next = NULL;
if (head == NULL || item == NULL)
return EINVAL;
if (*head)
next = *head;
item->next = next;
*head = item;
return B_OK;
}
struct _slist_entry *slist_dequeue_tail(struct _slist_entry **head)
{
struct _slist_entry **prev = NULL;
struct _slist_entry *curr = NULL;
if (head == NULL || *head == NULL)
return NULL;
prev = head;
curr = *head;
while (curr->next) {
prev = &(curr->next);
curr = curr->next;
}
*prev = NULL;
return curr;
}
status_t slist_remove(struct _slist_entry **head, struct _slist_entry *item)
{
struct _slist_entry **prev = NULL;
struct _slist_entry *curr = NULL;
if (head == NULL || *head == NULL || item == NULL)
return EINVAL;
prev = head;
curr = *head;
while (prev && curr) {
if (curr == item) {
*prev = curr->next;
curr->next = NULL;
return B_OK;
}
prev = &(curr->next);
curr = curr->next;
}
return ENOENT;
}
struct _slist_entry *slist_next(struct _slist_entry *item)
{
if (!item || !item->next)
return NULL;
return item->next;
}

View File

@ -0,0 +1,29 @@
/* good old single linked list stuff */
/* revol@free.fr */
#ifndef _LISTS_H
#define _LISTS_H
#include <stddef.h>
typedef struct _slist_entry {
struct _slist_entry *next;
char id[0];
} slist_entry;
typedef int (*slist_compare_func)(struct _slist_entry *item, void *id);
extern void slist_init(struct _slist_entry *item);
extern void slist_uninit(struct _slist_entry *item);
extern struct _slist_entry *slist_find(struct _slist_entry *head, slist_compare_func func, void *id);
extern status_t slist_insert_head(struct _slist_entry **head, struct _slist_entry *item);
extern struct _slist_entry *slist_dequeue_tail(struct _slist_entry **head);
extern status_t slist_remove(struct _slist_entry **head, struct _slist_entry *item);
extern struct _slist_entry *slist_next(struct _slist_entry *item);
#define LENT_TO_OBJ(_obtype, _sle, _moff) ((_obtype *)(((char *)(_sle)) - offsetof(_obtype, _moff)))
#define OBJ_TO_LENT(_obj, _member) (&((_obj)->_member))
#endif /* _LISTS_H */

View File

@ -0,0 +1,99 @@
#include <OS.h>
#include "lists2.h"
void *sll_find(long nextoff, void *head, sll_compare_func func, void *id)
{
void *p = head;
int count = 5000;
if (head == NULL)
return NULL;
while (p) {
if (func(p, id) == 0)
return p;
p = sll_next(nextoff, p);
if (!count--) {
dprintf("sll_find: WARNING: 5000 nodes to search ??? looks more of a loop.\n");
return NULL;
}
}
return NULL;
}
status_t sll_insert_head(long nextoff, void **head, void *item)
{
void *next = NULL;
if (head == NULL || item == NULL)
return EINVAL;
if (*head)
next = *head;
*(void **)(((char *)item)+nextoff) = next;
*head = item;
return B_OK;
}
status_t sll_insert_tail(long nextoff, void **head, void *item)
{
void *p, *next = NULL;
if (head == NULL || item == NULL)
return EINVAL;
if (*(void **)(((char *)item)+nextoff)) {
dprintf("sll_insert_tail: WARNING: %p->next NOT NULL\n", item);
*(void **)(((char *)item)+nextoff) = NULL;
}
p = *head;
if (!p) {
*head = item;
return B_OK;
}
while (sll_next(nextoff, p))
p = sll_next(nextoff, p);
*(void **)(((char *)p)+nextoff) = item;
return B_OK;
}
void *sll_dequeue_tail(long nextoff, void **head)
{
void **prev = NULL;
void *curr = NULL;
if (head == NULL || *head == NULL)
return NULL;
prev = head;
curr = *head;
while (sll_next(nextoff, curr)) {
prev = (void **)(((char *)curr)+nextoff);
curr = sll_next(nextoff, curr);
}
*prev = NULL;
return curr;
}
status_t sll_remove(long nextoff, void **head, void *item)
{
void **prev = NULL;
void *curr = NULL;
if (head == NULL || *head == NULL || item == NULL)
return EINVAL;
prev = head;
curr = *head;
while (prev && curr) {
if (curr == item) {
*prev = sll_next(nextoff, curr);
*(void **)(((char *)item)+nextoff) = NULL;
return B_OK;
}
prev = (void **)(((char *)curr)+nextoff);
curr = sll_next(nextoff, curr);
}
return ENOENT;
}
void *sll_next(long nextoff, void *item)
{
void *next;
if (!item)
return NULL;
next = *(void **)(((char *)item)+nextoff);
return next;
}

View File

@ -0,0 +1,28 @@
/* good old single linked list stuff */
/* revol@free.fr */
#ifndef _LISTS2_H
#define _LISTS2_H
typedef int (*sll_compare_func)(const void *item, void *id);
extern void *sll_find(long nextoff, void *head, sll_compare_func func, void *id);
extern status_t sll_insert_head(long nextoff, void **head, void *item);
extern status_t sll_insert_tail(long nextoff, void **head, void *item);
extern void *sll_dequeue_tail(long nextoff, void **head);
extern status_t sll_remove(long nextoff, void **head, void *item);
extern void *sll_next(long nextoff, void *item);
#define SLLPTROFF(type,item,nextp) ((typeof(item))(((char *)(item)) + offsetof(item, nextp)))
#define SLLITEM2PTR(type,item,nextp) ((typeof(item))(((char *)(item)) + offsetof(item, nextp)))
#define SLLPTR2ITEM(type,ptr,nextp) ((typeof(ptr))(((char *)(ptr)) - offsetof(ptr, nextp)))
#define SLLNEXT(type,item,nextp) (*(typeof(item))(((char *)(item)) + offsetof(item, nextp)))
#define SLL_FIND(_head,_nextp,_func,_with) (typeof(_head))sll_find(offsetof(typeof(*_head),_nextp), (void *)(_head), _func, _with)
#define SLL_INSERT(_head,_nextp,_item) (typeof(_head))sll_insert_head(offsetof(typeof(*_head),_nextp), (void **)&(_head), _item)
//#define SLL_INSERT_TAIL(_head,_nextp,_item) (typeof(_head))sll_insert_tail(offsetof(typeof(*_head),_nextp), (void **)&(_head), _item)
#define SLL_INSERT_TAIL(_head,_nextp,_item) sll_insert_head(offsetof(typeof(*_head),_nextp), (void **)&(_head), _item)
#define SLL_DEQUEUE(_head,_nextp) (typeof(_head))sll_dequeue_tail(offsetof(typeof(*_head),_nextp), (void **)&(_head))
#define SLL_REMOVE(_head,_nextp,_item) (typeof(_head))sll_remove(offsetof(typeof(*_head),_nextp), (void **)&(_head), _item)
#endif /* _LISTS2_H */

View File

@ -0,0 +1,52 @@
/*
Copyright 1999, Be Incorporated. All Rights Reserved.
This file may be used under the terms of the Be Sample Code License.
*/
#ifndef _LOCK_H
#define _LOCK_H
#include <BeBuild.h>
#include <OS.h>
typedef struct lock lock;
typedef struct mlock mlock;
struct lock {
sem_id s;
long c;
};
struct mlock {
sem_id s;
};
extern _IMPEXP_KERNEL int new_lock(lock *l, const char *name);
extern _IMPEXP_KERNEL int free_lock(lock *l);
static inline status_t LOCK(lock *l)
{
if (atomic_add(&(l->c), -1) <= 0)
return acquire_sem(l->s);
return B_OK;
}
static inline status_t UNLOCK(lock *l)
{
if (atomic_add(&(l->c), 1) < 0)
return release_sem(l->s);
return B_OK;
}
//#define LOCK(l) if (atomic_add(&l.c, -1) <= 0) acquire_sem(l.s);
//#define UNLOCK(l) if (atomic_add(&l.c, 1) < 0) release_sem(l.s);
extern _IMPEXP_KERNEL int new_mlock(mlock *l, long c, const char *name);
extern _IMPEXP_KERNEL int free_mlock(mlock *l);
#define LOCKM(l,cnt) acquire_sem_etc(l.s, cnt, 0, 0)
#define UNLOCKM(l,cnt) release_sem_etc(l.s, cnt, 0)
#endif

View File

@ -0,0 +1,133 @@
## BeOS Generic Makefile v2.2 ##
## Fill in this file to specify the project being created, and the referenced
## makefile-engine will do all of the hard work for you. This handles both
## Intel and PowerPC builds of the BeOS.
## Application Specific Settings ---------------------------------------------
# specify the name of the binary
NAME= googlefs
# specify the type of binary
# APP: Application
# SHARED: Shared library or add-on
# STATIC: Static library archive
# DRIVER: Kernel Driver
TYPE= DRIVER
# add support for new Pe and Eddie features
# to fill in generic makefile
#%{
# @src->@
# specify the source files to use
# full paths or paths relative to the makefile can be included
# all files, regardless of directory, will have their object
# files created in the common object directory.
# Note that this means this makefile will not work correctly
# if two source files with the same name (source.c or source.cpp)
# are included from different directories. Also note that spaces
# in folder names do not work well with this makefile.
SRCS= vnidpool.c \
lists2.c \
http_cnx.c \
parse_google_html.c \
google_request.c \
query.c \
googlefs.c \
google_icon.c \
attrs.c \
settings.c \
string_utils.c
# specify the resource files to use
# full path or a relative path to the resource file can be used.
RSRCS=
# @<-src@
#%}
# end support for Pe and Eddie
# specify additional libraries to link against
# there are two acceptable forms of library specifications
# - if your library follows the naming pattern of:
# libXXX.so or libXXX.a you can simply specify XXX
# library: libbe.so entry: be
#
# - if your library does not follow the standard library
# naming scheme you need to specify the path to the library
# and it's name
# library: my_lib.a entry: my_lib.a or path/my_lib.a
LIBS=
# specify additional paths to directories following the standard
# libXXX.so or libXXX.a naming scheme. You can specify full paths
# or paths relative to the makefile. The paths included may not
# be recursive, so include all of the paths where libraries can
# be found. Directories where source files are found are
# automatically included.
LIBPATHS=
# additional paths to look for system headers
# thes use the form: #include <header>
# source file directories are NOT auto-included here
SYSTEM_INCLUDE_PATHS =
# additional paths to look for local headers
# thes use the form: #include "header"
# source file directories are automatically included
LOCAL_INCLUDE_PATHS =
# specify the level of optimization that you desire
# NONE, SOME, FULL
OPTIMIZE= FULL
# specify any preprocessor symbols to be defined. The symbols will not
# have their values set automatically; you must supply the value (if any)
# to use. For example, setting DEFINES to "DEBUG=1" will cause the
# compiler option "-DDEBUG=1" to be used. Setting DEFINES to "DEBUG"
# would pass "-DDEBUG" on the compiler's command line.
#DEFINES= _IMPEXP_KERNEL= DEBUG_GOOGLEFS=1
DEFINES+= _IMPEXP_KERNEL=
#DEFINES+= DEBUG=1
#DEBUG=1
# specify special warning levels
# if unspecified default warnings will be used
# NONE = supress all warnings
# ALL = enable all warnings
WARNINGS = ALL
# specify whether image symbols will be created
# so that stack crawls in the debugger are meaningful
# if TRUE symbols will be created
SYMBOLS = TRUE
# specify debug settings
# if TRUE will allow application to be run from a source-level
# debugger. Note that this will disable all optimzation.
DEBUGGER =
# specify additional compiler flags for all files
COMPILER_FLAGS =
# specify additional linker flags
LINKER_FLAGS =
# specify the version of this particular item
# (for example, -app 3 4 0 d 0 -short 340 -long "340 "`echo -n -e '\302\251'`"1999 GNU GPL")
# This may also be specified in a resource.
APP_VERSION =
# (for TYPE == DRIVER only) Specify desired location of driver in the /dev
# hierarchy. Used by the driverinstall rule. E.g., DRIVER_PATH = video/usb will
# instruct the driverinstall rule to place a symlink to your driver's binary in
# ~/add-ons/kernel/drivers/dev/video/usb, so that your driver will appear at
# /dev/video/usb when loaded. Default is "misc".
DRIVER_PATH =
## include the makefile-engine
include $(BUILDHOME)/etc/makefile-engine

View File

@ -0,0 +1,134 @@
## BeOS Generic Makefile v2.2 ##
## Fill in this file to specify the project being created, and the referenced
## makefile-engine will do all of the hard work for you. This handles both
## Intel and PowerPC builds of the BeOS.
## Application Specific Settings ---------------------------------------------
# specify the name of the binary
NAME= googlefs
# specify the type of binary
# APP: Application
# SHARED: Shared library or add-on
# STATIC: Static library archive
# DRIVER: Kernel Driver
TYPE= SHARED
# add support for new Pe and Eddie features
# to fill in generic makefile
#%{
# @src->@
# specify the source files to use
# full paths or paths relative to the makefile can be included
# all files, regardless of directory, will have their object
# files created in the common object directory.
# Note that this means this makefile will not work correctly
# if two source files with the same name (source.c or source.cpp)
# are included from different directories. Also note that spaces
# in folder names do not work well with this makefile.
SRCS= vnidpool.c \
lists2.c \
http_cnx.c \
parse_google_html.c \
google_request.c \
query.c \
googlefs.c \
google_icon.c \
attrs.c \
settings.c \
string_utils.c
# specify the resource files to use
# full path or a relative path to the resource file can be used.
RSRCS=
# @<-src@
#%}
# end support for Pe and Eddie
# specify additional libraries to link against
# there are two acceptable forms of library specifications
# - if your library follows the naming pattern of:
# libXXX.so or libXXX.a you can simply specify XXX
# library: libbe.so entry: be
#
# - if your library does not follow the standard library
# naming scheme you need to specify the path to the library
# and it's name
# library: my_lib.a entry: my_lib.a or path/my_lib.a
LIBS= _APP_ socket bind
# specify additional paths to directories following the standard
# libXXX.so or libXXX.a naming scheme. You can specify full paths
# or paths relative to the makefile. The paths included may not
# be recursive, so include all of the paths where libraries can
# be found. Directories where source files are found are
# automatically included.
LIBPATHS=
# additional paths to look for system headers
# thes use the form: #include <header>
# source file directories are NOT auto-included here
SYSTEM_INCLUDE_PATHS =
# additional paths to look for local headers
# thes use the form: #include "header"
# source file directories are automatically included
LOCAL_INCLUDE_PATHS =
# specify the level of optimization that you desire
# NONE, SOME, FULL
OPTIMIZE= FULL
# specify any preprocessor symbols to be defined. The symbols will not
# have their values set automatically; you must supply the value (if any)
# to use. For example, setting DEFINES to "DEBUG=1" will cause the
# compiler option "-DDEBUG=1" to be used. Setting DEFINES to "DEBUG"
# would pass "-DDEBUG" on the compiler's command line.
DEFINES= DEBUG=1 _BUILDING_fs=1 _IMPEXP_KERNEL=
#DEBUG=1
# specify special warning levels
# if unspecified default warnings will be used
# NONE = supress all warnings
# ALL = enable all warnings
WARNINGS = ALL
# specify whether image symbols will be created
# so that stack crawls in the debugger are meaningful
# if TRUE symbols will be created
SYMBOLS = TRUE
# specify debug settings
# if TRUE will allow application to be run from a source-level
# debugger. Note that this will disable all optimzation.
DEBUGGER =
# specify additional compiler flags for all files
COMPILER_FLAGS =
# specify additional linker flags
LINKER_FLAGS =
# specify the version of this particular item
# (for example, -app 3 4 0 d 0 -short 340 -long "340 "`echo -n -e '\302\251'`"1999 GNU GPL")
# This may also be specified in a resource.
APP_VERSION =
# (for TYPE == DRIVER only) Specify desired location of driver in the /dev
# hierarchy. Used by the driverinstall rule. E.g., DRIVER_PATH = video/usb will
# instruct the driverinstall rule to place a symlink to your driver's binary in
# ~/add-ons/kernel/drivers/dev/video/usb, so that your driver will appear at
# /dev/video/usb when loaded. Default is "misc".
DRIVER_PATH =
## include the makefile-engine
include $(BUILDHOME)/etc/makefile-engine
_APP_:
ln -s /boot/home/config/bin/UserlandFSServer _APP_

View File

@ -0,0 +1,9 @@
#!/bin/sh
FILES="home/config/settings/kernel/drivers/googlefs home/config/add-ons/kernel/file_systems/googlefs home/config/add-ons/userlandfs/googlefs home/config/bin/ndmount home/config/bin/mountgooglefs home/config/bin/imlucky home/config/bin/google home/Desktop/README.googlefs.txt home/config/settings/Tracker/DefaultQueryTemplates/application_x-vnd.Be-bookmark"
cd /boot
zip -r9 googlefs-test-bin.zip ${FILES}

View File

@ -0,0 +1,253 @@
#include <errno.h>
#include <sys/param.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <OS.h>
#include "google_request.h"
#include "string_utils.h"
#define TESTME
#ifdef _KERNEL_MODE
#define printf dprintf
#undef TESTME
#endif
#define DBG "googlefs: parse_html: "
#ifdef TESTME
#define BUFSZ (128*1024)
#endif
//old
//#define G_BEGIN_URL "<p class=g><a class=l href=\""
#define G_BEGIN_URL "<div class=g><a class=l href=\""
#define G_END_URL "\">"
//#define G_BEGIN_NAME
#define G_END_NAME "</a>"
#define G_BEGIN_SNIPSET /*"<td class=j>"*/"<font size=-1>"
#define G_END_SNIPSET "<br>"
#define G_BEGIN_CACHESIM " <a class=fl href=\""
#define G_END_CACHESIM "\">"
int google_parse_results(const char *html, size_t htmlsize, struct google_result **results)
{
struct google_result *res = NULL, *nres = NULL, *prev = NULL;
const char *p, *q;
char *nextresult = NULL;
long numres = 0;
long maxres = 0;
long startid = 0;
long lastid = 0;
int done = 0;
int err = ENOMEM;
if (!html || !results)
return EINVAL;
/* sanity checks */
printf(DBG"sanity check...\n");
if (strstr(html, "<html><head>") != html)
return EINVAL;
// p = strstr(html, "<title>Google Search:");
p = strstr(html, "Google");
if (!p) return EINVAL;
p = strstr(html, "</head><body");
if (!p) return EINVAL;
p = strstr(html, ">Results <b>");
if (!p) return EINVAL;
p+= strlen(">Results <b>");
startid = strtol(p, &p, 10);
if (!p) return EINVAL;
p = strstr(html, "</b> - <b>");
p+= strlen("</b> - <b>");
if (!p) return EINVAL;
lastid = strtol(p, &p, 10);
if (!p) return EINVAL;
maxres = lastid - startid + 1;
printf(DBG"getting %ld results (%ld to %ld)\n", maxres, startid, lastid);
printf(DBG"parsing...\n");
do {
char *item;
long itemlen;
char *tmp;
int i;
nres = malloc(sizeof(struct google_result));
if (!nres) {
// XXX: cleanup!
goto err0;
}
memset(nres, 0, sizeof(struct google_result));
nres->id = startid + numres; //- 1;
/* find url */
// <p class=g><a href=URL>
if (!p) break;
if (nextresult)
p = nextresult;
else
p = strstr(p, G_BEGIN_URL);
if (!p) break;
p+= strlen(G_BEGIN_URL);
nextresult = strstr(p, G_BEGIN_URL);
//printf(DBG"[%ld] found token 1\n", numres);
item = p;
p = strstr(p, G_END_URL);
if (!p) break;
p+= strlen(G_END_URL);
//printf(DBG"[%ld] found token 2\n", numres);
itemlen = p - item - strlen(G_END_URL);
itemlen = MIN(GR_MAX_URL-1, itemlen);
strncpy(nres->url, item, itemlen);
nres->url[itemlen] = '\0';
/* find name */
//<b>Google</b> Web APIs - FAQ</a><table
item = p;
p = strstr(p, G_END_NAME);
if (!p) break;
p+= strlen(G_END_NAME);
//printf(DBG"[%ld] found token 3\n", numres);
itemlen = p - item - strlen(G_END_NAME);
//itemlen = MIN(GR_MAX_NAME-1, itemlen);
itemlen = MIN(GR_MAX_NAME*4-1, itemlen);
q = malloc(itemlen+1);
if (!q)
goto err0;
strncpy(q, item, itemlen);
q[itemlen] = '\0';
/* strip <*b> off */
while ((tmp = strstr(q, "<b>")))
strcpy(tmp, tmp + 3);
while ((tmp = strstr(q, "</b>")))
strcpy(tmp, tmp + 4);
/* strip &foo; */
tmp = unentitify_string(q);
free(q);
if (!tmp)
goto err0;
strncpy(nres->name, tmp, GR_MAX_NAME-1);
nres->name[GR_MAX_NAME-1] = '\0';
free(tmp);
#if 0
/* find snipset */
//<td class=j><font size=-1><b>...</b> a custom Java client library, documentation on <b>how</b> <b>to</b> use the <b>...</b> You can find it at http://<b>api</b>.<b>google</b>.com/GoogleSearch.wsdl <b>...</b> need to get started is in <b>googleapi</b>.jar <b>...</b> <br>
if (!p) break;
q = strstr(p, G_BEGIN_SNIPSET);
if (q && (!nextresult || (q < nextresult))) {
p = q;
p+= strlen(G_BEGIN_SNIPSET);
//printf(DBG"[%ld] found token 4\n", numres);
item = p;
p = strstr(p, G_END_SNIPSET);
if (!p) break;
p+= strlen(G_END_SNIPSET);
//printf(DBG"[%ld] found token 5\n", numres);
itemlen = p - item - strlen(G_END_SNIPSET);
itemlen = MIN(GR_MAX_URL-1, itemlen);
strncpy(nres->snipset, item, itemlen);
nres->snipset[itemlen] = '\0';
/* strip &foo; */
tmp = unentitify_string(nres->snipset);
if (!tmp)
break;
strncpy(nres->snipset, tmp, GR_MAX_SNIPSET-1);
nres->snipset[GR_MAX_SNIPSET-1] = '\0';
free(tmp);
/* strip <*b> off */
while ((tmp = strstr(nres->snipset, "<b>")))
strcpy(tmp, tmp + 3);
while ((tmp = strstr(nres->snipset, "</b>")))
strcpy(tmp, tmp + 4);
while ((tmp = strstr(nres->snipset, "\r")))
strcpy(tmp, tmp + 1);
while ((tmp = strstr(nres->snipset, "\n")))
*tmp = ' ';
}
#endif
/* find cache/similar url */
// <a class=fl href="http://216.239.59.104/search?q=cache:vR7BaPWutnkJ:www.google.com/apis/api_faq.html+google+api++help+%22frequently+asked%22+-plop&hl=en&lr=lang_en&ie=UTF-8">Cached</a>
for (i = 0; i < 2; i++) {
if (!p) break;
q = strstr(p, G_BEGIN_CACHESIM);
if (q && nextresult && (q > nextresult)) {
p = q;
printf(DBG"[%ld] cache/sim beyond next\n", numres);
p = nextresult; /* reset */
} else if (q && (!nextresult || (q < nextresult))) {
int iscache;
p = q;
p+= strlen(G_BEGIN_CACHESIM);
//printf(DBG"[%ld] found token 6\n", numres);
item = p;
p = strstr(p, G_END_CACHESIM);
if (!p) break;
p+= strlen(G_END_CACHESIM);
//printf(DBG"[%ld] found token 7\n", numres);
itemlen = p - item - strlen(G_END_CACHESIM);
itemlen = MIN(GR_MAX_URL-1, itemlen);
if (!strncmp(p, "Cached", 6)) {
strncpy(nres->cache_url, item, itemlen);
nres->cache_url[itemlen] = '\0';
} else if (!strncmp(p, "Similar", 7)) {
strncpy(nres->similar_url, item, itemlen);
nres->similar_url[itemlen] = '\0';
}
// else
// break;
}
}
numres++;
if (!prev)
res = nres;
else
prev->next = nres;
prev = nres;
nres = NULL;
} while (!done || numres < maxres);
*results = res;
return numres;
err0:
free(nres);
while (res) {
nres = res->next;
free(res);
res = nres;
}
return err;
}
#ifdef TESTME
int main(int argc, char **argv)
{
struct google_result *results;
struct google_result *tag1 = 0xaaaa5555, *res = NULL, *tag2 = 0x5555aaaa;
size_t len;
char *p;
int err;
p = malloc(BUFSZ+8);
len = read(0, p+4, BUFSZ);
p[BUFSZ+4-1] = '\0';
*(uint32 *)p = 0xa5a5a5a5;
*(uint32 *)(&p[BUFSZ+4]) = 0x5a5a5a5a;
err = google_parse_results(p+4, len, &results);
printf("error 0x%08lx\n", err);
if (err < 0)
return 1;
res = results;
while (res) {
printf("[%ld]:\nURL='%s'\nNAME='%s'\nSNIPSET='%s'\nCACHE='%s'\nSIMILAR='%s'\n\n", res->id, res->url, res->name, res->snipset, res->cache_url, res->similar_url);
res = res->next;
}
printf("before = 0x%08lx:0x%08lx, after = 0x%08lx:0x%08lx\n", 0xa5a5a5a5, *(uint32 *)p, 0x5a5a5a5a, *(uint32 *)(&p[BUFSZ+4]));
printf("before = 0x%08lx:0x%08lx, after = 0x%08lx:0x%08lx\n", 0xaaaa5555, tag1, 0x5555aaaa, tag2);
return 0;
}
#endif

View File

@ -0,0 +1,181 @@
#include "query.h"
//#define TESTME
#ifdef _KERNEL_MODE
#define printf dprintf
#undef TESTME
#endif
#ifdef TESTME
#include <stdio.h>
#endif
// ('foo'<>"bar\"")&&!(()||())
void free_query_tree(query_exp *tree)
{
if (!tree)
return;
if (tree->op >= B_AND) {
free_query_tree(tree->lv.exp);
free_query_tree(tree->rv.exp);
}
free(tree->lv.str);
free(tree->rv.str);
free(tree);
}
char *query_unescape_string(const char *q, const char **newq, char delim)
{
int backslash = 0;
int i;
char *p, *p2;
p = malloc(10);
if (!p)
return NULL;
for (i = 0; *q; i++) {
if ((i % 10) == 9) {
p2 = realloc(p, i+10);
if (!p2) {
free(p);
return NULL;//p;
}
p = p2;
}
if (backslash) {
backslash = 0;
p[i] = *q;
} else if (*q == '\\') {
backslash = 1;
i--;
} else if (*q == '\0') {
break;
} else if (*q == delim) {
break;
} else {
p[i] = *q;
}
q++;
}
p[i] = '\0';
if (newq)
*newq = q;
if (i)
return p;
free(p);
return NULL;
}
char *query_strip_bracketed_Cc(char *str)
{
char *p = str;
char c, C;
while (*p) {
if (*p == '[') {
if (p[1] && p[2] && p[3] == ']') {
c = p[1];
C = p[2];
//printf("cC = %c%c\n", c, C);
if (C >= 'a' && C <= 'z' && (c == C + 'A' - 'a'))
*p = C;
else if (c >= 'a' && c <= 'z' && (C == c + 'A' - 'a'))
*p = c;
if (*p != '[') {
strcpy(p+1, p + 4);
}
}
}
p++;
}
return str;
}
enum pqs_state {
QS_UNKNOWN,
QS_PAREN,
QS_QTR,
QS_
};
static const char *parse_qs_r(const char *query, query_exp *tree)
{
int parens = 0;
return NULL;
}
status_t query_parse(const char *query, query_exp **tree)
{
query_exp *t;
return B_OK;
}
#ifdef TESTME
const char *strqop(query_op op)
{
switch (op) {
#define QOP(_op) case _op: return #_op
QOP(B_INVALID_OP);
QOP(B_EQ);
QOP(B_GT);
QOP(B_GE);
QOP(B_LT);
QOP(B_LE);
QOP(B_NE);
QOP(B_CONTAINS);
QOP(B_BEGINS_WITH);
QOP(B_ENDS_WITH);
QOP(B_AND);
QOP(B_OR);
QOP(B_NOT);
#undef QOP
default: return "B_?_OP";
}
}
#define INDC '#'
void dump_query_tree(query_exp *tree, int indent)
{
int i;
if (!tree)
return;
if (tree->op >= B_AND) {
for (i=0;i<indent;i++) printf("%c", INDC);
printf(": %s {\n", strqop(tree->op));
dump_query_tree(tree->lv.exp, indent+1);
dump_query_tree(tree->rv.exp, indent+1);
for (i=0;i<indent;i++) printf("%c", INDC);
printf("}\n");
} else {
for (i=0;i<indent;i++) printf("%c", INDC);
printf(": {%s} %s {%s}\n", tree->lv.str, strqop(tree->op), tree->rv.str);
}
}
int main(int argc, char **argv)
{
status_t err;
query_exp *tree;
char *p;
if (argc < 2)
return 1;
/*
err = query_parse(argv[1], &tree);
if (err) {
printf("parse_query_string: %s\n", strerror(err));
return 1;
}
dump_query_tree(tree, 0);
*/
if (!strncmp(argv[1], "((name==\"*", 10)) {
argv[1] += 10;
}
p = query_unescape_string(argv[1], NULL, '"');
printf("'%s'\n", p);
query_strip_bracketed_Cc(p);
printf("'%s'\n", p);
return 0;
}
#endif

View File

@ -0,0 +1,57 @@
#ifndef _K_QUERY_H
#define _K_QUERY_H
#include <OS.h>
#ifndef _QUERY_H
/* already defined in Query.h */
typedef enum {
B_INVALID_OP = 0,
B_EQ,
B_GT,
B_GE,
B_LT,
B_LE,
B_NE,
B_CONTAINS,
B_BEGINS_WITH,
B_ENDS_WITH,
B_AND = 0x101,
B_OR,
B_NOT,
_B_RESERVED_OP_ = 0x100000
} query_op;
#endif
struct query_exp;
struct query_term {
struct query_exp *exp;
char *str;
/* uint32 type;
union {
int32 int32v;
uint32 uint32v;
int64 int64v;
uint64 uint64v;
bigtime_t bigtimev;
char *strv;
} val;
*/
};
typedef struct query_exp {
query_op op;
struct query_term lv;
struct query_term rv;
} query_exp;
/* this one dups the string */
extern char *query_unescape_string(const char *q, const char **newq, char delim);
/* this oen is in-place */
extern char *query_strip_bracketed_Cc(char *str);
extern status_t query_parse(const char *query, query_exp **tree);
#endif /* _K_QUERY_H */

View File

@ -0,0 +1,133 @@
/*
* ring buffer funcs
* (c) 2003, François Revol, revol@free.fr
*/
#define _BUILDING_fs 1
//#define TEST_RB
#include <sys/param.h>
#ifndef TEST_RB
//#include "lock.h"
#include "googlefs.h"
#endif
#ifdef TEST_RB
#include <OS.h>
struct ring_buffer {
size_t size;
size_t current; /* index of next byte to read */
size_t avail; /* number of bytes in */
unsigned char data[0];
};
#define ASSERT(op) if (!(op)) debugger("ASSERT: " #op " in " __FILE__ ":" __FUNCTION__)
#else
#define ASSERT(op) if (!(op)) panic("ASSERT: %s in %s:%s", #op, __FILE__, __FUNCTION__)
#endif
void rb_init(struct ring_buffer *rb, size_t size)
{
rb->size = size;
rb->current = 0;
rb->avail = 0;
}
void rb_clear(struct ring_buffer *rb)
{
rb->avail = 0;
rb->current = 0;
}
size_t rb_can_write(struct ring_buffer *rb)
{
if (!rb)
return 0;
return (rb->size - rb->avail);
}
size_t rb_can_read(struct ring_buffer *rb)
{
if (!rb)
return 0;
return rb->avail;
}
size_t rb_write(struct ring_buffer *rb, void *data, size_t len)
{
size_t index, towrite, written;
if (!rb)
return 0;
index = (rb->current + rb->avail) % rb->size;
towrite = rb_can_write(rb);
towrite = MIN(len, towrite);
if (towrite < 1)
return 0;
len = rb->size - index;
len = MIN(len, towrite);
memcpy(((char *)rb->data)+index, data, len);
rb->avail += len;
written = len;
if (len < towrite) {
towrite -= len;
len = MIN(towrite, rb_can_write(rb));
index = 0;
memcpy(((char *)rb->data)+index, ((char *)data)+written, len);
rb->avail += len;
written += len;
}
ASSERT(rb->avail <= rb->size);
return written;
}
size_t rb_read(struct ring_buffer *rb, void *data, size_t len)
{
size_t index, toread, got;
if (!rb)
return 0;
index = rb->current;
toread = rb_can_read(rb);
toread = MIN(len, toread);
if (toread < 1)
return 0;
len = rb->size - index;
len = MIN(len, toread);
memcpy(data, ((char *)rb->data)+index, len);
rb->avail -= len;
rb->current += len;
got = len;
if (len < toread) {
toread -= len;
len = MIN(toread, rb_can_read(rb));
index = 0;
memcpy(((char *)data)+got, ((char *)rb->data)+index, len);
rb->current = len;
rb->avail -= len;
got += len;
}
ASSERT(rb->avail <= rb->size);
return got;
}
#ifdef TEST_RB
int main(void)
{
struct _myrb {
struct ring_buffer rb;
char buff[10];
} myrb;
char buffer[10];
char obuffer[10];
int got, tow;
rb_init(&myrb.rb, 10);
while ((got = read(0, buffer, 10))) {
int len, olen;
len = rb_write(&myrb.rb, buffer, got);
olen = rb_read(&myrb.rb, obuffer, 10);
write(1, obuffer, olen);
}
return 1;
}
#endif

View File

@ -0,0 +1,18 @@
#ifndef _RINGBUFF_H
#define _RINGBUFF_H
struct ring_buffer {
size_t size;
size_t current; /* index of next byte to read */
size_t avail; /* number of bytes in */
unsigned char data[0];
};
void rb_init(struct ring_buffer *rb, size_t size);
void rb_clear(struct ring_buffer *rb);
size_t rb_can_write(struct ring_buffer *rb);
size_t rb_can_read(struct ring_buffer *rb);
size_t rb_write(struct ring_buffer *rb, void *data, size_t len);
size_t rb_read(struct ring_buffer *rb, void *data, size_t len);
#endif

View File

@ -0,0 +1,50 @@
#include <stdlib.h>
#include <driver_settings.h>
#include "settings.h"
#define DEFAULT_GOOGLE_SERVER "66.102.11.99"
#define DEFAULT_MAX_VNODES 5000
char google_server[20] = DEFAULT_GOOGLE_SERVER;
int google_server_port = 80;
uint32 max_vnodes = DEFAULT_MAX_VNODES;
uint32 max_results = 50;
bool sync_unlink_queries = false;
status_t load_settings(void)
{
void *handle;
char *val;
handle = load_driver_settings("googlefs");
if (!handle)
return ENOENT;
dprintf("googlefs: loaded settings\n");
val = get_driver_parameter(handle, "server", \
DEFAULT_GOOGLE_SERVER, DEFAULT_GOOGLE_SERVER);
strncpy(google_server, val, 20);
google_server[20-1] = '\0';
val = get_driver_parameter(handle, "port", "80", "80");
google_server_port = strtoul(val, NULL, 10);
val = get_driver_parameter(handle, "max_nodes", "5000", "5000");
max_vnodes = strtoul(val, NULL, 10);
max_vnodes = MIN(max_vnodes, 1000000);
max_vnodes = MAX(max_vnodes, 10);
val = get_driver_parameter(handle, "max_results", "50", "50");
max_results = strtoul(val, NULL, 10);
max_results = MIN(max_results, 1000);
max_results = MAX(max_results, 5);
sync_unlink_queries = get_driver_boolean_parameter(handle, "sync_unlink", false, true);
dprintf("googlefs: settings: server = %s\n", google_server);
dprintf("googlefs: settings: max_nodes = %lu\n", max_vnodes);
dprintf("googlefs: settings: max_results = %lu\n", max_results);
dprintf("googlefs: settings: sync_unlink = %c\n", sync_unlink_queries?'t':'f');
unload_driver_settings(handle);
return B_OK;
}

View File

@ -0,0 +1,13 @@
#ifndef _SETTINGS_H
#define _SETTINGS_H
/* settings */
extern char google_server[20];
extern int google_server_port;
extern uint32 max_vnodes;
extern uint32 max_results;
extern bool sync_unlink_queries;
extern status_t load_settings(void);
#endif /* _SETTINGS_H */

View File

@ -0,0 +1,153 @@
#include <malloc.h>
#include <string.h>
#include "string_utils.h"
//#define TESTME
#ifdef _KERNEL_MODE
#define printf dprintf
#undef TESTME
#endif
char *urlify_string(const char *str)
{
char *dst, *d;
const char *p;
const char *allowed = "abcdefghijklmnopqrstuvwxyz" \
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
"0123456789" \
"-_.!~*'()"; /* cf. RFC 2396 */
const char *hex = "0123456789ABCDEF";
if (!str)
return NULL;
// hacky, but safe
dst = malloc(strlen(str)*3);
if (!dst)
return NULL;
for (p = str, d = dst; *p; p++) {
if (strchr(allowed, *p))
*d++ = *p;
else if (*p == ' ') {
*d++ = '+';
} else {
/* use hex value */
*d++ = '%';
*d++ = hex[(*(unsigned char *)p >> 4) & 0x0F];
*d++ = hex[(*(unsigned char *)p) & 0x0F];
}
}
*d = '\0';
return dst;
}
// cf. http://www.htmlhelp.com/reference/html40/entities/
static const char *entities_tab[][2] = {
{ "lt", "<" },
{ "gt", ">" },
{ "amp", "&" },
{ "nbsp", " " },
{ "quot", "\"" },
{ "raquo", "»" },
//{ "laquo", "" },
{ "ccedil", "ç" },
// grave
{ "agrave", "à" },
{ "egrave", "è" },
// acute
//{ "aacute", "" },
{ "eacute", "é" },
// circ
{ "acirc", "â" },
{ "ecirc", "ê" },
{ "icirc", "î" },
{ "ocirc", "ô" },
{ "ucirc", "û" },
{ "copy", "©" },
{ "trade", "" },
//{ "", "" },
{ NULL, NULL },
};
char *unentitify_string(const char *str)
{
char *dst, *d;
const char *p;
const char *hex = "0123456789abcdef";
int i;
if (!str)
return NULL;
// hacky, but safe
dst = malloc(strlen(str)+2);
if (!dst)
return NULL;
for (p = str, d = dst; *p; p++) {
if (*p != '&')
*d++ = *p;
/* those case convert to binary, but won't check for valid multibyte UTF-8 sequences */
else if ((p[1] == '#') && p[2] && p[3] && (p[4] == ';') &&
isdigit(p[2]) &&
isdigit(p[3])) {
/* &#nn; */
char c = ((p[2]) - '0') * 10 +
((p[3]) - '0');
*d++ = c;
p += 4;
} else if ((p[1] == '#') && p[2] && p[3] && p[4] && (p[5] == ';') &&
isdigit(p[2]) &&
isdigit(p[3]) &&
isdigit(p[4])) {
/* &#nnn; */
char c = ((p[2]) - '0') * 100 +
((p[3]) - '0') * 10 +
((p[4]) - '0');
*d++ = c;
p += 5;
} else if ((p[1] == '#') && (p[2] == 'x') && p[3] && p[4] && (p[5] == ';') &&
strchr(hex, tolower(p[3])) &&
strchr(hex, tolower(p[4]))) {
/* &#xnn; */
char c = (strchr(hex, tolower(p[3])) - hex) << 4 |
(strchr(hex, tolower(p[4])) - hex);
*d++ = c;
p += 5;
} else {
char buf[20];
strncpy(buf, p+1, 20);
buf[19] = '\0';
if (!strchr(buf, ';')) {
*d++ = *p;
continue;
}
*(strchr(buf, ';')) = '\0';
for (i = 0; entities_tab[i][0]; i++) {
if (!strcmp(buf, entities_tab[i][0])) {
strcpy(d, entities_tab[i][1]);
d += strlen(d);
p += strlen(entities_tab[i][0]) + 1;
break;
}
}
if (!entities_tab[i][0]) /* not found */
*d++ = '&';
}
}
*d = '\0';
return dst;
}
#ifdef TESTME
int main(int argc, char **argv)
{
char *p;
if (argc < 2)
return 1;
p = unentitify_string(argv[1]);
printf("'%s'\n", p);
free(p);
free(malloc(10));
return 0;
}
#endif

View File

@ -0,0 +1,16 @@
#ifndef _STRING_UTILS_H
#define _STRING_UTILS_H
/* converts a string to a format suitable for use in urls
* ex: "foo bar+" -> "foo+bar%2D"
* caller must free() result
*/
extern char *urlify_string(const char *str);
/* converts string with html entities to regular utf-8 string
* ex: "Fran&ccedil;ois" -> "François"
* caller must free() result
*/
extern char *unentitify_string(const char *str);
#endif /* _STRING_UTILS_H */

View File

@ -0,0 +1,96 @@
#include <malloc.h>
#include "vnidpool.h"
/* primary type for the bitmap */
#define BMT uint32
#define BM_BYTE(p, vnid) (p->bitmap[(vnid % p->bmsize) / sizeof(BMT)])
#define BM_ISSET(p, vnid) (BM_BYTE(p, vnid) & (1 << (p->nextvnid % sizeof(BMT))))
#define BM_SET(p, vnid) (BM_BYTE(p, vnid) |= (1 << (p->nextvnid % sizeof(BMT))))
#define BM_UNSET(p, vnid) (BM_BYTE(p, vnid) &= ~(1 << (p->nextvnid % sizeof(BMT))))
status_t vnidpool_alloc(struct vnidpool **pool, size_t size)
{
struct vnidpool *p;
if (size < 2)
return EINVAL;
if (!pool)
return EINVAL;
size = (size + sizeof(BMT) - 1) / sizeof(BMT);
size *= sizeof(BMT);
p = malloc(sizeof(struct vnidpool) + size / sizeof(BMT));
if (!p)
return B_NO_MEMORY;
if (new_lock(&p->lock, "vnidpool lock") < B_OK) {
free(p);
return B_NO_MEMORY;
}
p->nextvnid = 1LL;
p->bitmap = (BMT *)(p + 1);
p->bmsize = size;
memset(p->bitmap, 0, size / sizeof(BMT));
dprintf("vnidpool_alloc: pool @ %p, bitmap @ %p, size %d\n", p, p->bitmap, p->bmsize);
*pool = p;
return B_OK;
}
status_t vnidpool_free(struct vnidpool *pool) {
int i;
dprintf("vnidpool_free: pool @ %p\n", pool);
if (!pool)
return EINVAL;
if (LOCK(&pool->lock) < B_OK)
return B_ERROR;
/* make sure no vnid is left in use */
for (i = 0; i < (pool->bmsize % sizeof(BMT)); i++) {
if (pool->bitmap[i])
dprintf("WARNING: vnidpool_free called with vnids still in use!!!\n");
//panic("vnidpool_free: vnids still in use");
}
free_lock(&pool->lock);
free(pool);
return B_OK;
}
status_t vnidpool_get(struct vnidpool *pool, vnode_id *vnid)
{
status_t err = B_ERROR;
uint32 i;
if (!pool)
return EINVAL;
if (LOCK(&pool->lock) < B_OK)
return B_ERROR;
for (i = 0; BM_ISSET(pool, pool->nextvnid) && i < pool->bmsize; pool->nextvnid++, i++) {
/* avoid 0 as vnid */
if (!pool->nextvnid)
continue;
}
if (BM_ISSET(pool, pool->nextvnid))
err = ENOBUFS;
else {
BM_SET(pool, pool->nextvnid);
*vnid = pool->nextvnid++;
err = B_OK;
}
UNLOCK(&pool->lock);
return err;
}
status_t vnidpool_put(struct vnidpool *pool, vnode_id vnid)
{
status_t err = B_ERROR;
uint32 i;
if (!pool)
return EINVAL;
if (LOCK(&pool->lock) < B_OK)
return B_ERROR;
if (!BM_ISSET(pool, vnid))
err = EINVAL;
else {
BM_UNSET(pool, vnid);
err = B_OK;
}
UNLOCK(&pool->lock);
return err;
}

View File

@ -0,0 +1,18 @@
#ifndef _VNIDPOOL_H
#define _VNIDPOOL_H
#include "googlefs.h"
typedef struct vnidpool {
lock lock;
vnode_id nextvnid;
uint32 *bitmap;
size_t bmsize;
} vnidpool;
status_t vnidpool_alloc(struct vnidpool **pool, size_t size);
status_t vnidpool_free(struct vnidpool *pool);
status_t vnidpool_get(struct vnidpool *pool, vnode_id *vnid);
status_t vnidpool_put(struct vnidpool *pool, vnode_id vnid);
#endif /* _VNIDPOOL_H */