Proceedings of the August Be Developer Conference



August 1997 BeDC

BeOS And Printing




BENOIT SCHILLINGS: One thing we can do is answer questions about other things. I worked on the Be framework for the last 25 years. So I answer a lot of questions about that. So we aren't wasting your time.

It isn't clear what kind of condition we do. Personally I would prefer to be able to map a different work space instead of having one bitmap and a screen mapped on that, but that shouldn't be any problem. A lot of changes we need to do to get rendering of the fserver to get one to work.

One pretty exciting thing we can do is, we can do with the accelerator, we can accelerate --

A SPEAKER: 16-bit?

BENOIT SCHILLINGS: 16-bit? For you, never. 16-bits, we didn't do that. I have no idea. The goal was to get 24-bit to work properly on the Macintosh, which was interesting because if you take the original 24-bit screen of the BeBox, it was a very ambient screen.

If you want to hear a very interesting story with the screen. We put the Macintosh in 24-bit on the screen in the beginning. And then the screen arrives to the fserver after working with the Be Operating System, and the screen is little again.

Now, what is wrong with that picture? We looked and tried to get it up. And we're not done with 8-bit. Apparently, when we mapped the physical memory of the screen into the logical space, the BeMemory map, it changes, and this is not the kind that we're supposed to do for it.

For me, it is very exciting writing all that code, and yet it is changed. But -- so this is a mystery we really want to solve because we have no idea what is going on.

A SPEAKER: I can help you with that. It is the same problem -- I was doing the driver because the RGB8 order in the DR8 is a -- you needed to put in order the bits you want in there and lock it on the BeBox only. And on the Power Mac it is ARGB, regardless of what we put.

BENOIT SCHILLINGS: You can specify that for the screen, and it will slow the bytes from the convert to the orientation of the screen.

A SPEAKER: Not the kind of DR9 that I have. Video.

BENOIT SCHILLINGS: You might have to ask --

A SPEAKER: One of the problems I have, I noticed, where the API was drawing directly to the screen was because I had my byte orders backwards. Wherever the map server touched the screen directly, everything was in the correct order. And wherever the driver touched the screen, it was all swapped because of the device swapper built into the chip.

BENOIT SCHILLINGS: I got it. We ended up with the conclusion that we'll always have a problem between the graphics card, the bus and the CPU. Just try it one more time.

A SPEAKER: The trick is to turn off the swapping, depending on whether you're on one platform or the other.

BENOIT SCHILLINGS: One more minute.

A SPEAKER: Can we separate focus from depth?

BENOIT SCHILLINGS: This is done in DR9. This is the different feature. You will have to find it.

This is not a joke. The behavior of the mouse in order to focus it. And it is not the API to which you pass a flag. Now, we described it as something you should be able to find. Because the highlighting of the window doesn't change at this point. Other than that, you can focus. And I guess I've got some pressure even inside to implement it. I hate it personally.

A SPEAKER: What is the focus? That really is a different question. Because focus -- everybody hates that.

A SPEAKER: The separation of -- whether the window is on top and whether it has a focus of a few different --

A SPEAKER: You may want to click to focus but you may not have a --

A SPEAKER: You don't want the window on the top, you want it at the very bottom so you can read, you know.

BENOIT SCHILLINGS: Send me an e-mail about that. I'll forget it. All right.

We can start. I got the go-ahead from the higher authorities.

So printing. Printing is a nasty story, you know. I made a major mistake. I wrote the fserver and had a very good time doing that. This was a very tough piece of software to write. I always had the dream when I was five years old to write a Window system, and that was my chance to do it and suffer for a few years trying to implement it.

But one thing that I thought never doing the graphic environment also means that you are responsible for printing. And so Jean-Louis asked me can we print with the BeBox? The pressure went up. I tried the, for instance, strategy to avoid printing, like Be is a green company, we do not destroy trees. So that worked for a few months.

Then I tried to hire people to do it for me. But for some reason they always found some other interesting stuff to do. One day I found myself in front of the situation, well, this machine is not printing. We'd better do something. So that is why I started doing this printing architecture.

It was a first version which was released in DR8, which was the preliminary version. DR9 is probably better. Probably be a few changes based on your feedback on what's missing. I like to start things simple. Things tend to become complicated all by themselves for some odd reasons. I started simple. As many as I can put on the API, and both in the driver level. And based on the feedback, we will add some features.

So what makes a good printing architecture? From my point of view, it is to get something which is very open and flexible. There is nothing worse than doing architecture which will not be able to involve what driver will be able to write. So what does it mean? It means one good thing for me and one bad thing for you.

The good thing for me, I didn't have to put too many changes in the printing architecture itself. The bad news for you is that that means I moved quite a bit of the functionality at the driver level. Now it is not as bad as it seems, though. The HP driver that we have, which is a very simple driver, it is not as if you write for three years to get the pixels on your paper.

When I said the printing architecture, it means all the API page setups are inside the driver. The advantage of that is that you can do something which doesn't look at all like printing. It could be a fax interface. And from a user's standpoint, it will not look like printing, it will really look like the fax interface.

So let me go through my the slides. Where is the first one? I will start with that. I wrote that a long time ago.


printing and solution of driver. And actually when I call it a driver, it is an add-on in the same way you've got add-on for other components of the system, but on print driver it does many things.

And then there is the notion of the printer. These are two separate notions because printer is something which I did not write, which is outside of the computer. The driver is just a piece of software that will help you access that given printer. In that case, the printer is a configuration of the driver, which means that you will have the driver with the ability to create the configuration file which describes all the property of the -- hello?

So the driver has the ability to configure all the parameters necessary to access the printer. I'll shout.

We can configure which port to use, the parallel port or the API address. If you use a fax using the printing architecture, it could even be a phone number or the fax. The way the printer is configured for the driver is something which is totally private to the driver.

You create a file, put all the information you want into it, and the only thing that a print server needs to know is what is the name of the printer which has been configured. For the rest, you put in whatever information you want.

In the case of the HP driver, it is quite simple. There is nothing inside the configuration file. It just goes to the parallel port which is available on the old BeBox. So there is another side now which is create the spool file. You have the ability on the side because you have an interface which tells the application to create the spool file. The spool file will be taken by the print server and handed to the driver, which then will image, and on that we will speak later.

Another thing interesting is like everything on the BeBox we try to be multi-threaded. If you have three printers coming to your BeBox, your print server needs to image to those three printers simultaneously. There is really one threaded spool file. And hopefully all these things will go in the best case.

So let me show you to give you an idea what is going to happen in the presentation. We will first have a look at the client's side of the printing system, how from the application you create the spool file, how you create print, how you describe the page.

Literally, we look at the example of a printer driver to see how it is handled and received by the server side. Let's go to some code.


old application which demonstrates how the simple application handles printing. The first thing you need to do is to create a print job. The print job is the single object which is viewed during printing. There is nothing else you need to do. Just create the print job and you do everything with it.

A print job has a message internally which contains all the configuration on how printing will be done for that given printing session. That message contains some properties like the size of the paper, how much of the paper is usable, is the printer able to handle color. Those kinds of basic parameters which are useful for the server. And also a bunch of fields which are private to the driver, which I don't want to know what's in there. It could be like the quality or things that the driver wants to receive when requested to handle the spool file.

And that message is what is put in the document to specify how printing will be done for the document. Like do we want to print three copies, print in high quality or not. So the way this message handles it is quite simple.

This is my way to handle the function for the text view. The first thing I do is a set current setting. That is a field view and it is a message. If there is some set current settings, I will send back those settings to the print job by saying set settings to the current settings. Then the next thing I do is just call the add-on to configure the page. It calls the print server for the add-on. This is configuring. The ability of the config page is to change the setting at the print job level.

Now, the only thing you need to do after that, if there are some new settings, you just extract them back out of your print job and make that your setting which you will save again for your document. This is the way you pass back each time that message which handles data to be able to go back to the printer parameters and possibly modify them. It tells it to specify which size of the paper you want to use for printing after that, what quality you want, what kind of margin you want.

In this thing, you have a print setup which also calls the print set data which works the same way. The print setup will describe how this specific printing will happen. How many copies do you want, from which page to which page, those kinds of parameters. So exactly the same thing. We save those messages where the parameters are stored in the same message. Let's go to the fun part.

How do we print that text? Here I used a new version. And the first thing is how many lines do I have? What is the height of my lines? And here we create the print job. So we call this the page setup and print setup. And we are asked in the print job what is the size of the page, what is the size of the paper we'll be able to use on the single page. From there, a little bit of -- how to compute how many lines you can fit on the page. You go to the print job, let's begin printing, which creates an initialized spool set.

I call this the can continue function. It cancels the printing -- or if anything went wrong. So we would check those pages. If you ignore it, in the same way the print job will ignore you. It will let you do everything and will not print anything.

So here now we get into the middle of printing. What we do with that, what are the numbers of pages we want, we will image the draw view somewhere on the page. So this is a very important call because you need to pass to the view which can be any view of your application. It doesn't need to be a rectangle. You specify the rectangle which will be used to image that specific view and a point which specified where that subset will be positioned on the page so you can come within 50 views like this. This is really the way you print it.

Now, when you do the draw function of your view, one thing that we have is a function which is printing, which to your view, at print, it wants to know am I going to be called to print or am I being called because we are printing, which alerts you to somewhat modify the behavior based on the fact you're not printing. Maybe avoid using colors.

So let's continue. Check if we can continue with the position. A rectangle here. And we do that for the number of pages. Once we're done, we come into the job. So this is 85 lines of code for all the printing here. And in most cases, you can take that code and use it nearly as it is.

So let me show you a little example of printing to prove that the thing actually works. So let's go in and create a configuration. So I go here in my preference folder, and we want to add printer. Add printer application. And I said I want to use the PostScript driver. I set up the driver which tells us to find printers, I think.

That's bad, very bad. Well, that's life. Well, we'll try again at the end of the demo, I guess. What was the condition before?

Let's go back here. All right. Let's forget the other side of the job now. How do you write the print driver itself. What you need to do to the print driver is to implement the print driver, and we look into the source file. And we are looking at the source file to see the other end of it and describe those functions.

And the first function that will be called is -- you see the last one -- which is add printer. Add printer gives the opportunity for the driver to configure the given printer. So the only parameters which are passed is the name of the driver. That way the driver has to know what is my name today for organization issue.

The printer creates a printer entry into the secondary in the system library.

The two spools are config job and config page. Those spools are responsible for displaying the dialogue which allows you to change the parameter of the page printing and the job -- the way the job will be handled, the pre-setting which is sent back by the user and returns a BeMessage which is the new state of that configuration.

Finally, there is the call which received the spool file itself and which will be responsible for sending the actual letter to the printer.


driver and have a look at how this is handled. The sample driver, which is the HP driver, will be on the web site. You can modify it and do whatever you want with it except remove my name. No.

We also have a PostScript driver, and the features of that is not very clear. I would really like to be able to use the PostScript driver the way it is written. This is still something I'm fighting for. And let's see what goes on with that. Let's go on to the first call.

Okay. Add that printer. I have some comments in my source. So the first thing a printer does is open the status window which asks what is the name of your printer we copied, and so on. At the end, save that setup. And save setup -- yes, is here -- creates a file to the setting printer directory. Creates a file.

Here I just put a log into it so I can put anything I want. And is also responsible to attach to that printer file an attribute which will be talked about quite a bit in the new part, which specifies what the driver name is.

That field by the print server is still by that field that the print server is able to find the print error. Who is the printer. And then we can put the comments and other things like this in. This is the way you create a new printer entry. Now, let's go to the next spool.

By the way, for those who never wrote an add-on. Don't forget to export, otherwise you'll be disappointed by the results.

Go to the next one. Config page. So config page receives your printer file which was saved earlier with the BeMessage. Here which is the page setup which basically opens the dialog up and returns the message, which is the modified message, and returns it.

So that is pretty easy in the same way the config job works, exactly the same way actually for that one. And it is just different dialogues and different parameters. Let's go to the really fun one which is take job.

Take job receives a spool file, the printer and the message. Everything is done at once this time, which is my print driver object which will do the take job. Let's go to the take job. Take job and returns error if there is a problem. And handle job.

Handle job, it will actually open the spool file and starts to read the contents. I will not describe what the content of the spool file is. I think the documentation or the source code is the best way to figure it out.

To give you an idea, the spool file is composed of the following things: You first have inside the spool file a BeMessage which is the configuration for that given job, and then in there you have a page. Basically there are N pages, and then the description of the pages themselves.

Now the page itself is a collection of BPictures, which associated with BPicture is a rectangle and a point. And all you need to do is to open that file, read the message, see how many pages you have. Let's look at that here.

Okay. So I have my header in and my number of pages and I called do page. Do the do page.

Do page will read the setup of the picture, read the number of points which are the setup and do page, the number of BeRectangles, read -- read the list of pictures here. Creating them here. And we will call this the do image function. The number of pictures and list of position and the list of clips. And let's go to do image. Again we made certain there is a little bit of -- which is here to get a print -- working? No.

Do you still have the image?

So the way I do the rendering in the case of the HP printer is what I call the dumb printer case. I'll ask for another one.

The way to do it is I use three bands in the bitmap to do the imaging. That bitmap is pretty large in size and that is why, instead of doing all the rendering into a single bitmap, I will do it in three band. And the way to do it, I go to my three bands, clear my bitmap and then I call the set scale which is -- okay.

That calls -- specifies to the server in what resolution the imaging will be done. So in this case, we image in four times the dpi. That is something I picked which always looks a little bit nicer, but you can use any scaling factor here.

So I do my set scale. And all I have to do here is to go through my list of pictures, which is clipping and doing my picture here. That picture now is rendered at the resolution we specified. In this case, 300 dpi. Once this is done, I've got to --

This is a mystery to me. All I need to do is send the bitmap to the printer during all the steps. This is the structure to do the printing for the HP printer. If you want to see more detail, ask me later in the question and answer, or look at the source file on the web site. Let's go back to the slides.


Actually, I like dumb printers quite a bit because they guarantee to you to get a real match with what you have on your paper with what you've got on your screen.

Smart printers are PostScript printers. And I don't think it is a secret that I really, really dislike PostScript. There are things which you just cannot do with a PostScript printer. The good old example of that is there is no way to invert part of your image on a PostScript printer. Take a Macintosh -- I don't know what you use today, but I remember a few years ago you could draw a screen and if you tried to invert -- and you drew a screen, tried to invert something, and the inversion would come out on your PostScript printer. That is the easy way.

The printers were better. And the ultimate is a good compression. It tends to go faster also. I do not remember having any capability where the machine I was using had a CPU slower than my printer. For me, using my machine to do the rendering kind of makes sense.

In the case of the smart printer, you need to know a little bit more about what is inside the picture. The picture is a collection of verbs with some parameters. For instance, if you draw a line, you will have a verb that says draw line, with four points.

Now, when you have the smart printer like a PostScript printer, you need to parse that picture to translate into PostScript. So we have a small example of that. And that is one of the reasons we like to be able to -- to provide you with the source code of the PostScript driver. But let's see the case here.

So here we've got the case of move to two different instances which is -- remember that? The first thing we do is to extract two floats out of the picture. It is a sequential format. We offset it to a current context since a picture can be recursive. And then we image some PostScript code here, which is a specific implementation.

I do not know what specific guide is here. But this is the way you read the parameters into the picture and convert it into PostScript. And there are a whole bunch of cases like that. It is a huge big problem, frankly.

So another interesting thing that you can do if you've got a dumb printer, you can do all your rendering in 24-bit or 8-bit. If you take the PostScript printer, one of the basic problems is that those printers are black and white. The only thing they can do are patterns.

So if you do a large rendering on a PostScript printer and then you try to blend another grade, it doesn't work very well because you have lost the information about the graphic applications, and it just doesn't work.

If you use a dumb printer, the very nice thing you can do is render everything into 8-bit or 24-bit. As long as you are doing the drawing, you stay in 24-bit mode. And only at the time you want to send to the printer do you flatten that information.

Only at the time you send the data to the printer do you convert back from 24-bit to 1-bit. That gets you a really easy way to get to the transparency and things that people like to put into their web page these days. So enough bashing of PostScript. I'm not a big fan of PostScript but people seem to like it.

That was a nice slide. We can do the Q and A if you want. If you have a few questions about the details of the dumb printer or why I do not like PostScript, and I can speak more about it if you want.

A SPEAKER: The setup dialogues were nulled. Can I interrupt them in non-nullable?

BENOIT SCHILLINGS: The microphone does not work. I cannot answer that question.

Yes, the printouts at this point are nulled. Now the solution: Either for me to change it or respond to task so that your window can still handle things. The data itself, I'm certain that I have enough pressure inside me to make them really non-nullable. There is one advantage to that. Your BePrint job is synchronous. It has some advantage from a programmer's standpoint and some disadvantage. We will probably change that.

A SPEAKER: The dithering and color correction for the printout, which is part of the system, makes the job --

BENOIT SCHILLINGS: The question was for color correction and dithering where in the system is this taken care of?

Dithering is done at the driver level. In this case, I've got a dithering which is just a screen dithering which works better for me than more sophisticated things. Dithering really is something that is the responsibility of the driver.

We don't have a color matching system at this point. That is something we might have to add or do ourselves, but there is nothing in the works for it at this point. Maybe there will be some driver writer who will have the technology and be able to do a good job at that.

And often if you look at the color matching problem, it is printer specific. I played a little bit with an Epson printer and tried to do some printing, and I found it to be very, very hard. Often the technology is something which is known by the people who are printing. So right now, it is something which is the responsibility of the driver. There is nothing at the system level which will handle that.

A SPEAKER: What is the problem with putting the color of PostScript driver on the web site?

BENOIT SCHILLINGS: I just need to get authorization from my boss. That's all. I'll do my best.

A SPEAKER: On a PostScript driver, in and of itself, couldn't you do the imaging and dithering as if it were a dumb printer, Huffman it, send it down in Huffman to the laser writer as a Huffman document so you get good correction of the network, more like a NeXTBox where you let the computer do the dithering and all that neat stuff and you send the picture down with the laser writer?

Have you thought about that?

BENOIT SCHILLINGS: If I had been forced to write the PostScript driver, that is probably what I would have done. Actually, when the picture -- when you have certain things in PostScript it cannot be expressed in the current driver we're doing, that's what we referred to. For instance, we use the transference or complex blending mode. There is just no way to express it in PostScript.

In that case we use the PostScript driver as a dumb printer. I don't know what compressions are standard in the PostScript printer but often the problem is that that approach takes a little bit of time to transfer over the network.

There is no compression available. I'm not certain that there is something standard in PostScript. Also PostScript printers are sometimes a little bit slow to handle the change of the work for printers. It tends to reduce a little bit the speed of printing. I have no problem with that solution.

A SPEAKER: Another question if I could. Faxes are unusual in that they're 200 dpi in one direction and 198 dpi in the other direction. So -- and then there is high res and low res.

I notice in your example that you set scale in only one direction. Can I set scale in both horizontal and vertical?

BENOIT SCHILLINGS: No. Right now there is no separate scale for horizontal and vertical.

A SPEAKER: Are you planning on doing low res faxing and high res faxing?

BENOIT SCHILLINGS: If I do it, I would render it first then sample with the BeBox printer. That will work between -- I don't think we have a plan to get a separate resolution for both axes. Unless we see a lot of request for that, that is not something we will do.

A SPEAKER: You are going to find a lot of printers that actually have rectangular pixels, not square pixels.

BENOIT SCHILLINGS: Okay. Thank you.

A SPEAKER: Is there any way for an application to insert PostScript into the drawings so that, for example, you can image the dps into a PostScript printer?

BENOIT SCHILLINGS: In the current API there is not. The reason for that is there are a lot of dumb printers which would not be able to handle it. That's something we spoke about. Once again, that is something we will do by demand. If we see people request it quite a bit, a little bit like the infamous Macintosh. We may have something of that kind in the current release.

There are people who are very much against the idea and some people who are very much for the idea. I'm still looking at the direction of the wind on that one.

A SPEAKER: Along the lines -- sorry, I missed the beginning of your talk. Maybe you covered this already. But with the printer driver architecture, is there a way to go around the printer architecture and just dump raw data to a printer? Not inside of a document like he was asking but --

BENOIT SCHILLINGS: Nothing prevents you from doing that. If the driver is busy, fine. In the same way, there is nothing which prevents you to use the AppleTalk for PostScript printers and send them some data.

There is nothing really that helps you to identify all the printers available on the machine because you will need the driver for it.

A SPEAKER: Right. Okay.

BENOIT SCHILLINGS: That's something initially -- we tried to get a printing generator architecture and asked some specifics about printers which are very popular.

A SPEAKER: Okay.

BENOIT SCHILLINGS: Yes?

A SPEAKER: What sort of transport do you provide, like Ethernet, parallel? How do you get to the printers?

BENOIT SCHILLINGS: I'm not certain I got your question. Let me tell you if I got it right: Is the print server providing the transport layer?

A SPEAKER: To the printer over the network or parallel printer.

BENOIT SCHILLINGS: No. Once again, this is something which is very specific to what printer you will use. So if you start to put it at the print server level some transport layer, it is pretty hard to know what you will have in the future.

So right now, we set it to provide some easy API to access the driver network or to access the parallel port or serial port, and then get it handled by the print driver itself.

One thing we spoke about was to get something a little bit more modular. You have a print server, print driver and transport layer. And that might be in the evolution we do for the next release. Right now, first thing is to get it done and push that for specifically on the driver.

A SPEAKER: So basically it means if you have an HP printer on your machine and an API printer on the network, it takes two drivers?

BENOIT SCHILLINGS: You're absolutely correct.

A SPEAKER: Unless one driver that can do both?

BENOIT SCHILLINGS: Yes.

A SPEAKER: Up to the driver.

BENOIT SCHILLINGS: Yes. I told you, I pushed those on the responsibility at the driver level. We'll see where we go from there. Any other questions?

A SPEAKER: I ran out to get that package when you talked about banding. Could you go back to that slide where -- talk about -- where you showed the code for banding.

BENOIT SCHILLINGS: Sure.

So we will go through the three-band bit here, bitmap. I set my scale for a 4X72 dpi scale. In going through my list of pictures, I will scale the position of my clip here. I will create a clipping region and set the clipping region to that rectangle we specified and I will set that picture at the given position in my bitmap. And what I will do with it, I offset the vertical position -- where is that -- okay.

A SPEAKER: You're not --

BENOIT SCHILLINGS: I'm not? Yes, I am. Here.

A SPEAKER: Okay. So you just picked three bands for this because --

BENOIT SCHILLINGS: This is a sample driver. This is the very initial driver I did to set the architecture. I know there are some people from HP in the room which knows infinitely more about those printer drivers than I do. But this driver, mostly it was to show the thing was working. Here you cannot use different scaling, for instance. The scaling is fixed on this driver.

A SPEAKER: What sort of support --

BENOIT SCHILLINGS: I'm sorry. I didn't hear the question.

A SPEAKER: Do you provide support or utilize specific PPDs in your PostScript drivers?

BENOIT SCHILLINGS: The PostScript driver access is a list of PPDs which describes the pages. So when you create a PPD with the driver, you must use the network driver with the PPD file and the driver is taking advantage at that point of the PPD file.

Any other questions? I guess we're done.

A SPEAKER: How do you select the depth in the rendering when you are drawing banding like that?

BENOIT SCHILLINGS: In this case, in the case of the HP driver, I do my rendering in N-bit mostly for memory reason. Then I map black from that into the RGB space, then I do grey scale from that. This is something where maybe if you have saturated color, you might want to map them to black. But that is the decision right now which is taking some intensity. So if you get some blue text, it will be -- eight-bit seems to be sufficient for most purposes, but you can use 24-bit.

A SPEAKER: But there is a way when you -- the view that you create to render --

BENOIT SCHILLINGS: Oh, yes. Let me show you here.

This is the place where I created bitmap. I used the banding, which is 2400 pixels in size. And then I had access to do the dithering. It could very well take the 24-bit screen to do that.

A SPEAKER: And the 2400 pixels is four times 72 times the page width?

BENOIT SCHILLINGS: Yes. Another question?

A SPEAKER: The -- if you want to do something like a PostScript driver or a PCL driver, you need to be able to parse the basic drawing?

BENOIT SCHILLINGS: Yes.

A SPEAKER: Those are in the spool file?

BENOIT SCHILLINGS: Yes. Basically the spool file contains that area of pages and area of picture. One thing I've done, I've done an abstract parse for the picture which is not right now in the current DR9 release because we have a few things to change on it. But you can override a whole bunch of those functions with that parser, and override that if you access to the data searcher.

The PostScript driver we've got right now here has its own switch statement between the parsing itself and will do the parsing. Otherwise, there is no problem for me to give the source file which describes all the parameters. That is a bad description.

A SPEAKER: What do you really mean by a spool file? Can you be more specific?

BENOIT SCHILLINGS: That's a difficult question. A spool file is a file which contains what information recorded to print all the pages to be part of the print session.

A SPEAKER: Basically this means that you cannot get responses from the printer while you're printing?

BENOIT SCHILLINGS: I'm sorry?

A SPEAKER: The printing is one way? You cannot have a dialogue with the printer?

BENOIT SCHILLINGS: No. Asynchronous. The different port is -- like the config page, are old code done at very different time. There is no instance where your printer driver will stay between those calls. That is why we've got this message which is used to keep that context from one code to another.

But since printing is spool and printing that especially doesn't occur as you see it print from your application. You need to store that information somewhere into that spool file which would be handled later, like an hour later.

I can very well imagine an instance with a fax driver where you can say at what time the fax is to go. It could go three days after you print it. All these things are stored in the spool file.

A SPEAKER: Can I delete a spool file?

BENOIT SCHILLINGS: Yes, by all means. You go into system spool and you can do a setting to delete them. Actually, there are a bunch of fields which give you the status of the spool file. Is it busy, is it waiting, did it fail. Those kinds of things.

It is not clear what kind of user needs there are for spool management. But right now you cannot use spool management just by using the tracker. You use your spool directory and you see your spool file. And it states the name of the job and printer to go to and so on. You can delete them. No problem.

A SPEAKER: So the entire job is spooled before the print driver sees it so there is no N-parallel operation?

BENOIT SCHILLINGS: Absolutely. The spooling process itself is independent from the driver. This is something which is only an interaction between the kit and the fserver. Of course, associated with that, there is the message which described the configuration which was specified by the print driver, but all those things are totally uncoupled.

A SPEAKER: And the print driver configuration, if an application knows what resolution it is going to be rendered in, it can ask what the dpi resolution of the device is?

BENOIT SCHILLINGS: Yes. There is a bunch of fields in the messages that needs to be filled in. That is part of the definition of the print driver. You have the paper size, the physical size of the paper, do you use both sides, does it handle color. Those kinds of parameters. We will do parameters later as people request. I don't have a solution. That is a good idea to add for DR9.

A SPEAKER: What about for roll-fed devices? Is there -- like in a roll-fed device, any one of the large plotters or something that is going to plot 15, 20 feet long.

BENOIT SCHILLINGS: Yes.

A SPEAKER: Sometimes you can say, well, my paper size is as big as a this, like an image, but with banding you can, depending on the device, you can just run the thing until it runs out of paper.

BENOIT SCHILLINGS: Well --

A SPEAKER: It sounds like a strange question, but I come from an engineering background where generating a 15-foot plot out of a CAD program is not unusual.

BENOIT SCHILLINGS: To be honest with you, I did not look at that.

A SPEAKER: A fax machine, also.

BENOIT SCHILLINGS: Well, a fax machine could describe itself as a US letter size, for instance. I would expect the fax driver would say I'm using a page size which is a given length and not pretend the page is three miles long.

A SPEAKER: I've written a bunch of fax drivers. And one of the things people want is the ability to send a four-foot wide fax so they can send a giant spreadsheet or happy birthday and send it out as a fax.

BENOIT SCHILLINGS: Well --

A SPEAKER: Engineering faxes that will fax a 34-foot piece of paper.

BENOIT SCHILLINGS: The way this is handled, it is at the page setup level that you specify your page is very long. At the page setup level, you can say I want to print the fax and that fax is five miles long. And the application will ask, what is the size of the page: It is eight inches by five miles long. And then the application will say, oh, great. And we've got to coordinate the system so you can actually describe that kind of coordinate without any problem, even at 600 dpi.

A SPEAKER: Float or double?

BENOIT SCHILLINGS: Float. Single float.

A SPEAKER: When you think about this, you have a 600 dpi device and a 90-foot roll of paper. It is a big number.

BENOIT SCHILLINGS: Yes. I do not know how far the float will bring you to 300 dpi.

A SPEAKER: You will not exceed the position of the float there. In five miles you will, though.

BENOIT SCHILLINGS: All right. We found the limits of printing there.

A SPEAKER: One of the things that we like -- that our customers like to do is to be able to have a fax server, where one machine has a modem on it so everybody sends faxes.

One of the problems we have on Macintosh and Windows machines is that that means you have to have every possible known typeface that anybody in the company could use on the server because the spool file does not actually contain the typeface itself.

Is there a chance with this architecture that we can move typefaces in the spool file, and when we send it over to the RIP, raster in-processor, that we can actually get the data there, or do we have the same chicken and egg, all the possible typefaces have to go on the server?

BENOIT SCHILLINGS: Right now you cannot add typefaces to the spool file. That is a good comment. Something I will look into because that makes sense to me, too.

A SPEAKER: So let the driver insert data?

BENOIT SCHILLINGS: Yes. The driver is to add an arbitrary amount of data to the spool file.

A SPEAKER: Does it do it automatically?

BENOIT SCHILLINGS: Because there might be other things. They might be a picture sent to the machine, and who knows what.

A SPEAKER: If you have a true type rasterizer on the system, you will be just generating a bitmap. I don't see -- it's irrelevant. You've already -- you don't have to worry about typeface. It is already built into the bitmap.

BENOIT SCHILLINGS: No. In this case what they want to be able to do is to move around the spool files themselves which are much, much smaller than the rasterized version. Both approaches will work.

No question from the left?

Let's run the demo again. Never give up. I must say I'm very ashamed it did not work. I tested it before the presentation and everything was working beautifully. If it doesn't work, I'll show you some spinning teapots.

Did you ever try running those things when the technician is there? They become so upset, it's amazing.

A SPEAKER: You switch out and back.

BENOIT SCHILLINGS: That is a little strange. I'm color blind. That is why I did the graphics system. Everything was gray scale on the first BeBox.

Printer, select the PostScript driver. Is that printer on?

I got the printer configured before. Let's try that and see where we go. Let's go inside of it. Type something big. And it tried to print that. Page setup. US letter. This is the page configuration data. What now?

This is not print related. I'm sorry. Get it as well as you can. I'm nearly done. That is the best you can get?

All right. So page setup. Let's use some US letter. This information here is coming out on the PPD file. Okay. Print everything. Okay. This is on the spool file. Very quick. If the gods are with me, we should have some paper coming out of that thing. It will. Trust me.

A SPEAKER: Is the print server working?

BENOIT SCHILLINGS: I think the network is broken. I think there is a problem with the network. I'm very sorry not to give a convincing demo. Something is messed up at the driver level -- or at the network level.

A SPEAKER: What drivers are supported -- what drivers are you planning on shipping with your release?

BENOIT SCHILLINGS: The PostScript and HP driver. The HP driver is kind of useless on the Macintosh.

A SPEAKER: Are those important third-party opportunities, or are you going to give Apple to us and six months later you will come out with them as well?

BENOIT SCHILLINGS: Personally, I don't think I will write many printer drivers. So if this is my choice, I will give all the source code for the driver which is PostScript and HP, and if you want a chance to do that. I don't think Be will decide to go into the printer driver market. I see that opportunity as a third-party opportunity.

Well, I hoped to give you a better demo. We will try a little bit later or when we have some time. But something is wrong, since we can't use the printer.

Thank you very much.



Transcription provided by:
Pulone & Stromberg
160 West Santa Clara St.
San Jose, California
408.280.1252

Home | About Be | Be Products | BeWare | Purchase | Events | Developers | Be User Groups | Support


Copyright ©1997 Be, Inc. Be is a registered trademark, and BeOS, BeBox, BeWare, GeekPort, the Be logo and the BeOS logo are trademarks of Be, Inc. All other trademarks mentioned are the property of their respective owners.
Comments about this site? Please write us at webmaster@be.com.
Icons used herein are the property of Be Inc. All rights reserved.