diff options
author | Epoch Qwert <epoch@53flpnlls43fcguy.onion> | 2015-01-01 02:29:26 -0600 |
---|---|---|
committer | Epoch Qwert <epoch@53flpnlls43fcguy.onion> | 2015-01-01 02:29:26 -0600 |
commit | e23c6287bb1124397c126c83cc73fed17fda998f (patch) | |
tree | e5a5d081fed5fcce05546ad62e9f07aa932ca17e | |
parent | 86ba931697790d4da2515f4457ebfb3f20b43860 (diff) | |
download | misc-e23c6287bb1124397c126c83cc73fed17fda998f.tar.gz misc-e23c6287bb1124397c126c83cc73fed17fda998f.zip |
added zengoph which is a zenity based gopher browser
cuturl is for getting parts out of URLs easier
-rwxr-xr-x | nocompile/bin/zengoph.sh | 48 | ||||
-rw-r--r-- | src/bin/cuturl.c | 141 |
2 files changed, 189 insertions, 0 deletions
diff --git a/nocompile/bin/zengoph.sh b/nocompile/bin/zengoph.sh new file mode 100755 index 0000000..defac73 --- /dev/null +++ b/nocompile/bin/zengoph.sh @@ -0,0 +1,48 @@ +#!/usr/pkg/bin/bash +### +### I just wrote this so I could have a little gopher client of my own +### requires zenity. I just like using it for scripted GUIs. +### + +PATH=$PATH:/usr/pkg/sbin +if [ "_$1" = "_" ];then + printf "usage: $0 gopher://hacking.allowed.org/" + exit 1 +fi + +domain=$(printf "%s" "$1" | ./cuturl | grep ^domain | cut '-d ' -f2) +port=70 +request=$(printf "%s\r\n" "$1" | ./cuturl | grep ^path | cut '-d ' -f2) + +while true;do + +echo $domain +echo $port +echo $request + +tmp="$(printf "%s" "$request" \ + | nc $domain $port \ + | tr -d '\r' \ + | tr '\t' '\n' \ + | zenity --width=1000 --height=500 --list --column=a --column=b --column=c --column=d --print-column=1,2 + )" +echo $tmp +request=$(printf "%s" "$tmp" | cut '-d|' -f2) +name_and_type=$(printf "%s" "$tmp" | cut '-d|' -f1) +type=$(printf "%s" "$name_and_type" | cut -b1) +name=$(printf "%s" "$name_and_type" | cut -b2-) + +echo request $request +echo type $type +echo name $name +if [ "_$type" = "_7" ];then + args="$(zenity --entry)" + request=$(printf "%s\t%s\r\n" "$request" "$args") +else + request=$(printf "%s\r\n" "$request") +fi +if [ "_$tmp" = "_" ];then + exit +fi + +done diff --git a/src/bin/cuturl.c b/src/bin/cuturl.c new file mode 100644 index 0000000..945d640 --- /dev/null +++ b/src/bin/cuturl.c @@ -0,0 +1,141 @@ +#include <stdio.h> +#include <string.h> +/* + schemes are case sensitive but cononicals are lower case. + domain is case insensitive. return it lowercased. + port is optional and in decimal + path + scheme://username:password@domain:port/path?query_string#fragment_id + mailto:username@domain + + optional stuff: + scheme, username, password, port, path, query_string, fragment_id +*/ + +/* +#define DEFAULT_SCHEME "http" +#define DEFAULT_USERNAME "anonymous" +#define DEFAULT_PASSWORD "anonymous" +#define DEFAULT_PORT "80" +#define DEFAULT_QUERY_STRING "" +#define DEFAULT_FRAGMENT_ID "" +*/ +#define DEFAULT_SCHEME "DEFAULT" +#define DEFAULT_USERNAME "DEFAULT" +#define DEFAULT_PASSWORD "DEFAULT" +#define DEFAULT_PORT "DEFAULT" +#define DEFAULT_PATH "DEFAULT" +#define DEFAULT_QUERY_STRING "DEFAULT" +#define DEFAULT_FRAGMENT_ID "DEFAULT" + +int main() { + char line[1024]; + char *scheme=0; + char *username=0; + char *password=0; + char *domain=0; + char *port=0; + char *path=0; + char *query_string=0; + char *fragment_id=0; + int i; + fgets(line,sizeof(line),stdin); + for(i=0;line[i] && line[i] != '\n' && line[i] != '\r';i++); + line[i]=0; + + //split at first single / into line and path + for(i=0;line[i];i++) { + if(line[i] == '/' && line[i+1] == '/') { + i++; + continue; + } + if(line[i] == '/') { + line[i]=0; + path=line+i+1; + break; + } + } + + if(path) { + if(strchr(path,'?')) { + query_string=strchr(path,'?'); + *query_string=0; + query_string++; + } + } + + if(query_string) { + if(strchr(query_string,'#')) { + fragment_id=strchr(query_string,'#'); + *fragment_id=0; + fragment_id++; + } + } + + if(strstr(line,"://")) { + scheme=line; + domain=strstr(line,"://"); + *domain=0; + domain+=3; + } else { + domain=line; + } + + if(domain) { + if(strchr(domain,'@')) { + username=domain; + domain=strchr(domain,'@'); + *domain=0; + domain++; + } + } + + if(username) { + if(strchr(username,':')) { + password=strchr(username,':'); + *password=0; + password++; + } + } + + if(domain) { + if(strchr(domain,']')) { + if(strchr(strchr(domain,']'),':')) { + port=strchr(strchr(domain,']'),':'); + *port=0; + port++; + } + } else { + if(strchr(domain,':')) { + port=strchr(domain,':'); + *port=0; + port++; + } + } + } + + if(domain) { + if(strchr(domain,'?')) { + query_string=strchr(domain,'?'); + *query_string=0; + query_string++; + } + } + + if(!scheme && username) { + scheme=username; + username=password; + password=0; + } + +// printf("scheme://username:password@domain:port/path?query_string#fragment_id\n\n"); + printf("scheme: %s\n",scheme); + printf("username: %s\n",username); + printf("password: %s\n",password); + printf("domain: %s\n",domain); + printf("port: %s\n",port); + printf("path: %s\n",path); + printf("query_string: %s\n",query_string); + printf("fragment_id: %s\n",fragment_id); + return 0; +} |