Initial dump from Sourceforge website
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<h2> Development Stuff </h2>
|
||||
|
||||
<p>
|
||||
Here is some stuff I have written for Revo/Psion Linux:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li> The <a href="spkg.shtml">spkg</a> package manager
|
||||
<li> <a href="psionconf.shtml">PsionConf</a>: A small PicoGUI Psion Linux
|
||||
configuration program
|
||||
<li> <a href="picotone.shtml">PicoTone</a>: a touch tone phone dialer
|
||||
<li> <a href="dev/psionw_sound.c">Kernel Sound Driver</a>: Now in the -5mx
|
||||
patch tree
|
||||
</ul>
|
||||
|
||||
<hr width="50%">
|
||||
|
||||
<a href="dev/pdf/">Various gathered information</a>:
|
||||
This is mostly information (datasheets etc) I've gathered about the
|
||||
Windermere hardware and thought people might find useful.
|
||||
|
||||
Note that the <i>Series_5mx_specs.pdf</i> file which Psion kindly provided
|
||||
to the linux developers is not available here: it is not to be publicly
|
||||
distributed, at Psions request. If you need a copy, post to the
|
||||
Psion Linux mailing list.
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
89a90
|
||||
> static struct tpanel_sample old_ts = {0,0,0};
|
||||
92c93
|
||||
< int trigger, x, y;
|
||||
---
|
||||
> int trigger;
|
||||
113,114d113
|
||||
< x = ts.x;
|
||||
< y = ts.y;
|
||||
116,120c115,139
|
||||
< /* Converte to screen coordinates... */
|
||||
< x = ( ( ts.x - cal->min_x ) * cal->x_res / ( cal->max_x - cal->min_x ) );
|
||||
< y = ( ( ts.y - cal->min_y ) * cal->y_res / ( cal->max_y - cal->min_y ) );
|
||||
<
|
||||
< infilter_send_pointing(PG_TRIGGER_PNTR_STATUS,x,y,ts.state,NULL);
|
||||
---
|
||||
> /* if pointer is up, keep the cursor position from when it was up */
|
||||
> if (!ts.state) {
|
||||
> ts.x = old_ts.x;
|
||||
> ts.y = old_ts.y;
|
||||
> } else {
|
||||
> /* Converte to screen coordinates... */
|
||||
> ts.x = ((ts.x - cal->min_x) * cal->x_res / (cal->max_x - cal->min_x));
|
||||
> ts.y = ((ts.y - cal->min_y) * cal->y_res / (cal->max_y - cal->min_y));
|
||||
> }
|
||||
>
|
||||
> /* if nothing has changed, dont send an event */
|
||||
> if (ts.state == old_ts.state && ts.x == old_ts.x && ts.y == old_ts.y)
|
||||
> return;
|
||||
>
|
||||
> if (old_ts.state && !ts.state)
|
||||
> infilter_send_pointing(PG_TRIGGER_UP, ts.x, ts.y, ts.state, NULL);
|
||||
> else if (!old_ts.state && ts.state)
|
||||
> infilter_send_pointing(PG_TRIGGER_DOWN, ts.x, ts.y, ts.state, NULL);
|
||||
>
|
||||
> if (ts.x != old_ts.x || ts.y != old_ts.y)
|
||||
> infilter_send_pointing(PG_TRIGGER_MOVE, ts.x, ts.y, ts.state, NULL);
|
||||
>
|
||||
> /* save ts for next time */
|
||||
> old_ts = ts;
|
||||
>
|
|
@ -0,0 +1,76 @@
|
|||
Index: adc7843.c
|
||||
===================================================================
|
||||
RCS file: /cvsroot/pgui/pgserver/input/adc7843.c,v
|
||||
retrieving revision 1.6
|
||||
diff -u -r1.6 adc7843.c
|
||||
--- adc7843.c 3 Jul 2002 22:03:29 -0000 1.6
|
||||
+++ adc7843.c 6 Nov 2002 00:25:45 -0000
|
||||
@@ -60,16 +60,16 @@
|
||||
|
||||
int adc7843_fd;
|
||||
|
||||
-struct tpanel_sample {
|
||||
- u16 state;
|
||||
- u16 x;
|
||||
- u16 y;
|
||||
-};
|
||||
-
|
||||
/******************************************** Implementations */
|
||||
|
||||
g_error adc7843_init(void) {
|
||||
adc7843_fd = open("/dev/tpanel",O_NONBLOCK);
|
||||
+
|
||||
+ /* devfs name */
|
||||
+
|
||||
+ if (adc7843_fd <= 0)
|
||||
+ adc7843_fd = open("/dev/misc/adc7843", O_NONBLOCK);
|
||||
+
|
||||
if (adc7843_fd <= 0)
|
||||
return mkerror(PG_ERRT_IO, 74);
|
||||
|
||||
@@ -87,9 +87,10 @@
|
||||
}
|
||||
|
||||
int adc7843_fd_activate(int fd) {
|
||||
- struct tpanel_sample ts;
|
||||
+ int state;
|
||||
char buffer[6];
|
||||
- int trigger, x, y;
|
||||
+ int trigger;
|
||||
+ static int x=0, y=0;
|
||||
|
||||
if (!cal) {
|
||||
if (!vid)
|
||||
@@ -107,17 +108,22 @@
|
||||
return 1;
|
||||
|
||||
/* Convert the bytes to unsigned integers... */
|
||||
- ts.state = ( ( (buffer[0]) << 8 ) + buffer[1] );
|
||||
- ts.x = ( ( (buffer[2]) << 8 ) + buffer[3] );
|
||||
- ts.y = ( ( (buffer[4]) << 8 ) + buffer[5] );
|
||||
- x = ts.x;
|
||||
- y = ts.y;
|
||||
-
|
||||
- /* Converte to screen coordinates... */
|
||||
- x = ( ( ts.x - cal->min_x ) * cal->x_res / ( cal->max_x - cal->min_x ) );
|
||||
- y = ( ( ts.y - cal->min_y ) * cal->y_res / ( cal->max_y - cal->min_y ) );
|
||||
+ state = ( ( (buffer[0]) << 8 ) + buffer[1] );
|
||||
+
|
||||
+ /* save x,y in static variables. when pen up, send the last known
|
||||
+ coordinates */
|
||||
+
|
||||
+ if (state) {
|
||||
+ x = ( ( (buffer[2]) << 8 ) + buffer[3] );
|
||||
+ y = ( ( (buffer[4]) << 8 ) + buffer[5] );
|
||||
+
|
||||
+ /* Convert to screen coordinates... */
|
||||
+ x = ( ( x - cal->min_x ) * cal->x_res / ( cal->max_x - cal->min_x ) );
|
||||
+ y = ( ( y - cal->min_y ) * cal->y_res / ( cal->max_y - cal->min_y ) );
|
||||
+ }
|
||||
|
||||
- infilter_send_pointing(PG_TRIGGER_PNTR_STATUS,x,y,ts.state,NULL);
|
||||
+ infilter_send_pointing(PG_TRIGGER_PNTR_STATUS,x,y,state,NULL);
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -0,0 +1,166 @@
|
|||
The battery level(s) can be monitored using the auxilary channels of the ADC
|
||||
for the touchscreen. Here are some emails which may be useful:
|
||||
|
||||
|
||||
From: Simon D Howard <sdh300@ecs.soton.ac.uk>
|
||||
To: Tony Lindgren <tony@atomide.com>
|
||||
cc: Linux-7110-psion@lists.sourceforge.net
|
||||
Subject: Re: [Linux-7110-psion] /proc patch
|
||||
Date: Mon, 29 Apr 2002 18:57:35 +0100 (BST)
|
||||
|
||||
On Mon, 29 Apr 2002, Tony Lindgren wrote:
|
||||
|
||||
> So sounds like your SSI extra channel code might work on 5mx!
|
||||
> Can you post it so we can try if you don't have a 5mx?
|
||||
|
||||
Well, it wasnt really specific code, I just hacked about with the adc
|
||||
code. Currently it listens on the first 2 ports (which give the x, y
|
||||
coordinate). If you change the following lines:
|
||||
|
||||
ssi_transmit_data(dev,0xd000);
|
||||
ssi_transmit_data(dev,0x9000);
|
||||
|
||||
to
|
||||
|
||||
ssi_transmit_data(dev,0xd000 | 0x2000);
|
||||
ssi_transmit_data(dev,0x9000 | 0x2000);
|
||||
|
||||
it ought to read the other channels (according to the adc datasheet
|
||||
anyway, it didnt work so it may be that I'm totally wrong). I wrote a
|
||||
small program to print the output from /dev/tpanel but I dont have it with
|
||||
me right now - I adapted the picogui tpanel code.
|
||||
|
||||
Simon
|
||||
|
||||
_______________________________________________
|
||||
Linux-7110-psion mailing list
|
||||
Linux-7110-psion@lists.sourceforge.net
|
||||
https://lists.sourceforge.net/lists/listinfo/linux-7110-psion
|
||||
|
||||
From: "Thilo Hille" <thilo@resourcery.de>
|
||||
To: "Simon D Howard" <sdh300@ecs.soton.ac.uk>,
|
||||
"Tony Lindgren" <tony@atomide.com>
|
||||
Subject: Re: [Linux-7110-psion] /proc patch
|
||||
Date: Tue, 30 Apr 2002 14:40:02 +0200
|
||||
|
||||
gotcha..
|
||||
> So sounds like your SSI extra channel code might work on 5mx!
|
||||
> Can you post it so we can try if you don't have a 5mx?
|
||||
i just tweaked the controlbytes in adc7843.c
|
||||
ssi_transmit_data(dev,0xa400); //channel 3
|
||||
ssi_transmit_data(dev,0xe400); //channel 4
|
||||
and voila shows up the battery state on channel three.
|
||||
it stays around 2593 when accus inserted and drops down to <20 (needs about
|
||||
a 3 minutes).
|
||||
i think there are some capacitors discharging slowly this might be faster
|
||||
when the external powersupply is disconnected.
|
||||
how do we get this into an own driver?
|
||||
|
||||
Thilo Hille
|
||||
resourcery GbR.
|
||||
Habsburgerstr. 11
|
||||
79104 Freiburg
|
||||
Tel.: 0761-4567807
|
||||
Fax.: 0761-4567805
|
||||
thilo@resourcery.de
|
||||
|
||||
From: "Thilo Hille" <thilo@resourcery.de>
|
||||
To: <linux-7110-psion@lists.sourceforge.net>
|
||||
Subject: [Linux-7110-psion] power consumtion
|
||||
Date: Tue, 30 Apr 2002 14:57:01 +0200
|
||||
|
||||
i just measured the battery current.
|
||||
its about 2.74V.
|
||||
the adc reports about 2594 (maybe rough mV?)
|
||||
|
||||
Thilo Hille
|
||||
resourcery GbR.
|
||||
Habsburgerstr. 11
|
||||
79104 Freiburg
|
||||
Tel.: 0761-4567807
|
||||
Fax.: 0761-4567805
|
||||
thilo@resourcery.de
|
||||
|
||||
|
||||
|
||||
_______________________________________________
|
||||
Linux-7110-psion mailing list
|
||||
Linux-7110-psion@lists.sourceforge.net
|
||||
https://lists.sourceforge.net/lists/listinfo/linux-7110-psion
|
||||
|
||||
|
||||
From: Simon D Howard <sdh300@ecs.soton.ac.uk>
|
||||
To: Thilo Hille <thilo@resourcery.de>
|
||||
cc: linux-7110-psion@lists.sourceforge.net
|
||||
Subject: Re: [Linux-7110-psion] /proc patch
|
||||
Date: Tue, 30 Apr 2002 19:23:27 +0100 (BST)
|
||||
|
||||
|
||||
On Tue, 30 Apr 2002, Thilo Hille wrote:
|
||||
|
||||
> i just tweaked the controlbytes in adc7843.c
|
||||
> ssi_transmit_data(dev,0xa400); //channel 3
|
||||
> ssi_transmit_data(dev,0xe400); //channel 4
|
||||
> and voila shows up the battery state on channel three.
|
||||
> it stays around 2593 when accus inserted and drops down to <20 (needs about
|
||||
> a 3 minutes).
|
||||
> i think there are some capacitors discharging slowly this might be faster
|
||||
> when the external powersupply is disconnected.
|
||||
|
||||
Good news, this seems to work on my revo too. I found this slightly
|
||||
surprising as the email tony quoted suggested the battery monitoring was
|
||||
done differently. When charging, it seems to reach a maximum of around
|
||||
3950 but drops to around 3500 when its finished. EPOC seems to use
|
||||
3950-4000 as its "100%" value too - I get similar readings from its
|
||||
battery monitor.
|
||||
|
||||
I also get ~2464 (invariant) from the other channel - presumably the
|
||||
backup battery.
|
||||
|
||||
> how do we get this into an own driver?
|
||||
|
||||
"with difficulty" :)
|
||||
|
||||
Simon
|
||||
|
||||
|
||||
_______________________________________________
|
||||
Linux-7110-psion mailing list
|
||||
Linux-7110-psion@lists.sourceforge.net
|
||||
https://lists.sourceforge.net/lists/listinfo/linux-7110-psion
|
||||
|
||||
From: "Thilo Hille" <thilo@resourcery.de>
|
||||
To: "Simon D Howard" <sdh300@ecs.soton.ac.uk>
|
||||
Cc: <linux-7110-psion@lists.sourceforge.net>
|
||||
Subject: Re: [Linux-7110-psion] /proc patch
|
||||
Date: Tue, 30 Apr 2002 20:51:00 +0200
|
||||
|
||||
hi simon,
|
||||
> I also get ~2464 (invariant) from the other channel - presumably the
|
||||
> backup battery.
|
||||
hmmm i dont have a backupbattery inserted and ch4 shows up ~4084.
|
||||
i dont have one at hands for now, but tomorrow i ll try it.
|
||||
did you try to remove the backup battery while watching the 4th channel?
|
||||
(hey, its like tv :)
|
||||
i really forgot about the backupbattery. i removed it 2 month ago and as id
|
||||
never used epoc since than i never needed it.
|
||||
|
||||
greetingz
|
||||
|
||||
Thilo Hille
|
||||
resourcery GbR.
|
||||
Habsburgerstr. 11
|
||||
79104 Freiburg
|
||||
Tel.: 0761-4567807
|
||||
Fax.: 0761-4567805
|
||||
thilo@resourcery.de
|
||||
|
||||
_______________________________________________
|
||||
Linux-7110-psion mailing list
|
||||
Linux-7110-psion@lists.sourceforge.net
|
||||
https://lists.sourceforge.net/lists/listinfo/linux-7110-psion
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
|
||||
ETNA CF CLPS7110 Name Description
|
||||
3509-0169-02 Memory I/O
|
||||
(C)PSION PLC
|
||||
A12 R02 NL
|
||||
9732M3006
|
||||
|
||||
Pin 1 <-> Pin 47 D08
|
||||
Pin 2 <-> Pin 48 D09
|
||||
Pin 3 <-> Pin 49 D10
|
||||
Pin 4 <-> Pin 27 D11
|
||||
Pin 5 <-> Pin 28 D12
|
||||
Pin 6 <-> Pin 29 D13
|
||||
Pin 7 <-> Pin 30 D14
|
||||
Pin 8 <-> Pin 31 D15
|
||||
Pin 9 <-- Pin 208 CS4 Expansion select 4 (PCMCIA 0)
|
||||
Pin 10 <-- Pin 1 CS5 Expansion select 5 (PCMCIA 1)
|
||||
Pin 11 <-- Pin 206 NCS2 ROM select 2 (Etna registers)
|
||||
Pin 12 GND
|
||||
Pin 13 VCC
|
||||
Pin 14 --> Pin 45 BVD2 -SPKR n/a or speaker
|
||||
Pin 15 --> Pin 45 BVD2 -SPKR n/a or speaker
|
||||
Pin 16 <-- Pin 24 WP -IOIS16 Write protect or 16-bit I/O
|
||||
Pin 17 <-- Pin 42 -WAIT Wait
|
||||
Pin 18 <-- Pin 33 -VS1 Voltage select 1
|
||||
Pin 19 <-- Pin 40 -VS2 Voltage select 2
|
||||
Pin 20 <-- Pin 26 -CD1 Card detect (grounded in CF)
|
||||
Pin 21 Pin 50 GND
|
||||
Pin 22 <-- Pin 37 RDY/-BSY -IREQ Card ready or interrupt REQ
|
||||
Pin 23
|
||||
Pin 100 <-- Pin 25 -CD2 Card detect (grounded in CF)
|
|
@ -0,0 +1,212 @@
|
|||
These are emails from an employee at Psion who worked on the 5mx and
|
||||
provide some technical information. Thanks to Tony <tony@atomide.com> for
|
||||
forwarding me these.
|
||||
|
||||
Date: Tue, 08 Aug 2000 20:52:12 +0100
|
||||
From: Atish Nazir <hashaday@littleworld.freeserve.co.uk>
|
||||
To: Peter Liniker <pl198@doc.ic.ac.uk>
|
||||
Subject: Re: [Linux-7110-psion] psion5mx (fwd)
|
||||
|
||||
re:
|
||||
---
|
||||
> * the memory map
|
||||
---
|
||||
be more specific. what would you like to access?
|
||||
|
||||
re:
|
||||
---
|
||||
> * MMU details, esp. EPOC's MMU usage, so that ArLo can load the kernel
|
||||
> into memory, initialise FiPaBoL and start it
|
||||
---
|
||||
hard one, because i'm not too clued up on that aspect of base. one
|
||||
solution would be to install yourself as a "PartnerOS" - something EPOC
|
||||
does have a provision for for the Philips smart phone of years ago.
|
||||
documentation is very sparse though.
|
||||
|
||||
re:
|
||||
---
|
||||
> * ROM/serial/CF boot mechanism (latter two netbook only)
|
||||
---
|
||||
hehehe boss and i wrote this bit :o) protocol is basically YModem with
|
||||
a few optional extras - i.e. any terminal program will be okay. the
|
||||
exact specifics of the S7 client is unknown to me as a contractor at
|
||||
Enterprise wrote it (a perpetually up beat guy).
|
||||
|
||||
re:
|
||||
---
|
||||
> * ROM/RAM speeds
|
||||
---
|
||||
varies according to machine _and_ when it was built in production
|
||||
cycle. i.e. early machines have flash and later we switch to mask ROM
|
||||
(with a small patch flash, should it be needed).
|
||||
|
||||
re:
|
||||
---
|
||||
> * interrupt handling
|
||||
---
|
||||
erm, it works...
|
||||
|
||||
re:
|
||||
---
|
||||
> * all the device interface specs:
|
||||
> -- CF slot/card
|
||||
---
|
||||
function spec for ETNA - i'll find out, whom you have to speak about
|
||||
this or whether i can release this (quite possible, but remember to say
|
||||
thank you).
|
||||
|
||||
re:
|
||||
---
|
||||
> -- PCMCIA slot/card
|
||||
---
|
||||
functional spec for ASIC14 - ask Enterprise.
|
||||
|
||||
re:
|
||||
---
|
||||
> -- sound in/out, audio codecs
|
||||
---
|
||||
5, 5mx and Revo, sound out is identical (same drivers used in fact).
|
||||
except on Revo, there's a slight pin move (can't remember what however,
|
||||
it wasn't the buzzline). Revo sounds record is obviously disabled...
|
||||
|
||||
S7, go ask Enterprise...
|
||||
|
||||
re:
|
||||
---
|
||||
> -- screen
|
||||
---
|
||||
Eiger and Windermere have similar, but certainly different LCD
|
||||
controllers on board - you'll have to change you device driver. i can't
|
||||
give more details, because i don't know any more here - never worked on
|
||||
that aspect.
|
||||
|
||||
re:
|
||||
---
|
||||
> -- pointer
|
||||
---
|
||||
ADC talks directly to main ASIC via SSP interface (changed on 5mx)
|
||||
|
||||
re:
|
||||
---
|
||||
> -- serial
|
||||
---
|
||||
UARTs integrated on main ASICS. Eiger only had one, Windy has two.
|
||||
|
||||
re:
|
||||
---
|
||||
> -- irda
|
||||
---
|
||||
see the bit about UARTs - same UARTs used for RS232 and talking to
|
||||
IRDA.
|
||||
|
||||
re:
|
||||
---
|
||||
> -- power management/monitoring
|
||||
---
|
||||
hmm. 5, 5mx have voltmeters (same ADC as pointer). Revo has dedicated
|
||||
current counter, talks via GPIO to main ASIC with a very slow
|
||||
asynchronous serial protocol.
|
||||
|
||||
re:
|
||||
---
|
||||
> -- timers
|
||||
> * Which of these are the same as series5?
|
||||
---
|
||||
same as before.
|
||||
|
||||
re:
|
||||
---
|
||||
> * Config used for the SA1100 and support.
|
||||
---
|
||||
how many ports are going here? the people to contact would be Psion
|
||||
Enterprise as it's really more their turf.
|
||||
|
||||
|
||||
re:
|
||||
---
|
||||
> * "ETNA" specs (this is the main ASIC, AFAIK)
|
||||
---
|
||||
no, rubbish. ETNA is a helper ASIC. chip code names: Eiger,
|
||||
Windermere and SA1100 (affectionately known as Sally), which correspond
|
||||
to 5, 5mx and Revo, and S7 and Net book.
|
||||
|
||||
re:
|
||||
---
|
||||
> * We'd also like the ER5 DDK info/headers - enough to compile arlo
|
||||
> "properly".
|
||||
---
|
||||
you'll need the E32 tree, this comes with the OCK and DDK. since i use
|
||||
the OCK (something only available to licensees of Symbian), i wouldn't
|
||||
know how to obtain a copy of the DDK from Symbian (other than asking
|
||||
nicely, but i can't imagine that working when they inevitably ask why
|
||||
you want it). soz. been speaking to bossman and it looks like you'll
|
||||
have to become a Symbian licencee / partner - PSION can't help you here
|
||||
because it will violate our agreement with the collective.
|
||||
|
||||
|
||||
|
||||
IF YOU'RE INTERESTED:
|
||||
if one individual is prepared to sign an NDA and many other evil
|
||||
agreements (IPR etc) we have, i _might_ (not a promise, a lot of red
|
||||
tape would have to be cleared and i'd have to speak to a lot of people)
|
||||
be able to provide the full Windermere spec for free.
|
||||
|
||||
however if a few people are London based, what may a more attractive
|
||||
solution, a few members of the systems team could give a short seminar
|
||||
or something along those lines, answering questions in person, giving
|
||||
the vital information and so forth...
|
||||
|
||||
n.b. both these proposals have to be confirmed with other powers that
|
||||
be.
|
||||
|
||||
--- --- ---
|
||||
.~. the way of the Sacred Penguin is the path of
|
||||
/V\ the truly righteous...
|
||||
// \\/
|
||||
/( ) hashaday@littleworld.freeserve.co.uk
|
||||
^`~'^ http://thor.prohosting.com/~hashaday/
|
||||
|
||||
|
||||
_______________________________________________
|
||||
Linux-7110-psion mailing list
|
||||
Linux-7110-psion@lists.sourceforge.net
|
||||
http://lists.sourceforge.net/mailman/listinfo/linux-7110-psion
|
||||
|
||||
---------- Forwarded message ----------
|
||||
Date: Tue, 08 Aug 2000 18:45:00 +0100
|
||||
From: Atish Nazir <hashaday@littleworld.freeserve.co.uk>
|
||||
To: Peter Liniker <pl198@doc.ic.ac.uk>
|
||||
Subject: Re: [Linux-7110-psion] psion5mx (fwd)
|
||||
|
||||
re:
|
||||
---
|
||||
> Etna is the S5 ASIC, AFAIK.
|
||||
---
|
||||
ETNA (aka ASIC12) is the _helper_ ASIC for Eiger (S5) and Windermere
|
||||
(5MX). it adds CF capabilities and some other gubbins. basically it
|
||||
adds more pins to the CPU.
|
||||
|
||||
re:
|
||||
---
|
||||
> Is the S5mx/7 ASIC called Etna? (Although you may not be able to answer
|
||||
> this!)
|
||||
---
|
||||
the S7 and NetBook uses ASIC14 (aka "that many legged bastard"), which
|
||||
has nothing really in common with ETNA other than it was designed by the
|
||||
same guy (and uses same VHDL for the timers, copy and paste is a
|
||||
wonderful thing). it's also a helper ASIC, the exact specifics i can't
|
||||
be sure of because Enterprise have done a lot of developmental work on
|
||||
it...
|
||||
|
||||
--- --- ---
|
||||
.~. the way of the Sacred Penguin is the path of
|
||||
/V\ the truly righteous...
|
||||
// \\/
|
||||
/( ) hashaday@littleworld.freeserve.co.uk
|
||||
^`~'^ http://thor.prohosting.com/~hashaday/
|
||||
|
||||
|
||||
_______________________________________________
|
||||
Linux-7110-psion mailing list
|
||||
Linux-7110-psion@lists.sourceforge.net
|
||||
http://lists.sourceforge.net/mailman/listinfo/linux-7110-psion
|
|
@ -0,0 +1,8 @@
|
|||
ps7110db.pdf - 7110 processor data sheet
|
||||
msm7717_01_02_03.pdf - 7717 CODEC sound chip
|
||||
sbas090a.pdf - 7843 ADC chip (touchscreen/battery monitor)
|
||||
psion_mails.txt - Emails from a Psion Employee providing some
|
||||
technical insight..
|
||||
battery_info.txt - Results of hacking with the ADC in order to read
|
||||
the battery level.
|
||||
|
|
@ -0,0 +1,360 @@
|
|||
/*
|
||||
Driver for PsionW Sound output
|
||||
|
||||
(c) 2002 Simon Howard
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/* TODO:
|
||||
*
|
||||
* - Microphone support
|
||||
* - /dev/mixer support
|
||||
*/
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/version.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/sound.h>
|
||||
#include <linux/soundcard.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach/irq.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/hardware/psionw.h>
|
||||
#include <asm/arch/irqs.h>
|
||||
#include <asm/arch/psionw-power.h>
|
||||
|
||||
#include "ulaw.h"
|
||||
|
||||
/* these ought to be in the hardware headers: */
|
||||
|
||||
#define CODOUTEN (1 << 0)
|
||||
#define CODINEN (1 << 1)
|
||||
|
||||
#define SAMPLE_RATE 8000 /* this cant be changed */
|
||||
|
||||
static int users;
|
||||
static struct semaphore users_lock;
|
||||
|
||||
extern void enable_irq(unsigned int irq);
|
||||
extern void disable_irq(unsigned int irq);
|
||||
|
||||
static int audio_dev;
|
||||
|
||||
/* buffer size */
|
||||
|
||||
#define BUFSIZE 128
|
||||
|
||||
/* lock for access to writebuf. the interrupt handler does not check
|
||||
* for this but interrupts are also disabled while we access writebuf
|
||||
* in write
|
||||
*/
|
||||
|
||||
static struct semaphore writebuf_lock;
|
||||
|
||||
/* freelist for buffering data */
|
||||
|
||||
static unsigned char writebuf[BUFSIZE];
|
||||
static int writebuf_head, writebuf_tail, writebuf_size;
|
||||
|
||||
/* interrupt routine */
|
||||
|
||||
void psionw_sound_isr(unsigned int irq)
|
||||
{
|
||||
int i, count;
|
||||
|
||||
/* write some more data to the speaker */
|
||||
|
||||
count = writebuf_size < 8 ? writebuf_size : 8;
|
||||
|
||||
for (i=0; i<count; ++i) {
|
||||
psionw_writeb(dsp_ulaw[writebuf[writebuf_head]], CODR);
|
||||
writebuf_head = (writebuf_head + 1) % BUFSIZE;
|
||||
}
|
||||
|
||||
for (; i<8; ++i) {
|
||||
psionw_writeb(0, CODR);
|
||||
}
|
||||
|
||||
writebuf_size -= count;
|
||||
|
||||
/* if we had nothing left, stop interrupts until we
|
||||
* get more (set in the write function)
|
||||
*/
|
||||
|
||||
if (count == 0)
|
||||
disable_irq(IRQ_CSINT);
|
||||
|
||||
/* clear interrupt */
|
||||
|
||||
psionw_writel(1, COEOI);
|
||||
|
||||
}
|
||||
|
||||
static ssize_t psionw_sound_read(struct file *file, char *buffer,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
/* insert microphone code here */
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t psionw_sound_write(struct file *file, const char *buffer,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
int i, n, ret = 0;
|
||||
|
||||
while (count > 0) {
|
||||
|
||||
/* check we can fit anything into the buffer */
|
||||
|
||||
if (writebuf_size >= BUFSIZE) {
|
||||
if (file->f_flags & O_NONBLOCK)
|
||||
break;
|
||||
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
schedule_timeout(1);
|
||||
continue;
|
||||
}
|
||||
|
||||
down(&writebuf_lock);
|
||||
|
||||
/* disable irq while we do this */
|
||||
|
||||
disable_irq(IRQ_CSINT);
|
||||
|
||||
/* fit in as much as we can to the write buffer */
|
||||
|
||||
if (count > BUFSIZE - writebuf_size)
|
||||
n = BUFSIZE - writebuf_size;
|
||||
else
|
||||
n = count;
|
||||
|
||||
/* this is complicated stuff to add to the buffer in blocks
|
||||
* rather than byte-by-byte, for speed
|
||||
* we dont want to disable the sound IRQ for too long or we
|
||||
* get nasty breaks in the sound
|
||||
*/
|
||||
|
||||
if (writebuf_tail >= writebuf_head) {
|
||||
|
||||
/* fill in as much as possible at the end */
|
||||
|
||||
i = BUFSIZE - writebuf_tail;
|
||||
|
||||
if (i >= n) {
|
||||
|
||||
/* we can fit them all at the end */
|
||||
|
||||
memcpy(writebuf + writebuf_tail, buffer, n);
|
||||
} else {
|
||||
|
||||
/* first part at the end of buffer */
|
||||
|
||||
memcpy(writebuf + writebuf_tail, buffer, i);
|
||||
|
||||
/* second part at the beginning */
|
||||
|
||||
memcpy(writebuf, buffer+i, n-i);
|
||||
}
|
||||
} else {
|
||||
|
||||
/* just fit in as much as we can */
|
||||
|
||||
memcpy(writebuf + writebuf_tail, buffer, n);
|
||||
}
|
||||
|
||||
writebuf_tail = (writebuf_tail + n) % BUFSIZE;
|
||||
writebuf_size += n;
|
||||
|
||||
count -= n;
|
||||
buffer += n;
|
||||
ret += n;
|
||||
|
||||
/* enable irq again */
|
||||
|
||||
enable_irq(IRQ_CSINT);
|
||||
|
||||
up(&writebuf_lock);
|
||||
}
|
||||
|
||||
if (file->f_flags & O_NONBLOCK && ret == 0)
|
||||
return -EAGAIN;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int psionw_sound_ioctl(struct inode *inode, struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
int val;
|
||||
|
||||
switch (cmd) {
|
||||
case OSS_GETVERSION:
|
||||
return put_user(SOUND_VERSION, (int *)arg);
|
||||
|
||||
case SNDCTL_DSP_RESET:
|
||||
return 0;
|
||||
|
||||
case SNDCTL_DSP_SYNC:
|
||||
/* we cant really do this, but we'll pretend
|
||||
* we can, to keep programs that use it happy
|
||||
*/
|
||||
return 0;
|
||||
|
||||
case SNDCTL_DSP_SPEED: /* set sample rate */
|
||||
/* we cant change it */
|
||||
|
||||
if (get_user(val, (int *)arg))
|
||||
return -EFAULT;
|
||||
|
||||
if (val >= 0)
|
||||
return put_user(SAMPLE_RATE, (int *)arg);
|
||||
else
|
||||
return -EFAULT;
|
||||
|
||||
case SNDCTL_DSP_STEREO: /* set stereo or mono */
|
||||
|
||||
if (get_user(val, (int *)arg))
|
||||
return -EFAULT;
|
||||
|
||||
/* we are stuck in mono mode */
|
||||
|
||||
if (val)
|
||||
printk("psionw_sound: attempt to put in stereo mode (unsupported)\n");
|
||||
|
||||
return 0;
|
||||
|
||||
case SNDCTL_DSP_GETBLKSIZE:
|
||||
return put_user(8, (int *)arg); /* 8 byte block size (?) */
|
||||
|
||||
case SNDCTL_DSP_GETFMTS:
|
||||
return put_user(AFMT_U8, (int *)arg);
|
||||
|
||||
case SNDCTL_DSP_SETFMT:
|
||||
return put_user(AFMT_U8, (int *)arg);
|
||||
|
||||
case SNDCTL_DSP_CHANNELS: /* set channels */
|
||||
return put_user(1, (int *) arg);
|
||||
|
||||
|
||||
case SNDCTL_DSP_NONBLOCK:
|
||||
file->f_flags |= O_NONBLOCK;
|
||||
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int psionw_sound_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
down(&users_lock);
|
||||
|
||||
if (users > 0) {
|
||||
up(&users_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
++users;
|
||||
|
||||
/* empty list */
|
||||
|
||||
writebuf_head = writebuf_tail = writebuf_size = 0;
|
||||
|
||||
/* enable codec */
|
||||
|
||||
psionw_writeb(psionw_readb(PDDR) | PDDR_AMPEN | PDDR_CDE, PDDR);
|
||||
psionw_writel(psionw_readl(CONFG) | CODINEN | CODOUTEN, CONFG);
|
||||
|
||||
/* enable sound irq */
|
||||
|
||||
irq_desc[IRQ_CSINT].mask_ack = psionw_sound_isr;
|
||||
|
||||
enable_irq(IRQ_CSINT);
|
||||
|
||||
up(&users_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int psionw_sound_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
down(&users_lock);
|
||||
|
||||
--users;
|
||||
|
||||
/* disable codec */
|
||||
|
||||
psionw_writeb(psionw_readb(PDDR) & ~(PDDR_AMPEN|PDDR_CDE), PDDR);
|
||||
psionw_writel(psionw_readl(CONFG) & ~(CODINEN|CODOUTEN), CONFG);
|
||||
|
||||
/* disable sound irq */
|
||||
|
||||
disable_irq(IRQ_CSINT);
|
||||
|
||||
up(&users_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int psionw_sound_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static struct file_operations sound_ops = {
|
||||
owner: THIS_MODULE,
|
||||
llseek: no_llseek,
|
||||
read: psionw_sound_read,
|
||||
write: psionw_sound_write,
|
||||
ioctl: psionw_sound_ioctl,
|
||||
mmap: psionw_sound_mmap,
|
||||
open: psionw_sound_open,
|
||||
release: psionw_sound_release,
|
||||
};
|
||||
|
||||
int __init init_psionw_sound(void)
|
||||
{
|
||||
audio_dev = register_sound_dsp(&sound_ops, -1);
|
||||
|
||||
if (audio_dev < 0) {
|
||||
printk(KERN_ERR "psionw_sound: cannot register sound device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
init_MUTEX(&writebuf_lock);
|
||||
init_MUTEX(&users_lock);
|
||||
|
||||
printk("psionw_sound: initialised sound output\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __exit cleanup_psionw_sound(void)
|
||||
{
|
||||
unregister_sound_dsp(audio_dev);
|
||||
}
|
||||
|
||||
|
||||
MODULE_DESCRIPTION("psionw sound output driver");
|
||||
MODULE_AUTHOR("Simon Howard");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
module_init(init_psionw_sound);
|
||||
module_exit(cleanup_psionw_sound);
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<font color="red"><b>Warning: Booting linux will erase all data
|
||||
stored in RAM. If you have important files stored in your palmtop,
|
||||
be sure to make copies of them first.</b></font>
|
||||
|
||||
<h3>Downloads</h3>
|
||||
|
||||
<ul>
|
||||
|
||||
<li> <b> 1.1 </b>
|
||||
<ul>
|
||||
<li> <a href="download/1.1/ChangeLog">ChangeLog</a>
|
||||
<li> <a href="download/1.1/omnibar.c">omnibar.c</a> - modified omnibar source
|
||||
<li> <a href="download/1.1/lcdtux.tar.gz">lcdtux.tar.gz</a> - lcdtux theme
|
||||
</ul>
|
||||
|
||||
<i> Revo </i>
|
||||
<ul>
|
||||
<li> <a href="download/1.1/revol-1.1.sis.zip">revol-1.1.sis.zip</a> (zipped EPOC package)
|
||||
<li> <a href="download/1.1/revol-1.1.tar.gz">revol-1.1.tar.gz</a>
|
||||
<li> <a href="download/1.1/revol-1.1.zip">revol-1.1.zip</a>
|
||||
</ul>
|
||||
<i>Revo Plus</i>
|
||||
<ul>
|
||||
<li> <a href="download/1.1/revol-1.1-revoplus.sis.zip">revol-1.1-revoplus.sis.zip</a> (zipped EPOC package)
|
||||
<li> <a href="download/1.1/revol-1.1-revoplus.tar.gz">revol-1.1-revoplus.tar.gz</a>
|
||||
<li> <a href="download/1.1/revol-1.1-revoplus.zip">revol-1.1-revoplus.zip</a>
|
||||
</ul>
|
||||
|
||||
<li> <b> 1.0 </b>
|
||||
<ul>
|
||||
<li> <a href="download/1.0/omnibar.c">omnibar.c</a> - modified omnibar source
|
||||
<li> <a href="download/1.0/revol-1.0.sis.zip">revol-1.0.sis.zip</a> (zipped EPOC package)
|
||||
<li> <a href="download/1.0/revol-1.0.tar.gz">revol-1.0.tar.gz</a>
|
||||
<li> <a href="download/1.0/revol-1.0.zip">revol-1.0.zip</a>
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
1.1:
|
||||
add:
|
||||
pgmon (network usage monitor)
|
||||
picomail
|
||||
add themes:
|
||||
lcdtux (lcdgray with tux background)
|
||||
classique (macos platinum theme)
|
||||
removed:
|
||||
pspawn (obsolete from testing)
|
||||
imgview (was broken)
|
||||
omnibar now includes power off menu item
|
||||
(uses /proc/psionw/state)
|
||||
kernel includes my kernel patches for sound and
|
||||
/proc/psionw additions
|
||||
|
||||
1.0:
|
||||
initial version
|
|
@ -0,0 +1,268 @@
|
|||
/* $Id: omnibar.c,v 1.2 2001/12/01 01:12:01 gork Exp $
|
||||
*
|
||||
* omnibar.c - hopefully this will grow into a general interface
|
||||
* for starting and manipulating applications, but
|
||||
* for now it's pretty simple.
|
||||
*
|
||||
* PicoGUI small and efficient client/server GUI
|
||||
* Copyright (C) 2000 Micah Dowty <micahjd@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Contributors:
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#include <sys/types.h> /* For making directory listings */
|
||||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <time.h> /* For clock */
|
||||
|
||||
/* FIXME: Check for Mac OS X using autoconf */
|
||||
#if (defined(__APPLE__) && defined(__MACH__)) // Mac OS X and Darwin
|
||||
#include <sys/types.h>
|
||||
#include <sys/malloc.h>
|
||||
#else
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h> /* file IO for getting CPU load */
|
||||
|
||||
#include <picogui.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef CLOCK
|
||||
pghandle wClock;
|
||||
#endif
|
||||
|
||||
pghandle wLoad;
|
||||
|
||||
/********* Event handlers */
|
||||
|
||||
/* Applications menu
|
||||
* This whole thing's a kludge, I will write
|
||||
* something better (using custom menus) soon
|
||||
*/
|
||||
int btnAppMenu(struct pgEvent *evt) {
|
||||
pghandle *items;
|
||||
struct dirent *dent;
|
||||
int i,l;
|
||||
DIR *d;
|
||||
|
||||
d = opendir("/pgui/apps");
|
||||
|
||||
/* FIXME : Count the items and allocate the array */
|
||||
items = alloca(sizeof(pghandle) * 40);
|
||||
|
||||
/* Enter a new context before making the handles */
|
||||
pgEnterContext();
|
||||
|
||||
/* Make handles */
|
||||
rewinddir(d);
|
||||
i = 0;
|
||||
while (dent = readdir(d)) {
|
||||
/* Skip all but applications */
|
||||
l = strlen(dent->d_name);
|
||||
if (l<4) continue;
|
||||
if (dent->d_name[0] == '.')
|
||||
continue;
|
||||
|
||||
/* Add item */
|
||||
items[i++] = pgNewString(dent->d_name);
|
||||
}
|
||||
|
||||
/* Run it */
|
||||
i = pgMenuFromArray(items,i);
|
||||
|
||||
/* Result? */
|
||||
if (i) {
|
||||
char buf[80]; /* FIXME: Buffer overflow 'sploit waiting to happen! */
|
||||
strcpy(buf,"/pgui/apps/");
|
||||
strcat(buf,pgGetString(items[i-1]));
|
||||
if (!vfork()) {
|
||||
execlp(buf,buf,NULL);
|
||||
pgMessageDialogFmt("Error",0,"There was an error starting the\nfollowing program:\n%s",buf);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free the server memory and destroy our menu */
|
||||
pgLeaveContext();
|
||||
|
||||
closedir(d);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* sdh: power off for psionw with appropriate kernel patch */
|
||||
void psion_power_off()
|
||||
{
|
||||
FILE *fs = fopen("/proc/psionw/state", "w");
|
||||
|
||||
if (!fs) {
|
||||
fprintf(stderr, "Can't open /proc/psionw/state: %s\n", strerror());
|
||||
return;
|
||||
}
|
||||
|
||||
fprintf(fs, "0\n");
|
||||
|
||||
fclose(fs);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* System menu */
|
||||
int btnSysMenu(struct pgEvent *evt) {
|
||||
switch (pgMenuFromString("Power Off|About PicoGUI...|"
|
||||
"About Revol...|Quit PicoGUI...")) {
|
||||
|
||||
case 1:
|
||||
psion_power_off();
|
||||
break;
|
||||
|
||||
case 2:
|
||||
|
||||
/* Quick little about box */
|
||||
pgMessageDialog("About PicoGUI",
|
||||
"Welcome to PicoGUI!\n"
|
||||
"This is a preview release (or a development\n"
|
||||
"version if you're a developer :)\n"
|
||||
"What you see may or may not represent the\n"
|
||||
"future of PicoGUI, it is just a test.\n"
|
||||
"For more information and the latest code, visit:\n"
|
||||
" http://pgui.sourceforge.net\n"
|
||||
"\n"
|
||||
"-- Micah",0);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
pgMessageDialog("About Revol",
|
||||
"Revol: Linux on the Psion Revo\n"
|
||||
"\n"
|
||||
"By Simon Howard\n"
|
||||
"\n"
|
||||
"http://fraggle.alkali.org/stuffage/revol/\n"
|
||||
"Feedback: sdh300@ecs.soton.ac.uk\n", 0);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
/* Beam us out! */
|
||||
if (pgMessageDialog("Quit PicoGUI", "Quit PicoGUI?",
|
||||
PG_MSGBTN_YES | PG_MSGBTN_NO)==PG_MSGBTN_YES)
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Called to update the clock and system load indicators */
|
||||
void sysIdle(void) {
|
||||
time_t now;
|
||||
char *ct;
|
||||
char buf[50];
|
||||
FILE *f;
|
||||
unsigned long cpu_user,cpu_nice,cpu_sys,cpu_idle;
|
||||
unsigned long crun,ctotal;
|
||||
static unsigned long ocrun = 0,octotal = 1;
|
||||
|
||||
#ifdef CLOCK
|
||||
/* Get time */
|
||||
time(&now);
|
||||
ct = ctime(&now);
|
||||
ct[strlen(ct)-1] = 0; /* Strip newline */
|
||||
pgReplaceText(wClock,ct);
|
||||
pgSubUpdate(wClock);
|
||||
#endif
|
||||
|
||||
/* Get CPU load */
|
||||
f = fopen("/proc/stat","r");
|
||||
fgets(buf,50,f);
|
||||
fclose(f);
|
||||
sscanf(buf,"cpu %lu %lu %lu %lu",&cpu_user,&cpu_nice,&cpu_sys,&cpu_idle);
|
||||
crun = cpu_user + cpu_sys;
|
||||
ctotal = crun + cpu_nice + cpu_idle;
|
||||
if (crun==ocrun || ctotal==octotal) return; /* Prevent SIGFPE */
|
||||
pgSetWidget(wLoad,PG_WP_VALUE, (crun-ocrun) * 100 / (ctotal-octotal),0);
|
||||
ocrun = crun;
|
||||
octotal = ctotal;
|
||||
pgSubUpdate(wLoad);
|
||||
}
|
||||
|
||||
/********* Main program */
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
pghandle wLoadbox,fntLabel,fntLabelBold;
|
||||
|
||||
pgInit(argc,argv);
|
||||
pgRegisterApp(PG_APP_TOOLBAR,"OmniBar",0);
|
||||
|
||||
/* A font for our labels */
|
||||
fntLabel = pgNewFont("Helvetica",8,0);
|
||||
fntLabelBold = pgNewFont("Helvetica",8,PG_FSTYLE_BOLD);
|
||||
|
||||
/* Top-level widgets */
|
||||
|
||||
pgNewWidget(PG_WIDGET_BUTTON,0,0);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_TEXT,pgNewString("Applications"),
|
||||
PG_WP_EXTDEVENTS,PG_EXEV_PNTR_DOWN,
|
||||
0);
|
||||
pgBind(PGDEFAULT,PG_WE_PNTR_DOWN,&btnAppMenu,NULL);
|
||||
|
||||
pgNewWidget(PG_WIDGET_BUTTON,0,0);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_TEXT,pgNewString("System"),
|
||||
PG_WP_EXTDEVENTS,PG_EXEV_PNTR_DOWN,
|
||||
0);
|
||||
pgBind(PGDEFAULT,PG_WE_PNTR_DOWN,&btnSysMenu,NULL);
|
||||
|
||||
#ifdef CLOCK
|
||||
wClock = pgNewWidget(PG_WIDGET_LABEL,0,0);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_SIDE,PG_S_RIGHT,
|
||||
PG_WP_FONT,fntLabel,
|
||||
PG_WP_TRANSPARENT,0,
|
||||
0);
|
||||
#endif
|
||||
|
||||
wLoadbox = pgNewWidget(PG_WIDGET_BOX,0,0);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_SIDE,PG_S_RIGHT,
|
||||
PG_WP_SIZE,200,
|
||||
0);
|
||||
|
||||
/* Inside the load box */
|
||||
|
||||
pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_INSIDE,wLoadbox);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_TEXT,pgNewString("CPU"),
|
||||
PG_WP_SIDE,PG_S_RIGHT,
|
||||
PG_WP_FONT,fntLabel,
|
||||
0);
|
||||
|
||||
wLoad = pgNewWidget(PG_WIDGET_INDICATOR,0,0);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_SIDE,PG_S_ALL,
|
||||
0);
|
||||
|
||||
/* Run it. */
|
||||
pgSetIdle(1000,&sysIdle);
|
||||
pgEventLoop();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The End */
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<font color="red"><b>Warning: Booting linux will erase all data
|
||||
stored in RAM. If you have important files stored in your palmtop,
|
||||
be sure to make copies of them first.</b></font>
|
||||
|
||||
<h3>Downloads</h3>
|
||||
|
||||
<ul>
|
||||
|
||||
<li> <b> 1.1 </b>
|
||||
<ul>
|
||||
<li> <a href="download/1.1/ChangeLog">ChangeLog</a>
|
||||
<li> <a href="download/1.1/omnibar.c">omnibar.c</a> - modified omnibar source
|
||||
<li> <a href="download/1.1/lcdtux.tar.gz">lcdtux.tar.gz</a> - lcdtux theme
|
||||
</ul>
|
||||
|
||||
<i> Revo </i>
|
||||
<ul>
|
||||
<li> <a href="download/1.1/revol-1.1.sis.zip">revol-1.1.sis.zip</a> (zipped EPOC package)
|
||||
<li> <a href="download/1.1/revol-1.1.tar.gz">revol-1.1.tar.gz</a>
|
||||
<li> <a href="download/1.1/revol-1.1.zip">revol-1.1.zip</a>
|
||||
</ul>
|
||||
<i>Revo Plus</i>
|
||||
<ul>
|
||||
<li> <a href="download/1.1/revol-1.1-revoplus.sis.zip">revol-1.1-revoplus.sis.zip</a> (zipped EPOC package)
|
||||
<li> <a href="download/1.1/revol-1.1-revoplus.tar.gz">revol-1.1-revoplus.tar.gz</a>
|
||||
<li> <a href="download/1.1/revol-1.1-revoplus.zip">revol-1.1-revoplus.zip</a>
|
||||
</ul>
|
||||
|
||||
<li> <b> 1.0 </b>
|
||||
<ul>
|
||||
<li> <a href="download/1.0/omnibar.c">omnibar.c</a> - modified omnibar source
|
||||
<li> <a href="download/1.0/revol-1.0.sis.zip">revol-1.0.sis.zip</a> (zipped EPOC package)
|
||||
<li> <a href="download/1.0/revol-1.0.tar.gz">revol-1.0.tar.gz</a>
|
||||
<li> <a href="download/1.0/revol-1.0.zip">revol-1.0.zip</a>
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
<!--#include virtual="header" -->
|
||||
|
||||
<h3> FAQ </h3>
|
||||
|
||||
<ul>
|
||||
|
||||
<li> <b> Did you write this? </b>
|
||||
|
||||
<p>
|
||||
Well, not really. Its related to <a href="http://psilinux.org/">Psilinux</a>
|
||||
which is a project to port linux to Psions.
|
||||
When I started, the port to the Revo was pretty much
|
||||
complete, but no decent distribution existed for it (though there were
|
||||
some for the Revo+).
|
||||
The focus of Psilinux is on the 5MX, so
|
||||
I put this distribution together to better support the Revo.
|
||||
</p>
|
||||
|
||||
<li> <b> Can I keep all my existing files in EPOC while I try linux? </b>
|
||||
|
||||
<p>
|
||||
Any files on your palmtop will be lost when you boot linux. It is advised
|
||||
that you make backups of any essential files before you install. You will
|
||||
need quite a bit of free space for the install, so you may have to delete
|
||||
some files to install.
|
||||
</p>
|
||||
|
||||
<li> <b> How can I change virtual terminal? </b>
|
||||
|
||||
<p>
|
||||
The 'menu' key is generally the same as the 'alt' key on PC
|
||||
keyboards. You can switch console by pressing menu-1,2,3 etc.
|
||||
Similarly, pressing ctrl-menu-backspace equates to ctrl-alt-del
|
||||
and will cause init to reboot the system.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Console 1 provides a default shell, you can start extra shells on
|
||||
consoles 2-5. Consoles 9 and 10 show the syslog output and kernel
|
||||
messages.
|
||||
</p>
|
||||
|
||||
<li> <b> How do I type a pipe (|) ? </b>
|
||||
|
||||
<p>
|
||||
Fn-T.
|
||||
</p>
|
||||
|
||||
<li> <b> You always run as root! Dont you know this is bad practice? </b>
|
||||
|
||||
<p>
|
||||
Maybe on desktop/server machines, but this is a PDA. I decided it was
|
||||
pointless to bother with multiple users on a palmtop. If you damage
|
||||
the system, you can simply install it again fairly quickly.
|
||||
</p>
|
||||
|
||||
<li> <b> Why does the filesystem have a peculiar layout? </b>
|
||||
|
||||
<p>
|
||||
I wanted to keep the filesystem simple so the layout is slightly different to
|
||||
a normal linux distribution. I have tried to keep it generally similar to
|
||||
the usual layout, however.
|
||||
</p>
|
||||
|
||||
<li> <b> How do I start PicoGUI? </b>
|
||||
|
||||
<p>
|
||||
From the console, type 'P'. This should automatically start PicoGUI.
|
||||
</p>
|
||||
|
||||
<li> <b> How do I change the PicoGUI theme? </b>
|
||||
|
||||
<p>
|
||||
Edit /etc/pgserver.conf and change the themes= line. There are several
|
||||
themes to choose from in /pgui/themes.
|
||||
</p>
|
||||
|
||||
<li> <b> How can I set up a serial connection to my desktop linux machine? </b>
|
||||
|
||||
<p>
|
||||
There is a copy of pppd included which you can use to set up a PPP link
|
||||
if you wish. However, I usually use the simpler SLIP protocol.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Firstly, on your desktop machine (you need SLIP support in the kernel
|
||||
or the SLIP kernel modules loaded), execute the following commands as
|
||||
root:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
slattach -s 115200 /dev/ttyS0 &
|
||||
ifconfig sl0 10.0.2.1 pointopoint 10.0.2.2
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
(This assumes the revo cradle is on COM1, substitute ttyS0 for your
|
||||
serial port otherwise)
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Next, on the Revo, simply execute /bin/connect. This performs similar
|
||||
commands to the ones above to set up the link on the Revo side.
|
||||
Hopefully, if the link is running you should be able to test the link
|
||||
by pinging the revo (ip 10.0.2.2) from the desktop machine. You can
|
||||
perform simple transfers between the desktop and revo using netcat
|
||||
(nc).
|
||||
</p>
|
||||
|
||||
<li> <b> Shouldnt this be called GNU/Linux? </b>
|
||||
<p>
|
||||
Actually, no. The argument for GNU/Linux is that most linux systems
|
||||
are a modified version of the GNU system which has been around for
|
||||
longer than linux has. However, Revol uses embedded versions of
|
||||
the standard parts of the operating system normally provided
|
||||
by GNU tools (uclibc instead of glibc, busybox instead of the GNU
|
||||
fileutils etc). So Revol is a non-GNU linux system and it would be
|
||||
incorrect to call it GNU/Linux.
|
||||
</p>
|
||||
|
||||
</ul>
|
||||
|
||||
<!--#include virtual="footer" -->
|
||||
</html>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
|
||||
<hr>
|
||||
<a href="mailto:fraggle@nospam.alkali.org">Simon Howard</a>. <br>
|
||||
I am not associated with Psion Digital.
|
||||
|
||||
</body>
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
|
||||
<head>
|
||||
<title>Revol: Linux on the Psion Revo</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="white" text="black" link="black" vlink="black">
|
||||
<h1>Revol</h1>
|
||||
<a href="index.shtml">Main</a> |
|
||||
<a href="sshot.shtml">Screenshots</a> |
|
||||
<a href="faq.shtml">FAQ</a> |
|
||||
<a href="download.shtml">Downloads</a> |
|
||||
<a href="links.shtml">Links</a> |
|
||||
<a href="dev.shtml">Development Stuff</a> |
|
||||
<a href="pkglist.shtml">Packages</a>
|
||||
<hr>
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<img align="right" src="revo.png" alt="Psion Revo">
|
||||
<p>
|
||||
Revol is a Linux Distribution for the Psion Revo.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Please note: this is designed for the original Revo, although it
|
||||
runs on the Revo+ as well.
|
||||
If you have a Revo+ or
|
||||
a Diamond Mako, you may wish to try
|
||||
<a href="http://zeniiia.linux.org.uk/pub/distributions/revo/revolinux.nm.ru/">
|
||||
this distribution</a> instead which makes use of the extra memory to fit
|
||||
some useful things in. It will probably not run on the 5MX. If you have
|
||||
a 5MX, you may wish to try
|
||||
<a href="http://www.psilinux.org/">the Psilinux project</a> which is
|
||||
developing a distro.
|
||||
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Version 1.1 is <a href="download.shtml">available for download!</a>
|
||||
I have managed to fit quite a few programs into the Revos memory.
|
||||
Please feel free to try this out and send comments/suggestions/queries
|
||||
to me.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Version 2.0 is under development and unlike previous versions will
|
||||
be package based using <a href="spkg.shtml">spkg</a>. You can browse
|
||||
a list of packages <a href="pkglist.shtml">here</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<h2> Links </h2>
|
||||
|
||||
<ul>
|
||||
|
||||
<li> <a href="http://www.picogui.org/">PicoGUI</a>
|
||||
<li> <a href="http://www.psilinux.org/">PsiLinux</a>
|
||||
<li> <a href="http://thomas.de-ruiter.cx/projects/psion/">Taders Psion 5mx Linux pages</a>
|
||||
<li> <a href="http://revolinux.nm.ru/">Revo+ Linux</a>
|
||||
<li> <a href="http://www.emdebian.org/">Embedded Debian</a>
|
||||
<li> <a href="http://linux-7110.sourceforge.net/files/Kernels/5mx_and_Revo/">5mx kernel patch</a>
|
||||
<li> <a href="http://uclibc.org/">uClibc</a>
|
||||
<li> <a href="http://busybox.lineo.com/">Busybox</a>
|
||||
|
||||
</ul>
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,246 @@
|
|||
/* $Id: omnibar.c,v 1.2 2001/12/01 01:12:01 gork Exp $
|
||||
*
|
||||
* omnibar.c - hopefully this will grow into a general interface
|
||||
* for starting and manipulating applications, but
|
||||
* for now it's pretty simple.
|
||||
*
|
||||
* PicoGUI small and efficient client/server GUI
|
||||
* Copyright (C) 2000 Micah Dowty <micahjd@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Contributors:
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#include <sys/types.h> /* For making directory listings */
|
||||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <time.h> /* For clock */
|
||||
|
||||
/* FIXME: Check for Mac OS X using autoconf */
|
||||
#if (defined(__APPLE__) && defined(__MACH__)) // Mac OS X and Darwin
|
||||
#include <sys/types.h>
|
||||
#include <sys/malloc.h>
|
||||
#else
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h> /* file IO for getting CPU load */
|
||||
|
||||
#include <picogui.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef CLOCK
|
||||
pghandle wClock;
|
||||
#endif
|
||||
|
||||
pghandle wLoad;
|
||||
|
||||
/********* Event handlers */
|
||||
|
||||
/* Applications menu
|
||||
* This whole thing's a kludge, I will write
|
||||
* something better (using custom menus) soon
|
||||
*/
|
||||
int btnAppMenu(struct pgEvent *evt) {
|
||||
pghandle *items;
|
||||
struct dirent *dent;
|
||||
int i,l;
|
||||
DIR *d;
|
||||
|
||||
d = opendir("/pgui/apps");
|
||||
|
||||
/* FIXME : Count the items and allocate the array */
|
||||
items = alloca(sizeof(pghandle) * 40);
|
||||
|
||||
/* Enter a new context before making the handles */
|
||||
pgEnterContext();
|
||||
|
||||
/* Make handles */
|
||||
rewinddir(d);
|
||||
i = 0;
|
||||
while (dent = readdir(d)) {
|
||||
/* Skip all but applications */
|
||||
l = strlen(dent->d_name);
|
||||
if (l<4) continue;
|
||||
if (dent->d_name[0] == '.')
|
||||
continue;
|
||||
|
||||
/* Add item */
|
||||
items[i++] = pgNewString(dent->d_name);
|
||||
}
|
||||
|
||||
/* Run it */
|
||||
i = pgMenuFromArray(items,i);
|
||||
|
||||
/* Result? */
|
||||
if (i) {
|
||||
char buf[80]; /* FIXME: Buffer overflow 'sploit waiting to happen! */
|
||||
strcpy(buf,"/pgui/apps/");
|
||||
strcat(buf,pgGetString(items[i-1]));
|
||||
if (!vfork()) {
|
||||
execlp(buf,buf,NULL);
|
||||
pgMessageDialogFmt("Error",0,"There was an error starting the\nfollowing program:\n%s",buf);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free the server memory and destroy our menu */
|
||||
pgLeaveContext();
|
||||
|
||||
closedir(d);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* System menu */
|
||||
int btnSysMenu(struct pgEvent *evt) {
|
||||
switch (pgMenuFromString("About PicoGUI...|About Revol...|Quit PicoGUI...")) {
|
||||
|
||||
case 1:
|
||||
|
||||
/* Quick little about box */
|
||||
pgMessageDialog("About PicoGUI",
|
||||
"Welcome to PicoGUI!\n"
|
||||
"This is a preview release (or a development\n"
|
||||
"version if you're a developer :)\n"
|
||||
"What you see may or may not represent the\n"
|
||||
"future of PicoGUI, it is just a test.\n"
|
||||
"For more information and the latest code, visit:\n"
|
||||
" http://pgui.sourceforge.net\n"
|
||||
"\n"
|
||||
"-- Micah",0);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
pgMessageDialog("About Revol",
|
||||
"Revol: Linux on the Psion Revo\n"
|
||||
"\n"
|
||||
"By Simon Howard\n"
|
||||
"\n"
|
||||
"http://fraggle.alkali.org/stuffage/revol/\n"
|
||||
"Feedback: sdh300@ecs.soton.ac.uk\n", 0);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
/* Beam us out! */
|
||||
if (pgMessageDialog("Quit PicoGUI", "Quit PicoGUI?",
|
||||
PG_MSGBTN_YES | PG_MSGBTN_NO)==PG_MSGBTN_YES)
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Called to update the clock and system load indicators */
|
||||
void sysIdle(void) {
|
||||
time_t now;
|
||||
char *ct;
|
||||
char buf[50];
|
||||
FILE *f;
|
||||
unsigned long cpu_user,cpu_nice,cpu_sys,cpu_idle;
|
||||
unsigned long crun,ctotal;
|
||||
static unsigned long ocrun = 0,octotal = 1;
|
||||
|
||||
#ifdef CLOCK
|
||||
/* Get time */
|
||||
time(&now);
|
||||
ct = ctime(&now);
|
||||
ct[strlen(ct)-1] = 0; /* Strip newline */
|
||||
pgReplaceText(wClock,ct);
|
||||
pgSubUpdate(wClock);
|
||||
#endif
|
||||
|
||||
/* Get CPU load */
|
||||
f = fopen("/proc/stat","r");
|
||||
fgets(buf,50,f);
|
||||
fclose(f);
|
||||
sscanf(buf,"cpu %lu %lu %lu %lu",&cpu_user,&cpu_nice,&cpu_sys,&cpu_idle);
|
||||
crun = cpu_user + cpu_sys;
|
||||
ctotal = crun + cpu_nice + cpu_idle;
|
||||
if (crun==ocrun || ctotal==octotal) return; /* Prevent SIGFPE */
|
||||
pgSetWidget(wLoad,PG_WP_VALUE, (crun-ocrun) * 100 / (ctotal-octotal),0);
|
||||
ocrun = crun;
|
||||
octotal = ctotal;
|
||||
pgSubUpdate(wLoad);
|
||||
}
|
||||
|
||||
/********* Main program */
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
pghandle wLoadbox,fntLabel,fntLabelBold;
|
||||
|
||||
pgInit(argc,argv);
|
||||
pgRegisterApp(PG_APP_TOOLBAR,"OmniBar",0);
|
||||
|
||||
/* A font for our labels */
|
||||
fntLabel = pgNewFont(NULL,10,PG_FSTYLE_FIXED);
|
||||
fntLabelBold = pgNewFont("Helvetica",8,PG_FSTYLE_BOLD);
|
||||
|
||||
/* Top-level widgets */
|
||||
|
||||
pgNewWidget(PG_WIDGET_BUTTON,0,0);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_TEXT,pgNewString("Applications"),
|
||||
PG_WP_EXTDEVENTS,PG_EXEV_PNTR_DOWN,
|
||||
0);
|
||||
pgBind(PGDEFAULT,PG_WE_PNTR_DOWN,&btnAppMenu,NULL);
|
||||
|
||||
pgNewWidget(PG_WIDGET_BUTTON,0,0);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_TEXT,pgNewString("System"),
|
||||
PG_WP_EXTDEVENTS,PG_EXEV_PNTR_DOWN,
|
||||
0);
|
||||
pgBind(PGDEFAULT,PG_WE_PNTR_DOWN,&btnSysMenu,NULL);
|
||||
|
||||
#ifdef CLOCK
|
||||
wClock = pgNewWidget(PG_WIDGET_LABEL,0,0);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_SIDE,PG_S_RIGHT,
|
||||
PG_WP_FONT,fntLabel,
|
||||
PG_WP_TRANSPARENT,0,
|
||||
0);
|
||||
#endif
|
||||
|
||||
wLoadbox = pgNewWidget(PG_WIDGET_BOX,0,0);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_SIDE,PG_S_RIGHT,
|
||||
PG_WP_SIZE,200,
|
||||
0);
|
||||
|
||||
/* Inside the load box */
|
||||
|
||||
pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_INSIDE,wLoadbox);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_TEXT,pgNewString("CPU"),
|
||||
PG_WP_SIDE,PG_S_RIGHT,
|
||||
PG_WP_FONT,fntLabel,
|
||||
0);
|
||||
|
||||
wLoad = pgNewWidget(PG_WIDGET_INDICATOR,0,0);
|
||||
pgSetWidget(PGDEFAULT,
|
||||
PG_WP_SIDE,PG_S_ALL,
|
||||
0);
|
||||
|
||||
/* Run it. */
|
||||
pgSetIdle(1000,&sysIdle);
|
||||
pgEventLoop();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The End */
|
|
@ -0,0 +1,30 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<h2> PicoTone </h2>
|
||||
|
||||
<p>
|
||||
This is a small PicoGUI DTMF tone dialer that you can use to dial numbers
|
||||
on phones with touch tone exchanges.
|
||||
</p>
|
||||
|
||||
<center><img src="sshot/picotone.png"></center>
|
||||
|
||||
|
||||
<h3>Download</h3>
|
||||
|
||||
<ul>
|
||||
<li> <b> v0.2.0</b>
|
||||
<ul>
|
||||
<li> <a href="picotone-0.2.0.tar.gz">v0.2.0</a>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
#!/usr/bin/perl -w
|
||||
|
||||
use strict;
|
||||
use CGI qw(param);
|
||||
|
||||
my %packages;
|
||||
|
||||
my $pkgdir="spkg/unstable";
|
||||
my $pkgpage="pkglist.shtml";
|
||||
my $package_file = "Packages";
|
||||
|
||||
# get md5sum of a file
|
||||
|
||||
sub packages_load {
|
||||
my $thispkg = {};
|
||||
$thispkg->{depends} = [];
|
||||
|
||||
open(PACKAGES, "$pkgdir/$package_file")
|
||||
or die("Cant open packages file");
|
||||
|
||||
while (<PACKAGES>) {
|
||||
chomp;
|
||||
|
||||
if ($_ eq '' && $thispkg->{name}) {
|
||||
bless $thispkg;
|
||||
$packages{$thispkg->{name}} = $thispkg;
|
||||
$thispkg = {};
|
||||
$thispkg->{depends} = [];
|
||||
|
||||
} elsif (/^\w+\:/) {
|
||||
my ($var, $val) = /^(\w+)\:\s*(.*)/;
|
||||
|
||||
if ($var eq 'Package') {
|
||||
$thispkg->{name} = $val;
|
||||
} elsif ($var eq 'Filename') {
|
||||
$thispkg->{file} = $val;
|
||||
} elsif ($var eq 'Version') {
|
||||
$thispkg->{version} = $val;
|
||||
} elsif ($var eq 'MD5sum') {
|
||||
$thispkg->{md5} = $val;
|
||||
} elsif ($var eq 'Size') {
|
||||
$thispkg->{filesize} = $val;
|
||||
} elsif ($var eq 'Description') {
|
||||
if ($thispkg->{description}) {
|
||||
$thispkg->{longdesc} .= "$val\n";
|
||||
} else {
|
||||
$thispkg->{description} = $val;
|
||||
}
|
||||
} elsif ($var eq 'Depend') {
|
||||
my $deppkg = $packages{$val};
|
||||
my $depends = $thispkg->{depends};
|
||||
|
||||
if (!$deppkg) {
|
||||
die "package not found: $val\n";
|
||||
}
|
||||
|
||||
push @$depends, $deppkg;
|
||||
} else {
|
||||
die "Invalid field: $var\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($thispkg->{name}) {
|
||||
$packages{$thispkg->{name}} = $thispkg;
|
||||
}
|
||||
|
||||
close(PACKAGES);
|
||||
}
|
||||
|
||||
sub pkg_param {
|
||||
my ($desc, $name, $pkg) = @_;
|
||||
|
||||
return if !$pkg->{$name};
|
||||
|
||||
print "<b>$desc:</b> $pkg->{$name} <br>\n";
|
||||
}
|
||||
|
||||
packages_load;
|
||||
|
||||
if (param('pkg')) {
|
||||
my $pkg = $packages{param('pkg')};
|
||||
|
||||
die "package not found" if !$pkg;
|
||||
|
||||
print "<h2>$pkg->{name}</h2>\n";
|
||||
|
||||
pkg_param('Version', 'version', $pkg);
|
||||
if ($pkg->{file}) {
|
||||
print "<b>File:</b> ";
|
||||
print "<a href=\"$pkgdir/$pkg->{file}\">$pkg->{file}</a>";
|
||||
print "<br>\n";
|
||||
}
|
||||
pkg_param('File Size', 'filesize', $pkg);
|
||||
pkg_param('File MD5SUM', 'md5', $pkg);
|
||||
pkg_param('Description', 'description', $pkg);
|
||||
|
||||
print $pkg->{longdesc} if $pkg->{longdesc};
|
||||
|
||||
my $depends = $pkg->{depends};
|
||||
|
||||
if (scalar @$depends > 0) {
|
||||
print "<h3>Dependencies</h3>\n";
|
||||
print "<ul>\n";
|
||||
|
||||
foreach (@$depends) {
|
||||
print "<li> ";
|
||||
print "<a href=\"$pkgpage?pkg=$_->{name}\">";
|
||||
print "$_->{name}</a>\n";
|
||||
}
|
||||
print "</ul>\n";
|
||||
}
|
||||
|
||||
print "<p> <a href=\"$pkgpage\">back</a>\n";
|
||||
} else {
|
||||
print "<h2>Packages</h2>\n";
|
||||
|
||||
print "The next version of Revol will be package based, using ";
|
||||
print "<a href=\"spkg.shtml\">spkg</a> to build filesystems automatically. ";
|
||||
print "This is a list of packages currently available in the ";
|
||||
print "<a href=\"$pkgdir/\">repository</a>.";
|
||||
print "<ul>\n";
|
||||
foreach(sort(keys %packages)) {
|
||||
print "<li> ";
|
||||
print "<a href=\"$pkgpage?pkg=$_\">$_</a>\n";
|
||||
}
|
||||
print "</ul>\n";
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<!--#exec cmd="./pkglist" -->
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<h2> Psionconf </h2>
|
||||
|
||||
<p>
|
||||
This is a small PicoGUI application to control various Psion Linux settings.
|
||||
</p>
|
||||
|
||||
<center><img src="sshot/psionconf3.png"></center>
|
||||
|
||||
<p align="right"
|
||||
<a href="/cgi-bin/showstats.cgi?fraggle-psionconf">
|
||||
<!--#include virtual="/cgi-bin/stats.cgi?fraggle-psionconf"-->
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<h3>Download</h3>
|
||||
|
||||
<ul>
|
||||
<li> <b> v1.0.0</b>
|
||||
<ul>
|
||||
<li> <a href="psionconf-1.0.0.tar.gz">psionconf-1.0.0.tar.gz</a>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<h2> Psionconf </h2>
|
||||
|
||||
<p>
|
||||
This is a small PicoGUI application to control various Psion Linux settings.
|
||||
</p>
|
||||
|
||||
<center><img src="sshot/psionconf3.png"></center>
|
||||
|
||||
|
||||
<h3>Download</h3>
|
||||
|
||||
<ul>
|
||||
<li> <b> v1.0.0</b>
|
||||
<ul>
|
||||
<li> <a href="psionconf-1.0.0.tar.gz">psionconf-1.0.0.tar.gz</a>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 40 KiB |
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<h2> Shonky Package Manager </h2>
|
||||
|
||||
<p>
|
||||
spkg is a small package management system I have written for Revol. It
|
||||
works as a "cross compiled" package system. Whereas most package managers
|
||||
run on their target system, this builds the root filesystem automatically
|
||||
on a host system. It is written in perl and is in some ways inspired by
|
||||
debians dpkg.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I plan to use this system as the base for the next version of Revol.
|
||||
</p>
|
||||
|
||||
<p align="right"
|
||||
<a href="/cgi-bin/showstats.cgi?fraggle-spkg">
|
||||
<!--#include virtual="/cgi-bin/stats.cgi?fraggle-spkg"-->
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<a href="http://freshmeat.net/projects/spkg/">freshmeat page</a>
|
||||
|
||||
<h3>Download</h3>
|
||||
|
||||
<ul>
|
||||
<li> <b> v0.9</b>
|
||||
<ul>
|
||||
<li> <a href="spkg/spkg-0.9.tar.gz">spkg-0.9.tar.gz</a>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
Package: basesystem
|
||||
Filename: basesystem-2.0.tar.gz
|
||||
MD5sum: a52e66e552085985630c596884cff749
|
||||
Size: 2819
|
||||
Description: Base file system files
|
||||
Version: 2.0
|
||||
|
||||
Package: uclibc
|
||||
Filename: uclibc-cvs020321.tar.gz
|
||||
MD5sum: f3b2344e894beda71cfdc15a6c467150
|
||||
Size: 154328
|
||||
Description: The uClibc C library
|
||||
Description: The uClibc C library is a small C library for embedded systems.
|
||||
Description: See http://www.uclibc.org/
|
||||
Version: cvs020321
|
||||
|
||||
Package: busybox
|
||||
Filename: busybox-0.62.2.tar.gz
|
||||
MD5sum: 0e1a2a905af594b3701e9522d8324265
|
||||
Size: 114704
|
||||
Description: The Swiss Army Knife of Embedded Linux
|
||||
Description: BusyBox combines tiny versions of many common UNIX utilities
|
||||
Description: into a single small executable.
|
||||
Description: See http://www.busybox.net/
|
||||
Version: 0.62.2
|
||||
|
||||
Package: picogui
|
||||
Filename: picogui-cvs021009.tar.gz
|
||||
MD5sum: 0be451aa224b7bcbf9437de5b78064d8
|
||||
Size: 237465
|
||||
Description: The PicoGUI window system.
|
||||
Description: PicoGUI is a small flexible GUI originally designed for
|
||||
Description: use on embedded systems.
|
||||
Version: cvs021009
|
||||
|
||||
Package: picogui-games
|
||||
Filename: picogui-games-cvs021009.tar.gz
|
||||
MD5sum: 28cfe02f4762f2442daa6ef01a0dce2a
|
||||
Size: 8792
|
||||
Description: A small collection of games for PicoGUI
|
||||
Depend: picogui
|
||||
Version: cvs021009
|
||||
|
||||
Package: picogui-utils
|
||||
Filename: picogui-utils-cvs021009.tar.gz
|
||||
MD5sum: 5744515d6d57b0f5b3a3c9c5d8ed6629
|
||||
Size: 9558
|
||||
Description: Some small utilities for PicoGUI
|
||||
Depend: picogui
|
||||
Version: cvs021009
|
||||
|
||||
Package: picogui-themes
|
||||
Filename: picogui-themes-cvs021009.tar.gz
|
||||
MD5sum: 502ab63865a82b55150fd38a90db4a36
|
||||
Size: 23225
|
||||
Description: Some extra themes for picogui
|
||||
Depend: picogui
|
||||
Version: cvs021009
|
||||
|
||||
Package: psionconf
|
||||
Filename: psionconf-1.0.0.tar.gz
|
||||
MD5sum: 35989ed9e4ff22654654c041759b7d61
|
||||
Size: 8003
|
||||
Description: Psilinux config utility for PicoGUI
|
||||
Depend: picogui
|
||||
Version: 1.0.0
|
||||
|
||||
Package: sopwith
|
||||
Filename: sopwith-1.5.0.tar.gz
|
||||
MD5sum: 7be25c6e913b2d4219fcbc64cadda4e7
|
||||
Size: 33025
|
||||
Description: Classic biplane shoot 'em up
|
||||
Version: 1.5.0
|
||||
|
||||
Package: irattach
|
||||
Filename: irattach-0.9.13.tar.gz
|
||||
MD5sum: 0e295be75da3daeef4336343367fa371
|
||||
Size: 4635
|
||||
Description: IrDA attach util
|
||||
Description: From the irdautils package.
|
||||
Version: 0.9.13
|
||||
|
||||
Package: slattach
|
||||
Filename: slattach-1.60.tar.gz
|
||||
MD5sum: 80c0a494c4f4b99ef9eae0c1057e2474
|
||||
Size: 6768
|
||||
Description: slattach for SLIP connections
|
||||
Description: From the net-tools package.
|
||||
Version: 1.60
|
||||
|
||||
Package: picotone
|
||||
Filename: picotone-0.2.0.tar.gz
|
||||
MD5sum: b59f6d7962038b4f70850d46250fc882
|
||||
Size: 3461
|
||||
Description: A small DTMF tone dialer for PicoGUI
|
||||
Depend: picogui
|
||||
Version: 0.2.0
|
||||
|
||||
Package: termcap
|
||||
Filename: termcap-2.0.8.tar.gz
|
||||
MD5sum: 71a09ce62a32fa6a5d91bc9ad2673a4e
|
||||
Size: 7195
|
||||
Description: The termcap library providing an API for terminal access
|
||||
Version: 2.0.8
|
||||
|
||||
Package: microemacs
|
||||
Filename: microemacs-0212.tar.gz
|
||||
MD5sum: a5e24114a48a5a44bfc46beb7ec14103
|
||||
Size: 248774
|
||||
Description: Microemacs is a tiny version of the Emacs text editor
|
||||
Depend: termcap
|
||||
Version: 0212
|
||||
|
||||
Package: netcat
|
||||
Filename: netcat-1.10.tar.gz
|
||||
MD5sum: 8a28373b9c046811bf5ad22ce1fce3f8
|
||||
Size: 9353
|
||||
Description: netcat network piping utility
|
||||
Version: 1.10
|
||||
|
||||
Package: tictac
|
||||
Filename: tictac-0.5.tar.gz
|
||||
MD5sum: 71083fbafd40017ee5a5fac6d2c65144
|
||||
Size: 2282
|
||||
Description: tic-tac-toe
|
||||
Version: 0.5
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
Package: basesystem
|
||||
Filename: basesystem-2.0.tar.gz
|
||||
Description: Base file system files
|
||||
Version: 2.0
|
||||
|
||||
Package: uclibc
|
||||
Filename: uclibc-cvs020321.tar.gz
|
||||
Description: The uClibc C library
|
||||
Description: The uClibc C library is a small C library for embedded systems.
|
||||
Description: See http://www.uclibc.org/
|
||||
Version: cvs020321
|
||||
|
||||
Package: busybox
|
||||
Filename: busybox-0.62.2.tar.gz
|
||||
Description: The Swiss Army Knife of Embedded Linux
|
||||
Description: BusyBox combines tiny versions of many common UNIX utilities
|
||||
Description: into a single small executable.
|
||||
Description: See http://www.busybox.net/
|
||||
Version: 0.62.2
|
||||
|
||||
Package: picogui
|
||||
Filename: picogui-cvs021009.tar.gz
|
||||
Description: The PicoGUI window system.
|
||||
Description: PicoGUI is a small flexible GUI originally designed for
|
||||
Description: use on embedded systems.
|
||||
Version: cvs021009
|
||||
|
||||
Package: picogui-games
|
||||
Filename: picogui-games-cvs021009.tar.gz
|
||||
Description: A small collection of games for PicoGUI
|
||||
Depend: picogui
|
||||
Version: cvs021009
|
||||
|
||||
Package: picogui-utils
|
||||
Filename: picogui-utils-cvs021009.tar.gz
|
||||
Description: Some small utilities for PicoGUI
|
||||
Depend: picogui
|
||||
Version: cvs021009
|
||||
|
||||
Package: picogui-themes
|
||||
Filename: picogui-themes-cvs021009.tar.gz
|
||||
Description: Some extra themes for picogui
|
||||
Depend: picogui
|
||||
Version: cvs021009
|
||||
|
||||
Package: psionconf
|
||||
Filename: psionconf-1.0.0.tar.gz
|
||||
Description: Psilinux config utility for PicoGUI
|
||||
Depend: picogui
|
||||
Version: 1.0.0
|
||||
|
||||
Package: sopwith
|
||||
Filename: sopwith-1.5.0.tar.gz
|
||||
Description: Classic biplane shoot 'em up
|
||||
Version: 1.5.0
|
||||
|
||||
Package: irattach
|
||||
Filename: irattach-0.9.13.tar.gz
|
||||
Description: IrDA attach util
|
||||
Description: From the irdautils package.
|
||||
Version: 0.9.13
|
||||
|
||||
Package: slattach
|
||||
Filename: slattach-1.60.tar.gz
|
||||
Description: slattach for SLIP connections
|
||||
Description: From the net-tools package.
|
||||
Version: 1.60
|
||||
|
||||
Package: picotone
|
||||
Filename: picotone-0.2.0.tar.gz
|
||||
Description: A small DTMF tone dialer for PicoGUI
|
||||
Depend: picogui
|
||||
Version: 0.2.0
|
||||
|
||||
Package: termcap
|
||||
Filename: termcap-2.0.8.tar.gz
|
||||
Description: The termcap library providing an API for terminal access
|
||||
Version: 2.0.8
|
||||
|
||||
Package: microemacs
|
||||
Filename: microemacs-0212.tar.gz
|
||||
Description: Microemacs is a tiny version of the Emacs text editor
|
||||
Depend: termcap
|
||||
Version: 0212
|
||||
|
||||
Package: netcat
|
||||
Filename: netcat-1.10.tar.gz
|
||||
Description: netcat network piping utility
|
||||
Version: 1.10
|
||||
|
||||
Package: tictac
|
||||
Filename: tictac-0.5.tar.gz
|
||||
Description: tic-tac-toe
|
||||
Version: 0.5
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
|
||||
sub get_md5sum {
|
||||
my ($filename) = @_;
|
||||
|
||||
open(MD5PIPE, "md5sum $filename |");
|
||||
|
||||
my $sum = <MD5PIPE>;
|
||||
chomp $sum;
|
||||
|
||||
close(MD5PIPE);
|
||||
|
||||
die if !$sum;
|
||||
|
||||
$sum =~ s/\s.*$//;
|
||||
|
||||
return $sum;
|
||||
}
|
||||
|
||||
open(PKGIN, "Packages.human") or die;
|
||||
open(PKGOUT, ">Packages") or die;
|
||||
|
||||
while (<PKGIN>) {
|
||||
print PKGOUT $_;
|
||||
chomp;
|
||||
|
||||
if (/^Filename\:/) {
|
||||
my ($filename) = /^Filename\:\s*(.*)/;
|
||||
|
||||
die "$filename does not exist!" if !-e $filename;
|
||||
|
||||
my @filestat = stat($filename);
|
||||
|
||||
print PKGOUT "MD5sum: " . get_md5sum($filename) . "\n";
|
||||
print PKGOUT "Size: " . $filestat[7] . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
close(PKGOUT);
|
||||
close(PKGIN);
|
|
@ -0,0 +1,60 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<!--#include virtual="header"-->
|
||||
|
||||
<h2> Screenshots </h2>
|
||||
|
||||
<img src="sshot/picogui.png" alt="picogui"> <br>
|
||||
<p>
|
||||
PicoGUI running on the Revo
|
||||
</p>
|
||||
|
||||
<img src="sshot/battleship.png" alt="battleship"> <br>
|
||||
<p>
|
||||
Playing PicoGUI battleship
|
||||
</p>
|
||||
|
||||
<img src="sshot/aqua.png" alt="aqua theme"> <br>
|
||||
<p>
|
||||
PicoGUI using the aqua theme
|
||||
</p>
|
||||
|
||||
<img src="sshot/bx.png" alt="BitchX"> <br>
|
||||
<p>
|
||||
Logged on to a remote machine and using BitchX
|
||||
</p>
|
||||
|
||||
<img src="sshot/pine.png" alt="pine"> <br>
|
||||
<p>
|
||||
Logged on to a remote machine and using pine to read mail
|
||||
</p>
|
||||
|
||||
<img src="sshot/omnibar.png" alt="omnibar"> <br>
|
||||
<p>
|
||||
Omnibar running with a menu open showing the list of installed
|
||||
programs.
|
||||
</p>
|
||||
|
||||
<img src="sshot/sopwith5.png" alt="sopwith">
|
||||
<p>
|
||||
I ported <a href="http://fraggle.despayre.org:81/stuffage/sopwith/">
|
||||
Sopwith</a> to the revo framebuffer
|
||||
</p>
|
||||
|
||||
<img src="sshot/emacs.png" alt="emacs">
|
||||
<p>
|
||||
This is <a href="http://www.jasspa.com/">microemacs</a> running in a
|
||||
PicoGUI pterm window.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="sshot/">more random screenshots</a>
|
||||
</p>
|
||||
|
||||
<!--#include virtual="footer"-->
|
||||
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.7 KiB |
|
@ -0,0 +1,37 @@
|
|||
<html>
|
||||
<body>
|
||||
|
||||
<img src='aqua.png'><br>
|
||||
<img src='battleship.png'><br>
|
||||
<img src='bx.png'><br>
|
||||
<img src='emacs.png'><br>
|
||||
<img src='fluidity.png'><br>
|
||||
<img src='font_oops.png'><br>
|
||||
<img src='garbled.png'><br>
|
||||
<img src='link1.png'><br>
|
||||
<img src='link2.png'><br>
|
||||
<img src='link3.png'><br>
|
||||
<img src='mp3blaster.png'><br>
|
||||
<img src='omnibar.png'><br>
|
||||
<img src='ouch.png'><br>
|
||||
<img src='picogui.png'><br>
|
||||
<img src='picotone.png'><br>
|
||||
<img src='pine.png'><br>
|
||||
<img src='psionconf.png'><br>
|
||||
<img src='psionconf2.png'><br>
|
||||
<img src='psionconf3.png'><br>
|
||||
<img src='pterm_bx.png'><br>
|
||||
<img src='pterm_bx2.png'><br>
|
||||
<img src='revoblah.png'><br>
|
||||
<img src='sopwith1.png'><br>
|
||||
<img src='sopwith2.png'><br>
|
||||
<img src='sopwith3.png'><br>
|
||||
<img src='sopwith4.png'><br>
|
||||
<img src='sopwith5.png'><br>
|
||||
<img src='sopwith6.png'><br>
|
||||
<img src='sopwith_wide.png'><br>
|
||||
<img src='telnet_insecure.png'><br>
|
||||
<img src='tictac.png'><br>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 865 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 869 B |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 771 B |
After Width: | Height: | Size: 996 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.0 KiB |