[<<] [<] Page 2 of 3 [>] [>>] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
Re: nanoGui development
From: Alistair Riddoch ####@####.#### Date: 5 May 1999 15:33:21 -0000 Message-Id: <199905051532.QAA20408@penelope.ecs.soton.ac.uk> Greg Haerr writes: > > Alistair - > I've got the nanoGui project moved up quite a bit. It now runs the sample > programs pretty well. As Alan mentioned, I'll be checking all this stuff in shortly. I look forward to looking at the code. > I've also made a makefile option that allows the graphics application to be linked > directly with the nanoX server. This means that you won't have to implement any sockets > in the ELKS kernel for initial testing. Following are the things that someone will have > to worry about (I'm planning on getting to these, but I still can't develop on ELKS, > and cross-development is a pain... BTW I have the bcc tools source hacked to > self-host now, for instance it will compile the ANSI C Minix libc source on Minix...) > Anyway, the following needs to be addressed for nanoGui on ELKS: > > o A real mode VGA driver (we can use int 10h for this, pretty easy, then > hack bogl for 16-bit ints) BTW this driver also needs to switch between text > and graphics modes, rather than using consoles. I recommend that all the graphics/text > stuff remain in nanoGui for ELKS for the time being, we don't need a bigger kernel for this. > Taking this approach means that ELKS can leave out all graphics stuff from the kernel > for the time being. I have had some thoughts on the best way to support graphics. I think it would be cleanest to implement an ioctl in the dircon driver telling that an application requires graphics so it has to save the contents of the VCs, and disable VC switching, and writes to VCs. This then leaves a user space vga library to do what it wants with the hardware until it has finished, whereupon it call the driver again letting it know that the VCs should now be restores. Putting the display hardware back into the right mode should be the responsability of the library code. > > o A mouse driver (this is more of a pain, we could still leave it out of the kernel) Could we restrict support to serial mice initially? The serial driver works so far. > > o Kernel select() support for mouse and keyboard fd's (note that we require > tty ~ICANON raw mode. (^C signal handling would be nice to abort the server on bad errors) We cave non-canonical mode (try running vi), but some other term features are still not possible. I have thought about ctrl-C (and ctrl-Z) but have not yet come up with a way of implementing them. > > o Nanogui uses ANSI prototypes that won't compile with bcc, unless someone > wants my ansi modifications, I'm thinking of releasing it myself. Most ANSI code will compile under bcc if you use the -ansi flag. How much do your ansi modifications do? DO they check prototypes, or just allow ANSI code to be compiled? > > > Currently, NanoGui implements a decent subset of low-level X primitives, although > they're renamed. Window creation, GC manipulation and text routines work. We still > need some better low-level drawcode support. For instance, XOR drawing isn't done yet. > > My plan is to take nanoGui and abstract the mouse, keyboard and screen > interfaces into fully defined interfaces within structures, that would allow nanoGui to become > completely portable with anyone able to roll their own drivers. I should have this work done > in a couple of days. I've got to hook up my linux box to the net to use the CVS checkin, > hopefully that'l get done tonight or tomorrow. > My previous experiences with ELKS have shown that portable code does not always make it very ELKS friendly. I have often had to take code which is easily portable, and make it very unportable to make it small enough to run under ELKS. In an ideal world we could run nano-GUI from the standard code base under ELKS, but it may end up being the case that a heavily modified version of nana-gui gives much better performance under ELKS. Al | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
nanogui development
From: Greg Haerr ####@####.#### Date: 5 May 1999 18:36:24 -0000 Message-Id: <01BE96F4.1B8721A0.greg@censoft.com> Following getting the nanogui project working, I propose and am working on the following developments: o complete separation of screen driver interface from the nanogui server proper. o integration with separately produced bogl and other graphics libraries o operation standalone and on non-linux systems This is complicated, but here's the idea. Currently the nanogui project uses a custom modifed version of the bogl graphics libraries developed initially by Ben Pfaffer over at debian. These libraries only work with 8 bit color framebuffers, and require v2.2 linux. In addition nanogui clipping support is contained in the graphics libraries. Since nanogui v0.1, Ben and others have come out with quite a few more versions of bogl, ones that support truecolor, pseudocolor, etc. These libraries work on linux systems setup for truecolor display consoles. The console and framebuffer now have to be reset to 8 bit mode for nanogui to run. I propose that nanogui be rewritten to allow unmodified bogl libraries from debian to be linked in w/o modification. This will allow nanogui to run on many more systems, as well as someone volunteering a svgalib driver that will allow nanogui to run on linux 2.0, and ELKS, if someone writes a int 10h realmode driver. This requires that an explict screen driver interface be designed, and the clipping code, along with a host of other line-segment reordering code stuff be moved up into the nanogui kernel. In addition, the v0.2 kernel still doesn't support mouse cursor clipping during graphics draw code. This needs a redesign, since it's unlikely to be handled by the low level graphics drivers, without a lot of work for each one. I have completed all this work late last night, and should have this ready shortly. (I'm still asking for design input though). This will become v0.3. In v0.4, I should have completed the driver interfaces for the keyboard and mouse as well, which would allow nanogui to run *totally* standalone on anything that supports a C compiler. (yes, this is my real inspiration for the project, we don't need another X server, we need small projects that can run standalone and on top of existing operating systems without too much work) Greg | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
Re: nanogui development
From: ####@####.#### (Alan Cox) Date: 5 May 1999 18:40:56 -0000 Message-Id: <m10f7PE-0007TwC@the-village.bc.nu> > In addition nanogui clipping support is contained in the graphics libraries. Since nanogui I wanted to avoid that but it has to be that low level for performance. > supports a C compiler. (yes, this is my real inspiration for the project, we don't need > another X server, we need small projects that can run standalone and on top of existing > operating systems without too much work) Yep | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
RE: nanogui development
From: Greg Haerr ####@####.#### Date: 5 May 1999 18:50:13 -0000 Message-Id: <01BE96F6.0A48D8A0.greg@censoft.com> Alan, I studied your mods heavily for performance considerations, and the clipping work that you added is basically the same, but placed one procedure higher, and removed from the lowest level line draw code. Thus, the extra overhead is only one extra procedure call. Don't you agree? Also, there needs to be a mid-level procedure anyway, as the nanogui stuff won't work with out some routines that swap x1/x2 if the line segment is right-to-left, rather than left-to-right, etc. I had to add this to get nanogui to run with the sample programs. Greg On Wednesday, May 05, 1999 1:33 PM, Alan Cox ####@####.#### wrote: > > In addition nanogui clipping support is contained in the graphics libraries. Since nanogui > > I wanted to avoid that but it has to be that low level for performance. > > > supports a C compiler. (yes, this is my real inspiration for the project, we don't need > > another X server, we need small projects that can run standalone and on top of existing > > operating systems without too much work) > > Yep > > | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
Re: nanogui development
From: ####@####.#### (Alan Cox) Date: 5 May 1999 18:52:12 -0000 Message-Id: <m10f7aB-0007TwC@the-village.bc.nu> > the clipping work that you added is basically the same, but placed one procedure > higher, and removed from the lowest level line draw code. Thus, the extra > overhead is only one extra procedure call. Don't you agree? Maybe I missed some obvious approaches. You could be right thinking about this. I was obviously asleep last time | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
RE: nanoGui development
From: Greg Haerr ####@####.#### Date: 5 May 1999 19:01:08 -0000 Message-Id: <01BE96F7.7D42A240.greg@censoft.com> > > I have had some thoughts on the best way to support graphics. I think it > would be cleanest to implement an ioctl in the dircon driver telling that > an application requires graphics so it has to save the contents of the VCs, > and disable VC switching, and writes to VCs. This then leaves a user space > vga library to do what it wants with the hardware until it has finished, > whereupon it call the driver again letting it know that the VCs should now > be restores. Putting the display hardware back into the right mode should > be the responsability of the library code. > > Sounds good. If the kernel switched modes, then printk() and other things could be stopped from trashing the screen. I also like the screen refresh being kernel's responsibility. > > o A mouse driver (this is more of a pain, we could still leave it out of the kernel) > > Could we restrict support to serial mice initially? The serial driver works > so far. Absolutely. With the new mouse driver api, a quick stub could be written for just what ELKS supports. I haven't decided who should decode the mouse stuff though. Currently, nanogui uses GPM repeater mode that allows nanogui to decode logitech style mouse codes only... > > > > > o Kernel select() support for mouse and keyboard fd's (note that we require > > tty ~ICANON raw mode. (^C signal handling would be nice to abort the server on bad errors) > > We cave non-canonical mode (try running vi), but some other term features > are still not possible. I have thought about ctrl-C (and ctrl-Z) but have > not yet come up with a way of implementing them. The only issue with ctrl-C is to get the SIGINT signal from the kernel. Do signals work now in ELKS? If so, of course the tty drivers just ksignals SIGINT. > > > > > o Nanogui uses ANSI prototypes that won't compile with bcc, unless someone > > wants my ansi modifications, I'm thinking of releasing it myself. > > Most ANSI code will compile under bcc if you use the -ansi flag. How much > do your ansi modifications do? DO they check prototypes, or just allow ANSI > code to be compiled? You would ask the hard question. No, my bcc mod doesn't yet support prototype checking, but it will compile ansi, which in certain cases, like the following code, bcc -ansi won't work: #define feof(fp) (fp->feof) int (feof)(int fd) { } The above is a obscure ansi feature that allows function names and defines to have the same name.... bcc now compiles this (which the minix libc source uses...) > > My previous experiences with ELKS have shown that portable code does not > always make it very ELKS friendly. I have often had to take code which is > easily portable, and make it very unportable to make it small enough to run > under ELKS. In an ideal world we could run nano-GUI from the standard code > base under ELKS, but it may end up being the case that a heavily modified > version of nana-gui gives much better performance under ELKS. > > Al Having spent alot of time looking at and compiling ELKS, I think I can produce a nanogui that will run without much modification. Greg > > --------------------------------------------------------------------- > To unsubscribe, e-mail: ####@####.#### > For additional commands, e-mail: ####@####.#### > > | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
Re: nanoGui development
From: ####@####.#### (Alan Cox) Date: 5 May 1999 19:03:47 -0000 Message-Id: <m10f7lJ-0007TwC@the-village.bc.nu> > could be stopped from trashing the screen. I also like the screen refresh being kernel's > responsibility. On x86 the refresh is the user space programs job. It should save/restore the text maps | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
RE: nanoGui development
From: Greg Haerr ####@####.#### Date: 5 May 1999 19:18:04 -0000 Message-Id: <01BE96F9.E1722590.greg@censoft.com> Why is that? to keep the kernel smaller? My initial idea matched with yours in that user mode should do everything. It certainly would be simpler. However, Alistair suggested the kernel should refresh... On Wednesday, May 05, 1999 1:55 PM, Alan Cox ####@####.#### wrote: > > could be stopped from trashing the screen. I also like the screen refresh being kernel's > > responsibility. > > On x86 the refresh is the user space programs job. It should save/restore the > text maps > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: ####@####.#### > For additional commands, e-mail: ####@####.#### > > | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
Re: nanoGui development
From: ####@####.#### (Alan Cox) Date: 5 May 1999 19:25:07 -0000 Message-Id: <m10f85x-0007TwC@the-village.bc.nu> > Why is that? to keep the kernel smaller? My initial idea matched with Yes. And also because you may be restoring to another graphical app.. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
RE: nanoGui development
From: Alex Holden ####@####.#### Date: 5 May 1999 19:45:11 -0000 Message-Id: <Pine.LNX.4.04.9905051452230.375-100000@hyperspace> On Tue, 4 May 1999, Greg Haerr wrote: > I thought that the GPM repeater mode took any mouse and rewrote it to Logitech > style commands, so that nanoGui has only one set of commands to parse... That's right, well mouse-systems protocol anyway. I was just saying that you could write a cut down mouse driver which did the same thing as GPM repeater mode but in much less memory. > I think there's alot of work getting a small xterm together, do you know > of any really small xterm's anywhere? No, but I was hoping it wouldn't be too difficult to do something very simple with a PTY and text output... > The window manager will have to be linked into nanoGui, and needs to draw the window > borders. I have some ideas on this. I'd like to hear them. --------------- Linux- the choice of a GNU generation. -------------- : Alex Holden (M1CJD)- Caver, Programmer, Land Rover nut, Radio Ham : -------------------- http://www.linuxhacker.org/ -------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[<<] [<] Page 2 of 3 [>] [>>] |