simple icon tray

Window managers, icon programs, widgets, etc.
Message
Author
seaside
Posts: 934
Joined: Thu 12 Apr 2007, 00:19

#106 Post by seaside »

jamesbond wrote:Patch:
1. Remove default include files path (if this path doesn't exist, execution fails - bad)
2. change popen mode from "r" to "w" - otherwise no output
3. ensure pclose after popen so that we don't get zombie process
4. close pid from g_spawn_async
5 add version numbering so we know which version of sit this is.
6. modify build process so that it is 64-bit compatible (should still work on 32-bit)
7. modify build process so that it tests correctly
jamesbond,

Thank you for the improvements.
The original sit-master binary compiled by technosaurus runs in Puppy precise 5.4.1 and this one failed after patching.....

Code: Select all

 ./build
/usr/bin/ld: /tmp/cckw5xNo.o: undefined reference to symbol 'g_file_monitor_file'
/usr/bin/ld: note: 'g_file_monitor_file' is defined in DSO /usr/lib/libgio-2.0.so.0 so try adding it to the linker command line
/usr/lib/libgio-2.0.so.0: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
I added the link to -L/usr/lib/libgio-2.0.so.0 on the command line and that didn't make any difference.

I think it would be great to have this generally in Puppy and ideally one version for all, but I don't know enough about compiling.

Regards,
s
(EDIT: I just tried to compile the master-sit original and got the same error, so something must be different in Puppy Precise 5.4.1, even though the binary included works)

jamesbond
Posts: 3433
Joined: Mon 26 Feb 2007, 05:02
Location: The Blue Marble

#107 Post by jamesbond »

I agree.

This is how to fix the compile it recent puppies (tested in my homebrew slackware-based 32-bit puplet). Do it after you apply the patch.

Change line 7 in "build" from

Code: Select all

sit.c -o sit -lgtk-x11-2.0 && strip --strip-all -R .note -R .comment sit
To

Code: Select all

sit.c -o sit -lgtk-x11-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 && strip --strip-all -R .note -R .comment sit
Note the addition of -lgio-2.0 -lgobject-2.0 -lglib-2.0.

The easier way to compile without having to remember all this thingamagic is

Code: Select all

sit.c -o sit $(pkg-config --libs gtk+-2.0) && strip --strip-all -R .note -R .comment sit
but technosaurus will disapprove of it :lol: (because, although it does make it easier to compile, it causes the compile to pull in unnecessary dependencies and make it slightly larger).
Fatdog64 forum links: [url=http://murga-linux.com/puppy/viewtopic.php?t=117546]Latest version[/url] | [url=https://cutt.ly/ke8sn5H]Contributed packages[/url] | [url=https://cutt.ly/se8scrb]ISO builder[/url]

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#108 Post by technosaurus »

I think I was adding the -Wl,--as-needed flag too, which tells the linker to look in the deps. Amazingly it builds and runs fine on windows, so I would guess its the hacky canonical patches. I cant' check the puppy build right now since my classes all require windows and/or a full java sdk.

-btw thanks for the patches
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

seaside
Posts: 934
Joined: Thu 12 Apr 2007, 00:19

#109 Post by seaside »

jamesbond wrote:
Change line 7 in "build" from

Code: Select all

sit.c -o sit -lgtk-x11-2.0 && strip --strip-all -R .note -R .comment sit
To

Code: Select all

sit.c -o sit -lgtk-x11-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 && strip --strip-all -R .note -R .comment sit
Note the addition of -lgio-2.0 -lgobject-2.0 -lglib-2.0.
jamesbond,

Thanks. It worked nicely.

In case anyone wants the compiled binary made in Precise 5.4.3, I've attached it here.

Regards,
s
Attachments
sit-james-master-bin.tar
James patch to technosaurus sit-master
(20 KiB) Downloaded 783 times

eadmaster
Posts: 46
Joined: Sat 09 Feb 2013, 11:34
Contact:

#110 Post by eadmaster »

is it possible to set the tooltip as a command instead of a fixed string?
So when the mouse is hovering, the cmd is executed and the output is displayed in the tooltip...

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#111 Post by technosaurus »

You can set something up in your control script to modify the tooltip file ... either by periodically running said command or running it based on some event.
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

eadmaster
Posts: 46
Joined: Sat 09 Feb 2013, 11:34
Contact:

#112 Post by eadmaster »

oh, you're right... i didn't think about it!
:wink:

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#113 Post by technosaurus »

I am reworking sit to also do the desktop ... Tentatively renaming to sdesk
New abilities will be desktop widgets that can be provided by using svg images... Like in pwidgets or gkrellm. Webcam shots, tv tuner captures, slideshows, graphs, text, possibly even desktop icons.
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#114 Post by technosaurus »

sdesk is now in a working alpha state with all of the sit parts still intact.
the usage has changed to the following format:

Code: Select all

  -i   <include files>
  -b  <background imagge>
  -t  <status icon> <tooltip> <left click action> <right click action>
      the -t option can be used multiple times,
Attachments
sdesk.tar.gz
(8.79 KiB) Downloaded 738 times
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#115 Post by technosaurus »

Could someone give me some pointers on how/where to wedge gettext in to the tooltip messages? I don't think it can be done internally since there are no strings... it needs to be done in the caller (shell script or whatever invokes the tray app)
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

User avatar
Bert
Posts: 1103
Joined: Fri 30 Jun 2006, 20:09

#116 Post by Bert »

Hi Techno,

Something like this:

Code: Select all

<pixmap tooltip-text="'$(gettext ' This is a good idea! ')'">
     <input file>'$WORKDIR'/icons/lightbulb.png</input>
</pixmap>
:?:
[url=http://pupsearch.weebly.com/][img]http://pupsearch.weebly.com/uploads/7/4/6/4/7464374/125791.gif[/img][/url]
[url=https://startpage.com/do/search?q=host%3Awww.murga-linux.com%2F][img]http://i.imgur.com/XJ9Tqc7.png[/img][/url]

User avatar
torios
Posts: 28
Joined: Fri 05 Dec 2014, 23:21

SIT and cmake

#117 Post by torios »

Hi I am wondering if anyone here has tried using cmake to compile sit... if so, I could use some pointers... I am trying to make a debian package for sit, as well as a PPA for Ubuntu.

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#118 Post by technosaurus »

Here is a Makefile in case the ./build script doesn't work

Code: Select all

# Makefile for sdesk.
#CC = /usr/i386-linux-uclibc/bin/i386-uclibc-gcc
#CC = diet gcc
#CC = musl-gcc
CC ?= gcc
#CFLAGS = -pipe -Os -mtune=i386 -static -s -Wall -I/usr/i386-linux-uclibc/usr/include
#CFLAGS = -pipe -Os -mtune=i386 -static -s -Wall
CFLAGS = -Os -finline-small-functions -ffunction-sections -fdata-sections -fmerge-all-constants \
-fomit-frame-pointer -mno-accumulate-outgoing-args -fno-unwind-tables -fno-asynchronous-unwind-tables
#LDFLAGS = -L/usr/i386-linux-uclibc/lib -lm -Wl,--gc-sections,--sort-common,-s
LDFLAGS = -Wl,--gc-sections,--sort-common,--as-needed,-s -lm `pkg-config gtk+-x11-2.0 --libs`
#see stb_vorbis for various size vs. speed defines
DEFINES = `pkg-config gtk+-x11-2.0 --cflags`
OBJECTS = sdesk.c
BINDIR = /usr/bin
sdesk: $(OBJECTS)
	$(CC) $(CFLAGS) $(DEFINES) $(OBJECTS) $(LDFLAGS) -o sdesk
install:
	strip --strip-all -R .note -R .comment sdesk
	install sdesk $(BINDIR)/sdesk
uninstall:
	rm -f $(BINDIR)/sdesk
clean:
	rm -f *.o sdesk
depend:
	gccmakedep -- $(CFLAGS) -- sdesk.c 
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#119 Post by technosaurus »

some example C code for reading files in /proc/*
This one generates a battery svg and tooltip file.

Code: Select all

#include <stdio.h>
#include <fcntl.h>

void do_bat0(char *svg,char *tt){
	char var[64],val[64],model[32]="",oem[32]="",battype[32]="",text[]="Battery";
	int dcap=0,cap=0,rcap=1,dv=0,pv=0,warn=0,low=0,present='n',sz=48,percent;
	FILE *state = fopen("/proc/acpi/battery/BAT0/state", "r"),
		*info =  fopen("/proc/acpi/battery/BAT0/info", "r"),
		*svgfp =  fopen(svg, "w"),
		*ttfp =  fopen(tt, "w");
	while (fscanf(info, "%64[^:] %*s %64[^\n]\n", var, val) != EOF){
		if (!strcmp("design capacity",var)) sscanf(val, "%d %*s", &dcap);
		if (!strcmp("last full capacity",var)) sscanf(val, "%d %*s", &cap);
		if (!strcmp("design voltage",var)) sscanf(val, "%d %*s", &dv);
		if (!strcmp("model number",var)) sscanf(val, " %s", &model);
		if (!strcmp("OEM info",var)) sscanf(val, " %s", &oem);
		if (!strcmp("battery type",var)) sscanf(val, " %s", &battype);
		if (!strcmp("design capacity warning",var)) sscanf(val, "%d %*s", &warn);
		if (!strcmp("design capacity low",var)) sscanf(val, "%d %*s", &low);
	}
	fclose(info);
	while (fscanf(state, "%64[^:] %*s %64[^\n]\n", var, val) != EOF){
		if (!strcmp("present",var)) sscanf(val, "%c%*s", &present);
		if (!strcmp("remaining capacity",var)) sscanf(val, "%d %*s", &rcap);
		if (!strcmp("present voltage",var)) sscanf(val, "%d %*s", &pv);
	}
	fclose(state);
	percent=(100*cap)/rcap;
	
	fprintf(svgfp, "<svg width=\"%dpx\" height=\"%dpx\" version=\"1.1\" " \
			"viewBox=\"0 0 200 200\" preserveAspectRatio=\"none\" " \
			"xmlns=\"http://www.w3.org/2000/svg\">\n" \
		"<rect x=\"20%%\" width=\"60%%\" height=\"100%%\" fill=\"#111\"/>\n" \
		"<rect x=\"20%%\" width=\"60%%\" y=\"%d%%\" height=\"%d%%\" fill=\"#0F0\"/>\n" \
		"<text x=\"100\" y=\"100\" fill=\"#FFF\" font-size=\"%d\" " \
			"text-anchor=\"middle\" transform=\"rotate(90 100,100)\">%s</text>\n" \
		"</svg>", sz, sz, 100-percent, percent, 200/(strlen(text)-1), text);
	fclose(svgfp);
	fprintf(ttfp, "%20s: %s\n" "%20s: %s\n" "%20s: %s\n" "%20s: %d mWh\n",
		"Make", oem, "Model", model, "Type", battype, "Percent remaining", percent );
	fclose(ttfp);
}

int main(int argc, char **argv){
	do_bat0("batt.svg","batt.tt");
	return 0;
}

#if 0 //another example for /proc file with a header
int main(int argc, char **argv){
	FILE *fp = fopen("/proc/net/arp", "r");
	char ip[99], hw[99], flags[99], mac[99], mask[99], dev[99], dummy[99];
	fgets(dummy, 99, fp);
	while (fscanf(fp, "%s %s %s %s %s %s\n", ip, hw, flags, mac, mask, dev) != EOF)
		if (!strcmp(argv[1],ip))
			printf("%s\n",dev);
	return 0;
}
#endif


Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

User avatar
torios
Posts: 28
Joined: Fri 05 Dec 2014, 23:21

sdesk Ubuntu

#120 Post by torios »

Hi technosaurus, that really helped! Thank you very much I did get the cmake file to configure and generate!!
I also have a preliminary package made...
However, I need to know:
What is this licensed and who do I license it to?
right now (place holder info)
GPL3
technosaurus

If you know all the people that contributed code to this, that would be very helpful!

I will let you know how it goes building the package for Ubuntu, and I am sure I will have questions for you about shell scripting and sdesk....

I don't know C, but only C++ so maybe now is a good time to learn C as well so I can make even lighter programs.

Thanks so much!!

User avatar
LazY Puppy
Posts: 1934
Joined: Fri 21 Nov 2014, 18:14
Location: Germany

#121 Post by LazY Puppy »

Here is how to use gettext for tool-tips in C code (learned this from 01micko)

Define:

Code: Select all

#define _(STRING)    gettext(STRING)
Function:

Code: Select all

gtk_status_icon_set_tooltip(tray_icon, _("Refresh the Desktop"));
RSH

"you only wanted to work your Puppies in German", "you are a separatist in that you want Germany to secede from Europe" (musher0) :lol:

No, but I gave my old drum kit away for free to a music store collecting instruments for refugees! :wink:

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

Re: sdesk Ubuntu

#122 Post by technosaurus »

torios wrote:What is this licensed and who do I license it to?
right now (place holder info)
GPL3
Not only no, but hell no! All of my code here is released to the Public Domain (or equivalent CC0 or WTFPL or 0 clause BSD license)... with no warrantees of course. Feel free to relicense it however you want, but I would appreciate avoiding the GPL3+ if you can so that it may be used in low cost ROM based systems (the GPL3 "tivoization clause" prevents this legitimate use).
The latest version (sdesk) is all my original code and is basically just SIT with the addition of being able to set the background.
If you go through this thread, I have provided the basis for various example applets. Its not really hard considering about half of tray applets are just a static icon with some click actions like glipper and wpa_gui or a few that rarely change: volume control, battery, sven
I don't know C, but only C++ so maybe now is a good time to learn C as well so I can make even lighter programs.
Thanks so much!!
Aside from memory management, casting and pointers, C is much easier. Usually the C compiler tells you almost exactly what/where you screwed up, whereas a C++ compile just says you F'd up somewhere. I put C++ and perl in a category I call "write-only languages"... it is much easier to read and follow other people's C code.

Edit:

Code: Select all

<svg height="48" width="48" viewBox="0 0 100 100">
  <circle cx="0" cy="100" r="100" stroke="black" stroke-width="2" fill="blue" fill-opacity="0.3" />
  <circle cx="0" cy="100" r="75" stroke="black" stroke-width="3" fill="blue" fill-opacity="0.3" />
  <circle cx="0" cy="100" r="50" stroke="black" stroke-width="4" fill="blue" fill-opacity="0.3" />
  <circle cx="0" cy="100" r="25" stroke="black" stroke-width="5" fill="blue" fill-opacity="0.3" />
  <path d="M97,0L70,27L75,10L78,14,93,0" fill="blue" stroke="black" stroke-width="1" />
  <path d="M73,28L99,2L95,20L91,15,75,30" fill="blue" stroke="black" stroke-width="1" />
</svg> 
this svg image can be easily adapted to replace wifi applets by using /proc/net/dev for receive and transmit arrows (the path elements) and /proc/net/wireless to show the signal level (the circle elements)
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

User avatar
torios
Posts: 28
Joined: Fri 05 Dec 2014, 23:21

license

#123 Post by torios »

Hi technosaurus,
would MIT be appropriate, then? Basically I want you to simply choose whatever license you want and tell me :)
I used GPL3 because it is a standard GNU license... don't be offended :)
I license a lot of stuff as MIT since it seems to be very free and permissive.

We are so fortunate to have legal protections for freedom of code :)

I have been parsing the thread lately. So I will probably go over this a few times to get the full gist of everything, but suffice it to say, I am very excited about this program. I think this will be a huge help in making a lightweight version of Ubuntu (which is not known for being lightweight). I am confident that this will allow us to make a plethora of 'applets' available for the tray. Plus SVGs are amazing. Thanks for your work!

I will crack open the ' C a reference Manual ' on my shelf sometime soon

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#124 Post by technosaurus »

MIT is fine.

Here is some rather rudimentary low level C that avoids using printf, scanf and even malloc so the static binary is under 8kb.
Basically it monitors /proc/acpi/battery and generates an svg and tooltip text.

Code: Select all

/*
 * proc2imgd.c
 * 
 * Copyright 2014 Brad Conroy - released to public domain
 * 
 */
#include <fcntl.h> //open
#include <unistd.h> //read,write
#include <string.h> //strstr, strlen
#include <stdlib.h> //getenv
#include <sys/stat.h> //mkdir

#define strcpyALL(buf, l, ...) do{ \
	char *bp=(char*)(buf); \
	const char *s, *a[] = { __VA_ARGS__,NULL}, **ss=a; \
	while((s=*ss++)) \
		while((*s)&&((--l) >0)) \
			*bp++=*s++; \
	*bp=0; \
}while(0)

static inline int ispad(int X){return (X)==' '||(unsigned)(X)-'\t'<5;}
#define isnum(X)	((unsigned)(X)-'0' < 10)

int stod(const char *s){ //like atoi but no negatives and only for small numbers
	int r=0;
	while (ispad(*s++));
	while (isnum(*s)) r = 10*r + (*s++ - '0');
	return r;
}


static void dtos(int d, char *buf){ //like itoa, but you pass the buffer
	int p=0;
	if (0>d) {
		buf[p++]='-';
		d=-d;
	}
	if (0==d){
		buf[p++]='0';
		buf[p]=0;
		return;
	}
	int i=1000000000;
	while (i > d) i/=10;
	while (0<i){
		buf[p++]=('0'+(d/i));
		if (i<=d) d=d%i;
		i/=10;
	}
	buf[p]=0;
	return;
}



//GLOBALs

static char //default colors TODO read from config file
	*ln_c="#000", //lines, outlines, strokes, etc...
	*fg_c="#AAA", //foreground items ... usually the actual image
	*bg_c="#444", //background color ... todo match with theme
	*txt_c="#FFF", //use a text color that will work with both the bg and fg
	*chg_c="#0F0", //usually green indicates a preferred status
	*dchg_c="#F00", //usually red denotes less preferred status
	*width="22px", //set for standard tray size
	*height="22px";

static const char *HOME,
	hdr[]="<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" \tviewBox=\"0 0 100 100\" preserveAspectRatio=\"none\" ",
	ftr[]="</svg>\n",
	w[]=" width=\"",
	h[]=" height=\"",
	x[]=" x=\"",
	y[]=" y=\"",
	q[]="\" ",
	tagend[]=">\n",
	tagclose[]="/>\n",
	rect[]="\t<rect ",
	fill[]=" fill=\"",
	txt[]="\t<text ",
	center[]=" text-anchor=\"middle\"",
	rotate[]=" transform=\"rotate(90 50,50)\"",
	fontsz[]=" font-size=\"",
	txtend[]="</text>\n";	

#if 0 //TODO
void do_wifi(){
const char upload[]="M71,29L99,2L99,27L92,18,75,34",
	download[] = "M98,0L70,27L70,5L77,12,90,0",
	  updown[] = "<path d=\"%s\" fill=\"%s\" stroke=\"%s\"/>\n",
	 sigqual[] = "<circle cx=\"0\" cy=\"100\" r=\"%d\" stroke=\"%s\" stroke-width=\"%d\" fill=\"%s\" fill-opacity=\"0.5\" />\n";

	static int lastrcv=0, lastxmt=0;
	int rcv,xmt,quality;

	FILE *wireless = fopen("/proc/net/wireless", "r");
	char dev[8], status[8], link[8], level[8], noise[8];
	fgets(dummy, 99, wireless);
	fgets(dummy, 99, wireless);
	while (fscanf(fp, "%s %s %s %s %s %s\n", ip, hw, flags, mac, mask, dev) != EOF)
		if (!strcmp(argv[1],ip))
			printf("%s\n",dev);
	return 0;
	
}
#endif

void do_bat(char *batt){
	const char BAT[]="/proc/acpi/battery/BAT";
	char buf[4096]={0}, *bp=(char *)buf, fname[32], dy[8], ht[8], ftsz[8],
		text[]="BAT0";
	static int dcap=0, rcap=-1, percent=-1;
	int i, fd, len=sizeof(buf), chg=0, cap=0;
	if (!isnum(*batt)) *batt='0';
	else text[3] = *batt;
	i=sizeof(fname);
	strcpyALL(fname, i, BAT, batt, "/info");
	if (( fd = open(fname,O_RDONLY))<0) return;
	len = read(fd,buf,len);
	close(fd);
	if (len < 0) return;
	buf[len]=0; //for strstr
	if (!dcap){ //only do once
		bp = strstr(buf,"design capacity:");
		if (!bp) return;
		dcap = stod(&bp[25]);
	}

	if ((bp = strstr(buf,"last ful"))) cap = stod(&bp[25]);
	else cap = dcap;
	i=sizeof(fname);
	strcpyALL(fname,i,BAT,(batt)?batt:"0","/state");
	if (( fd = open(fname,O_RDONLY))<0) return;
	i = read(fd,&(buf[len]),sizeof(buf)-len);
	close(fd);
	if (i < 0) return;
	else buf[(len+=i)]=0;

	if ((bp = strstr(buf,"remain")) && (i = stod(&bp[25])) == rcap) return;
	else rcap = i;
	if ((bp = strstr(buf,"charging st"))) chg=bp[25]-'c';
	i=sizeof(fname);
	strcpyALL(fname,i,HOME,"/.sit/b", batt, ".tt");
	if (( fd = open(fname,O_WRONLY|O_CREAT|O_TRUNC))<0) return;
	len=write(fd,buf,len);
	close(fd);
	i=(rcap>cap)?(100*rcap)/cap:(100*rcap)/dcap;
	if (i==percent) return;
	else percent = i;
	i=sizeof(fname);
	strcpyALL(fname,i,HOME,"/.sit/b", batt, ".svg");
	if (( fd = open(fname,O_WRONLY|O_CREAT|O_TRUNC))<0) return;
	dtos(100-percent,dy);
	dtos(percent,ht);
	dtos(100/(strlen(text)-1),ftsz);
	len=sizeof(buf);
	strcpyALL(buf, len, hdr, w, width, q, h, height, q, tagend,
		rect, x, "20%\"", w, "60%\"", h, "100%\"", fill, bg_c, q, tagclose,
		rect, x, "20%\"", w, "60%\"", y, dy, q, h, ht, q, fill, (chg)?dchg_c:chg_c, q, tagclose,
		//txt, x, "50\"", y, "50\"", fill, txt_c, q, fontsz, ftsz, q, center, rotate, tagend,	"\t\t", text, "\n", txtend,
		ftr
	);
	write(fd,buf,sizeof(buf)-len);
}

int main(int argc, char **argv){
	char buf[64];
	int len=sizeof(buf);
	HOME=getenv("HOME");
	strcpyALL(buf,len,HOME,"/.sit");
	mkdir(buf,0644);
	while(!sleep(1)){
		do_bat("0");
	}
	return 0;
}

Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

User avatar
torios
Posts: 28
Joined: Fri 05 Dec 2014, 23:21

#125 Post by torios »

https://launchpad.net/sdesk

Here is the Launchpad page.

I licensed it Public Domain, because I finally found that licensing on the launchpad page.... I did that because you originally indicated that...
I also made an SVG version of your logo, so let me know if you want it.
I did that so I could scale it correctly for the Launchpad logos... it is very picky about sizes, and I needed to make sure it looked clean. :)[/url]

Post Reply