Received: from jimi.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id aa01923; 26 Dec 96 23:10 PST To: jay@JIMI.CS.UNLV.EDU Subject: bug-chimera may 96 Date: Thu, 26 Dec 1996 23:10:47 -0800 From: Jay Nietling ------- Forwarded Messages Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa14264; 30 Apr 96 15:17 PDT Received: from kroete2.freinet.de (arh166.ppp.uni-c.dk [130.228.13.166]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id AAA21151 for ; Wed, 1 May 1996 00:17:00 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uENhb-0003mzC; Wed, 1 May 96 00:15 MET DST Message-Id: Subject: Jumping to anchors To: Chimera Hacker List Date: Wed, 1 May 1996 00:15:22 +2600 (MET DST) Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS , but can be attached to anything, not just an has been added, because it wasn't much more work. If the anchor you are jumping to is very near the end of the doc, Chimera jumps twice. Once to place the anchor at the top of the page, and once to put the bottom of the doc at the bottom of the page. I'm not sure whether this is what people want. I think some beginners find it very confusing if an application allows you to scroll the document so far that the last line is off the top of the page. Worse, is the situation where you press 'back' to a URL with an anchor. Chimera will first scroll to the position of the anchor, and then scroll to the place you were when you pressed back. Probably in this case the anchor should be ignored, but it's a little module-crossing since it is the widget and not the HTML code that does the back-scroll-to-the-right- place trick. You'll find the patch on https://inet.uni-c.dk/~ehcorry/chimera/ There you'll find: option_patch.patch Render popup-options correctly patch for 108 return_patch.patch Let's you press return to submit a form. 108-3.patch More fixes to forms (not announced to the list before) 108-4.patch This one (#xxx patch). These patches are cumulative, ie. I don't know whether they work out of order. - -- Erik Corry ehcorry@inet.uni-c.dk https://inet.uni-c.dk/~ehcorry/ ------- Message 2 Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa18101; 30 Apr 96 17:03 PDT Received: from kroete2.freinet.de (arh125.ppp.uni-c.dk [130.228.13.125]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id CAA29773 for ; Wed, 1 May 1996 02:03:40 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uEPMp-0003kJC; Wed, 1 May 96 02:02 MET DST Message-Id: Subject: Oops To: Chimera Hacker List Date: Wed, 1 May 1996 02:02:02 +0200 (MET DST) Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS name = value; Sorry, - -- Erik Corry ------- Message 3 Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa10195; 1 May 96 14:44 PDT Received: from kroete2.freinet.de (arh136.ppp.uni-c.dk [130.228.13.136]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id XAA15959; Wed, 1 May 1996 23:44:22 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uEjfW-0003l4C; Wed, 1 May 96 23:42 MET DST Message-Id: Subject: Plugins To: Chimera Hacker List Date: Wed, 1 May 1996 23:42:41 +0200 (MET DST) Cc: Mark Podlipec , "Derek B. Noonburg" Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS ; Wed, 1 May 96 22:12:44 -0400 (EDT) Message-Id: Date: Wed, 1 May 96 22:12:20 -0400 (EDT) From: Smarasderagd To: bug-chimera@cs.unlv.edu, ehcorry@inet.uni-c.dk Subject: Re: Plugins >Now all I want is an embedded version of vi, so I can edit the text >fields properly :-) I rather miss Chimera's old behaviour of firing up an external viewer for non-inline non-html objects. I wouldn't mind being able to use an arbitrary external program to edit text fields, either. ------- Message 5 Received: from halloran-eldar.lcs.mit.edu by JIMI.CS.UNLV.EDU id aa14123; 4 May 96 2:35 PDT Received: from freefall.FreeBSD.ORG by halloran-eldar.lcs.mit.edu; (5.65/1.1.8.2/19Aug95-0530PM) id AA16972; Sat, 4 May 1996 05:35:27 -0400 Received: from vector.jhs.no_domain (slip139-92-42-152.ut.nl.ibm.net [139.92.42.152]) by freefall.freebsd.org (8.7.3/8.7.3) with ESMTP id CAA17177 Sat, 4 May 1996 02:34:51 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by vector.jhs.no_domain (8.7.3/8.6.9) with SMTP id BAA05971; Fri, 3 May 1996 01:47:31 +0200 (MET DST) Message-Id: <199605022347.BAA05971@vector.jhs.no_domain> X-Authentication-Warning: vector.jhs.no_domain: Host localhost [127.0.0.1] didn't use HELO protocol To: Erik Corry Cc: Chimera Hacker List , Mark Podlipec , "Derek B. Noonburg" Subject: Re: Plugins From: "Julian H. Stacey" Reply-To: "Julian H. Stacey" Organization: Vector Systems Ltd. Address: Holz Strasse 27d, 80469 Munich, Germany Phone: +49.89.268616 Fax: +49.89.2608126 (pending modem change) Web: https://www.freebsd.org/~jhs/ Mailer: EXMH version 1.6.5 95 12 11, PGP available In-Reply-To: Your message of "Wed, 01 May 1996 23:42:41 +0200." Date: Fri, 03 May 1996 01:47:31 +0200 Sender: jhs@vector.jhs.no_domain Hi, Reference: > From: Erik Corry > > Now all I want is an embedded version of vi, so I can edit the text > fields properly :-) I have patches to vi & chimera so that I can run an xterm adjacent to chimera, & each time I type a :w in vi, th adjacent chimera automatically does a redisplay. In fact I also have patches for ghostview for same purpose. The whole thing runs on FreeBSD The patches are available to be incorporated by authors of chimera, vi & ghostview, (& have been for maybe 6 months, but I guess they're all busy people :-) > > -- > Erik Corry echorry@inet.uni-c.dk https://inet.uni-c.dk/~ehcorry/ > Julian - -- Julian H. Stacey jhs@freebsd.org https://www.freebsd.org/~jhs/ ------- Message 6 Received: from ttmath.ttu.edu by JIMI.CS.UNLV.EDU id aa28769; 5 May 96 9:59 PDT Date: Sun, 5 May 1996 11:59:50 -0500 (CDT) From: Jake Kesinger To: Bug-Chimera Subject: Problem with large images (108) Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII I'm not sure exactly how to explain this, take a look at https://www.math.ttu.edu/~kesinger/chimera/xcol.html If an image is loaded directly (i.e. not inlined) that is too large for the display, 108 doesn't have any scrollbars or anything to view the part of the image outside the display. Also, is anyone having trouble looking at the PNG test suite off of https://quest.nasa.jpl.gov/PNG/ ? (In fact, I can hardly get any non-trivial PNG images to come up). 108 dumps with either a segfault, Bus error, or floating exception. (I'm using libpng0.88 and zlib1.0). --Jake _ Jake Kesinger (kesinger@math.ttu.edu), Outrageous Liar LUBBOCK -> _|*~- https://www.math.ttu.edu/~kesinger/ \, _} ``It's a damn poor mind that can only think of one way \( to spell a word.'' (Andrew Jackson) ------- Message 7 Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa02185; 5 May 96 15:39 PDT Received: from kroete2.freinet.de (arh164.ppp.uni-c.dk [130.228.13.164]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id AAA02001 for ; Mon, 6 May 1996 00:39:05 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uGCQh-0003jjC; Mon, 6 May 96 00:37 MET DST Message-Id: Subject: Re: Problem with large images (108) To: Chimera Hacker List Date: Mon, 6 May 1996 00:37:25 +0200 (MET DST) In-Reply-To: from "Jake Kesinger" at May 5, 96 11:59:50 am Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS Also, is anyone having trouble looking at the PNG test suite off of > https://quest.nasa.jpl.gov/PNG/ ? https://quest.jpl.nasa.gov/PNG/ Yes. - -- Erik Corry ehcorry@inet.uni-c.dk ------- Message 8 Received: from iguana.reptiles.org by JIMI.CS.UNLV.EDU id aa04184; 5 May 96 19:52 PDT Received: by iguana.reptiles.org (/\##/\ Smail3.1.30.13 #30.5) id ; Sun, 5 May 96 22:52:28 -0400 (EDT) Message-Id: Date: Sun, 5 May 96 22:52:20 -0400 (EDT) From: Smarasderagd To: bug-chimera@cs.unlv.edu, kesinger@math.ttu.edu Subject: Re: Problem with large images (108) The PNG problems may be due to structure layout disagreements between libpng and chimera. You may want to check that the two have the same size for "png_struct". I've also run across a problem which seems to hang chimera when loading a large image from a local file. ------- Message 9 Received: from ttmath.ttu.edu by JIMI.CS.UNLV.EDU id aa16949; 6 May 96 12:31 PDT Date: Mon, 6 May 1996 14:31:13 -0500 (CDT) From: Jake Kesinger To: Bug-Chimera Subject: Sorry, my fault (re: PNG) In-Reply-To: Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Sun, 5 May 1996, Jake Kesinger wrote: > Also, is anyone having trouble looking at the PNG test suite off of > https://quest.nasa.jpl.gov/PNG/ ? > (In fact, I can hardly get any non-trivial PNG images to come up). > 108 dumps with either a segfault, Bus error, or floating exception. > (I'm using libpng0.88 and zlib1.0). Sorry, sorry, sorry. My fault all along. One of my header files from libpng was bad. It seems to work now. Thanks for your patience. ------- Message 10 Received: from citi.umich.edu by JIMI.CS.UNLV.EDU id aa14624; 7 May 96 17:55 PDT Received: from citi.umich.edu by citi.umich.edu for bug-chimera@cs.unlv.edu with SMTP; Tue, 07 May 96 20:54:39 -0400 From: Jim Rees To: Chimera Lovers Date: Tue, 07 May 1996 20:54:39 -0400 Subject: Re: Jumping to anchors Sender: rees@citi.umich.edu In-Reply-To: Erik Corry, Wed, 01 May 1996 00:15:22 If the anchor you are jumping to is very near the end of the doc, Chimera jumps twice. Once to place the anchor at the top of the page, and once to put the bottom of the doc at the bottom of the page. I'm not sure whether this is what people want. I think some beginners find it very confusing if an application allows you to scroll the document so far that the last line is off the top of the page. Since no one else has spoken out against this... In this case it's harmless, in fact it's probably the right thing. But I really hate scroll implementations (like Motif) that scroll by different amounts based on whether or not you are about to scroll past end-of-document. When I scroll a page, my eye jumps to where I expect the next line of text will appear after the scroll. If the scroll widget normally scrolls by a half page (or full page or whatever), I find it extremely annoying when it only scrolls by a few lines simply because I've reached the end of the document. If you really must put in a scroll limit so as not to confuse newbies, put the limit at the last line of the document, not the last full page. At least this way it's clear what happened, and I won't waste time looking for the line of text I just finished reading. Also, the scrolling amount should be configurable. I like to scroll by half pages, but some people prefer scrolling by full pages, or full pages minus a line. Whatever. Make it configurable. ------- Message 11 Received: from x400gate.bnr.ca by JIMI.CS.UNLV.EDU id aa21375; 8 May 96 5:51 PDT X400-Received: by mta bnr.ca in /PRMD=BNR/ADMD=TELECOM.CANADA/C=CA/; Relayed; Wed, 8 May 1996 08:50:57 -0400 X400-Received: by /PRMD=BNR/ADMD=TELECOM.CANADA/C=CA/; Relayed; Wed, 8 May 1996 08:50:19 -0400 X400-Received: by /PRMD=BNR/ADMD=TELECOM.CANADA/C=CA/; Relayed; Wed, 8 May 1996 08:50:00 -0400 Date: Wed, 8 May 1996 08:50:00 -0400 X400-Originator: /dd.id=0201342/g=raymond/i=re/s=marshall/@bnr.ca X400-MTS-Identifier: [/PRMD=BNR/ADMD=TELECOM.CANADA/C=CA/;bcars520.b.162:08.04.96.12.50.19] X400-Content-Type: P2-1984 (2) Content-Identifier: Re: Jumping t... From: "raymond (r.e.) marshall" Sender: "raymond (r.e.) marshall" Message-ID: <"1195 Wed May 8 08:50:25 1996"@bnr.ca> To: bug-chimera@cs.unlv.edu Subject: Re: Jumping to anchors Would it be so difficult to make the scrolling method a user selectable option? Like, by page, by half page, bottom line moved to top of page, bottom two lines moved to top of page, full page (no line shown twice). As for the double jump at the end of documents, that is only mildly annoying to me. My personal preference would be a single jump, that puts the last line of the document at the bottom of the window. Upon reflection, these seem like rather small concerns -- "back burner" issues. (Just my personal opinion...) / Ray - --------------------------------------+--------------------------------- Raymond E. Marshall | My opinions are not necessarily NorTel, Customer Service | endorsed by my employer, etc. RTP NC, USA 919-992-4731 Alternate access: raym@vnet.net ------- Message 12 Received: from convex.convex.com by JIMI.CS.UNLV.EDU id aa22629; 8 May 96 8:04 PDT Received: from mikey.convex.com by convex.convex.com (8.6.4.2/1.35) id KAA20863; Wed, 8 May 1996 10:04:54 -0500 Received: by mikey.convex.com (8.6.12/1.28) id KAA19786; Wed, 8 May 1996 10:04:22 -0500 From: David DeSimone Message-Id: <199605081504.KAA19786@mikey.convex.com> Subject: Re: Jumping to anchors To: Chimera Bug List Date: Wed, 8 May 1996 10:04:21 -0500 (CDT) Reply-To: David DeSimone X-Mailer: ELM [version 2.4 PL24 PGP6] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Length: 909 Jim Rees wrote: > > I really hate scroll implementations (like Motif) that scroll by > different amounts based on whether or not you are about to scroll past > end-of-document. As long as we're putting in our two cents, I'll raise my paw and say that I prefer the opposite behavior. I find it annoying when a document scrolls its bottom window edge. As my engineering buddy from long back would say, "Well, if we can't decide which way it should be, then it'll have to be configurable." Then I would grumble because I had to write the code both ways AND allow some sort of option setting between the two... :) - -- David DeSimone | "The doctrine of human equality reposes on this: fox@convex.hp.com | that there is no man really clever who has not Hewlett-Packard | found that he is stupid." -- Gilbert K. Chesterson Convex Tech Ctr | PGP: 5B 47 34 9F 3B 9A B0 0D AB A6 15 F1 BB BE 8C 44 ------- Message 13 Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa02745; 8 May 96 16:51 PDT Received: from kroete2.freinet.de (arh134.ppp.uni-c.dk [130.228.13.134]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id BAA23655; Thu, 9 May 1996 01:51:41 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uHIza-0003l4C; Thu, 9 May 96 01:50 MET DST Message-Id: Subject: Text scrolling left and right To: Chimera Hacker List Date: Thu, 9 May 1996 01:50:02 +0200 (MET DST) Cc: John Kilburg Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS + +#if XtSpecificationRelease >= 5 +# define HAVE_PORTHOLE +#endif + #include #include #include @@ -26,6 +31,12 @@ #include #include +#ifdef HAVE_PORTHOLE +# include +#else +# include +#endif + #include "MxwText.h" #include "html.h" @@ -48,6 +59,9 @@ bool added; struct FormStateP *fs; + /* Text stuff */ + Widget text; + /* select stuff */ bool multi; /* multi-select? */ struct OptionP *olist; /* option list */ @@ -230,14 +244,14 @@ if (xi->id == INPUT_TEXT || xi->id == INPUT_PASSWORD) { names[i] = n; - - values[i] = MxwGetText(xi->w); + values[i] = MxwGetText(xi->text); if (values[i] != NULL) values[i] = MPStrDup(mp, values[i]); i++; } else if (xi->id == INPUT_TEXTAREA) { names[i] = n; - - values[i] = MxwGetText(xi->w); + values[i] = MxwGetText(xi->text); if (values[i] != NULL) values[i] = MPStrDup(mp, values[i]); i++; } @@ -602,6 +616,83 @@ } } +/* + * key_pressed_work_proc + * + * Does the stuff to make sure the cursor is visible + */ +static Boolean +key_pressed_work_proc( + XtPointer client_data) +{ + Widget w = (Widget)client_data; + Widget sink = NULL; + Widget scroll = XtNameToWidget(XtParent(w), "horizontal"); + + XtVaGetValues(w, XtNtextSink, &sink, NULL); + if (sink != NULL) + { + Dimension viewport_width; + Dimension text_width; + Position text_widget_posn; + XRectangle rect; + float tp; + int t; + + XawTextSinkGetCursorBounds(sink, &rect); + XtVaGetValues(XtParent(w), XtNwidth, &viewport_width, NULL); + XtVaGetValues(w, XtNx, &text_widget_posn, XtNwidth, &text_width, NULL); + if(text_widget_posn > (t = - rect.x + viewport_width - rect.width) || + text_widget_posn < (t = - rect.x)) + { + /* + * Cursor is not visible, t is the new window posn needed. + * + * Perhaps you think I should be using XtSetValues or + * XawScrollbarSetThumb or even XtMakeGeometryRequest to move the thumb + * Nothing works, except this, which seems totally backwards to me. + * There is XawViewportSetCoordinates, but that's new since X11R4. + */ + tp = ((float)-t) / ((float)text_width); + if (scroll != NULL) + XtCallCallbacks(scroll, XtNjumpProc, (XtPointer)(&tp)); + else + { + XtWidgetGeometry gr, gr2; + gr.x = t; + gr.request_mode = CWX; + if (XtMakeGeometryRequest(w, &gr, &gr2) == XtGeometryAlmost) + XtMakeGeometryRequest(w, &gr2, NULL); + } + } + } + /* + * Only call once! + */ + return(True); +} + +/* + * key_pressed_in_text + * + * Whenever a key is pressed, the cursor may be moved. So we + * have to check the position and scroll the window to make sure + * the cursor stays visible. But at the time of the Event, the cursor + * may well not yet have been moved. So we schedule a work procedure, + * which will be dealt with after the cursor movements have been done. + */ +static void +key_pressed_in_text( + Widget w, + XtPointer client_data, + XEvent *event, + Boolean *coninue_to_displatch) +{ + XtAppAddWorkProc(XtWidgetToApplicationContext(w), key_pressed_work_proc, + (XtPointer)w); +} + + static XtActionsRec textActionsList[] = { { "chimeraFormReturnAction", (XtActionProc)ChimeraFormReturnAction }, @@ -620,6 +711,7 @@ int type; { Widget w; + Widget text; int width, height; XFontStruct *font; char *value; @@ -640,12 +732,31 @@ echo = True; } - - w = MxwCreateText(name, li->w, echo); + w = XtVaCreateWidget( + "viewport", +#ifdef HAVE_PORTHOLE + portholeWidgetClass, +#else + panedWidgetClass, +#endif + li->w, + XtNborderWidth, 0, + XtNwidth, 10, + XtNheight, 10, + NULL); + + text = XtVaCreateManagedWidget(name, asciiTextWidgetClass, w, + XtNeditType, XtEtextEdit, + XtNecho, echo, + XtNresize, True, + NULL); + + XtAddEventHandler(text, KeyPressMask, False, key_pressed_in_text, 0); if(!chimera_form_return_action_registered) { chimera_form_return_action_registered=true; - - XtAppAddActions(XtWidgetToApplicationContext(w), + XtAppAddActions(XtWidgetToApplicationContext(text), textActionsList, XtNumber(textActionsList)); } @@ -653,16 +764,16 @@ { value = alloc_string(value); HTMLStringSpacify(value, strlen(value)); - - MxwSetText(w, value); + MxwSetText(text, value); free_mem(value); } else { - - MxwSetText(w, ""); + MxwSetText(text, ""); } - - if ((font = MxwGetTextFont(w)) == NULL) height = 20; - - else height = font->ascent + font->descent + 5; + if ((font = MxwGetTextFont(text)) == NULL) height = 20; + else height = font->ascent + font->descent + 25; /* Addition by LRD. tweaked to john's weird style */ if ((value = MLFindAttribute(p, "size")) != NULL) { @@ -678,13 +789,14 @@ rp = CreateInputState(fs, p, width, height, type); ci = (InputState *)HTMLRPState(rp); ci->w = w; + ci->text = text; - - XtOverrideTranslations(w, XtParseTranslationTable + XtOverrideTranslations(text, XtParseTranslationTable ("Return: chimeraFormReturnAction()")); - - XtOverrideTranslations(w, XtParseTranslationTable + XtOverrideTranslations(text, XtParseTranslationTable ("Tab: chimeraFormTabAction()")); - - XtAddCallback(XawTextGetSource(w), XtNcallback, (XtCallbackProc)FormCallback, + XtAddCallback(XawTextGetSource(text), XtNcallback, (XtCallbackProc)FormCallback, (XtPointer)rp); return(rp); @@ -905,6 +1017,7 @@ MLElement p; bool end; { + Widget text; FormState *fs; InputState *ci; int width, height; @@ -933,14 +1046,30 @@ { tatext = ""; } - - w = XtVaCreateWidget("textarea", - - asciiTextWidgetClass, li->w, + + w = XtVaCreateWidget( + "viewport", + viewportWidgetClass, + li->w, + XtNallowVert, false, + XtNallowHoriz, true, + XtNforceBars, true, + XtNuseBottom, true, + XtNwidth, 10, + XtNheight, 10, + NULL); + + text = XtVaCreateManagedWidget("textarea", + asciiTextWidgetClass, w, XtNeditType, XtEtextEdit, XtNstring, tatext, XtNecho, True, + XtNresize, True, NULL); - - - - XtVaGetValues(w, XtNfont, &font, NULL); + + XtAddEventHandler(text, KeyPressMask, False, key_pressed_in_text, 0); + + XtVaGetValues(text, XtNfont, &font, NULL); if (font == NULL) height = 20; else height = font->ascent + font->descent + 2; width = XTextWidth(font, "X", 1); @@ -964,6 +1093,7 @@ rp = CreateInputState(fs, fs->tap, width, height, INPUT_TEXTAREA); ci = (InputState *)HTMLRPState(rp); ci->w = w; + ci->text = text; fs->tap = NULL; } - -- Erik Corry ehcorry@inet.uni-c.dk ------- Message 14 Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa04069; 8 May 96 18:06 PDT Received: from kroete2.freinet.de (arh129.ppp.uni-c.dk [130.228.13.129]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id DAA26900; Thu, 9 May 1996 03:06:11 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uHK9h-0003kJC; Thu, 9 May 96 03:04 MET DST Message-Id: Subject: Hold that patch To: Chimera Hacker List Date: Thu, 9 May 1996 03:04:33 +0200 (MET DST) Cc: John Kilburg Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS To: bug-chimera@cs.unlv.edu Subject: LessTif version of Chimera? Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII In case you haven't been following the development of LessTif, the GNU project to develop a free Motif clone, lots of progress has been made recently. Version 0.50 is available at: ftp://ftp.hungry.com/pub/hungry/lesstif/lesstif-0.50.tar.gz There are deficiencies in the Text widget that would prevent forms from working properly at the moment (soon to me remedied), but Erik Corry first brought this up and I thought that we'd bring it up for general discussion on the list: What about a LessTif version of Chimera? There are the obvious implications with respect to code size, but the more sophisticated toolkit would have possibilities... Rob - -- Rob McMullen https://www.ae.utexas.edu/~rwmcm Freeware Xt Widgets (available on home page): SciPlot, ListTree, TextField Member, LessTif core team (XmTextField & XmText) https://www.hungry.com:8000 Water is life! Texas Aquatics Masters, Austin, TX ------- Message 16 Received: from xph029.physics.montana.edu by JIMI.CS.UNLV.EDU id aa07408; 8 May 96 22:35 PDT Received: from xph036.physics.montana.edu (michael@xph036.physics.montana.edu [153.90.240.200]) by xph029.physics.montana.edu (8.6.12/8.6.9) with ESMTP id XAA01434; Wed, 8 May 1996 23:34:13 -0600 Received: from localhost (michael@localhost) by xph036.physics.montana.edu (8.6.12/8.6.12) with SMTP id XAA00322; Wed, 8 May 1996 23:30:26 -0600 X-Authentication-Warning: xph036.physics.montana.edu: michael owned process doing -bs Date: Wed, 8 May 1996 23:30:23 -0600 (MDT) From: Michael Kellen To: Rob McMullen cc: bug-chimera@cs.unlv.edu Subject: Re: LessTif version of Chimera? In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 8 May 1996, Rob McMullen wrote: > There are deficiencies in the Text widget that would prevent forms from > working properly at the moment (soon to me remedied), but Erik Corry first > brought this up and I thought that we'd bring it up for general > discussion on the list: What about a LessTif version of Chimera? I'm against it. The whole point is NOT to bloat up. Or require yet-another-gods-bedamned-dynamic-library-much-less-a-static-one. And I don't want to even think about using an incomplete toolkit like lesstif when we generate enough segfaults on our own. Michael Kellen {delay inline release RealSoonNow!!} ------- Message 17 Received: from iguana.reptiles.org by JIMI.CS.UNLV.EDU id aa07920; 8 May 96 23:30 PDT Received: by iguana.reptiles.org (/\##/\ Smail3.1.30.13 #30.5) id ; Thu, 9 May 96 02:30:51 -0400 (EDT) Message-Id: Date: Thu, 9 May 96 02:30:43 -0400 (EDT) From: Smarasderagd To: michael@xph029.physics.montana.edu, rwmcm@hydra.ae.utexas.edu Subject: Re: LessTif version of Chimera? Cc: bug-chimera@cs.unlv.edu I'm not really against a new widget set. Motif is nice if you want to take your hand off the mouse for any length of time, and there are still serious bugs in athena. Chimera probably isn't a good choice for a trial run, though. NCSA Mosaic seems like a better candidate for LessTif, if it hasn't been considered already. Chimera has wandered rather far from being even a typical athena application, much less a Motif one. ------- Message 18 Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa09989; 9 May 96 2:24 PDT Received: from kroete2.freinet.de (arh147.ppp.uni-c.dk [130.228.13.147]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id LAA29828 for ; Thu, 9 May 1996 11:24:14 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uHRve-0003l5C; Thu, 9 May 96 11:22 MET DST Message-Id: Subject: Re: LessTif version of Chimera? To: Chimera Hacker List Date: Thu, 9 May 1996 11:22:34 +0200 (MET DST) Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS On Wed, 8 May 1996, Rob McMullen wrote: > > > There are deficiencies in the Text widget that would prevent forms from > > working properly at the moment (soon to me remedied), but Erik Corry first > > brought this up and I thought that we'd bring it up for general > > discussion on the list: What about a LessTif version of Chimera? > > I'm against it. The whole point is NOT to bloat up. Or require > yet-another-gods-bedamned-dynamic-library-much-less-a-static-one. > And I don't want to even think about using an incomplete toolkit like > lesstif when we generate enough segfaults on our own. There's no reason at all why Lesstif should be static. I can believe that Lesstif will be larger than Athena or Athena 3d, but I'm rapidly coming to the conclusion that Athena is a toy, a demo. It's not really the sort of thing you want to base a serious product on. The contorsions I had to go through to get the text widget to scroll horizontally (take a look at the patch) are not nice at all, and as I mentioned, text selection still won't work right. Similar contorsions will probably be needed to implement mouse-less use, something that is being seen as more and more important. The Swedish health-and-safety- at-work organisation TCO (responsible for the strict monitor radiation emmision standards) are talking about eliminating the mouse alltogether due to irresolvable ergonomic problems. This is something that Windows has taken more seriously up till now that X programmers. I know people who use Windows every day without a mouse! By the way, here's a tip I don't think most people know: Shift-Insert will insert the current mouse selection into an X-term. This is _much_ faster than taking your fingers off the keyboard to insert with the middle button of the mouse. Doesn't work for Chimera yet... The real solution would be to rewrite the text widget. Or adapt Rob's single line text widget to do multiline, but that's plain ridiculous, because then we'd be duplicating almost exactly the work Rob is doing to integrate his text widget into Lesstif. But perhaps we can go for a completely different solution that reduces points of contact with the toolkit altogether. I'm thinking that the top row of buttons plus the URL should be rendered as HTML. You would have something like:
The lib: protocol would be a variation of the file: protocol that looks up the file in Chimera's lib directory, and the chimera: protocol would be a special pseudo-protocol that makes the correct action happen. This would make the toolbar nicely extensible, (we could add some sort of variation on multiple selects for drop-down command menus) with things like the HTML3 link= stuff, etc. It's the way UdiWWW does it (https://www.uni-ulm.de/~richter/udiwww/), and I think it makes sense. In this scheme, popup windows would be small HTML windows too: Downloading cfh130-2.0.tar.gz

Downloading /usr/users/erik/cfh130-2.0.tar.gz

Perhaps we should save both ideas for after 2.0 is out. I see that Lesstif are working on a GNATS-WWW interface so you can report and process bug reports with a browser. This looks like a really good idea. Perhaps we can have their code when it's working. I think we could do with a central bugs-repository to make sure they all get splatted before the release. Here's my current list of issues (you can add most of the things Michael posted in his last test-results post): XMP doesn't work (deprecated, but...) EG: https://home.netscape.com/eng/mozilla/2.0/handbook/plugins/ht1.html Problem with lists not being closed properly? EG: https://developer.netscape.com/standards/index.html POST method for forms EG: Add a new film to the Internet Movie Database. Text mode still has display bugs. EG: See https://www.jclark.com/spam.txt 'No host name found' EG: https://www.mca.com/universal_pictures/12/phase1/prison_bed.html click on airplane Page-reload-link-back goes back to original page, not the reloaded one Implicit

and

not being handled EG: https://www.infoweb.dk/biografnet/index.cgi/aarhus_bifhtml2graphics.html only the top heading (Biografprogram i ...) should be centred, the rest should be left aligned. Text selection in HTML window This is very important for usability. Accellerators for keyboard scrolling, etc. This is very important for usability. Various image problems I guess this is my dept. There's also the problem of img's where the image comes back with the wrong content-type. The problem is that 'other leading browsers' ignore the content-type for img's and just look at the magic number. That means it works for incorrectly set up web sites, and unfortunately (as a consequence!) there are quite a lot of these. This one may not really be soluble. An example is the large image at the top of the page on: https://www.mca.com/universal_pictures/12/index.html By the way, I don't want to sound negative: I think Chimera is really becoming very nice to use. It just still has a lot of rough edges. Here as promised is the patch (108-7.patch) to make the horizontally scrolling text widgets work without crashing. As usual you apply it by placing yourself in the top directory (the one with the README in it) and typing patch -p1 < 108-7.patch It goes in after the one I sent last night. diff -u -r --exclude-from exclusions cfh108-2.0-erik6/html/form.c cfh108-2.0-erik7/html/form.c - --- cfh108-2.0-erik6/html/form.c Thu May 9 11:01:29 1996 +++ cfh108-2.0-erik7/html/form.c Thu May 9 11:00:00 1996 @@ -61,6 +61,7 @@ /* Text stuff */ Widget text; + XtWorkProcId wp_id; /* select stuff */ bool multi; /* multi-select? */ @@ -617,6 +618,22 @@ } /* + * text_destroy_callback + * + * The text widget has been destroyed - remove any pending work procs + */ +static void +text_destroy_callback( + Widget w, + XtPointer client_data, + XtPointer widget_data) +{ + InputState *ci = (InputState *)client_data; + if (ci->wp_id != 0) XtRemoveWorkProc(ci->wp_id); + ci->wp_id = 0; +} + +/* * key_pressed_work_proc * * Does the stuff to make sure the cursor is visible @@ -625,10 +642,14 @@ key_pressed_work_proc( XtPointer client_data) { - - Widget w = (Widget)client_data; + InputState *ci = (InputState *)client_data; + Widget w = ci->text; Widget sink = NULL; Widget scroll = XtNameToWidget(XtParent(w), "horizontal"); + XtRemoveCallback(w, XtNdestroyCallback, text_destroy_callback, client_data); + ci->wp_id = 0; + XtVaGetValues(w, XtNtextSink, &sink, NULL); if (sink != NULL) { @@ -688,8 +709,13 @@ XEvent *event, Boolean *coninue_to_displatch) { - - XtAppAddWorkProc(XtWidgetToApplicationContext(w), key_pressed_work_proc, - - (XtPointer)w); + InputState *ci = (InputState *)client_data; + + if (ci->wp_id != 0) return; + ci->wp_id = XtAppAddWorkProc( + XtWidgetToApplicationContext(w), key_pressed_work_proc, + (XtPointer)ci); + XtAddCallback(w, XtNdestroyCallback, text_destroy_callback, (XtPointer)ci); } @@ -751,8 +777,6 @@ XtNresize, True, NULL); - - XtAddEventHandler(text, KeyPressMask, False, key_pressed_in_text, 0); - - if(!chimera_form_return_action_registered) { chimera_form_return_action_registered=true; @@ -791,6 +815,9 @@ ci->w = w; ci->text = text; + XtAddEventHandler(text, KeyPressMask, False, key_pressed_in_text, + (XtPointer)ci); + XtOverrideTranslations(text, XtParseTranslationTable ("Return: chimeraFormReturnAction()")); XtOverrideTranslations(text, XtParseTranslationTable @@ -1067,8 +1094,6 @@ XtNresize, True, NULL); - - XtAddEventHandler(text, KeyPressMask, False, key_pressed_in_text, 0); - - XtVaGetValues(text, XtNfont, &font, NULL); if (font == NULL) height = 20; else height = font->ascent + font->descent + 2; @@ -1095,6 +1120,9 @@ ci->w = w; ci->text = text; + XtAddEventHandler(text, KeyPressMask, False, key_pressed_in_text, + (XtPointer)ci); + fs->tap = NULL; } - -- Erik Corry ehcorry@inet.uni-c.dk ------- Message 19 Received: from hydra.ae.utexas.edu by JIMI.CS.UNLV.EDU id aa17175; 9 May 96 10:16 PDT Received: by hydra.ae.utexas.edu; id AA00514; Thu, 9 May 1996 12:16:04 -0500 Date: Thu, 9 May 1996 12:16:04 -0500 (CDT) From: Rob McMullen To: bug-chimera@cs.unlv.edu Subject: Re: LessTif version of Chimera? In-Reply-To: Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 9 May 1996, Erik Corry wrote: > Michael Kellen wrote: > > I'm against it. The whole point is NOT to bloat up. Or require > > yet-another-gods-bedamned-dynamic-library-much-less-a-static-one. > > And I don't want to even think about using an incomplete toolkit like > > lesstif when we generate enough segfaults on our own. > > There's no reason at all why Lesstif should be static. (LessTif is shared on most platforms, even Linux-aout and AIX, which are tricky.) I hate code bloat as much as probably every user on this list, but if a Motif interface would be useful shouldn't we consider it? I find Motif apps much more convenient than Athena, and computers should be all about our convenience. How about something as simple as a menubar with a history list? Mo/LessTif is of course larger than Athena, but if you use even one other Motif app, you'll have most of the Motif code loaded as shared already. Why not use it? Granted, LessTif is incomplete and does have problems yet to be sorted out. An amazing amount does work, however. I use it almost exclusively now to develop demo programs for my freeware widgets. Demo != major application, but now is the time to start thinking about things if we are going to consider a LessTif version. > I can believe that Lesstif will be larger than Athena or Athena 3d, but > I'm rapidly coming to the conclusion that Athena is a toy, a demo. It's > not really the sort of thing you want to base a serious product on. I agree completely. There is no comparison between the usability and consistency of the two user interfaces. Don't laugh, but I have actually seen people who couldn't figure out an Athena scrollbar without help! Given two versions of the same app, the Motif version is virtually always going to be preferred. I realize that the goals of Chimera aren't to be Netscape, but will the use of Athena prevent it from becoming accepted as a browser for the average user? I think that it might. Rob - -- Rob McMullen https://www.ae.utexas.edu/~rwmcm Freeware Xt Widgets (available on home page): SciPlot, ListTree, TextField Member, LessTif core team (XmTextField & XmText) https://www.hungry.com:8000 Water is life! Texas Aquatics Masters, Austin, TX ------- Message 20 Received: from hydra.ae.utexas.edu by JIMI.CS.UNLV.EDU id aa17299; 9 May 96 10:19 PDT Received: by hydra.ae.utexas.edu; id AA00527; Thu, 9 May 1996 12:19:41 -0500 Date: Thu, 9 May 1996 12:19:40 -0500 (CDT) From: Rob McMullen To: bug-chimera@cs.unlv.edu Subject: Re: LessTif version of Chimera? In-Reply-To: Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 9 May 1996, Smarasderagd wrote: > NCSA Mosaic seems like a better candidate for LessTif, if it hasn't > been considered already. Yep, FYI Mosaic and xmcd are the 2 big apps that probably get the most attention from the core team. We have an additional big ol' list of complicated programs with which to test, but those two are the main test apps. Rob - -- Rob McMullen https://www.ae.utexas.edu/~rwmcm Freeware Xt Widgets (available on home page): SciPlot, ListTree, TextField Member, LessTif core team (XmTextField & XmText) https://www.hungry.com:8000 Water is life! Texas Aquatics Masters, Austin, TX ------- Message 21 Received: from igw2.merck.com by JIMI.CS.UNLV.EDU id aa19066; 9 May 96 11:36 PDT Received: from igw2.merck.com; Thu, 9 May 1996 14:33:55 -0400 Message-Id: <199605091833.OAA27390@igw2> Received: from mailhost.merck.com(54.3.1.99) by ngatekeeper.merck.com via smap (g3.0.1) id sma027331; Thu, 9 May 96 14:33:47 -0400 From: Anthony Starks Subject: Chimera Java Port? To: bug-chimera@cs.unlv.edu Date: Thu, 9 May 1996 14:28:49 -0400 (EDT) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Length: 331 Has anyone considered porting the guts of chimera to Java? We could let AWT handle the UI (no more discussion of Mo/Lesstif vs Athena :) A java chimera would also be instantly portable to other platforms as well. And finally, the totally modular browser that I've always invisioned would be easier to realize. - -- Anthony ------- Message 22 Received: from cerebro.snm.com by JIMI.CS.UNLV.EDU id aa19560; 9 May 96 11:59 PDT Received: from mageworks.snm.com.snm.com (mageworks.snm.com [204.245.164.3]) by cerebro.snm.com (8.6.9/8.6.9) with ESMTP id PAA02340; Thu, 9 May 1996 15:00:12 -0400 Received: from localhost by mageworks.snm.com.snm.com (SMI-8.6/SMI-SVR4) id OAA02099; Thu, 9 May 1996 14:57:13 -0400 Date: Thu, 9 May 1996 14:57:13 -0400 (EDT) From: Ben Taylor Reply-To: Ben Taylor To: Rob McMullen cc: bug-chimera@cs.unlv.edu Subject: Re: LessTif version of Chimera? In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 9 May 1996, Rob McMullen wrote: > I hate code bloat as much as probably every user on this list, but if a > Motif interface would be useful shouldn't we consider it? I find Motif apps > much more convenient than Athena, and computers should be all about our > convenience. How about something as simple as a menubar with a history list? How about something that runs fast. I *tried* emacs with the motif interface. It was so incredibly slow, that I went back to the Athena widgets. We're talking Sparc 10/ multiple processors/ 80 Mb of memory. We're talking about orders of magnitude in speed using Motif vs Athena. I hate using Netscape for the same basic reason. (I'll use it, but I don't have to like it.) It's slow. The file browser is incredibly misconfigured. Not that Chimera has a file browser for saving or loading files, but thats another subject. > > I can believe that Lesstif will be larger than Athena or Athena 3d, but > > I'm rapidly coming to the conclusion that Athena is a toy, a demo. It's > > not really the sort of thing you want to base a serious product on. > > I agree completely. There is no comparison between the usability and > consistency of the two user interfaces. Don't laugh, but I have actually > seen people who couldn't figure out an Athena scrollbar without help! It's pretty obtuse. > Given two versions of the same app, the Motif version is virtually always > going to be preferred. I realize that the goals of Chimera aren't to be > Netscape, but will the use of Athena prevent it from becoming accepted as > a browser for the average user? I think that it might. For the average user? It's got a ways to go (No offense John or anyone working on it - Thanks) before it's prime-time. I doubt Athena has as much to do with it, as the level of functionality does. Now don't get me wrong. There are several things I'd like to see really improved. But for the quick preview aspect and fast rendering, it really can't be beat. I don't want Chimera to lose that feature. > Rob Ben Taylor bent@snm.com ------- Message 23 Received: from citi.umich.edu by JIMI.CS.UNLV.EDU id aa19552; 9 May 96 12:00 PDT Received: from citi.umich.edu by citi.umich.edu for bug-chimera@cs.unlv.edu with SMTP; Thu, 09 May 96 14:56:12 -0400 From: Jim Rees To: Chimera Lovers Date: Thu, 09 May 1996 14:56:11 -0400 Subject: Re: LessTif version of Chimera? Sender: rees@citi.umich.edu In-Reply-To: Rob McMullen, Thu, 09 May 1996 12:16:04 CDT Given two versions of the same app, the Motif version is virtually always going to be preferred. By you, but not by me. I have many reasons for preferring athena apps, but the biggest right now is that all the apps I use are athena or athena-like (xmh, xterm, xrn, emacs) and I don't want two different interfaces on one screen. I realize that the goals of Chimera aren't to be Netscape, but will the use of Athena prevent it from becoming accepted as a browser for the average user? I think that it might. One of the biggest advantages of chimera is that it's easy to build. If it depends on some other package like lesstif, and I can't get that package to build easily, then I will search for another browser. ------- Message 24 Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa20694; 9 May 96 12:57 PDT Received: from kroete2.freinet.de (arh139.ppp.uni-c.dk [130.228.13.139]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id VAA19871 for ; Thu, 9 May 1996 21:56:59 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uHbnv-0003l5C; Thu, 9 May 96 21:55 MET DST Message-Id: Subject: Re: Chimera Java Port? To: Chimera Hacker List Date: Thu, 9 May 1996 21:55:12 +0200 (MET DST) In-Reply-To: <199605091833.OAA27390@igw2> from "Anthony Starks" at May 9, 96 02:28:49 pm Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS Has anyone considered porting the guts of > chimera to Java? We could let AWT handle > the UI (no more discussion of Mo/Lesstif vs Athena :) The impression I get is that AWT isn't really ready for big programs yet. > A java chimera would also be instantly portable to > other platforms as well. True, but basically it wouldn't be Chimera any more. I don't think you'd be able to reuse much of the code at all. > And finally, the totally modular browser that I've > always invisioned would be easier to realize. Chimera already is pretty modular - have you taken a look at the innards? How about the other way around: Java as a plug-in, either using the Netscape API or another if that proves inadequate. Ought to be doable, and it has the great advantage that it takes no memory at all so long as you're not on a page with any applets. I imagine something that uses dynamic loading, but perhaps a two-process solution would be possible too. Also remember that Java is interpreted at the moment on just about all platforms. That doesn't smell like performance to me. There's a freeware dynamic Java compiler project called Kaffee, but all I know is the name and that it's somehow going to be part of the Jolt project. There's a page on it at https://speedy.redhat.com/jolt/ that I never got time to check out. - -- Erik Corry ehcorry@inet.uni-c.dk ------- Message 25 Received: from xph029.physics.montana.edu by JIMI.CS.UNLV.EDU id aa23139; 9 May 96 14:25 PDT Received: from localhost (michael@localhost) by xph029.physics.montana.edu (8.6.12/8.6.9) with SMTP id PAA05049 for ; Thu, 9 May 1996 15:24:06 -0600 Date: Thu, 9 May 1996 15:24:03 -0600 (MDT) From: Michael Kellen Reply-To: Michael Kellen To: Chimera Hacker List Subject: Re: LessTif version of Chimera? In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII I started with: > > > yet-another-gods-bedamned-dynamic-library-much-less-a-static-one. Erik Corry missed my point: > > There's no reason at all why Lesstif should be static. As did Rob McMullen: > (LessTif is shared on most platforms, even Linux-aout and AIX, which are > tricky.) So obviously I should have been more clear. :-) LessTif would have to be available as a static lib for those who compile the binaries for distribution. Because not everyone has LessTif. Not everyone wants it, or has room for it. Everyone has Xaw if they have X. Nothing annoys me more than trying to compile up some app only to find that to do so I have to go grab eighty Megs worth of other crap. Hell, the PNG and JPEG stuff would irritate me if I HAD to have it. Since I already *had* them, No Big Deal. And LessTif JustAin'tStable. It's cloning a widget set that has its own bugs and segfaults, and incompletely at that. Bad, bad, evil, evil. One set of alpha code at a time, please. (Java is a worse idea until some SERIOUS security issues are resolved!). Michael (opinionated) Kellen PS, John -- could you update https://www.isri.unlv.edu/~john/chimera/src/ ? I'd like to be able to work on the latest code too. :-) ------- Message 26 Received: from igw2.watson.ibm.com by JIMI.CS.UNLV.EDU id aa23832; 9 May 96 15:04 PDT Received: from hawpub.watson.ibm.com (hawpub.watson.ibm.com [9.2.90.19]) by igw2.watson.ibm.com (8.7.4/8.7.1) with SMTP id SAA04811; Thu, 9 May 1996 18:04:09 -0400 Received: by hawpub.watson.ibm.com (AIX 3.2/UCB 5.64/4/8/96) id AA34407; Thu, 9 May 1996 18:03:53 -0400 From: Uri Blumenthal Message-Id: <9605092203.AA34407@hawpub.watson.ibm.com> Subject: Re: LessTif version of Chimera? To: Jim Rees Date: Thu, 9 May 1996 18:03:53 -0400 (EDT) Cc: bug-chimera@cs.unlv.edu In-Reply-To: <199605092017.QAA07704@igw2.watson.ibm.com> from "Jim Rees" at May 9, 96 02:56:11 pm Reply-To: uri@watson.ibm.com X-Mailer: ELM [version 2.4 PL25] Content-Type: text Jim Rees says: > Given two versions of the same app, the Motif version is virtually always > going to be preferred. > > By you, but not by me. I have many reasons for preferring athena apps, but > the biggest right now is that all the apps I use are athena or athena-like.... I personally don't care - I can [and do] live with both Motif and Athena applications on my machine, and they coexist quite peacefully with each other. I did spend money and bought a "real" [i.e. - working] Motif-2.0 code... > I realize that the goals of Chimera aren't to be Netscape, but will > the use of Athena prevent it from becoming accepted as a browser......? > > One of the biggest advantages of chimera is that it's easy to build. If it > depends on some other package like lesstif, and I can't get that package to > build easily, then I will search for another browser. I strongly second this. It is a great advantage of Chimera that it does not require other packages. If it required Motif, I'd be able to live with it, as I happen to have Motif installed. If it's LessTif or similar package that's "almost-compatible" - I'd simply not bother... Please, KISS. I.e. Keep It SIMPLE. - -- Regards, Uri uri@watson.ibm.com - -=-=-=-=-=-=- ------- Message 27 Received: from hydra.ae.utexas.edu by JIMI.CS.UNLV.EDU id aa24133; 9 May 96 15:19 PDT Received: by hydra.ae.utexas.edu; id AA00665; Thu, 9 May 1996 17:19:56 -0500 Date: Thu, 9 May 1996 17:19:55 -0500 (CDT) From: Rob McMullen To: bug-chimera@cs.unlv.edu Subject: Re: LessTif version of Chimera? In-Reply-To: <9605092005.AA18866@orion.ae.utexas.edu> Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 9 May 1996, Jim Rees wrote: > Given two versions of the same app, the Motif version is virtually always > going to be preferred. > > By you, but not by me. I have many reasons for preferring athena apps, but > the biggest right now is that all the apps I use are athena or athena-like > (xmh, xterm, xrn, emacs) and I don't want two different interfaces on one > screen. Obviously the same argument could be made for having all Motif apps. But, for you and others, a big drawing card of Chimera was its Athena interface. That is something we have to consider. > One of the biggest advantages of chimera is that it's easy to build. If it > depends on some other package like lesstif, and I can't get that package to > build easily, then I will search for another browser. I'm the same way; I always groan when a package requires me to download and configure another library. But, believe me, major effort has been put into making LessTif easy to build. 2MB of library source compiles without even a single *warning* on most machines. Noone is going to consider me unbiased here, but consistency of user interface is important. There are advantages to both, but for better or worse the future is moving to Motif. As long as nobody suggests XForms, we're safe. :) Rob - -- Rob McMullen https://www.ae.utexas.edu/~rwmcm Freeware Xt Widgets (available on home page): SciPlot, ListTree, TextField Member, LessTif core team (XmTextField & XmText) https://www.hungry.com:8000 Water is life! Texas Aquatics Masters, Austin, TX ------- Message 28 Received: from hydra.ae.utexas.edu by JIMI.CS.UNLV.EDU id aa24434; 9 May 96 15:24 PDT Received: by hydra.ae.utexas.edu; id AA00673; Thu, 9 May 1996 17:24:12 -0500 Date: Thu, 9 May 1996 17:24:12 -0500 (CDT) From: Rob McMullen To: bug-chimera@cs.unlv.edu Subject: Re: LessTif version of Chimera? In-Reply-To: Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 9 May 1996, Ben Taylor wrote: > I hate using Netscape for the same basic reason. (I'll use it, but I > don't have to like it.) It's slow. It is a given that Motif is slower than Athena. No doubt about that. But how much of the slowdown is due to Motif, and how much is Netscape itself? Netscape is HUGE, and there just isn't that much UI interaction for Motif to be the cause of the bottlenecks. (Emacs is emacs. In whatever UI incarnation, nobody would accuse it of being fast. That the Athena version is much faster than Motif...who knows? Maybe the supporting code is slow.) > For the average user? It's got a ways to go (No offense John or anyone > working on it - Thanks) before it's prime-time. I doubt Athena has as > much to do with it, as the level of functionality does. Sure, it's still alpha code, but who knows how Athena has affected the development path of Chimera. (Well, I suppose John knows... :) > Now don't get me wrong. There are several things I'd like to see really > improved. But for the quick preview aspect and fast rendering, it really > can't be beat. I don't want Chimera to lose that feature. Neither do I. But, how much of that is speed due to Athena, and how much is due to John's WWW widget? Replacing the Athena Scrollbar with a Motif one isn't going to noticably affect the rendering times. So: is it Athena that sets Chimera apart or is it speed? I've seen plenty of fast Motif apps, and as I've beaten to death in this post, I don't believe the UI will have much to do at all with the future speed of a Motif-ied Chimera. Rob - -- Rob McMullen https://www.ae.utexas.edu/~rwmcm Freeware Xt Widgets (available on home page): SciPlot, ListTree, TextField Member, LessTif core team (XmTextField & XmText) https://www.hungry.com:8000 Water is life! Texas Aquatics Masters, Austin, TX ------- Message 29 Received: from hydra.ae.utexas.edu by JIMI.CS.UNLV.EDU id aa25644; 9 May 96 16:21 PDT Received: by hydra.ae.utexas.edu; id AA00714; Thu, 9 May 1996 18:21:55 -0500 Date: Thu, 9 May 1996 18:21:54 -0500 (CDT) From: Rob McMullen To: bug-chimera@cs.unlv.edu Subject: Re: LessTif version of Chimera? In-Reply-To: Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 9 May 1996, Michael Kellen wrote: > LessTif would have to be available as a static lib for those who compile > the binaries for distribution. Because not everyone has LessTif. Not > everyone wants it, or has room for it. Everyone has Xaw if they have X. Not strictly true -- AIX, for instance. It was distributed on my box here at work as an optional package that I had to build myself. Not that it was a chore to compile, but neither is LessTif. It is certainly true that Xaw is freely available for all platforms that support X, though. > Nothing annoys me more than trying to compile up some app only to find > that to do so I have to go grab eighty Megs worth of other crap. Hell, > the PNG and JPEG stuff would irritate me if I HAD to have it. Since I > already *had* them, No Big Deal. I would imagine that when LessTif is complete, it would be distributed as libXm.a by those package vendors that don't have a license for Motif. (Most Linux distributions, and I assume FreeBSD as well.) If you needed Motif for something else, why wouldn't you grab LessTif and compile it? Just like PNG and JPEG, you would already have that around just waiting for LessTif-Chimera. :) I imagine that Chimera wouldn't be the first thing that a user would need Motif for, nor would it be the last. > And LessTif JustAin'tStable. True enough, but it will be. But, a LessTif Chimera isn't available today, either. Gotta plan before attempting. > It's cloning a widget set that has its own bugs and segfaults, and > incompletely at that. It isn't "incompletely" cloning Motif, but the chimera list isn't the place for than discussion. Rob - -- Rob McMullen https://www.ae.utexas.edu/~rwmcm Freeware Xt Widgets (available on home page): SciPlot, ListTree, TextField Member, LessTif core team (XmTextField & XmText) https://www.hungry.com:8000 Water is life! Texas Aquatics Masters, Austin, TX ------- Message 30 Received: from homesick.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id aa28629; 9 May 96 19:49 PDT Received: from cygnus.com by HOMESICK.CS.UNLV.EDU id aa11746; 9 May 96 19:42 PDT Received: from tweedledumb.cygnus.com (tweedledumb.cygnus.com [192.80.44.1]) by cygnus.com (8.6.12/8.6.9) with SMTP id TAA14689; Thu, 9 May 1996 19:41:36 -0700 Received: from maneki-neko.cygnus.com by tweedledumb.cygnus.com (4.1/4.7) id AA24612; Thu, 9 May 96 22:41:29 EDT Received: by maneki-neko.cygnus.com; (8.7.5/1.1.8.2/20Sep95-0235PM) id WAA24817; Thu, 9 May 1996 22:41:26 -0400 Sender: eichin@cygnus.com To: Rob McMullen Cc: bug-chimera@cs.unlv.edu Subject: Re: LessTif version of Chimera? References: From: Mark Eichin Date: 09 May 1996 22:41:25 -0400 In-Reply-To: Rob McMullen's message of Thu, 9 May 1996 18:21:54 -0500 (CDT) Message-Id: Lines: 20 X-Mailer: September Gnus v0.78/Emacs 19.30 > Not strictly true -- AIX, for instance. It was distributed on my box here > at work as an optional package that I had to build myself. Not that it HP/UX likewise -- there are two ways to get Xaw for HP/UX: 1) build it yourself from the net 2) buy the "X terminal" package, for a couple of thousand dollars, which supports using X terminals off an HP server (and includes Xaw because xdm uses it, or something like that.) Nonetheless, the issue is that Athena widgets are ugly, but (pretty much) available. LessTif is ugly too (sorry, guys, that's what you *get* when you clone Motif :-) but will probably end up shipping on most free-unix systems once it works well enough to build Mosaic... I guess I don't see what's the value of a lesstif-chimera; chimera is *small* and no-frills; if you want a *tif browser, use mosaic... Of course, if John wants to experiment seperating the html and http parts of chimera from the UI, then lesstif could be a good choice for an *alternate* UI, just as interviews or OI would be... ------- Message 31 Received: from hydra.ae.utexas.edu by JIMI.CS.UNLV.EDU id aa06334; 10 May 96 7:27 PDT Received: by hydra.ae.utexas.edu; id AA01072; Fri, 10 May 1996 09:27:47 -0500 Date: Fri, 10 May 1996 09:27:47 -0500 (CDT) From: Rob McMullen To: bug-chimera@cs.unlv.edu Subject: Re: LessTif version of Chimera? In-Reply-To: Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 9 May 1996, Mark Eichin wrote: > if John wants to experiment seperating the html and http parts > of chimera from the UI, then lesstif could be a good choice for an > *alternate* UI, just as interviews or OI would be... Obviously people are attached to Athena, and I'm not suggesting that John devote his time to UI issues rather than the HTML parser. My opinion is that a Mo/LessTif interface is essential for Chimera to be taken seriously in the future, but *Tif development by others as an alternate UI may be the only way to go for now. Rob - -- Rob McMullen https://www.ae.utexas.edu/~rwmcm Freeware Xt Widgets (available on home page): SciPlot, ListTree, TextField Member, LessTif core team (XmTextField & XmText) https://www.hungry.com:8000 Water is life! Texas Aquatics Masters, Austin, TX ------- Message 32 Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa04031; 12 May 96 13:57 PDT Received: from kroete2.freinet.de (arh135.ppp.uni-c.dk [130.228.13.135]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id WAA27550 for ; Sun, 12 May 1996 22:57:27 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uIiBC-0003pNC; Sun, 12 May 96 22:55 MET DST Message-Id: Subject: A moving target? To: Chimera Hacker List Date: Sun, 12 May 1996 22:55:45 +0200 (MET DST) Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS , applets, scripts, and a few other bits of the HTML 3.0 proposal. A lot of the HTML 3.0 proposal (including maths) didn't make it, and is being worked on, presumably for HTML 4.0. You can see more on https://www.w3.org/pub/WWW/MarkUp/Activity and on https://www.w3.org/pub/WWW/MarkUp/Wilbur/. There's a DTD, but there doesn't seem to be a nice non-SGML-wizards- version of it, like there was for HTML 3.0 (accesible through my homepage). Of course, we still have to get HTML 2.0 working, though I don't think I'm the only one who finds the temptation to start fiddling with post-2.0 stuff almost irresistable. Is 3.2 a realistic goal for Chimera 2.0, or should we settle for HTML 2.0, clean up the usability a little and get the damn thing released? The only thing you need to be able to do with applets and scripts for HTML 3.2 is to ignore them by the way. - -- Erik Corry ehcorry@inet.uni-c.dk ------- Message 33 Received: from homesick.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id aa12430; 13 May 96 8:20 PDT Received: from isy.liu.se by HOMESICK.CS.UNLV.EDU id aa18664; 13 May 96 8:18 PDT Received: from dtr.isy.liu.se (dtr.isy.liu.se [130.236.20.22]) by isy.liu.se (8.7.5/8.7.3) with SMTP id RAA10163; Mon, 13 May 1996 17:16:56 +0200 (MET DST) Received: from ladon.isy.liu.se by dtr.isy.liu.se (4.1/SMI-4.1) id AA03881; Mon, 13 May 96 17:16:53 +0200 Message-Id: X-Mailer: XFMail 0.4-alpha [p0] on SunOS Sender: jj@ladon.isy.liu.se Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Mime-Version: 1.0 In-Reply-To: Date: Mon, 13 May 1996 17:07:18 +0200 (MET DST) Organization: =?iso-8859-1?Q?Link=F6ping?= University From: Jean-Jacques Moulis To: Erik Corry Subject: RE: More patches for forms Cc: Chimera Hacker List On 28-Apr-96 Erik Corry wrote: >>Here are some more forms patches for handling forms in Chimera 108. ..... >3) It's nice to be able to submit by pressing return in a text input > element. This now works if there's only one submit button and only > one (one-line) text input element in the form. This is quite a large > part of the patch (in html/form.c). .... >Erik Corry ehcorry@inet.uni-c.dk I applied the patch, it works for GET but generate an error on the server with POST. - ---------------------------------------------------------------------------- Jean-Jacques Moulis Tel: (013) 281684 ISY Fax: (013) 281339 Linkvping Universitet E-mail: jj@isy.liu.se 581 83 Linkvping www.dtr.isy.liu.se/dtr/staff/jj ------- Message 34 Received: from xph029.physics.montana.edu by JIMI.CS.UNLV.EDU id aa23279; 13 May 96 16:24 PDT Received: from localhost (michael@localhost) by xph029.physics.montana.edu (8.6.12/8.6.9) with SMTP id RAA10889 for ; Mon, 13 May 1996 17:22:57 -0600 X-Authentication-Warning: xph029.physics.montana.edu: michael owned process doing -bs Date: Mon, 13 May 1996 17:22:55 -0600 (MDT) From: Michael Kellen X-Sender: michael@xph029.physics.montana.edu Reply-To: Michael Kellen To: Chimera Hacker List Subject: [cfh108] Delayed Inlines Release Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII This release of the delayed inline option is much less kludgier than the last. The delay status information has been entirely moved into the info structure for Inlines (html/inline.c) and is accessed by RenderHooks. The cache checking was reworked to work with the new cache structure (as of cfh106), which removed the need to stat a cache file. For now, only text is available instead of the inlined image. You will see either the ALT text (if supplied) or "[IMAGE]" or "[LINK]" or "[MAP]" in the place of the image when delay is on. Cached images are not delayed. If WIDTH and HEIGHT are supplied, the text will be clipped by that size if it is larger. This allows such images to be downloaded later without re-rendering the whole page. USAGE Add the following to your .chimera/resources: inline.delay: 1 Start up chimera. All images should be delayed. A value of 0 will disable delays (default). If you move your mouse over a simple image, the filename should appear in parentheses in the message bar. Left or Middle clicking will download and display the image. After the image is rendered, a MIDDLE MOUSE click will pop up the Download dialogue to simplify grabbing images off of the web. If you move over an Imagemap, you should see the same behaviour, with the addition of the word "ImageMap" after the filename on the message bar. After the image is rendered, this will function like a normal imagemap. Again, a MIDDLE MOUSE click will allow you to grab the image. If you move over a link, the file name will be followed by the usual URL display showing the destination of the link. A left click will FOLLOW THE LINK. Middle click will download the image. After the image is rendered, this will function like a normal image link (left to follow, middle to download the linked document). KNOWN BUGS IMO, li->tmargin should NOT be applied to inline frames Multiple instances of the same image on a page are still being annoying. If you attempt to load any instance but the first, the browser will give a "unable to render" type error. It works fine if you click on the first instance. Unsized images require re-rendering of the page. This must not occur until after the image has been cached or it is not saved. Currently InlineMotionCallback checks to see if you are over an unrendered but cached image, and if so re-renders the page. This is a HACK. file:/path URLs should really not be delayed. inline.delay should be checked for sanity. Ideally, it should be possible to change on the fly via a toggle (a la "Source"). The toggle would not have to be realized in the button bar if the user did not want it. This is patched against the distribution cfh108, which I grabbed from Erik's site. Please give it a whirl, Michael diff -c ../old/src/builtin.c src/builtin.c *** ../old/src/builtin.c Mon Apr 15 19:44:56 1996 - --- src/builtin.c Sun May 12 19:36:29 1996 *************** *** 19,24 **** - --- 19,28 ---- extern void InitModule_Image _ArgProto((WWWContext)); extern void InitModule_Download _ArgProto((WWWContext)); extern void InitModule_View _ArgProto((WWWContext)); + #ifdef DELAY_INLINE + extern void InitModule_Delayed _ArgProto((WWWContext)); + #endif + void InitChimeraBuiltins(wc) *************** *** 32,36 **** - --- 36,43 ---- InitModule_FTP(wc); InitModule_File(wc); InitModule_Image(wc); + #ifdef DELAY_INLINE + InitModule_Delayed(wc); + #endif return; } diff -c ../old/www/WWW.h www/WWW.h *** ../old/www/WWW.h Wed Apr 24 03:04:22 1996 - --- www/WWW.h Sun May 12 19:36:29 1996 *************** *** 154,159 **** - --- 154,162 ---- * frame.c */ int FrameLoad _ArgProto((Frame, URLParts *)); + #ifdef DELAY_INLINE + int FrameCacheLoad _ArgProto((Frame, URLParts *)); + #endif int FrameReload _ArgProto((Frame)); int FrameBack _ArgProto((Frame)); int FrameReplace _ArgProto((Frame, URLParts *)); *************** *** 180,185 **** - --- 183,191 ---- Document *DocumentCreate _ArgProto((bool)); void DocumentDestroy _ArgProto((Document *)); + #ifdef DELAY_INLINE + bool FrameCacheQuery _ArgProto((Frame, char *)); + #endif /* * gui.c */ *************** *** 239,243 **** - --- 245,252 ---- WWWID WWWUniqueID _ArgProto((WWWContext)); int WWWGetUserAuth _ArgProto((WWWContext, URLParts *, int, WWWAuthCallback, void *)); + #ifdef DELAY_INLINE + byte *WWWQueryInline _ArgProto((WWWContext, WWWProto, char *, size_t *)); + #endif #endif diff -c ../old/www/context.c www/context.c *** ../old/www/context.c Mon Apr 22 01:45:54 1996 - --- www/context.c Sun May 12 19:36:29 1996 *************** *** 338,340 **** - --- 338,369 ---- { return(-1); } + + #ifdef DELAY_INLINE + byte * + WWWQueryInline(wc, wp, key, size) + WWWContext wc; + WWWProto wp; + char *key; + size_t *size; + { + RenderHooks rh; + void *rc; + + *size = 0; + if (wc == NULL || wp == NULL) return (NULL); + /* Frame `1' is the fake frame used by the cache */ + if ((wc->flist == NULL) || wc->flist == (Frame )1) return(NULL); + + rc = wc->flist->orc; + rh = wc->flist->orh; + if (rh.query == NULL) return(NULL); + if (rh.search != NULL) + { + rc = (byte *)(rh.search)(rc, wp->url, size); + } + if (rc == NULL) return(NULL); + return( (rh.query)(rc, key, size) ); + } + #endif + diff -c ../old/www/frame.c www/frame.c *** ../old/www/frame.c Wed Apr 24 03:19:57 1996 - --- www/frame.c Sun May 12 19:36:29 1996 *************** *** 463,468 **** - --- 463,483 ---- return(0); } + #ifdef DELAY_INLINE + /* + * FrameCacheLoad + */ + int + FrameCacheLoad(frame, up) + struct _Frame *frame; + URLParts *up; + { + if (frame->wp->d != NULL) frame->wp->d->nocache=false; + RenderNew(frame, up, STACK_RELOAD); + return(0); + } + #endif + /* * FrameHome */ diff -c ../old/www/gui.c www/gui.c *** ../old/www/gui.c Mon Apr 15 19:03:52 1996 - --- www/gui.c Sun May 12 21:26:40 1996 *************** *** 92,99 **** - --- 92,113 ---- bool with_scroll; unsigned int width, height; { + #ifdef DELAY_INLINE + size_t isDelayed = 0; + + if (with_scroll) + { + if (frame->wp != NULL) + WWWQueryInline(frame->wc,frame->wp,"delayed",&isDelayed); + else if (frame->orh.query != NULL) + (frame->orh.query)(frame->orc, "delayed", &isDelayed); + } + WWWSetSize(frame->www, (with_scroll && !isDelayed), width, height); + WWWSetDrawSize(frame->www, (with_scroll && !isDelayed), width, height); + #else WWWSetSize(frame->www, with_scroll, width, height); WWWSetDrawSize(frame->www, with_scroll, width, height); + #endif frame->size_set = True; if (frame->size_callback != NULL) { *************** *** 108,114 **** - --- 122,141 ---- bool with_scroll; unsigned int width, height; { + #ifdef DELAY_INLINE + size_t isDelayed = 0; + + if (with_scroll) + { + if (frame->wp != NULL) + WWWQueryInline(frame->wc,frame->wp,"delayed",&isDelayed); + else if (frame->orh.query != NULL) + (frame->orh.query)(frame->orc, "delayed", &isDelayed); + } + WWWSetDrawSize(frame->www, (with_scroll && !isDelayed), width, height); + #else WWWSetDrawSize(frame->www, with_scroll, width, height); + #endif return(0); } diff -c ../old/www/proto.c www/proto.c *** ../old/www/proto.c Wed Apr 24 03:49:53 1996 - --- www/proto.c Sun May 12 19:36:29 1996 *************** *** 117,122 **** - --- 117,124 ---- struct _WWWContext *wc; struct _WWWProto *wp; { + size_t isDelayed = 0; + if (wc->iocnt >= wc->maxiocnt) { wp->waiting = true; *************** *** 132,137 **** - --- 134,150 ---- } } + #ifdef DELAY_INLINE + WWWQueryInline(wp->wc, wp, "delayed", &isDelayed); + if (wp->pc == NULL && isDelayed) + { + if ((wp->ph = GetProtoHooks(wc, "delay-inline")) != NULL) + { + wp->pc = (wp->ph->init)(wp->up, NULL, wp->ph->class_context, wp); + } + } + #endif + /* Check for a proxy. */ if (wp->pc == NULL && (wp->pup = GetProxy(wp->mp, wp->up)) != NULL) { *************** *** 411,413 **** - --- 424,444 ---- return; } + + #ifdef DELAY_INLINE + /* + * FrameCacheQuery + */ + bool + FrameCacheQuery(frame, url) + struct _Frame *frame; + char *url; + { + ProtoHooks *ph; + + if ((ph = GetProtoHooks(frame->wc, "cache-read")) != NULL) + return( CacheQuery(url, ph->class_context) ); + + return(false); + } + #endif diff -c ../old/Common.tmpl.dist Common.tmpl.dist *** ../old/Common.tmpl.dist Wed Apr 24 03:44:24 1996 - --- Common.tmpl.dist Sun May 12 19:36:29 1996 *************** *** 78,84 **** XCOMM CC = gcc /* Add site stuff here */ ! CEXTRA_DEFINES = $(OS_DEFINES) CEXTRA_LIBS = $(OS_LIBS) /* - --- 78,84 ---- XCOMM CC = gcc /* Add site stuff here */ ! CEXTRA_DEFINES = $(OS_DEFINES) -DDELAY_INLINE CEXTRA_LIBS = $(OS_LIBS) /* diff -c ../old/html/html.h html/html.h *** ../old/html/html.h Sat Apr 27 01:27:25 1996 - --- html/html.h Sun May 12 19:39:30 1996 *************** *** 290,295 **** - --- 290,300 ---- /* * inline.c */ + #ifdef DELAY_INLINE + void InlineUndelay _ArgProto((void *)); + Frame InlineGetFrame _ArgProto((void *)); + bool InlineSizeGiven _ArgProto((void *)); + #endif void HandleImg _ArgProto((LayoutInfo *, MLElement, bool)); /* *************** *** 382,387 **** - --- 387,399 ---- int HTMLLoadAnchor _ArgProto((LayoutInfo *, RenderPart *, bool,int,int,int)); void HTMLPrintAnchor _ArgProto((LayoutInfo *, RenderPart *, bool, int, int)); URLParts *HTMLMakeURLParts _ArgProto((LayoutInfo *, MemPool, char *)); + #ifdef DELAY_INLINE + int HTMLLoadInline _ArgProto((LayoutInfo *, RenderPart *, bool, int,int, + int,int,char *, void *)); + void HTMLPrintInline _ArgProto((LayoutInfo *, RenderPart *, char *, int)); + int HTMLSaveInline _ArgProto((LayoutInfo *, RenderPart *, bool, + int, int, int, char *)); + #endif /* * table.c diff -c ../old/html/load.c html/load.c *** ../old/html/load.c Wed Apr 24 03:25:43 1996 - --- html/load.c Sun May 12 19:36:30 1996 *************** *** 150,152 **** - --- 150,310 ---- return; } + + #ifdef DELAY_INLINE + #define InlineOther 0 + #define InlineImage 1 + #define InlineAnchor 2 + #define InlineMap 3 + + + int + HTMLLoadInline(li, rp, trans, x, y, button, type, src, callback) + LayoutInfo *li; + RenderPart *rp; + bool trans; + int x, y; + int button; + int type; + char *src; + void *callback; + { + if (rp == NULL) return(0); + + if ( (button == 1) && (type == InlineAnchor) ) + { + HTMLLoadAnchor(li, rp, trans, x, y, button); + } + else + { + URLParts *up; + MemPool mp; + + mp = MPCreate(); + InlineUndelay(li->over->state); + if ((up = HTMLMakeURLParts(li, mp, src)) == NULL) + FrameReload(InlineGetFrame(li->over->state)); + else if (InlineSizeGiven(li->over->state)) + { + InlineUndelay(li->over->state); + FrameReplace(InlineGetFrame(li->over->state),up); + } + else + { + Frame iframe = InlineGetFrame(li->over->state); + + FrameForceType(iframe, "x-www/x-cache-write"); + FrameCacheLoad(iframe,up); + } + MPDestroy(mp); + } + + + + return(0); + } + + void + HTMLPrintInline(li, rp, src, type) + LayoutInfo *li; + RenderPart *rp; + char *src; + int type; + { + char *buf,*target,*source,*url; + URLParts *up; + MemPool mp; + + if (rp == NULL) return; + if (src == NULL) return; + + mp = MPCreate(); + if (type == InlineAnchor) + { + if(rp->anchor == NULL) + { + MPDestroy(mp); + return; + } + + if ((url = MLFindAttribute(rp->anchor, "href")) == NULL) + { + MPDestroy(mp); + return; + } + + if ((up = HTMLMakeURLParts(li, mp, url)) == NULL) + { + MPDestroy(mp); + return; + } + + target = URLMakeString(mp, up, true); + } + else if (type == InlineMap) + { + target = MPStrDup(mp, "ImageMap"); + } + else + { + target = MPStrDup(mp, ""); + } + source = GetBaseFilename(src); + + buf = (char *)MPGet(mp, strlen(source) + strlen(target) + 4); + sprintf (buf, "(%s) %s", source, target); + + FrameMessage(li->frame, buf); + + MPDestroy(mp); + + return; + } + + + int + HTMLSaveInline(li, rp, trans, x, y, button, src) + LayoutInfo *li; + RenderPart *rp; + bool trans; + int x, y; + int button; + char *src; + { + Frame dframe; + char *ext; + WWWContext wc = WWWFrameToContext(li->frame); + + if (rp == NULL) return(-1); + + if (button == 2) + { + URLParts *up; + MemPool mp; + + mp = MPCreate(); + if ((up = HTMLMakeURLParts(li, mp, src)) == NULL) + { + MPDestroy(mp); + return(-1); + } + /* + * Load it up in a frame forced to a special type and hope the caller + * can deal with this. + */ + if ((ext = WWWGetResource(wc, "www.lastResortType")) != NULL) + { + if ((dframe = FrameCreate(wc, NULL)) != NULL) + { + FrameForceType(dframe, ext); + FrameLoad(dframe, up); + } + } + + MPDestroy(mp); + } + else + HTMLLoadAnchor(li, rp, false, x, y, button); + return(0); + } + #endif /* DELAY_INLINE */ diff -c ../old/html/inline.c html/inline.c *** ../old/html/inline.c Sat Apr 27 01:29:26 1996 - --- html/inline.c Mon May 13 17:09:31 1996 *************** *** 12,22 **** - --- 12,47 ---- #include "html.h" + #ifdef DELAY_INLINE + #include + #include + + #ifndef ICONS + const char inline_icon[4][8] = { "", "[IMAGE]", "[LINK]", "[MAP]" }; + const char inline_mime[4][12] = { "text/plain", "text/plain", + "text/plain", "text/plain"}; + const int inline_length[4] = { 0, 7, 6, 5 }; + #else + #include "icons.h" + #endif + + #endif + typedef struct inline_state { LayoutInfo *li; /* need this always */ bool added; /* added yet */ Frame frame; /* embedded document ID */ + #ifdef DELAY_INLINE + /* Inline delay information */ + char *src; /* SRC field info */ + enum {available, requested, unavailable} status; + char *alt_text; /* either text or icon */ + char *alt_MIME; /* MIME type for alt */ + int alt_length; /* Length of Alt data */ + enum {Other, InlineImage, InlineAnchor, InlineMap} type; + bool size_given; /* HEIGHT & WIDTH specified? */ + #endif } InlineState; /* *************** *** 69,78 **** int offset; if (ci->added) return; - - ci->added = True; if (status == -1) { rp = HTMLCreateRP(ci->li, NULL, NULL, NULL, NULL, NULL, 0); HTMLAddRP(ci->li, rp, ADD_NOTHING, 0, 0, 0); } - --- 94,109 ---- int offset; if (ci->added) return; if (status == -1) { + #ifdef DELAY_INLINE + ci->status = unavailable; + /* + * Should now (re)render the ALT frame if need be + */ + #endif + rp = HTMLCreateRP(ci->li, NULL, NULL, NULL, NULL, NULL, 0); HTMLAddRP(ci->li, rp, ADD_NOTHING, 0, 0, 0); } *************** *** 88,96 **** - --- 119,136 ---- else if (av == ATTRIB_MIDDLE || av == ATTRIB_CENTER) offset = height / 2; else offset = 0; + #ifdef DELAY_INLINE + if (ci->status == requested) + ci->status = available; + #endif HTMLAddRP(ci->li, rp, ADD_SETBL, offset, width, height); } + #ifdef DELAY_INLINE + if (ci->status == available) + #endif + ci->added = True; + return; } *************** *** 107,113 **** InlineState *ci = HTMLRPState(rp); LayoutInfo *li = ci->li; ! HTMLLoadAnchor(li, rp, false, x, y, button); return(0); } - --- 147,164 ---- InlineState *ci = HTMLRPState(rp); LayoutInfo *li = ci->li; ! #ifdef DELAY_INLINE ! InlineState *ti; ! ! ti = (InlineState *)(li->over->state); ! if (ti->status == unavailable) ! HTMLLoadInline(li, rp, false, x, y, button, ! ti->type, ti->src, RealizeCallback); ! else if (ti->type != InlineAnchor) ! HTMLSaveInline(li, rp, false, x, y, button, ti->src); ! else ! #endif ! HTMLLoadAnchor(li, rp, false, x, y, button); return(0); } *************** *** 122,139 **** InlineState *ci = HTMLRPState(rp); LayoutInfo *li = ci->li; ! if (rp == NULL || rp->anchor == NULL || rp->p == NULL) return(0); ! HTMLPrintAnchor(li, rp, false, x, y); li->over = rp; return(0); } /* * * Public functions * */ /* * HandleImg - --- 173,319 ---- InlineState *ci = HTMLRPState(rp); LayoutInfo *li = ci->li; ! #ifdef DELAY_INLINE ! /* This is a hack, I should really be able to queue this request ! * to occur AFTER the cache write is complete ! */ ! if ((ci->status == requested) && FrameCacheQuery(li->frame, ci->src)) ! { ! ci->status=available; ! FrameReplace(li->frame,li->bup); ! } ! if (ci->status != available) ! HTMLPrintInline(li, rp, ci->src, ci->type); ! else ! #endif ! HTMLPrintAnchor(li, rp, false, x, y); ! li->over = rp; return(0); } + #ifdef DELAY_INLINE + /* + * InlineStateSearch + */ + static byte * + InlineStateSearch(closure, url, size) + void *closure; + char *url; + size_t *size; + { + RenderPart *rp = (RenderPart *)closure; + InlineState *ci = (InlineState *)HTMLRPState(rp); + + *size = 0; + if (rp->destroy != DestroyInline) return(NULL); + + rp = ci->li->rphead; + + while (rp != NULL) + { + if (rp->destroy == DestroyInline) + { + ci = (InlineState *)HTMLRPState(rp); + if ((strcmp(ci->src,url) == 0) && (ci->status != available)) + return((byte *)(rp)); + } + rp = rp->mnext; + } + + return(NULL); + } + + + static byte * + InlineStateQuery(closure, key, size) + void *closure; + char *key; + size_t *size; + { + RenderPart *rp = (RenderPart *)closure; + InlineState *ci; + byte *retval = NULL; + + *size = 0; + if ((rp == NULL) || (rp->destroy != DestroyInline)) return (retval); + ci = (InlineState *)HTMLRPState(rp); + + if (strcmp(key,"type") == 0) + { + *size = ci->type; + } + if (strcmp(key,"delayed") == 0) + { + if (ci->status == unavailable) + *size = true; + } + if (strcmp(key,"alt_length") == 0) + { + *size = ci->alt_length; + } + if (strcmp(key,"text") == 0) + { + *size = ci->alt_length; + retval = (byte *) (ci->alt_text); + } + if (strcmp(key,"MIME") == 0) + { + *size = strlen(ci->alt_MIME); + retval = (byte *) (ci->alt_MIME); + } + if (strcmp(key,"source") == 0) + { + *size = strlen(ci->src); + retval = (byte *) (ci->src); + } + if (strcmp(key,"frame") == 0) + { + *size = sizeof(Frame); + retval = (byte *) (ci->frame); + } + if (strcmp(key,"presized") == 0) + { + *size = ci->size_given; + } + + return(retval); + } + + #endif + /* * * Public functions * */ + #ifdef DELAY_INLINE + void + InlineUndelay(state) + void *state; + { + InlineState *ci=(InlineState *)state; + if (ci->status > available) + --ci->status; + } + + Frame + InlineGetFrame(state) + void *state; + { + InlineState *ci=(InlineState *)state; + return(ci->frame); + } + + bool + InlineSizeGiven(state) + void *state; + { + InlineState *ci=(InlineState *)state; + return(ci->size_given); + } + #endif /* DELAY_INLINE */ /* * HandleImg *************** *** 151,156 **** - --- 331,341 ---- char *ws, *hs; RenderHooks orh; MemPool tmp; + #ifdef DELAY_INLINE + URLParts *sup; + char *value; + #endif + if (end) return; if ((url = MLFindAttribute(p, "src")) == NULL) return; *************** *** 171,187 **** li->delay = True; if ((ws = MLFindAttribute(p, "width")) != NULL && (hs = MLFindAttribute(p, "height")) != NULL) { unsigned int width, height; width = (unsigned int)atoi(ws); height = (unsigned int)atoi(hs); ci->frame = FrameCreateSized(li->frame, width, height); RealizeCallback(rp, 0, width, height); } ! else { ci->frame = FrameCreateUnsized(li->frame, RealizeCallback, rp); } - --- 356,450 ---- li->delay = True; + #ifdef DELAY_INLINE + ci->type = InlineImage; + ci->size_given = false; + /* */ + /* FrameGetDelayState calls WWWGetDelayState which does an XtGetValue */ + /* on the Inline Toggle Widget */ + /* */ + + + if ((value = FrameGetResource(li->frame, "inline.delay")) != NULL) + { + if ( atoi(value) != 0) + ci->status = unavailable; + else + ci->status = available; + } + else + ci->status = available; + + if ((sup = HTMLMakeURLParts(li, tmp, MLFindAttribute(p, "src"))) != NULL) + ci->src = URLMakeString(li->mp, sup, false); + + if (FrameCacheQuery(li->frame, ci->src)) ci->status = available; + + /* Find out if this is an inline anchor */ + if (rp->anchor != NULL) ci->type = InlineAnchor; + + /* Find out if this is an imagemap */ + if (MLFindAttribute(p, "ismap") != NULL) ci->type = InlineMap; + + if ((ci->alt_text = MLFindAttribute(p, "alt")) == NULL) + { + ci->alt_text = (char *)inline_icon[ci->type]; + ci->alt_MIME = (char *)inline_mime[ci->type]; + ci->alt_length = inline_length[ci->type]; + } + else + { + ci->alt_MIME = (char *)inline_mime[Other]; + ci->alt_length = strlen(ci->alt_text); + } + #endif + if ((ws = MLFindAttribute(p, "width")) != NULL && (hs = MLFindAttribute(p, "height")) != NULL) { unsigned int width, height; + #ifdef DELAY_INLINE + ci->size_given = true; + #endif + width = (unsigned int)atoi(ws); height = (unsigned int)atoi(hs); ci->frame = FrameCreateSized(li->frame, width, height); RealizeCallback(rp, 0, width, height); } ! #ifdef DELAY_INLINE ! else if ( ci->status ) ! { ! unsigned int width, height; ! ! if (strcmp(ci->alt_MIME,inline_mime[Other]) == 0 ) ! { ! HTMLSetupFonts(li); ! if (li->lc->defaultFont == NULL) ! { ! height = 32; ! width = 10 * strlen(ci->alt_text); ! } ! else ! { ! height = li->lc->defaultFont->ascent + li->lc->defaultFont->descent + ! + li->tmargin + li->textLineSpace;; ! width = XTextWidth(li->lc->defaultFont, ci->alt_text, ci->alt_length) ! + li->rmargin; ! } ! } ! else ! { ! width = 32; ! height = 24; ! } ! ! ci->frame = FrameCreateSized(li->frame, width, height); ! RealizeCallback(rp, 0, width, height); ! } ! #endif /* DELAY_INLINE */ ! else { ci->frame = FrameCreateUnsized(li->frame, RealizeCallback, rp); } *************** *** 189,194 **** - --- 452,461 ---- memset(&orh, 0, sizeof(RenderHooks)); orh.mouse = InlineMouseCallback; orh.motion = InlineMotionCallback; + #ifdef DELAY_INLINE + orh.search = InlineStateSearch; + orh.query = InlineStateQuery; + #endif FrameOverride(ci->frame, &orh, rp); FrameLoad(ci->frame, aup); diff -c ../old/html/layout.c html/layout.c *** ../old/html/layout.c Sat Apr 27 04:47:18 1996 - --- html/layout.c Sun May 12 19:36:30 1996 *************** *** 356,361 **** - --- 356,364 ---- if (rl->rphead != NULL && rl->width + rp->width >= rl->maxwidth && + #ifdef DELAY_INLINE + li->restack != NULL && + #endif li->restack->wrap) { RenderPart *xp, *fxp; diff -c ../old/proto/Imakefile proto/Imakefile *** ../old/proto/Imakefile Fri Apr 12 17:41:24 1996 - --- proto/Imakefile Sun May 12 19:37:53 1996 *************** *** 1,8 **** #include <../Common.tmpl> ! SRCS = file.c http.c ftp.c cache.c ! OBJS = file.o http.o ftp.o cache.o INCLUDES = -I../ -I../common -I../www - --- 1,8 ---- #include <../Common.tmpl> ! SRCS = file.c http.c ftp.c cache.c delayed.c ! OBJS = file.o http.o ftp.o cache.o delayed.o INCLUDES = -I../ -I../common -I../www diff -c ../old/proto/cache.c proto/cache.c *** ../old/proto/cache.c Sat Apr 27 03:39:22 1996 - --- proto/cache.c Sun May 12 19:36:31 1996 *************** *** 574,576 **** - --- 574,596 ---- return; } + + #ifdef DELAY_INLINE + /* + * CacheQuery + */ + bool + CacheQuery(url,cc) + char *url; + CacheClass *cc; + { + CacheEntry *ce; + + for (ce = cc->clist; ce != NULL; ce = ce->next) + { + if (strcmp(url, ce->url) == 0) return(true); + } + + return(false); + } + #endif diff -c ../old/proto/delayed.c proto/delayed.c *** ../old/proto/delayed.c Mon May 13 17:17:11 1996 - --- proto/delayed.c Mon May 13 17:08:37 1996 *************** *** 0 **** - --- 1,127 ---- + /* + * delayed.c + * + * Copyright (c) 1996, Michael Kellen + * See the file COPYRIGHT for details. + */ + #include + #include + + #ifdef HAVE_STDLIB_H + #include + #endif + + #ifdef HAVE_STRING_H + #include + #endif + + #ifdef HAVE_UNISTD_H + #include + #endif + + #include "WWW.h" + + typedef struct _delay_info + { + MemPool mp; + WWWProto wp; + WWWContext wc; + WWWTimeOut iot; + URLParts *up; + Document *d; + bool init_done; + char *alt_text; + char *alt_MIME; + int alt_length; + } DelayInfo; + + /* + * DelayRead + */ + static void + DelayRead(iot, closure) + WWWTimeOut iot; + void *closure; + { + DelayInfo *di = (DelayInfo *)closure; + char *b; + + di->init_done = true; + if (WWWInitData(di->wp, di->up, NULL, di->d) == -1) return; + if (di->alt_length > 1) + di->d->len = di->alt_length - 1; + else + di->d->len = 0; + b = (char *)alloc_mem(di->alt_length); + memcpy(b,di->alt_text,di->alt_length); + di->d->data = (byte *)b; + WWWAddData(di->wp); + WWWEndData(di->wp); + return; + } + + /* + * DelayDestroy + */ + static int + DelayDestroy(di) + DelayInfo *di; + { + if (!di->init_done && di->d != NULL) DocumentDestroy(di->d); + if (di->iot != NULL) WWWDestroyTimeOut(di->iot); + MPDestroy(di->mp); + + return(0); + } + + /* + * DelayInit + */ + static void * + DelayInit(up, pup, class_context, wp) + URLParts *up; + URLParts *pup; + void *class_context; + WWWProto wp; + { + DelayInfo *di; + MemPool mp; + size_t size; + + mp = MPCreate(); + di = (DelayInfo *)MPCGet(mp, sizeof(DelayInfo)); + di->mp = mp; + di->wp = wp; + di->wc = WWWProtoToContext(wp); + di->iot = WWWCreateTimeOut(di->wc, di); + di->up = URLDup(di->mp, up); + di->d = DocumentCreate(true); + + di->alt_MIME = MPStrDup(mp, WWWQueryInline(di->wc, wp, "MIME", &size)); + di->alt_text= MPStrDup(mp, WWWQueryInline(di->wc, wp, "text", &size)); + di->alt_length = size; + + di->d->mflist = MIMECreateField(di->d->mp, "content-type", di->alt_MIME); + WWWSetTimeOut(di->iot, 10, DelayRead); + + return(di); + } + + /* + * InitModule_Delayed + */ + void + InitModule_Delayed(wc) + WWWContext wc; + { + ProtoHooks ph; + + memset(&ph, 0, sizeof(ph)); + ph.protocol = "delay-inline"; + ph.init = DelayInit; + ph.local = true; + ph.destroy = DelayDestroy; + WWWAddProtoHooks(wc, &ph); + + return; + } ------- Message 35 Received: from jimi.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id ab07100; 14 May 96 11:49 PDT Received: from oneworld.com by JIMI.CS.UNLV.EDU id aa07033; 14 May 96 11:45 PDT Received: from redoak.otp.com by cvo.oneworld.com with smtp (Smail3.1.29.1 #16) id m0uJP5B-000SBmC; Tue, 14 May 96 11:44 PDT Received: from 205.231.244.2 (205.231.244.2) by redoak.otp.com (EMWAC SMTPRS 0.70) with SMTP id ; Tue, 14 May 1996 11:28:29 +0100 Message-ID: Date: 14 May 96 11:28:29 From: Oak Tree Publications To: chimera-announce@cs.unlv.edu, nash@otp.com Subject: Intel Internet/Intranet Directory2 X-Mailer: Allaire Cold Fusion 1.5 Dear Chimera, We would like to invite you to participate in the Intel Internet/Intranet Directory. Please visit this site at: https://scripts.intel.com/cgi-db/dbml.exe?template=iaweb/director/main.dbm. As we work toward our goal of ensuring that business users can take full advantage of the Internet/Intranet, we created the Intel Internet/Intranet Directory. This resource gives users/developers access to the rapidly growing list of companies who are providing products and services that are compatible with Intel architecture, and can assist in all aspects of the development/usage of the Internet/Intranet. HOW THE DIRECTORY WORKS ======================= The directory is connected to a database and HTML pages are served up as users choose what they want to see in the directory. We take advantage of this process in the directory's product submission process. When you submit your information, you will see your entry as it will appear in the directory and your information goes directly into the database. HOW TO SUBMIT YOUR INFORMATION ======================= To add yourself to the directory, please choose the "Add your company to the directory or modify information" graphic at the top of the main page of the directory. For more information on how to update your information, please choose the "How to use the directory" graphic at the top of the main page of the directory. Intel will review your listing and reserves the right to edit or reject the listing. The directory will be updated daily, but it may take up to 24 hours for your changes to appear in the directory. Once you submit your information, you are responsible for keeping it up to date. You will be asked to review your information once a quarter. If you do not check it quarterly, you will be dropped from the directory. PASSWORDS: ======================= When submitting your company information, you will be asked to give a password, it must be at least eight characters and contain both letters and numbers. Once you have submitted your information and Intel has approved it, you will then be considered an existing account. When you need to update any information, you will use the password you created. You may change it at any time. SUBMIT YOUR COMPANY LOGO ======================== If you haven't done so already, you may submit your logo for display on your company page. For ease of use, your company logo should be 8K or less. If you wish to submit your logo, please: 1. Send us an URL pointing us to a graphic we can download from your site OR 2. Reply to this e-mail message with your logo attached in GIF or JPEG format RETURN LINK TO INTEL ==================== If you haven't done so already, please provide a return link to Intel at www.intel.com using the Intel linking button. You can download this button once you've logged in as an existing account with your password given to you at the beginning of this message. WE'D LIKE TO HEAR FROM YOU! =========================== We'd like to know what you think about the directory today and how we can improve it in the future. Please click on the "Questions and Comments" hot text at the bottom of the main page of the directory. You will be given an opportunity to submit comments here. We're looking forward to hearing from you! Enterprise Server Group Intel Corporation ------- Message 36 Received: from xph029.physics.montana.edu by JIMI.CS.UNLV.EDU id aa29820; 15 May 96 14:22 PDT Received: from localhost (michael@localhost) by xph029.physics.montana.edu (8.6.12/8.6.9) with SMTP id PAA16221 for ; Wed, 15 May 1996 15:20:11 -0600 Date: Wed, 15 May 1996 15:20:07 -0600 (MDT) From: Michael Kellen To: Chimera Hacker List Subject: [cfh108] Delayed Inlines Patch In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII The following patch (mostly) fixes the problem with multiple instances of an image in the same document. It is cumulative with the first patch, or you can grab the total patch from https://xph029.physics.montana.edu/chimera Michael diff -c ../old/html/inline.c html/inline.c *** ../old/html/inline.c Wed May 15 15:15:39 1996 - --- html/inline.c Wed May 15 15:07:24 1996 *************** *** 205,210 **** - --- 205,211 ---- { RenderPart *rp = (RenderPart *)closure; InlineState *ci = (InlineState *)HTMLRPState(rp); + RenderPart *lastmatch = NULL; *size = 0; if (rp->destroy != DestroyInline) return(NULL); *************** *** 216,228 **** if (rp->destroy == DestroyInline) { ci = (InlineState *)HTMLRPState(rp); ! if ((strcmp(ci->src,url) == 0) && (ci->status != available)) ! return((byte *)(rp)); } rp = rp->mnext; } ! return(NULL); } - --- 217,234 ---- if (rp->destroy == DestroyInline) { ci = (InlineState *)HTMLRPState(rp); ! if (strcmp(ci->src,url) == 0) ! { ! if (ci->status == requested) ! return((byte *)(rp)); ! else if (ci->status == unavailable) ! lastmatch = rp; ! } } rp = rp->mnext; } ! return((byte *)(lastmatch)); } ------- Message 37 Received: from pf2.phil.uni-sb.de by JIMI.CS.UNLV.EDU id aa19221; 16 May 96 14:17 PDT Received: from schlunz.phil.uni-sb.de (benni@access177.telip.uni-sb.de [134.96.113.177]) by pf2.phil.uni-sb.de (8.7.5/8.7.5/chris) with ESMTP id XAA28606 for ; Thu, 16 May 1996 23:18:41 +0200 (MET DST) Received: (from benni@localhost) by schlunz.phil.uni-sb.de (8.7.5/8.7.3) id XAA00287 for benni; Thu, 16 May 1996 23:25:14 +0200 Received: from JIMI.CS.UNLV.EDU (jimi.CS.UNLV.EDU [131.216.22.2]) by pf2.phil.uni-sb.de (8.7.5/8.7.5/chris) with SMTP id XAA26054 for ; Sun, 12 May 1996 23:20:25 +0200 (MET DST) Received: from jimi.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id aa04079; 12 May 96 14:01 PDT Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa04031; 12 May 96 13:57 PDT Received: from kroete2.freinet.de (arh135.ppp.uni-c.dk [130.228.13.135]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id WAA27550 for ; Sun, 12 May 1996 22:57:27 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uIiBC-0003pNC; Sun, 12 May 96 22:55 MET DST Message-Id: Subject: A moving target? To: Chimera Hacker List Date: Sun, 12 May 1996 22:55:45 +0200 (MET DST) Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS , applets, scripts, and a few other bits of the HTML 3.0 proposal. A lot of the HTML 3.0 proposal (including maths) didn't make it, and is being worked on, presumably for HTML 4.0. You can see more on https://www.w3.org/pub/WWW/MarkUp/Activity and on https://www.w3.org/pub/WWW/MarkUp/Wilbur/. There's a DTD, but there doesn't seem to be a nice non-SGML-wizards- version of it, like there was for HTML 3.0 (accesible through my homepage). Of course, we still have to get HTML 2.0 working, though I don't think I'm the only one who finds the temptation to start fiddling with post-2.0 stuff almost irresistable. Is 3.2 a realistic goal for Chimera 2.0, or should we settle for HTML 2.0, clean up the usability a little and get the damn thing released? The only thing you need to be able to do with applets and scripts for HTML 3.2 is to ignore them by the way. - -- Erik Corry ehcorry@inet.uni-c.dk ------- Message 38 Received: from pf2.phil.uni-sb.de by JIMI.CS.UNLV.EDU id aa19282; 16 May 96 14:22 PDT Received: from schlunz.phil.uni-sb.de (benni@access177.telip.uni-sb.de [134.96.113.177]) by pf2.phil.uni-sb.de (8.7.5/8.7.5/chris) with ESMTP id XAA28736 for ; Thu, 16 May 1996 23:23:11 +0200 (MET DST) Received: (from benni@localhost) by schlunz.phil.uni-sb.de (8.7.5/8.7.3) id XAA00436 for benni; Thu, 16 May 1996 23:29:15 +0200 Received: from JIMI.CS.UNLV.EDU (jimi.CS.UNLV.EDU [131.216.22.2]) by pf2.phil.uni-sb.de (8.7.5/8.7.5/chris) with SMTP id CAA13322 for ; Tue, 14 May 1996 02:19:15 +0200 (MET DST) Received: from jimi.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id aa23330; 13 May 96 16:28 PDT Received: from xph029.physics.montana.edu by JIMI.CS.UNLV.EDU id aa23279; 13 May 96 16:24 PDT Received: from localhost (michael@localhost) by xph029.physics.montana.edu (8.6.12/8.6.9) with SMTP id RAA10889 for ; Mon, 13 May 1996 17:22:57 -0600 X-Authentication-Warning: xph029.physics.montana.edu: michael owned process doing -bs Date: Mon, 13 May 1996 17:22:55 -0600 (MDT) From: Michael Kellen X-Sender: michael@xph029.physics.montana.edu Reply-To: Michael Kellen To: Chimera Hacker List Subject: [cfh108] Delayed Inlines Release Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Status: O This release of the delayed inline option is much less kludgier than the last. The delay status information has been entirely moved into the info structure for Inlines (html/inline.c) and is accessed by RenderHooks. The cache checking was reworked to work with the new cache structure (as of cfh106), which removed the need to stat a cache file. For now, only text is available instead of the inlined image. You will see either the ALT text (if supplied) or "[IMAGE]" or "[LINK]" or "[MAP]" in the place of the image when delay is on. Cached images are not delayed. If WIDTH and HEIGHT are supplied, the text will be clipped by that size if it is larger. This allows such images to be downloaded later without re-rendering the whole page. USAGE Add the following to your .chimera/resources: inline.delay: 1 Start up chimera. All images should be delayed. A value of 0 will disable delays (default). If you move your mouse over a simple image, the filename should appear in parentheses in the message bar. Left or Middle clicking will download and display the image. After the image is rendered, a MIDDLE MOUSE click will pop up the Download dialogue to simplify grabbing images off of the web. If you move over an Imagemap, you should see the same behaviour, with the addition of the word "ImageMap" after the filename on the message bar. After the image is rendered, this will function like a normal imagemap. Again, a MIDDLE MOUSE click will allow you to grab the image. If you move over a link, the file name will be followed by the usual URL display showing the destination of the link. A left click will FOLLOW THE LINK. Middle click will download the image. After the image is rendered, this will function like a normal image link (left to follow, middle to download the linked document). KNOWN BUGS IMO, li->tmargin should NOT be applied to inline frames Multiple instances of the same image on a page are still being annoying. If you attempt to load any instance but the first, the browser will give a "unable to render" type error. It works fine if you click on the first instance. Unsized images require re-rendering of the page. This must not occur until after the image has been cached or it is not saved. Currently InlineMotionCallback checks to see if you are over an unrendered but cached image, and if so re-renders the page. This is a HACK. file:/path URLs should really not be delayed. inline.delay should be checked for sanity. Ideally, it should be possible to change on the fly via a toggle (a la "Source"). The toggle would not have to be realized in the button bar if the user did not want it. This is patched against the distribution cfh108, which I grabbed from Erik's site. Please give it a whirl, Michael diff -c ../old/src/builtin.c src/builtin.c *** ../old/src/builtin.c Mon Apr 15 19:44:56 1996 - --- src/builtin.c Sun May 12 19:36:29 1996 *************** *** 19,24 **** - --- 19,28 ---- extern void InitModule_Image _ArgProto((WWWContext)); extern void InitModule_Download _ArgProto((WWWContext)); extern void InitModule_View _ArgProto((WWWContext)); + #ifdef DELAY_INLINE + extern void InitModule_Delayed _ArgProto((WWWContext)); + #endif + void InitChimeraBuiltins(wc) *************** *** 32,36 **** - --- 36,43 ---- InitModule_FTP(wc); InitModule_File(wc); InitModule_Image(wc); + #ifdef DELAY_INLINE + InitModule_Delayed(wc); + #endif return; } diff -c ../old/www/WWW.h www/WWW.h *** ../old/www/WWW.h Wed Apr 24 03:04:22 1996 - --- www/WWW.h Sun May 12 19:36:29 1996 *************** *** 154,159 **** - --- 154,162 ---- * frame.c */ int FrameLoad _ArgProto((Frame, URLParts *)); + #ifdef DELAY_INLINE + int FrameCacheLoad _ArgProto((Frame, URLParts *)); + #endif int FrameReload _ArgProto((Frame)); int FrameBack _ArgProto((Frame)); int FrameReplace _ArgProto((Frame, URLParts *)); *************** *** 180,185 **** - --- 183,191 ---- Document *DocumentCreate _ArgProto((bool)); void DocumentDestroy _ArgProto((Document *)); + #ifdef DELAY_INLINE + bool FrameCacheQuery _ArgProto((Frame, char *)); + #endif /* * gui.c */ *************** *** 239,243 **** - --- 245,252 ---- WWWID WWWUniqueID _ArgProto((WWWContext)); int WWWGetUserAuth _ArgProto((WWWContext, URLParts *, int, WWWAuthCallback, void *)); + #ifdef DELAY_INLINE + byte *WWWQueryInline _ArgProto((WWWContext, WWWProto, char *, size_t *)); + #endif #endif diff -c ../old/www/context.c www/context.c *** ../old/www/context.c Mon Apr 22 01:45:54 1996 - --- www/context.c Sun May 12 19:36:29 1996 *************** *** 338,340 **** - --- 338,369 ---- { return(-1); } + + #ifdef DELAY_INLINE + byte * + WWWQueryInline(wc, wp, key, size) + WWWContext wc; + WWWProto wp; + char *key; + size_t *size; + { + RenderHooks rh; + void *rc; + + *size = 0; + if (wc == NULL || wp == NULL) return (NULL); + /* Frame `1' is the fake frame used by the cache */ + if ((wc->flist == NULL) || wc->flist == (Frame )1) return(NULL); + + rc = wc->flist->orc; + rh = wc->flist->orh; + if (rh.query == NULL) return(NULL); + if (rh.search != NULL) + { + rc = (byte *)(rh.search)(rc, wp->url, size); + } + if (rc == NULL) return(NULL); + return( (rh.query)(rc, key, size) ); + } + #endif + diff -c ../old/www/frame.c www/frame.c *** ../old/www/frame.c Wed Apr 24 03:19:57 1996 - --- www/frame.c Sun May 12 19:36:29 1996 *************** *** 463,468 **** - --- 463,483 ---- return(0); } + #ifdef DELAY_INLINE + /* + * FrameCacheLoad + */ + int + FrameCacheLoad(frame, up) + struct _Frame *frame; + URLParts *up; + { + if (frame->wp->d != NULL) frame->wp->d->nocache=false; + RenderNew(frame, up, STACK_RELOAD); + return(0); + } + #endif + /* * FrameHome */ diff -c ../old/www/gui.c www/gui.c *** ../old/www/gui.c Mon Apr 15 19:03:52 1996 - --- www/gui.c Sun May 12 21:26:40 1996 *************** *** 92,99 **** - --- 92,113 ---- bool with_scroll; unsigned int width, height; { + #ifdef DELAY_INLINE + size_t isDelayed = 0; + + if (with_scroll) + { + if (frame->wp != NULL) + WWWQueryInline(frame->wc,frame->wp,"delayed",&isDelayed); + else if (frame->orh.query != NULL) + (frame->orh.query)(frame->orc, "delayed", &isDelayed); + } + WWWSetSize(frame->www, (with_scroll && !isDelayed), width, height); + WWWSetDrawSize(frame->www, (with_scroll && !isDelayed), width, height); + #else WWWSetSize(frame->www, with_scroll, width, height); WWWSetDrawSize(frame->www, with_scroll, width, height); + #endif frame->size_set = True; if (frame->size_callback != NULL) { *************** *** 108,114 **** - --- 122,141 ---- bool with_scroll; unsigned int width, height; { + #ifdef DELAY_INLINE + size_t isDelayed = 0; + + if (with_scroll) + { + if (frame->wp != NULL) + WWWQueryInline(frame->wc,frame->wp,"delayed",&isDelayed); + else if (frame->orh.query != NULL) + (frame->orh.query)(frame->orc, "delayed", &isDelayed); + } + WWWSetDrawSize(frame->www, (with_scroll && !isDelayed), width, height); + #else WWWSetDrawSize(frame->www, with_scroll, width, height); + #endif return(0); } diff -c ../old/www/proto.c www/proto.c *** ../old/www/proto.c Wed Apr 24 03:49:53 1996 - --- www/proto.c Sun May 12 19:36:29 1996 *************** *** 117,122 **** - --- 117,124 ---- struct _WWWContext *wc; struct _WWWProto *wp; { + size_t isDelayed = 0; + if (wc->iocnt >= wc->maxiocnt) { wp->waiting = true; *************** *** 132,137 **** - --- 134,150 ---- } } + #ifdef DELAY_INLINE + WWWQueryInline(wp->wc, wp, "delayed", &isDelayed); + if (wp->pc == NULL && isDelayed) + { + if ((wp->ph = GetProtoHooks(wc, "delay-inline")) != NULL) + { + wp->pc = (wp->ph->init)(wp->up, NULL, wp->ph->class_context, wp); + } + } + #endif + /* Check for a proxy. */ if (wp->pc == NULL && (wp->pup = GetProxy(wp->mp, wp->up)) != NULL) { *************** *** 411,413 **** - --- 424,444 ---- return; } + + #ifdef DELAY_INLINE + /* + * FrameCacheQuery + */ + bool + FrameCacheQuery(frame, url) + struct _Frame *frame; + char *url; + { + ProtoHooks *ph; + + if ((ph = GetProtoHooks(frame->wc, "cache-read")) != NULL) + return( CacheQuery(url, ph->class_context) ); + + return(false); + } + #endif diff -c ../old/Common.tmpl.dist Common.tmpl.dist *** ../old/Common.tmpl.dist Wed Apr 24 03:44:24 1996 - --- Common.tmpl.dist Sun May 12 19:36:29 1996 *************** *** 78,84 **** XCOMM CC = gcc /* Add site stuff here */ ! CEXTRA_DEFINES = $(OS_DEFINES) CEXTRA_LIBS = $(OS_LIBS) /* - --- 78,84 ---- XCOMM CC = gcc /* Add site stuff here */ ! CEXTRA_DEFINES = $(OS_DEFINES) -DDELAY_INLINE CEXTRA_LIBS = $(OS_LIBS) /* diff -c ../old/html/html.h html/html.h *** ../old/html/html.h Sat Apr 27 01:27:25 1996 - --- html/html.h Sun May 12 19:39:30 1996 *************** *** 290,295 **** - --- 290,300 ---- /* * inline.c */ + #ifdef DELAY_INLINE + void InlineUndelay _ArgProto((void *)); + Frame InlineGetFrame _ArgProto((void *)); + bool InlineSizeGiven _ArgProto((void *)); + #endif void HandleImg _ArgProto((LayoutInfo *, MLElement, bool)); /* *************** *** 382,387 **** - --- 387,399 ---- int HTMLLoadAnchor _ArgProto((LayoutInfo *, RenderPart *, bool,int,int,int)); void HTMLPrintAnchor _ArgProto((LayoutInfo *, RenderPart *, bool, int, int)); URLParts *HTMLMakeURLParts _ArgProto((LayoutInfo *, MemPool, char *)); + #ifdef DELAY_INLINE + int HTMLLoadInline _ArgProto((LayoutInfo *, RenderPart *, bool, int,int, + int,int,char *, void *)); + void HTMLPrintInline _ArgProto((LayoutInfo *, RenderPart *, char *, int)); + int HTMLSaveInline _ArgProto((LayoutInfo *, RenderPart *, bool, + int, int, int, char *)); + #endif /* * table.c diff -c ../old/html/load.c html/load.c *** ../old/html/load.c Wed Apr 24 03:25:43 1996 - --- html/load.c Sun May 12 19:36:30 1996 *************** *** 150,152 **** - --- 150,310 ---- return; } + + #ifdef DELAY_INLINE + #define InlineOther 0 + #define InlineImage 1 + #define InlineAnchor 2 + #define InlineMap 3 + + + int + HTMLLoadInline(li, rp, trans, x, y, button, type, src, callback) + LayoutInfo *li; + RenderPart *rp; + bool trans; + int x, y; + int button; + int type; + char *src; + void *callback; + { + if (rp == NULL) return(0); + + if ( (button == 1) && (type == InlineAnchor) ) + { + HTMLLoadAnchor(li, rp, trans, x, y, button); + } + else + { + URLParts *up; + MemPool mp; + + mp = MPCreate(); + InlineUndelay(li->over->state); + if ((up = HTMLMakeURLParts(li, mp, src)) == NULL) + FrameReload(InlineGetFrame(li->over->state)); + else if (InlineSizeGiven(li->over->state)) + { + InlineUndelay(li->over->state); + FrameReplace(InlineGetFrame(li->over->state),up); + } + else + { + Frame iframe = InlineGetFrame(li->over->state); + + FrameForceType(iframe, "x-www/x-cache-write"); + FrameCacheLoad(iframe,up); + } + MPDestroy(mp); + } + + + + return(0); + } + + void + HTMLPrintInline(li, rp, src, type) + LayoutInfo *li; + RenderPart *rp; + char *src; + int type; + { + char *buf,*target,*source,*url; + URLParts *up; + MemPool mp; + + if (rp == NULL) return; + if (src == NULL) return; + + mp = MPCreate(); + if (type == InlineAnchor) + { + if(rp->anchor == NULL) + { + MPDestroy(mp); + return; + } + + if ((url = MLFindAttribute(rp->anchor, "href")) == NULL) + { + MPDestroy(mp); + return; + } + + if ((up = HTMLMakeURLParts(li, mp, url)) == NULL) + { + MPDestroy(mp); + return; + } + + target = URLMakeString(mp, up, true); + } + else if (type == InlineMap) + { + target = MPStrDup(mp, "ImageMap"); + } + else + { + target = MPStrDup(mp, ""); + } + source = GetBaseFilename(src); + + buf = (char *)MPGet(mp, strlen(source) + strlen(target) + 4); + sprintf (buf, "(%s) %s", source, target); + + FrameMessage(li->frame, buf); + + MPDestroy(mp); + + return; + } + + + int + HTMLSaveInline(li, rp, trans, x, y, button, src) + LayoutInfo *li; + RenderPart *rp; + bool trans; + int x, y; + int button; + char *src; + { + Frame dframe; + char *ext; + WWWContext wc = WWWFrameToContext(li->frame); + + if (rp == NULL) return(-1); + + if (button == 2) + { + URLParts *up; + MemPool mp; + + mp = MPCreate(); + if ((up = HTMLMakeURLParts(li, mp, src)) == NULL) + { + MPDestroy(mp); + return(-1); + } + /* + * Load it up in a frame forced to a special type and hope the caller + * can deal with this. + */ + if ((ext = WWWGetResource(wc, "www.lastResortType")) != NULL) + { + if ((dframe = FrameCreate(wc, NULL)) != NULL) + { + FrameForceType(dframe, ext); + FrameLoad(dframe, up); + } + } + + MPDestroy(mp); + } + else + HTMLLoadAnchor(li, rp, false, x, y, button); + return(0); + } + #endif /* DELAY_INLINE */ diff -c ../old/html/inline.c html/inline.c *** ../old/html/inline.c Sat Apr 27 01:29:26 1996 - --- html/inline.c Mon May 13 17:09:31 1996 *************** *** 12,22 **** - --- 12,47 ---- #include "html.h" + #ifdef DELAY_INLINE + #include + #include + + #ifndef ICONS + const char inline_icon[4][8] = { "", "[IMAGE]", "[LINK]", "[MAP]" }; + const char inline_mime[4][12] = { "text/plain", "text/plain", + "text/plain", "text/plain"}; + const int inline_length[4] = { 0, 7, 6, 5 }; + #else + #include "icons.h" + #endif + + #endif + typedef struct inline_state { LayoutInfo *li; /* need this always */ bool added; /* added yet */ Frame frame; /* embedded document ID */ + #ifdef DELAY_INLINE + /* Inline delay information */ + char *src; /* SRC field info */ + enum {available, requested, unavailable} status; + char *alt_text; /* either text or icon */ + char *alt_MIME; /* MIME type for alt */ + int alt_length; /* Length of Alt data */ + enum {Other, InlineImage, InlineAnchor, InlineMap} type; + bool size_given; /* HEIGHT & WIDTH specified? */ + #endif } InlineState; /* *************** *** 69,78 **** int offset; if (ci->added) return; - - ci->added = True; if (status == -1) { rp = HTMLCreateRP(ci->li, NULL, NULL, NULL, NULL, NULL, 0); HTMLAddRP(ci->li, rp, ADD_NOTHING, 0, 0, 0); } - --- 94,109 ---- int offset; if (ci->added) return; if (status == -1) { + #ifdef DELAY_INLINE + ci->status = unavailable; + /* + * Should now (re)render the ALT frame if need be + */ + #endif + rp = HTMLCreateRP(ci->li, NULL, NULL, NULL, NULL, NULL, 0); HTMLAddRP(ci->li, rp, ADD_NOTHING, 0, 0, 0); } *************** *** 88,96 **** - --- 119,136 ---- else if (av == ATTRIB_MIDDLE || av == ATTRIB_CENTER) offset = height / 2; else offset = 0; + #ifdef DELAY_INLINE + if (ci->status == requested) + ci->status = available; + #endif HTMLAddRP(ci->li, rp, ADD_SETBL, offset, width, height); } + #ifdef DELAY_INLINE + if (ci->status == available) + #endif + ci->added = True; + return; } *************** *** 107,113 **** InlineState *ci = HTMLRPState(rp); LayoutInfo *li = ci->li; ! HTMLLoadAnchor(li, rp, false, x, y, button); return(0); } - --- 147,164 ---- InlineState *ci = HTMLRPState(rp); LayoutInfo *li = ci->li; ! #ifdef DELAY_INLINE ! InlineState *ti; ! ! ti = (InlineState *)(li->over->state); ! if (ti->status == unavailable) ! HTMLLoadInline(li, rp, false, x, y, button, ! ti->type, ti->src, RealizeCallback); ! else if (ti->type != InlineAnchor) ! HTMLSaveInline(li, rp, false, x, y, button, ti->src); ! else ! #endif ! HTMLLoadAnchor(li, rp, false, x, y, button); return(0); } *************** *** 122,139 **** InlineState *ci = HTMLRPState(rp); LayoutInfo *li = ci->li; ! if (rp == NULL || rp->anchor == NULL || rp->p == NULL) return(0); ! HTMLPrintAnchor(li, rp, false, x, y); li->over = rp; return(0); } /* * * Public functions * */ /* * HandleImg - --- 173,319 ---- InlineState *ci = HTMLRPState(rp); LayoutInfo *li = ci->li; ! #ifdef DELAY_INLINE ! /* This is a hack, I should really be able to queue this request ! * to occur AFTER the cache write is complete ! */ ! if ((ci->status == requested) && FrameCacheQuery(li->frame, ci->src)) ! { ! ci->status=available; ! FrameReplace(li->frame,li->bup); ! } ! if (ci->status != available) ! HTMLPrintInline(li, rp, ci->src, ci->type); ! else ! #endif ! HTMLPrintAnchor(li, rp, false, x, y); ! li->over = rp; return(0); } + #ifdef DELAY_INLINE + /* + * InlineStateSearch + */ + static byte * + InlineStateSearch(closure, url, size) + void *closure; + char *url; + size_t *size; + { + RenderPart *rp = (RenderPart *)closure; + InlineState *ci = (InlineState *)HTMLRPState(rp); + + *size = 0; + if (rp->destroy != DestroyInline) return(NULL); + + rp = ci->li->rphead; + + while (rp != NULL) + { + if (rp->destroy == DestroyInline) + { + ci = (InlineState *)HTMLRPState(rp); + if ((strcmp(ci->src,url) == 0) && (ci->status != available)) + return((byte *)(rp)); + } + rp = rp->mnext; + } + + return(NULL); + } + + + static byte * + InlineStateQuery(closure, key, size) + void *closure; + char *key; + size_t *size; + { + RenderPart *rp = (RenderPart *)closure; + InlineState *ci; + byte *retval = NULL; + + *size = 0; + if ((rp == NULL) || (rp->destroy != DestroyInline)) return (retval); + ci = (InlineState *)HTMLRPState(rp); + + if (strcmp(key,"type") == 0) + { + *size = ci->type; + } + if (strcmp(key,"delayed") == 0) + { + if (ci->status == unavailable) + *size = true; + } + if (strcmp(key,"alt_length") == 0) + { + *size = ci->alt_length; + } + if (strcmp(key,"text") == 0) + { + *size = ci->alt_length; + retval = (byte *) (ci->alt_text); + } + if (strcmp(key,"MIME") == 0) + { + *size = strlen(ci->alt_MIME); + retval = (byte *) (ci->alt_MIME); + } + if (strcmp(key,"source") == 0) + { + *size = strlen(ci->src); + retval = (byte *) (ci->src); + } + if (strcmp(key,"frame") == 0) + { + *size = sizeof(Frame); + retval = (byte *) (ci->frame); + } + if (strcmp(key,"presized") == 0) + { + *size = ci->size_given; + } + + return(retval); + } + + #endif + /* * * Public functions * */ + #ifdef DELAY_INLINE + void + InlineUndelay(state) + void *state; + { + InlineState *ci=(InlineState *)state; + if (ci->status > available) + --ci->status; + } + + Frame + InlineGetFrame(state) + void *state; + { + InlineState *ci=(InlineState *)state; + return(ci->frame); + } + + bool + InlineSizeGiven(state) + void *state; + { + InlineState *ci=(InlineState *)state; + return(ci->size_given); + } + #endif /* DELAY_INLINE */ /* * HandleImg *************** *** 151,156 **** - --- 331,341 ---- char *ws, *hs; RenderHooks orh; MemPool tmp; + #ifdef DELAY_INLINE + URLParts *sup; + char *value; + #endif + if (end) return; if ((url = MLFindAttribute(p, "src")) == NULL) return; *************** *** 171,187 **** li->delay = True; if ((ws = MLFindAttribute(p, "width")) != NULL && (hs = MLFindAttribute(p, "height")) != NULL) { unsigned int width, height; width = (unsigned int)atoi(ws); height = (unsigned int)atoi(hs); ci->frame = FrameCreateSized(li->frame, width, height); RealizeCallback(rp, 0, width, height); } ! else { ci->frame = FrameCreateUnsized(li->frame, RealizeCallback, rp); } - --- 356,450 ---- li->delay = True; + #ifdef DELAY_INLINE + ci->type = InlineImage; + ci->size_given = false; + /* */ + /* FrameGetDelayState calls WWWGetDelayState which does an XtGetValue */ + /* on the Inline Toggle Widget */ + /* */ + + + if ((value = FrameGetResource(li->frame, "inline.delay")) != NULL) + { + if ( atoi(value) != 0) + ci->status = unavailable; + else + ci->status = available; + } + else + ci->status = available; + + if ((sup = HTMLMakeURLParts(li, tmp, MLFindAttribute(p, "src"))) != NULL) + ci->src = URLMakeString(li->mp, sup, false); + + if (FrameCacheQuery(li->frame, ci->src)) ci->status = available; + + /* Find out if this is an inline anchor */ + if (rp->anchor != NULL) ci->type = InlineAnchor; + + /* Find out if this is an imagemap */ + if (MLFindAttribute(p, "ismap") != NULL) ci->type = InlineMap; + + if ((ci->alt_text = MLFindAttribute(p, "alt")) == NULL) + { + ci->alt_text = (char *)inline_icon[ci->type]; + ci->alt_MIME = (char *)inline_mime[ci->type]; + ci->alt_length = inline_length[ci->type]; + } + else + { + ci->alt_MIME = (char *)inline_mime[Other]; + ci->alt_length = strlen(ci->alt_text); + } + #endif + if ((ws = MLFindAttribute(p, "width")) != NULL && (hs = MLFindAttribute(p, "height")) != NULL) { unsigned int width, height; + #ifdef DELAY_INLINE + ci->size_given = true; + #endif + width = (unsigned int)atoi(ws); height = (unsigned int)atoi(hs); ci->frame = FrameCreateSized(li->frame, width, height); RealizeCallback(rp, 0, width, height); } ! #ifdef DELAY_INLINE ! else if ( ci->status ) ! { ! unsigned int width, height; ! ! if (strcmp(ci->alt_MIME,inline_mime[Other]) == 0 ) ! { ! HTMLSetupFonts(li); ! if (li->lc->defaultFont == NULL) ! { ! height = 32; ! width = 10 * strlen(ci->alt_text); ! } ! else ! { ! height = li->lc->defaultFont->ascent + li->lc->defaultFont->descent + ! + li->tmargin + li->textLineSpace;; ! width = XTextWidth(li->lc->defaultFont, ci->alt_text, ci->alt_length) ! + li->rmargin; ! } ! } ! else ! { ! width = 32; ! height = 24; ! } ! ! ci->frame = FrameCreateSized(li->frame, width, height); ! RealizeCallback(rp, 0, width, height); ! } ! #endif /* DELAY_INLINE */ ! else { ci->frame = FrameCreateUnsized(li->frame, RealizeCallback, rp); } *************** *** 189,194 **** - --- 452,461 ---- memset(&orh, 0, sizeof(RenderHooks)); orh.mouse = InlineMouseCallback; orh.motion = InlineMotionCallback; + #ifdef DELAY_INLINE + orh.search = InlineStateSearch; + orh.query = InlineStateQuery; + #endif FrameOverride(ci->frame, &orh, rp); FrameLoad(ci->frame, aup); diff -c ../old/html/layout.c html/layout.c *** ../old/html/layout.c Sat Apr 27 04:47:18 1996 - --- html/layout.c Sun May 12 19:36:30 1996 *************** *** 356,361 **** - --- 356,364 ---- if (rl->rphead != NULL && rl->width + rp->width >= rl->maxwidth && + #ifdef DELAY_INLINE + li->restack != NULL && + #endif li->restack->wrap) { RenderPart *xp, *fxp; diff -c ../old/proto/Imakefile proto/Imakefile *** ../old/proto/Imakefile Fri Apr 12 17:41:24 1996 - --- proto/Imakefile Sun May 12 19:37:53 1996 *************** *** 1,8 **** #include <../Common.tmpl> ! SRCS = file.c http.c ftp.c cache.c ! OBJS = file.o http.o ftp.o cache.o INCLUDES = -I../ -I../common -I../www - --- 1,8 ---- #include <../Common.tmpl> ! SRCS = file.c http.c ftp.c cache.c delayed.c ! OBJS = file.o http.o ftp.o cache.o delayed.o INCLUDES = -I../ -I../common -I../www diff -c ../old/proto/cache.c proto/cache.c *** ../old/proto/cache.c Sat Apr 27 03:39:22 1996 - --- proto/cache.c Sun May 12 19:36:31 1996 *************** *** 574,576 **** - --- 574,596 ---- return; } + + #ifdef DELAY_INLINE + /* + * CacheQuery + */ + bool + CacheQuery(url,cc) + char *url; + CacheClass *cc; + { + CacheEntry *ce; + + for (ce = cc->clist; ce != NULL; ce = ce->next) + { + if (strcmp(url, ce->url) == 0) return(true); + } + + return(false); + } + #endif diff -c ../old/proto/delayed.c proto/delayed.c *** ../old/proto/delayed.c Mon May 13 17:17:11 1996 - --- proto/delayed.c Mon May 13 17:08:37 1996 *************** *** 0 **** - --- 1,127 ---- + /* + * delayed.c + * + * Copyright (c) 1996, Michael Kellen + * See the file COPYRIGHT for details. + */ + #include + #include + + #ifdef HAVE_STDLIB_H + #include + #endif + + #ifdef HAVE_STRING_H + #include + #endif + + #ifdef HAVE_UNISTD_H + #include + #endif + + #include "WWW.h" + + typedef struct _delay_info + { + MemPool mp; + WWWProto wp; + WWWContext wc; + WWWTimeOut iot; + URLParts *up; + Document *d; + bool init_done; + char *alt_text; + char *alt_MIME; + int alt_length; + } DelayInfo; + + /* + * DelayRead + */ + static void + DelayRead(iot, closure) + WWWTimeOut iot; + void *closure; + { + DelayInfo *di = (DelayInfo *)closure; + char *b; + + di->init_done = true; + if (WWWInitData(di->wp, di->up, NULL, di->d) == -1) return; + if (di->alt_length > 1) + di->d->len = di->alt_length - 1; + else + di->d->len = 0; + b = (char *)alloc_mem(di->alt_length); + memcpy(b,di->alt_text,di->alt_length); + di->d->data = (byte *)b; + WWWAddData(di->wp); + WWWEndData(di->wp); + return; + } + + /* + * DelayDestroy + */ + static int + DelayDestroy(di) + DelayInfo *di; + { + if (!di->init_done && di->d != NULL) DocumentDestroy(di->d); + if (di->iot != NULL) WWWDestroyTimeOut(di->iot); + MPDestroy(di->mp); + + return(0); + } + + /* + * DelayInit + */ + static void * + DelayInit(up, pup, class_context, wp) + URLParts *up; + URLParts *pup; + void *class_context; + WWWProto wp; + { + DelayInfo *di; + MemPool mp; + size_t size; + + mp = MPCreate(); + di = (DelayInfo *)MPCGet(mp, sizeof(DelayInfo)); + di->mp = mp; + di->wp = wp; + di->wc = WWWProtoToContext(wp); + di->iot = WWWCreateTimeOut(di->wc, di); + di->up = URLDup(di->mp, up); + di->d = DocumentCreate(true); + + di->alt_MIME = MPStrDup(mp, WWWQueryInline(di->wc, wp, "MIME", &size)); + di->alt_text= MPStrDup(mp, WWWQueryInline(di->wc, wp, "text", &size)); + di->alt_length = size; + + di->d->mflist = MIMECreateField(di->d->mp, "content-type", di->alt_MIME); + WWWSetTimeOut(di->iot, 10, DelayRead); + + return(di); + } + + /* + * InitModule_Delayed + */ + void + InitModule_Delayed(wc) + WWWContext wc; + { + ProtoHooks ph; + + memset(&ph, 0, sizeof(ph)); + ph.protocol = "delay-inline"; + ph.init = DelayInit; + ph.local = true; + ph.destroy = DelayDestroy; + WWWAddProtoHooks(wc, &ph); + + return; + } ------- Message 39 Received: from jimi.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id ab19441; 16 May 96 14:29 PDT Received: from pf2.phil.uni-sb.de by JIMI.CS.UNLV.EDU id aa19381; 16 May 96 14:24 PDT Received: from schlunz.phil.uni-sb.de (benni@access177.telip.uni-sb.de [134.96.113.177]) by pf2.phil.uni-sb.de (8.7.5/8.7.5/chris) with ESMTP id XAA28795; Thu, 16 May 1996 23:25:13 +0200 (MET DST) Received: (from benni@localhost) by schlunz.phil.uni-sb.de (8.7.5/8.7.3) id XAA00510 for benni; Thu, 16 May 1996 23:31:43 +0200 Received: from JIMI.CS.UNLV.EDU (jimi.CS.UNLV.EDU [131.216.22.2]) by pf2.phil.uni-sb.de (8.7.5/8.7.5/chris) with SMTP id WAA05772 for ; Tue, 14 May 1996 22:36:59 +0200 (MET DST) Received: from jimi.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id aa07218; 14 May 96 11:55 PDT Received: from jimi.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id ab07100; 14 May 96 11:49 PDT Received: from oneworld.com by JIMI.CS.UNLV.EDU id aa07033; 14 May 96 11:45 PDT Received: from redoak.otp.com by cvo.oneworld.com with smtp (Smail3.1.29.1 #16) id m0uJP5B-000SBmC; Tue, 14 May 96 11:44 PDT Received: from 205.231.244.2 (205.231.244.2) by redoak.otp.com (EMWAC SMTPRS 0.70) with SMTP id ; Tue, 14 May 1996 11:28:29 +0100 Message-ID: Date: 14 May 96 11:28:29 From: Oak Tree Publications To: chimera-announce@cs.unlv.edu, nash@otp.com Subject: Intel Internet/Intranet Directory2 X-Mailer: Allaire Cold Fusion 1.5 Status: O Dear Chimera, We would like to invite you to participate in the Intel Internet/Intranet Directory. Please visit this site at: https://scripts.intel.com/cgi-db/dbml.exe?template=iaweb/director/main.dbm. As we work toward our goal of ensuring that business users can take full advantage of the Internet/Intranet, we created the Intel Internet/Intranet Directory. This resource gives users/developers access to the rapidly growing list of companies who are providing products and services that are compatible with Intel architecture, and can assist in all aspects of the development/usage of the Internet/Intranet. HOW THE DIRECTORY WORKS ======================= The directory is connected to a database and HTML pages are served up as users choose what they want to see in the directory. We take advantage of this process in the directory's product submission process. When you submit your information, you will see your entry as it will appear in the directory and your information goes directly into the database. HOW TO SUBMIT YOUR INFORMATION ======================= To add yourself to the directory, please choose the "Add your company to the directory or modify information" graphic at the top of the main page of the directory. For more information on how to update your information, please choose the "How to use the directory" graphic at the top of the main page of the directory. Intel will review your listing and reserves the right to edit or reject the listing. The directory will be updated daily, but it may take up to 24 hours for your changes to appear in the directory. Once you submit your information, you are responsible for keeping it up to date. You will be asked to review your information once a quarter. If you do not check it quarterly, you will be dropped from the directory. PASSWORDS: ======================= When submitting your company information, you will be asked to give a password, it must be at least eight characters and contain both letters and numbers. Once you have submitted your information and Intel has approved it, you will then be considered an existing account. When you need to update any information, you will use the password you created. You may change it at any time. SUBMIT YOUR COMPANY LOGO ======================== If you haven't done so already, you may submit your logo for display on your company page. For ease of use, your company logo should be 8K or less. If you wish to submit your logo, please: 1. Send us an URL pointing us to a graphic we can download from your site OR 2. Reply to this e-mail message with your logo attached in GIF or JPEG format RETURN LINK TO INTEL ==================== If you haven't done so already, please provide a return link to Intel at www.intel.com using the Intel linking button. You can download this button once you've logged in as an existing account with your password given to you at the beginning of this message. WE'D LIKE TO HEAR FROM YOU! =========================== We'd like to know what you think about the directory today and how we can improve it in the future. Please click on the "Questions and Comments" hot text at the bottom of the main page of the directory. You will be given an opportunity to submit comments here. We're looking forward to hearing from you! Enterprise Server Group Intel Corporation ------- Message 40 Received: from pf2.phil.uni-sb.de by JIMI.CS.UNLV.EDU id aa20440; 16 May 96 15:10 PDT Received: from schlunz.phil.uni-sb.de (benni@pfslip03.phil.uni-sb.de [134.96.82.203]) by pf2.phil.uni-sb.de (8.7.5/8.7.5/chris) with ESMTP id AAA29600 for ; Fri, 17 May 1996 00:11:01 +0200 (MET DST) Received: (from benni@localhost) by schlunz.phil.uni-sb.de (8.7.5/8.7.3) id AAA01053 for benni; Fri, 17 May 1996 00:17:39 +0200 Received: from JIMI.CS.UNLV.EDU (jimi.CS.UNLV.EDU [131.216.22.2]) by pf2.phil.uni-sb.de (8.7.5/8.7.5/chris) with SMTP id XAA28973 for ; Thu, 16 May 1996 23:40:42 +0200 (MET DST) Received: from jimi.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id aa19278; 16 May 96 14:22 PDT Received: from pf2.phil.uni-sb.de by JIMI.CS.UNLV.EDU id aa19221; 16 May 96 14:17 PDT Received: from schlunz.phil.uni-sb.de (benni@access177.telip.uni-sb.de [134.96.113.177]) by pf2.phil.uni-sb.de (8.7.5/8.7.5/chris) with ESMTP id XAA28606 for ; Thu, 16 May 1996 23:18:41 +0200 (MET DST) Received: (from benni@localhost) by schlunz.phil.uni-sb.de (8.7.5/8.7.3) id XAA00287 for benni; Thu, 16 May 1996 23:25:14 +0200 Received: from JIMI.CS.UNLV.EDU (jimi.CS.UNLV.EDU [131.216.22.2]) by pf2.phil.uni-sb.de (8.7.5/8.7.5/chris) with SMTP id XAA26054 for ; Sun, 12 May 1996 23:20:25 +0200 (MET DST) Received: from jimi.CS.UNLV.EDU by JIMI.CS.UNLV.EDU id aa04079; 12 May 96 14:01 PDT Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa04031; 12 May 96 13:57 PDT Received: from kroete2.freinet.de (arh135.ppp.uni-c.dk [130.228.13.135]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id WAA27550 for ; Sun, 12 May 1996 22:57:27 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uIiBC-0003pNC; Sun, 12 May 96 22:55 MET DST Message-Id: Subject: A moving target? To: Chimera Hacker List Date: Sun, 12 May 1996 22:55:45 +0200 (MET DST) Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS , applets, scripts, and a few other bits of the HTML 3.0 proposal. A lot of the HTML 3.0 proposal (including maths) didn't make it, and is being worked on, presumably for HTML 4.0. You can see more on https://www.w3.org/pub/WWW/MarkUp/Activity and on https://www.w3.org/pub/WWW/MarkUp/Wilbur/. There's a DTD, but there doesn't seem to be a nice non-SGML-wizards- version of it, like there was for HTML 3.0 (accesible through my homepage). Of course, we still have to get HTML 2.0 working, though I don't think I'm the only one who finds the temptation to start fiddling with post-2.0 stuff almost irresistable. Is 3.2 a realistic goal for Chimera 2.0, or should we settle for HTML 2.0, clean up the usability a little and get the damn thing released? The only thing you need to be able to do with applets and scripts for HTML 3.2 is to ignore them by the way. - -- Erik Corry ehcorry@inet.uni-c.dk ------- Message 41 Received: from iguana.reptiles.org by JIMI.CS.UNLV.EDU id aa24132; 19 May 96 11:04 PDT Received: by iguana.reptiles.org (/\##/\ Smail3.1.30.13 #30.5) id ; Sun, 19 May 96 14:04:31 -0400 (EDT) Message-Id: Date: Sun, 19 May 96 14:04:24 -0400 (EDT) From: Smarasderagd To: bug-chimera@cs.unlv.edu Subject: (redundant?) bug fix for cfh108 I ran into a problem related to interlaced GIF images with small heights. I'm almost certain that this has been fixed already, but just in case, here's a patch: - --- 1.1 1996/05/19 18:03:48 +++ gif.c 1996/05/19 17:21:53 @@ -511,7 +511,7 @@ if (image->x == image->width) { image->y += interlace_rate[image->pass]; - - if (image->y >= image->height) + while (image->y >= image->height) { image->pass++; if (image->pass == 4) return(GS_DONE); - --- 1.1 1996/05/19 18:04:09 +++ image.c 1996/05/19 16:48:22 @@ -10,6 +10,7 @@ #include #endif +#include #include #include @@ -871,6 +872,10 @@ SetSize(is); } + + /* "What time is it, boys and girls?" "It's PARANOIA time!" */ + + assert(fline <= lline && fline >= 0 && lline < image->height); /* * Every time ------- Message 42 Received: from haymarket.ed.ac.uk by JIMI.CS.UNLV.EDU id aa08834; 22 May 96 4:44 PDT Received: from aiai.ed.ac.uk (skye-alter.aiai.ed.ac.uk [192.41.104.6]) by haymarket.ed.ac.uk (8.6.13/8.6.12) with SMTP id MAA08872; Wed, 22 May 1996 12:44:11 +0100 Received: from subnode.aiai.ed.ac.uk (scarp) by aiai.ed.ac.uk; Wed, 22 May 96 12:42:11 BST Date: Wed, 22 May 96 12:42:11 BST Message-Id: <7278.9605221142@subnode.aiai.ed.ac.uk> From: Tim Bradshaw To: Rob McMullen Cc: bug-chimera@cs.unlv.edu Subject: Re: LessTif version of Chimera? In-Reply-To: References: <9605092005.AA18866@orion.ae.utexas.edu> * Rob McMullen wrote: > On Thu, 9 May 1996, Jim Rees wrote: >> Given two versions of the same app, the Motif version is virtually always >> going to be preferred. >> >> By you, but not by me. I have many reasons for preferring athena apps, but >> the biggest right now is that all the apps I use are athena or athena-like >> (xmh, xterm, xrn, emacs) and I don't want two different interfaces on one >> screen. > Obviously the same argument could be made for having all Motif apps. But, > for you and others, a big drawing card of Chimera was its Athena > interface. That is something we have to consider. Just to add my tuppence worth: there really are people who prefer athena to motif, primitive or no. I'm one, and I would definitely not be using chimera if it became motif or motif-alike. Athena is visually simple and has scrollbars that actually work properly... - --tim ------- Message 43 Received: from igw2.watson.ibm.com by JIMI.CS.UNLV.EDU id aa10417; 22 May 96 7:31 PDT Received: from hawpub.watson.ibm.com (hawpub.watson.ibm.com [9.2.90.19]) by igw2.watson.ibm.com (8.7.4/8.7.1) with SMTP id KAA22097; Wed, 22 May 1996 10:30:19 -0400 Received: by hawpub.watson.ibm.com (AIX 3.2/UCB 5.64/5/18/96) id AA12076; Wed, 22 May 1996 10:27:58 -0400 From: Uri Blumenthal Message-Id: <9605221427.AA12076@hawpub.watson.ibm.com> Subject: Re: LessTif version of Chimera? To: Tim Bradshaw Date: Wed, 22 May 1996 10:27:58 -0400 (EDT) Cc: rwmcm@hydra.ae.utexas.edu, bug-chimera@cs.unlv.edu In-Reply-To: <7278.9605221142@subnode.aiai.ed.ac.uk> from "Tim Bradshaw" at May 22, 96 12:42:11 pm Reply-To: uri@watson.ibm.com X-Mailer: ELM [version 2.4 PL25] Content-Type: text Tim Bradshaw says: > Just to add my tuppence worth: there really are people who prefer > athena to motif, primitive or no. I'm one, and I would definitely not > be using chimera if it became motif or motif-alike. I *might* use Chimera if it becomes Motif. I certainly will *not*, if it becomes LessTif or other Motif look-alike. - -- Regards, Uri uri@watson.ibm.com - -=-=-=-=-=-=- ------- Message 44 Received: from convex.convex.com by JIMI.CS.UNLV.EDU id aa13140; 22 May 96 10:30 PDT Received: from mikey.convex.com by convex.convex.com (8.6.4.2/1.35) id MAA21471; Wed, 22 May 1996 12:30:10 -0500 Received: by mikey.convex.com (8.6.12/1.28) id MAA22347; Wed, 22 May 1996 12:28:51 -0500 From: David DeSimone Message-Id: <199605221728.MAA22347@mikey.convex.com> Subject: Re: LessTif version of Chimera? To: Chimera Bug List Date: Wed, 22 May 1996 12:28:50 -0500 (CDT) Reply-To: David DeSimone X-Mailer: ELM [version 2.4 PL24 PGP6] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Length: 1054 Uri Blumenthal wrote: > > I *might* use Chimera if it becomes Motif. I certainly will *not*, > if it becomes LessTif or other Motif look-alike. I will use Chimera if/when it's a useful, stable browser. I don't particularly care what the buttons and menus look like; I'd much rather that it be a nice browser that gives Netscape and Mosaic a run for their money. I *do* care if it's a free browser that I can compile from source on any platform, even if I have to obtain other free libraries that I can also compile. I'm tired of being forced to use Netscape to browse the web because it's the only fast, stable browser that supports tables, which all the web authors seem to be enamored with. I'd rather use something else, but there isn't anything else. - -- David DeSimone | "The doctrine of human equality reposes on this: fox@convex.hp.com | that there is no man really clever who has not Hewlett-Packard | found that he is stupid." -- Gilbert K. Chesterson Convex Tech Ctr | PGP: 5B 47 34 9F 3B 9A B0 0D AB A6 15 F1 BB BE 8C 44 ------- Message 45 Received: from igw2.watson.ibm.com by JIMI.CS.UNLV.EDU id aa14040; 22 May 96 11:26 PDT Received: from hawpub.watson.ibm.com (hawpub.watson.ibm.com [9.2.90.19]) by igw2.watson.ibm.com (8.7.4/8.7.1) with SMTP id OAA26131; Wed, 22 May 1996 14:25:15 -0400 Received: by hawpub.watson.ibm.com (AIX 3.2/UCB 5.64/5/18/96) id AA33762; Wed, 22 May 1996 14:24:57 -0400 From: Uri Blumenthal Message-Id: <9605221824.AA33762@hawpub.watson.ibm.com> Subject: Re: LessTif version of Chimera? To: fox@rsn.hp.com Date: Wed, 22 May 1996 14:24:57 -0400 (EDT) Cc: bug-chimera@cs.unlv.edu In-Reply-To: <199605221728.MAA22347@mikey.convex.com> from "David DeSimone" at May 22, 96 12:28:50 pm Reply-To: uri@watson.ibm.com X-Mailer: ELM [version 2.4 PL25] Content-Type: text David DeSimone says: > > I *might* use Chimera if it becomes Motif. I certainly will *not*, > > if it becomes LessTif or other Motif look-alike. > > I will use Chimera if/when it's a useful, stable browser. I don't > particularly care what the buttons and menus look like; I'd much rather > that it be a nice browser that gives Netscape and Mosaic a run for their > money. You're missing the point. If in order to compile/install that "useful, stable browser" I have to indulge in crowding my system with less-than-stable LessTif - I'm not interested. - -- Regards, Uri uri@watson.ibm.com - -=-=-=-=-=-=- ------- Message 46 Received: from convex.convex.com by JIMI.CS.UNLV.EDU id aa15064; 22 May 96 12:22 PDT Received: from mikey.convex.com by convex.convex.com (8.6.4.2/1.35) id OAA27553; Wed, 22 May 1996 14:22:32 -0500 Received: by mikey.convex.com (8.6.12/1.28) id OAA29825; Wed, 22 May 1996 14:22:25 -0500 From: David DeSimone Message-Id: <199605221922.OAA29825@mikey.convex.com> Subject: Re: LessTif version of Chimera? To: uri@watson.ibm.com Date: Wed, 22 May 1996 14:22:25 -0500 (CDT) Cc: Chimera Bug List In-Reply-To: <9605221824.AA33762@hawpub.watson.ibm.com> from "Uri Blumenthal" at May 22, 96 02:24:57 pm Reply-To: David DeSimone X-Mailer: ELM [version 2.4 PL24 PGP6] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Length: 1467 Uri Blumenthal wrote: > > David DeSimone says: > > > > I don't particularly care what the buttons and menus look like; I'd > > much rather that it be a nice browser that gives Netscape and Mosaic a > > run for their money. > You're missing the point. If in order to compile/install that > "useful, stable browser" I have to indulge in crowding my > system with less-than-stable LessTif - I'm not interested. I'm not missing the point. I'm simply disagreeing with it. :) I don't consider downloading and compiling LessTif to be "crowding" my system, any more than downloading libjpeg or libpng. I guess it's just a difference of considering LessTif to be useful software or not. That being said, it wouldn't bother me a bit to have Chimera using Athena widgets; there are so many X programs that use them, I can't envision a user having trouble using Chimera with such an interface. The user would not be able to use other X tools without learning how to use the widgets anyway. Since Chimera is already using Athena, and switching to LessTif at this juncture would only slow its development, I feel it wouldn't make any sense to change things this drastically. - -- David DeSimone | "The doctrine of human equality reposes on this: fox@convex.hp.com | that there is no man really clever who has not Hewlett-Packard | found that he is stupid." -- Gilbert K. Chesterson Convex Tech Ctr | PGP: 5B 47 34 9F 3B 9A B0 0D AB A6 15 F1 BB BE 8C 44 ------- Message 47 Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa03794; 28 May 96 16:40 PDT Received: from kroete2.freinet.de (arh166.ppp.uni-c.dk [130.228.13.166]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id BAA29875 for ; Wed, 29 May 1996 01:39:35 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uOXwn-0003kLC; Wed, 29 May 96 01:13 MET DST Message-Id: Subject: Does everyone have Posix regular expressions To: Chimera Hacker List Date: Wed, 29 May 1996 01:13:04 +0200 (MET DST) Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS int regcomp(regex_t *preg, const char *regex, int cflags); int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size); void regfree(regex_t *preg); - -- Erik Corry ehcorry@inet.uni-c.dk ------- Message 48 Received: from inet.uni-c.dk by JIMI.CS.UNLV.EDU id aa04553; 28 May 96 17:45 PDT Received: from kroete2.freinet.de (arh139.ppp.uni-c.dk [130.228.13.139]) by inet.uni-c.dk (8.6.12/8.6.9) with SMTP id CAA03009 for ; Wed, 29 May 1996 02:45:20 +0200 Received: by kroete2.freinet.de (Smail3.1.28.1 #4) id m0uOZMU-0003jjC; Wed, 29 May 96 02:43 MET DST Message-Id: Subject: Re: Does everyone have Posix regular expressions To: Chimera Hacker List Date: Wed, 29 May 1996 02:43:42 +0200 (MET DST) In-Reply-To: <199605290013.TAA23981@mikey.convex.com> from "David DeSimone" at May 28, 96 07:13:46 pm Reply-To: Erik Corry From: Erik Corry X-Face: 5am4$s<`Jfx-,*w6$)uX,dDt3Z2w?4ZNGS-i@_w(Fzv%(<[(XtN*t\,OmV_a=lS One of my target platforms, ConvexOS, does not have the library > functions. We're BSD-based, and we do have the re_comp and re_exec > library functions; perhaps they will do? No. They have static state, which means you can only have one regular expression compiled at once. That basically means they're just toy implementations, not suitable for real work. Also they're not very powerful, they only tell you whether there was a regex match, not where it was. > I was under the impression that GNU autoconf will take care of > determining this, but I'm not sure if that even applies to Chimera at > this time. Trouble is, I don't just want to determine the presence or not of the routines, I also want to use them. I'll look into the Henry Spencer stuff. I looked at Perl, but it's not exactly easy getting code out of Perl because it's all so interdependent. There's also the GNU rx library which has a Posix- compatible interface, but that's GNU LGPL (library-public license). That might be OK, but it means you can't ship binaries unless they can be relinked to a newer version of the rx library. - -- Erik Corry ehcorry@inet.uni-c.dk ------- Message 49 Received: from concorde.inria.fr by JIMI.CS.UNLV.EDU id aa09265; 29 May 96 2:43 PDT Received: from fantomas.inria.fr (fantomas.inria.fr [128.93.11.34]) by concorde.inria.fr (8.7.1/8.7.1) with ESMTP id LAA11512; Wed, 29 May 1996 11:42:54 +0200 (MET DST) Received: (from lasgout@localhost) by fantomas.inria.fr (8.6.10/8.6.6) id LAA08896; Wed, 29 May 1996 11:42:53 +0200 Date: Wed, 29 May 1996 11:42:53 +0200 Message-Id: <199605290942.LAA08896@fantomas.inria.fr> From: Jean-Marc Lasgouttes To: ehcorry@inet.uni-c.dk CC: bug-chimera@cs.unlv.edu In-reply-to: (message from Erik Corry on Wed, 29 May 1996 01:13:04 +0200 (MET DST)) Subject: Re: Does everyone have Posix regular expressions Reply-to: Jean-Marc.Lasgouttes@inria.fr >>>>> "Erik" == Erik Corry writes: Erik> I'd like to use the regular expression support that is Erik> supposed to be in your C library accoring to Posix. But I'm Erik> not sure everyone has it. I know Linux has, but if people Erik> with access to other OSs could check that they have regcomp, Erik> regexec and regfree, I would be grateful. On SunOS4.1.3, what I found is: NAME regex, re_comp, re_exec - regular expression handler SYNOPSIS char *re_comp(s) char *s; re_exec(s) char *s; DESCRIPTION re_comp() compiles a string into an internal form suitable for pattern matching. re_exec() checks the argument string against the last string passed to re_comp(). re_comp() returns a NULL pointer if the string s was com- piled successfully; otherwise a string containing an error message is returned. If re_comp() is passed 0 or a null string, it returns without changing the currently compiled regular expression. re_exec() returns 1 if the string s matches the last com- piled regular expression, 0 if the string s failed to match the last compiled regular expression, and -1 if the compiled regular expression was invalid (indicating an internal error). The strings passed to both re_comp() and re_exec() may have trailing or embedded NEWLINE characters; they are terminated by null characters. The regular expressions recognized are described in the manual entry for ed(1), given the above difference. ------- Message 50 Received: from cheviot.ncl.ac.uk by JIMI.CS.UNLV.EDU id aa09511; 29 May 96 3:21 PDT Received: from aire.ncl.ac.uk by cheviot.ncl.ac.uk id (8.6.12/ for ncl.ac.uk) with SMTP; Wed, 29 May 1996 11:20:21 +0100 Received: (njdc@localhost) by aire.ncl.ac.uk (8.6.12/8.6.x-cf revision 3 for SunOS 4.1.x) id LAA19913; Wed, 29 May 1996 11:18:02 +0100 From: "J.D.Coleman" Message-Id: <199605291018.LAA19913@aire.ncl.ac.uk> Subject: Re: Does everyone have Posix regular expressions To: Chimera Mailing List Date: Wed, 29 May 1996 11:18:01 +0100 (BST) In-Reply-To: <199605290942.LAA08896@fantomas.inria.fr> from "Jean-Marc Lasgouttes" at May 29, 96 11:42:53 am X-Organisation: University of Newcastle Computing Service X-Phone: +44-191-222-8068 X-Fax: +44-191-222-8765 X-Mailer: ELM [version 2.4 PL23] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Length: 703 Erik Corry wrote: ... > They are supposed to look like this: > > #include ... Jean-Marc Lasgoutt wrote: ... > On SunOS4.1.3, what I found is: > > NAME > regex, re_comp, re_exec - regular expression handler ... Note that SunOS has /usr/include/regexp.h not /usr/include/regex.h. J PS. Re: should Chimera 2.0 support HTML 2.0 or 3.2 - well I'd like to see table support, but I think a release would be much preferable. Just my 2 pennies worth. PPS. Should we have a Chimera 3.2 for HTML 3.2? - -- "The Ravenous Bugblatter Beast of Traal! Is it safe?" "Oh yes, it's perfectly safe. It's just us who are in trouble!" - -- Wargame (n): battle simulation using painted numbers. ------- Message 51 Received: from uucp-1.csn.net by JIMI.CS.UNLV.EDU id aa11339; 29 May 96 7:44 PDT Received: from grendel.UUCP (uucp@localhost) by uucp-1.csn.net (8.7.5/8.7.3) with UUCP id IAA10961; Wed, 29 May 1996 08:42:57 -0600 (MDT) Received: by grendel.objinc.com (5.0/SMI-SVR4) id AA05210; Wed, 29 May 1996 08:30:35 +0700 Date: Wed, 29 May 1996 08:30:35 +0700 From: Chip Atkinson Message-Id: <9605291430.AA05210@grendel.objinc.com> To: ehcorry@inet.uni-c.dk Subject: Re: Does everyone have Posix regular expressions Cc: bug-chimera@cs.unlv.edu X-Sun-Charset: US-ASCII Greetings, My OS does not have regex.h, it has regexpr.h and regexp.h. I grepped the /usr/include.... directories for regcomp regexec regerror regfree and found nothing. I can mail these or other headers to you if desire. My OS is Solaris 2.3 Chip chip@objinc.com ------- End of Forwarded Messages