TS3.03ce - USB device manager

A home for all kinds of Puppy related projects
Message
Author
2byte
Posts: 353
Joined: Mon 09 Oct 2006, 18:10

TS3.03ce - USB device manager

#1 Post by 2byte »

This project has been discontinued

As part of the effort to make Puppy more friendly to linux newbs I'm working on a tray program that will detect USB devices as they are plugged in and will offer the user a dialog to take the appropriate action. As a first step, only devices that are listed as "/dev/sd*" are being detected. These would mostly be pendrives.

I sincerely hope that the good people on this forum will take a few minutes to test the program and provide feedback. Also I do not own every type of USB device there is, so I am asking that anyone with a USB device that should be supported to run the commands 'fdisk -l', first without the device inserted, and then after the device is inserted. Then post or PM the device description. Once you have the device description please run the command disktype on the device. For example if the device is /dev/sda1 then run 'disktype /dev/sda1'. Please include the results in your post or PM. Also please include a real world description of the device, ie brand X mp3 player, etc.

To get things started here is a link to the first version and a description of what it does at this point in time. For lack of a better name I'm calling it usbmount for now.

usbmount is a semi-automated drive mounter for USB drives. This version recognizes devices tagged as /dev/sd*. It is designed to run in the background, so it's best to start it up a couple of seconds after the window manager is running.

It runs invisibly until a USB drive is plugged in, then as soon as the system recognizes the drive usbmount will pop up a dialog offering to mount the drive.

An icon will appear in the tray whenever a USB drive is present. The tray icon is compatible with JWM and IceWm (icewmtray must be running), and should work with any window manager that is compatible with eggtrayicon.

Hover the mouse pointer over the tray icon and a list of mounted drives will be displayed.

Clicking the tray icon will bring up a dialog listing all of your USB drives and these may be mounted or unmounted from the dialog.

Attempting to unmount a drive that is in use will be refused and a dialog will be presented with an appropriate message.

Unplugging a mounted drive will bring up a warning dialog with advice, and the drive will be automatically unmounted to forestall system errors.

Pmount, Mut, and commandline mounting of drives do not interfere with usbmount. It recognizes outside changes to drive status and adjusts itself accordingly.

The tray icon has a 2 pixel border that can be colored with a command line argument.
usbmont -b "red"
usbmount -b "#FF0000"

Compiled on Puppy 2.14 with GTK 2.8.17 and gcc.


Thank you for your time,
Vern
Last edited by 2byte on Sat 27 Oct 2007, 04:22, edited 1 time in total.

User avatar
cb88
Posts: 1165
Joined: Mon 29 Jan 2007, 03:12
Location: USA
Contact:

#2 Post by cb88 »

pdrive already does the auto mount maybe you could look at it and maybe add your ideas to it since it is already really good

the interface is like a cross between grafburn and p-mount(on which it is based) also it has progress bars and does not need to refresh the window like p-mount has to do each time...

here is the link to the tread it is in : http://www.murga-linux.com/puppy/viewtopic.php?t=21200

also you may want to test it out in 3.00 since pdrive was broken in 3.00 due to the gtk upgrade to 2.10.x i guess and many other Upgrades pdrive .11 is fixed already in 3.00
Taking Puppy Linux to the limit of perfection. meanwhile try "puppy pfix=duct_tape" kernel parem eater.
X86: Sager NP6110 3630QM 16GB ram, Tyan Thunder 2 2x 300Mhz
Sun: SS2 , LX , SS5 , SS10 , SS20 ,Ultra 1, Ultra 10 , T2000
Mac: Platinum Plus, SE/30

2byte
Posts: 353
Joined: Mon 09 Oct 2006, 18:10

#3 Post by 2byte »

Ecomoney defined the goals for Talking Stick.
# Extremely friendly for Linux newbies.
# Boot up and run extraordinarily fast.
# Have all the applications needed for daily use.
# Will just work, no hassles.
# Will breathe new life into old PCs

Its important to remember, as Puppy Linux Developers, were not developing puppy for our own use . Were developing it for Linux Newbies. Not computer newbies, but people switching from *other* operating systems.
usbmount is aimed at #1 and #4. It is not a replacement for Pdrive, Mut, Pmount or anything else. Newbies from *other* operating systems expect something to happen when they insert a pendrive, CD, etc. This is the goal for usbmount. It is not for experienced linux users who have no use for such a thing.

Vern

User avatar
cb88
Posts: 1165
Joined: Mon 29 Jan 2007, 03:12
Location: USA
Contact:

#4 Post by cb88 »

I think you miss understood me I do think you have a good idea!!

I just think that it should be integrated with pdrive so the first time you plug in a usb drive a window pops up asking if you want to automount all the time or never automount that would only mean a small modification to pdrive so that it shows that option instead of automounting the first time a usb drive is pluged in.

also might be a good idea to never mount the u3 part of a flash drive(if it has one) because it is not used in linux....

I have only mounted a u3 drive once and it had a name like /mnt/sr0 for the u3 part I think i'll see if i can get a hold of it again later

If it doesn't conflict with pdrive's auto mount the that is good but I don't see how it won't can't test it now cause i'm not at home...

also it appears that usbmount is already twice the size of pdrive why?
Taking Puppy Linux to the limit of perfection. meanwhile try "puppy pfix=duct_tape" kernel parem eater.
X86: Sager NP6110 3630QM 16GB ram, Tyan Thunder 2 2x 300Mhz
Sun: SS2 , LX , SS5 , SS10 , SS20 ,Ultra 1, Ultra 10 , T2000
Mac: Platinum Plus, SE/30

User avatar
zigbert
Posts: 6621
Joined: Wed 29 Mar 2006, 18:13
Location: Valåmoen, Norway
Contact:

#5 Post by zigbert »

Here are the base code of the Pdrive deamon. It all became so tiny, that I felt it was a puppy. :wink:

If we only could detect cdroms without using huge cpu resources.......

Code: Select all

echo -e "`ls -1 /sys/block | grep -E '^scd|^sd|^mmc|^sr'`" > /tmp/pdrive_deamon_old

while [ "$LOOP" != "something" ]; do
  echo -e "`ls -1 /sys/block | grep -E '^scd|^sd|^mmc|^sr'`" > /tmp/pdrive_deamon
  NEW_DEVICE=`diff -B /tmp/pdrive_deamon_old /tmp/pdrive_deamon | grep ">" | sed -e "s/> //g"`
  REMOVED_DEVICE=`diff -B /tmp/pdrive_deamon_old /tmp/pdrive_deamon | grep "<" | sed -e "s/< //g"`
  if [ "$NEW_DEVICE" ]; then
    ...
  fi
  if [ "$REMOVED_DEVICE" ]; then
    ..
  fi
  cp -f /tmp/pdrive_deamon /tmp/pdrive_deamon_old
  sleep 2
done

User avatar
cb88
Posts: 1165
Joined: Mon 29 Jan 2007, 03:12
Location: USA
Contact:

#6 Post by cb88 »

this is a little bit of a long shot (and i'm not sure my terminology is right ) but could the the cd detecting code be searated out and give a very low nice value that way it has a very low priority... since it probably spends a lot of time just waiting for the drive to respond..
Taking Puppy Linux to the limit of perfection. meanwhile try "puppy pfix=duct_tape" kernel parem eater.
X86: Sager NP6110 3630QM 16GB ram, Tyan Thunder 2 2x 300Mhz
Sun: SS2 , LX , SS5 , SS10 , SS20 ,Ultra 1, Ultra 10 , T2000
Mac: Platinum Plus, SE/30

User avatar
ecomoney
Posts: 2178
Joined: Fri 25 Nov 2005, 07:00
Location: Lincolnshire, England
Contact:

Goals for talking stick

#7 Post by ecomoney »

Hi, just to remind you, those wernt just the goals for TS 3.03ce, they are the goals concieved by BarryK in the Puppy Linux Mission Statement.

{rant}
Pmount doesnt work. I can make this bold statement because Ive tested it on "linux newbs" and they didnt have a clue how to use it. It doesnt explain what it does, or have labels and assumes people know the theory of device mounting linux. It is possible even more unfriendly than MUT. Newbies dont know what "mounting" is because they've never had to do it with windows. I have to give them a 10 minute tutorial just so they can read their pendrives, cd's and cameras that used to "just work" and they see it as a disadvantage and an inconvenience.
{/rant}

I was very happy indeed that 2byte dropped me a pm with details of this project. Puppy could be made to be 100 times more successful at achieving its stated and noble aims with very little coding effort. Ive seen this by using it "in the field". With the 2.15ce release and the feature of not presenting the user with a black screen full of writing they didint understand everytime there was a powercut cut down my call-outs/support calls by about half. This should cut them down by half again. It is already a feature in most other distros that dont even have "linux-newbie-friendly" in their aims.

Sorry its late, and Im grumpy, and I cant find my pendrive (Why do they make those things so small!) :D
Puppy Linux's [url=http://www.murga-linux.com/puppy/viewtopic.php?p=296352#296352]Mission[/url]

Sorry, my server is down atm!

User avatar
cb88
Posts: 1165
Joined: Mon 29 Jan 2007, 03:12
Location: USA
Contact:

#8 Post by cb88 »

pen drives are small because they (the manufacturers) want you to loose them and have to buy new ones cause they take too long to wear out....

I tried out usbmount and it worked (in 3.00) with my pendrive (1gb simpletech) and the taskbar icon is a nice touch it also provides a very familiar usb drive interface...

I still think it should be integrated with pdrive....
Taking Puppy Linux to the limit of perfection. meanwhile try "puppy pfix=duct_tape" kernel parem eater.
X86: Sager NP6110 3630QM 16GB ram, Tyan Thunder 2 2x 300Mhz
Sun: SS2 , LX , SS5 , SS10 , SS20 ,Ultra 1, Ultra 10 , T2000
Mac: Platinum Plus, SE/30

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#9 Post by Pizzasgood »

(Why do they make those things so small!)
While I generally have pockets large enough to hold a full sized harddrive, that doesn't mean doing so would be comfortable. Also, at least from what I've seen, most women tend to wear pants with much smaller and tighter pockets than guys do, which would make carrying a full sized harddrive even more cumbersome for them (though I suppose they could stick one in their purse if they happen to carry one).

I'll test this out later tonight (the USB thing, not my harddrive carrying theories...). I'd do it now, but the last time I tested something immediately, I locked up my computer while I still had about twelve unread tabs in Firefox (thank goodness for "restore session").
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

JB4x4
Posts: 256
Joined: Sun 30 Jul 2006, 22:44
Contact:

#10 Post by JB4x4 »

2byte - Thank you for your time with this project. I too spend a lot of time explaining mount / unmount. I tried out your program, here's what I got. Mounted an external usb hard drive, worked, sda1. Mounted a flash key, worked, sdb2. Tried to unmount external hd, usbmount died, and I got the following error...

USER PID ACCESS COMMAND
/dev/sda1: root F.... ntfs-3g

Segmentation fault

Both drives were left mounted. I forgot to mention above that the external has an ntfs formated hd in it. On the plus side just using the usb key worked fine.

P.S. My Nikon 3200 camera also worked (justed tested by itself)

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#11 Post by Pizzasgood »

I get a segmentation fault as soon as I try running it, in both Puppy 2.14 and 3.00.

One thing I've been wondering since I read about this though: You detect the drives based on sd*. But USB drives aren't the only things that use that designation. My internal SATA harddrive uses it too. Could that be what's causing the error?
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
Lobster
Official Crustacean
Posts: 15522
Joined: Wed 04 May 2005, 06:06
Location: Paradox Realm
Contact:

#12 Post by Lobster »

Newbies don't know what "mounting" is because they've never had to do it with windows.
Give us the 10 minute lecture / explanation :)
I don't get it

One of the most frustrating things I experienced with Knoppix (most Linux do this) is a locked CD, that could only be opened from software

On a desktop Linux if a device is on my computer I want access to it
I do not want to mount it it, password circumvent it or contact the Linus Torvalds SU team . . .

It I am a tinfoil geek I may want to turn off deamons and only allow access to my USB drive under bizarre circumstances involving blowfish encryption . . .

Robert keep using your test group of unreasonable real world users

Would some reasonable person like to Put the TS spec together for the wiki?

I will go make a start :D
http://puppylinux.org/wikka/TalkingStickSpec

May the Force be with us
Last edited by Lobster on Sun 25 Nov 2007, 17:28, edited 1 time in total.
Puppy Raspup 8.2Final 8)
Puppy Links Page http://www.smokey01.com/bruceb/puppy.html :D

2byte
Posts: 353
Joined: Mon 09 Oct 2006, 18:10

#13 Post by 2byte »

JB4x4 and Pizzasgood, thanks for the feedback. Very helpful reports. This is exactly what I need to establish a baseline for the device detection methods (not to mention my program logic). Even the segmentation fault reports are helpful.

JB4x4, was anything accessing your external usb hard drive at the time of the fault, like Rox or anything? I ask because the output you reported is from the command 'fuser -v -m /dev/sda1' and it should have triggered a 'device is busy' dialog.

Pizzasgood, was there any console output before it died on you? Would you run the command fdisk -l and tell me what that output is please?

Again, thanks for the feedback. This project will never get off the ground without this kind of help.

Vern

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#14 Post by Pizzasgood »

Nothing that means anything, just a complaint about the locale:

Code: Select all

sh-3.00# ./usbmount 

(usbmount:24916): Gtk-WARNING **: Locale not supported by C library.
        Using the fallback 'C' locale.
Segmentation fault
That was in Pizzapup, which was based on Puppy 2.14. I've installed a whole mess of stuff in that save-file though, which I think is where the locale issue comes from. But it doesn't matter, nearly every app displays that now.

In Puppy 3.00 (with a clean pup-save), I don't think it had the locale error. I'll double-check later today if I have time before I have to leave.

Code: Select all

sh-3.00# fdisk -l

Disk /dev/sda: 164.6 GB, 164696555520 bytes
255 heads, 63 sectors/track, 20023 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        4980    40001818+   7  HPFS/NTFS
/dev/sda2            4981        5042      498015   82  Linux swap / Solaris
/dev/sda3            5043       13511    68027242+   5  Extended
/dev/sda4           13512       20023    52307640   83  Linux
/dev/sda5            5043       10955    47496141   83  Linux
/dev/sda6           10956       11079      995998+   c  W95 FAT32 (LBA)
/dev/sda7           11080       13511    19535008+  83  Linux
EDIT: That's without a usb drive plugged in. Just so it's clear. /dev/sda is my sata drive.
Last edited by Pizzasgood on Sun 21 Oct 2007, 04:24, edited 1 time in total.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
cb88
Posts: 1165
Joined: Mon 29 Jan 2007, 03:12
Location: USA
Contact:

#15 Post by cb88 »

that is with my flash drive (currently sde1 it changes) and an sd card pluged in (currently sdc1)

the sd card takes longer to mount and is only detected if I run pdrive or i refresh prive (or mut or pmount)

Code: Select all

# fdisk -l

Disk /dev/hdb: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdb1   *         266        3834    28667992+   7  HPFS/NTFS
/dev/hdb2               1         265     2128581   12  Compaq diagnostics
/dev/hdb3            3835        6392    20547135    5  Extended
/dev/hdb4            6393       10011    29069617+   b  W95 FAT32
/dev/hdb5            4219        4600     3068415   83  Linux
/dev/hdb6            4601        5446     6795463+  83  Linux
/dev/hdb7            5447        6392     7598713+  83  Linux
/dev/hdb8            3835        4218     3084417    b  W95 FAT32

Partition table entries are not in disk order

Disk /dev/sdc: 1015 MB, 1015808000 bytes
5 heads, 4 sectors/track, 99200 cylinders
Units = cylinders of 20 * 512 = 10240 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1              13       99200      991875+   6  FAT16

Disk /dev/sde: 1043 MB, 1043333120 bytes
216 heads, 24 sectors/track, 393 cylinders
Units = cylinders of 5184 * 512 = 2654208 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1   *           1         394     1018863+  12  Compaq diagnostics
Partition 1 has different physical/logical beginnings (non-Linux?):
     phys=(0, 0, 33) logical=(0, 1, 9)
Partition 1 has different physical/logical endings:
     phys=(125, 215, 24) logical=(393, 18, 15)
# 
Taking Puppy Linux to the limit of perfection. meanwhile try "puppy pfix=duct_tape" kernel parem eater.
X86: Sager NP6110 3630QM 16GB ram, Tyan Thunder 2 2x 300Mhz
Sun: SS2 , LX , SS5 , SS10 , SS20 ,Ultra 1, Ultra 10 , T2000
Mac: Platinum Plus, SE/30

2byte
Posts: 353
Joined: Mon 09 Oct 2006, 18:10

#16 Post by 2byte »

Thanks for the input everyone. Very informative.

Re-coding now. :)
Vern

User avatar
ecomoney
Posts: 2178
Joined: Fri 25 Nov 2005, 07:00
Location: Lincolnshire, England
Contact:

Cheers Vern

#17 Post by ecomoney »

Thanks for testing everyone. Ive finally found my usb drive so I will join in on the next run. Im looking forward to your updated code.
Puppy Linux's [url=http://www.murga-linux.com/puppy/viewtopic.php?p=296352#296352]Mission[/url]

Sorry, my server is down atm!

2byte
Posts: 353
Joined: Mon 09 Oct 2006, 18:10

#18 Post by 2byte »

Sorry folks. This project for Talking Stick is dead. I've been trying to build this in puppy 3.01 and am beating my head against a wall. And unless someone can explain this to me I can only conclude that the gtk version included with 3.01 is junk. Bear with me, I'd like to explain my reasons for dumping the project.

Take a look at this function. It's called from the mount/unmount dialog when the mount button is clicked. It's a little butchered from my efforts to track down the segmentation faults, but what the heck.

Code: Select all

gboolean mount_from_tree_list(gchar* listname, gchar* retstr){
	GSList *Lnk = NULL;
	partinfo *ptinfo = NULL;
	gchar **oneline = NULL;
	gchar **output = NULL;
	char txt[25];
	char txt2[25];
	
	Lnk = ptlist;
	while(Lnk != NULL) {
		ptinfo = Lnk->data;
		if (ptinfo){
			if (strcmp((char *)ptinfo->mntpoint, "void")){
				if (!strcmp(listname, ptinfo->desc)){
g_debug("Before Mounting ptinfo->name = %s",ptinfo->name);
g_debug("Before Mounting mountflag = %d",ptinfo->mountflag);
g_debug("Before Mounting mount point = %s",ptinfo->mntpoint);
					oneline = g_strsplit ((gchar*)ptinfo->name, "/", -1);
					g_snprintf(txt,sizeof(txt), "mkdir /mnt/%s ", oneline[2]);
					g_snprintf(txt2, sizeof(txt2), "/mnt/%s ", oneline[2]);
					g_spawn_command_line_sync((gchar*)txt, (gchar **)&output,
											   NULL, NULL, NULL);
					g_free ((gchar*)output);
					g_snprintf(txt, 50, "%s %s %s %s", "mount -t", 
							  (char*)ptinfo->fmt,
							  (char*)ptinfo->name,
							  (char*)txt2);
					g_spawn_command_line_sync((gchar*)txt, (gchar **)&output,
											   NULL, NULL, NULL);
					g_free ((gchar*)output);
					ptinfo->mountflag = TRUE;
					g_stpcpy(ptinfo->mntpoint,txt2);
					g_strfreev (oneline);
					g_stpcpy(retstr,txt2);
g_debug("After Mounting ptinfo->name = %s",(gchar*)ptinfo->name);
g_debug("After Mounting mountflag = %d",ptinfo->mountflag);
g_debug("After Mounting mount point = %s",ptinfo->mntpoint);
					return TRUE;
				}
			}
		}
		Lnk = Lnk->next;
	}
	return FALSE;
}
Here is the output from compile to Ctrl-c with a couple of comments spliced in. The 'dialog is open' lines represent a global flag that is set to true and should remain true until this dialog is destroyed. FYI each 'DEBUG: dialog is open =' line represents one scan at 2 second intervals. Nothing else in the code sets it to false but notice that it gets reset after one routine is called from a timer callback. The value should have remained 1 all the way through this output. That's just one thing. Notice what happens to ptinfo->name! Where the heck does EEK// come from? On a different run it was changed to 'DR boot loader'! This is the kind of crap I'm constantly running into.

Code: Select all

# ./compile-usbmount
# ./usbmount
** (usbmount:1856): DEBUG: dialog is open = 0
** (usbmount:1856): DEBUG: ADDING ptinfo->name = /dev/sda1
- The dialog is opened here
** (usbmount:1856): DEBUG: dialog is open = 1
** (usbmount:1856): DEBUG: dialog is open = 0
** (usbmount:1856): DEBUG: dialog is open = 0
** (usbmount:1856): DEBUG: dialog is open = 0
- The mount button is clicked
** (usbmount:1856): DEBUG: Before Mounting ptinfo->name = /dev/sda1
** (usbmount:1856): DEBUG: Before Mounting mountflag = 0
** (usbmount:1856): DEBUG: Before Mounting mount point = 
mkdir: cannot create directory '/mnt/sda1': File exists
** (usbmount:1856): DEBUG: After Mounting ptinfo->name = EEK//
** (usbmount:1856): DEBUG: After Mounting mountflag = 1
** (usbmount:1856): DEBUG: After Mounting mount point = /mnt/sda1 
** (usbmount:1856): DEBUG: dialog is open = 0
- The unmount button is clicked and the device is unmounted
** (usbmount:1856): DEBUG: dialog is open = 0
- The mount button is clicked again
** (usbmount:1856): DEBUG: Before Mounting ptinfo->name = /dev/sda1
** (usbmount:1856): DEBUG: Before Mounting mountflag = 0
** (usbmount:1856): DEBUG: Before Mounting mount point = 
mkdir: cannot create directory '/mnt/sda1': File exists
** (usbmount:1856): DEBUG: After Mounting ptinfo->name = EEK//
** (usbmount:1856): DEBUG: After Mounting mountflag = 1
** (usbmount:1856): DEBUG: After Mounting mount point = /mnt/sda1 
** (usbmount:1856): DEBUG: dialog is open = 0
** (usbmount:1856): DEBUG: dialog is open = 0
- The dialog is still open at this point.
- Ctrl-c.
I think I'll continue this under puppy 2.14. Maybe it can be salvaged for the future.

Vern

User avatar
ecomoney
Posts: 2178
Joined: Fri 25 Nov 2005, 07:00
Location: Lincolnshire, England
Contact:

GTK

#19 Post by ecomoney »

Hi 2byte

If the GTK version that is used in puppy 3.xx is broken, then we can fix it!!! If its causing problems for this then it is likely that it will cause problems in the future too. Let us know how you get on with it in puppy 2.14 (which has a different gtk version). You might want to look up this problem on the GTK forums too as it sounds quite specialist. Hope you can get the project started again.
Puppy Linux's [url=http://www.murga-linux.com/puppy/viewtopic.php?p=296352#296352]Mission[/url]

Sorry, my server is down atm!

User avatar
cb88
Posts: 1165
Joined: Mon 29 Jan 2007, 03:12
Location: USA
Contact:

#20 Post by cb88 »

any progress beig made here?

gtk upgrade needed? I think that is an option since even the kernel will be rebuilt...and eco seems to have alluded to upgrading gtk above

issue resolved?
Taking Puppy Linux to the limit of perfection. meanwhile try "puppy pfix=duct_tape" kernel parem eater.
X86: Sager NP6110 3630QM 16GB ram, Tyan Thunder 2 2x 300Mhz
Sun: SS2 , LX , SS5 , SS10 , SS20 ,Ultra 1, Ultra 10 , T2000
Mac: Platinum Plus, SE/30

Post Reply