midaswww-2.1/ 40755 21345 173 0 6003430762 11303 5ustar steffcscmidaswww-2.1/SGMLAnchorText.h100666 21345 173 3145 5554674740 14342 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLAnchorTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLAnchorText widget */ /* */ /*==================================================================*/ #ifndef SGMLANCHORTEXT_H #define SGMLANCHORTEXT_H #include "SGMLCompositeText.h" extern WidgetClass sGMLAnchorTextObjectClass; typedef struct _SGMLAnchorTextRec *SGMLAnchorTextObject; #define SGMLNhref "href" #define SGMLCHref "Href" #define SGMLNname "name" #define SGMLCName "Name" #define SGMLNtitle "title" #define SGMLCTitle "Title" #define SGMLNhrefLength "hrefLength" #define SGMLNnameLength "nameLength" #define SGMLNtitleLength "titleLength" #define SGMLNvisited "visited" #define SGMLCVisited "Visited" #ifdef _NO_PROTO extern Widget CreateSGMLAnchorText(); #else #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern Widget SGMLCreateAnchorText(Widget parent, char *name, ArgList al, int ac); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _NO_PROTO */ #define SGMLIsAnchorText(w) XtIsSubclass(w,sGMLAnchorTextObjectClass) #endif SGMLANCHORTEXT_H midaswww-2.1/SGMLAnchorTextP.h100666 21345 173 3703 5554674740 14462 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLAnchorTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a anchortext segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLANCHORTEXTP_H #define SGMLANCHORTEXTP_H #include "SGMLAnchorText.h" #include "SGMLCompositeTextP.h" typedef struct _SGMLAnchorTextClassPart{ XtPointer ignore; /* no new class elements */ } SGMLAnchorTextClassPart; typedef struct _SGMLAnchorTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLCompositeTextClassPart sgml_composite_text_class; SGMLAnchorTextClassPart sgml_anchortext_class; } SGMLAnchorTextClassRec, *SGMLAnchorTextObjectClass; extern SGMLAnchorTextClassRec sGMLAnchorTextClassRec; typedef struct _SGMLAnchorTextPart { String href; /* pointer to href */ String name; /* pointer to name */ String title; /* pointer to title */ int href_length; /* length of href */ int name_length ; /* length of name */ int title_length; /* length of title */ SGMLRendition visited_rendition; Boolean visited; } SGMLAnchorTextPart; typedef struct _SGMLAnchorTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLCompositeTextPart sgml_composite_text; SGMLAnchorTextPart sgml_anchortext; } SGMLAnchorTextRec; #endif SGMLANCHORTEXTP_H midaswww-2.1/SGMLCompositeText.h100666 21345 173 5251 5554674740 15072 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLCompositeTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a composite text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLCOMPOSITETEXT_H #define SGMLCOMPOSITETEXT_H #include "SGMLText.h" #define SGMLNtagList "tagList" #define SGMLCTagList "TagList" #define SGMLRTagList "TagList" #define SGMLNdefaultClass "defaultClass" #define SGMLCClass "Class" #define SGMLRClass "Class" #define SGMLNmanagementPolicy "managementPolicy" #define SGMLCManagementPolicy "ManagementPolicy" #define SGMLRManagementPolicy "ManagementPolicy" #define SGMLNchildrenManaged "childrenManaged" #define SGMLINHERIT_CLASS NULL #define SGMLINHERIT_TAGLIST NULL #define SGMLMANAGE_NONE 0 #define SGMLMANAGE_ONE 1 #define SGMLMANAGE_ALL 2 #define SGMLEManageAll "manageall" #define SGMLEManageOne "manageone" #define SGMLEManageNone "managenone" extern WidgetClass sGMLCompositeTextObjectClass; typedef struct _SGMLCompositeTextRec *SGMLCompositeTextObject; typedef struct _TagList { XrmName name; WidgetClass class; int polarity; /* Controls inheritance * +1 = Add to parents list * -1 = Remove from parents list * 0 = No inheritance */ int matched; /* Controls searching for matching close tag */ } SGMLTagList; #ifdef _NO_PROTO extern void SGMLCompositeTextInsertChild(); extern Widget CreateSGMLCompositeText(); extern void SGMLCompositeTextDeleteChild(); extern Widget SGMLCreateWidget(); #else #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern Widget SGMLCreateCompositeText(Widget parent,char *name,ArgList al,int ac); extern void SGMLCompositeTextInsertChild(Widget child); extern void SGMLCompositeTextDeleteChild(Widget child); extern Widget SGMLCreateWidget(char *name,WidgetClass class,Widget parent,Arg al[],int ac); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _NO_PROTO */ #define SGMLIsCompositeText(w) XtIsSubclass(w,sGMLCompositeTextObjectClass) #endif SGMLCOMPOSITETEXT_H midaswww-2.1/SGMLCompositeTextP.h100666 21345 173 5652 5554674740 15217 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLCompositeTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLCOMPOSITETEXTP_H #define SGMLCOMPOSITETEXTP_H #include "SGMLCompositeText.h" #include "SGMLTextP.h" typedef void (*CallAdjustSizeProc)(); #define SGMLInheritCallAdjustSize ((CallAdjustSizeProc) _XtInherit) #define SGMLInheritGeometryManager XtInheritGeometryManager #define SGMLInheritChangeManaged XtInheritChangeManaged #define SGMLInheritInsertChild XtInheritInsertChild #define SGMLInheritDeleteChild XtInheritDeleteChild typedef struct _SGMLCompositeTextClassPart{ XtGeometryHandler geometry_manager; /* geometry manager for children */ XtWidgetProc change_managed; /* change managed state of child */ XtWidgetProc insert_child; /* physically add child to parent */ XtWidgetProc delete_child; /* physically remove child */ CallAdjustSizeProc call_adjust_size; /* call children's adjust size method */ XtPointer extension; /* pointer to extension record */ } SGMLCompositeTextClassPart; typedef struct _SGMLCompositeTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLCompositeTextClassPart sgml_composite_text_class; } SGMLCompositeTextClassRec, *SGMLCompositeTextObjectClass; extern SGMLCompositeTextClassRec sGMLCompositeTextClassRec; typedef struct _SGMLCompositeTextPart { WidgetList children; /* array of ALL widget children */ Boolean *managed; /* which children are managed */ Cardinal num_children; /* total number of widget children */ Cardinal num_slots; /* number of slots in children array */ XtOrderProc insert_position; /* compute position of new child */ SGMLTagList *tag_list; /* list of allowed tags */ Boolean own_tag_list; /* If the tag list needs to be freed */ WidgetClass default_class; /* default class of children */ int management_policy; /* policy for managing children */ } SGMLCompositeTextPart; typedef struct _SGMLCompositeTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLCompositeTextPart sgml_composite_text; } SGMLCompositeTextRec; #endif SGMLCOMPOSITETEXTP_H midaswww-2.1/SGMLCaptionText.h100666 21345 173 1761 5554674740 14527 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLCaptionTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a caption text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLCAPTIONTEXT_H #define SGMLCAPTIONTEXT_H #include "SGMLText.h" #define SGMLNcaption "caption" #define SGMLCCaption "Caption" extern WidgetClass sGMLCaptionTextObjectClass; typedef struct _SGMLCaptionTextRec *SGMLCaptionTextObject; #define SGMLIsCaptionText(w) XtIsSubclass(w,sGMLCaptionTextObjectClass) #endif SGMLCAPTIONTEXT_H midaswww-2.1/SGMLCaptionTextP.h100666 21345 173 3105 5554674741 14642 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLCaptionTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLCAPTIONTEXTP_H #define SGMLCAPTIONTEXTP_H #include "SGMLCaptionText.h" #include "SGMLCompositeTextP.h" typedef struct _SGMLCaptionTextClassPart{ XtPointer extension; /* pointer to extension record */ } SGMLCaptionTextClassPart; typedef struct _SGMLCaptionTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLCompositeTextClassPart sgml_composite_text_class; SGMLCaptionTextClassPart sgml_caption_text_class; } SGMLCaptionTextClassRec, *SGMLCaptionTextObjectClass; extern SGMLCaptionTextClassRec sGMLCaptionTextClassRec; typedef struct _SGMLCaptionTextPart { Widget caption; } SGMLCaptionTextPart; typedef struct _SGMLCaptionTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLCompositeTextPart sgml_composite_text; SGMLCaptionTextPart sgml_caption_text; } SGMLCaptionTextRec; #endif SGMLCAPTIONTEXTP_H midaswww-2.1/SGMLFormattedText.h100666 21345 173 2400 5554674741 15047 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLFormattedTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a formatted text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLFORMATTEDTEXT_H #define SGMLFORMATTEDTEXT_H #include "SGMLText.h" extern WidgetClass sGMLFormattedTextObjectClass; typedef struct _SGMLFormattedTextRec *SGMLFormattedTextObject; #ifdef _NO_PROTO extern Widget CreateSGMLFormattedText(); #else #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern Widget SGMLCreateFormattedText(Widget parent, char *name, ArgList al, int ac); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _NO_PROTO */ #define SGMLIsFormattedText(w) XtIsSubclass(w,sGMLFormattedTextObjectClass) #endif SGMLFORMATTEDTEXT_H midaswww-2.1/SGMLFormattedTextP.h100666 21345 173 3661 5554674741 15201 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLFormattedTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLFORMATTEDTEXTP_H #define SGMLFORMATTEDTEXTP_H #include "SGMLFormattedText.h" #include "SGMLTextP.h" typedef struct _SGMLFormattedTextClassPart{ XtPointer ignore; /* no new class elements */ } SGMLFormattedTextClassPart; typedef struct _SGMLFormattedTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLFormattedTextClassPart sgml_formatted_text_class; } SGMLFormattedTextClassRec, *SGMLFormattedTextObjectClass; extern SGMLFormattedTextClassRec sGMLFormattedTextClassRec; typedef struct _WordInfo { char *word; int length; Dimension size; } WordInfo; typedef struct _LineInfo { int start; int stop; int nchars; Dimension size; } LineInfo; typedef struct _SGMLFormattedTextPart { WordInfo *word_info; LineInfo *line_info; int nwords; int nlines; Dimension left_indent; /* left margin */ Dimension right_indent; /* right margin */ } SGMLFormattedTextPart; typedef struct _SGMLFormattedTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLFormattedTextPart sgml_formatted_text; } SGMLFormattedTextRec; #endif SGMLFORMATTEDTEXTP_H midaswww-2.1/SGMLFormText.h100666 21345 173 2206 5554674741 14031 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLFormTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a form text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLFORMTEXT_H #define SGMLFORMTEXT_H #include "SGMLCompositeText.h" #define SGMLNaction "action" #define SGMLCAction "Action" #define SGMLNmethod "method" #define SGMLCMethod "Method" #define SGMLNresult "result" #define SGMLCResult "Result" extern WidgetClass sGMLFormTextObjectClass; typedef struct _SGMLFormTextRec *SGMLFormTextObject; void SGMLFormSetResult(); #define SGMLIsFormText(w) XtIsSubclass(w,sGMLFormTextObjectClass) #endif SGMLFORMTEXT_H midaswww-2.1/SGMLFormTextP.h100666 21345 173 3107 5554674741 14152 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLFormTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLFORMTEXTP_H #define SGMLFORMTEXTP_H #include "SGMLFormText.h" #include "SGMLCompositeTextP.h" typedef struct _SGMLFormTextClassPart{ XtPointer extension; /* pointer to extension record */ } SGMLFormTextClassPart; typedef struct _SGMLFormTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLCompositeTextClassPart sgml_composite_text_class; SGMLFormTextClassPart sgml_form_text_class; } SGMLFormTextClassRec, *SGMLFormTextObjectClass; extern SGMLFormTextClassRec sGMLFormTextClassRec; typedef struct _SGMLFormTextPart { char *action; XrmQuark method; char *result; } SGMLFormTextPart; typedef struct _SGMLFormTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLCompositeTextPart sgml_composite_text; SGMLFormTextPart sgml_form_text; } SGMLFormTextRec; #endif SGMLFORMTEXTP_H midaswww-2.1/SGMLHyper.h100666 21345 173 5262 5554674742 13356 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLHyperWidget */ /* */ /* B.Raoult (mab@ecmwf.co.uk) Oct.91 */ /* T.Johnson - added SGML facilities June.92 */ /* (Tony Johnson) */ /* */ /* Hyper text like widget. */ /* */ /*==================================================================*/ #ifndef SGMLHYPER_H #define SGMLHYPER_H /* If you define MOTIF, the widget will inherit proprieties from the XmManager class : Help Callback, user data, ... */ /* #define MOTIF */ extern WidgetClass sGMLHyperWidgetClass; typedef struct _SGMLHyperRec * SGMLHyperWidget; /* * Define resource strings for the Hyper widget. */ #define SGMLNopenTag "openTag" #define SGMLNcloseTag "closeTag" #define SGMLNendTag "endTag" #define SGMLNparameterTag "parameterTag" #define SGMLNentityTag "entityTag" #define SGMLNentityEndTag "entityEndTag" #define SGMLCTagChar "TagChar" #define SGMLNcacheSize "cacheSize" #define SGMLCCacheSize "CacheSize" #define SGMLNmargin "margin" #define SGMLNnaturalWidth "naturalWidth" #define SGMLCWidth "Width" #define SGMLNcaseSensitiveTags "caseSensitiveTags" #define SGMLCCaseSensitiveTags "CaseSensitiveTags" /* Callback structure */ #define SGMLHYPER_REASON 1 typedef struct { int reason; /* always = SGMLHYPER_REASON */ XEvent *event; /* event */ char *text; /* pointer on highlighted text selected (read only) */ int length; /* length of selected text */ char *hidden; /* pointer to hidden text */ int hidden_length; } SGMLHyperCallbackStruct; Widget CreateSGMLHyper(); Widget SGMLHyperLoadFile(); Widget SGMLHyperSetText(); Widget SGMLHyperLoadText(); XtPointer SGMLHyperOpen(); Widget SGMLHyperClose(); Widget SGMLHyperSearch(); #ifdef _NO_PROTO void SGMLHyperSetTags(); char *SGMLHyperGetText(); void SGMLHyperDeclareClass(); #else void SGMLHyperSetTags(); char *SGMLHyperGetText(); void SGMLHyperDeclareClass(); #endif #define SGMLIsHyper(w) XtIsSubclass(w,sGMLHyperWidgetClass) #endif SGMLHYPER_H midaswww-2.1/SGMLHyperP.h100666 21345 173 7460 5554674742 13500 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLHyperWidget */ /* */ /* B.Raoult (mab@ecmwf.co.uk) Oct.91 */ /* T.Johnson - added SGML facilities June.92 */ /* (Tony Johnson) */ /* */ /* Hyper text like widget. */ /* */ /*==================================================================*/ #ifndef SGMLHYPERP_H #define SGMLHYPERP_H #define MOTIF #include "SGMLHyper.h" #ifdef MOTIF #include #if XmVersion >= 1002 #include #endif #endif /* SGMLHyper class : no new fields */ typedef struct _SGMLHyperClassPart{ int ignore; } SGMLHyperClassPart; typedef struct _SGMLHyperClassRec{ CoreClassPart core_class; CompositeClassPart composite_class; #ifdef MOTIF ConstraintClassPart constraint_class; XmManagerClassPart manager_class; #endif SGMLHyperClassPart sgml_hyper_class; } SGMLHyperClassRec, *SGMLHyperWidgetClass; extern SGMLHyperClassRec sGMLHyperClassRec; typedef struct _SGMLHyperPart { Cursor hand; /* Selecting cursor shape */ char open_tag; /* start of highlighted text mark */ char close_tag; /* end of highlighted text mark */ char end_tag; /* character used to hide text in highlight */ char parameter_tag; /* parameter tag */ char entity_tag; /* entity tag */ char entity_end_tag; /* entity ending tag */ Boolean case_sensitive_tags; /* Case sensitive tags */ Widget managed; Widget search_widget; Widget sw_flag; int cache_size; /* maximum number of cached text segments */ Dimension margin; /* margins size */ Dimension natural_width; /* size it tries to fit text into */ /* text_segment *grep_seg; /* segment where found text is * */ char *grep_txt; /* pointer to found text */ int grep_len; /* length of found text */ int grep_off; /* offset of found text */ Position grep_x; /* rectangle of found text*/ Position grep_y; Dimension grep_width; Dimension grep_height; WidgetList contains; /* List of contained widgets */ int contain_slots; int contain_used; WidgetList cache_list; /* List of cached widgets */ int cache_slots; int cache_used; SGMLTextObject last_selected; /* last selected segment */ SGMLTextObject last_cursor; /* last under cursor segment */ XtCallbackList activate; /* callback list */ Time last_time; /* time of last button click */ int select_index; /* select index */ char *copy_text; /* copy text */ Time selection_time; Boolean race; /* race condition */ Boolean select_start; /* flag for select start */ SGMLCopyInfo copy_info; } SGMLHyperPart; typedef struct _SGMLHyperRec { CorePart core; CompositePart composite; #ifdef MOTIF ConstraintPart constraint; XmManagerPart manager; #endif SGMLHyperPart sgml_hyper; } SGMLHyperRec; #endif SGMLHYPERP_H midaswww-2.1/SGMLContainerText.h100666 21345 173 2656 5554674742 15062 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLContainerTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines container text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLCONTAINERTEXT_H #define SGMLCONTAINERTEXT_H extern WidgetClass sGMLContainerTextObjectClass; typedef struct _SGMLContainerTextRec *SGMLContainerTextObject; #define SGMLNchild "child" #define SGMLCChild "Child" #define SGMLNverticalOffset "verticalOffset" #define SGMLCVerticalOffset "VerticalOffset" #define SGMLRWidget "Widget" #ifdef _NO_PROTO extern Widget CreateSGMLContainerText(); #else #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern Widget SGMLCreateContainerText(Widget parent, char *name, ArgList al, int ac); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _NO_PROTO */ #define SGMLIsContainerText(w) XtIsSubclass(w,sGMLContainerTextObjectClass) #endif SGMLCONTAINERTEXT_H midaswww-2.1/SGMLContainerTextP.h100666 21345 173 3264 5554674742 15176 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLContainerTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLCONTAINERTEXTP_H #define SGMLCONTAINERTEXTP_H #include "SGMLContainerText.h" #include "SGMLTextP.h" #define SGMLInheritGeometryManager XtInheritGeometryManager typedef struct _SGMLContainerTextClassPart{ XtGeometryHandler geometry_manager; /* geometry manager for children */ XtPointer extension; /* pointer to extension record */ } SGMLContainerTextClassPart; typedef struct _SGMLContainerTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLContainerTextClassPart sgml_container_text_class; } SGMLContainerTextClassRec, *SGMLContainerTextObjectClass; extern SGMLContainerTextClassRec sGMLContainerTextClassRec; typedef struct _SGMLContainerTextPart { Widget child; Position vertical_offset; } SGMLContainerTextPart; typedef struct _SGMLContainerTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLContainerTextPart sgml_container_text; } SGMLContainerTextRec; #endif SGMLCONTAINERTEXTP_H midaswww-2.1/SGMLInputText.h100666 21345 173 4164 5554674742 14233 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLContainerTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines input text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLINPUTTEXT_H #define SGMLINPUTTEXT_H extern WidgetClass sGMLInputTextObjectClass; typedef struct _SGMLInputTextRec *SGMLInputTextObject; #define SGMLNtype "type" #define SGMLCType "Type" #define SGMLNname "name" #define SGMLCName "Name" #define SGMLNvalue "value" #define SGMLCValue "Value" #define SGMLNsize "size" #define SGMLCSize "Size" #define SGMLNrows "rows" #define SGMLCRows "Rows" #define SGMLNcols "cols" #define SGMLCCols "Cols" #define SGMLNchecked "checked" #define SGMLCChecked "Checked" #define SGMLNselected "selected" #define SGMLCSelected "Selected" #define SGMLNmultiple "multiple" #define SGMLCMultiple "Multiple" #define SGMLNmaxlength "maxlength" #define SGMLCMaxlength "Maxlength" #define SGMLNautosubmit "autosubmit" #define SGMLCAutosubmit "Autosubmit" #define SGMLNimage "image" #define SGMLCImage "Image" #define SGMLNbombPixmap "bombPixmap" #define SGMLCBombPixmap "BombPixmap" #ifdef _NO_PROTO extern Widget CreateSGMLInputText(); #else #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern Widget SGMLCreateInputText(Widget parent, char *name, ArgList al, int ac); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _NO_PROTO */ #define SGMLIsInputText(w) XtIsSubclass(w,sGMLInputTextObjectClass) #endif SGMLINPUTTEXT_H midaswww-2.1/SGMLInputTextP.h100666 21345 173 3724 5554674743 14355 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLInputTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLINPUTTEXTP_H #define SGMLINPUTTEXTP_H #include "SGMLInputText.h" #include "SGMLContainerTextP.h" #include "xgifload.h" typedef struct _SGMLInputTextClassPart{ XtGeometryHandler geometry_manager; /* geometry manager for children */ XtPointer extension; /* pointer to extension record */ } SGMLInputTextClassPart; typedef struct _SGMLInputTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLContainerTextClassPart sgml_container_text_class; SGMLInputTextClassPart sgml_input_text_class; } SGMLInputTextClassRec, *SGMLInputTextObjectClass; extern SGMLInputTextClassRec sGMLInputTextClassRec; typedef struct _SGMLInputTextPart { XrmQuark type; char *value; char *name; int size; int maxlength; int rows; int cols; Boolean checked; Boolean selected; Boolean multiple; Boolean auto_submit; Widget child; Pixmap bomb; GIFImage *image; char *passwd; } SGMLInputTextPart; typedef struct _SGMLInputTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLContainerTextPart sgml_container_text; SGMLInputTextPart sgml_input_text; } SGMLInputTextRec; #endif SGMLINPUTTEXTP_H midaswww-2.1/SGMLListText.h100666 21345 173 4243 5554674743 14046 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLListTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a list text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLLISTTEXT_H #define SGMLLISTTEXT_H #include "SGMLCompositeText.h" #define SGMLNnumBullets "numBullets" #define SGMLNallocBullets "allocBullets" #define SGMLNbulletType "bulletType" #define SGMLCBulletType "BulletType" #define SGMLRBulletType "BulletType" #define SGMLNbulletSize "bulletSize" #define SGMLCBulletSize "BulletSize" #define SGMLNbulletColor "bulletColor" #define SGMLCBulletColor "BulletColor" #define SGMLNbulletIndent "bulletIndent" #define SGMLCBulletIndent "BulletIndent" #define SGMLNbulletMarker "bulletMarker" #define SGMLCBulletMarker "BulletMarker" #define SGMLBULLET_ORDERED -3 #define SGMLBULLET_UNORDERED -2 #define SGMLBULLET_DEFAULT -1 #define SGMLBULLET_BULLET 0 #define SGMLBULLET_DIAMOND 1 #define SGMLBULLET_SQUARE 2 #define SGMLBULLET_NUMERIC 3 #define SGMLBULLET_UPPER 4 #define SGMLBULLET_LOWER 5 #define SGMLBULLET_ARROW 30 #define SGMLBULLET_LINKEDARROW 31 extern WidgetClass sGMLListTextObjectClass; typedef struct _SGMLListTextRec *SGMLListTextObject; #ifdef _NO_PROTO extern Widget CreateSGMLListText(); #else #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern Widget SGMLCreateListText(Widget parent, char *name, ArgList al, int ac); extern void SGMLListTextInsertChild(Widget parent, Widget child); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _NO_PROTO */ #define SGMLIsListText(w) XtIsSubclass(w,sGMLListTextObjectClass) #endif SGMLLISTTEXT_H midaswww-2.1/SGMLListTextP.h100666 21345 173 4334 5554674743 14167 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLListTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLLISTTEXTP_H #define SGMLLISTTEXTP_H #include "SGMLListText.h" #include "SGMLCompositeTextP.h" typedef struct _SGMLListTextClassPart{ XtPointer extension; /* pointer to extension record */ } SGMLListTextClassPart; typedef struct _SGMLListTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLCompositeTextClassPart sgml_composite_text_class; SGMLListTextClassPart sgml_list_text_class; } SGMLListTextClassRec, *SGMLListTextObjectClass; extern SGMLListTextClassRec sGMLListTextClassRec; typedef struct _BulletList { SGMLPosition x; SGMLPosition y; SGMLPosition top; } BulletListItem, *BulletList; typedef struct _SGMLListTextPart { BulletList bullets; /* pointer to array of bullets */ Cardinal num_bullets; /* total number of bullets */ Cardinal alloc_bullets; /* total number of bullets allocated */ int bullet_type; /* type of bullets */ Dimension bullet_size; /* size of bullets */ Pixel bullet_color; /* color of bullets */ Dimension bullet_indent; /* indentation of bullet */ XrmQuark bullet_marker; /* Name of marker which triggers bullet */ } SGMLListTextPart; typedef struct _SGMLListTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLCompositeTextPart sgml_composite_text; SGMLListTextPart sgml_list_text; } SGMLListTextRec; #endif SGMLLISTTEXTP_H midaswww-2.1/SGMLMarkerText.h100666 21345 173 4360 5554674743 14354 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLMarkerTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines marker text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLMARKERTEXT_H #define SGMLMARKERTEXT_H #include "SGMLMarkerText.h" extern WidgetClass sGMLMarkerTextObjectClass; typedef struct _SGMLMarkerTextRec *SGMLMarkerTextObject; #define SGMLNcolumnAlign "columnAlign" #define SGMLCColumnAlign "ColumnAlign" #define SGMLNposition "position" #define SGMLCPosition "Position" #define SGMLNpixmapDepth "pixmapDepth" #define SGMLNpixmap "pixmap" #define SGMLCPixmap "Pixmap" #define SGMLNimage "image" #define SGMLCImage "Image" #define SGMLNdeleteImageWhenDone "deleteImageWhenDone" #define SGMLCDeleteImageWhenDone "DeleteImageWhenDone" #define SGMLNbombPixmap "bombPixmap" /* Callback structure (cf SGMLText.h, but with x,y added) */ typedef struct { int reason; /* always = HYPER_REASON */ XEvent *event; /* event */ char *text; /* pointer on highlighted text selected (read only) */ int length; /* length of selected text */ char *param; /* pointer to hidden text */ int param_length; Position x,y; } SGMLMarkerTextCallbackStruct; #ifdef _NO_PROTO extern Widget CreateSGMLMarkerText(); #else #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern Widget SGMLCreateMarkerText(Widget parent, char *name, ArgList al, int ac); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _NO_PROTO */ #define SGMLIsMarkerText(w) XtIsSubclass(w,sGMLMarkerTextObjectClass) #endif SGMLMARKERTEXT_H midaswww-2.1/SGMLMarkerTextP.h100666 21345 173 3427 5554674743 14477 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLMarkerTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLMARKERTEXTP_H #define SGMLMARKERTEXTP_H #include "SGMLMarkerText.h" #include "SGMLTextP.h" #include "xgifload.h" typedef struct _SGMLMarkerTextClassPart{ XtPointer ignore; /* no new class elements */ } SGMLMarkerTextClassPart; typedef struct _SGMLMarkerTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLMarkerTextClassPart sgml_marker_text_class; } SGMLMarkerTextClassRec, *SGMLMarkerTextObjectClass; extern SGMLMarkerTextClassRec sGMLMarkerTextClassRec; typedef struct _SGMLMarkerTextPart { Dimension column_align; Position position; Pixmap pixmap; GIFImage *image; XImage *ximage; unsigned int pixmap_width; unsigned int pixmap_height; unsigned int pixmap_border_width; unsigned int pixmap_depth; Boolean delete_image; Pixmap bomb_pixmap; GC bomb_gc; GC gc1; GC gc2; } SGMLMarkerTextPart; typedef struct _SGMLMarkerTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLMarkerTextPart sgml_marker_text; } SGMLMarkerTextRec; #endif SGMLMARKERTEXTP_H midaswww-2.1/SGMLRuleText.h100666 21345 173 2440 5554674743 14037 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLRuleTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines rule text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLRULETEXT_H #define SGMLRULETEXT_H #include "SGMLRuleText.h" extern WidgetClass sGMLRuleTextObjectClass; typedef struct _SGMLRuleTextRec *SGMLRuleTextObject; #define SGMLNruleHeight "ruleHeight" #define SGMLCRuleHeight "RuleHeight" #ifdef _NO_PROTO extern Widget CreateSGMLRuleText(); #else #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern Widget SGMLCreateRuleText(Widget parent, char *name, ArgList al, int ac); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _NO_PROTO */ #define SGMLIsRuleText(w) XtIsSubclass(w,sGMLRuleTextObjectClass) #endif SGMLRULETEXT_H midaswww-2.1/SGMLRuleTextP.h100666 21345 173 2625 5554674744 14165 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLRuleTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLRULETEXTP_H #define SGMLRULETEXTP_H #include "SGMLRuleText.h" #include "SGMLTextP.h" typedef struct _SGMLRuleTextClassPart{ XtPointer ignore; /* no new class elements */ } SGMLRuleTextClassPart; typedef struct _SGMLRuleTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLRuleTextClassPart sgml_rule_text_class; } SGMLRuleTextClassRec, *SGMLRuleTextObjectClass; extern SGMLRuleTextClassRec sGMLRuleTextClassRec; typedef struct _SGMLRuleTextPart { Dimension height; GC gc1; GC gc2; } SGMLRuleTextPart; typedef struct _SGMLRuleTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLRuleTextPart sgml_rule_text; } SGMLRuleTextRec; #endif SGMLRULETEXTP_H midaswww-2.1/SGMLPlainText.h100666 21345 173 2440 5554674744 14174 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLPlainTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines aplain text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLPLAINTEXT_H #define SGMLPLAINTEXT_H #include "SGMLText.h" extern WidgetClass sGMLPlainTextObjectClass; typedef struct _SGMLPlainTextRec *SGMLPlainTextObject; #define SGMLNtabs "tabs" #define SGMLCTabs "Tabs" #ifdef _NO_PROTO extern Widget CreateSGMLPlainText(); #else #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern Widget SGMLCreatePlainText(Widget parent, char *name, ArgList al, int ac); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _NO_PROTO */ #define SGMLIsPlainText(w) XtIsSubclass(w,sGMLPlainTextObjectClass) #endif SGMLPLAINTEXT_H midaswww-2.1/SGMLPlainTextP.h100666 21345 173 2652 5554674744 14321 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLPlainTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLPLAINTEXTP_H #define SGMLPLAINTEXTP_H #include "SGMLPlainText.h" #include "SGMLTextP.h" typedef struct _SGMLPlainTextClassPart{ XtPointer ignore; /* no new class elements */ } SGMLPlainTextClassPart; typedef struct _SGMLPlainTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLPlainTextClassPart sgml_plain_text_class; } SGMLPlainTextClassRec, *SGMLPlainTextObjectClass; extern SGMLPlainTextClassRec sGMLPlainTextClassRec; typedef struct _SGMLPlainTextPart { int tabs; /* controls handling of tabs */ } SGMLPlainTextPart; typedef struct _SGMLPlainTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLPlainTextPart sgml_plain_text; } SGMLPlainTextRec; #endif SGMLPLAINTEXTP_H midaswww-2.1/SGMLTableText.h100666 21345 173 2041 5554674744 14155 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLTableTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a table text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLTABLETEXT_H #define SGMLTABLETEXT_H #include "SGMLText.h" #define SGMLNrows "rows" #define SGMLNcolumns "columns" #define SGMLNborder "border" #define SGMLCBorder "Border" extern WidgetClass sGMLTableTextObjectClass; typedef struct _SGMLTableTextRec *SGMLTableTextObject; #define SGMLIsTableText(w) XtIsSubclass(w,sGMLTableTextObjectClass) #endif SGMLTABLETEXT_H midaswww-2.1/SGMLTableTextP.h100666 21345 173 3615 5554674744 14305 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLTableTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLTABLETEXTP_H #define SGMLTABLETEXTP_H #include "SGMLTableText.h" #include "SGMLCaptionTextP.h" typedef struct _SGMLTableTextClassPart{ XtPointer extension; /* pointer to extension record */ } SGMLTableTextClassPart; typedef struct _SGMLTableTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; SGMLCompositeTextClassPart sgml_composite_text_class; SGMLCaptionTextClassPart sgml_caption_text_class; SGMLTableTextClassPart sgml_table_text_class; } SGMLTableTextClassRec, *SGMLTableTextObjectClass; extern SGMLTableTextClassRec sGMLTableTextClassRec; typedef struct _SGMLTableTextPart { int rows; /* Number of rows in table */ int cols; /* Number of columns in table */ SGMLDimension *columnWidth; SGMLDimension *rowHeight; Widget *widgets; /* Pointers to marker widgets */ Boolean border; /* Draw borders around table */ } SGMLTableTextPart; typedef struct _SGMLTableTextRec { ObjectPart object; SGMLTextPart sgml_text; SGMLCompositeTextPart sgml_composite_text; SGMLCaptionTextPart sgml_caption_text; SGMLTableTextPart sgml_table_text; } SGMLTableTextRec; #endif SGMLTABLETEXTP_H midaswww-2.1/SGMLText.h100666 21345 173 20040 5554674745 13225 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLText widget */ /* */ /*==================================================================*/ #ifndef SGMLTEXT_H #define SGMLTEXT_H #if XtSpecificationRelease == 4 #define XrmPermStringToQuark(x) XrmStringToQuark(x) #endif extern WidgetClass sGMLTextObjectClass; typedef struct _SGMLTextRec *SGMLTextObject; #define SGMLALIGNMENT_NONE 0 #define SGMLALIGNMENT_LEFT 1 #define SGMLALIGNMENT_RIGHT 2 #define SGMLALIGNMENT_CENTER 3 #define SGMLLINE_STYLE_SOLID 0 #define SGMLLINE_STYLE_DOTTED 1 #define SGMLLINE_STYLE_DASHED 2 #define SGMLBREAK_NEVER 0 #define SGMLBREAK_ALWAYS 2 #define SGMLBREAK_SOFT 1 #define SGMLINHERIT_ALIGNMENT -999 #define SGMLINHERIT_MARGIN -1 #define SGMLINHERIT_PARAGRAPHINDENT -999 #define SGMLINHERIT_SPACE 32767 #define SGMLINHERIT_BREAK -999 #define SGMLINHERIT_SENSITIVITY 2 #define SGMLINHERIT_UNDERLINE -999 #define SGMLINHERIT_OUTLINE 2 #define SGMLINHERIT_UNDERLINEHEIGHT 999 #define SGMLINHERIT_UNDERLINESTYLE 999 #define SGMLINHERIT_COLOR NULL #define SGMLINHERIT_SIZE 0 #define SGMLINHERIT_QUARK NULL #define SGMLNcolor "color" #define SGMLCColor "Color" #define SGMLNunderline "underline" #define SGMLCUnderline "Underline" #define SGMLNoutline "outline" #define SGMLCOutline "Outline" #define SGMLNunderlineHeight "underlineHeight" #define SGMLCUnderlineHeight "UnderlineHeight" #define SGMLNunderlineStyle "underlineStyle" #define SGMLCUnderlineStyle "UnderlineStyle" #define SGMLNbreakBefore "breakBefore" #define SGMLNbreakAfter "breakAfter" #define SGMLCBreak "Break" #define SGMLRBreak "Break" #define SGMLRLineStyle "LineStyle" #define SGMLNsensitive "sensitive" #define SGMLCSensitive "Sensitive" #define SGMLNmanaged "managed" #define SGMLCManaged "Managed" #define SGMLNmatched "matched" #define SGMLCMatched "Matched" #define SGMLNrightIndent "rightIndent" #define SGMLNleftIndent "leftIndent" #define SGMLNrightMargin "rightMargin" #define SGMLNleftMargin "leftMargin" #define SGMLNparagraphIndent "paragraphIndent" #define SGMLNspaceBefore "spaceBefore" #define SGMLNspaceAfter "spaceAfter" #define SGMLCMargin "Margin" #define SGMLNalignment "alignment" #define SGMLCAlignment "Alignment" #define SGMLNspacing "spacing" #define SGMLCSpacing "Spacing" #define SGMLNdescent "descent" #define SGMLCDescent "Descent" #define SGMLNascent "ascent" #define SGMLCAscent "Ascent" #define SGMLNuserdata "userdata" #define SGMLCUserdata "Userdata" #define SGMLNfontSize "fontSize" #define SGMLCFontSize "FontSize" #define SGMLNfontRegistry "fontRegistry" #define SGMLCFontRegistry "FontRegistry" #define SGMLNfontSpacing "fontSpacing" #define SGMLCFontSpacing "FontSpacing" #define SGMLNfontWidth "fontWidth" #define SGMLCFontWidth "FontWidth" #define SGMLNfontSlant "fontSlant" #define SGMLCFontSlant "FontSlant" #define SGMLNfontWeight "fontWeight" #define SGMLCFontWeight "FontWeight" #define SGMLNfontFamily "fontFamily" #define SGMLCFontFamily "FontFamily" #define SGMLNfont16 "font16" #define SGMLCFont16 "Font16" #define SGMLNexactTerminator "exactTerminator" #define SGMLCExactTerminator "ExactTerminator" #define SGMLNhideIllegalTags "hideIllegalTags" #define SGMLCHideIllegalTags "HideIllegalTags" #define SGMLNsupportsEntities "supportsEntities" #define SGMLCSupportsEntities "SupportsEntities" #define SGMLNtext "text" #define SGMLCText "Text" #define SGMLNparam "param" #define SGMLCParam "param" #define SGMLNlength "length" #define SGMLCLength "Length" #define SGMLNparamLength "paramLength" #define SGMLCParamLength "ParamLength" #define SGMLNwidth "width" #define SGMLNheight "height" #define SGMLNinheritance "inheritance" #define SGMLNactivateCallback "activateCallback" #define SGMLNcreateCallback "createCallback" #define SGMLNmapCallback "mapCallback" #define SGMLNunmapCallback "unmapCallback" #define SGMLCCallback "Callback" #define SGMLRQuark "Quark" #define SGMLSELECT_REGION 1 #define SGMLSELECT_WORD 2 #define SGMLSELECT_LINE 3 #define SGMLSELECT_ALL 4 #define SGMLSELECT_WIDGET 999 #define SGMLDUMP_ASCII 1 #define SGMLDUMP_HTML 2 #define SGMLDUMP_HTML_ASCII 3 /* Callback structure */ #define SGMLTEXT_ACTIVATE 1 #define SGMLTEXT_CREATE 2 #define SGMLTEXT_MAP 2 typedef struct { int reason; /* always = HYPER_REASON */ XEvent *event; /* event */ char *text; /* pointer on highlighted text selected (read only) */ int length; /* length of selected text */ char *param; /* pointer to hidden text */ int param_length; } SGMLTextCallbackStruct; /* Other exported data structures */ typedef struct _SGMLRendition { Pixel color; Boolean outline; int underline; Dimension underline_height; int underline_style; XrmQuark family; XrmQuark weight; XrmQuark slant; XrmQuark width; int size; XrmQuark spacing; XrmQuark registry; } SGMLRendition; /* * Note: We use longs for all positions and dimensions since * SGML widgets can be BIG. This differs from Xt which uses * shorts for these quantities. */ typedef long SGMLPosition; typedef unsigned long SGMLDimension; typedef struct _SGMLCoord { SGMLPosition x,y; Dimension descent; Dimension ascent; } SGMLCoord; typedef struct { SGMLCoord coord; int alignment; Boolean leave_space; Boolean broken; Dimension space; SGMLDimension natural_width; SGMLDimension actual_width; } SGMLGeometry; typedef struct _SGMLDumpTextInfo { Widget sw; /* search widget */ Boolean begin_sw; Boolean calc_len; /* calculate the length */ int format_type; /* html, plain, html-plain */ int copy_type; /* word, line, region */ char *current_pos; char *last_pos; int last_len; int line_spacing; int spacing; } SGMLDumpTextInfo; typedef struct _SGMLCopy { int first_x, first_y; int current_x, current_y; int last_x, last_y; Widget last_widget; Widget current_widget; Widget first_widget; Widget cw; Boolean last_mode, current_mode; char *first_char; char *last_pos; Boolean flag, sw_flag; } SGMLCopyInfo; #ifdef _NO_PROTO extern Widget CreateSGMLText(); #else #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern Widget SGMLCreateText(Widget parent, char *name, ArgList al, int ac); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _NO_PROTO */ #define SGMLIsText(w) XtIsSubclass(w,sGMLTextObjectClass) #endif SGMLTEXT_H midaswww-2.1/SGMLTextP.h100666 21345 173 17046 5554674745 13361 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #ifndef SGMLTEXTP_H #define SGMLTEXTP_H #include "SGMLText.h" /* SGMLText class */ typedef void (*ComputeSizeProc)(); typedef Boolean (*AdjustSizeProc)(); typedef void (*AdjustPositionProc)(); typedef void (*ExposeProc)(); typedef void (*ActivateProc)(); typedef void (*HiliteProc)(); typedef Widget (*ContainsProc)(); typedef void (*CallCreateCallbackProc)(); typedef void (*CallMapCallbackProc)(); typedef void (*MakeVisibleProc)(); typedef Boolean (*SGMLSetValuesProc)(); typedef Boolean (*InheritChangesProc)(); typedef int (*ComputeChangeMaskProc)(); typedef Widget (*SearchProc)(); typedef Boolean (*ClearSelectProc)(); typedef Widget (*HiliteSelectionProc)(); typedef void (*XYToPosProc)(); typedef void (*PosToXYProc)(); typedef Boolean (*DumpTextProc)(); #define SGMLInheritComputeSize ((ComputeSizeProc) _XtInherit) #define SGMLInheritAdjustSize ((AdjustSizeProc) _XtInherit) #define SGMLInheritAdjustPosition ((AdjustPositionProc) _XtInherit) #define SGMLInheritExpose ((ExposeProc) _XtInherit) #define SGMLInheritActivate ((ActivateProc) _XtInherit) #define SGMLInheritHilite ((HiliteProc) _XtInherit) #define SGMLInheritContains ((ContainsProc) _XtInherit) #define SGMLInheritCallCreateCallback ((CallCreateCallbackProc) _XtInherit) #define SGMLInheritCallMapCallback ((CallMapCallbackProc) _XtInherit) #define SGMLInheritMakeVisible ((MakeVisibleProc) _XtInherit) #define SGMLInheritComputeChangeMask ((ComputeChangeMaskProc) _XtInherit) #define SGMLInheritSearch ((SearchProc) _XtInherit) #define SGMLInheritClearSelect ((ClearSelectProc) _XtInherit) #define SGMLInheritHiliteSelection ((HiliteSelectionProc) _XtInherit) #define SGMLInheritXYToPos ((XYToPosProc) _XtInherit) #define SGMLInheritPosToXY ((PosToXYProc) _XtInherit) #define SGMLInheritDumpText ((DumpTextProc) _XtInherit) #define SGMLMLEFT_MARGIN (1 << 0) #define SGMLMRIGHT_MARGIN (1 << 1) #define SGMLMPARAGRAPH_INDENT (1 << 2) #define SGMLMSPACE_BEFORE (1 << 3) #define SGMLMSPACE_AFTER (1 << 4) #define SGMLMBREAK_BEFORE (1 << 5) #define SGMLMBREAK_AFTER (1 << 6) #define SGMLMALIGNMENT (1 << 7) #define SGMLMSENSITIVE (1 << 8) #define SGMLMEXACT_TERMINATOR (1 << 9) #define SGMLMHIDE_ILLEGAL_FLAGS (1 << 10) #define SGMLMSUPPORTS_ENTITIES (1 << 11) #define SGMLMOUTLINE (1 << 12) #define SGMLMUNDERLINE (1 << 13) #define SGMLMUNDERLINE_HEIGHT (1 << 14) #define SGMLMUNDERLINE_STYLE (1 << 15) #define SGMLMCOLOR (1 << 16) #define SGMLMFAMILY (1 << 17) #define SGMLMWEIGHT (1 << 18) #define SGMLMSLANT (1 << 19) #define SGMLMWIDTH (1 << 20) #define SGMLMSPACING (1 << 21) #define SGMLMREGISTRY (1 << 22) #define SGMLMSIZE (1 << 23) #define SGMLMFONT16 (1 << 24) static int gcMask = SGMLMUNDERLINE_HEIGHT | SGMLMCOLOR | SGMLMFAMILY | SGMLMWEIGHT | SGMLMSLANT | SGMLMWIDTH | SGMLMSPACING | SGMLMREGISTRY | SGMLMSIZE | SGMLMUNDERLINE_STYLE | SGMLMFONT16; typedef struct _SGMLTextClassPart{ ComputeSizeProc compute_size; AdjustSizeProc adjust_size; AdjustPositionProc adjust_position; ExposeProc expose; ActivateProc activate; HiliteProc hilite; ContainsProc contains; CallCreateCallbackProc call_create_callback; CallMapCallbackProc call_map_callback; MakeVisibleProc make_visible; SGMLSetValuesProc sgml_set_values; InheritChangesProc inherit_changes; ComputeChangeMaskProc compute_change_mask; SearchProc search; ClearSelectProc clear_select; HiliteSelectionProc hilite_selection; XYToPosProc xy_to_pos; PosToXYProc pos_to_xy; DumpTextProc dump_text; XtPointer extension; } SGMLTextClassPart; typedef struct _SGMLTextClassRec{ ObjectClassPart object_class; SGMLTextClassPart sgml_text_class; } SGMLTextClassRec, *SGMLTextObjectClass; extern SGMLTextClassRec sGMLTextClassRec; typedef struct _SGMLTextPart { String text; /* pointer to text */ String param; /* pointer to parameters */ int length; /* length of text */ int param_length ; /* length of parameters */ SGMLCoord begin; SGMLCoord end; SGMLDimension width,height; /* Size of drawn text */ /* * This horrible fix is to work around a bug in some versions * of the intrinsics where XtPhase2Destroy attempts to remove a widget * from its (non-widget) parent's popup list, (which doesn't exist) */ #ifdef VAX char dummy; int num_popups; Position margin; #else /* HP seems to have problems unless we use this silly contruct */ #ifdef DEC /* dec - alpha osf */ int num_popups; Position margin; #else Position margin; int num_popups; #endif #endif int inheritance; int right_margin; int left_margin; int right_indent; int left_indent; int paragraph_indent; Dimension space_before; Dimension space_after; int break_before; int break_after; int alignment; Boolean sensitive; Boolean managed; SGMLRendition normal_rendition; Dimension ascent; Dimension descent; Dimension spacing; Boolean size_valid; XtPointer userdata; Boolean exact_terminator; Boolean hide_illegal_tags; Boolean supports_entities; int matched; char *begin_select; char *end_select; GC gc; GC invert_gc; GC reverse_gc; Boolean own_gcs; XFontStruct *font; XrmQuark font16_name; GC font16_gc; GC font16_invert_gc; XFontStruct *font16; XtCallbackList activate; /* callback list */ XtCallbackList create; /* callback list */ XtCallbackList map; /* callback list */ XtCallbackList unmap; /* callback list */ } SGMLTextPart; typedef struct _SGMLTextRec { ObjectPart object; SGMLTextPart sgml_text; } SGMLTextRec; #endif SGMLTEXTP_H midaswww-2.1/Tree.h100666 21345 173 7714 5554674745 12512 0ustar steffcsc/* * $XConsortium: Tree.h,v 1.11 91/05/04 18:59:13 rws Exp $ * * Copyright 1990 Massachusetts Institute of Technology * Copyright 1989 Prentice Hall * * Permission to use, copy, modify, and distribute this software for any * purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation. * * M.I.T., Prentice Hall and the authors disclaim all warranties with regard * to this software, including all implied warranties of merchantability and * fitness. In no event shall M.I.T., Prentice Hall or the authors be liable * for any special, indirect or cosequential damages or any damages whatsoever * resulting from loss of use, data or profits, whether in an action of * contract, negligence or other tortious action, arising out of or in * connection with the use or performance of this software. * * Authors: Jim Fulton, MIT X Consortium, * based on a version by Douglas Young, Prentice Hall * * This widget is based on the Tree widget described on pages 397-419 of * Douglas Young's book "The X Window System, Programming and Applications * with Xt OSF/Motif Edition." The layout code has been rewritten to use * additional blank space to make the structure of the graph easier to see * as well as to support vertical trees. */ #ifndef _XawTree_h #define _XawTree_h /****************************************************************************** * * Tree Widget (subclass of ConstraintClass) * ****************************************************************************** * * Parameters: * * Name Class Type Default * ---- ----- ---- ------- * * autoReconfigure AutoReconfigure Boolean FALSE * background Background Pixel XtDefaultBackground * foreground Foreground Pixel XtDefaultForeground * gravity Gravity XtGravity West * hSpace HSpace Dimension 20 * lineWidth LineWidth Dimension 0 * vSpace VSpace Dimension 6 * * * Constraint Resources attached to children: * * treeGC TreeGC GC NULL * treeParent TreeParent Widget NULL * * *****************************************************************************/ /* new instance field names */ #ifndef _XtStringDefs_h_ #define XtNhSpace "hSpace" #define XtNvSpace "vSpace" #define XtCHSpace "HSpace" #define XtCVSpace "VSpace" #endif #define XtNautoReconfigure "autoReconfigure" #define XtNlineWidth "lineWidth" #define XtNtreeGC "treeGC" #define XtNtreeParent "treeParent" #define XtNgravity "gravity" typedef int XtGravity; #define XtRGravity "Gravity" #define XtEForget "forget" #define XtENorthWest "northwest" #define XtENorth "north" #define XtENorthEast "northeast" #define XtEWest "west" #define XtECenter "center" #define XtEEast "east" #define XtESouthWest "southwest" #define XtESouth "south" #define XtESouthEast "southeast" #define XtEStatic "static" #define XtEUnmap "unmap" #define XtEleft "left" #define XtEcenter "center" #define XtEright "right" #define XtEtop "top" #define XtEbottom "bottom" /* new class field names */ #define XtCAutoReconfigure "AutoReconfigure" #define XtCLineWidth "LineWidth" #define XtCTreeGC "TreeGC" #define XtCTreeParent "TreeParent" #define XtCGravity "Gravity" #define XtRGC "GC" /* external declarations */ extern WidgetClass treeWidgetClass; typedef struct _TreeClassRec *TreeWidgetClass; typedef struct _TreeRec *TreeWidget; extern void XawTreeForceLayout ( #if NeedFunctionPrototypes Widget /* tree */ #endif ); #endif /* _XawTree_h */ midaswww-2.1/TreeP.h100666 21345 173 6635 5554674745 12633 0ustar steffcsc/* * $XConsortium: TreeP.h,v 1.13 90/04/13 16:39:54 jim Exp $ * * Copyright 1990 Massachusetts Institute of Technology * Copyright 1989 Prentice Hall * * Permission to use, copy, modify, and distribute this software for any * purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation. * * M.I.T., Prentice Hall and the authors disclaim all warranties with regard * to this software, including all implied warranties of merchantability and * fitness. In no event shall M.I.T., Prentice Hall or the authors be liable * for any special, indirect or cosequential damages or any damages whatsoever * resulting from loss of use, data or profits, whether in an action of * contract, negligence or other tortious action, arising out of or in * connection with the use or performance of this software. * * Authors: Jim Fulton, MIT X Consortium, * based on a version by Douglas Young, Prentice Hall * * This widget is based on the Tree widget described on pages 397-419 of * Douglas Young's book "The X Window System, Programming and Applications * with Xt OSF/Motif Edition." The layout code has been rewritten to use * additional blank space to make the structure of the graph easier to see * as well as to support vertical trees. */ #ifndef _XawTreeP_h #define _XawTreeP_h #include "Tree.h" #ifdef MOTIF #include #endif typedef struct _TreeClassPart { int ignore; } TreeClassPart; typedef struct _TreeClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ConstraintClassPart constraint_class; TreeClassPart tree_class; } TreeClassRec; extern TreeClassRec treeClassRec; typedef struct { /* fields available through resources */ Dimension hpad; /* hSpace/HSpace */ Dimension vpad; /* vSpace/VSpace */ Dimension line_width; /* lineWidth/LineWidth */ Pixel foreground; /* foreground/Foreground */ XtGravity gravity; /* gravity/Gravity */ Boolean auto_reconfigure; /* autoReconfigure/AutoReconfigure */ /* private fields */ GC gc; /* used to draw lines */ Widget tree_root; /* hidden root off all children */ Dimension *largest; /* list of largest per depth */ int n_largest; /* number of elements in largest */ Dimension maxwidth, maxheight; /* for shrink wrapping */ } TreePart; typedef struct _TreeRec { CorePart core; CompositePart composite; ConstraintPart constraint; TreePart tree; } TreeRec; /* * structure attached to all children */ typedef struct _TreeConstraintsPart { /* resources */ Widget parent; /* treeParent/TreeParent */ GC gc; /* treeGC/TreeGC */ /* private data */ Widget *children; int n_children; int max_children; Dimension bbsubwidth, bbsubheight; /* bounding box of sub tree */ Dimension bbwidth, bbheight; /* bounding box including node */ Position x, y; } TreeConstraintsPart; typedef struct _TreeConstraintsRec { TreeConstraintsPart tree; } TreeConstraintsRec, *TreeConstraints; /* * useful macros */ #define TREE_CONSTRAINT(w) \ ((TreeConstraints)((w)->core.constraints)) #define TREE_INITIAL_DEPTH 10 /* for allocating largest array */ #define TREE_HORIZONTAL_DEFAULT_SPACING 20 #define TREE_VERTICAL_DEFAULT_SPACING 6 #endif /* _XawTreeP_h */ midaswww-2.1/Ghostview.h100666 21345 173 13320 5554674745 13600 0ustar steffcsc/* * Ghostview.h -- Public header file for Ghostview widget. * Copyright (C) 1992 Timothy O. Theisen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Author: Tim Theisen Systems Programmer * Internet: tim@cs.wisc.edu Department of Computer Sciences * UUCP: uwvax!tim University of Wisconsin-Madison * Phone: (608)262-0438 1210 West Dayton Street * FAX: (608)262-9777 Madison, WI 53706 */ #ifndef _Ghostview_h #define _Ghostview_h /* Be sure that FILE* is defined */ #include /**************************************************************** * * Ghostview widget * ****************************************************************/ /* Resources: Name Class RepType Default Value ---- ----- ------- ------------- background Background Pixel XtDefaultBackground border BorderColor Pixel XtDefaultForeground borderWidth BorderWidth Dimension 1 bottomMargin Margin int 0 busyCursor Cursor Cursor watch callback Callback Pointer NULL cursor Cursor Cursor crosshair destroyCallback Callback Pointer NULL filename Filename String "-" height Height Dimension 0 interpreter Interpreter String "gs" leftMargin Margin int 0 llx BoundingBox Int 0 lly BoundingBox Int 0 mappedWhenManaged MappedWhenManaged Boolean True messageCallback Callback Pointer NULL orientation Orientation PageOrientation Portrait outputCallback Callback Pointer NULL preload Preload String NULL quiet Quiet Boolean True rightMargin Margin int 0 topMargin Margin int 0 urx BoundingBox Int 612 ury BoundingBox Int 792 useBackingPixmap UseBackingPixmap Boolean True width Width Dimension 0 x Position Position 0 xdpi Resolution Float ** y Position Position 0 ydpi Resolution Float ** ** automatically calculated from display parameters if width and height are not set. */ /* define any special resource names here that are not in */ #define XtNbusyCursor "busyCursor" #define XtNcursor "cursor" #define XtNfilename "filename" #define XtNinterpreter "interpreter" #define XtNmessageCallback "messageCallback" #define XtNoutputCallback "outputCallback" #define XtNpreload "preload" #define XtNquiet "quiet" #define XtNllx "llx" #define XtNlly "lly" #define XtNurx "urx" #define XtNury "ury" #define XtNuseBackingPixmap "useBackingPixmap" #define XtNxdpi "xdpi" #define XtNydpi "ydpi" #define XtNrightMargin "rightMargin" #define XtNleftMargin "leftMargin" #define XtNbottomMargin "bottomMargin" #define XtNtopMargin "topMargin" #define XtCBoundingBox "BoundingBox" #define XtCFilename "Filename" #define XtCInterpreter "Interpreter" #define XtCPreload "Preload" #define XtCQuiet "Quiet" #define XtCResolution "Resolution" #define XtCUseBackingPixmap "UseBackingPixmap" #define XtRPageOrientation "PageOrientation" /****************************************************************************** * XmuCvtStringToPageOrientation */ /* Number represents clockwise rotation of the paper in degrees */ typedef enum { XtPageOrientationPortrait = 0, /* Normal portrait orientation */ XtPageOrientationLandscape = 90, /* Normal landscape orientation */ XtPageOrientationUpsideDown = 180, /* Don't think this will be used much */ XtPageOrientationSeascape = 270 /* Landscape rotated the other way */ } XtPageOrientation; #define XtEportrait "portrait" #define XtElandscape "landscape" #define XtEupsideDown "upside-down" #define XtEseascape "seascape" #define XtRPageOrientation "PageOrientation" extern Boolean XmuCvtStringToPageOrientation(); /* declare specific GhostviewWidget class and instance datatypes */ typedef struct _GhostviewClassRec* GhostviewWidgetClass; typedef struct _GhostviewRec* GhostviewWidget; /* declare the class constant */ extern WidgetClass ghostviewWidgetClass; /* Public routines */ extern void GhostviewEnableInterpreter( #if NeedFunctionPrototypes Widget /* w */ #endif ); extern void GhostviewLayout( #if NeedFunctionPrototypes Widget /* w */, Bool /* xfree */, Bool /* yfree */ #endif ); extern void GhostviewDisableInterpreter( #if NeedFunctionPrototypes Widget /* w */ #endif ); extern Boolean GhostviewIsInterpreterReady( #if NeedFunctionPrototypes Widget /* w */ #endif ); extern Boolean GhostviewIsInterpreterRunning( #if NeedFunctionPrototypes Widget /* w */ #endif ); extern Pixmap GhostviewGetBackingPixmap( #if NeedFunctionPrototypes Widget /* w */ #endif ); extern Boolean GhostviewSendPS( #if NeedFunctionPrototypes Widget /* widget */, FILE* /* fp */, long /* begin */, unsigned int /* len */, Bool /* close */ #endif ); extern Boolean GhostviewNextPage( #if NeedFunctionPrototypes Widget /* w */ #endif ); /* The structure returned by the regular callback */ typedef struct _GhostviewReturnStruct { int width, height; int psx, psy; float xdpi, ydpi; } GhostviewReturnStruct; #endif /* _Ghostview_h */ midaswww-2.1/GhostviewP.h100666 21345 173 7514 5554674746 13711 0ustar steffcsc/* * GhostviewP.h -- Private header file for Ghostview widget. * Copyright (C) 1992 Timothy O. Theisen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Author: Tim Theisen Systems Programmer * Internet: tim@cs.wisc.edu Department of Computer Sciences * UUCP: uwvax!tim University of Wisconsin-Madison * Phone: (608)262-0438 1210 West Dayton Street * FAX: (608)262-9777 Madison, WI 53706 */ #ifndef _GhostviewP_h #define _GhostviewP_h #include "Ghostview.h" #ifdef VMS #include #include #else #include #include #endif #include typedef struct { AtomPtr ghostview; AtomPtr next; AtomPtr page; AtomPtr done; } GhostviewClassPart; typedef struct _GhostviewClassRec { CoreClassPart core_class; GhostviewClassPart ghostview_class; } GhostviewClassRec; extern GhostviewClassRec ghostviewClassRec; /* structure to describe section of file to send to ghostscript */ struct record_list { FILE *fp; long begin; unsigned int len; Boolean seek_needed; Boolean close; struct record_list *next; }; typedef struct { /* resources */ Cursor cursor; Cursor busy_cursor; XtCallbackList callback; XtCallbackList message_callback; XtCallbackList output_callback; String interpreter; Boolean quiet; Boolean use_bpixmap; String preload; String filename; XtPageOrientation orientation; float xdpi; float ydpi; int llx; int lly; int urx; int ury; int left_margin; int bottom_margin; int right_margin; int top_margin; /* private state */ GC gc; /* GC used to clear window */ Window mwin; /* destination of ghostsript messages */ Boolean disable_start; /* whether to fork ghostscript */ int interpreter_pid;/* pid of ghostscript, -1 if none */ struct record_list *ps_input; /* pointer it gs input queue */ char *input_buffer; /* pointer to input buffer */ unsigned int bytes_left; /* bytes left in section */ #ifndef VMS char *input_buffer_ptr; /* pointer into input buffer */ unsigned int buffer_bytes_left; /* bytes left in buffer */ #endif int interpreter_input; /* fd gs stdin, -1 if None */ int interpreter_output; /* fd gs stdout, -1 if None */ #ifndef VMS int interpreter_error; /* fd gs stderr, -1 if None */ XtInputId interpreter_input_id; /* XtInputId for above */ XtInputId interpreter_output_id; /* XtInputId for above */ XtInputId interpreter_error_id; /* XtInputId for above */ #else /* VMS */ short interpreter_input_iosb[4]; /* I/O Status Blocks */ short interpreter_output_iosb[4]; /* for each mailbox */ char *output_buffer; /* pointer to output buffer */ #endif /* VMS */ Dimension gs_width; /* Width of window at last Setup() */ Dimension gs_height; /* Height of window at last Setup() */ Boolean busy; /* Is gs busy drawing? */ Boolean changed; /* something changed since Setup()? */ } GhostviewPart; typedef struct _GhostviewRec { CorePart core; GhostviewPart ghostview; } GhostviewRec; #endif /* _GhostviewP_h */ midaswww-2.1/GhostviewPlusP.h100666 21345 173 2234 5554674746 14547 0ustar steffcsc/* * GhostviewPlusP.h -- Private header file for GhostviewPlus widget. * Copyright (C) 1993 Tony Johnson * * Rather trivially expands the capabilities of the Ghostview Widget by * encapsulating some of the other functionality of the ghostview * application. */ #ifndef _GhostviewPlusP_h #define _GhostviewPlusP_h #include "GhostviewP.h" #include "GhostviewPlus.h" #include "ps.h" typedef struct { XtPointer empty; } GhostviewPlusClassPart; typedef struct _GhostviewPlusClassRec { CoreClassPart core_class; GhostviewClassPart ghostview_class; GhostviewPlusClassPart ghostview_plus_class; } GhostviewPlusClassRec; extern GhostviewPlusClassRec ghostviewPlusClassRec; typedef struct { /* resources */ int pages; /* nuber of pages in document (or -1 if unknown) */ int current_page; /* Current page number diplayed */ char *filename; int magstep; /* private state */ struct document *doc; float xdpi, ydpi; } GhostviewPlusPart; typedef struct _GhostviewPlusRec { CorePart core; GhostviewPart ghostview; GhostviewPlusPart ghostview_plus; } GhostviewPlusRec; #endif /* _GhostviewPlusP_h */ midaswww-2.1/GhostviewPlus.h100666 21345 173 2103 5554674746 14422 0ustar steffcsc/* * Ghostview.h -- Public header file for GhostviewPlus widget. */ #ifndef _GhostviewPlus_h #define _GhostviewPlus_h #include "Ghostview.h" /**************************************************************** * * Ghostview widget * ****************************************************************/ /* Resources: Name Class RepType Default Value ---- ----- ------- ------------- pages Pages int dynamic currentPage CurrentPage int 1 */ /* define any special resource names here that are not in */ #define XtNpages "pages" #define XtCPages "Pages" #define XtNcurrentPage "currentPage" #define XtCCurrentPage "CurrentPage" #define XtNdoc "doc" #define XtCDoc "Doc" #define XtNmagstep "magstep" #define XtCMagstep "Magstep" /* declare specific GhostviewPlusWidget class and instance datatypes */ typedef struct _GhostviewPlusClassRec* GhostviewPlusWidgetClass; typedef struct _GhostviewPlusRec* GhostviewPlusWidget; /* declare the class constant */ extern WidgetClass ghostviewPlusWidgetClass; #endif /* _GhostviewPlus_h */ midaswww-2.1/ps.h100666 21345 173 7357 5554674746 12241 0ustar steffcsc/* * ps.h -- Include file for PostScript routines. * Copyright (C) 1992 Timothy O. Theisen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Author: Tim Theisen Systems Programmer * Internet: tim@cs.wisc.edu Department of Computer Sciences * UUCP: uwvax!tim University of Wisconsin-Madison * Phone: (608)262-0438 1210 West Dayton Street * FAX: (608)262-9777 Madison, WI 53706 */ #ifndef NeedFunctionPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) #define NeedFunctionPrototypes 1 #else #define NeedFunctionPrototypes 0 #endif /* __STDC__ */ #endif /* NeedFunctionPrototypes */ /* Constants used to index into the bounding box array. */ #define LLX 0 #define LLY 1 #define URX 2 #define URY 3 /* Constants used to store keywords that are scanned. */ /* NONE is not a keyword, it tells when a field was not set */ enum {ATEND = -1, NONE = 0, PORTRAIT, LANDSCAPE, ASCEND, DESCEND, SPECIAL}; #define PSLINELENGTH 257 /* 255 characters + 1 newline + 1 NULL */ struct document { int epsf; /* Encapsulated PostScript flag. */ char *title; /* Title of document. */ char *date; /* Creation date. */ int pageorder; /* ASCEND, DESCEND, SPECIAL */ long beginheader, endheader; /* offsets into file */ unsigned int lenheader; long beginpreview, endpreview; unsigned int lenpreview; long begindefaults, enddefaults; unsigned int lendefaults; long beginprolog, endprolog; unsigned int lenprolog; long beginsetup, endsetup; unsigned int lensetup; long begintrailer, endtrailer; unsigned int lentrailer; int boundingbox[4]; int default_page_boundingbox[4]; int orientation; /* PORTRAIT, LANDSCAPE */ int default_page_orientation; /* PORTRAIT, LANDSCAPE */ unsigned int nummedia; struct documentmedia *media; struct documentmedia *default_page_media; unsigned int numpages; struct page *pages; }; struct page { char *label; int boundingbox[4]; struct documentmedia *media; int orientation; /* PORTRAIT, LANDSCAPE */ long begin, end; /* offsets into file */ unsigned int len; }; struct documentmedia { char *name; int width, height; }; /* list of standard paper sizes from Adobe's PPD. */ extern struct documentmedia papersizes[]; /* scans a PostScript file and return a pointer to the document structure. Returns NULL if file does not Conform to commenting conventions . */ #if NeedFunctionPrototypes struct document *psscan(FILE *); #else struct document *psscan(); #endif /* free data structure malloc'ed by psscan */ #if NeedFunctionPrototypes void psfree(struct document *); #else void psfree(); #endif /* Copy a portion of the PostScript file */ #if NeedFunctionPrototypes void pscopy(FILE *from, FILE *to, long begin, long end); #else void pscopy(); #endif /* Copy a portion of the PostScript file upto a comment */ #if NeedFunctionPrototypes char *pscopyuntil(FILE *from, FILE *to, long begin, long end, const char *comment); #else char *pscopyuntil(); #endif midaswww-2.1/midas.h100666 21345 173 1221 5554674746 12674 0ustar steffcsc#include "midaslist.h" #include "midasoperand.h" #include "midasshell.h" MidasOperand MidasGetIngot(); MidasOperand MidasConvertFromInteger(); MidasOperand MidasConvertFromString(); MidasOperand MidasConvertFromBoolean(); XtAppContext MidasInitialize(); MidasShell *MidasGetShell(); Widget MidasTraceWidgetTree(); Widget MidasScanWidgetTree(); Widget MidasFetch(); void MidasSetupWidget(); char *MidasQueryUser(); XmAnyCallbackStruct *MidasGetActiveCallback(); #define XtSetFloatArg(arg, n, d) \ if (sizeof(float) > sizeof(XtArgVal)) { \ XtSetArg(arg, n, &(d)); \ } else { \ XtArgVal *ld = (XtArgVal *)&(d); \ XtSetArg(arg, n, *ld); \ } midaswww-2.1/midasconvert.h100666 21345 173 244 5554674746 14261 0ustar steffcscstruct ConvertBlock { Boolean (*ConvertRtn)(); MidasType FromType; MidasType ToType; }; typedef struct ConvertBlock ConvertBlock; midaswww-2.1/midaserrors.h100666 21345 173 127 5554674747 14116 0ustar steffcsc#include extern jmp_buf JmpEnv[10]; extern int NumJump; void MidasError(); midaswww-2.1/midaslist.h100666 21345 173 1662 5554674747 13602 0ustar steffcsc#ifndef MIDASLIST #define MIDASLIST #include "midasoperand.h" struct ListItem { struct ListItem *Next; struct ListItem *Prev; char *Entry; XrmQuark Name; void *Pointer; }; typedef struct ListItem ListItem ; struct List { struct ListItem *First; struct ListItem *Last; Widget W; struct ListItem *Selected; char *Name; }; typedef struct List List; static List NullList={0,0,0,0,0}; typedef XtPointer (*MidasCopyListRtn)(); List *MidasCreateEmptyList(); Boolean MidasConvertStringList(); void MidasEmptyList(); void MidasDestroyList(); ListItem *MidasFindItemInList(); int MidasFindItemPosInList(); ListItem *MidasFindItemInListPos(); ListItem *MidasAddItemToListPos(); ListItem *MidasAddItemToList(); void MidasCopyList(); void MidasRealizeList(); void MidasUnrealizeList(); void MidasSelectItemPosInList(); #endif midaswww-2.1/midasoperand.h100666 21345 173 1132 5554674747 14247 0ustar steffcsc#ifndef MIDASOPERAND #define MIDASOPERAND typedef char *MidasType; typedef struct { char *Symbol; int Precedence; MidasType Op1; MidasType Op2; MidasType Result; } MidasOperator; typedef struct { MidasType Type; Boolean Dynamic; union { XtPointer P; int I; float F; short S; Boolean B; } Value; } MidasOperand; typedef struct { MidasOperand Operand; MidasOperator *Op; } MidasStack; #define MString "String" #define MInt "Int" #define MBoolean "Boolean" #define MFloat "Float" #define MWidget "Widget" #define MNumber "Number" #endif midaswww-2.1/X11/ 40777 21345 173 0 5554674772 11705 5ustar steffcscmidaswww-2.1/X11/Xmu/ 40755 21345 173 0 5554674776 12456 5ustar steffcscmidaswww-2.1/X11/Xmu/Atoms.h100644 21345 173 6511 5554674772 14006 0ustar steffcsc/* @(#)57 1.3 com/XTOP/X11/Xmu/Atoms.h, gos, gos320 5/22/91 10:48:10 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: Atoms.h,v 1.3 89/12/08 12:03:56 rws Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_ATOMS_H_ #define _XMU_ATOMS_H_ typedef struct _AtomRec *AtomPtr; extern AtomPtr _XA_ATOM_PAIR, _XA_CHARACTER_POSITION, _XA_CLASS, _XA_CLIENT_WINDOW, _XA_CLIPBOARD, _XA_COMPOUND_TEXT, _XA_DECNET_ADDRESS, _XA_DELETE, _XA_FILENAME, _XA_HOSTNAME, _XA_IP_ADDRESS, _XA_LENGTH, _XA_LIST_LENGTH, _XA_NAME, _XA_NET_ADDRESS, _XA_NULL, _XA_OWNER_OS, _XA_SPAN, _XA_TARGETS, _XA_TEXT, _XA_TIMESTAMP, _XA_USER; #define XA_ATOM_PAIR(d) XmuInternAtom(d, _XA_ATOM_PAIR) #define XA_CHARACTER_POSITION(d) XmuInternAtom(d, _XA_CHARACTER_POSITION) #define XA_CLASS(d) XmuInternAtom(d, _XA_CLASS) #define XA_CLIENT_WINDOW(d) XmuInternAtom(d, _XA_CLIENT_WINDOW) #define XA_CLIPBOARD(d) XmuInternAtom(d, _XA_CLIPBOARD) #define XA_COMPOUND_TEXT(d) XmuInternAtom(d, _XA_COMPOUND_TEXT) #define XA_DECNET_ADDRESS(d) XmuInternAtom(d, _XA_DECNET_ADDRESS) #define XA_DELETE(d) XmuInternAtom(d, _XA_DELETE) #define XA_FILENAME(d) XmuInternAtom(d, _XA_FILENAME) #define XA_HOSTNAME(d) XmuInternAtom(d, _XA_HOSTNAME) #define XA_IP_ADDRESS(d) XmuInternAtom(d, _XA_IP_ADDRESS) #define XA_LENGTH(d) XmuInternAtom(d, _XA_LENGTH) #define XA_LIST_LENGTH(d) XmuInternAtom(d, _XA_LIST_LENGTH) #define XA_NAME(d) XmuInternAtom(d, _XA_NAME) #define XA_NET_ADDRESS(d) XmuInternAtom(d, _XA_NET_ADDRESS) #define XA_NULL(d) XmuInternAtom(d, _XA_NULL) #define XA_OWNER_OS(d) XmuInternAtom(d, _XA_OWNER_OS) #define XA_SPAN(d) XmuInternAtom(d, _XA_SPAN) #define XA_TARGETS(d) XmuInternAtom(d, _XA_TARGETS) #define XA_TEXT(d) XmuInternAtom(d, _XA_TEXT) #define XA_TIMESTAMP(d) XmuInternAtom(d, _XA_TIMESTAMP) #define XA_USER(d) XmuInternAtom(d, _XA_USER) extern AtomPtr XmuMakeAtom( /* char* */ ); extern Atom XmuInternAtom( /* Display*, AtomPtr */ ); extern void XmuInternStrings( /* Display*, String*, Cardinal, Atom* */); extern char *XmuGetAtomName( /* Display*, Atom */ ); extern char *XmuNameOfAtom( /* AtomPtr */ ); #endif /* _XMU_ATOMS_H_ */ midaswww-2.1/X11/Xmu/CharSet.h100644 21345 173 3047 5554674772 14255 0ustar steffcsc/* @(#)58 1.3 com/XTOP/X11/Xmu/CharSet.h, gos, gos320 5/22/91 10:48:14 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: CharSet.h,v 1.2 89/09/22 15:33:14 jim Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_CHARSET_H_ #define _XMU_CHARSET_H_ extern void XmuCopyISOLatin1Lowered(); extern void XmuCopyISOLatin1Uppered(); extern int XmuCompareISOLatin1(); #endif /* _XMU_CHARSET_H_ */ midaswww-2.1/X11/Xmu/CloseHook.h100644 21345 173 3301 5554674772 14603 0ustar steffcsc/* @(#)59 1.3 com/XTOP/X11/Xmu/CloseHook.h, gos, gos320 5/22/91 10:48:18 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: CloseHook.h,v 1.1 89/07/14 17:51:53 jim Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_CLOSEHOOK_H_ #define _XMU_CLOSEHOOK_H_ typedef caddr_t CloseHook; CloseHook XmuAddCloseDisplayHook (/* Display *, int (*)(), caddr_t */); Bool XmuRemoveCloseDisplayHook (/* Display *,CloseHook,int (*)(),caddr_t */); Bool XmuLookupCloseDisplayHook (/* Display *,CloseHook,int (*)(),caddr_t */); #endif /* _XMU_CLOSEHOOK_H_ */ midaswww-2.1/X11/Xmu/Converters.h100644 21345 173 7712 5554674772 15061 0ustar steffcsc/* @(#)60 1.3 com/XTOP/X11/Xmu/Converters.h, gos, gos320 5/22/91 10:48:23 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: Converters.h,v 1.3 89/10/09 16:25:30 jim Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_STRCONVERT_H_ #define _XMU_STRCONVERT_H_ /* * Converters - insert in alphabetical order */ /****************************************************************************** * XmuCvtFunctionToCallback */ extern void XmuCvtFunctionToCallback(); /****************************************************************************** * XmuCvtStringToBackingStore */ #define XtNbackingStore "backingStore" #define XtCBackingStore "BackingStore" #define XtRBackingStore "BackingStore" #define XtEnotUseful "notUseful" #define XtEwhenMapped "whenMapped" #define XtEalways "always" #define XtEdefault "default" extern void XmuCvtStringToBackingStore(); /****************************************************************************** * XmuCvtStringToCursor */ extern void XmuCvtStringToCursor(); /****************************************************************************** * XmuCvtStringToJustify */ typedef enum { XtJustifyLeft, /* justify text to left side of button */ XtJustifyCenter, /* justify text in center of button */ XtJustifyRight /* justify text to right side of button */ } XtJustify; #define XtEleft "left" #define XtEcenter "center" #define XtEright "right" extern void XmuCvtStringToJustify(); /****************************************************************************** * XmuCvtStringToLong */ #define XtRLong "Long" extern void XmuCvtStringToLong(); /****************************************************************************** * XmuCvtStringToOrientation */ typedef enum {XtorientHorizontal, XtorientVertical} XtOrientation; extern void XmuCvtStringToOrientation(); /****************************************************************************** * XmuCvtStringToBitmap */ extern void XmuCvtStringToBitmap(); /****************************************************************************** * XmuCvtStringToShapeStyle; is XtTypeConverter (i.e. new style) * no conversion arguments, not particularly useful to cache the results. */ #define XtRShapeStyle "ShapeStyle" #define XtERectangle "Rectangle" #define XtEOval "Oval" #define XtEEllipse "Ellipse" #define XtERoundedRectangle "RoundedRectangle" #define XmuShapeRectangle 1 #define XmuShapeOval 2 #define XmuShapeEllipse 3 #define XmuShapeRoundedRectangle 4 extern Boolean XmuCvtStringToShapeStyle(); extern Boolean XmuReshapeWidget( /* Widget w, int shape_style, int corner_width, int corner_height */ ); /****************************************************************************** * XmuCvtStringToWidget */ extern void XmuCvtStringToWidget(); #endif /* _XMU_STRCONVERT_H_ */ midaswww-2.1/X11/Xmu/CurUtil.h100644 21345 173 2733 5554674772 14314 0ustar steffcsc/* @(#)61 1.3 com/XTOP/X11/Xmu/CurUtil.h, gos, gos320 5/22/91 10:48:28 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: CurUtil.h,v 1.1 89/07/19 15:40:17 jim Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_CURUTIL_H_ #define _XMU_CURUTIL_H_ extern int XmuCursorNameToIndex(); #endif /* _XMU_CURUTIL_H_ */ midaswww-2.1/X11/Xmu/CvtCache.h100644 21345 173 3732 5554674773 14406 0ustar steffcsc/* @(#)63 1.3 com/XTOP/X11/Xmu/CvtCache.h, gos, gos320 5/22/91 10:48:32 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: CvtCache.h,v 1.3 89/11/30 18:21:42 rws Exp $ * * Copyright 1989 Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * * Public Interfaces * * XmuCvtCache *XmuCvtCacheLookupDisplay (dpy) * Display *dpy; */ #include typedef struct _XmuCvtCache { struct { char **bitmapFilePath; } string_to_bitmap; /* add other per-display data that needs to be cached */ } XmuCvtCache; extern XmuCvtCache *_XmuCCLookupDisplay(); midaswww-2.1/X11/Xmu/DisplayQue.h100644 21345 173 5700 5554674773 15003 0ustar steffcsc/* @(#)64 1.3 com/XTOP/X11/Xmu/DisplayQue.h, gos, gos320 5/22/91 10:48:38 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* Coopyright 1989 Massachusetts Institute of Technology */ #include /* * Public Entry Points * * * XmuDisplayQueue *XmuDQCreate (closefunc, freefunc, data) * int (*closefunc)(); * int (*freefunc)(); * caddr_t data; * * Creates and returns a queue into which displays may be placed. When * the display is closed, the closefunc (if non-NULL) is upcalled with * as follows: * * (*closefunc) (queue, entry) * * The freeproc, if non-NULL, is called whenever the last display is * closed, notifying the creator that display queue may be released * using XmuDQDestroy. * * * Bool XmuDQDestroy (q, docallbacks) * XmuDisplayQueue *q; * Bool docallbacks; * * Releases all memory for the indicated display queue. If docallbacks * is true, then the closefunc (if non-NULL) is called for each * display. * * * XmuDisplayQueueEntry *XmuDQLookupDisplay (q, dpy) * XmuDisplayQueue *q; * Display *dpy; * * Returns the queue entry for the specified display or NULL if the * display is not in the queue. * * * XmuDisplayQueueEntry *XmuDQAddDisplay (q, dpy, data) * XmuDisplayQueue *q; * Display *dpy; * caddr_t data; * * Adds the indicated display to the end of the queue or NULL if it * is unable to allocate memory. The data field may be used by the * caller to attach arbitrary data to this display in this queue. The * caller should use XmuDQLookupDisplay to make sure that the display * hasn't already been added. * * * Bool XmuDQRemoveDisplay (q, dpy) * XmuDisplayQueue *q; * Display *dpy; * * Removes the specified display from the given queue. If the * indicated display is not found on this queue, False is returned, * otherwise True is returned. */ typedef struct _XmuDisplayQueueEntry { struct _XmuDisplayQueueEntry *prev, *next; Display *display; CloseHook closehook; caddr_t data; } XmuDisplayQueueEntry; typedef struct _XmuDisplayQueue { int nentries; XmuDisplayQueueEntry *head, *tail; int (*closefunc)(); int (*freefunc)(); caddr_t data; } XmuDisplayQueue; extern XmuDisplayQueue *XmuDQCreate (); extern Bool XmuDQDestroy (); extern XmuDisplayQueueEntry *XmuDQLookupDisplay (); extern XmuDisplayQueueEntry *XmuDQAddDisplay (); extern Bool XmuDQRemoveDisplay (); #define XmuDQNDisplays(q) ((q)->nentries) midaswww-2.1/X11/Xmu/Drawing.h100644 21345 173 3246 5554674773 14321 0ustar steffcsc/* @(#)65 1.3 com/XTOP/X11/Xmu/Drawing.h, gos, gos320 5/22/91 10:48:42 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: Drawing.h,v 1.3 89/10/03 08:37:53 rws Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_DRAWING_H_ #define _XMU_DRAWING_H_ void XmuDrawRoundedRectangle(); void XmuFillRoundedRectangle(); void XmuDrawLogo(); Pixmap XmuCreatePixmapFromBitmap(); Pixmap XmuCreateStippledPixmap(); Pixmap XmuLocateBitmapFile(); int XmuReadBitmapData(), XmuReadBitmapDataFromFile(); #endif /* _XMU_DRAWING_H_ */ midaswww-2.1/X11/Xmu/Error.h100644 21345 173 2756 5554674773 14024 0ustar steffcsc/* @(#)66 1.3 com/XTOP/X11/Xmu/Error.h, gos, gos320 5/22/91 10:48:46 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: Error.h,v 1.2 89/11/14 16:16:30 jim Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_ERROR_H_ #define _XMU_ERROR_H_ int XmuPrintDefaultErrorMessage(); int XmuSimpleErrorHandler(); #endif /* _XMU_ERROR_H_ */ midaswww-2.1/X11/Xmu/Initer.h100644 21345 173 3023 5554674773 14151 0ustar steffcsc/* @(#)67 1.3 com/XTOP/X11/Xmu/Initer.h, gos, gos320 5/22/91 10:48:53 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: Initer.h,v 1.1 89/07/14 17:51:55 jim Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_INITER_H_ #define _XMU_INITER_H_ void XmuCallInitializers(/* XtAppContext */); void XmuAddInitializer(/* (*void)(), caddr_t */); #endif /* _XMU_INITER_H_ */ midaswww-2.1/X11/Xmu/Misc.h100644 21345 173 4032 5554674773 13613 0ustar steffcsc/* @(#)68 1.3 com/XTOP/X11/Xmu/Misc.h, gos, gos320 5/22/91 10:49:02 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: Misc.h,v 1.1 89/05/10 16:00:25 jim Exp $ */ /*********************************************************** Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts, and the Massachusetts Institute of Technology, Cambridge, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital or MIT not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Various useful constant and macro definitions */ #ifndef _Xmu_Misc_h #define _Xmu_Misc_h #define MAXDIMENSION ((1 << 31)-1) #define Max(x, y) (((x) > (y)) ? (x) : (y)) #define Min(x, y) (((x) < (y)) ? (x) : (y)) #define AssignMax(x, y) {if ((y) > (x)) x = (y);} #define AssignMin(x, y) {if ((y) < (x)) x = (y);} #endif /*_Xmu_Misc_h*/ midaswww-2.1/X11/Xmu/StdCmap.h100644 21345 173 3620 5554674775 14257 0ustar steffcsc/* @(#)70 1.3 com/XTOP/X11/Xmu/StdCmap.h, gos, gos320 5/22/91 10:49:06 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: StdCmap.h,v 1.1 89/07/14 17:51:56 jim Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_STDCMAP_H_ #define _XMU_STDCMAP_H_ Status XmuAllStandardColormaps( /* Display* */ ); Status XmuCreateColormap( /* Display*, XStandardColormap* */ ); void XmuDeleteStandardColormap( /* Display*, int, Atom */ ); Status XmuGetColormapAllocation( /* XVisualInfo*, Atom, unsigned long, ... */); Status XmuLookupColormap( /* Display*, int, VisualID, ... */ ); XStandardColormap *XmuStandardColormap( /* Display*, int, VisualID, ... */ ); Status XmuVisualStandardColormaps( /* Display*, int, VisualID, ... */ ); #endif /* _XMU_STDCMAP_H_ */ midaswww-2.1/X11/Xmu/StdSel.h100644 21345 173 3005 5554674775 14117 0ustar steffcsc/* @(#)69 1.3 com/XTOP/X11/Xmu/StdSel.h, gos, gos320 5/22/91 10:49:10 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: StdSel.h,v 1.1 89/07/14 17:51:56 jim Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_SELECTION_H_ #define _XMU_SELECTION_H_ Boolean XmuConvertStandardSelection( /* Widget, Time, Atom*, ... */ ); #endif /* _XMU_SELECTION_H_ */ midaswww-2.1/X11/Xmu/SysUtil.h100644 21345 173 3331 5554674775 14337 0ustar steffcsc/* @(#)71 1.3 com/XTOP/X11/Xmu/SysUtil.h, gos, gos320 5/22/91 10:49:14 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: SysUtil.h,v 1.1 89/09/22 12:07:37 jim Exp $ * * Copyright 1989 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _SYSUTIL_H_ #define _SYSUTIL_H_ extern int XmuGetHostname(); #endif /* _SYSUTIL_H_ */ midaswww-2.1/X11/Xmu/WinUtil.h100644 21345 173 3047 5554674776 14323 0ustar steffcsc/* @(#)72 1.3 com/XTOP/X11/Xmu/WinUtil.h, gos, gos320 5/22/91 10:49:19 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: WinUtil.h,v 1.3 89/09/22 12:10:20 jim Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_WINDOWUTIL_H_ #define _XMU_WINDOWUTIL_H_ extern Window XmuClientWindow(); extern Bool XmuUpdateMapHints(); extern Screen *XmuScreenOfWindow(); #endif /* _XMU_WINDOWUTIL_H_ */ midaswww-2.1/X11/Xmu/Xct.h100644 21345 173 13551 5554674776 13507 0ustar steffcsc/* @(#)74 1.3 com/XTOP/X11/Xmu/Xct.h, gos, gos320 5/22/91 10:49:24 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ #ifndef _Xct_h #define _Xct_h /* * $XConsortium: Xct.h,v 1.3 89/11/21 12:03:47 rws Exp $ * Copyright 1989 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * */ #define XctVersion 1 typedef unsigned char *XctString; typedef enum { XctUnspecified, XctLeftToRight, XctRightToLeft } XctHDirection; typedef unsigned long XctFlags; /* These are bits in XctFlags. */ #define XctSingleSetSegments 0x0001 /* This means that returned segments should contain characters from only * one set (C0, C1, GL, GR). When this is requested, XctSegment is never * returned, instead XctC0Segment, XctC1Segment, XctGlSegment, and * XctGRSegment are returned. C0 and C1 segments are always returned as * singleton characters. */ #define XctProvideExtensions 0x0002 /* This means that if the Compound Text string is from a higher version * than this code is implemented to, then syntactically correct but unknown * control sequences should be returned as XctExtension items. If this * flag is not set, and the Compound Text string version indicates that * extensions cannot be ignored, then each unknown control sequence will be * reported as an XctError. */ #define XctAcceptC0Extensions 0x0004 /* This means that if the Compound Text string is from a higher version * than this code is implemented to, then unknown C0 characters should be * treated as if they were legal, and returned as C0 characters (regardless * of how XctProvideExtensions is set). If this flag is not set, then all * unknown C0 characters are treated according to XctProvideExtensions. */ #define XctAcceptC1Extensions 0x0008 /* This means that if the Compound Text string is from a higher version * than this code is implemented to, then unknown C0 characters should be * treated as if they were legal, and returned as C0 characters (regardless * of how XctProvideExtensions is set). If this flag is not set, then all * unknown C0 characters are treated according to XctProvideExtensions. */ #define XctHideDirection 0x0010 /* This means that horizontal direction changes should be reported as * XctHorizontal items. If this flag is not set, then direction changes are * not returned as items, but the current direction is still maintained and * reported for other items. */ #define XctFreeString 0x0020 /* This means that XctFree should free the Compound Text string (that was * passed to XctCreate. If this flag is not set, the string is not freed. */ #define XctShiftMultiGRToGL 0x0040 /* Translate GR segments on-the-fly into GL segments for the GR sets: * GB2312.1980-1, JISX0208.1983-1, and KSC5601.1987-1. */ /* This is the return type for XctNextItem. */ typedef enum { XctSegment, /* used when XctSingleSetSegments is not requested */ XctC0Segment, /* used when XctSingleSetSegments is requested */ XctGLSegment, /* used when XctSingleSetSegments is requested */ XctC1Segment, /* used when XctSingleSetSegments is requested */ XctGRSegment, /* used when XctSingleSetSegments is requested */ XctExtendedSegment, /* an extended segment */ XctExtension, /* used when XctProvideExtensions is requested */ XctHorizontal, /* horizontal direction or depth change */ XctEndOfText, /* end of text string */ XctError /* syntactic or semantic error */ } XctResult; typedef struct _XctRec { XctString total_string; /* as given to XctCreate */ int total_length; /* as given to XctCreate */ XctFlags flags; /* as given to XctCreate */ int version; /* indicates the version of the CT spec * the string was produced from */ int can_ignore_exts;/* non-zero if ignoring extensions is * acceptable, else zero */ XctString item; /* item returned from XctNextItem */ int item_length; /* length of item in bytes */ int char_size; /* number of bytes per character in * item, with zero meaning variable */ char *encoding; /* Encoding name for item */ XctHDirection horizontal; /* direction of item */ int horz_depth; /* current direction nesting depth */ char *GL; /* "{I} F" string for current GL */ char *GL_encoding; /* Encoding name for current GL */ int GL_set_size; /* 94 or 96 */ int GL_char_size; /* number of bytes per GL character */ char *GR; /* "{I} F" string for current GR */ char *GR_encoding; /* Encoding name for current GR */ int GR_set_size; /* 94 or 96 */ int GR_char_size; /* number of bytes per GR character */ char *GLGR_encoding; /* Encoding name for current GL+GR, * if known */ struct _XctPriv *priv; /* private to parser, don't peek */ } *XctData; /* these are the external routines */ extern XctData XctCreate(); extern XctResult XctNextItem(); extern void XctFree(); extern void XctReset(); #endif midaswww-2.1/X11/Xmu/Xmu.h100644 21345 173 3735 5554674776 13505 0ustar steffcsc/* @(#)56 1.3 com/XTOP/X11/Xmu/Xmu.h, gos, gos320 5/22/91 10:49:28 */ /* * COMPONENT_NAME: XSAMPLE * * FUNCTIONS: none * * ORIGINS: 16,27,40,42 * * * (C) COPYRIGHT International Business Machines Corp. 1988,1991 * All Rights Reserved * Licensed Materials - Property of IBM * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* * $XConsortium: Xmu.h,v 1.26 89/07/16 14:12:37 jim Exp $ * * Copyright 1988 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * The X Window System is a Trademark of MIT. * * The interfaces described by this header file are for miscellaneous utilities * and are not part of the Xlib standard. */ #ifndef _XMU_H_ #define _XMU_H_ /* * This include file is obsolete and is provided only for compatibility with * MIT Release 3 clients. Callers should use the appropriate include file. * * DO NOT ADD ANY NEW INCLUDES OR DEFINITIONS TO THIS FILE! */ #include #include /* _XA_... */ #include /* CopyISOLatin1Lowered */ #include /* CvtStringTo... */ #include /* DrawRoundedRect, DrawLogo */ #include /* PrintDefaultError */ #include /* ConvertStandardSelection */ #endif /* _XMU_H_ */ midaswww-2.1/X11/Xmu/Xmu-README100444 21345 173 342 5554674776 14157 0ustar steffcscThis directory contains the Xmu include files. These files are include here since they seem to be missing on hp-ux machines, even though the libXmu library is present. These files are only used when compiling under hp-ux. midaswww-2.1/midasshell.h100666 21345 173 1213 5554674747 13726 0ustar steffcsctypedef struct _MidasApplication { Display *Display; XrmDatabase Database; char *Filename; int Changes; ListItem *Item; Widget Help; char *AppName; char *AppClass; int Shells; int Argc; char **Argv; Boolean ConfirmExit; Boolean AutoStore; } MidasApplication; typedef struct _MidasShell { Widget Widget; MidasApplication *Application; ListItem *Item; } MidasShell; midaswww-2.1/midaswidget.h100666 21345 173 656 5554674747 14074 0ustar steffcsc struct MidasWidget { Widget Widget; /* This widget */ Widget Map; /* Widget in map */ struct MidasWidget *Parent; struct MidasWidget *HashChain; Boolean ShowChildren; /* True if children in map */ List *IngotList; ListItem *NameEntry; Boolean Inited; }; typedef struct MidasWidget MidasWidget; midaswww-2.1/README.HPPD100644 21345 173 1360 6003431066 13010 0ustar steffcscPackage name: midaswww Version number: 2.1 Original author: Tony Johnson and Chung Huynh Report bugs to: steff@csc.liv.ac.uk Tested on: HP 9000/710 running HP-UX 9.03 C compiler used: Version A.09.77 Purpose: The Midas WWW browser from Tony Johnson and Chung Huynh. This is a neat www browser - but is was written in 1993 so the new HTML extensions are not supported. It still has one or two unique features though, including a new hotlist display, a navigation tool and support for the selection of different fonts for the text and titles. There is also a new options dialog box, and many more features... Date archived: Thu 20 Jul 1995 Special notes: Read HPUX.Install and README for further info. midaswww-2.1/midasnet.h100666 21345 173 2045 5554674750 13403 0ustar steffcsc/* * Network specific header file for midaswww */ #ifdef UCX #include #include #include #include #define bcopy(a, b, c) (void) memmove ((void *) (b), (void *) (a), (size_t) (c)) #else #ifdef VMS #define MULTINET #include "multinet_root:[multinet.include.vms]inetiodef.h" #else #define ADDINPUTOK #endif #include #define __TIME_T /* keeps VAX compiler happy */ #include #include #include #include #endif /* UCX */ #include #include #ifndef VMS #include #include #ifdef AIXV3 #define _H_M_WAIT #endif #include #else #include #endif #ifdef sun #define atexit(x) on_exit(x,NULL) extern int sys_nerr; extern char *sys_errlist[]; #define strerror(n) (n 8/10/1992} **============================================================================= */ #ifndef __VMS_TYPES_H__ #define __VMS_TYPES_H__ /* -=- MACRO FUNCTIONS AND TYPEDEFS -=- */ /* --- Exit Handler Block --- */ /* The exit handler block is a variable-length structure. What we provide ** here is a header for that structure. For the simplest uses (exit ** handlers that don't take arguments) the typedef alone will suffice: ** ** extern void exit_function(unsigned int * status_p); ** unsigned int exh_status; ** . . . ** EXIT_BLOCK_T exit_block = ** {NULL,exit_function,0,{0,0,0},&exh_status}; ** . . . ** void ** exit_function(status_p) ** unsigned int * status_p; ** { ** . . . ** ** For more complicated uses (when you want to pass several arguments to ** the exit handler) the typedef can be used as a header in a structure: ** ** extern void exit_function( ** unsigned int * status_p,int * yin_p,int * yang_p ** ); ** unsigned int exh_status; ** int that; ** int this; ** . . . ** struct ** { ** EXIT_BLOCK_T header; ** int * this_p; ** int * that_p; ** } = {{NULL,exit_function,0,{0,0,0},&exh_status},&this,&that}; ** . . . ** void ** exit_function(status_p,yin_p,yang_p) ** unsigned int * status_p; ** int * yin_p; ** int * yang_p; ** { ** . . . */ typedef struct { void * flink_p; void (*exit_handler_p)(); unsigned char arg_count; unsigned char must_be_zero[3]; unsigned int * status_p; } EXIT_BLOCK_T; /* --- All-Purpose IOSB --- */ /* This all-purpose IOSB can be used for any IO function (though it could ** be a bit of a hassle with terminal set and sense functions). Just be ** careful with the device dependent data, remembering to use casts where ** appropriate. Use of the other IOSB typedefs is recommended over use of ** this one, as their fields have more relevant names. */ typedef struct { unsigned short int status; unsigned short int count; unsigned char device_dependent_data[4]; } IOSB_T; /* --- Ancillary Control Process (ACP) IOSB --- */ typedef struct { unsigned short int status; unsigned short int not_used_0; unsigned long int not_used_1; } IOSB_ACP_T; /* --- CR11 Card Reader IOSB --- */ /* Identical to the all-purpose IOSB. */ #define IOSB_CR_T IOSB_T /* --- Disk Device IOSBs --- */ /* IOSB_DISK_T is for all disk device functions except for sense mode; ** IOSB_DISK_SENSEMODE_T is for sense mode. */ typedef struct { unsigned short int status; unsigned short int byte_count_low_order; unsigned short int byte_count_high_order; unsigned short int zero; } IOSB_DISK_T; typedef struct { unsigned short int status; unsigned short int zero; unsigned char sectors; unsigned char tracks; unsigned short int cylinders; } IOSB_DISK_SENSEMODE_T; /* --- Laboratory Peripheral Accelarator (LPA) IOSB --- */ typedef struct { unsigned short int status; unsigned short int byte_count; unsigned short int ready_out; unsigned short int maintenance_status; } IOSB_LPA_T; /* --- Line Printer IOSBs --- */ /* IOSB_LP_WRITE_T is for write functions; IOSB_LP_SETMODE_T is for ** set mode functions. IOSB_LP_SETMODE_T is identical to IOSB_ACP_T. */ typedef struct { unsigned short int status; unsigned short int byte_count; unsigned long int num_lines_paper_moved; } IOSB_LP_WRITE_T; #define IOSB_LP_SETMODE_T IOSB_ACP_T /* --- Magnetic Tape IOSB --- */ /* Identical to the all-purpose IOSB. */ #define IOSB_MT_T IOSB_T /* --- Mailbox (MBX) IOSBs --- */ /* IOSB_MBX_READ_T is for the read function; IOSB_MBX_WRITE_T ** is for the write function; IOSB_MBX_SETPROTECTION_T is for ** the set protection function. */ typedef struct { unsigned short int status; unsigned short int byte_count; unsigned long int sender_pid; } IOSB_MBX_READ_T; typedef struct { unsigned short int status; unsigned short int byte_count; unsigned long int receiver_pid; } IOSB_MBX_WRITE_T; typedef struct { unsigned short int status; unsigned short int zero; unsigned long int protection_mask_value; } IOSB_MBX_SETPROTECTION_T; /* --- Terminal (TTY) IOSBs --- */ /* IOSB_TTY_READ_T is for the read function; IOSB_TTY_ITEMLIST_READ_T ** is for the itemlist read function; IOSB_TTY_WRITE_T is for the ** write function; IOSB_TTY_SETSENSE_T is for the set mode, set ** characteristscs, sense mode, and sense characteristics functions. */ typedef struct { unsigned short int status; unsigned short int offset_to_terminator; unsigned short int terminator; unsigned short int terminator_size; } IOSB_TTY_READ_T; typedef struct { unsigned short int status; unsigned short int offset_to_terminator; unsigned char terminator_character; unsigned char reserved; unsigned char terminator_length; unsigned char cursor_position_from_eol; } IOSB_TTY_ITEMLIST_READ_T; typedef struct { unsigned short int status; unsigned short int byte_count; unsigned short int zero_0; unsigned short int zero_1; } IOSB_TTY_WRITE_T; typedef struct { unsigned short int status; unsigned char transmit_speed; unsigned char receive_speed; unsigned char cr_fill_count; unsigned char lf_fill_count; unsigned char parity_flags; unsigned char zero; } IOSB_TTY_SETSENSE_T; /* Many of the VMS GETxxx system services also use IOSB's, but they are laid ** out differently. IOSB_GET_T is such a structure. The first longword (not ** word) is the status code, and the second word is reserved to DEC. */ typedef struct { unsigned long int status; unsigned long int reserved; } IOSB_GET_T; /* --- Item Lists --- */ /* The item list structures change dynamically according to the number ** of items in them. For this reason, typedefs (ITEM_2_T and ITEM_3_T) ** are provided for the items, and macro functions (ITEM_LIST_2_T() and ** ITEM_LIST_3_T()) are provided for the item lists. Here is an example ** showing the usage of an item list macro function: ** ** static const ITEM_LIST_3_T(item_list,2) = ** { ** { ** {sizeof pid,JPI$_PID,&pid,NULL}, ** {sizeof username,JPI$_USERNAME,&username,&username_length} ** }, ** 0 ** }; ** ** The number 2 means, of course, that there are two items in the ** itemlist (i.e., the PID and the username). */ typedef struct { unsigned short int component_size; unsigned short int item_code; void * component_p; } ITEM_2_T; typedef struct { unsigned short int buffer_size; unsigned short int item_code; void * buffer_p; unsigned short int * buffer_length_p; } ITEM_3_T; #define ITEM_LIST_2_T(variable_name,num_items) \ struct \ { \ ITEM_2_T item[num_items]; \ int terminating_zero; \ } variable_name #define ITEM_LIST_3_T(variable_name,num_items) \ struct \ { \ ITEM_3_T item[num_items]; \ int terminating_zero; \ } variable_name #endif /* !__VMS_TYPES_H__ */ midaswww-2.1/xgifload.h100666 21345 173 1530 5554674750 13372 0ustar steffcsc#ifndef _xgifload_h #define _xgifload_h typedef unsigned char byte; typedef struct _GIFImage { /* The color map, read from the GIF header */ byte Red[256], Green[256], Blue[256]; Boolean Allocd[256]; Pixel cols[256]; int BitsPerPixel; /* Bits per pixel, read from GIF header */ int CodeSize; /* Code size, read from GIF header */ int Width, Height; Boolean Interlace, HasColormap, fastAlloc; byte *Raster; /* The Raster data stream, unblocked */ XImage *Image; /* The corresponding X-image */ Pixmap Pixmap; /* the corresponding pixmap */ int Refcount; /* Number of references to image */ } GIFImage; /* public routines */ GIFImage *GIFLoadFile(); XImage *GIFToXImage(); void GIFFreeImage(); void GIFFreeFile(); #endif midaswww-2.1/stdc.h100666 21345 173 2767 5554674750 12547 0ustar steffcsc/* * Copyright (c) 1988 The Regents of the University of California. * All rights reserved. * * Redistribution is only permitted until one year after the first shipment * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and * binary forms are permitted provided that: (1) source distributions retain * this entire copyright notice and comment, and (2) distributions including * binaries display the following acknowledgement: This product includes * software developed by the University of California, Berkeley and its * contributors'' in the documentation or other materials provided with the * distribution and in all advertising materials mentioning features or use * of this software. Neither the name of the University nor the names of * its contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * @(#)stdc.h 7.3 (Berkeley) 6/28/90 */ /* * This file is designed to ease the porting from standard C to ANSI C. * It will eventually go away. * Questions to K. Bostic. */ #if __STDC__ || c_plusplus #define CONCAT(x,y) x ## y #define PROTOTYPE(p) p #define STRING(x) #x #else #define const #define volatile #define signed #define CONCAT(x,y) x/**/y #define PROTOTYPE(p) () #define STRING(x) "x" #endif midaswww-2.1/SGMLAnchorText.c100666 21345 173 17514 5554674751 14364 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLAnchorTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a anchortext segment for the SGMLHyper widget */ /* */ /* Revision history: */ /* */ /* Nov 29 1992 Temporary hack to support quoted urls. TonyJ */ /* */ /*==================================================================*/ #include #include #include #include #include "SGMLAnchorTextP.h" #include /* Private functions */ /* Widget class methods */ static void Initialize(); static void Destroy(); #define Offset(field) XtOffsetOf(SGMLAnchorTextRec,sgml_anchortext.field) static XtResource resources[] = { {SGMLNhref, SGMLCHref, XtRString, sizeof(String), Offset(href), XtRString, ""}, {SGMLNname, SGMLCName, XtRString, sizeof(String), Offset(name), XtRString, ""}, {SGMLNtitle, SGMLCTitle, XtRString, sizeof(String), Offset(title), XtRString, ""}, {SGMLNhrefLength, XtCReadOnly, XtRInt, sizeof(int), Offset(href_length), XtRImmediate, 0}, {SGMLNnameLength, XtCReadOnly, XtRInt, sizeof(int), Offset(name_length), XtRImmediate, 0}, {SGMLNtitleLength, XtCReadOnly, XtRInt, sizeof(int), Offset(title_length), XtRImmediate, 0} }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLAnchorTextClassRec sGMLAnchorTextClassRec = { { (WidgetClass) &sGMLCompositeTextClassRec, /* superclass */ "SGMLAnchorText", /* class_name */ sizeof(SGMLAnchorTextRec), /* widget_size */ NULL, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ Destroy, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { SGMLInheritComputeSize, /* compute_size */ SGMLInheritAdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ SGMLInheritExpose, /* expose */ SGMLInheritActivate, /* activate */ SGMLInheritHilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ SGMLInheritCallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ NULL, /* sgml_set_values */ NULL, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ SGMLInheritHiliteSelection, /* hilite_selection */ SGMLInheritXYToPos, /* xy_to_pos */ SGMLInheritPosToXY, /* pos_to_xy */ SGMLInheritDumpText, /* dump_text */ NULL, /* extension */ }, { XtInheritGeometryManager, /* geometry_manager */ XtInheritChangeManaged, /* change_managed */ XtInheritInsertChild, /* insert_child */ XtInheritDeleteChild, /* delete_child */ SGMLInheritCallAdjustSize, /* call_adjust_size */ NULL, /* ignore */ }, { NULL /* ignore */ } }; WidgetClass sGMLAnchorTextObjectClass = (WidgetClass) &sGMLAnchorTextClassRec; /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLAnchorTextObject request, new; { if (new->sgml_anchortext.href) { new->sgml_anchortext.href = XtNewString(new->sgml_anchortext.href); new->sgml_anchortext.href_length = strlen(new->sgml_anchortext.href); } if (new->sgml_anchortext.name) { new->sgml_anchortext.name = XtNewString(new->sgml_anchortext.name); new->sgml_anchortext.name_length = strlen(new->sgml_anchortext.name); } if (new->sgml_anchortext.title) { new->sgml_anchortext.title = XtNewString(new->sgml_anchortext.title); new->sgml_anchortext.title_length = strlen(new->sgml_anchortext.title); } } /*--------------------------------------------------------------*/ /* Destroy the widget: release all memory allocated */ /*--------------------------------------------------------------*/ static void Destroy (w) SGMLAnchorTextObject w; { XtFree(w->sgml_anchortext.href); XtFree(w->sgml_anchortext.name); XtFree(w->sgml_anchortext.title); } /*-----------------------------------------------------------------------*/ /* Create a new SGMLAnchorTextObject */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateAnchorText(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLAnchorTextObjectClass,parent,al,ac); } midaswww-2.1/SGMLCompositeText.c100666 21345 173 116441 5554674751 15133 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLCompositeTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a composite text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include #include "SGMLCompositeTextP.h" #include "SGMLFormattedText.h" /* Private functions */ static void DestroyChildren(); static void MakeGeometryRequest(); static Widget ExternalSearch(); /* Private data struct */ typedef struct _searchdata { int currentpos; int lastpos; SGMLCompositeTextObject cw; Widget (*extsearch)(); XtPointer pclosure; } searchdata; /* Widget class methods */ static void ClassInitialize(); static void ClassPartInitialize(); static void Initialize(); static void Destroy(); static void InsertChild(); static void DeleteChild(); static void ComputeSize(); static void Redisplay(); static void Hilite(); static Boolean SGMLSetValues(); static Widget Contains(); static void CallMapCallback(); static Widget Search(); static Boolean ClearSelect(); static XtGeometryResult GeometryManager(); static void CallAdjustSize(); static Boolean AdjustSize(); static void ChangeManaged(); static Boolean InheritChanges(); static Boolean DumpText(); static Widget HiliteSelection(); #define Offset(field) XtOffsetOf(SGMLCompositeTextRec,sgml_composite_text.field) static XtResource resources[] = { {XtNchildren, XtCReadOnly, XtRWidgetList, sizeof(WidgetList), Offset(children), XtRImmediate, NULL}, {SGMLNchildrenManaged, XtCReadOnly, XtRPointer, sizeof(XtPointer), Offset(managed), XtRImmediate, NULL}, {XtNnumChildren, XtCReadOnly, XtRCardinal, sizeof(Cardinal), Offset(num_children), XtRImmediate, 0}, {XtNinsertPosition, XtCInsertPosition, XtRFunction, sizeof(XtOrderProc), Offset(insert_position), XtRImmediate, NULL}, {SGMLNtagList, SGMLCTagList, SGMLRTagList, sizeof(SGMLTagList), Offset(tag_list), XtRImmediate, SGMLINHERIT_TAGLIST}, {SGMLNdefaultClass, SGMLCClass, SGMLRClass, sizeof(WidgetClass), Offset(default_class), XtRImmediate, SGMLINHERIT_CLASS}, {SGMLNmanagementPolicy, SGMLCManagementPolicy, SGMLRManagementPolicy, sizeof(int), Offset(management_policy), XtRImmediate, (XtPointer)SGMLMANAGE_ALL} }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLCompositeTextClassRec sGMLCompositeTextClassRec = { { (WidgetClass) &sGMLTextClassRec, /* superclass */ "SGMLCompositeText", /* class_name */ sizeof(SGMLCompositeTextRec), /* widget_size */ ClassInitialize, /* class_initialize */ ClassPartInitialize, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ Destroy, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { ComputeSize, /* compute_size */ AdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ Redisplay, /* expose */ SGMLInheritActivate, /* activate */ Hilite, /* hilite */ Contains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ CallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ SGMLSetValues, /* sgml_set_values */ InheritChanges, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ Search, /* search */ ClearSelect, /* clear_select */ HiliteSelection, /* hilite_selection */ SGMLInheritXYToPos, /* xy_to_pos */ SGMLInheritPosToXY, /* pos_to_xy */ DumpText, /* dump_text */ NULL, /* extension */ }, { GeometryManager, /* geometry_manager */ ChangeManaged, /* change_managed */ InsertChild, /* insert_child */ DeleteChild, /* delete_child */ CallAdjustSize, /* call_adjust_size */ NULL, /* ignore */ } }; WidgetClass sGMLCompositeTextObjectClass = (WidgetClass) &sGMLCompositeTextClassRec; #define done(address, type) \ { (*toVal).size = sizeof(type); (*toVal).addr = (caddr_t) address; } static struct _namepair { XrmQuark quark; char *name; int policy; } names[] = { { NULLQUARK, SGMLEManageAll, SGMLMANAGE_ALL }, { NULLQUARK, SGMLEManageOne, SGMLMANAGE_ONE }, { NULLQUARK, SGMLEManageNone, SGMLMANAGE_NONE}, { NULLQUARK, NULL, 0 } }; void CvtStringToManagementPolicy (args, num_args, fromVal, toVal) XrmValuePtr args; Cardinal *num_args; XrmValuePtr fromVal; XrmValuePtr toVal; { static Boolean haveQuarks = FALSE; char lowerName[40]; XrmQuark q; char *s, *t; struct _namepair *np; if (*num_args != 0) XtWarningMsg("wrongParameters","cvtStringToManagementPolicy","XtToolkitError", "String to ManagementPolicy conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); if (!haveQuarks) { for (np = names; np->name; np++) { np->quark = XrmStringToQuark (np->name); } haveQuarks = TRUE; } s = (char *) fromVal->addr; if (strlen(s) < sizeof lowerName) { for (t=lowerName; (*t++ = tolower(*s++)) != '\0'; ); q = XrmStringToQuark (lowerName); for (np = names; np->name; np++) { if (np->quark == q) { done (&np->policy, int); return; } } } XtStringConversionWarning((char *) fromVal->addr, SGMLRManagementPolicy); } /*--------------------------------------------------------------*/ /* ClassInitialize: */ /*--------------------------------------------------------------*/ static void ClassInitialize () { XtAddConverter (XtRString, SGMLRManagementPolicy, CvtStringToManagementPolicy, (XtConvertArgList) NULL, (Cardinal) 0); } /*--------------------------------------------------------------*/ /* ClassPartInitialize: */ /*--------------------------------------------------------------*/ static void ClassPartInitialize(widgetClass) WidgetClass widgetClass; { register SGMLCompositeTextClassPart *wcPtr; register SGMLCompositeTextClassPart *superPtr; wcPtr = (SGMLCompositeTextClassPart *) &(((SGMLCompositeTextObjectClass)widgetClass)->sgml_composite_text_class); if (widgetClass != sGMLCompositeTextObjectClass) /* don't compute possible bogus pointer */ superPtr = (SGMLCompositeTextClassPart *)&(((SGMLCompositeTextObjectClass)widgetClass ->core_class.superclass)->sgml_composite_text_class); #ifdef lint else superPtr = NULL; #endif /* We don't need to check for null super since we'll get to composite eventually, and it had better define them! */ if (wcPtr->geometry_manager == XtInheritGeometryManager) { wcPtr->geometry_manager = superPtr->geometry_manager; } if (wcPtr->change_managed == XtInheritChangeManaged) { wcPtr->change_managed = superPtr->change_managed; } if (wcPtr->insert_child == XtInheritInsertChild) { wcPtr->insert_child = superPtr->insert_child; } if (wcPtr->delete_child == XtInheritDeleteChild) { wcPtr->delete_child = superPtr->delete_child; } if (wcPtr->change_managed == XtInheritChangeManaged) { wcPtr->change_managed = superPtr->change_managed; } if (wcPtr->call_adjust_size == SGMLInheritCallAdjustSize) { wcPtr->call_adjust_size = superPtr->call_adjust_size; } } /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLCompositeTextObject request, new; { register SGMLCompositeTextObject cw; SGMLCompositeTextObject parent = (SGMLCompositeTextObject) XtParent((Widget) new); cw = (SGMLCompositeTextObject) new; cw->sgml_composite_text.num_children = 0; cw->sgml_composite_text.children = NULL; cw->sgml_composite_text.managed = NULL; cw->sgml_composite_text.num_slots = 0; cw->sgml_composite_text.own_tag_list = FALSE; if (SGMLIsCompositeText((Widget) parent)) { if (new->sgml_composite_text.default_class == SGMLINHERIT_CLASS) new->sgml_composite_text.default_class = parent->sgml_composite_text.default_class; if (new->sgml_composite_text.tag_list == SGMLINHERIT_TAGLIST) new->sgml_composite_text.tag_list = parent->sgml_composite_text.tag_list; else if (new->sgml_composite_text.tag_list[0].polarity) { /* Deal with partial inheritance of taglists */ int i,j,k,num_slots = 0; SGMLTagList *oldlist = parent->sgml_composite_text.tag_list; SGMLTagList *list = new->sgml_composite_text.tag_list; SGMLTagList *newlist; for (i = 0; oldlist[i].name; i++) num_slots++; for (i = 0; list[i].name; i++) if (list[i].polarity > 0) num_slots++; num_slots++; /* leave space for terminating null */ newlist = (SGMLTagList *) XtMalloc(sizeof(SGMLTagList) * num_slots); for (k = 0; oldlist[k].name; k++) newlist[k] = oldlist[k]; for (i = 0; list[i].name; i++) { for (j = 0; j < k ; j++) if (list[i].name == newlist[j].name) break; if (list[i].polarity > 0 && j < k ) continue; else if (list[i].polarity < 0 && j == k) continue; else if (list[i].polarity > 0) { newlist[k] = list[i]; newlist[k].polarity = 0; k++; } else { k--; newlist[j] = newlist[k]; } } newlist[k].name = 0; newlist[k].class = NULL; newlist[k].polarity = 0; new->sgml_composite_text.tag_list = newlist; new->sgml_composite_text.own_tag_list = TRUE; } } else { if (new->sgml_composite_text.default_class == SGMLINHERIT_CLASS) new->sgml_composite_text.default_class = sGMLFormattedTextObjectClass; } } /*--------------------------------------------------------------*/ /* DestroyChildnen: */ /*--------------------------------------------------------------*/ static void DestroyChildren(w) SGMLCompositeTextObject w; { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; for (; n-- > 0; ) XtDestroyWidget(*children++); } /*--------------------------------------------------------------*/ /* Destroy the widget: release all memory allocated */ /*--------------------------------------------------------------*/ static void Destroy (w) SGMLCompositeTextObject w; { /* * We have to explicitly delete all of out children since the * intrincics dont know to do it for us. */ DestroyChildren(w); XtFree((char *) w->sgml_composite_text.children); XtFree((char *) w->sgml_composite_text.managed); if (w->sgml_composite_text.own_tag_list) XtFree((char *)w->sgml_composite_text.tag_list); } /*--------------------------------------------------------------*/ /* InsertChild: adds a new child */ /*--------------------------------------------------------------*/ static void InsertChild(w) Widget w; { register Cardinal position; register Cardinal i; register SGMLCompositeTextObject cw; register WidgetList children; register Boolean *managed; cw = (SGMLCompositeTextObject) w->core.parent; children = cw->sgml_composite_text.children; managed = cw->sgml_composite_text.managed; if (cw->sgml_composite_text.insert_position != NULL) position = (*(cw->sgml_composite_text.insert_position))(w); else position = cw->sgml_composite_text.num_children; if (cw->sgml_composite_text.num_children == cw->sgml_composite_text.num_slots) { /* Allocate more space */ cw->sgml_composite_text.num_slots += (cw->sgml_composite_text.num_slots / 2) + 2; cw->sgml_composite_text.children = children = (WidgetList) XtRealloc((XtPointer) children, (unsigned) (cw->sgml_composite_text.num_slots) * sizeof(Widget)); cw->sgml_composite_text.managed = managed = (Boolean *) XtRealloc((XtPointer) managed, (unsigned) (cw->sgml_composite_text.num_slots) * sizeof(Boolean)); } /* Ripple children up one space from "position" */ for (i = cw->sgml_composite_text.num_children; i > position; i--) { children[i] = children[i-1]; managed[i] = managed[i-1]; } children[position] = w; if (!((SGMLTextObject) w)->sgml_text.managed) managed[position] = FALSE; else if (cw->sgml_composite_text.management_policy == SGMLMANAGE_NONE) managed[position] = FALSE; else if (cw->sgml_composite_text.management_policy == SGMLMANAGE_ALL ) managed[position] = TRUE; else { for (i = 0 ; i < cw->sgml_composite_text.num_children; i++) { SGMLTextObject t = (SGMLTextObject) children[i]; managed[i] = FALSE; if (t->sgml_text.managed && t->sgml_text.size_valid) { SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget) t); (*class->sgml_text_class.call_map_callback)(t,NULL,FALSE); } t->sgml_text.managed = FALSE; } managed[position] = TRUE; } ((SGMLTextObject) children[position])->sgml_text.managed = managed[position]; cw->sgml_composite_text.num_children++; if (managed[position] && cw->sgml_text.size_valid) { XtWidgetGeometry dummy; SGMLCompositeTextObjectClass class = (SGMLCompositeTextObjectClass) XtClass((Widget) cw); XtGeometryResult result; result = (*class->sgml_composite_text_class.geometry_manager)((Widget)cw,&dummy,&dummy); } } /*--------------------------------------------------------------*/ /* DeleteChild: delete a child */ /*--------------------------------------------------------------*/ static void DeleteChild(w) Widget w; { Boolean WasManaged; register Cardinal position; register Cardinal i; register SGMLCompositeTextObject cw; cw = (SGMLCompositeTextObject) w->core.parent; for (position = 0; position < cw->sgml_composite_text.num_children; position++) { if (cw->sgml_composite_text.children[position] == w) { break; } } WasManaged = cw->sgml_composite_text.managed[position]; if (position != cw->sgml_composite_text.num_children) { /* Ripple children down one space from "position" */ cw->sgml_composite_text.num_children--; for (i = position; i < cw->sgml_composite_text.num_children; i++) { cw->sgml_composite_text.children[i] = cw->sgml_composite_text.children[i+1]; } } if (WasManaged && cw->sgml_text.managed) MakeGeometryRequest(cw); } /*--------------------------------------------------------------*/ /* Contains: */ /*--------------------------------------------------------------*/ static Widget Contains(w,x,y,mode) SGMLCompositeTextObject w; Position x,y; Boolean mode; { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; /* * Two possibilities, if I am sensitive myself then maybe I contain * the point in question, otherwise maybe one of my children does. */ for (; n-- > 0; children++, managed++) { if (*managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); Widget result = (*childClass->sgml_text_class.contains)(*children,x,y,mode); if (result) return result; } } return NULL; } /*--------------------------------------------------------------*/ /* Redisplay */ /*--------------------------------------------------------------*/ static void Redisplay(t,event,region,Offset) SGMLCompositeTextObject t; XEvent *event; Region region; SGMLPosition Offset; { int n = t->sgml_composite_text.num_children; WidgetList children = t->sgml_composite_text.children; Boolean *managed = t->sgml_composite_text.managed; for (; n-- > 0; children++, managed++) { if (*managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); (*childClass->sgml_text_class.expose)(*children,event,region,Offset); } } } /*------------------------------------------------------------------*/ /* Adjust the size of a child */ /*------------------------------------------------------------------*/ static void CallAdjustSize(child,y,ascent,descent) Widget child; SGMLPosition y; SGMLDimension ascent, descent; { SGMLCompositeTextObject w = (SGMLCompositeTextObject) XtParent(child); int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; WidgetList p = children; Boolean *q = managed; Boolean cont; for (; n-- > 0; p++, q++) if (*p == child) { for (; p-- != children ; ) { if (*--q) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*p); cont = (*childClass->sgml_text_class.adjust_size)(*p,y,ascent,descent); if (!cont) return; } } break; } /* * If we get here then we have adjusted all the children and we are * still on the same line, so must adjust ourself, and then invoke our * parent's call adjust size procedure. */ if (w->sgml_text.begin.y == y) { Widget parent = XtParent((Widget) w); w->sgml_text.begin.ascent = ascent; w->sgml_text.begin.descent = descent; if (SGMLIsCompositeText(parent)) { SGMLCompositeTextObjectClass parentClass = (SGMLCompositeTextObjectClass) XtClass(parent); (*parentClass->sgml_composite_text_class.call_adjust_size)(w,y,ascent,descent); } } } /*--------------------------------------------------------------*/ /* Adjust Size: */ /*--------------------------------------------------------------*/ static Boolean AdjustSize(w,y,ascent,descent) SGMLCompositeTextObject w; SGMLPosition y; SGMLDimension ascent, descent; { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; WidgetList p = children + n; Boolean *q = managed + n; Boolean cont; for (; p-- != children ; ) { if (*--q) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*p); cont = (*childClass->sgml_text_class.adjust_size)(*p,y,ascent,descent); if (!cont) return FALSE; } } return TRUE; } /*--------------------------------------------------------------*/ /* Call the map Callback: */ /*--------------------------------------------------------------*/ static void CallMapCallback(w,event,map) SGMLCompositeTextObject w; XEvent *event; Boolean map; { /* * Invoke our childrens map callbacks */ SGMLTextCallbackStruct cb; int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; for (; n-- > 0; children++, managed++) { if (*managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); (*childClass->sgml_text_class.call_map_callback)(*children,event,map); } } /* * Then invoke our superclasses map callback */ cb.reason = SGMLTEXT_MAP; cb.event = event; cb.text = w->sgml_text.text; cb.length = w->sgml_text.length; cb.param = w->sgml_text.param; cb.param_length = w->sgml_text.param_length; if (map) XtCallCallbacks((Widget) w,SGMLNmapCallback ,(XtPointer) &cb); else XtCallCallbacks((Widget) w,SGMLNunmapCallback,(XtPointer) &cb); } /*--------------------------------------------------------------*/ /* Compute Size: */ /*--------------------------------------------------------------*/ static void ComputeSize(w,geom,Adjust,Closure) SGMLCompositeTextObject w; SGMLGeometry *geom; CallAdjustSizeProc Adjust; Opaque Closure; { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; SGMLPosition xmin, xmax; /* * Break before? */ if ( w->sgml_text.break_before == SGMLBREAK_ALWAYS) { _SGMLBreak(geom, w->sgml_text.space_before); } /* * Query children? */ w->sgml_text.begin = geom->coord; xmin = xmax = geom->coord.x; for (; n-- > 0; children++, managed++) { if (*managed) { SGMLTextObject t = (SGMLTextObject) *children; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); (*childClass->sgml_text_class.compute_size)(*children,geom,CallAdjustSize,*children); if (t->sgml_text.margin < xmin) xmin = t->sgml_text.margin; if (t->sgml_text.margin + t->sgml_text.width > xmax) xmax = t->sgml_text.margin + t->sgml_text.width; } } w->sgml_text.end = geom->coord; w->sgml_text.height = geom->coord.y + geom->coord.descent + geom->coord.ascent - w->sgml_text.begin.y; w->sgml_text.width = xmax - xmin; w->sgml_text.margin = xmin; /* * Break after? */ if ( w->sgml_text.break_after == SGMLBREAK_ALWAYS) { _SGMLBreak(geom,w->sgml_text.space_after); } w->sgml_text.size_valid = TRUE; } /*-----------------------------------------------------------------------*/ /* change_managed method */ /*-----------------------------------------------------------------------*/ static void ChangeManaged(child) Widget child; { Widget parent = XtParent(child); SGMLCompositeTextObject w = (SGMLCompositeTextObject) parent; int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; if (((SGMLTextObject) child)->sgml_text.managed) { for (; n-- > 0; children++, managed++) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); if (*children == child) { if (*managed) return; *managed = TRUE; (*childClass->sgml_text_class.call_map_callback)(*children,NULL,TRUE); /* * If our size is valid, but our newly managed child's isn't, we need to compute * to set size_valid now, so that SetValues will actually call ComputeSize for * the widget. */ if (w->sgml_text.size_valid) ((SGMLTextObject) child)->sgml_text.size_valid = TRUE; } else if (w->sgml_composite_text.management_policy == SGMLMANAGE_ONE) { if (*managed) (*childClass->sgml_text_class.call_map_callback)(*children,NULL,FALSE); *managed = FALSE; ((SGMLTextObject) *children)->sgml_text.managed = FALSE; } } } else { for (; n-- > 0; children++, managed++) { if (*children == child) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); if (*managed) (*childClass->sgml_text_class.call_map_callback)(*children,NULL,FALSE); *managed = FALSE; } } } } /*--------------------------------------------------------------*/ /* Hilite: */ /*--------------------------------------------------------------*/ static void Hilite(t,state) SGMLCompositeTextObject t; int state; { int n = t->sgml_composite_text.num_children; WidgetList children = t->sgml_composite_text.children; Boolean *managed = t->sgml_composite_text.managed; for (; n-- > 0; children++, managed++) { if (*managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); (*childClass->sgml_text_class.hilite)(*children,state); } } } /*-----------------------------------------------------------------------*/ /* Search: */ /*-----------------------------------------------------------------------*/ static Widget Search(exp,sens,w,mode,extsearch,pclosure,sw) char *exp; Boolean sens; SGMLCompositeTextObject w; Boolean mode; Widget (*extsearch)(); XtPointer pclosure; Widget *sw; { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; searchdata closure; Widget result; closure.currentpos = 0; closure.lastpos = n; closure.cw = w; closure.extsearch = extsearch; closure.pclosure = pclosure; for(; n-- > 0 ; children++, managed++) { closure.currentpos++; if (*managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); if (result = (*childClass->sgml_text_class.search)(exp,sens,*children,mode,ExternalSearch,&closure,sw)) return result; } } return NULL; } /*-----------------------------------------------------------------------*/ /* External Search */ /*-----------------------------------------------------------------------*/ static Widget ExternalSearch(exp,sens,closure) char *exp; Boolean sens; searchdata *closure; { SGMLCompositeTextObject w = closure->cw; SGMLTextObjectClass childClass; int i, j; Widget result; Widget tempnil = NULL; i = closure->currentpos; if (closure->currentpos < closure->lastpos) { WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; for(j = i; j-- > 0; children++, managed++); closure->currentpos++; while(!(*managed)) { closure->currentpos++; if (closure->currentpos == closure->lastpos) { closure->currentpos = i; return NULL; } children++; managed++; } childClass = (SGMLTextObjectClass) XtClass(*children); if (result = (*childClass->sgml_text_class.search)(exp,sens,*children,FALSE,ExternalSearch,closure,&tempnil)) { closure->currentpos = i; return result; } else { closure->currentpos = i; return NULL; } } else { searchdata *pclosure = (searchdata *)closure->pclosure; closure->currentpos = i; if (pclosure->currentpos < pclosure->lastpos) { result = closure->extsearch(exp,sens,pclosure); return (result ? result : NULL); } else return NULL; } } /*-----------------------------------------------------------------------*/ /* Clear Select */ /*-----------------------------------------------------------------------*/ static Boolean ClearSelect(w,sw,mode) SGMLCompositeTextObject w; Widget sw; Boolean mode; { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; for(; n-- > 0 ; children++, managed++) { if (*managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); if ((*childClass->sgml_text_class.clear_select)(*children,sw,mode)) return TRUE; } } return FALSE; } /*-----------------------------------------------------------------------*/ /* Make Geometry Request */ /*-----------------------------------------------------------------------*/ static void MakeGeometryRequest(w) SGMLCompositeTextObject w; { /* * Very kludgy implementation for now */ Widget parent = (Widget) w; for ( ; SGMLIsCompositeText(parent); parent = XtParent(parent)) { SGMLTextObject t = (SGMLTextObject) parent; if (!t->sgml_text.size_valid) return; t->sgml_text.size_valid = FALSE; } SGMLHyperRedisplay(parent); } /*--------------------------------------------------------------*/ /* GeometryManager: */ /*--------------------------------------------------------------*/ static XtGeometryResult GeometryManager(w,desired,allowed) Widget w; XtWidgetGeometry *desired, *allowed; { MakeGeometryRequest(w); return XtGeometryYes; } /*--------------------------------------------------------------*/ /* Inherit Changes */ /*--------------------------------------------------------------*/ static Boolean CallInheritChanges(class, w, mask) SGMLTextObjectClass class; Widget w; int mask; { Boolean redisplay = FALSE; if ((WidgetClass) class != sGMLTextObjectClass) redisplay = CallInheritChanges(class->object_class.superclass, w, mask); if (class->sgml_text_class.inherit_changes != NULL) redisplay |= (*class->sgml_text_class.inherit_changes) (w, mask); return (redisplay); } static Boolean InheritChanges(w,inputMask) SGMLCompositeTextObject w; int inputMask; { Boolean redraw = FALSE; int newMask = w->sgml_text.inheritance & inputMask; if (newMask) { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; for (; n-- > 0; children++, managed++) { SGMLTextObject t = (SGMLTextObject) *children; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); int mask = t->sgml_text.inheritance & newMask; if (mask) { Boolean redrawChild = CallInheritChanges(childClass,t,mask); redraw |= (*managed && redrawChild); } } } return redraw; } /*------------------------------------------------------------------*/ /* SetValues : redraw only for font or color changes */ /*------------------------------------------------------------------*/ static Boolean SGMLSetValues (current, request, new, args, num_args) SGMLCompositeTextObject current, request, new; ArgList args; Cardinal *num_args; { Boolean redraw = FALSE; int inherit = 0; SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget) new); int n = new->sgml_composite_text.num_children; WidgetList children = new->sgml_composite_text.children; Boolean *managed = new->sgml_composite_text.managed; /* * Maybe our kids inherited some changed value from us? */ inherit = (*class->sgml_text_class.compute_change_mask)(new,current); /* * If so give them a chance to update the inherited values */ for (; n-- > 0; children++, managed++) { SGMLTextObject t = (SGMLTextObject) *children; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); int mask = t->sgml_text.inheritance & inherit; if (mask) { Boolean redrawChild = CallInheritChanges(childClass,t,mask); redraw |= (*managed && redrawChild); } } return redraw; } /*-----------------------------------------------------------------------*/ /* Create a new SGMLCompositeTextObject */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateCompositeText(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLCompositeTextObjectClass,parent,al,ac); } /*-----------------------------------------------------------------------*/ /* Public routine to add a child */ /*-----------------------------------------------------------------------*/ void SGMLCompositeTextInsertChild(child) Widget child; { Widget parent = XtParent(child); SGMLCompositeTextObjectClass parentClass = (SGMLCompositeTextObjectClass) XtClass(parent); (*parentClass->sgml_composite_text_class.insert_child)(child); } /*-----------------------------------------------------------------------*/ /* Public routine to delete a child */ /*-----------------------------------------------------------------------*/ void SGMLCompositeTextDeleteChild(child) Widget child; { Widget parent = XtParent(child); SGMLCompositeTextObjectClass parentClass = (SGMLCompositeTextObjectClass) XtClass(parent); (*parentClass->sgml_composite_text_class.delete_child)(child); } /*-----------------------------------------------------------------------*/ /* Public routine to create a widget */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateWidget(name,class,parent,arglist,n) char *name; Widget parent; WidgetClass class; Arg arglist[]; int n; { Widget w = XtCreateWidget(name,class,parent,arglist,n); SGMLTextObjectClass cl = (SGMLTextObjectClass) class; (*cl->sgml_text_class.call_create_callback)(w,NULL); SGMLCompositeTextInsertChild(w); return w; } /*-----------------------------------------------------------------------*/ /* Dump Text */ /*-----------------------------------------------------------------------*/ static Boolean DumpText(w,dp,pp) SGMLCompositeTextObject w; SGMLDumpTextInfo *dp; char **pp; { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; Dimension space_before = w->sgml_text.space_before; Dimension space_after = w->sgml_text.space_after; int break_before = (w->sgml_text.break_before == SGMLBREAK_ALWAYS); int break_after = (w->sgml_text.break_after == SGMLBREAK_ALWAYS); if (dp->begin_sw) { if (break_before) { int nl = (int)space_before; dp->line_spacing = 1; for (; nl > 0; nl-=10) dp->line_spacing++; } } for (; n-- > 0; children++, managed++) { if (*managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); if ((*childClass->sgml_text_class.dump_text)(*children,dp,pp)) return TRUE; } } if (dp->begin_sw) { if (break_after) { int nl = (int) space_after; dp->line_spacing = 1; for (; nl > 0; nl-=10) dp->line_spacing++; } } return FALSE; } /*-----------------------------------------------------------------------*/ /* Hilite Selection */ /*-----------------------------------------------------------------------*/ static Widget HiliteSelection(w,mode,ci) SGMLCompositeTextObject w; int mode; SGMLCopyInfo *ci; { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; Widget selection; for(; n-- > 0 ; children++, managed++) { if (*managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); if (selection = (*childClass->sgml_text_class.hilite_selection)(*children,mode,ci)) return selection; } } return NULL; } midaswww-2.1/SGMLFormattedText.c100666 21345 173 112103 5554674751 15105 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLFormattedTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a formatted text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include #include "SGMLFormattedTextP.h" Widget ExtHiliteSelection(); /* Private functions */ #define max(a,b) (a>b?a:b) static void WordSize(); static void LineSize(); static void DrawByParts(); /* Widget class methods */ static void Initialize(); static void Destroy(); static void ComputeSize(); static Boolean AdjustSize(); static void Redisplay(); static Boolean SGMLSetValues(); static Boolean InheritChanges(); static Widget HiliteSelection(); static void XYToPos(); static void PosToXY(); static Boolean DumpText(); #define MINIMUM(a,b) ((a)<(b)?(a):(b)) #define MAXIMUM(a,b) ((a)>(b)?(a):(b)) #define Offset(field) XtOffsetOf(SGMLFormattedTextRec,sgml_formatted_text.field) static XtResource resources[] = { {SGMLNrightIndent,SGMLCMargin,XtRDimension,sizeof(Dimension), Offset (right_indent),XtRImmediate,(XtPointer)0}, {SGMLNleftIndent,SGMLCMargin,XtRDimension,sizeof(Dimension), Offset (left_indent),XtRImmediate,(XtPointer)0}, }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLFormattedTextClassRec sGMLFormattedTextClassRec = { { (WidgetClass) &sGMLTextClassRec, /* superclass */ "SGMLFormattedText", /* class_name */ sizeof(SGMLFormattedTextRec), /* widget_size */ NULL, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ Destroy, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { ComputeSize, /* compute_size */ AdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ Redisplay, /* expose */ SGMLInheritActivate, /* activate */ SGMLInheritHilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ SGMLInheritCallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ SGMLSetValues, /* sgml_set_values */ InheritChanges, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ HiliteSelection, /* hilite_selection */ XYToPos, /* xy_to_pos */ PosToXY, /* pos_to_xy */ DumpText, /* dump_text */ NULL, /* extension */ }, { NULL, /* ignore */ } }; WidgetClass sGMLFormattedTextObjectClass = (WidgetClass) &sGMLFormattedTextClassRec; /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLFormattedTextObject request, new; { new->sgml_formatted_text.word_info = NULL; new->sgml_formatted_text.line_info = NULL; new->sgml_formatted_text.nwords = 0; new->sgml_formatted_text.nlines = 0; new->sgml_formatted_text.left_indent = new->sgml_text.left_indent; new->sgml_formatted_text.right_indent = new->sgml_text.right_indent; } /*--------------------------------------------------------------*/ /* Destroy the widget: release all memory allocated */ /*--------------------------------------------------------------*/ static void Destroy (w) SGMLFormattedTextObject w; { XtFree((char *) w->sgml_formatted_text.word_info); XtFree((char *) w->sgml_formatted_text.line_info); } /*--------------------------------------------------------------*/ /* Inherit Changes */ /*--------------------------------------------------------------*/ static Boolean InheritChanges(w,inputMask) SGMLFormattedTextObject w; int inputMask; { if (inputMask & gcMask) { XtFree((char *) w->sgml_formatted_text.word_info); XtFree((char *) w->sgml_formatted_text.line_info); w->sgml_formatted_text.word_info = NULL; w->sgml_formatted_text.line_info = NULL; w->sgml_formatted_text.nwords = 0; w->sgml_formatted_text.nlines = 0; } return FALSE; } /*------------------------------------------------------------------*/ /* SetValues : redraw only for font or color changes */ /*------------------------------------------------------------------*/ static Boolean SGMLSetValues (current, request, new) SGMLFormattedTextObject current, request, new; { SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget) new); int mask = (*class->sgml_text_class.compute_change_mask)(new,current); if (mask & gcMask) { XtFree((char *) new->sgml_formatted_text.word_info); XtFree((char *) new->sgml_formatted_text.line_info); new->sgml_formatted_text.word_info = NULL; new->sgml_formatted_text.line_info = NULL; new->sgml_formatted_text.nwords = 0; new->sgml_formatted_text.nlines = 0; } return FALSE; } /*--------------------------------------------------------------*/ /* Redisplay */ /*--------------------------------------------------------------*/ static void Redisplay(t,event,region,Offset) SGMLFormattedTextObject t; XEvent *event; Region region; SGMLPosition Offset; { SGMLPosition Y = t->sgml_text.begin.y; Position y = Y - Offset; Position margin = t->sgml_text.margin; Dimension width = MINIMUM(t->sgml_text.width,32767-margin); Dimension height = MINIMUM(t->sgml_text.height,32767-y); if (y != Y) return; if(XRectInRegion(region,margin,y,width,height) != RectangleOut) { Display *dpy = XtDisplayOfObject((Widget) t); Window wind = XtWindowOfObject((Widget) t); GC gc = t->sgml_text.gc; XSegment *segs = NULL; Position x = t->sgml_text.begin.x; Dimension ascent = t->sgml_text.begin.ascent; Dimension depth = t->sgml_text.begin.descent + ascent; WordInfo *info = t->sgml_formatted_text.word_info; LineInfo *line = t->sgml_formatted_text.line_info; SGMLRendition *rendition; int l; GC rv_gc = t->sgml_text.reverse_gc; char *b = t->sgml_text.begin_select; char *e = t->sgml_text.end_select; int a_x = 0, a_y = 0; Boolean line_select_flag = FALSE; Boolean line_select = FALSE; Boolean f16 = FALSE; if (t->sgml_text.font16_name != XrmStringToQuark("") && t->sgml_text.font16_name != NULL) f16 = TRUE; rendition = &t->sgml_text.normal_rendition; for( l = 0 ; l < t->sgml_formatted_text.nlines; ) { if (XRectInRegion(region,margin,y,width,depth) != RectangleOut && line[l].nchars > 0) { int m; char *p = XtMalloc(line[l].nchars); char *q = p; char *bp, *ep, *ip, *eol; int bf, ef; int st = line[l].start; int sp = line[l].stop - 1; int sl, sls; bp = ep = p; bf = ef = FALSE; eol = info[sp].word + info[sp].length; if ( b != NULL && e != NULL) { if ((info[st].word >= b )|| (info[st].word <= b && eol >= b)) { line_select = TRUE; line_select_flag = TRUE; } if (info[st].word <= e && eol >= e) line_select_flag = FALSE; if (info[st].word > e) line_select = FALSE; } for ( m = line[l].start ; m < line[l].stop ; m++) { strncpy(p,info[m].word,info[m].length); if (line_select) { char *eow = info[m].word; eow += info[m].length; if (info[m].word <= b && eow >= b && !bf) { for (bp = p, ip= info[m].word; ip < b; bp++, ip++); bf = TRUE; } if (info[m].word <= e && eow >= e && !ef) { for (ep = p, ip= info[m].word; ip < e; ep++, ip++); ef = TRUE; } } p += info[m].length; *p++ = ' '; } *--p = '\0'; if (line_select) { if (!bf) bp = q; if (!ef) ep = p; } if (line_select && b!= NULL) { DrawByParts(q,bp,ep,p,t,x,y+ascent,&sl,&sls); a_x = sl + sls; a_y = y; /* fill addition rectangle when > 2 line_select */ if (line_select_flag) { unsigned int a_width = t->sgml_text.width + margin - a_x; if (a_width > 0) XFillRectangle(dpy,wind,gc,a_x,a_y,a_width,(unsigned int)depth); } } else if (!f16) XDrawString(dpy, wind, gc, x, y+ascent, q, line[l].nchars-1); else ExtDrawString((Widget)t,FALSE,dpy,wind,gc,x,y+ascent,q,line[l].nchars-1); if (rendition->underline) { int s; Position yy = y+ascent; if (!segs) segs = (XSegment *) XtMalloc(sizeof(XSegment) * rendition->underline); for (s=0; s < rendition->underline ; s++ ) { yy += max(rendition->underline_height,1); segs[s].x1 = x; segs[s].x2 = line[l].size; segs[s].y1 = yy; segs[s].y2 = yy; yy += max(rendition->underline_height,1); } XDrawSegments(dpy,wind,gc,segs,rendition->underline); if (line_select && b!= NULL) { yy = y+ascent; for (s=0; s < rendition->underline ; s++ ) { yy += max(rendition->underline_height,1); segs[s].x1 = sl; segs[s].x2 = sl + sls; segs[s].y1 = yy; segs[s].y2 = yy; yy += max(rendition->underline_height,1); } XDrawSegments(dpy,wind,rv_gc,segs,rendition->underline); /* fill additional rectangle for selected underline text */ if (yy > y+ascent+t->sgml_text.font->descent) XFillRectangle(dpy,wind,gc,sl,yy-1,sls,1); } } if (rendition->outline) { XDrawRectangle(dpy,wind,gc,x,y,line[l].size-x,depth-1); } XtFree(q); } x = margin; y += depth; Y += depth; if (y != Y) break; if (l++ == t->sgml_formatted_text.nlines) break; else if ( l+1 == t->sgml_formatted_text.nlines) { ascent = t->sgml_text.end.ascent; depth = t->sgml_text.end.descent + ascent; } else { ascent = t->sgml_text.ascent; depth = t->sgml_text.descent + ascent; } } XtFree((char *) segs); } } /*--------------------------------------------------------------*/ /* Adjust Size: */ /*--------------------------------------------------------------*/ static Boolean AdjustSize(w,y,ascent,descent) SGMLFormattedTextObject w; SGMLPosition y; SGMLDimension ascent, descent; { if (w->sgml_text.end.y != y) return FALSE; w->sgml_text.height += descent - w->sgml_text.end.descent + ascent - w->sgml_text.end.ascent; w->sgml_text.end.ascent = ascent; w->sgml_text.end.descent = descent; if (w->sgml_text.begin.y == y) { w->sgml_text.begin.ascent = ascent; w->sgml_text.begin.descent = descent; return TRUE; } return FALSE; } /*--------------------------------------------------------------*/ /* Compute Size: */ /*--------------------------------------------------------------*/ static void ComputeSize(w,geom,Adjust,Closure) SGMLFormattedTextObject w; SGMLGeometry *geom; AdjustSizeProc Adjust; Opaque Closure; { Dimension left_clearance = w->sgml_text.left_margin + w->sgml_formatted_text.left_indent; Dimension right_clearance = w->sgml_text.right_margin + w->sgml_formatted_text.right_indent; Boolean punctuation; char *punc_char = ".,:;)"; SGMLPosition xmin, xmax; /* If we haven't already calculated the size of the words, do so now. */ if (w->sgml_formatted_text.word_info == NULL) WordSize(w); /* * Break before? */ if ( w->sgml_text.break_before == SGMLBREAK_ALWAYS || /* (w->sgml_text.break_before == SGMLBREAK_SOFT && geom->coord.x > left_clearance) || */ (w->sgml_text.alignment != geom->alignment && geom->alignment)) { _SGMLBreak(geom,w->sgml_text.space_before); } if (w->sgml_formatted_text.nwords) { /* * We will leave a space before the first word if: * a) Not beginning a new line * b) Not a punctuation character * c) the geometry structure requests it. */ punctuation = !w->sgml_formatted_text.word_info || strchr(punc_char,*w->sgml_formatted_text.word_info[0].word); if (!punctuation) if (geom->coord.x + w->sgml_text.spacing + w->sgml_formatted_text.word_info[0].size + right_clearance > geom->natural_width) { geom->coord.x = left_clearance; geom->coord.y += geom->coord.descent + geom->coord.ascent; geom->coord.descent = w->sgml_text.descent; geom->coord.ascent = w->sgml_text.ascent; } else if (geom->leave_space) geom->coord.x += w->sgml_text.spacing; if (w->sgml_text.descent > geom->coord.descent || w->sgml_text.ascent > geom->coord.ascent ) { if (w->sgml_text.descent > geom->coord.descent) geom->coord.descent = w->sgml_text.descent; if (w->sgml_text.ascent > geom->coord.ascent) geom->coord.ascent = w->sgml_text.ascent; Adjust(Closure, geom->coord.y, geom->coord.ascent, geom->coord.descent); } if (left_clearance > geom->coord.x && geom->broken) geom->coord.x = left_clearance; } w->sgml_text.begin = geom->coord; LineSize(w,geom,&xmin,&xmax); if (xmax > geom->actual_width) geom->actual_width = xmax; w->sgml_text.width = xmax - xmin; w->sgml_text.margin = xmin; w->sgml_text.height = geom->coord.y + geom->coord.descent + geom->coord.ascent - w->sgml_text.begin.y; w->sgml_text.end = geom->coord; /* * Break after? */ if (w->sgml_text.break_after == SGMLBREAK_ALWAYS) { _SGMLBreak(geom,w->sgml_text.space_after); } w->sgml_text.size_valid = TRUE; } /*-----------------------------------------------------------------------*/ /* Private routines */ /*-----------------------------------------------------------------------*/ /* WordSize: Build an array giving the length of each word */ /*-----------------------------------------------------------------------*/ static void WordSize(w) SGMLFormattedTextObject w; { int nwords; char *p = w->sgml_text.text; char *delim = " \t\n\r"; WordInfo *info = w->sgml_formatted_text.word_info; XFontStruct *font; Boolean f16 = FALSE; if (w->sgml_text.font16_name != XrmStringToQuark("") && w->sgml_text.font16_name != NULL) f16 = TRUE; font=w->sgml_text.font; /* count how many words */ for (nwords=0; *p != '\0';nwords++) { for (; *p != '\0' && strchr(delim,*p); p++); /* scan white space */ if (*p == '\0') break; for (; !strchr(delim,*p); p++); } /* Allocate storage for word statistics */ XtFree((char *) info); info = nwords?(WordInfo *) XtMalloc(sizeof(WordInfo) * nwords):NULL; /* Now store length of each word */ p = w->sgml_text.text; for (nwords=0; *p != '\0' ; nwords++) { for (; *p != '\0' && strchr(delim,*p); p++); /* scan white space */ if (*p == '\0') break; info[nwords].word = p; for (; !strchr(delim,*p); p++); info[nwords].length = p - info[nwords].word; if (!f16) info[nwords].size = XTextWidth(font,info[nwords].word,info[nwords].length); else info[nwords].size = ExtTextWidth((Widget)w,&info[nwords].word,info[nwords].length,FALSE); } w->sgml_formatted_text.word_info = info; w->sgml_formatted_text.nwords = nwords; } /*-----------------------------------------------------------------------*/ /* LineSize: Build an array giving the length of each line */ /*-----------------------------------------------------------------------*/ static void LineSize(w, geom, xmin, xmax) SGMLFormattedTextObject w; SGMLGeometry *geom; SGMLPosition *xmin, *xmax; { SGMLPosition x = geom->coord.x; SGMLPosition y = geom->coord.y; SGMLPosition maxX = x; SGMLPosition minX = x; int n = 0; int l = 0; int nc = 0; int lmax = 10; Dimension size = 0; Dimension spacing = 0; WordInfo *info = w->sgml_formatted_text.word_info; Dimension left_clearance = w->sgml_text.left_margin + w->sgml_formatted_text.left_indent; Dimension right_clearance = w->sgml_text.right_margin + w->sgml_formatted_text.right_indent; LineInfo *line = (LineInfo *) XtMalloc(lmax*sizeof(LineInfo)); XtFree((char *) w->sgml_formatted_text.line_info); line[l].start = n; for (; n < w->sgml_formatted_text.nwords; n++) { if (spacing>0 && x + spacing + info[n].size + right_clearance > geom->natural_width) { line[l].stop = n; line[l].nchars = nc; line[l].size = x; if (x > maxX) maxX = x; if (++l == lmax) line = (LineInfo *) XtRealloc((char *) line, (lmax *= 2)*sizeof(LineInfo)); line[l].start = n; x = left_clearance + info[n].size; y += geom->coord.descent + geom->coord.ascent; geom->coord.descent = w->sgml_text.descent; geom->coord.ascent = w->sgml_text.ascent; minX = left_clearance; nc = info[n].length + 1; } else { x += spacing + info[n].size; nc += info[n].length + 1; } geom->alignment = w->sgml_text.alignment; geom->broken = FALSE; geom->leave_space = TRUE; spacing = w->sgml_text.spacing; } line[l].stop = n; line[l].nchars = nc; line[l].size = x; if (x > maxX) maxX = x; w->sgml_formatted_text.line_info = line; w->sgml_formatted_text.nlines = l + 1; geom->coord.x = x; geom->coord.y = y; *xmin = minX; *xmax = maxX; } /*-----------------------------------------------------------------------*/ /* Private routines */ /*-----------------------------------------------------------------------*/ /* DrawByParts: Draw each part of a line in different gc */ /* Use to Redisplay when a search string is found */ /*-----------------------------------------------------------------------*/ static void DrawByParts(copy,b,e,l,t,x,y,sl,sls) char *copy; char *b, *e, *l; SGMLFormattedTextObject t; Position x, y; int *sl, *sls; { Display *dpy = XtDisplayOfObject((Widget) t); Window wind = XtWindowOfObject((Widget) t); GC gc = t->sgml_text.gc; GC rv_gc = t->sgml_text.reverse_gc; XFontStruct *font; Position ix = x; int np, size = 0; Boolean f16 = FALSE; if (t->sgml_text.font16_name != XrmStringToQuark("") && t->sgml_text.font16_name != NULL) f16 = TRUE; font=t->sgml_text.font; np = b - copy; if (np > 0) { if (!f16) { XDrawString(dpy, wind, gc, ix, y, copy, np); size = XTextWidth(font,copy,np); } else { ExtDrawString((Widget)t, FALSE, dpy, wind, gc, ix, y, copy, np); size = ExtTextWidth((Widget)t,©,np,FALSE); } ix += size; } np = (e - b) + 1; if (np > 0) { if (!f16) { XDrawImageString(dpy, wind, rv_gc, ix, y, b, np); size = XTextWidth(font,b,np); } else { ExtDrawString((Widget)t, TRUE, dpy,wind, rv_gc, ix, y, b, np); size = ExtTextWidth((Widget)t,&b,np,FALSE); } *sl = ix; *sls = size; ix += size; } np = l - e; if (np > 0) if (!f16) XDrawString(dpy, wind, gc, ix, y, e+1, np); else ExtDrawString((Widget)t, FALSE, dpy, wind, gc, ix, y, e+1, np); } /*-----------------------------------------------------------------------*/ /* Create a new SGMLFormattedTextObject */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateFormattedText(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLFormattedTextObjectClass,parent,al,ac); } /*-----------------------------------------------------------------------*/ /* Hilite Selection text */ /*-----------------------------------------------------------------------*/ static Widget HiliteSelection(w,mode,ci) SGMLFormattedTextObject w; int mode; SGMLCopyInfo *ci; { char *pos = NULL; char *delim = " \r\n\t"; char *text = w->sgml_text.text; WordInfo *info = w->sgml_formatted_text.word_info; LineInfo *line = w->sgml_formatted_text.line_info; SGMLFormattedTextObjectClass class = (SGMLFormattedTextObjectClass) XtClass((Widget)w); char *b, *e, *eot; int x = ci->current_x; int y = ci->current_y; if (mode == SGMLSELECT_LINE) { int l, st, sp; (*class->sgml_text_class.xy_to_pos)(w,&x,&y,&pos); b = e = pos; for (l = 0; l < w->sgml_formatted_text.nlines; l++) { int stp = line[l].stop - 1; if (info[stp].word + info[stp].length < pos) continue; break; } st = line[l].start; sp = line[l].stop - 1; w->sgml_text.begin_select = b = info[st].word; e = info[sp].word + info[sp].length; for (;e && strchr(delim,*e); e--); w->sgml_text.end_select = e; (*class->sgml_text_class.hilite)(w,SGMLSELECT_LINE); return (Widget) w; } else return ExtHiliteSelection((Widget)w,mode,ci,FALSE); } /*-----------------------------------------------------------------------*/ /* XY to a char Position */ /*-----------------------------------------------------------------------*/ static void XYToPos(w,x,y,pos) SGMLFormattedTextObject w; int *x, *y; char **pos; { Position wy = w->sgml_text.begin.y; Position wx = w->sgml_text.begin.x; Position margin = w->sgml_text.margin; Dimension ascent = w->sgml_text.begin.ascent; Dimension depth = w->sgml_text.begin.descent + ascent; WordInfo *info = w->sgml_formatted_text.word_info; LineInfo *line = w->sgml_formatted_text.line_info; XFontStruct *font = w->sgml_text.font; char *text = w->sgml_text.text; char *delim = " \r\t\n"; char *p; int nc, l, m; int width = 0; Boolean f16 = FALSE; if (w->sgml_text.font16_name != XrmStringToQuark("") && w->sgml_text.font16_name != NULL) f16 = TRUE; for (;text != NULL && *text != '\0' && strchr(delim,*text);text++); if (*text == '\0' || (wy + depth > *y && wx + (f16 ? ExtTextWidth((Widget)w,&text,1,FALSE) : XTextWidth(font,text,1)) > *x)) { *x = wx; *y = wy; *pos = text; return; } for (l = 0; l < w->sgml_formatted_text.nlines; l++) { if (wy + depth > *y) break; wy += depth; wx = margin; } if (*x > line[l].size) /* the end of line */ { wx = line[l].size; m = line[l].stop - 1; p = info[m].word + info[m].length -1; /* xy point to a delim, make it point to last instead */ } else { for (m = line[l].start; m < line[l].stop; m++) { if (wx + info[m].size + w->sgml_text.spacing > *x) break; wx += info[m].size + w->sgml_text.spacing; } for (p = info[m].word, nc = 0; nc < info[m].length; nc++, p++) { width = f16 ? ExtTextWidth((Widget)w,&p,1,TRUE) : XTextWidth(font,p,1); if (wx + width > *x ) break; if (nc == info[m].length -1) p++; /* xy point to a delim */ wx += width; } } *y = wy; *x = wx; *pos = p; /* pos could possible be '\0' */ } /*-----------------------------------------------------------------------*/ /* A char Position to XY */ /*-----------------------------------------------------------------------*/ static void PosToXY(w,x,y,pos,after_pos ) SGMLFormattedTextObject w; Position *x, *y; char *pos; Boolean after_pos; { Position wy = w->sgml_text.begin.y; Position wx = w->sgml_text.begin.x; Position margin = w->sgml_text.margin; Dimension ascent = w->sgml_text.begin.ascent; Dimension depth = w->sgml_text.begin.descent + ascent; WordInfo *info = w->sgml_formatted_text.word_info; LineInfo *line = w->sgml_formatted_text.line_info; XFontStruct *font = w->sgml_text.font; char *text = w->sgml_text.text; char *delim = " \r\t\n"; int l, m; int width = 0; char *eot; int poswidth = 0; Boolean f16 = FALSE; if (w->sgml_text.font16_name != XrmStringToQuark("") && w->sgml_text.font16_name != NULL) f16 = TRUE; if (pos != NULL && strchr(delim,*pos)!=NULL) poswidth = w->sgml_text.spacing; else poswidth = f16 ? ExtTextWidth((Widget)w,&pos,1,FALSE) : XTextWidth(font,pos,1); if (pos == w->sgml_text.text) { *x = wx + (after_pos? poswidth : 0); *y = wy; return; } for (;text != NULL && *text != '\0' && strchr(delim,*text);text++); if ( pos == text) { *x = wx + (after_pos ? poswidth : 0); *y = wy; return; } /* if pos is a delim at the end of text, ignore after_pos */ if (*text != '\0') { char *end; for (eot = text; *eot != '\0'; eot++); for (end = eot;strchr(delim,*eot);eot--); if (pos > eot && pos < end) { *x = w->sgml_text.end.x; *y = w->sgml_text.end.y; return; } } if (*pos == '\0') { *x = w->sgml_text.end.x; *y = w->sgml_text.end.y; return; } for (l = 0; l < w->sgml_formatted_text.nlines; l++) { int stp = line[l].stop - 1; char *eol = info[stp].word + info[stp].length; /* not neccessary, but safer to check */ if (!line[l].stop) { *x = wx + (after_pos ? poswidth : 0); *y = wy; return; } for (;*eol != '\0' && strchr(delim,*(eol+1))!=NULL; eol++); if (eol < pos) { wy += depth; wx = margin; } else break; } for (m = line[l].start; m < line[l].stop; m++) { char *iw = info[m].word; char *eow = info[m].word + info[m].length; char *maxw; /* also count all the delim in between words */ for (maxw = eow;*maxw != '\0' && strchr(delim,*(maxw+1))!=NULL; maxw++); if (info[m].word <= pos && maxw >= pos) { if (pos >= eow && pos <= maxw) /* pos is a delim */ { if (m == line[l].stop -1) /* the end of line, tricky ; ignore the after_pos */ width += info[m].size; else width += info[m].size + (after_pos ? poswidth : 0); } else width += (f16 ? ExtTextWidth((Widget)w,&iw,pos-iw,FALSE) : XTextWidth(font,iw,pos-iw)) + (after_pos ? poswidth : 0); break; } else width += info[m].size + w->sgml_text.spacing; } *y = wy; *x = wx + width; } /*-----------------------------------------------------------------------*/ /* Dump Text */ /*-----------------------------------------------------------------------*/ static Boolean DumpText(w,dp,pp) SGMLFormattedTextObject w; SGMLDumpTextInfo *dp; char **pp; { char *text = w->sgml_text.text; char *b = w->sgml_text.begin_select; char *e = w->sgml_text.end_select; Dimension space_before = w->sgml_text.space_before; Dimension space_after = w->sgml_text.space_after; int break_before = w->sgml_text.break_before; int break_after = w->sgml_text.break_after; int left_indent = w->sgml_text.left_indent; int right_indent = w->sgml_text.right_indent; int para_indent = w->sgml_text.paragraph_indent; SGMLRendition *rendition = &w->sgml_text.normal_rendition; WordInfo *info = w->sgml_formatted_text.word_info; LineInfo *line = w->sgml_formatted_text.line_info; int nwords = w->sgml_formatted_text.nwords; char *delim = " \t\r\n"; char *punc_char = ".,:;)"; char *p; int len, m, bm, em, tl; int maxlen = 80; int width; if (dp->calc_len) { len = (int) *pp; width = len - dp->last_len; } else { p = *pp; width = p - dp->last_pos; } switch (dp->format_type) { case SGMLDUMP_ASCII: /* dump text in 80 chars width */ if (dp->sw) { if (b == NULL || e == NULL) return FALSE; dp->begin_sw = TRUE; for (m=0; m < nwords; m++) /* locate the selected words */ { char *nw; if (m == nwords -1) nw = info[m].word + info[m].length; else nw = info[m+1].word; if (info[m].word <= b && nw > b) bm = m; if (info[m].word <= e && nw > e) { em = m; break; } } if (dp->calc_len) { if (dp->spacing && !dp->line_spacing && !strchr(punc_char,*b)) /* spaces */ { len += dp->spacing; width += dp->spacing; } if (dp->line_spacing) { len += dp->line_spacing; dp->last_len = len; width = 0; } /* lines */ if (bm != em) { tl = info[bm].word + info[bm].length - b; if (width + tl +1 > maxlen) { len += 1; dp->last_len = len; width = (tl < 0 ? 0 : tl) +1; } else width += (tl < 0 ? 0 : tl); len += 1 + ( tl < 0 ? 0 : tl); for (m = bm +1; m < em; m++) { if (width + info[m].length +1 > maxlen) { len += 1; dp->last_len = len; width = info[m].length +1; } else width += info[m].length + 1; len += info[m].length + 1; } tl = e - info[em].word + 1; if (width + tl +1 > maxlen) { len += 1; dp->last_len = len; width = MINIMUM(tl,info[em].length +1); } else width += MINIMUM(tl,info[em].length +1); len += MINIMUM(tl, info[em].length +1); } else { tl = MINIMUM(e - b + 1, info[bm].length +1); if (width + tl > maxlen) { len += 1; dp->last_len = len; width = tl; } else width += tl; len += tl; } if (dp->copy_type == SGMLSELECT_LINE && w == (SGMLFormattedTextObject) dp->sw) len++; /* explicitely add a line */ *pp = (char *)len; } else { if (dp->spacing && !dp->line_spacing && !strchr(punc_char,*b)) /* spaces */ for (;dp->spacing > 0; dp->spacing--, width++) *p++ = ' '; if (dp->line_spacing) /* lines */ for (width=0;dp->line_spacing > 0; dp->line_spacing--) { *p++ = '\n'; dp->last_pos = p; } if (bm != em) { tl = info[bm].word + info[bm].length - b; if (tl > 0) { if (width + tl +1 > maxlen) { *p++ = '\n'; dp->last_pos = p; width = tl; } else width += tl; strncpy(p,b,tl); p += tl; } *p++ = ' '; width++; for (m=bm+1; m < em; m++) { if (width + info[m].length +1 > maxlen) { *p++ = '\n'; dp->last_pos = p; width = info[m].length +1; } else width += info[m].length +1; strncpy(p,info[m].word,info[m].length); p += info[m].length; *p++ = ' '; } tl = MINIMUM(e-info[em].word +1,info[em].length); if (width + tl +1 > maxlen) { *p++ = '\n'; dp->last_pos = p; width = tl; } else width += tl; strncpy(p,info[em].word,tl); p += tl; } else { char *eow = info[bm].word + info[bm].length; if (width + e -b +1 > maxlen) { *p++ = '\n'; dp->last_pos = p; width = e - b +1; } else width += e -b +1; for (;b != e && b != eow && *b != '\0'; b++, p++) *p = *b; if (b == eow) *p++ = ' '; else *p++ = *b; } if (dp->copy_type == SGMLSELECT_LINE && w == (SGMLFormattedTextObject) dp->sw) *p++ = '\n'; /* explicitly add a line */ *pp = p; } dp->spacing = 1; /* space flag for next widget */ dp->line_spacing = 0; /* line flag for next widget */ if (w == (SGMLFormattedTextObject) dp->sw) return TRUE; else return FALSE; } else { if (dp->calc_len) len += strlen(text); else for (;*text != '\0';text++,p++) *p = *text; } break; case SGMLDUMP_HTML_ASCII: default: printf ("not implement"); } return FALSE; } midaswww-2.1/SGMLFormText.c100666 21345 173 15647 5554674752 14063 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLFormTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a composite text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include #include "SGMLFormTextP.h" /* Private functions */ /* Private data struct */ /* Widget class methods */ static void Initialize(); static void Destroy(); #define Offset(field) XtOffsetOf(SGMLFormTextRec,sgml_form_text.field) static XtResource resources[] = { {SGMLNmethod,SGMLCMethod,SGMLRQuark,sizeof(XrmQuark), Offset (method),XtRString,(XtPointer) "get"}, {SGMLNresult,XtCReadOnly,XtRString,sizeof(String), Offset (result),XtRImmediate,(XtPointer)0}, {SGMLNaction,SGMLCAction,XtRString,sizeof(String), Offset (action),XtRImmediate,(XtPointer)0}, }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLFormTextClassRec sGMLFormTextClassRec = { { (WidgetClass) &sGMLCompositeTextClassRec, /* superclass */ "SGMLFormText", /* class_name */ sizeof(SGMLFormTextRec), /* widget_size */ NULL, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ Destroy, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { SGMLInheritComputeSize, /* compute_size */ SGMLInheritAdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ SGMLInheritExpose, /* expose */ SGMLInheritActivate, /* activate */ SGMLInheritHilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ SGMLInheritCallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ NULL, /* sgml_set_values */ NULL, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ SGMLInheritHiliteSelection, /* hilite_selection */ SGMLInheritXYToPos, /* xy_to_pos */ SGMLInheritPosToXY, /* pos_to_xy */ SGMLInheritDumpText, /* dump_text */ NULL, /* extension */ }, { SGMLInheritGeometryManager, /* geometry_manager */ SGMLInheritChangeManaged, /* change_managed */ SGMLInheritInsertChild, /* insert_child */ SGMLInheritDeleteChild, /* delete_child */ SGMLInheritCallAdjustSize, /* call_adjust_size */ NULL, /* ignore */ }, { NULL, /* extension */ } }; WidgetClass sGMLFormTextObjectClass = (WidgetClass) &sGMLFormTextClassRec; /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLFormTextObject request, new; { char *action = new->sgml_form_text.action; if (action) new->sgml_form_text.action = XtNewString(action); new->sgml_form_text.result = NULL; } /*--------------------------------------------------------------*/ /* Destroy the widget: release all memory allocated */ /*--------------------------------------------------------------*/ static void Destroy (w) SGMLFormTextObject w; { XtFree(w->sgml_form_text.action); XtFree(w->sgml_form_text.result); } /*--------------------------------------------------------------*/ /* Set Result */ /*--------------------------------------------------------------*/ void SGMLFormSetResult(w,result) SGMLFormTextObject w; char *result; { SGMLFormTextObjectClass class = (SGMLFormTextObjectClass) XtClass((Widget) w); XtFree(w->sgml_form_text.result); w->sgml_form_text.result = result; (*class->sgml_text_class.activate)(w,NULL); } midaswww-2.1/SGMLHyper.c100666 21345 173 273137 5554674752 13422 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLHyperWidget */ /* */ /* B.Raoult (mab@ecmwf.co.uk) Oct.91 */ /* T.Johnson - added SGML facilities June.92 */ /* (Tony Johnson) */ /* */ /* Hyper text like widget. */ /* */ /*==================================================================*/ #include #include #include #include #include #include #include #include #include #include #include #ifdef VMS #include #ifdef UCX #define bcopy(a, b, c) (void) memmove ((void *) (b), (void *) (a), (size_t) (c)) #endif #else #include #endif #include "SGMLText.h" #include "SGMLPlainText.h" #include "SGMLFormattedText.h" #include "SGMLFormText.h" #include "SGMLCaptionText.h" #include "SGMLTableText.h" #include "SGMLCompositeText.h" #include "SGMLContainerTextP.h" #include "SGMLAnchorText.h" #include "SGMLMarkerText.h" #include "SGMLRuleText.h" #include "SGMLInputText.h" #include "SGMLListText.h" #include "SGMLHyperP.h" #ifndef ABS #define ABS(a) ((a)>=0?(a):-(a)) #endif #ifndef MIN #define MIN(a,b) ((a)>(b)?(b):(a)) #endif #define MAX_LINE_SIZE 1024 /* Entity Names ** ------------ ** ** This table must be matched exactly the table below */ static char* entities[] = { "AElig", /* capital AE diphthong (ligature) */ "Aacute", /* capital A, acute accent */ "Acirc", /* capital A, circumflex accent */ "Agrave", /* capital A, grave accent */ "Aring", /* capital A, ring */ "Atilde", /* capital A, tilde */ "Auml", /* capital A, dieresis or umlaut mark */ "Ccedil", /* capital C, cedilla */ "ETH", /* capital Eth, Icelandic */ "Eacute", /* capital E, acute accent */ "Ecirc", /* capital E, circumflex accent */ "Egrave", /* capital E, grave accent */ "Euml", /* capital E, dieresis or umlaut mark */ "Iacute", /* capital I, acute accent */ "Icirc", /* capital I, circumflex accent */ "Igrave", /* capital I, grave accent */ "Iuml", /* capital I, dieresis or umlaut mark */ "Ntilde", /* capital N, tilde */ "Oacute", /* capital O, acute accent */ "Ocirc", /* capital O, circumflex accent */ "Ograve", /* capital O, grave accent */ "Oslash", /* capital O, slash */ "Otilde", /* capital O, tilde */ "Ouml", /* capital O, dieresis or umlaut mark */ "THORN", /* capital THORN, Icelandic */ "Uacute", /* capital U, acute accent */ "Ucirc", /* capital U, circumflex accent */ "Ugrave", /* capital U, grave accent */ "Uuml", /* capital U, dieresis or umlaut mark */ "Yacute", /* capital Y, acute accent */ "aacute", /* small a, acute accent */ "acirc", /* small a, circumflex accent */ "aelig", /* small ae diphthong (ligature) */ "agrave", /* small a, grave accent */ "amp", /* ampersand */ "aring", /* small a, ring */ "atilde", /* small a, tilde */ "auml", /* small a, dieresis or umlaut mark */ "ccedil", /* small c, cedilla */ "eacute", /* small e, acute accent */ "ecirc", /* small e, circumflex accent */ "egrave", /* small e, grave accent */ "eth", /* small eth, Icelandic */ "euml", /* small e, dieresis or umlaut mark */ "gt", /* greater than */ "iacute", /* small i, acute accent */ "icirc", /* small i, circumflex accent */ "igrave", /* small i, grave accent */ "iuml", /* small i, dieresis or umlaut mark */ "lt", /* less than */ "ntilde", /* small n, tilde */ "oacute", /* small o, acute accent */ "ocirc", /* small o, circumflex accent */ "ograve", /* small o, grave accent */ "oslash", /* small o, slash */ "otilde", /* small o, tilde */ "ouml", /* small o, dieresis or umlaut mark */ "szlig", /* small sharp s, German (sz ligature) */ "thorn", /* small thorn, Icelandic */ "uacute", /* small u, acute accent */ "ucirc", /* small u, circumflex accent */ "ugrave", /* small u, grave accent */ "uuml", /* small u, dieresis or umlaut mark */ "yacute", /* small y, acute accent */ "yuml", /* small y, dieresis or umlaut mark */ }; /* Entity values -- for ISO Latin 1 local representation ** ** This MUST match exactly the table above! */ static int ISO_Latin1[] = { 0306, /* capital AE diphthong (ligature) */ 0301, /* capital A, acute accent */ 0302, /* capital A, circumflex accent */ 0300, /* capital A, grave accent */ 0305, /* capital A, ring */ 0303, /* capital A, tilde */ 0304, /* capital A, dieresis or umlaut mark */ 0307, /* capital C, cedilla */ 0320, /* capital Eth, Icelandic */ 0311, /* capital E, acute accent */ 0312, /* capital E, circumflex accent */ 0310, /* capital E, grave accent */ 0313, /* capital E, dieresis or umlaut mark */ 0315, /* capital I, acute accent */ 0316, /* capital I, circumflex accent */ 0314, /* capital I, grave accent */ 0317, /* capital I, dieresis or umlaut mark */ 0321, /* capital N, tilde */ 0323, /* capital O, acute accent */ 0324, /* capital O, circumflex accent */ 0322, /* capital O, grave accent */ 0330, /* capital O, slash */ 0325, /* capital O, tilde */ 0326, /* capital O, dieresis or umlaut mark */ 0336, /* capital THORN, Icelandic */ 0332, /* capital U, acute accent */ 0333, /* capital U, circumflex accent */ 0331, /* capital U, grave accent */ 0334, /* capital U, dieresis or umlaut mark */ 0335, /* capital Y, acute accent */ 0341, /* small a, acute accent */ 0342, /* small a, circumflex accent */ 0346, /* small ae diphthong (ligature) */ 0340, /* small a, grave accent */ 0046, /* ampersand */ 0345, /* small a, ring */ 0343, /* small a, tilde */ 0344, /* small a, dieresis or umlaut mark */ 0347, /* small c, cedilla */ 0351, /* small e, acute accent */ 0352, /* small e, circumflex accent */ 0350, /* small e, grave accent */ 0360, /* small eth, Icelandic */ 0353, /* small e, dieresis or umlaut mark */ 0076, /* greater than */ 0355, /* small i, acute accent */ 0356, /* small i, circumflex accent */ 0354, /* small i, grave accent */ 0357, /* small i, dieresis or umlaut mark */ 0074, /* less than */ 0361, /* small n, tilde */ 0363, /* small o, acute accent */ 0364, /* small o, circumflex accent */ 0362, /* small o, grave accent */ 0370, /* small o, slash */ 0365, /* small o, tilde */ 0366, /* small o, dieresis or umlaut mark */ 0337, /* small sharp s, German (sz ligature) */ 0376, /* small thorn, Icelandic */ 0372, /* small u, acute accent */ 0373, /* small u, circumflex accent */ 0371, /* small u, grave accent */ 0374, /* small u, dieresis or umlaut mark */ 0375, /* small y, acute accent */ 0377, /* small y, dieresis or umlaut mark */ }; #define SGML_ENTITIES 65 /* Private functions */ static void create_gcs(); static void selectt(); static void cursor(); static void activate(); static Widget add_to_text(); static void set_tag(); static void calc_new_size (); static void show_selection(); static void lowcase(); static void SelectWord(); static void SelectLine(); static void SelectRegion(); static void SelectAll(); static void SelectStart(); static void SelectExtend(); static void SelectEnd(); static Boolean Convert(); static void LoseOwnership(); static void SelectionDone(); static Boolean GetSelection(); static void _OwnSelection(); static int NumberOfClasses = 0; static WidgetClass *ClassList = NULL; static XrmName NullQuark; /* Widget class methods */ static void DeleteChild(); static void InsertChild(); static void ClassInitialize(); static void Initialize(); static void Redisplay(); static void Resize(); static void Destroy(); static Boolean SetValues(); static XtGeometryResult GeometryManager(); static XrmName dl_quark; static XrmName dlc_quark; static char defaultTranslations[] = "!: selectstart() \n\ !: selectextend() \n\ !: selectend(PRIMARY, CUT_BUFFER0) \n\ !Ctrl : selectall(PRIMARY, CUT_BUFFER0) \n\ :cursor() "; static XtActionsRec actionsList[] = { { "selectstart", (XtActionProc) SelectStart}, { "selectextend", (XtActionProc) SelectExtend}, { "selectend", (XtActionProc) SelectEnd}, { "selectall", (XtActionProc) SelectAll}, { "cursor", (XtActionProc) cursor}, }; #define Offset(field) XtOffsetOf(SGMLHyperRec, sgml_hyper.field) static XtResource resources[] = { {SGMLNactivateCallback,SGMLCCallback,XtRCallback,sizeof(caddr_t), Offset (activate),XtRCallback,NULL}, {SGMLNcaseSensitiveTags,SGMLCCaseSensitiveTags,XtRBoolean,sizeof(Boolean), Offset (case_sensitive_tags),XtRImmediate,(XtPointer)FALSE}, {SGMLNcacheSize,SGMLCCacheSize,XtRInt,sizeof(int), Offset (cache_size),XtRImmediate,(XtPointer)0}, {SGMLNopenTag,SGMLCTagChar,XtRUnsignedChar,sizeof(unsigned char), Offset(open_tag),XtRImmediate,(XtPointer)'<'}, {SGMLNcloseTag,SGMLCTagChar,XtRUnsignedChar,sizeof(unsigned char), Offset(close_tag),XtRImmediate,(XtPointer)'>'}, {SGMLNendTag,SGMLCTagChar,XtRUnsignedChar,sizeof(unsigned char), Offset(end_tag),XtRImmediate,(XtPointer)'/'}, {SGMLNparameterTag,SGMLCTagChar,XtRUnsignedChar,sizeof(unsigned char), Offset(parameter_tag),XtRImmediate,(XtPointer)' '}, {SGMLNentityTag,SGMLCTagChar,XtRUnsignedChar,sizeof(unsigned char), Offset(entity_tag),XtRImmediate,(XtPointer)'&'}, {SGMLNentityEndTag,SGMLCTagChar,XtRUnsignedChar,sizeof(unsigned char), Offset(entity_end_tag),XtRImmediate,(XtPointer)';'}, {SGMLNmargin,SGMLCMargin,XtRDimension,sizeof(Dimension), Offset (margin),XtRImmediate,(XtPointer)10}, {SGMLNnaturalWidth,SGMLCWidth,XtRDimension,sizeof(Dimension), Offset (natural_width),XtRImmediate,(XtPointer)500}, }; #undef Offset /* stack pointer */ static int sp = 0; /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ static CompositeClassExtensionRec compositeExtension = { NULL, /* next_extension */ NULLQUARK, /* record_type */ XtCompositeExtensionVersion, /* version */ sizeof(CompositeClassExtensionRec), /* record_size */ TRUE /* accepts_objects */ }; SGMLHyperClassRec sGMLHyperClassRec = { { #ifdef MOTIF (WidgetClass) &xmManagerClassRec, /* superclass */ #else (WidgetClass) &compositeClassRec, /* superclass */ #endif "SGMLHyper", /* class_name */ sizeof(SGMLHyperRec), /* widget_size */ ClassInitialize, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ XtInheritRealize, /* realize */ actionsList, /* actions */ XtNumber(actionsList), /* num_actions */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ TRUE, /* compress_motion */ TRUE, /* compress_exposure */ TRUE, /* compress_enterleave */ TRUE, /* visible_interest */ Destroy, /* destroy */ Resize, /* resize */ Redisplay, /* expose */ SetValues, /* set_values */ NULL, /* set_values_hook */ XtInheritSetValuesAlmost, /* set_values_almost */ NULL, /* get_values_hook */ NULL, /* accept_focus */ XtVersion, /* version */ NULL, /* callback private */ defaultTranslations, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ }, { GeometryManager, /* geometry manager */ NULL, /* change_managed */ InsertChild, /* insert_child */ DeleteChild, /* delete_child */ (XtPointer) &compositeExtension /* extension */ }, #ifdef MOTIF { /* constraint_class fields */ NULL, /* resource list */ 0, /* num resources */ 0, /* constraint size */ NULL, /* init proc */ NULL, /* destroy proc */ NULL, /* set values proc */ NULL, /* extension */ }, { XtInheritTranslations, /* translations */ NULL, /* syn_resources */ 0, /* num_syn_resources */ NULL, /* syn_constraint_resources */ 0, /* num_syn_constraint_resources */ NULL, /* parent_process */ NULL, /* extension */ }, #endif { 0, /* ignore */ } }; static int EntityToIsoLatin1(entity) char *entity; { int high, low, i, diff; for (low = 0, high = SGML_ENTITIES ; high > low ; diff < 0 ? (low = i+1) : (high = i)) /* Binary search */ { i = (low + (high-low)/2); diff = strcmp(entities[i], entity); /* Case sensitive! */ if (diff==0) { /* success: found it */ return ISO_Latin1[i]; } } return '\0'; } static Boolean IsSubClass(sub,class) WidgetClass sub, class; { for (; sub != NULL; sub = sub->core_class.superclass) if (sub == class) return TRUE; return FALSE; } WidgetClass sGMLHyperWidgetClass = (WidgetClass) &sGMLHyperClassRec; static void CvtStringToClass (args, num_args, fromVal, toVal) XrmValuePtr args; Cardinal *num_args; XrmValuePtr fromVal; XrmValuePtr toVal; { char *s; int p; if (*num_args != 0) XtWarningMsg("wrongParameters","cvtStringToClass","XtToolkitError", "String to Class conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); s = (char *) fromVal->addr; for (p=0; pcore_class.class_name)) { toVal->size = sizeof(WidgetClass); toVal->addr = (XtPointer) &ClassList[p]; return; } XtStringConversionWarning((char *) fromVal->addr, SGMLRClass); } static void CvtStringToTagList (args, num_args, fromVal, toVal) XrmValuePtr args; Cardinal *num_args; XrmValuePtr fromVal; XrmValuePtr toVal; { int polarity; char *s, *t, *p; WidgetClass current_class = NULL; Cardinal num_slots = 10; Cardinal num_used = 0; static SGMLTagList *list; list = (SGMLTagList *) XtMalloc(sizeof(SGMLTagList) * num_slots); if (*num_args != 0) XtWarningMsg("wrongParameters","cvtStringToTagList","XtToolkitError", "String to Tag List conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); s = XtNewString((char *) fromVal->addr); t = strtok(s," \t"); if (t && !strcmp(t,"*")) { polarity = 1; t = strtok(NULL," \t"); } else polarity = 0; for (; t != NULL; t = strtok(NULL," \t")) { if ((p = strchr(t,':')) == NULL) { XrmName tag; int sign = 1, match = 1; if (*t == '+') { sign = 1; t++; } else if (*t == '-') { sign = -1; t++; } if (*t == '%') { match = 0; t++; } tag = XrmStringToQuark(t); if (num_used == num_slots) list = (SGMLTagList *) XtRealloc((XtPointer) list, sizeof(SGMLTagList) * (num_slots *= 2)); list[num_used].name = tag; list[num_used].class = current_class; list[num_used].polarity = polarity * sign; list[num_used].matched = match; num_used++; } else { int i; *p = '\0'; current_class = NULL; for (i=0; icore_class.class_name)) current_class = ClassList[i]; if (current_class == NULL) XtStringConversionWarning(t, SGMLRClass); } } if (num_used == num_slots) list = (SGMLTagList *) XtRealloc((XtPointer) list, sizeof(SGMLTagList) * (++num_slots)); list[num_used].name = 0; list[num_used].class = NULL; list[num_used].polarity = 0; num_used++; toVal->addr = (XtPointer) &list; toVal->size = sizeof(XtPointer); XtFree(s); } static Boolean ConvertStringToString(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { int size = sizeof(from->addr); if (to->addr == 0) { to->addr = (XtPointer) &from->addr; to->size = size; return TRUE; } else if (to->size >= size) { memcpy(to->addr,&from->addr,size); to->size = size; return TRUE; } else { to->size = size; return FALSE; } } /*--------------------------------------------------------------*/ /* ClassInitialize: Register the standard text classes */ /*--------------------------------------------------------------*/ static void ClassInitialize() { XtAddConverter (XtRString, SGMLRTagList, CvtStringToTagList, (XtConvertArgList) NULL, (Cardinal) 0); XtAddConverter (XtRString, SGMLRClass, CvtStringToClass, (XtConvertArgList) NULL, (Cardinal) 0); /* * Intrinsics bug ... trys to convert STRING to STRING */ XtSetTypeConverter(XtRString,XtRString,ConvertStringToString, NULL,0,XtCacheNone,NULL); SGMLHyperDeclareClass(sGMLTextObjectClass); SGMLHyperDeclareClass(sGMLPlainTextObjectClass); SGMLHyperDeclareClass(sGMLFormattedTextObjectClass); SGMLHyperDeclareClass(sGMLFormTextObjectClass); SGMLHyperDeclareClass(sGMLAnchorTextObjectClass); SGMLHyperDeclareClass(sGMLMarkerTextObjectClass); SGMLHyperDeclareClass(sGMLRuleTextObjectClass); SGMLHyperDeclareClass(sGMLCompositeTextObjectClass); SGMLHyperDeclareClass(sGMLInputTextObjectClass); SGMLHyperDeclareClass(sGMLListTextObjectClass); SGMLHyperDeclareClass(sGMLCaptionTextObjectClass); SGMLHyperDeclareClass(sGMLTableTextObjectClass); NullQuark = XrmStringToQuark(NULL); dlc_quark = XrmStringToQuark("dl_compact"); dl_quark = XrmStringToQuark("dl"); } /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLHyperWidget request, new; { Arg arglist[10]; int n = 0; /* Check the size of the widget */ if (request->core.width == 0) new->core.width = 100; if (request->core.height == 0) new->core.height = 100; new->sgml_hyper.hand = XCreateFontCursor(XtDisplay(new),XC_hand2); new->sgml_hyper.grep_txt = NULL; new->sgml_hyper.grep_len = 0; new->sgml_hyper.grep_off = 0; new->sgml_hyper.managed = NULL; new->sgml_hyper.search_widget = NULL; new->sgml_hyper.sw_flag = NULL; new->sgml_hyper.contains = NULL; new->sgml_hyper.contain_slots = 0; new->sgml_hyper.contain_used = 0; new->sgml_hyper.last_time = CurrentTime; new->sgml_hyper.select_index = 0; new->sgml_hyper.copy_text = NULL; new->sgml_hyper.copy_info.last_x = 0; new->sgml_hyper.copy_info.last_y = 0; new->sgml_hyper.copy_info.first_char = NULL; new->sgml_hyper.copy_info.last_widget = NULL; new->sgml_hyper.copy_info.flag = 0; new->sgml_hyper.cache_list = NULL; new->sgml_hyper.cache_slots = 0; new->sgml_hyper.cache_used = 0; } /*--------------------------------------------------------------*/ /* Destroy the widget: release all memory allocated */ /*--------------------------------------------------------------*/ static void Destroy (w) SGMLHyperWidget w; { XtRemoveAllCallbacks ((Widget) w,SGMLNactivateCallback); XtFree((char *) w->sgml_hyper.cache_list); XFreeCursor(XtDisplay(w),w->sgml_hyper.hand); } /*--------------------------------------------------------------*/ /* DeleteChild : deal with the case where this is managed */ /*--------------------------------------------------------------*/ static void DeleteChild(w) Widget w; { int i; SGMLHyperWidget parent = (SGMLHyperWidget) XtParent(w); if (parent->sgml_hyper.managed == w) parent->sgml_hyper.managed = NULL; if (XtIsWidget(w)) { WidgetList contains = parent->sgml_hyper.contains; int i; int last = 2*parent->sgml_hyper.contain_used; for (i=0; i < last; i += 2) if (contains[i] == w) { contains[i] = contains[last-2]; contains[i+1] = contains[last-1]; parent->sgml_hyper.contain_used--; break; } } /* If the child was on the cache list we had better remove it */ for (i = 0 ; i < parent->sgml_hyper.cache_used ; i++) if (w == parent->sgml_hyper.cache_list[i]) { parent->sgml_hyper.cache_list[i] = parent->sgml_hyper.cache_list[--parent->sgml_hyper.cache_used]; } /* Invoke the superclass's delete_child method (see note under InsertChild below) */ (*compositeClassRec.composite_class.delete_child)(w); } /*--------------------------------------------------------------*/ /* InsertChild : Only accept SGMLTextObject as child */ /* (or any widget) */ /*--------------------------------------------------------------*/ static void InsertChild(w) Widget w; { String params[2]; Cardinal num_params; SGMLHyperWidget parent = (SGMLHyperWidget) XtParent(w); if (SGMLIsText(w)) { /* * We have added a new SGMLText child, so we need to think about * removing a cached child. For now we simply remove the oldest cached * widget */ int j , i = parent->sgml_hyper.cache_used; Widget *cache = parent->sgml_hyper.cache_list; for (; i > 0 && i >= parent->sgml_hyper.cache_size ; ) { /* Warning, delete child from cache list before calling destroy, to prevent DeleteChild * method from itself messing with the cache list */ Widget old = cache[0]; parent->sgml_hyper.cache_used = --i; for (j = 0 ; j < i ; j++) cache[j] = cache[j+1]; XtDestroyWidget(old); } /* Add new widget to end of cache list, making sure there is room */ if (i == parent->sgml_hyper.cache_slots) { parent->sgml_hyper.cache_slots += 10; parent->sgml_hyper.cache_list = cache = (WidgetList) XtRealloc((XtPointer) cache, (unsigned) parent->sgml_hyper.cache_slots * sizeof(Widget)); } cache[i++] = w; parent->sgml_hyper.cache_used = i; } else if (XtIsWidget(w)) { WidgetList contains = parent->sgml_hyper.contains; Widget container = NULL; /* needed in case w has no userdata resource */ int i = parent->composite.num_children; Widget curr; Arg arglist[10]; int n=0; XtSetArg(arglist[n],XmNuserData,&container); n++; XtGetValues(w,arglist,n); n = 0; if (!container) { for (;curr = parent->composite.children[--i];) if (SGMLIsCompositeText(curr)) break;/* bug */ XtSetArg(arglist[n],SGMLNchild,w); n++; container = XtCreateWidget("container",sGMLContainerTextObjectClass,curr,arglist,n); SGMLCompositeTextInsertChild(container); } if (parent->sgml_hyper.contain_used == parent->sgml_hyper.contain_slots) { parent->sgml_hyper.contain_slots += 10; parent->sgml_hyper.contains = contains = (WidgetList) XtRealloc((XtPointer) contains, (unsigned) parent->sgml_hyper.contain_slots * sizeof(Widget) * 2); } contains += 2*( parent->sgml_hyper.contain_used++ ); contains[0] = w; contains[1] = container; } else { params[0] = XtClass(w)->core_class.class_name; params[1] = XtClass(parent)->core_class.class_name; num_params = 2; XtAppErrorMsg(XtWidgetToApplicationContext(w), "childError","class","WidgetError", "Children of class %s cannot be added to %s widgets", params, &num_params); } /* Invoke the superclass's insert_child method NB Actually we skip out superclasses insert_child since the Motif widgets treat non-widget children in some incompatible way... instead we go straight to the composite widget's insert_child method, but will this cause problems with XmManager functionality? */ (*compositeClassRec.composite_class.insert_child)(w); } /*--------------------------------------------------------------*/ /* Resize : not implemented */ /*--------------------------------------------------------------*/ static void Resize (w) SGMLHyperWidget w; { } /*--------------------------------------------------------------*/ /* GeometryManager: */ /* Only real widgets can make geometry requests, so pass the */ /* request on to the corresponding container widget */ /*--------------------------------------------------------------*/ static XtGeometryResult GeometryManager(w,desired,allowed) Widget w; XtWidgetGeometry *desired, *allowed; { SGMLHyperWidget parent = (SGMLHyperWidget) XtParent(w); WidgetList contains = parent->sgml_hyper.contains; int i; int last = 2*parent->sgml_hyper.contain_used; for (i=0; i < last; i += 2) if (contains[i] == w) { Widget container = contains[i+1]; SGMLContainerTextObjectClass class = (SGMLContainerTextObjectClass) XtClass(container); return (*class->sgml_container_text_class.geometry_manager)(container,desired,allowed); } return XtGeometryNo; } /*--------------------------------------------------------------*/ /* Redisplay : redraw the text */ /*--------------------------------------------------------------*/ static void Redisplay (w, event, region) SGMLHyperWidget w; XEvent *event; Region region; { if(w->core.visible && w->sgml_hyper.managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(w->sgml_hyper.managed); (*childClass->sgml_text_class.expose)(w->sgml_hyper.managed,event,region,0); } } /*------------------------------------------------------------------*/ /* SetValues : redraw only for font or color changes */ /*------------------------------------------------------------------*/ static Boolean SetValues (current, request, new) SGMLHyperWidget current, request, new; { Boolean redraw = FALSE; #define HAS_CHANGED(a) (new->a != current->a) if( HAS_CHANGED(sgml_hyper.natural_width) ) { /* invalidate size of all text widget children */ int n = new->composite.num_children; SGMLTextObject *children = (SGMLTextObject *) new->composite.children; for (; n-- > 0; children++) if (SGMLIsText( (Widget) *children)) (*children)->sgml_text.size_valid = FALSE; /* rebuild text */ calc_new_size(new); redraw = TRUE; } return (redraw); #undef HAS_CHANGED } /*------------------------------------------------------------------*/ /* Adjust the size of a child */ /*------------------------------------------------------------------*/ static void adjust_size(child,y,ascent,descent) Widget child; Position y; Dimension ascent, descent; { } /*------------------------------------------------------------------*/ /* Calculate the size of the widget */ /*------------------------------------------------------------------*/ static void calc_new_size(w) SGMLHyperWidget w; { XtGeometryResult result; SGMLDimension width=0, height=0; SGMLGeometry geom; Dimension requestWidth, requestHeight; geom.coord.x = 0; geom.coord.y = w->sgml_hyper.margin; geom.coord.descent = 0; geom.coord.ascent = 0; geom.broken = TRUE; geom.leave_space = FALSE; geom.space = 99999; geom.actual_width = 2 * w->sgml_hyper.margin; geom.natural_width = w->sgml_hyper.natural_width; /* Loop over all of the text segments, getting each to tell us how much space it needs */ if (w->sgml_hyper.managed) { SGMLTextObject t = (SGMLTextObject) w->sgml_hyper.managed; if (t->sgml_text.size_valid) { width = t->sgml_text.width; height = geom.coord.y + t->sgml_text.height; } else { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass((Widget) t); (*childClass->sgml_text_class.compute_size)(t,&geom,adjust_size,w->sgml_hyper.managed); t->sgml_text.size_valid = TRUE; width = geom.actual_width; height = geom.coord.y + geom.coord.descent + geom.coord.ascent; } } width += w->sgml_hyper.margin; height += w->sgml_hyper.margin; /* Tell our parent we want a new size */ requestWidth = width > 32767 ? 32767 : width; requestHeight = height > 32767 ? 32767 : height; /* Temporarily until something better comes along */ if (requestHeight != height) MidasQueueCommand(w,"Popup .^^^WWWMain###WWWTruncate"); if(w->core.width != width || w->core.height != height) { Dimension replyWidth = 0, replyHeight = 0; result = XtMakeResizeRequest((Widget) w,requestWidth,requestHeight, &replyWidth, &replyHeight) ; if (result == XtGeometryAlmost) XtMakeResizeRequest ((Widget) w, replyWidth, replyHeight,NULL, NULL); } /* Redraw the window */ if (XtIsRealized((Widget) w)) XClearArea(XtDisplay((Widget)w),XtWindow((Widget)w),0,0,0,0,True); } /*-----------------------------------------------------------------------*/ /* Find the "visible" part of a widget as the intersection of all the */ /* windows of it's parents' windows */ /*-----------------------------------------------------------------------*/ static void find_visible_part(w,x,y,width,height) Widget w; Position *x; Position *y; Dimension *width; Dimension *height; { Position root_x,root_y; Widget p = w; *width = w->core.width; *height = w->core.height; XtTranslateCoords(w,0,0,&root_x,&root_y); *x = 0; *y = 0; while(p = XtParent(p)) { Position rx,ry; Dimension w,h; /* make all computations in the root's coordinate system */ XtTranslateCoords(p,0,0,&rx,&ry); w = p->core.width; h = p->core.height; /* use the smallest rectangle */ if(w < *width) *width = w; if(h < *height) *height = h; if(rx>root_x) root_x = rx; if(ry>root_y) root_y = ry; /* stop when reach a shell, don't go to top level shell */ if(XtIsShell(p)) break; } /* Back to the widget's coordinate system */ XtTranslateCoords(w,0,0,x,y); *x = root_x - *x; *y = root_y - *y; } /*----------------------------------------------------------------------*/ /* Find the Widget (Gadget) at point (x,y) */ /*----------------------------------------------------------------------*/ SGMLTextObject find_segment(w,x,y,mode) SGMLHyperWidget w; int x,y; Boolean mode; { if (w->sgml_hyper.managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(w->sgml_hyper.managed); Widget result = (*childClass->sgml_text_class.contains)(w->sgml_hyper.managed,x,y,mode); return (SGMLTextObject) result; } return NULL; } /*-----------------------------------------------------------------------*/ /* Check for mouse down */ /*-----------------------------------------------------------------------*/ /* This function is never used and is replaced by SelectStart */ static void selectt (w, event, args, n_args) SGMLHyperWidget w; XEvent *event; char *args[]; int n_args; { /* Find if the user clicked in a (sensitive) text object */ SGMLTextObject s = find_segment(w,event->xbutton.x,event->xbutton.y,FALSE); w->sgml_hyper.last_selected = s; if (s != NULL) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass((Widget) s); (*childClass->sgml_text_class.hilite)(s,SGMLSELECT_WIDGET); } } /*-----------------------------------------------------------------------*/ /* Check for mouse up */ /*-----------------------------------------------------------------------*/ /* This function is never used and is replaced by SelectEnd */ static void activate (w, event, args, n_args) SGMLHyperWidget w; XEvent *event; char *args[]; int n_args; { SGMLTextObject s = find_segment(w,event->xbutton.x,event->xbutton.y,FALSE); /* Find if the user clicked in a highlighted text */ if(s != NULL && s == w->sgml_hyper.last_selected) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass((Widget) s); (*childClass->sgml_text_class.hilite)(s,SGMLSELECT_WIDGET); (*childClass->sgml_text_class.activate)(s,event); } w->sgml_hyper.last_selected = NULL; } /*-----------------------------------------------------------------------*/ /* Check for mouse moves */ /*-----------------------------------------------------------------------*/ static void cursor (w, event, args, n_args) SGMLHyperWidget w; XEvent *event; char *args[]; int n_args; { SGMLTextObject s = find_segment(w,event->xbutton.x,event->xbutton.y,FALSE); SGMLTextObject l = w->sgml_hyper.last_selected; if(s != w->sgml_hyper.last_cursor) { if ( l != NULL && (s == l || l == w->sgml_hyper.last_cursor)) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass((Widget) l); (*childClass->sgml_text_class.hilite)(l,SGMLSELECT_WIDGET); } if(s) XDefineCursor(XtDisplay(w),XtWindow(w),w->sgml_hyper.hand); else XUndefineCursor(XtDisplay(w),XtWindow(w)); w->sgml_hyper.last_cursor = s; } } /*-----------------------------------------------------------------------*/ /* select a word by double clicks */ /*-----------------------------------------------------------------------*/ static void SelectWord (w, event) SGMLHyperWidget w; XEvent *event; { Widget selection; int x = event->xbutton.x; int y = event->xbutton.y; char *pos = NULL; SGMLTextObject s = find_segment(w,event->xbutton.x,event->xbutton.y,TRUE); /* No other widgets except text widgets ONLY are allowed */ if (!s || !s->sgml_text.text || *(s->sgml_text.text) == '\0') return; /* race condition with motion? */ if (w->sgml_hyper.race) return; else w->sgml_hyper.race = TRUE; if(s != NULL) { SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget) s); w->sgml_hyper.copy_info.current_x = x; w->sgml_hyper.copy_info.current_y = y; w->sgml_hyper.copy_info.current_widget = (Widget)s; selection = (*class->sgml_text_class.hilite_selection)(s,SGMLSELECT_WORD,&w->sgml_hyper.copy_info); } } /*-----------------------------------------------------------------------*/ /* select a line by triple clicks */ /*-----------------------------------------------------------------------*/ static void SelectLine (w, event) SGMLHyperWidget w; XEvent *event; { Widget selection; int x = event->xbutton.x; int y = event->xbutton.y; char *pos = NULL; SGMLTextObject lasts = NULL; SGMLTextObject s = find_segment(w,event->xbutton.x,event->xbutton.y,TRUE); /* No other widgets except text widgets ONLY are allowed */ if (s == NULL || s->sgml_text.text == NULL || *(s->sgml_text.text) == '\0') return; /* race condition with motion? */ if (w->sgml_hyper.race) return; else w->sgml_hyper.race = TRUE; if(s != NULL) { SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget) s); for (x=10;x < w->core.width; x += 10) { s = find_segment(w,x,y,TRUE); if (s == lasts || s == NULL) continue; /* No other widgets except text widgets ONLY are allowed */ if (s->sgml_text.text == NULL || *(s->sgml_text.text) == '\0') continue; w->sgml_hyper.copy_info.current_x = x; w->sgml_hyper.copy_info.current_y = y; w->sgml_hyper.copy_info.current_widget = (Widget) s; selection = (*class->sgml_text_class.hilite_selection)(s,SGMLSELECT_LINE,&w->sgml_hyper.copy_info); lasts = s; } if (selection) { w->sgml_hyper.copy_info.sw_flag = TRUE; w->sgml_hyper.copy_info.last_widget = selection; w->sgml_hyper.copy_info.last_mode = FALSE; } } } /*-----------------------------------------------------------------------*/ /* select whole document by Ctrl-click */ /*-----------------------------------------------------------------------*/ static void SelectAll (w, event, args, n_args) SGMLHyperWidget w; XEvent *event; String *args; Cardinal *n_args; { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(w->sgml_hyper.managed); Widget selection; w->sgml_hyper.selection_time = event->xbutton.time; if (w->sgml_hyper.search_widget || w->sgml_hyper.sw_flag) { (*childClass->sgml_text_class.clear_select)(w->sgml_hyper.managed,w->sgml_hyper.sw_flag,TRUE); w->sgml_hyper.search_widget = NULL; w->sgml_hyper.sw_flag = NULL; } w->sgml_hyper.copy_info.sw_flag = FALSE; w->sgml_hyper.copy_info.last_widget = NULL; selection = (*childClass->sgml_text_class.hilite_selection)(w->sgml_hyper.managed,SGMLSELECT_ALL,&w->sgml_hyper.copy_info); if (w->sgml_hyper.copy_text) { XtFree(w->sgml_hyper.copy_text); w->sgml_hyper.copy_text = NULL; } if (w->sgml_hyper.copy_info.sw_flag) { w->sgml_hyper.search_widget = w->sgml_hyper.copy_info.last_widget; w->sgml_hyper.sw_flag = w->sgml_hyper.search_widget; } _OwnSelection(w, event, args, n_args); } /*-----------------------------------------------------------------------*/ /* select a region of text by button + motion */ /*-----------------------------------------------------------------------*/ static void SelectRegion(w,event) SGMLHyperWidget w; XEvent *event; { SGMLTextObject s = find_segment(w,event->xbutton.x,event->xbutton.y,TRUE); if(s != NULL) { Widget selection; int x = event->xbutton.x; int y = event->xbutton.y; char *pos; SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget) s); /* No other widgets except text widgets ONLY are allowed */ if (s->sgml_text.text == NULL || *(s->sgml_text.text) == '\0') return; (*class->sgml_text_class.xy_to_pos)(s,&x,&y,&pos); w->sgml_hyper.copy_info.current_widget = (Widget)s; w->sgml_hyper.copy_info.last_widget = (Widget) s; w->sgml_hyper.copy_info.first_char = pos; w->sgml_hyper.copy_info.first_x = x; w->sgml_hyper.copy_info.first_y = y; w->sgml_hyper.copy_info.current_x = x; w->sgml_hyper.copy_info.current_y = y; w->sgml_hyper.copy_info.last_x = x; w->sgml_hyper.copy_info.last_y = y; w->sgml_hyper.copy_info.flag = FALSE; w->sgml_hyper.copy_info.sw_flag = FALSE; w->sgml_hyper.copy_info.first_widget = (Widget)s; w->sgml_hyper.copy_info.current_mode = FALSE; w->sgml_hyper.copy_info.last_mode = FALSE; w->sgml_hyper.copy_info.cw = w->sgml_hyper.managed; } else w->sgml_hyper.select_start = FALSE; } /*-----------------------------------------------------------------------*/ /* Selection start */ /*-----------------------------------------------------------------------*/ static void SelectStart (w, event, args, n_args) SGMLHyperWidget w; XEvent *event; String *args; Cardinal *n_args; { Time mct = XtGetMultiClickTime(XtDisplay(w)); Time sel_time = event->xbutton.time; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(w->sgml_hyper.managed); SGMLTextObject s = find_segment(w,event->xbutton.x,event->xbutton.y,FALSE); /* clear the selection whenever button click */ if (w->sgml_hyper.search_widget || w->sgml_hyper.sw_flag) { (*childClass->sgml_text_class.clear_select)(w->sgml_hyper.managed,w->sgml_hyper.sw_flag,TRUE); w->sgml_hyper.search_widget = NULL; w->sgml_hyper.sw_flag = NULL; } if (w->sgml_hyper.copy_text) { XtFree(w->sgml_hyper.copy_text); w->sgml_hyper.copy_text = NULL; } w->sgml_hyper.last_selected = s; if (s != NULL) { SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget) s); (*class->sgml_text_class.hilite)(s,SGMLSELECT_WIDGET); w->sgml_hyper.select_start = FALSE; return; } w->sgml_hyper.select_start = TRUE; if (sel_time > w->sgml_hyper.last_time && sel_time - w->sgml_hyper.last_time < mct) { if (w->sgml_hyper.select_index < SGMLSELECT_LINE) w->sgml_hyper.select_index++; else w->sgml_hyper.select_index = SGMLSELECT_REGION; } else w->sgml_hyper.select_index = SGMLSELECT_REGION; w->sgml_hyper.last_time = sel_time; if (w->sgml_hyper.select_index) { w->sgml_hyper.race = FALSE; if (w->sgml_hyper.select_index == SGMLSELECT_WORD) SelectWord(w,event); else if (w->sgml_hyper.select_index == SGMLSELECT_LINE) SelectLine(w,event); else SelectRegion(w,event); } } /*-----------------------------------------------------------------------*/ /* Selection extend */ /*-----------------------------------------------------------------------*/ static void SelectExtend (w, event, args, n_args) SGMLHyperWidget w; XEvent *event; String *args; Cardinal *n_args; { Widget selection; int x = event->xbutton.x; int y = event->xbutton.y; char *pos = NULL; SGMLTextObject s = find_segment(w,event->xbutton.x,event->xbutton.y,TRUE); SGMLTextObject ss = find_segment(w,event->xbutton.x,event->xbutton.y,FALSE); SGMLTextObject l = w->sgml_hyper.last_selected; if (ss != w->sgml_hyper.last_cursor) { if ( l != NULL && (s == l || l == w->sgml_hyper.last_cursor)) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass((Widget) l); (*childClass->sgml_text_class.hilite)(l,SGMLSELECT_WIDGET); } if (ss) XDefineCursor(XtDisplay(w),XtWindow(w),w->sgml_hyper.hand); else XUndefineCursor(XtDisplay(w),XtWindow(w)); w->sgml_hyper.last_cursor = ss; } if (!w->sgml_hyper.select_start) return; /* race condition with button down? */ if (w->sgml_hyper.race) return; if (w->sgml_hyper.select_index != SGMLSELECT_REGION && w->sgml_hyper.copy_info.last_widget == NULL ) return; if (s != NULL) { SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget) s); SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(w->sgml_hyper.managed); SGMLTextObject last_widget = (SGMLTextObject)w->sgml_hyper.copy_info.last_widget; /* No other widgets except text widgets ONLY are allowed */ if (s->sgml_text.text == NULL || *(s->sgml_text.text) == '\0') return; (*class->sgml_text_class.xy_to_pos)(s,&x,&y,&pos); w->sgml_hyper.copy_info.current_x = x; w->sgml_hyper.copy_info.current_y = y; w->sgml_hyper.copy_info.current_widget = (Widget)s; if ((w->sgml_hyper.copy_info.current_x == w->sgml_hyper.copy_info.last_x && w->sgml_hyper.copy_info.current_y == w->sgml_hyper.copy_info.current_y) || w->sgml_hyper.copy_info.last_pos == pos ) return; w->sgml_hyper.copy_info.last_pos = pos; if (s == last_widget) selection = (*class->sgml_text_class.hilite_selection)(s,SGMLSELECT_REGION,&w->sgml_hyper.copy_info); else selection = (*childClass->sgml_text_class.hilite_selection)(w->sgml_hyper.managed,SGMLSELECT_REGION,&w->sgml_hyper.copy_info); w->sgml_hyper.copy_info.last_mode = w->sgml_hyper.copy_info.current_mode; w->sgml_hyper.copy_info.last_widget = w->sgml_hyper.copy_info.current_widget; w->sgml_hyper.copy_info.last_x = w->sgml_hyper.copy_info.current_x; w->sgml_hyper.copy_info.last_y = w->sgml_hyper.copy_info.current_y; } } /*-----------------------------------------------------------------------*/ /* Selection end */ /*-----------------------------------------------------------------------*/ static void SelectEnd (w, event, args, n_args) SGMLHyperWidget w; XEvent *event; String *args; Cardinal *n_args; { SGMLTextObject s = find_segment(w,event->xbutton.x,event->xbutton.y,FALSE); if(s != NULL && s == w->sgml_hyper.last_selected) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass((Widget) s); (*childClass->sgml_text_class.hilite)(s,SGMLSELECT_WIDGET); (*childClass->sgml_text_class.activate)(s,event); w->sgml_hyper.last_selected = NULL; return; } w->sgml_hyper.last_selected = NULL; if (!w->sgml_hyper.search_widget && !w->sgml_hyper.sw_flag) { Boolean sw = w->sgml_hyper.copy_info.sw_flag; if (sw) { if (w->sgml_hyper.copy_info.last_mode) w->sgml_hyper.search_widget = w->sgml_hyper.copy_info.first_widget; else w->sgml_hyper.search_widget = w->sgml_hyper.copy_info.last_widget; w->sgml_hyper.sw_flag = w->sgml_hyper.search_widget; if (w->sgml_hyper.copy_text) { XtFree(w->sgml_hyper.copy_text); w->sgml_hyper.copy_text = NULL; } } w->sgml_hyper.selection_time = event->xbutton.time; if (w->sgml_hyper.search_widget) _OwnSelection(w,event,args,n_args); } } static void _OwnSelection(w, event, args, n_args) SGMLHyperWidget w; XEvent *event; String *args; Cardinal *n_args; { int i, buffer; Atom *atoms; atoms = (Atom *)malloc(*n_args * sizeof(Atom)); if (atoms == NULL) { fprintf(stderr, "cannot allocate atom list\n"); return; } XmuInternStrings(XtDisplay((Widget)w), args, *n_args, atoms); w->sgml_hyper.selection_time = event->xbutton.time; for (i=0; i< *n_args; i++) { switch (atoms[i]) { case XA_CUT_BUFFER0: buffer = 0; break; case XA_CUT_BUFFER1: buffer = 1; break; case XA_CUT_BUFFER2: buffer = 2; break; case XA_CUT_BUFFER3: buffer = 3; break; case XA_CUT_BUFFER4: buffer = 4; break; case XA_CUT_BUFFER5: buffer = 5; break; case XA_CUT_BUFFER6: buffer = 6; break; case XA_CUT_BUFFER7: buffer = 7; break; default: buffer = -1; break; } if (buffer >= 0) { if (GetSelection(w,SGMLDUMP_ASCII)) XStoreBuffer(XtDisplay((Widget)w), w->sgml_hyper.copy_text, strlen(w->sgml_hyper.copy_text), buffer); } else { Boolean result = XtOwnSelection((Widget)w, atoms[i], event->xbutton.time,Convert, LoseOwnership,SelectionDone); if (!result) printf ("Warning: Fail to become selection owner\n"); } } free ((char *)atoms); } /*-----------------------------------------------------------------------*/ /* Add text to a text segment */ /*-----------------------------------------------------------------------*/ static Widget add_to_text(name,parent,class,text,param,matched) Widget parent; SGMLTextObjectClass class; char *text, *param, *name; int matched; { Widget new; /* * Scan the param string looking for possible parameters (maximum 5 at present) */ if (param && *param) { char *copy; char *Type[5]; char *Res[5]; char *Val[5]; int Len[5]; char *whiteSpace = " \t\n\r"; char *whiteSpaceOrEqual = " \t=\n\r"; int i, l; char *p, *q, *r; copy = XtNewString(param); r = copy; for (i=0; i<5; ) { Boolean done, equal; p = r + strspn(r,whiteSpace); /* skip leading whitespace */ if (*p=='\0') break; q = p + strcspn(p,whiteSpaceOrEqual); /* Skip until white or equal */ r = q + strspn(q,whiteSpace); /* Skip any whitespace */ done = (*r == '\0'); equal = (*r == '=' ); *q = '\0'; if (*p != '"') lowcase(p); else { p++; if (*(q-1)=='"') *(q-1) = '\0'; } /* * For security reasons we mustn't let any Callbacks * be set using tag parameters */ if (strstr(p,"Callback")) continue; Type[i] = XtVaTypedArg; Res[i] = p; if (equal) { r++; r += strspn(r,whiteSpace); if (*r == '"') { r++; l = strcspn(r,"\""); } else { l = strcspn(r,whiteSpace); } p = r + l; done = (*p == '\0'); if (!done) *p = '\0'; Val[i] = r; Len[i] = l + 1; r = p + 1; i++; } else { Val[i] = "TRUE"; Len[i] = 5; i++; } if (done) break; } if (i < 5) Type[i] = NULL; new = XtVaCreateWidget(name,(WidgetClass) class,parent, SGMLNtext, (XtArgVal) text, SGMLNparam, (XtArgVal) param, SGMLNmatched, (XtArgVal) matched, Type[0], Res[0], XtRString, Val[0], Len[0], Type[1], Res[1], XtRString, Val[1], Len[1], Type[2], Res[2], XtRString, Val[2], Len[2], Type[3], Res[3], XtRString, Val[3], Len[3], Type[4], Res[4], XtRString, Val[4], Len[4], NULL); XtFree(copy); } else { Arg arglist[10]; int n=0; XtSetArg(arglist[n],SGMLNtext , (XtArgVal) text ); n++; XtSetArg(arglist[n],SGMLNparam, (XtArgVal) param ); n++; XtSetArg(arglist[n],SGMLNmatched, (XtArgVal) matched); n++; new = XtCreateWidget(name,(WidgetClass) class, parent, arglist, n); } if (SGMLIsCompositeText(parent)) SGMLCompositeTextInsertChild(new); /* * Invoke the CreateCallback */ (*class->sgml_text_class.call_create_callback)(new,NULL); return new; } /*-----------------------------------------------------------------------*/ /* check a tag: returns TRUE if tag accepted */ /* FALSE if tag rejected */ /* if the tag is accepted then NewClass gives its type (or null if it */ /* was a terminator) */ /*-----------------------------------------------------------------------*/ static Boolean check_tag(w,intag,Text,Name,NewClass,tagQuark,exactTerminator,matched) SGMLHyperWidget w; char *intag; XrmName Name; Widget Text; WidgetClass *NewClass; XrmName *tagQuark; Boolean exactTerminator; int *matched; { char *tag = XtNewString(intag); char *oldtag = tag; char et = w->sgml_hyper.end_tag; Arg arglist[10]; int n = 0; int i; SGMLTagList *tagList; Boolean end = (*tag == et); if (end) tag++; *NewClass = NULL; if (!w->sgml_hyper.case_sensitive_tags) lowcase(tag); *tagQuark = XrmStringToQuark(tag); XtFree(oldtag); if (Name != NullQuark) if (end) return (!exactTerminator || *tagQuark == Name ); else return FALSE; if (end) { int d = 0; if (XtParent(Text) == (Widget) w) return FALSE; /* nothing to end */ if (!exactTerminator) return TRUE; for (; XtParent(Text) != (Widget) w ; Text = XtParent(Text)) { d++; if (*tagQuark == Text->core.xrm_name || /* dlc kludge */ (*tagQuark == dl_quark && dlc_quark == Text->core.xrm_name)) return TRUE; } return FALSE; } XtSetArg(arglist[n],SGMLNtagList,&tagList); n++; XtGetValues(Text,arglist,n); if (tagList) for (i=0; tagList[i].class != NULL; i++) if (tagList[i].name == *tagQuark) { *NewClass = tagList[i].class; *matched = tagList[i].matched; return TRUE; } return FALSE; } /*-----------------------------------------------------------------------*/ /* set a new tag: the tag must previously have been accepted by */ /* check tag */ /*-----------------------------------------------------------------------*/ static void set_tag(w,inoutText,inoutName,inoutClass,param,NewClass,tagQuark,matched) SGMLHyperWidget w; char *param; XrmName *inoutName; Widget *inoutText; WidgetClass *inoutClass; WidgetClass NewClass; XrmName tagQuark; int matched; { Widget text = *inoutText; XrmName name = *inoutName; /* temporary kludge to support dl compact */ if (tagQuark == dl_quark && param && strstr(param,"compact")) tagQuark = dlc_quark; if (name != NullQuark) { Arg arglist[10]; int n = 0; *inoutName = NullQuark; XtSetArg(arglist[n],SGMLNdefaultClass,inoutClass); n++; XtGetValues(text,arglist,n); return; } if (NewClass == NULL) { for (; tagQuark != text->core.xrm_name && (tagQuark != dl_quark || dlc_quark != text->core.xrm_name); text = XtParent(text)); text = XtParent(text); } else { if (!matched) { add_to_text(XrmQuarkToString(tagQuark),text,NewClass,NULL,param,matched); } else if (IsSubClass(NewClass,sGMLCompositeTextObjectClass)) { text = add_to_text(XrmQuarkToString(tagQuark),text,NewClass,NULL,param,matched); } else { *inoutName = tagQuark; *inoutClass = NewClass; } } if (text != *inoutText) { Arg arglist[10]; int n = 0; XtSetArg(arglist[n],SGMLNdefaultClass,inoutClass); n++; XtGetValues(text,arglist,n); } *inoutText = text; } /*-----------------------------------------------------------------------*/ /* Rebuild the text structure. Called when the font changes */ /*-----------------------------------------------------------------------*/ void SGMLHyperManageChild(w) Widget w; { SGMLHyperWidget parent = (SGMLHyperWidget) XtParent(w); SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass(w); Widget old = parent->sgml_hyper.managed; Widget sw = parent->sgml_hyper.sw_flag; int i; if (XtIsRealized((Widget) parent)) XUndefineCursor(XtDisplay((Widget) parent),XtWindow((Widget) parent)); /* In case cursor was set */ if (old == w) return; if (old) { SGMLTextObjectClass oldclass = (SGMLTextObjectClass) XtClass(old); (*oldclass->sgml_text_class.call_map_callback)(old,NULL,FALSE); if (sw) { (*oldclass->sgml_text_class.clear_select)(old,sw,FALSE); parent->sgml_hyper.sw_flag = NULL; if (parent->sgml_hyper.copy_text) { XtFree(parent->sgml_hyper.copy_text); parent->sgml_hyper.copy_text = NULL; } } } parent->sgml_hyper.managed = w; parent->sgml_hyper.search_widget = NULL; calc_new_size(parent); /* * Each time a widget is managed we put it back at the top of the cache * list, thus making it less likely to be removed from the cache as other * children are created */ for (i=0 ; i < parent->sgml_hyper.cache_used - 1; i++) if (w == parent->sgml_hyper.cache_list[i]) { Widget swap = parent->sgml_hyper.cache_list[parent->sgml_hyper.cache_used - 1] ; parent->sgml_hyper.cache_list[parent->sgml_hyper.cache_used - 1] = parent->sgml_hyper.cache_list[i]; parent->sgml_hyper.cache_list[i] = swap; } (*class->sgml_text_class.call_map_callback)(w,NULL,TRUE); } /*-----------------------------------------------------------------------*/ /* Build the text. Gets the chars from the funtion "get_next_char" */ /* using "data" as a parameter */ /*-----------------------------------------------------------------------*/ #define NORMAL 0 #define TAG 1 #define PARAM 2 #define ENTITY 4 #define PARAMILLEGAL 3 typedef struct { SGMLHyperWidget w; Widget parentText; Widget topText; char *word; char *saveParam; int mode; int tag; int param; int wordsize; int i; WidgetClass currentClass; WidgetClass NewClass; XrmName currentName; XrmName tagQuark; Boolean exactTerminator; Boolean supportsEntities; Boolean hideIllegalTags; int matched; Arg arglist[10]; int n; } ParseState; static ParseState *CreateState(inW) Widget inW; { ParseState *state = XtNew(ParseState); state->i = 0; state->mode = NORMAL; state->currentName = NullQuark; state->saveParam = NULL; /* Create the base text object */ state->topText = state->parentText = XtCreateWidget("default",sGMLCompositeTextObjectClass,inW,NULL,0); state->n = 0; XtSetArg(state->arglist[state->n],SGMLNdefaultClass,&state->currentClass); state->n++; XtGetValues(state->parentText,state->arglist,state->n); state->n = 0; XtSetArg(state->arglist[state->n],SGMLNexactTerminator,&state->exactTerminator); state->n++; XtSetArg(state->arglist[state->n],SGMLNsupportsEntities,&state->supportsEntities); state->n++; XtSetArg(state->arglist[state->n],SGMLNhideIllegalTags,&state->hideIllegalTags); state->n++; XtGetValues(state->parentText,state->arglist,state->n); state->wordsize = MAX_LINE_SIZE; state->word = XtMalloc(state->wordsize); for (; !SGMLIsHyper(inW);) inW = XtParent(inW); state->w = (SGMLHyperWidget) inW; return state; } static Widget DestroyState(state) ParseState *state; { Widget result; /* flush .. */ if(state->i) { state->word[state->i] = '\0'; if (state->i) add_to_text(XrmQuarkToString(state->currentName),state->parentText, state->currentClass,state->word,state->saveParam,1); } XtFree(state->saveParam); XtFree(state->word); result = state->topText; XtFree((char *)state); return result; } static void munge_text(state,get_next_char,data) ParseState *state; int (*get_next_char)(); XtPointer data; { int c; int i = state->i; int mode = state->mode; char *word = state->word; int wordsize = state->wordsize; int ot = state->w->sgml_hyper.open_tag; int ct = state->w->sgml_hyper.close_tag; int pt = state->w->sgml_hyper.parameter_tag; int est = state->w->sgml_hyper.entity_tag; int eet = state->w->sgml_hyper.entity_end_tag; while((c = (get_next_char)(data)) != EOF) { /* kludge */ if (mode == TAG && (c == '\n' || c == '\t')) c = ' '; /* Open Tag */ if (mode == NORMAL && c == ot) { word[i++] = c; if(i == wordsize) word = XtRealloc(word, (wordsize *= 2)); state->tag = i; mode = TAG; } /* Entity */ else if (state->supportsEntities && mode == NORMAL && c == est) { word[i++] = c; if(i == wordsize) word = XtRealloc(word, (wordsize *= 2)); state->tag = i; mode = ENTITY; } /* Parameter */ else if (mode == TAG && c == pt) { word[i] = '\0'; if (check_tag(state->w,word+state->tag,state->parentText,state->currentName, &state->NewClass,&state->tagQuark,state->exactTerminator,&state->matched)) { word[state->tag-1] = '\0'; if (*word) add_to_text(XrmQuarkToString(state->currentName),state->parentText, state->currentClass,word,state->saveParam,1); i++; if(i == wordsize) word = XtRealloc(word, (wordsize *= 2)); XtFree(state->saveParam); state->saveParam = NULL; state->param = i; mode = PARAM; } else if (state->hideIllegalTags) { word[state->tag-1] = '\0'; if (*word) add_to_text(XrmQuarkToString(state->currentName),state->parentText, state->currentClass,word,state->saveParam,1); word[i++] = pt; if (i == wordsize) word = XtRealloc(word, (wordsize *= 2)); XtFree(state->saveParam); state->saveParam = NULL; mode = PARAMILLEGAL; } else { word[i++] = pt; if(i == wordsize) word = XtRealloc(word, (wordsize *= 2)); mode = NORMAL; } } /* Close Tag */ else if (mode == TAG && c == ct) { word[i] = '\0'; if (check_tag(state->w,word+state->tag,state->parentText,state->currentName, &state->NewClass,&state->tagQuark,state->exactTerminator,&state->matched)) { word[state->tag-1] = '\0'; add_to_text(XrmQuarkToString(state->currentName),state->parentText, state->currentClass,word,state->saveParam,1); set_tag(state->w,&state->parentText,&state->currentName,&state->currentClass, state->saveParam,state->NewClass,state->tagQuark,state->matched); XtGetValues(state->parentText,state->arglist,state->n); i = 0; mode = NORMAL; XtFree(state->saveParam); state->saveParam = NULL; } else if (state->hideIllegalTags) { word[state->tag-1] = '\0'; if (*word) add_to_text(XrmQuarkToString(state->currentName),state->parentText, state->currentClass,word,state->saveParam,1); word[state->tag-1] = ot; word[i++] = ct; if (i == wordsize) word = XtRealloc(word, (wordsize *= 2)); word[i++] = '\0'; add_to_text("hidden",state->parentText,sGMLFormattedTextObjectClass,word+state->tag-1,NULL,1); i = 0; mode = NORMAL; XtFree(state->saveParam); state->saveParam = NULL; } else { word[i++] = ct; if(i == wordsize) word = XtRealloc(word, (wordsize *= 2)); mode = NORMAL; } } else if (mode == PARAM && c == ct) { word[i] = '\0'; set_tag(state->w,&state->parentText,&state->currentName,&state->currentClass, word+state->param,state->NewClass,state->tagQuark,state->matched); XtGetValues(state->parentText,state->arglist,state->n); if (state->NewClass && state->matched) state->saveParam = XtNewString(word+state->param); mode = NORMAL; i = 0; } else if (mode == PARAMILLEGAL && c == ct) { word[state->tag-1] = ot; word[i++] = ct; if (i == wordsize) word = XtRealloc(word, (wordsize *= 2)); word[i++] = '\0'; add_to_text("hidden",state->parentText,sGMLFormattedTextObjectClass,word+state->tag-1,NULL,1); mode = NORMAL; i = 0; } else if (mode == ENTITY && c == eet) { char entity[32]; char *e = entity; int j; for (j = state->tag ; jtag; word[i-1] = c; } mode = NORMAL; } else if (mode == ENTITY && (i-state->tag > 30 || (c != '#' && !isalnum(c)))) { mode = NORMAL; } else { word[i++] = c; if(i == wordsize) word = XtRealloc(word, (wordsize *= 2)); } } state->i = i; state->mode = mode; state->word = word; state->wordsize = wordsize; return; } static Widget set_text(inW,get_next_char,data) Widget inW; int (*get_next_char)(); XtPointer data; { ParseState *state = CreateState(inW); munge_text(state,get_next_char,data); return DestroyState(state); } /*-----------------------------------------------------------------------*/ /* Declare a Widget class for the converter */ /*-----------------------------------------------------------------------*/ void SGMLHyperDeclareClass(class) WidgetClass class; { static int MaxClasses = 0; if (NumberOfClasses == MaxClasses) ClassList = (WidgetClass *) XtRealloc((XtPointer) ClassList, (MaxClasses += 10) * sizeof(WidgetClass)); ClassList[NumberOfClasses++] = class; } /*-----------------------------------------------------------------------*/ /* Create a new HyperWidget */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateHyper(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLHyperWidgetClass,parent,al,ac); } /*-----------------------------------------------------------------------*/ /* Redisplay HyperWidget */ /*-----------------------------------------------------------------------*/ void SGMLHyperRedisplay(w) Widget w; { SGMLHyperWidget h = (SGMLHyperWidget) w; if (h->sgml_hyper.managed) calc_new_size(h); } /*-----------------------------------------------------------------------*/ /* Load the text from a file */ /*-----------------------------------------------------------------------*/ /* provides chars to "set_text" routine */ static int get_from_file(f) FILE **f; { int n = getc(*f); return n; } /* Public routine */ Widget SGMLHyperLoadFile(widget,fname) Widget widget; char *fname; { extern char *sys_errlist[]; Widget result = NULL; FILE *f = fopen(fname,"r"); if(f) { result = set_text(widget,get_from_file,&f); fclose(f); } else { char msg[1024]; sprintf(msg,"%s: %s",fname,sys_errlist[errno]); XtWarning(msg); } return result; } /*-----------------------------------------------------------------------*/ /* Load text using a getchar like routine */ /*-----------------------------------------------------------------------*/ Widget SGMLHyperLoadText(widget,get_character,closure) Widget widget; int (*get_character)(); XtPointer closure; { return set_text(widget,get_character,closure); } /*-----------------------------------------------------------------------*/ /* Load text from memory buffer */ /*-----------------------------------------------------------------------*/ /* provides chars to "set_text" routine */ static int get_from_buffer(buffer) char **buffer; { char c = **buffer; (*buffer)++; return c?c:EOF; } /* Public routines */ Widget SGMLHyperSetText(widget,text) Widget widget; char *text; { return set_text(widget,get_from_buffer,&text); } XtPointer SGMLHyperOpen(widget) Widget widget; { return (XtPointer) CreateState(widget); } void SGMLHyperWrite(state,text) XtPointer state; char *text; { munge_text((ParseState *) state, get_from_buffer, &text); } void SGMLHyperWriteData(state,get_character,closure) XtPointer state; int (*get_character)(); XtPointer closure; { munge_text((ParseState *) state, get_character, closure); } Widget SGMLHyperClose(state) XtPointer state; { return DestroyState((ParseState *) state); } /*-----------------------------------------------------------------------*/ /* SGMLHyperSearch: Public routine */ /*-----------------------------------------------------------------------*/ Widget SGMLHyperSearch(w,exp,sens,cont) SGMLHyperWidget w; char *exp; Boolean sens; Boolean cont; { Widget result = NULL; if (w->sgml_hyper.managed) { SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(w->sgml_hyper.managed); if (!cont && w->sgml_hyper.search_widget) { (*childClass->sgml_text_class.clear_select)(w->sgml_hyper.managed,w->sgml_hyper.sw_flag,TRUE); w->sgml_hyper.search_widget = NULL; } /* clear the already hilite widget */ if (w->sgml_hyper.search_widget) (*childClass->sgml_text_class.hilite)(w->sgml_hyper.managed,SGMLSELECT_WORD); result = (*childClass->sgml_text_class.search)(exp,sens,w->sgml_hyper.managed,TRUE,NULL,NULL,&w->sgml_hyper.search_widget); if (result) (*childClass->sgml_text_class.hilite)(w->sgml_hyper.managed,SGMLSELECT_WORD); } /* clear the last search widget */ if (w->sgml_hyper.sw_flag && !result) { XClearArea(XtDisplay((Widget)w),XtWindow((Widget)w),0,0,0,0,True); w->sgml_hyper.sw_flag = NULL; } w->sgml_hyper.search_widget = result; w->sgml_hyper.sw_flag = w->sgml_hyper.search_widget; return result; } /*-----------------------------------------------------------------------*/ /* Specifies start and end of highlignt chars */ /*-----------------------------------------------------------------------*/ void SGMLHyperSetTags(widget,open_tag,close_tag,end_tag,parameter_tag) Widget widget; unsigned char open_tag; unsigned char close_tag; unsigned char end_tag; unsigned char parameter_tag; { ((SGMLHyperWidget)widget)->sgml_hyper.open_tag = open_tag; ((SGMLHyperWidget)widget)->sgml_hyper.close_tag = close_tag; ((SGMLHyperWidget)widget)->sgml_hyper.end_tag = end_tag; ((SGMLHyperWidget)widget)->sgml_hyper.parameter_tag = parameter_tag; } /*-----------------------------------------------------------------------*/ /* convert a string to lower case */ /*-----------------------------------------------------------------------*/ static void lowcase(p) register char *p; { while(*p) { *p = tolower(*p); p++; } } /*-----------------------------------------------------------------------*/ /* Returns the text of the widget */ /* the memory is allocated. It must be freed by the application */ /* If include_tags is FALSE, the special characters are not returned */ /*-----------------------------------------------------------------------*/ static void dump_text(hyper,w,include_tags,calc_len,pp) SGMLHyperWidget hyper; SGMLTextObject w; Boolean include_tags, calc_len; char **pp; { char *special = "<>&\""; char ot = hyper->sgml_hyper.open_tag; char ct = hyper->sgml_hyper.close_tag; char et = hyper->sgml_hyper.end_tag; char pt = hyper->sgml_hyper.parameter_tag; char est = hyper->sgml_hyper.entity_tag; char eet = hyper->sgml_hyper.entity_end_tag; Boolean supportsEntities; char *p; int len, matched; char *name = XtName((Widget)w); Arg arglist[10]; int n = 0; XtSetArg(arglist[n],SGMLNsupportsEntities,&supportsEntities); n++; XtSetArg(arglist[n],SGMLNmatched,&matched); n++; XtGetValues((Widget)w,arglist,n); if (w->object.being_destroyed) return; if (calc_len) len = (int) *pp; else p = *pp; if (!strcmp(name,"default")) name = ""; if (!strcmp(name,"hidden")) { name = ""; supportsEntities = FALSE; } if (*name && include_tags) { char *q = name; if (calc_len) len++; else *p++ = ot; if (calc_len) len += strlen(q); else for (; *q != '\0' && *q != '_'; ) *p++ = *q++; if (w->sgml_text.param_length) { char *param = w->sgml_text.param; if (calc_len) len++; else *p++ = pt; if (calc_len) len += strlen(param); else for (; *param != '\0';) *p++ = *param++; } if (calc_len) len++; else *p++ = ct; } if (w->sgml_text.text) { if (supportsEntities) { char *text = w->sgml_text.text; if (calc_len) { for (; *text != '\0';) if (strchr(special,*text++)) len += 6; else len++; } else { for (; *text != '\0';) if (strchr(special,*text)) { sprintf(p,"%c#%03d%c",est,(int)*text++,eet); p += 6; } else *p++ = *text++; } } else { char *text = w->sgml_text.text; if (calc_len) len += strlen(text); else for (; *text != '\0';) *p++ = *text++; } } if (SGMLIsCompositeText((Widget)w)) { int n; WidgetList children; int nn = 0; Arg arglist[10]; XtSetArg(arglist[nn],XtNnumChildren,&n); nn++; XtSetArg(arglist[nn],XtNchildren,&children); nn++; XtGetValues((Widget)w,arglist,nn); if (calc_len) for (; n-- > 0; children++) dump_text(hyper,*children,include_tags,calc_len,&len); else for (; n-- > 0; children++) dump_text(hyper,*children,include_tags,calc_len,&p); } if (matched && include_tags && *name) { char *q = name; if (calc_len) len ++; else *p++ = ot; if (calc_len) len ++; else *p++ = et; if (calc_len) len += strlen(q); else for (; *q != '\0' && *q != '_'; ) *p++ = *q++; if (calc_len) len ++; else *p++ = ct; } if (calc_len) *pp = (char *) len; else *pp = p; } char *SGMLHyperGetText(widget, include_tags) Widget widget; Boolean include_tags; { SGMLHyperWidget w = (SGMLHyperWidget)widget; char *result, *p; int len = 1; if (w->sgml_hyper.managed) { dump_text(w,w->sgml_hyper.managed,include_tags,TRUE,&len); result = p = XtMalloc(len); dump_text(w,w->sgml_hyper.managed,include_tags,FALSE,&p); *p++ = '\0'; return result; } else return NULL; } /*-----------------------------------------------------------------------*/ /* Only for Motif */ /* If the widget is in a XmScrolledWindow, scroll it so the selection is */ /* visible */ /*-----------------------------------------------------------------------*/ void SGMLHyperShowObject(h,object,sel) SGMLHyperWidget h; SGMLTextObject object; Boolean sel; { #define SetArg(a,b) XtSetArg(al[ac],a,b);ac++ #define GetValues(w) XtGetValues(w,al,ac);ac=0 #define SetValues(w) XtSetValues(w,al,ac);ac=0 Widget clip = XtParent(h); Widget swin; Widget h_scroll; Widget v_scroll; int ac = 0; Position x_parent,y_parent; Position x_grep,y_grep; Dimension h_grep,w_grep; Position x_clip,y_clip; Dimension h_clip,w_clip; Position dv=0,dh=0; int min,max; int v_val,v_size,v_inc,v_page; int h_val,h_size,h_inc,h_page; Position x,y; Arg al[5]; /* check if selection exists */ /* check if the widget is in a scrolled window */ /* the XmScrolledWindow creates a clip window */ /* The widget's parent is the clip window */ if(!clip) return; swin = XtParent(clip); if(!swin || !XmIsScrolledWindow(swin)) return; /* Get window scroll bars */ SetArg(XmNhorizontalScrollBar, &h_scroll); SetArg(XmNverticalScrollBar , &v_scroll); GetValues(swin); /* Get size of clip window and selection rect */ w_clip = clip->core.width; h_clip = clip->core.height; /* If no object specified then position at top */ if (!object) { SetArg(XmNminimum,&min); GetValues(v_scroll); XmScrollBarGetValues(v_scroll,&v_val,&v_size,&v_inc,&v_page); dv = min - v_val; SetArg(XmNminimum,&min); GetValues(h_scroll); XmScrollBarGetValues(h_scroll,&h_val,&h_size,&h_inc,&h_page); dh = min - h_val; } else { w_grep = object->sgml_text.width; h_grep = object->sgml_text.height; /* Get global coordinates of clip and selection rect */ XtTranslateCoords(clip,0,0,&x_clip,&y_clip); if (sel && object->sgml_text.begin_select) { Position sx, sy; char *sb = object->sgml_text.begin_select; SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget)object); sx = object->sgml_text.margin; sy = object->sgml_text.begin.y; /* deliberately make object small */ w_grep = 2; h_grep = 2; (*class->sgml_text_class.pos_to_xy)(object,&sx,&sy,sb,FALSE); XtTranslateCoords((Widget)h,sx,sy,&x_grep,&y_grep); } else XtTranslateCoords((Widget)h,object->sgml_text.margin,object->sgml_text.begin.y,&x_grep,&y_grep); /* offset of selection within clip window */ x = x_grep - x_clip; y = y_grep - y_clip; /* selection y coordinate is not visible */ if( y < 0 || y + h_grep > h_clip) { /* the widget must be moved verticaly by dv pixels */ dv = (y + h_grep / 2) - h_clip / 2; SetArg(XmNminimum,&min); SetArg(XmNmaximum,&max); GetValues(v_scroll); XmScrollBarGetValues(v_scroll,&v_val,&v_size,&v_inc,&v_page); max -= v_size; if( dv + v_val > max ) dv = max - v_val; if( dv + v_val < min ) dv = min - v_val; } /* selection x coordinate is not visible */ if( x < 0 || x + w_grep > w_clip) { /* the widget must be moved horizontaly by dh pixels */ dh = (x + w_grep / 2) - w_clip / 2; SetArg(XmNminimum,&min); SetArg(XmNmaximum,&max); GetValues(h_scroll); XmScrollBarGetValues(h_scroll,&h_val,&h_size,&h_inc,&h_page); max -= h_size; if( dh + h_val > max ) dh = max - h_val; if( dh + h_val < min ) dh = min - h_val; } } /* if the widget must be moved */ if(dv || dh) { Position x = h->core.x-dh; Position y = h->core.y-dv; /* move it */ SetArg(XmNx,x); SetArg(XmNy,y); SetValues((Widget) h); /* update scroll bars */ if(dv) XmScrollBarSetValues(v_scroll,v_val+dv,v_size,v_inc, v_page,TRUE); if(dh) XmScrollBarSetValues(h_scroll,h_val+dh,h_size,h_inc, h_page,TRUE); } } /*-----------------------------------------------------------------------*/ /* Clear previous selection */ /*-----------------------------------------------------------------------*/ static void clear_selection(w) SGMLHyperWidget w; { /* if(w->sgml_hyper.grep_seg) { if(XtIsRealized(w)) */ /* force a redraw */ /* XClearArea(XtDisplay(w),XtWindow(w), w->sgml_hyper.grep_x, w->sgml_hyper.grep_y, w->sgml_hyper.grep_width, w->sgml_hyper.grep_height, TRUE); } w->sgml_hyper.grep_seg = NULL; */ } /*-----------------------------------------------------------------------*/ /* Set the new selection */ /*-----------------------------------------------------------------------*/ static void set_selection(w) SGMLHyperWidget w; { /* if(w->sgml_hyper.grep_seg) { text_segment *s = w->sgml_hyper.grep_seg; char *p = s->text; XCharStruct char_info; int dir,ascent,desc; */ /* get size of the begining of the segment, up to the found string */ /* XTextExtents( s->style->sgml_style.font, s->text, w->sgml_hyper.grep_off, &dir,&ascent,&desc,&char_info); w->sgml_hyper.grep_x = s->x + char_info.width; w->sgml_hyper.grep_y = s->y + desc; w->sgml_hyper.grep_height = s->height; */ /* Get size of the selection */ /* XTextExtents( s->style->sgml_style.font, w->sgml_hyper.grep_txt, w->sgml_hyper.grep_len, &dir,&ascent,&desc,&char_info); w->sgml_hyper.grep_width = char_info.width; */ /* force update */ /* if(XtIsRealized(w)) XClearArea(XtDisplay(w),XtWindow(w), w->sgml_hyper.grep_x, w->sgml_hyper.grep_y, w->sgml_hyper.grep_width, w->sgml_hyper.grep_height, TRUE); } */ } /* size of regexp buffer */ #define ESIZE 1024 /*-----------------------------------------------------------------------*/ /* if you have regexp, define USE_REGEXP */ /* NOTE : since regexp variables and functions are not static */ /* you can have some problems if you use the same names or include */ /* regexp somewhere else */ /*-----------------------------------------------------------------------*/ #ifdef USE_REGEXP /* regexp macros ... see "man regexp" */ #define INIT register char *sp = instring; #define GETC() (*sp++) #define PEEKC() (*sp) #define UNGETC(c) (--sp) #define RETURN(c) return; #define ERROR(c) fprintf(stderr,"Warning regexp error %d\n",c) #include #else /*-----------------------------------------------------------------------*/ /* If we don't have regexp mimic it. */ /* Just find plain text using strncmp. no regular expression matching */ /*-----------------------------------------------------------------------*/ static char *loc1,*loc2; static int len; static compile(w,buf,end,dummy) char *w,*buf; int end; int dummy; { strcpy(buf,w); len = strlen(w); } static step(w,buf) char *w; char *buf; { loc1 = w; while(*loc1) { if(strncmp(loc1,buf,len) == 0) { loc2 = loc1+len; return TRUE; } loc1++; } return FALSE; } #endif /*-----------------------------------------------------------------------*/ /* Select a word in the hyper widget */ /* word : word to find ( or regular expression if USE_REGEX is defined) */ /* ignore_case : if TRUE ignore case in comparaison */ /* from_start : if TRUE search from start of text, else search from */ /* current selection */ /* wrap: if TRUE, continue search from the begining of text if the end */ /* is reached */ /*-----------------------------------------------------------------------*/ #ifdef _NO_PROTO Boolean SGMLHyperGrep(widget,word,ignore_case,from_start,wrap) Widget widget; char *word; Boolean ignore_case; Boolean from_start; Boolean wrap; #else Boolean SGMLHyperGrep(Widget widget, char *word, Boolean ignore_case, Boolean from_start, Boolean wrap) #endif { #ifdef dummy SGMLHyperWidget h = (SGMLHyperWidget)widget; char *w = word; char *p; int offset,from,to; text_segment *s; char expbuf[ESIZE]; if(!h->sgml_hyper.first_seg) return; if(ignore_case) { /* if ignore case, change word to lower case */ w = XtNewString(word); lowcase(w); } /* compile the regular expression */ compile(w,expbuf,&expbuf[ESIZE],'\0'); if(ignore_case) XtFree(w); /* if from_start or no previous selection, start from first segment */ if(from_start || h->sgml_hyper.grep_seg == NULL) { offset=0; wrap = FALSE; s = h->sgml_hyper.first_seg; } else { /* start from last selection */ offset = h->sgml_hyper.grep_off + h->sgml_hyper.grep_len; s = h->sgml_hyper.grep_seg; } for(;;) { if(s->text) { if(ignore_case) { /* if ignore case, change segment to lower case */ p = XtNewString(s->text); lowcase(p); } /* search the string */ if(step(p+offset,expbuf)) { /* if found ...*/ /* clear previous selection */ clear_selection(h); h->sgml_hyper.grep_seg = s; h->sgml_hyper.grep_off = offset + (loc1-(p+offset)); h->sgml_hyper.grep_txt = s->text + h->sgml_hyper.grep_off; h->sgml_hyper.grep_len = loc2-loc1; /* set new selection */ set_selection(h); /* make it visible */ show_selection(h); if(ignore_case) XtFree(p); return TRUE; } if(ignore_case) XtFree(p); } offset = 0; s = s->next; /* if end of text and wrap mode, go to start of text */ if(!s) if(wrap) { wrap = FALSE; s = h->sgml_hyper.first_seg; } else break; } #endif return FALSE; } static Boolean Convert(w, selection, target, type, value, length, format) Widget w; Atom *selection, *target, *type; XtPointer *value; unsigned long *length; int *format; { Display *d = XtDisplay(w); SGMLHyperWidget hw = (SGMLHyperWidget)w; if (*selection != XA_PRIMARY) return False; /* * XA_TARGETS identifies what targets the text widget can * provide data for. */ if (*target == XA_TARGETS(d)) { Atom* targetP; Atom* std_targets; unsigned long std_length; XmuConvertStandardSelection( w, hw->sgml_hyper.selection_time, selection, target, type, (caddr_t*)&std_targets, &std_length, format ); *length = std_length + 5; *value = (XtPointer)XtMalloc(sizeof(Atom)*(*length)); targetP = *(Atom**)value; *targetP++ = XA_STRING; *targetP++ = XA_TEXT(d); *targetP++ = XA_COMPOUND_TEXT(d); *targetP++ = XA_LIST_LENGTH(d); *targetP++ = XA_LENGTH(d); bcopy((char*)std_targets, (char*)targetP, sizeof(Atom)*std_length); XtFree((char*)std_targets); *type = XA_ATOM; *format = 32; return TRUE; } if (*target == XA_STRING || *target == XA_TEXT(d)|| *target == XA_COMPOUND_TEXT(d) ) { Boolean result = TRUE; if (*target == XA_COMPOUND_TEXT(d)) *type = *target; else *type = XA_STRING; if (hw == NULL) return FALSE; if (hw->sgml_hyper.copy_text == NULL && hw->sgml_hyper.search_widget) result = GetSelection(hw,SGMLDUMP_ASCII); *format = 8; if (result && hw->sgml_hyper.copy_text) { *length = (unsigned long) strlen(hw->sgml_hyper.copy_text); *value = hw->sgml_hyper.copy_text; } else { *length = 0; *value = NULL; } return TRUE; } if (*target == XA_LIST_LENGTH(d)) { *value = XtMalloc(4); if (sizeof(long) == 4) { *(long*)*value = 1; } else { long temp = 1; bcopy( ((char*)&temp)+sizeof(long)-4, (char*)*value, 4); } *type = XA_INTEGER; *length = 1; *format = 32; return TRUE; } if (*target == XA_LENGTH(d)) { *value = XtMalloc(4); if (sizeof(long) == 4) *(long*)*value = strlen(hw->sgml_hyper.copy_text); else { long temp = strlen(hw->sgml_hyper.copy_text); bcopy( ((char*)&temp)+sizeof(long)-4, (char*)*value, 4); } *type = XA_INTEGER; *length = 1; *format = 32; return True; } if (XmuConvertStandardSelection(w, hw->sgml_hyper.selection_time, selection, target, type, (caddr_t *)value, length, format)) return TRUE; /* else */ return FALSE; } static void LoseOwnership(w, selection) Widget w; Atom *selection; { SGMLHyperWidget hw = (SGMLHyperWidget)w; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(hw->sgml_hyper.managed); if (hw->sgml_hyper.copy_text) { XtFree(hw->sgml_hyper.copy_text); hw->sgml_hyper.copy_text = NULL; } if (hw->sgml_hyper.sw_flag || hw->sgml_hyper.search_widget) { (*childClass->sgml_text_class.clear_select)(hw->sgml_hyper.managed,hw->sgml_hyper.sw_flag,TRUE); hw->sgml_hyper.search_widget = NULL; hw->sgml_hyper.sw_flag = NULL; } } static void SelectionDone(w, selection, target) Widget w; Atom *selection, *target; { /* empty proc so Intrinsics know we want to keep storage */ } static Boolean GetSelection(hw,type) SGMLHyperWidget hw; int type; { Display *d = XtDisplay((Widget)hw); SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(hw->sgml_hyper.managed); int len = 0; char *p; SGMLDumpTextInfo dp; dp.sw = hw->sgml_hyper.search_widget; dp.begin_sw = FALSE; dp.calc_len = TRUE; dp.format_type = type; dp.copy_type = hw->sgml_hyper.select_index; dp.current_pos = NULL; dp.last_pos = NULL; dp.line_spacing = 0; dp.spacing = 0; dp.last_len = 0; (*childClass->sgml_text_class.dump_text)(hw->sgml_hyper.managed,&dp,&len); if (!len) return FALSE; dp.calc_len = FALSE; dp.begin_sw = FALSE; dp.line_spacing = 0; dp.spacing = 0; hw->sgml_hyper.copy_text = p = XtMalloc((unsigned)len+1); dp.current_pos = dp.last_pos = hw->sgml_hyper.copy_text; (*childClass->sgml_text_class.dump_text)(hw->sgml_hyper.managed,&dp,&p); *p = '\0'; return TRUE; } midaswww-2.1/SGMLCaptionText.c100666 21345 173 17443 5554674753 14552 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLCaptionTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a composite text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include "SGMLCaptionTextP.h" /* Private functions */ /* Private data struct */ /* Widget class methods */ static void ComputeSize(); #define Offset(field) XtOffsetOf(SGMLCaptionTextRec,sgml_caption_text.field) static XtResource resources[] = { {SGMLNcaption, SGMLCCaption, XtRWidget, sizeof(Widget), Offset(caption), XtRImmediate, (XtPointer) NULL} }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLCaptionTextClassRec sGMLCaptionTextClassRec = { { (WidgetClass) &sGMLCompositeTextClassRec, /* superclass */ "SGMLCaptionText", /* class_name */ sizeof(SGMLCaptionTextRec), /* widget_size */ NULL, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ NULL, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ NULL, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { ComputeSize, /* compute_size */ SGMLInheritAdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ SGMLInheritExpose, /* expose */ SGMLInheritActivate, /* activate */ SGMLInheritHilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ SGMLInheritCallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ NULL, /* sgml_set_values */ NULL, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ SGMLInheritHiliteSelection, /* hilite_selection */ SGMLInheritXYToPos, /* xy_to_pos */ SGMLInheritPosToXY, /* pos_to_xy */ SGMLInheritDumpText, /* dump_text */ NULL, /* extension */ }, { SGMLInheritGeometryManager, /* geometry_manager */ SGMLInheritChangeManaged, /* change_managed */ SGMLInheritInsertChild, /* insert_child */ SGMLInheritDeleteChild, /* delete_child */ SGMLInheritCallAdjustSize, /* call_adjust_size */ NULL, /* ignore */ }, { NULL, /* ignore */ }, }; WidgetClass sGMLCaptionTextObjectClass = (WidgetClass) &sGMLCaptionTextClassRec; static void DoNothing() {} /*--------------------------------------------------------------*/ /* Compute Size: */ /*--------------------------------------------------------------*/ static void ComputeSize(w,geom,Adjust,Closure) SGMLCaptionTextObject w; SGMLGeometry *geom; CallAdjustSizeProc Adjust; Opaque Closure; { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; SGMLPosition xmin, xmax; /* * Always Break before */ _SGMLBreak(geom, w->sgml_text.space_before); /* * Deal with caption first */ w->sgml_text.begin = geom->coord; xmin = xmax = geom->coord.x; if (w->sgml_caption_text.caption) { SGMLTextObject t = (SGMLTextObject) w->sgml_caption_text.caption; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass((Widget) t); (*childClass->sgml_text_class.compute_size)(t,geom,DoNothing,NULL); if (t->sgml_text.margin < xmin) xmin = t->sgml_text.margin; if (t->sgml_text.margin + t->sgml_text.width > xmax) xmax = t->sgml_text.margin + t->sgml_text.width; } /* * Query children? */ for (; n-- > 0; children++, managed++) { if (*managed && *children != w->sgml_caption_text.caption) { SGMLTextObject t = (SGMLTextObject) *children; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); SGMLCompositeTextObjectClass myClass = (SGMLCompositeTextObjectClass) XtClass((Widget) w); (*childClass->sgml_text_class.compute_size) (*children,geom,myClass->sgml_composite_text_class.call_adjust_size,*children); if (t->sgml_text.margin < xmin) xmin = t->sgml_text.margin; if (t->sgml_text.margin + t->sgml_text.width > xmax) xmax = t->sgml_text.margin + t->sgml_text.width; } } w->sgml_text.end = geom->coord; w->sgml_text.height = geom->coord.y + geom->coord.descent + geom->coord.ascent - w->sgml_text.begin.y; w->sgml_text.width = xmax - xmin; w->sgml_text.margin = xmin; /* * Always Break after */ _SGMLBreak(geom,w->sgml_text.space_after); w->sgml_text.size_valid = TRUE; } midaswww-2.1/SGMLContainerText.c100666 21345 173 27760 5554674753 15102 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLContainerTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a container text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include #include "SGMLContainerTextP.h" #include "SGMLCompositeTextP.h" /* Private functions */ /* Widget class methods */ static void ClassPartInitialize(); static void ComputeSize(); static Boolean AdjustSize(); static void Redisplay(); static void CallMapCallback(); static XtGeometryResult GeometryManager(); #define Offset(field) XtOffsetOf(SGMLContainerTextRec,sgml_container_text.field) static XtResource resources[] = { {SGMLNchild,SGMLCChild,SGMLRWidget,sizeof(Widget), Offset (child),XtRImmediate,(XtPointer)0}, {SGMLNverticalOffset,SGMLCVerticalOffset,XtRPosition,sizeof(Position), Offset (vertical_offset),XtRImmediate,(XtPointer)0}, }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLContainerTextClassRec sGMLContainerTextClassRec = { { (WidgetClass) &sGMLTextClassRec, /* superclass */ "SGMLContainerText", /* class_name */ sizeof(SGMLContainerTextRec), /* widget_size */ NULL, /* class_initialize */ ClassPartInitialize, /* class_part_initialize */ FALSE, /* class_inited */ NULL, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ NULL, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { ComputeSize, /* compute_size */ AdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ Redisplay, /* expose */ SGMLInheritActivate, /* activate */ SGMLInheritHilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ CallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ NULL, /* sgml_set_values */ NULL, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ SGMLInheritHiliteSelection, /* hilite_selection */ SGMLInheritXYToPos, /* xy_to_pos */ SGMLInheritPosToXY, /* pos_to_xy */ SGMLInheritDumpText, /* dump_text */ NULL, /* extension */ }, { GeometryManager, /* geometry_manager */ NULL, /* extension */ } }; WidgetClass sGMLContainerTextObjectClass = (WidgetClass) &sGMLContainerTextClassRec; /*--------------------------------------------------------------*/ /* ClassPartInitialize: */ /*--------------------------------------------------------------*/ static void ClassPartInitialize (class) SGMLContainerTextObjectClass class; { SGMLContainerTextObjectClass superclass = (SGMLContainerTextObjectClass) class->object_class.superclass; #define inherit(field,defval) if (class->sgml_container_text_class.field == defval) \ class->sgml_container_text_class.field = superclass->sgml_container_text_class.field inherit(geometry_manager,SGMLInheritGeometryManager); #undef inherit } /*--------------------------------------------------------------*/ /* Redisplay */ /*--------------------------------------------------------------*/ static void Redisplay(t,event,region) SGMLContainerTextObject t; XEvent *event; Region region; { } /*--------------------------------------------------------------*/ /* Compute Size: */ /*--------------------------------------------------------------*/ static void ComputeSize(w,geom,Adjust,Closure) SGMLContainerTextObject w; SGMLGeometry *geom; AdjustSizeProc Adjust; Opaque Closure; { Dimension left_clearance = w->sgml_text.left_margin + w->sgml_text.left_indent; Dimension right_clearance = w->sgml_text.right_margin + w->sgml_text.right_indent; Widget child = w->sgml_container_text.child; if (w->sgml_text.break_before == SGMLBREAK_ALWAYS) _SGMLBreak(geom,w->sgml_text.space_before); if (left_clearance > geom->coord.x ) geom->coord.x = left_clearance; w->sgml_text.begin = geom->coord; if (child) { Dimension width = child->core.width; Dimension height = child->core.height; int offset = w->sgml_container_text.vertical_offset; Dimension ascent = (height + offset > 0) ? height + offset : 0; Dimension descent = (offset < 0) ? -offset : 0; if (geom->coord.x + w->sgml_text.spacing + width + right_clearance > geom->natural_width && w->sgml_text.break_before != SGMLBREAK_NEVER) { geom->coord.x = left_clearance; geom->coord.y += geom->coord.descent + geom->coord.ascent; geom->coord.descent = w->sgml_text.descent; geom->coord.ascent = w->sgml_text.ascent; } else if (geom->leave_space) geom->coord.x += w->sgml_text.spacing; if (ascent > geom->coord.ascent || descent > geom->coord.descent) { if (ascent > geom->coord.ascent) geom->coord.ascent = ascent; if (descent > geom->coord.descent) geom->coord.descent = descent; Adjust(Closure, geom->coord.y, geom->coord.ascent, geom->coord.descent); } if (left_clearance > geom->coord.x && geom->broken) geom->coord.x = left_clearance; w->sgml_text.begin = geom->coord; w->sgml_text.margin = geom->coord.x; XtMoveWidget(child,geom->coord.x,geom->coord.y + geom->coord.ascent - ascent); geom->coord.x += width; geom->leave_space = TRUE; geom->broken = FALSE; if (geom->actual_width < geom->coord.x) geom->actual_width = geom->coord.x; w->sgml_text.height = height; w->sgml_text.width = width; } else { w->sgml_text.height = 0; w->sgml_text.width = 0; } w->sgml_text.margin = geom->coord.x - w->sgml_text.width; w->sgml_text.end = geom->coord; if (w->sgml_text.break_after == SGMLBREAK_ALWAYS) _SGMLBreak(geom,w->sgml_text.space_after); w->sgml_text.size_valid = TRUE; } /*--------------------------------------------------------------*/ /* Adjust Size: */ /*--------------------------------------------------------------*/ static Boolean AdjustSize(w,y,ascent,descent) SGMLContainerTextObject w; Position y; Dimension ascent, descent; { Widget child = w->sgml_container_text.child; if (w->sgml_text.end.y != y) return FALSE; if (child && ascent > w->sgml_text.end.ascent) { XtMoveWidget(child,w->sgml_text.begin.x,w->sgml_text.begin.y + ascent - w->sgml_text.end.ascent); } w->sgml_text.height += descent - w->sgml_text.end.descent + ascent - w->sgml_text.end.ascent; w->sgml_text.end.ascent = ascent; w->sgml_text.end.descent = descent; if (w->sgml_text.begin.y == y) { w->sgml_text.begin.ascent = ascent; w->sgml_text.begin.descent = descent; return TRUE; } return FALSE; } /*--------------------------------------------------------------*/ /* Call the map Callback: */ /*--------------------------------------------------------------*/ static void CallMapCallback(w,event,map) SGMLContainerTextObject w; XEvent *event; Boolean map; { Widget child = w->sgml_container_text.child; SGMLTextCallbackStruct cb; cb.reason = SGMLTEXT_MAP; cb.event = event; cb.text = w->sgml_text.text; cb.length = w->sgml_text.length; cb.param = w->sgml_text.param; cb.param_length = w->sgml_text.param_length; if (child) { if (map) XtManageChild(child); else XtUnmanageChild(child); } if (map) XtCallCallbacks((Widget) w,SGMLNmapCallback ,(XtPointer) &cb); else XtCallCallbacks((Widget) w,SGMLNunmapCallback,(XtPointer) &cb); } /*--------------------------------------------------------------*/ /* GeometryManager: */ /*--------------------------------------------------------------*/ static XtGeometryResult GeometryManager(w,desired,allowed) SGMLContainerTextObject w; XtWidgetGeometry *desired, *allowed; { Widget child = w->sgml_container_text.child; Widget parent = XtParent((Widget) w); SGMLCompositeTextObjectClass parentClass = (SGMLCompositeTextObjectClass) XtClass(parent); #define Wants(flag) (desired->request_mode & flag) if (Wants(XtCWQueryOnly)) return XtGeometryYes; if (Wants(CWWidth)) child->core.width = desired->width; if (Wants(CWHeight)) child->core.height = desired->height; return (*parentClass->sgml_composite_text_class.geometry_manager)(parent,desired,allowed); #undef Wants } /*-----------------------------------------------------------------------*/ /* Create a new SGMLContainerTextObject */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateContainerText(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLContainerTextObjectClass,parent,al,ac); } midaswww-2.1/SGMLInputText.c100666 21345 173 106075 5554674753 14274 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLInputTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a input text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include #include #include #include #include #include #include #include #include #include "SGMLInputTextP.h" #include "SGMLFormText.h" #include "SGMLCompositeTextP.h" /* BAD */ /* Private functions */ #define Strlen(x) (x?strlen(x):0) static Boolean option_selected, option = FALSE; static char *option_value; /* Widget class methods */ static void Destroy(); static void Initialize(); static void ClassInitialize(); static Boolean InheritChanges(); static Boolean SetValues(); static XrmQuark TypeText; static XrmQuark TypeSubmit; static XrmQuark TypeReset; static XrmQuark TypeCheckbox; static XrmQuark TypePassword; static XrmQuark TypeRadio; static XrmQuark TypeTextArea; static XrmQuark TypeSelect; static XrmQuark TypeHidden; static XrmQuark TypeImage; static XrmQuark TypeOption; static XmString emptyLabel; #define Offset(field) XtOffsetOf(SGMLInputTextRec,sgml_input_text.field) static XtResource resources[] = { {SGMLNtype,SGMLCType,SGMLRQuark,sizeof(XrmQuark), Offset (type),SGMLRQuark,(XtPointer) &TypeText}, {SGMLNname,SGMLCName,XtRString,sizeof(String), Offset (name),XtRImmediate,(XtPointer)0}, {SGMLNvalue,SGMLCValue,XtRString,sizeof(String), Offset (value),XtRImmediate,(XtPointer)0}, {SGMLNimage,SGMLCImage,"Image",sizeof(GIFImage *), Offset (image),XtRImmediate,(XtPointer)0}, {SGMLNsize,SGMLCSize,XtRInt,sizeof(int), Offset (size),XtRImmediate,(XtPointer)0}, {SGMLNrows,SGMLCRows,XtRInt,sizeof(int), Offset (rows),XtRImmediate,(XtPointer)0}, {SGMLNcols,SGMLCCols,XtRInt,sizeof(int), Offset (cols),XtRImmediate,(XtPointer)0}, {SGMLNmaxlength,SGMLCMaxlength,XtRInt,sizeof(int), Offset (maxlength),XtRImmediate,(XtPointer)0}, {SGMLNchecked,SGMLCChecked,XtRBoolean,sizeof(Boolean), Offset (checked),XtRImmediate,(XtPointer)FALSE}, {SGMLNmultiple,SGMLCMultiple,XtRBoolean,sizeof(Boolean), Offset (multiple),XtRImmediate,(XtPointer)FALSE}, {SGMLNselected,SGMLCSelected,XtRBoolean,sizeof(Boolean), Offset (selected),XtRImmediate,(XtPointer)FALSE}, {SGMLNautosubmit,SGMLCAutosubmit,XtRBoolean,sizeof(Boolean), Offset (auto_submit),XtRImmediate,(XtPointer)TRUE}, {SGMLNbombPixmap,SGMLCBombPixmap,"Icon",sizeof(Pixmap), Offset (bomb),XtRImmediate,(XtPointer)NULL}, }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLInputTextClassRec sGMLInputTextClassRec = { { (WidgetClass) &sGMLContainerTextClassRec, /* superclass */ "SGMLInputText", /* class_name */ sizeof(SGMLInputTextRec), /* widget_size */ ClassInitialize, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ Destroy, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ SetValues, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { SGMLInheritComputeSize, /* compute_size */ SGMLInheritAdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ SGMLInheritExpose, /* expose */ SGMLInheritActivate, /* activate */ SGMLInheritHilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ SGMLInheritCallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ NULL, /* sgml_set_values */ InheritChanges, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ SGMLInheritHiliteSelection, /* hilite_selection */ SGMLInheritXYToPos, /* xy_to_pos */ SGMLInheritPosToXY, /* pos_to_xy */ SGMLInheritDumpText, /* dump_text */ NULL, /* extension */ }, { SGMLInheritGeometryManager, /* geometry_manager */ NULL, /* extension */ }, { NULL, /* extension */ }, }; WidgetClass sGMLInputTextObjectClass = (WidgetClass) &sGMLInputTextClassRec; /*--------------------------------------------------------------*/ /* ClassInitialize: */ /*--------------------------------------------------------------*/ static void ClassInitialize () { TypeText = XrmPermStringToQuark("text"); TypeSubmit = XrmPermStringToQuark("submit"); TypeReset = XrmPermStringToQuark("reset"); TypeCheckbox = XrmPermStringToQuark("checkbox"); TypePassword = XrmPermStringToQuark("password"); TypeRadio = XrmPermStringToQuark("radio"); TypeSelect = XrmPermStringToQuark("select"); TypeTextArea = XrmPermStringToQuark("textarea"); TypeHidden = XrmPermStringToQuark("hidden"); TypeImage = XrmPermStringToQuark("image"); TypeOption = XrmPermStringToQuark("option"); emptyLabel = XmStringCreateSimple(""); } /*--------------------------------------------------------------*/ /* check_passwd, echos *s in text widget, taken from Motif FAQ */ /*--------------------------------------------------------------*/ /* Written by Dan Heller. Copyright 1991, O'Reilly && Associates. * This program is freely distributable without licensing fees and * is provided without guarantee or warranty expressed or implied. * This program is -not- in the public domain. This program appears * in the Motif Programming Manual, O'Reilly Volume 6. */ /* passwd.c -- prompt for a passwd. Meaning, all input looks like * a series of *'s. Store the actual data typed by the user in * an internal variable. Don't allow paste operations. Handle * backspacing by deleting all text from insertion point to the * end of text. */ void check_passwd(text_w, buffer, cbs) Widget text_w; char **buffer; XmTextVerifyCallbackStruct *cbs; { char *new; int len; char *passwd = *buffer; if (cbs->text->ptr == NULL) { /* backspace */ cbs->endPos = Strlen(passwd); /* delete from here to end */ if (cbs->endPos <= 0) return; /* catch null passwd - Mark Scoville */ passwd[cbs->startPos] = 0; /* backspace--terminate */ return; } if (cbs->text->length > 1) { cbs->doit = False; /* don't allow "paste" operations */ return; /* make the user *type* the password! */ } new = XtMalloc(cbs->endPos + 2); /* new char + NULL terminator */ if (passwd) { strcpy(new, passwd); XtFree(passwd); } else new[0] = '\0'; passwd = new; strncat(passwd, cbs->text->ptr, cbs->text->length); passwd[cbs->endPos + cbs->text->length] = 0; for (len = 0; len < cbs->text->length; len++) cbs->text->ptr[len] = '*'; *buffer = new; } /*--------------------------------------------------------------*/ /* SetupImage: */ /*--------------------------------------------------------------*/ static void SetupImage(w) SGMLInputTextObject w; { Widget parent = (Widget) w; GIFImage *gifImage = w->sgml_input_text.image; char message[256]; Pixmap pixmap; for ( ; !XtIsWidget(parent) ; parent = XtParent(parent)); pixmap = GIFToPixmap(parent,gifImage,message); if (!pixmap) printf("Image conversion error: %s\n",message); else { Arg arglist[10]; int n=0; XtSetArg(arglist[n],XmNlabelPixmap,pixmap); n++; XtSetValues(w->sgml_input_text.child,arglist,n); } } /*--------------------------------------------------------------*/ /* ResetAction: */ /*--------------------------------------------------------------*/ static void ResetAction(w) SGMLInputTextObject w; { XrmQuark type = w->sgml_input_text.type; Widget child = w->sgml_input_text.child; if (type == TypePassword || type == TypeText) { char *value = w->sgml_input_text.value; XmTextFieldSetString(child,value?value:""); } else if (type == TypeTextArea) { char *text = w->sgml_text.text; XmTextSetString(child,text?text:""); } else if (type == TypeSelect) { Boolean selected = w->sgml_input_text.selected; int n=0; Arg arglist[10]; Widget list; Widget p = XtParent((Widget) w); XtSetArg(arglist[n],SGMLNuserdata,&list); n++; XtGetValues(p,arglist,n); n = 0; if (XtIsSubclass(list,xmListWidgetClass)) { XmString Text; char *q, *p, *text = XtNewString(w->sgml_text.text); /* Strip off leading and trailing white-space */ for (p = text ; *p && isspace(*p) ; p++); for (q = p + Strlen(p) ; q-- > p && isspace(*q) ; ) *q = '\0'; if (child) XmListDeselectAllItems(list); Text = XmStringCreateSimple(p); if (selected) { int nsel, i; XmString *List, *NewList; n = 0; XtSetArg(arglist[n],XmNselectedItems,&List); n++; XtSetArg(arglist[n],XmNselectedItemCount,&nsel); n++; XtGetValues(list,arglist,n); n = 0; NewList = (XmString *) XtMalloc((nsel+1) * sizeof(XmString *)); for (i = 0; i < nsel; i++) NewList[i] = List[i]; NewList[nsel++] = Text; XtSetArg(arglist[n],XmNselectedItems,NewList); n++; XtSetArg(arglist[n],XmNselectedItemCount,nsel); n++; XtSetValues(list,arglist,n); XtFree((char *) NewList); } XmStringFree(Text); XtFree(text); } else if (selected) { n = 0; XtSetArg(arglist[n],XmNmenuHistory,child); n++; XtSetValues(list,arglist,n); } } else if (type == TypeCheckbox || type == TypeRadio) { Boolean set = w->sgml_input_text.checked; XmToggleButtonSetState(child,set,FALSE); } } static void Reset(reset,new) Widget reset; Widget new; { if (SGMLIsCompositeText(new)) { SGMLCompositeTextObject w = (SGMLCompositeTextObject) new; Widget *children = w->sgml_composite_text.children; int n = w->sgml_composite_text.num_children; for (; n--; ) Reset(reset,*children++); } else if (SGMLIsInputText(new)) ResetAction(new); } /* * This routine is used to encode a search string * ASSUMES ascii character set */ static char* Encode(search) char *search; { static Boolean isAcceptable[96] = /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ { 0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0, /* 2x !"#$%&'()*+,-./ */ 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, /* 3x 0123456789:;<=>? */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4x @ABCDEFGHIJKLMNO */ 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1, /* 5X PQRSTUVWXYZ[\]^_ */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6x `abcdefghijklmno */ 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0 };/* 7X pqrstuvwxyz{\}~ DEL */ if (!search) return; else { char *result = XtMalloc(3*Strlen(search) + 1); char *p, *s, *e, *q; for (s = search ; *s && isspace(*s); s++); for (e = s + Strlen(s) ; e>s && isspace(*(e-1)) ; e--); for (q = result , p = s ; p= 32 && c<= 127 && isAcceptable[c-32]) *q++ = (char) c; else { sprintf(q,"%%%2x",c); q += 3; } } *q = '\0'; return result; } } static void PutResult(buffer,name,value) char **buffer, *name, *value; { char *old = *buffer; char *ename = Encode(name); char *evalue = Encode(value); char *new = (char *) XtMalloc(Strlen(old) + Strlen(ename) + Strlen(evalue) + 3); sprintf(new,"%s%s=%s&",old?old:"",ename,evalue); XtFree(old); XtFree(ename); XtFree(evalue); *buffer = new; } static void ActivateAction(w,ActivateRoutine,Closure) SGMLInputTextObject w; void (*ActivateRoutine)(); void *Closure; { XrmQuark type = w->sgml_input_text.type; Widget child = w->sgml_input_text.child; char *name = w->sgml_input_text.name; if (type == TypeText) { char *value = XmTextFieldGetString(child); ActivateRoutine(Closure,name,value); XtFree(value); } else if (type == TypePassword) { char *value = w->sgml_input_text.passwd; ActivateRoutine(Closure,name,value); } else if (type == TypeHidden) { char *value = w->sgml_input_text.value; ActivateRoutine(Closure,name,value); } else if (type == TypeCheckbox || type == TypeRadio) { Boolean set = XmToggleButtonGetState(child); if (set) { char *value = w->sgml_input_text.value; ActivateRoutine(Closure,name,value?value:"on"); } } else if (type == TypeTextArea) { char *value = XmTextGetString(child); ActivateRoutine(Closure,name,value); } else if (type == TypeSelect) { Boolean selected = w->sgml_input_text.selected; int n=0; Arg arglist[10]; Widget list; Widget p = XtParent((Widget) w); XtSetArg(arglist[n],SGMLNuserdata,&list); n++; XtGetValues(p,arglist,n); n = 0; if (XtIsSubclass(list,xmListWidgetClass)) { static int ns; static int *positions = NULL; static int position; char *name = XtName(list); char *text = w->sgml_text.text; if (child) /* Only the first item in the list has a child */ { XtFree((char *) positions); position = 0; if (!XmListGetSelectedPos(list,&positions,&ns)) { positions = NULL; ns = 0; } } if (text && *text && option) { position++; for (n = 0; n < ns ; n++) if (position == positions[n]) { char *value = w->sgml_input_text.value; ActivateRoutine(Closure,name,value); } } } else { Widget menuHistory; XtSetArg(arglist[n],XmNmenuHistory,&menuHistory); n++; XtGetValues(list,arglist,n); n = 0; if (menuHistory == child) { char *value = w->sgml_input_text.value; char *name = XtName(list); ActivateRoutine(Closure,name,value); } } } option = (type == TypeOption); } static void ActivateChain(activate,new,ActivateRoutine,Closure) Widget activate; Widget new; void (*ActivateRoutine)(); void * Closure; { if (SGMLIsCompositeText(new)) { SGMLCompositeTextObject w = (SGMLCompositeTextObject) new; Widget *children = w->sgml_composite_text.children; int n = w->sgml_composite_text.num_children; for (; n--; ) ActivateChain(activate,*children++,ActivateRoutine,Closure); } else if (SGMLIsInputText(new)) ActivateAction(new,ActivateRoutine,Closure); } static void Activate(activate,form) Widget activate; Widget form; { char *Buffer = NULL; ActivateChain(activate,form,PutResult,&Buffer); if (*Buffer) *(Buffer + Strlen(Buffer) - 1) = '\0'; SGMLFormSetResult(form,Buffer); } static void ActivateImage(activate,form,cb) Widget activate; Widget form; XmPushButtonCallbackStruct *cb; { char *Buffer = NULL; ActivateChain(activate,form,PutResult,&Buffer); if (cb->event->type == ButtonPress || cb->event->type == ButtonRelease) { XButtonEvent *be = (XButtonEvent *) cb->event; char *name = (char *) XtMalloc(Strlen(XtName(activate)) + 10); char value[20]; Dimension hT, mH, mW, sT ,mL, mT; Arg arglist[10]; int n = 0; Position x, y; XtSetArg(arglist[n],XmNhighlightThickness, &hT); n++; XtSetArg(arglist[n],XmNmarginHeight, &mH); n++; XtSetArg(arglist[n],XmNmarginWidth, &mW); n++; XtSetArg(arglist[n],XmNshadowThickness, &sT); n++; XtSetArg(arglist[n],XmNmarginLeft, &mL); n++; XtSetArg(arglist[n],XmNmarginTop, &mT); n++; XtGetValues(activate,arglist,n); x = be->x - hT - mW - sT - mL; y = be->y - hT - mH - sT - mT; sprintf(name,"%s.x",XtName(activate)); sprintf(value,"%d",x<0?0:x); PutResult(&Buffer,name,value); sprintf(name,"%s.y",XtName(activate)); sprintf(value,"%d",y<0?0:y); PutResult(&Buffer,name,value); XtFree(name); } if (*Buffer) *(Buffer + Strlen(Buffer) - 1) = '\0'; SGMLFormSetResult(form,Buffer); } static void RadioAction(radio,w) Widget radio; SGMLInputTextObject w; { Widget c2 = w->sgml_container_text.child; if (w->sgml_input_text.type != TypeRadio) return; if (radio->core.xrm_name != c2->core.xrm_name) return; XmToggleButtonSetState(c2,(radio == c2),FALSE); } static void Radio(radio,new) Widget radio; Widget new; { if (SGMLIsCompositeText(new)) { SGMLCompositeTextObject w = (SGMLCompositeTextObject) new; Widget *children = w->sgml_composite_text.children; int n = w->sgml_composite_text.num_children; for (; n--; ) Radio(radio,*children++); } else if (SGMLIsInputText(new)) RadioAction(radio,new); } /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLInputTextObject request, new; { Widget parent, child, ichild; XrmQuark type = new->sgml_input_text.type; char *name = new->sgml_input_text.name; char *value = new->sgml_input_text.value; Dimension sT, hT, mH, mB; XmFontList font = XmFontListCreate(new->sgml_text.font,XmSTRING_DEFAULT_CHARSET); int n=0; Arg arglist[20]; if (name) new->sgml_input_text.name = XtNewString(name); if (value) new->sgml_input_text.value = XtNewString(value); new->sgml_input_text.passwd = NULL; for (parent = XtParent((Widget) new); !XtIsWidget(parent) ; parent = XtParent(parent)); XtSetArg(arglist[n],XmNuserData,new); n++; XtSetArg(arglist[n],XmNfontList,font); n++; if (type == TypeSubmit) { Widget form; XmString Value; if (!value) value = "Submit Query"; Value = XmStringCreateSimple(value); XtSetArg(arglist[n],XmNlabelString,Value); n++; ichild = child = XtCreateWidget(name,xmPushButtonWidgetClass,parent,arglist,n); n = 0; XtSetArg(arglist[n],XmNshadowThickness, &sT); n++; XtSetArg(arglist[n],XmNhighlightThickness,&hT); n++; XtSetArg(arglist[n],XmNmarginHeight, &mH); n++; XtSetArg(arglist[n],XmNmarginBottom, &mB); n++; XtGetValues(child,arglist,n); new->sgml_container_text.vertical_offset = -sT - hT - mH - mB - new->sgml_text.descent; XmStringFree(Value); for (form = (Widget) new ; form ; form = XtParent(form)) if (SGMLIsFormText(form)) { XtAddCallback(child,XmNactivateCallback,(XtCallbackProc) Activate,(XtPointer) form); break; } } else if (type == TypeReset) { Widget form; XmString Value; if (!value) value = "Reset"; Value = XmStringCreateSimple(value); XtSetArg(arglist[n],XmNlabelString,Value); n++; ichild = child = XtCreateWidget(name,xmPushButtonWidgetClass,parent,arglist,n); n = 0; XtSetArg(arglist[n],XmNshadowThickness, &sT); n++; XtSetArg(arglist[n],XmNhighlightThickness,&hT); n++; XtSetArg(arglist[n],XmNmarginHeight, &mH); n++; XtSetArg(arglist[n],XmNmarginBottom, &mB); n++; XtGetValues(child,arglist,n); new->sgml_container_text.vertical_offset = -sT - hT - mH - mB - new->sgml_text.descent; XmStringFree(Value); for (form = (Widget) new ; form ; form = XtParent(form)) if (SGMLIsFormText(form)) { XtAddCallback(child,XmNactivateCallback,(XtCallbackProc) Reset,(XtPointer) form); break; } } else if (type == TypePassword || type == TypeText) { Widget form; int size = new->sgml_input_text.size; int max = new->sgml_input_text.maxlength; if (size == 0) size = 20; XtSetArg(arglist[n],XmNuserData,new); n++; XtSetArg(arglist[n],XmNcolumns,size); n++; if (max) { XtSetArg(arglist[n],XmNmaxLength,max); n++; } if (value) { XtSetArg(arglist[n],XmNvalue,value); n++; } ichild = child = XtCreateWidget(name,xmTextFieldWidgetClass,parent,arglist,n); n = 0; XtSetArg(arglist[n],XmNshadowThickness, &sT); n++; XtSetArg(arglist[n],XmNhighlightThickness,&hT); n++; XtSetArg(arglist[n],XmNmarginHeight, &mH); n++; XtGetValues(child,arglist,n); new->sgml_container_text.vertical_offset = -sT - hT - mH - new->sgml_text.descent; if (type == TypePassword) { new->sgml_input_text.passwd = XtNewString(value); XtAddCallback(child, XmNmodifyVerifyCallback,(XtCallbackProc) check_passwd, (XtPointer) &new->sgml_input_text.passwd); } if (new->sgml_input_text.auto_submit) { for (form = (Widget) new ; form ; form = XtParent(form)) if (SGMLIsFormText(form)) { XtAddCallback(child,XmNactivateCallback,(XtCallbackProc) Activate,(XtPointer) form); break; } } } else if (type == TypeTextArea) { int rows = new->sgml_input_text.rows; int cols = new->sgml_input_text.cols; char *text = new->sgml_text.text; if (rows == 0) rows = 20; if (cols == 0) cols = 20; XtSetArg(arglist[n],XmNeditMode,XmMULTI_LINE_EDIT); n++; XtSetArg(arglist[n],XmNcolumns,cols); n++; XtSetArg(arglist[n],XmNrows,rows); n++; XtSetArg(arglist[n],XmNvalue,text); n++; ichild = XmCreateScrolledText(parent,name,arglist,n); child = XtParent(ichild); XtUnmanageChild(child); XtManageChild(ichild); } else if (type == TypeImage) { Widget form; XtSetArg(arglist[n],XmNlabelType,XmPIXMAP); n++; XtSetArg(arglist[n],XmNmarginWidth,0); n++; XtSetArg(arglist[n],XmNmarginHeight,0); n++; XtSetArg(arglist[n],XmNlabelPixmap,new->sgml_input_text.bomb); n++; ichild = child = XtCreateWidget(name,xmPushButtonWidgetClass,parent,arglist,n); n = 0; XtSetArg(arglist[n],XmNshadowThickness, &sT); n++; XtSetArg(arglist[n],XmNhighlightThickness,&hT); n++; XtSetArg(arglist[n],XmNmarginHeight, &mH); n++; XtSetArg(arglist[n],XmNmarginBottom, &mB); n++; XtGetValues(child,arglist,n); new->sgml_container_text.vertical_offset = -sT - hT - mH - mB - new->sgml_text.descent; for (form = (Widget) new ; form ; form = XtParent(form)) if (SGMLIsFormText(form)) { XtAddCallback(child,XmNactivateCallback,(XtCallbackProc) ActivateImage,(XtPointer) form); break; } } else if (type == TypeOption) { option_selected = new->sgml_input_text.selected; option_value = new->sgml_input_text.value; child = ichild = NULL; } else if (type == TypeSelect) { char *text = XtNewString(new->sgml_text.text); Boolean multiple = new->sgml_input_text.multiple; int nn=0; Arg argl[10]; Widget w; Widget p = XtParent((Widget) new); XtSetArg(argl[nn],SGMLNuserdata,&w); nn++; XtGetValues(p,argl,nn); if (!w) { int size = new->sgml_input_text.size; if (size > 1 || multiple) { if (size) { XtSetArg(arglist[n],XmNvisibleItemCount,size); n++; } XtSetArg(arglist[n],XmNselectionPolicy,multiple?XmEXTENDED_SELECT:XmBROWSE_SELECT); n++; w = ichild = XmCreateScrolledList(parent,name,arglist,n); n = 0; XtSetArg(arglist[n],XmNshadowThickness, &sT); n++; XtSetArg(arglist[n],XmNhighlightThickness,&hT); n++; XtSetArg(arglist[n],XmNlistMarginHeight, &mH); n++; XtGetValues(ichild,arglist,n); new->sgml_container_text.vertical_offset = -sT - hT - 2*mH - new->sgml_text.descent; n = 0; XtSetArg(arglist[n],SGMLNuserdata,w); n++; XtSetValues(p,arglist,n); child = XtParent(ichild); XtUnmanageChild(child); XtManageChild(ichild); } else { Widget menu; menu = XmCreatePulldownMenu(parent,name,arglist,n); XtSetArg(arglist[n],XmNlabelString,emptyLabel); n++; XtSetArg(arglist[n],XmNsubMenuId,menu); n++; w = ichild = child = XmCreateOptionMenu(parent,name,arglist,n); n = 0; XtSetArg(arglist[n],XmNshadowThickness, &sT); n++; XtSetArg(arglist[n],XmNmarginHeight, &mH); n++; XtGetValues(child,arglist,n); new->sgml_container_text.vertical_offset = -sT - 2*mH - new->sgml_text.descent; n = 0; XtSetArg(arglist[n],SGMLNuserdata,w); n++; XtSetValues(p,arglist,n); } } else ichild = child = 0; if (text && *text) { char *q, *p, *r = XtNewString(text); /* Strip off leading and trailing white-space */ for (p = r; *p && isspace(*p); p++); for (q = p + Strlen(p); q-- > p && isspace(*q); ) *q = '\0'; if (option || *p) { XmString Text; if (!*p) p = ""; Text = XmStringCreateSimple(p); if (XtIsSubclass(w,xmListWidgetClass)) { XmListAddItem(w,Text,0); if (option_selected) { int nsel, i; XmString *List, *NewList; n = 0; XtSetArg(arglist[n],XmNselectedItems,&List); n++; XtSetArg(arglist[n],XmNselectedItemCount,&nsel); n++; XtGetValues(w,arglist,n); n = 0; NewList = (XmString *) XtMalloc((nsel+1) * sizeof(XmString *)); for (i = 0; i < nsel; i++) NewList[i] = List[i]; NewList[nsel++] = Text; XtSetArg(arglist[n],XmNselectedItems,NewList); n++; XtSetArg(arglist[n],XmNselectedItemCount,nsel); n++; XtSetValues(w,arglist,n); XtFree((char *) NewList); } } else { Widget menu; n = 0; XtSetArg(arglist[n],XmNsubMenuId,&menu); n++; XtGetValues(w,arglist,n); n = 0; XtSetArg(arglist[n],XmNlabelString,Text); n++; XtSetArg(arglist[n],XmNfontList,font); n++; ichild = XtCreateManagedWidget(p,xmPushButtonWidgetClass,menu,arglist,n); if (option_selected) { n = 0; XtSetArg(arglist[n],XmNmenuHistory,ichild); n++; XtSetValues(w,arglist,n); } } XmStringFree(Text); } if (option_value && *option_value) { XtFree(r); new->sgml_input_text.value = XtNewString(option_value); } else new->sgml_input_text.value = p; } new->sgml_input_text.selected = option_selected; XtFree(text); } else if (type == TypeCheckbox) { Boolean set = new->sgml_input_text.checked; XtSetArg(arglist[n],XmNspacing,0); n++; XtSetArg(arglist[n],XmNmarginBottom,0); n++; XtSetArg(arglist[n],XmNset,set); n++; XtSetArg(arglist[n],XmNlabelString,emptyLabel); n++; ichild = child = XtCreateWidget(name,xmToggleButtonWidgetClass,parent,arglist,n); n = 0; XtSetArg(arglist[n],XmNshadowThickness, &sT); n++; XtSetArg(arglist[n],XmNhighlightThickness,&hT); n++; XtSetArg(arglist[n],XmNmarginHeight, &mH); n++; XtGetValues(child,arglist,n); new->sgml_container_text.vertical_offset = -sT - hT - mH - new->sgml_text.descent; } else if (type == TypeRadio) { Widget form; Boolean set = new->sgml_input_text.checked; XtSetArg(arglist[n],XmNset,set); n++; XtSetArg(arglist[n],XmNindicatorType,XmONE_OF_MANY); n++; XtSetArg(arglist[n],XmNlabelString,emptyLabel); n++; XtSetArg(arglist[n],XmNspacing,0); n++; XtSetArg(arglist[n],XmNmarginWidth,0); n++; XtSetArg(arglist[n],XmNmarginHeight,0); n++; XtSetArg(arglist[n],XmNmarginLeft,0); n++; XtSetArg(arglist[n],XmNmarginRight,0); n++; XtSetArg(arglist[n],XmNmarginTop,0); n++; XtSetArg(arglist[n],XmNmarginBottom,0); n++; ichild = child = XtCreateWidget(name,xmToggleButtonWidgetClass,parent,arglist,n); n = 0; XtSetArg(arglist[n],XmNshadowThickness, &sT); n++; XtSetArg(arglist[n],XmNhighlightThickness,&hT); n++; XtSetArg(arglist[n],XmNmarginHeight, &mH); n++; XtGetValues(child,arglist,n); new->sgml_container_text.vertical_offset = -sT - hT - mH - new->sgml_text.descent; for (form = (Widget) new ; form ; form = XtParent(form)) if (SGMLIsFormText(form)) { XtAddCallback(child,XmNvalueChangedCallback,(XtCallbackProc) Radio, (XtPointer) form); break; } } else ichild = child = NULL; XmFontListFree(font); new->sgml_container_text.child = child; new->sgml_input_text.child = ichild; if (new->sgml_input_text.image) SetupImage(new); option = (type == TypeOption); } /*--------------------------------------------------------------*/ /* Destroy the widget: release all memory allocated */ /*--------------------------------------------------------------*/ static void Destroy (w) SGMLInputTextObject w; { XtFree(w->sgml_input_text.name); XtFree(w->sgml_input_text.value); XtFree(w->sgml_input_text.passwd); if (w->sgml_input_text.image) GIFFreeFile(w->sgml_input_text.image); } /*------------------------------------------------------------------*/ /* SetValues : */ /*------------------------------------------------------------------*/ static Boolean SetValues (current, request, new) SGMLInputTextObject current, request, new; { #define HAS_CHANGED(a) (new->sgml_input_text.a != current->sgml_input_text.a) #define REJECT(a) if HAS_CHANGED(a) new->sgml_input_text.a != current->sgml_input_text.a REJECT(name); REJECT(value); REJECT(passwd); if (HAS_CHANGED(image)) { SetupImage(new); if (current->sgml_input_text.image) GIFFreeFile(current->sgml_input_text.image); } #undef HAS_CHANGED #undef REJECT return FALSE; } /*--------------------------------------------------------------*/ /* Inherit Changes */ /*--------------------------------------------------------------*/ static Boolean InheritChanges(w,inputMask) SGMLInputTextObject w; int inputMask; { if (inputMask & gcMask) { int n=0; Arg arglist[10]; XmFontList font = XmFontListCreate(w->sgml_text.font,XmSTRING_DEFAULT_CHARSET); XtSetArg(arglist[n],XmNfontList,font); n++; if (w->sgml_input_text.child) XtSetValues(w->sgml_input_text.child,arglist,n); XmFontListFree(font); } return FALSE; } /*-----------------------------------------------------------------------*/ /* Create a new SGMLInputTextObject */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateInputText(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLInputTextObjectClass,parent,al,ac); } midaswww-2.1/SGMLListText.c100666 21345 173 47410 5554674754 14066 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLListTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a list text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include "SGMLListTextP.h" #include "SGMLMarkerText.h" /* Private functions */ /* Widget class methods */ static void ClassInitialize(); static void Initialize(); static void Destroy(); static void ComputeSize(); static void Redisplay(); static void CallAdjustSize(); #define Offset(field) XtOffsetOf(SGMLListTextRec,sgml_list_text.field) static XtResource resources[] = { {SGMLNnumBullets, XtCReadOnly, XtRInt, sizeof(int), Offset(num_bullets), XtRImmediate, (XtPointer) 0}, {SGMLNallocBullets, XtCReadOnly, XtRInt, sizeof(int), Offset(alloc_bullets), XtRImmediate, (XtPointer) 0}, {SGMLNbulletType, SGMLCBulletType, SGMLRBulletType, sizeof(int), Offset(bullet_type), XtRImmediate, (XtPointer) SGMLBULLET_DEFAULT}, {SGMLNbulletSize, SGMLCBulletSize, XtRDimension, sizeof(Dimension), Offset(bullet_size), XtRImmediate, (XtPointer) 11}, {SGMLNbulletIndent, SGMLCBulletIndent, XtRDimension, sizeof(Dimension), Offset(bullet_indent), XtRImmediate, (XtPointer) 6}, {SGMLNbulletMarker, SGMLCBulletMarker, SGMLRQuark, sizeof(XrmQuark), Offset(bullet_marker), XtRImmediate, (XtPointer) NULL}, {SGMLNbulletColor, SGMLCBulletColor, XtRPixel, sizeof(Pixel), Offset(bullet_color), XtRImmediate, (XtPointer) 0} }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLListTextClassRec sGMLListTextClassRec = { { (WidgetClass) &sGMLCompositeTextClassRec, /* superclass */ "SGMLListText", /* class_name */ sizeof(SGMLListTextRec), /* widget_size */ ClassInitialize, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ Destroy, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { ComputeSize, /* compute_size */ SGMLInheritAdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ Redisplay, /* expose */ SGMLInheritActivate, /* activate */ SGMLInheritHilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ SGMLInheritCallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ NULL, /* sgml_set_values */ NULL, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ SGMLInheritHiliteSelection, /* hilite_selection */ SGMLInheritXYToPos, /* xy_to_pos */ SGMLInheritPosToXY, /* pos_to_xy */ SGMLInheritDumpText, /* dump_text */ NULL, /* extension */ }, { XtInheritGeometryManager, /* geometry_manager */ XtInheritChangeManaged, /* change_managed */ XtInheritInsertChild, /* insert_child */ XtInheritDeleteChild, /* delete_child */ CallAdjustSize, /* call_adjust_size */ NULL, /* ignore */ }, { NULL /* ignore */ } }; WidgetClass sGMLListTextObjectClass = (WidgetClass) &sGMLListTextClassRec; #define done(address, type) \ { (*toVal).size = sizeof(type); (*toVal).addr = (caddr_t) address; } static struct _namepair { XrmQuark quark; char *name; int bullet; } names[] = { { NULLQUARK, "ordered" ,SGMLBULLET_ORDERED}, { NULLQUARK, "unordered" ,SGMLBULLET_UNORDERED}, { NULLQUARK, "default" ,SGMLBULLET_DEFAULT}, { NULLQUARK, "bullet" ,SGMLBULLET_BULLET}, { NULLQUARK, "diamond" ,SGMLBULLET_DIAMOND}, { NULLQUARK, "square" ,SGMLBULLET_SQUARE}, { NULLQUARK, "numeric" ,SGMLBULLET_NUMERIC}, { NULLQUARK, "lower" ,SGMLBULLET_LOWER}, { NULLQUARK, "upper" ,SGMLBULLET_UPPER}, { NULLQUARK, "arrow" ,SGMLBULLET_ARROW}, { NULLQUARK, "linkedarrow",SGMLBULLET_LINKEDARROW}, { NULLQUARK, NULL ,SGMLBULLET_DEFAULT} }; void CvtStringToBullet (args, num_args, fromVal, toVal) XrmValuePtr args; Cardinal *num_args; XrmValuePtr fromVal; XrmValuePtr toVal; { static Boolean haveQuarks = FALSE; char lowerName[40]; XrmQuark q; char *s, *t; struct _namepair *np; if (*num_args != 0) XtWarningMsg("wrongParameters","cvtStringToBullet","XtToolkitError", "String to Bullet conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); if (!haveQuarks) { for (np = names; np->name; np++) { np->quark = XrmStringToQuark (np->name); } haveQuarks = TRUE; } s = (char *) fromVal->addr; if (strlen(s) < sizeof lowerName) { for (t=lowerName; (*t++ = tolower(*s++)) != '\0'; ); q = XrmStringToQuark (lowerName); for (np = names; np->name; np++) { if (np->quark == q) { done (&np->bullet,int); return; } } } XtStringConversionWarning((char *) fromVal->addr, SGMLRBulletType); } /*--------------------------------------------------------------*/ /* ClassInitialize: */ /*--------------------------------------------------------------*/ static void ClassInitialize() { XtAddConverter (XtRString, SGMLRBulletType, CvtStringToBullet, (XtConvertArgList) NULL, (Cardinal) 0); } /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLListTextObject request, new; { Widget parent; int newtype = new->sgml_list_text.bullet_type ; new->sgml_list_text.bullets = NULL; new->sgml_list_text.num_bullets = 0; new->sgml_list_text.alloc_bullets = 0; if (newtype == SGMLBULLET_DEFAULT || newtype == SGMLBULLET_UNORDERED || newtype == SGMLBULLET_ORDERED ) { for (parent = XtParent((Widget) new); SGMLIsText(parent); parent = XtParent(parent)) if (SGMLIsListText(parent)) { SGMLListTextObject t = (SGMLListTextObject) parent; int type = t->sgml_list_text.bullet_type ; if (newtype == SGMLBULLET_DEFAULT) { if (type == SGMLBULLET_BULLET ) newtype = SGMLBULLET_DIAMOND; else if (type == SGMLBULLET_DIAMOND ) newtype = SGMLBULLET_SQUARE; else if (type == SGMLBULLET_SQUARE ) newtype = SGMLBULLET_BULLET; else if (type == SGMLBULLET_NUMERIC ) newtype = SGMLBULLET_UPPER; else if (type == SGMLBULLET_UPPER ) newtype = SGMLBULLET_LOWER; else if (type == SGMLBULLET_LOWER ) newtype = SGMLBULLET_NUMERIC; else newtype = type; } else if (newtype == SGMLBULLET_UNORDERED) { if (type == SGMLBULLET_BULLET ) newtype = SGMLBULLET_DIAMOND; else if (type == SGMLBULLET_DIAMOND ) newtype = SGMLBULLET_SQUARE; else if (type == SGMLBULLET_SQUARE ) newtype = SGMLBULLET_BULLET; else newtype = SGMLBULLET_BULLET; } else { if (type == SGMLBULLET_NUMERIC ) newtype = SGMLBULLET_UPPER; else if (type == SGMLBULLET_UPPER ) newtype = SGMLBULLET_LOWER; else if (type == SGMLBULLET_LOWER ) newtype = SGMLBULLET_NUMERIC; else newtype = SGMLBULLET_NUMERIC; } break; } if (newtype == SGMLBULLET_DEFAULT ) newtype = SGMLBULLET_BULLET; else if (newtype == SGMLBULLET_UNORDERED) newtype = SGMLBULLET_BULLET; else if (newtype == SGMLBULLET_ORDERED ) newtype = SGMLBULLET_NUMERIC; new->sgml_list_text.bullet_type = newtype; } } /*--------------------------------------------------------------*/ /* Destroy the widget: release all memory allocated */ /*--------------------------------------------------------------*/ static void Destroy (w) SGMLListTextObject w; { XtFree((char *) w->sgml_list_text.bullets); } /*--------------------------------------------------------------*/ /* Redisplay */ /*--------------------------------------------------------------*/ static void Redisplay(t,event,region,Offset) SGMLListTextObject t; XEvent *event; Region region; SGMLPosition Offset; { Display *dpy = XtDisplayOfObject((Widget) t); Window wind = XtWindowOfObject((Widget) t); GC gc = t->sgml_text.gc; int i; Dimension width = t->sgml_list_text.bullet_size; Dimension height = t->sgml_list_text.bullet_size; SGMLTextObjectClass superclass = (SGMLTextObjectClass) XtSuperclass((Widget) t); /* * Invoke our superclasses ReDisplay routine ... then draw bullets */ (*superclass->sgml_text_class.expose)(t,event,region,Offset); if (t->sgml_list_text.bullet_type == SGMLBULLET_LINKEDARROW) { Position x = t->sgml_list_text.bullets[0].x - 2*width; Position y1 = t->sgml_list_text.bullets[0].top; Position y2 = t->sgml_list_text.bullets[t->sgml_list_text.num_bullets - 1].top + height/2; if (XRectInRegion(region,x,y1,1,y2 - y1)) XDrawLine(dpy,wind,gc,x,y1,x,y2); } for (i = 0; i < t->sgml_list_text.num_bullets; i++ ) { Position x = t->sgml_list_text.bullets[i].x - width; SGMLPosition Y = t->sgml_list_text.bullets[i].top; Position y = Y - Offset; if (y != Y) break; if(XRectInRegion(region,x,y,width,height) != RectangleOut) switch (t->sgml_list_text.bullet_type) { default: case SGMLBULLET_BULLET: XFillArc(dpy,wind,gc,x,y,width,height,0,360*64); break; case SGMLBULLET_DIAMOND: { XPoint points[4]; points[0].x = x; points[0].y = y + height/2; points[1].x = x + width/2; points[1].y = y; points[2].x = x + width; points[2].y = y + height/2; points[3].x = x + width/2; points[3].y = y + height; XFillPolygon(dpy,wind,gc,points,XtNumber(points),Convex,CoordModeOrigin); } break; case SGMLBULLET_SQUARE: XFillRectangle(dpy,wind,gc,x,y,width,height); break; case SGMLBULLET_ARROW: case SGMLBULLET_LINKEDARROW: { XPoint points[3]; points[0].x = x + width/2; points[0].y = y; points[1].x = x + width; points[1].y = y + height/2; points[2].x = x + width/2; points[2].y = y + height; XFillPolygon(dpy,wind,gc,points,XtNumber(points),Convex,CoordModeOrigin); XDrawLine(dpy,wind,gc,x - width,y + height/2,x + width/2,y + height/2); } break; case SGMLBULLET_NUMERIC: case SGMLBULLET_UPPER: case SGMLBULLET_LOWER: { char text[8]; char *upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char *lower = "abcdefghijklmnopqrstuvwxyz"; int l; Dimension size; if (t->sgml_list_text.bullet_type == SGMLBULLET_NUMERIC) { sprintf(text,"%d",i+1); l = strlen(text); } else if (t->sgml_list_text.bullet_type == SGMLBULLET_UPPER ) { *text = upper[i%26]; l = 1; } else { *text = lower[i%26]; l = 1; } text[l++] = '.'; size = XTextWidth(t->sgml_text.font,text,l); XDrawString(dpy,wind,gc,x+width-size,y+height,text,l); } break; } } } /*------------------------------------------------------------------*/ /* Adjust the size of a child */ /*------------------------------------------------------------------*/ static void CallAdjustSize(child,y,ascent,descent) Widget child; Position y; Dimension ascent, descent; { SGMLListTextObject w = (SGMLListTextObject) XtParent(child); SGMLCompositeTextObjectClass superclass = (SGMLCompositeTextObjectClass) XtSuperclass((Widget) w); int i; /*----------------------------------------------------------------*/ /* If there is a bullet on this line it needs to be adjusted too */ /*----------------------------------------------------------------*/ for (i = 0; i < w->sgml_list_text.num_bullets; i++ ) { if (y == w->sgml_list_text.bullets[i].y) w->sgml_list_text.bullets[i].top = y + ascent - w->sgml_list_text.bullet_size; } /*----------------------------------------------------------------*/ /* Then invoke superclasses CallAdjustSize method */ /*----------------------------------------------------------------*/ (*superclass->sgml_composite_text_class.call_adjust_size)(child,y,ascent,descent); } /*--------------------------------------------------------------*/ /* Compute Size: */ /*--------------------------------------------------------------*/ static void ComputeSize(w,geom,Adjust,Closure) SGMLListTextObject w; SGMLGeometry *geom; AdjustSizeProc Adjust; Opaque Closure; { int n = w->sgml_composite_text.num_children; int nb = 0; Boolean bullet; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; Dimension maxWidth; Position x = w->sgml_text.left_margin + w->sgml_text.left_indent - w->sgml_list_text.bullet_indent; Position xmin, xmax; XtFree((char *) w->sgml_list_text.bullets); w->sgml_list_text.bullets = NULL; w->sgml_list_text.num_bullets = 0; w->sgml_list_text.alloc_bullets = 0; /* * Break before? */ if ( w->sgml_text.break_before ) { _SGMLBreak(geom,w->sgml_text.space_before); } xmin = xmax = geom->coord.x; /* * Query children? */ for (bullet = TRUE; n-- > 0; children++, managed++) { if (bullet) { if ( nb == 0 || w->sgml_list_text.bullets[nb-1].x != x || w->sgml_list_text.bullets[nb-1].y != geom->coord.y) { if (nb == w->sgml_list_text.alloc_bullets) { w->sgml_list_text.alloc_bullets += 10; w->sgml_list_text.bullets = (BulletList) XtRealloc((char *)w->sgml_list_text.bullets, w->sgml_list_text.alloc_bullets * sizeof(BulletListItem)); } w->sgml_list_text.bullets[nb].x = x; w->sgml_list_text.bullets[nb].y = geom->coord.y; w->sgml_list_text.bullets[nb].top = geom->coord.y; w->sgml_list_text.num_bullets = ++nb; geom->coord.descent = 0; geom->coord.ascent = w->sgml_list_text.bullet_size; } bullet = FALSE; } if (*managed) { SGMLTextObject t = (SGMLTextObject) *children; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); (*childClass->sgml_text_class.compute_size)(*children,geom,CallAdjustSize,*children); bullet = SGMLIsMarkerText(*children) && (*children)->core.xrm_name == w->sgml_list_text.bullet_marker; if (t->sgml_text.margin < xmin) xmin = t->sgml_text.margin; if (t->sgml_text.margin + t->sgml_text.width > xmax) xmax = t->sgml_text.margin + t->sgml_text.width; } } /* * Break after? */ w->sgml_text.end = geom->coord; w->sgml_text.height = geom->coord.y + geom->coord.descent + geom->coord.ascent - w->sgml_text.begin.y; w->sgml_text.width = xmax - xmin; w->sgml_text.margin = xmin; if ( w->sgml_text.break_after ) { _SGMLBreak(geom,w->sgml_text.space_after); } w->sgml_text.size_valid = TRUE; } /*-----------------------------------------------------------------------*/ /* Create a new SGMLListTextObject */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateListText(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLListTextObjectClass,parent,al,ac); } midaswww-2.1/SGMLMarkerText.c100666 21345 173 63771 5554674754 14404 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLMarkerTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a marker text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include #include #include "SGMLMarkerTextP.h" /* Private functions */ static void SGMLDrawShadow(); #define BADIMAGE ((XImage *) -1) /* Widget class methods */ static void ComputeSize(); static void Initialize(); static void Destroy(); static Boolean SetValues(); static void Redisplay(); static void Hilite(); static void Activate(); static Boolean AdjustSize(); static void CallMapCallback(); #define Offset(field) XtOffsetOf(SGMLMarkerTextRec,sgml_marker_text.field) static XtResource resources[] = { {SGMLNcolumnAlign,SGMLCColumnAlign,XtRDimension,sizeof(Dimension), Offset (column_align),XtRImmediate,(XtPointer)0}, {SGMLNposition,SGMLCPosition,XtRPosition,sizeof(Position), Offset (position),XtRImmediate,(XtPointer)-9999}, {SGMLNpixmap,SGMLCPixmap,"Icon",sizeof(Pixmap), Offset (pixmap),XtRImmediate,(XtPointer)NULL}, {SGMLNbombPixmap,SGMLCPixmap,"Icon",sizeof(Pixmap), Offset (bomb_pixmap),XtRImmediate,(XtPointer)NULL}, {SGMLNimage,SGMLCImage,"Image",sizeof(GIFImage *), Offset (image),XtRImmediate,(XtPointer)NULL}, {SGMLNpixmapDepth,XtCReadOnly,XtRInt,sizeof(int), Offset (pixmap_depth), XtRImmediate, (XtPointer) 0}, {SGMLNdeleteImageWhenDone,SGMLCDeleteImageWhenDone,XtRBoolean,sizeof(Boolean), Offset (delete_image),XtRImmediate,(XtPointer)FALSE}, }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLMarkerTextClassRec sGMLMarkerTextClassRec = { { (WidgetClass) &sGMLTextClassRec, /* superclass */ "SGMLMarkerText", /* class_name */ sizeof(SGMLMarkerTextRec), /* widget_size */ NULL, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ Destroy, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ SetValues, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { ComputeSize, /* compute_size */ AdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ Redisplay, /* expose */ Activate, /* activate */ Hilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ CallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ NULL, /* sgml_set_values */ NULL, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ SGMLInheritHiliteSelection, /* hilite_selection */ SGMLInheritXYToPos, /* xy_to_pos */ SGMLInheritPosToXY, /* pos_to_xy */ SGMLInheritDumpText, /* dump_text */ NULL, /* extension */ }, { NULL, /* ignore */ } }; WidgetClass sGMLMarkerTextObjectClass = (WidgetClass) &sGMLMarkerTextClassRec; /*--------------------------------------------------------------*/ /* SetupPixmap: */ /*--------------------------------------------------------------*/ static void SetupPixmap(w) SGMLMarkerTextObject w; { Pixmap pixmap = w->sgml_marker_text.pixmap; Window root; int x,y; Display *dpy = XtDisplayOfObject((Widget) w); XGetGeometry(dpy,pixmap,&root,&x,&y,&w->sgml_marker_text.pixmap_width, &w->sgml_marker_text.pixmap_height, &w->sgml_marker_text.pixmap_border_width, &w->sgml_marker_text.pixmap_depth); /* * The pixmap must either have the same depth as the widgets window, or depth 1 */ if (w->sgml_marker_text.pixmap_depth != 1) { Widget parent = (Widget) w; for (; !XtIsWidget(parent) ; parent = XtParent(parent)); if (parent->core.depth != w->sgml_marker_text.pixmap_depth) { printf("Pixmap specified for SGMLHyperText has invalid depth\n"); w->sgml_marker_text.pixmap = (Pixmap)NULL; } } w->sgml_marker_text.image = NULL; } /*--------------------------------------------------------------*/ /* SetupImage: */ /*--------------------------------------------------------------*/ static void SetupImage(w) SGMLMarkerTextObject w; { Widget parent = (Widget) w; GIFImage *gifImage = w->sgml_marker_text.image; Window root; int x,y; Display *dpy = XtDisplayOfObject((Widget) w); w->sgml_marker_text.pixmap_width = gifImage->Width; w->sgml_marker_text.pixmap_height = gifImage->Height; w->sgml_marker_text.pixmap_border_width = 0; w->sgml_marker_text.ximage = (XImage *)NULL; w->sgml_marker_text.pixmap = (Pixmap)NULL; } /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLMarkerTextObject request, new; { Widget parent; XGCValues values; XtGCMask valueMask; Pixel top, bottom; Pixmap topPixmap, bottomPixmap; int n = 0; Arg arglist[10]; for (parent = (Widget) new; !XtIsSubclass(parent,xmManagerWidgetClass); parent = XtParent(parent)); XtSetArg(arglist[n],XmNbottomShadowColor,&bottom); n++; XtSetArg(arglist[n],XmNtopShadowColor,&top); n++; XtSetArg(arglist[n],XmNbottomShadowPixmap,&bottomPixmap); n++; XtSetArg(arglist[n],XmNtopShadowPixmap,&topPixmap); n++; XtGetValues(parent,arglist,n); valueMask = GCForeground; values.foreground = top; if (topPixmap != XmUNSPECIFIED_PIXMAP) { valueMask += GCTile + GCFillStyle; values.tile = topPixmap; values.fill_style = FillTiled; } new->sgml_marker_text.gc1 = XtGetGC((Widget) new, valueMask, &values); valueMask = GCForeground; values.foreground = bottom; if (bottomPixmap != XmUNSPECIFIED_PIXMAP) { valueMask += GCTile + GCFillStyle; values.tile = bottomPixmap; values.fill_style = FillTiled; } new->sgml_marker_text.gc2 = XtGetGC((Widget) new, valueMask, &values); new->sgml_marker_text.bomb_gc = NULL; if (new->sgml_marker_text.pixmap) SetupPixmap(new); else if (new->sgml_marker_text.image) SetupImage(new); } /*--------------------------------------------------------------*/ /* Destroy: */ /*--------------------------------------------------------------*/ static void Destroy(w) SGMLMarkerTextObject w; { if (w->sgml_marker_text.bomb_gc) XtReleaseGC((Widget) w,w->sgml_marker_text.bomb_gc); if (w->sgml_marker_text.delete_image) { if (w->sgml_marker_text.image ) GIFFreeFile(w->sgml_marker_text.image); else if (w->sgml_marker_text.pixmap) XFreePixmap(XtDisplayOfObject((Widget) w),w->sgml_marker_text.pixmap); } } /*------------------------------------------------------------------*/ /* SetValues : */ /*------------------------------------------------------------------*/ static Boolean SetValues (current, request, new) SGMLMarkerTextObject current, request, new; { #define HAS_CHANGED(a) (new->sgml_marker_text.a != current->sgml_marker_text.a) if (HAS_CHANGED(pixmap)) SetupPixmap(new); else if (HAS_CHANGED(image )) SetupImage(new); if (current->sgml_marker_text.delete_image) { if (HAS_CHANGED(image ) && current->sgml_marker_text.image ) GIFFreeFile(current->sgml_marker_text.image); else if (HAS_CHANGED(pixmap) && current->sgml_marker_text.pixmap) XFreePixmap(XtDisplayOfObject((Widget) new),current->sgml_marker_text.pixmap); } #undef HAS_CHANGED return FALSE; } /*--------------------------------------------------------------*/ /* Redisplay */ /*--------------------------------------------------------------*/ static void Redisplay(t,event,region,Offset) SGMLMarkerTextObject t; XEvent *event; Region region; SGMLPosition Offset; { Pixmap pixmap = t->sgml_marker_text.pixmap; GIFImage *gifImage = t->sgml_marker_text.image; if (pixmap || gifImage) { SGMLRendition *rendition = &t->sgml_text.normal_rendition; Dimension outlineSize = rendition->outline ? rendition->underline_height : 0; XRectangle rect; Region new = XCreateRegion(); Dimension gap = t->sgml_text.begin.ascent - t->sgml_marker_text.pixmap_height - outlineSize; Dimension gap2 = t->sgml_text.begin.descent - outlineSize; rect.x = t->sgml_text.margin; rect.y = t->sgml_text.begin.y + gap; rect.width = t->sgml_text.width; rect.height = t->sgml_text.height - gap - gap2; XUnionRectWithRegion(&rect,new,new); XIntersectRegion(new,region,new); if (!XEmptyRegion(new)) { Display *dpy = XtDisplayOfObject((Widget) t); Window wind = XtWindowOfObject((Widget) t); GC gc = t->sgml_text.gc; if (rendition->outline) { Region inside = XCreateRegion(); GC gc1 = t->sgml_marker_text.gc1; GC gc2 = t->sgml_marker_text.gc2; XRectangle inner; SGMLDrawShadow(dpy,wind,gc1,gc2,outlineSize,rect.x,rect.y,rect.width,rect.height); inner.x = rect.x + outlineSize; inner.y = rect.y + outlineSize; inner.width = rect.width - 2*outlineSize; inner.height = rect.height - 2*outlineSize; XUnionRectWithRegion(&inner,inside,inside); XIntersectRegion(inside,new,new); XDestroyRegion(inside); } if (!XEmptyRegion(new)) { XClipBox(new,&rect); if (pixmap) { handle_pixmap: /* Can jump here from image code below */ if (t->sgml_marker_text.pixmap_depth > 1) { XCopyArea(dpy, pixmap, wind, gc, rect.x - t->sgml_text.margin - outlineSize, rect.y - t->sgml_text.begin.y - gap -outlineSize, rect.width,rect.height,rect.x,rect.y); } else { XCopyPlane(dpy, pixmap, wind, gc, rect.x - t->sgml_text.margin - outlineSize, rect.y - t->sgml_text.begin.y - gap -outlineSize, rect.width,rect.height,rect.x,rect.y,1); } } else { XImage *image = t->sgml_marker_text.ximage; if (!image) { char message[256]; Widget parent = (Widget) t; for (; !XtIsWidget(parent) ; parent = XtParent(parent)); t->sgml_marker_text.ximage = image = GIFToXImage(parent,gifImage,message); if (!image) { printf("GIF conversion error: %s\n",message); image = BADIMAGE; } else { t->sgml_marker_text.pixmap = pixmap = GIFToPixmap(parent,gifImage,message); t->sgml_marker_text.pixmap_depth = parent->core.depth; if (pixmap) goto handle_pixmap; } } if (image == BADIMAGE) { GC gc = t->sgml_marker_text.bomb_gc; if (!gc) { XGCValues values; XtGCMask valueMask = 0; if (t->sgml_marker_text.bomb_pixmap) { valueMask = GCTile + GCFillStyle; values.tile = t->sgml_marker_text.bomb_pixmap; values.fill_style = FillTiled; } gc = t->sgml_marker_text.bomb_gc = XtGetGC((Widget) t, valueMask, &values); } XFillRectangle(dpy, wind, gc, rect.x,rect.y,rect.width,rect.height); } else XPutImage(dpy, wind, gc, image, rect.x - t->sgml_text.margin - outlineSize, rect.y - t->sgml_text.begin.y - gap - outlineSize, rect.x,rect.y,rect.width,rect.height); } } } XDestroyRegion(new); } } /*--------------------------------------------------------------*/ /* Compute Size: */ /*--------------------------------------------------------------*/ static void ComputeSize(w,geom,Adjust,Closure) SGMLMarkerTextObject w; SGMLGeometry *geom; AdjustSizeProc Adjust; Opaque Closure; { Dimension left_clearance = w->sgml_text.left_margin + w->sgml_text.left_indent; Dimension right_clearance = w->sgml_text.right_margin + w->sgml_text.right_indent; Pixmap pixmap = w->sgml_marker_text.pixmap; GIFImage *gifImage = w->sgml_marker_text.image; /* * Break? */ if (w->sgml_text.break_before == SGMLBREAK_ALWAYS) { _SGMLBreak(geom,w->sgml_text.space_before); } else if (w->sgml_marker_text.column_align) { Dimension x = geom->coord.x; if (x < left_clearance) x = 0; else { x -= left_clearance; if (geom->leave_space) x += 2 * w->sgml_text.spacing; } if (x%w->sgml_marker_text.column_align) x += w->sgml_marker_text.column_align - x%w->sgml_marker_text.column_align; x += left_clearance; geom->coord.x = x; geom->leave_space = FALSE; if (x + w->sgml_marker_text.column_align + right_clearance > geom->natural_width) { _SGMLBreak(geom,0); } } if (w->sgml_marker_text.position != -9999) { if (geom->leave_space) geom->coord.x += 2 * w->sgml_text.spacing; if (geom->coord.x > w->sgml_text.left_margin+w->sgml_text.left_indent+w->sgml_marker_text.position) { _SGMLBreak(geom,0); } geom->coord.x = w->sgml_text.left_margin+w->sgml_text.left_indent+w->sgml_marker_text.position; geom->leave_space = FALSE; geom->broken = FALSE; } if (pixmap || gifImage) { unsigned int width = w->sgml_marker_text.pixmap_width; unsigned int ascent = w->sgml_marker_text.pixmap_height; unsigned int descent = 0; SGMLRendition *rendition; rendition = &w->sgml_text.normal_rendition; if (rendition->outline) { width += 2*rendition->underline_height; ascent += rendition->underline_height; descent += rendition->underline_height; } if (geom->coord.x + w->sgml_text.spacing + width + right_clearance > geom->natural_width) { geom->coord.x = left_clearance; geom->coord.y += geom->coord.descent + geom->coord.ascent; geom->coord.descent = w->sgml_text.descent; geom->coord.ascent = w->sgml_text.ascent; } else if (geom->leave_space) geom->coord.x += w->sgml_text.spacing; if (ascent > geom->coord.ascent || descent > geom->coord.descent) { geom->coord.ascent = ascent; geom->coord.descent = descent; Adjust(Closure, geom->coord.y, ascent, descent); } if (left_clearance > geom->coord.x && geom->broken) geom->coord.x = left_clearance; w->sgml_text.begin = geom->coord; w->sgml_text.margin = geom->coord.x; geom->coord.x += width; geom->leave_space = TRUE; geom->broken = FALSE; if (geom->actual_width < left_clearance + width) geom->actual_width = left_clearance + width; w->sgml_text.height = geom->coord.ascent + geom->coord.descent; w->sgml_text.width = width; } else { w->sgml_text.height = 0; w->sgml_text.width = 0; } w->sgml_text.margin = geom->coord.x - w->sgml_text.width; w->sgml_text.end = geom->coord; if (w->sgml_text.break_after == SGMLBREAK_ALWAYS) { _SGMLBreak(geom,w->sgml_text.space_after); } w->sgml_text.size_valid = TRUE; } /*--------------------------------------------------------------*/ /* Hilite: */ /*--------------------------------------------------------------*/ static void Hilite(t,state) SGMLMarkerTextObject t; int state; { Display *dpy = XtDisplayOfObject((Widget) t); Window wind = XtWindowOfObject((Widget) t); SGMLRendition *rendition = &t->sgml_text.normal_rendition; Dimension outlineSize = rendition->outline ? rendition->underline_height : 0; Dimension gap = t->sgml_text.begin.ascent - t->sgml_marker_text.pixmap_height - outlineSize; Dimension gap2 = t->sgml_text.begin.descent - outlineSize; Position x = t->sgml_text.begin.x; Position y = t->sgml_text.begin.y + gap; Dimension width = t->sgml_text.width; Dimension height = t->sgml_text.height - gap - gap2; if (state != SGMLSELECT_WIDGET) return; /* do not anything except hilite widget */ if (t->sgml_marker_text.pixmap && t->sgml_marker_text.pixmap_depth == 1) { GC gc = t->sgml_text.invert_gc; XFillRectangle(dpy,wind,gc,x,y,width,height); } else if (rendition->outline) { GC gc1 = t->sgml_marker_text.gc1; GC gc2 = t->sgml_marker_text.gc2; SGMLDrawShadow(dpy,wind,state?gc2:gc1,state?gc1:gc2,outlineSize,x,y,width,height); } } /*--------------------------------------------------------------*/ /* Activate: */ /*--------------------------------------------------------------*/ static void Activate(w,event) SGMLMarkerTextObject w; XEvent *event; { SGMLMarkerTextCallbackStruct cb; Position x,y; if (event->type == ButtonPress || event->type == ButtonRelease) { XButtonEvent *be = (XButtonEvent *) event; SGMLRendition *rendition = &w->sgml_text.normal_rendition; x = be->x - w->sgml_text.margin; y = be->y - w->sgml_text.begin.y; if (rendition->outline) { x -= rendition->underline_height; y -= rendition->underline_height; } } else x = y = 0; /* Fill callback struct */ cb.text = w->sgml_text.text; cb.length = w->sgml_text.length; cb.param = w->sgml_text.param; cb.param_length = w->sgml_text.param_length; cb.reason = SGMLTEXT_ACTIVATE; cb.event = event; cb.x = x; cb.y = y; XtCallCallbacks ((Widget) w, SGMLNactivateCallback,(XtPointer) &cb); } /*--------------------------------------------------------------*/ /* Adjust Size: */ /*--------------------------------------------------------------*/ static Boolean AdjustSize(w,y,ascent,descent) SGMLMarkerTextObject w; SGMLPosition y; SGMLDimension ascent, descent; { if (w->sgml_text.end.y != y) return FALSE; w->sgml_text.height = descent + ascent; w->sgml_text.end.ascent = ascent; w->sgml_text.end.descent = descent; w->sgml_text.begin.ascent = ascent; w->sgml_text.begin.descent = descent; return TRUE; } /*--------------------------------------------------------------*/ /* Call the map Callback: */ /*--------------------------------------------------------------*/ static void CallMapCallback(w,event,map) SGMLMarkerTextObject w; XEvent *event; Boolean map; { SGMLTextCallbackStruct cb; if (!map && w->sgml_marker_text.image) { Widget parent = (Widget) w; for (; !XtIsWidget(parent) ; parent = XtParent(parent)); GIFFreeImage(parent,w->sgml_marker_text.image); w->sgml_marker_text.ximage = NULL; w->sgml_marker_text.pixmap = NULL; } cb.reason = SGMLTEXT_MAP; cb.event = event; cb.text = w->sgml_text.text; cb.length = w->sgml_text.length; cb.param = w->sgml_text.param; cb.param_length = w->sgml_text.param_length; if (map) XtCallCallbacks((Widget) w,SGMLNmapCallback ,(XtPointer) &cb); else XtCallCallbacks((Widget) w,SGMLNunmapCallback,(XtPointer) &cb); } /************************************************************************ * * Draw an n segment wide bordering shadow on the drawable * d, using the provided GC's and rectangle. * ************************************************************************/ static void SGMLDrawShadow (display, d, top_GC, bottom_GC, size, x, y, width, height) Display * display; Drawable d; GC top_GC; GC bottom_GC; register int size; register int x; register int y; register int width; register int height; { static XRectangle * rects = NULL; static int rect_count = 0; register int i; register int size2; register int size3; if (size <= 0) return; if (size > width / 2) size = width / 2; if (size > height / 2) size = height / 2; if (size <= 0) return; if (rect_count == 0) { rects = (XRectangle *) XtMalloc (sizeof (XRectangle) * size * 4); rect_count = size; } if (rect_count < size) { rects = (XRectangle *) XtRealloc((char *) rects, sizeof (XRectangle) * size * 4); rect_count = size; } size2 = size + size; size3 = size2 + size; for (i = 0; i < size; i++) { /* Top segments */ rects[i].x = x; rects[i].y = y + i; rects[i].width = width - i; rects[i].height = 1; /* Left segments */ rects[i + size].x = x + i; rects[i + size].y = y; rects[i + size].width = 1; rects[i + size].height = height - i; /* Bottom segments */ rects[i + size2].x = x + i + 1; rects[i + size2].y = y + height - i - 1; rects[i + size2].width = width - i - 1; rects[i + size2].height = 1; /* Right segments */ rects[i + size3].x = x + width - i - 1; rects[i + size3].y = y + i + 1; rects[i + size3].width = 1; rects[i + size3].height = height - i - 1; } XFillRectangles (display, d, top_GC, &rects[0], size2); XFillRectangles (display, d, bottom_GC, &rects[size2], size2); } /*-----------------------------------------------------------------------*/ /* Create a new SGMLMarkerTextObject */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateMarkerText(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLMarkerTextObjectClass,parent,al,ac); } midaswww-2.1/SGMLRuleText.c100666 21345 173 22127 5554674755 14061 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLRuleTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a rule text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include #include #include "SGMLRuleTextP.h" /* Private functions */ /* Widget class methods */ static void ComputeSize(); static void Initialize(); static void Destroy(); static Boolean SetValues(); static void Redisplay(); #define Offset(field) XtOffsetOf(SGMLRuleTextRec,sgml_rule_text.field) static XtResource resources[] = { {SGMLNruleHeight,SGMLCRuleHeight,XtRDimension,sizeof(Dimension), Offset(height),XtRImmediate,(XtPointer)2}, }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLRuleTextClassRec sGMLRuleTextClassRec = { { (WidgetClass) &sGMLTextClassRec, /* superclass */ "SGMLRuleText", /* class_name */ sizeof(SGMLRuleTextRec), /* widget_size */ NULL, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ Destroy, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ SetValues, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { ComputeSize, /* compute_size */ SGMLInheritAdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ Redisplay, /* expose */ SGMLInheritActivate, /* activate */ SGMLInheritHilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ SGMLInheritCallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ NULL, /* sgml_set_values */ NULL, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ SGMLInheritHiliteSelection, /* hilite_selection */ SGMLInheritXYToPos, /* xy_to_pos */ SGMLInheritPosToXY, /* pos_to_xy */ SGMLInheritDumpText, /* dump_text */ NULL, /* extension */ }, { NULL, /* ignore */ } }; WidgetClass sGMLRuleTextObjectClass = (WidgetClass) &sGMLRuleTextClassRec; /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLRuleTextObject request, new; { Widget parent; XGCValues values; XtGCMask valueMask; Pixel top, bottom; int n = 0; Arg arglist[10]; valueMask = GCForeground; for (parent = (Widget) new; !XtIsSubclass(parent,xmManagerWidgetClass); parent = XtParent(parent)); XtSetArg(arglist[n],XmNbottomShadowColor,&bottom); n++; XtSetArg(arglist[n],XmNtopShadowColor,&top); n++; XtGetValues(parent,arglist,n); values.foreground = top; new->sgml_rule_text.gc1 = XtGetGC((Widget) new, valueMask, &values); values.foreground = bottom; new->sgml_rule_text.gc2 = XtGetGC((Widget) new, valueMask, &values); } /*--------------------------------------------------------------*/ /* Destroy: */ /*--------------------------------------------------------------*/ static void Destroy(w) SGMLRuleTextObject w; { XtReleaseGC((Widget) w, w->sgml_rule_text.gc1); XtReleaseGC((Widget) w, w->sgml_rule_text.gc2); } /*------------------------------------------------------------------*/ /* SetValues : */ /*------------------------------------------------------------------*/ static Boolean SetValues (current, request, new) SGMLRuleTextObject current, request, new; { #define HAS_CHANGED(a) (new->sgml_rule_text.a != current->sgml_rule_text.a) #undef HAS_CHANGED return FALSE; } /*--------------------------------------------------------------*/ /* Redisplay */ /*--------------------------------------------------------------*/ static void Redisplay(t,event,region) SGMLRuleTextObject t; XEvent *event; Region region; { Position y = t->sgml_text.begin.y; Position margin = t->sgml_text.margin; Dimension width = t->sgml_text.width; Dimension height = t->sgml_text.height; if(XRectInRegion(region,margin,y,width,height) != RectangleOut) { Display *dpy = XtDisplayOfObject((Widget) t); Window wind = XtWindowOfObject((Widget) t); GC gc1 = t->sgml_rule_text.gc1; GC gc2 = t->sgml_rule_text.gc2; XFillRectangle(dpy,wind,gc2,margin,y,width,height/2); XFillRectangle(dpy,wind,gc1,margin,y+height/2,width,height/2); } } /*--------------------------------------------------------------*/ /* Compute Size: */ /*--------------------------------------------------------------*/ static void ComputeSize(w,geom,Adjust,Closure) SGMLRuleTextObject w; SGMLGeometry *geom; AdjustSizeProc Adjust; Opaque Closure; { Dimension height = 2 * w->sgml_rule_text.height; Dimension width = geom->natural_width - w->sgml_text.left_margin - w->sgml_text.left_indent - w->sgml_text.right_margin - w->sgml_text.right_indent; _SGMLBreak(geom,w->sgml_text.space_before); geom->coord.x = w->sgml_text.left_margin + w->sgml_text.left_indent; w->sgml_text.begin = geom->coord; w->sgml_text.margin = w->sgml_text.left_margin + w->sgml_text.left_indent; geom->coord.x += width; geom->coord.y += height; geom->broken = FALSE; w->sgml_text.height = height; w->sgml_text.width = width; if (geom->actual_width < geom->natural_width) geom->actual_width = geom->natural_width; w->sgml_text.end = geom->coord; _SGMLBreak(geom,w->sgml_text.space_after); w->sgml_text.size_valid = TRUE; } /*-----------------------------------------------------------------------*/ /* Create a new SGMLRuleTextObject */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateRuleText(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLRuleTextObjectClass,parent,al,ac); } midaswww-2.1/SGMLPlainText.c100666 21345 173 67620 5554674755 14224 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLPlainTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a plain text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include #include "SGMLPlainTextP.h" Widget ExtHiliteSelection(); /* Private functions */ static int LineSize(); static void DrawByParts(); /* Widget class methods */ static void Initialize(); static void Destroy(); static void ComputeSize(); static void Redisplay(); static Boolean AdjustSize(); static Widget HiliteSelection(); static void XYToPos(); static void PosToXY(); static Boolean DumpText(); #define MINIMUM(a,b) ((a)<(b)?(a):(b)) #define MAXIMUM(a,b) ((a)>(b)?(a):(b)) #define Offset(field) XtOffsetOf(SGMLPlainTextRec,sgml_plain_text.field) static XtResource resources[] = { {SGMLNtabs,SGMLCTabs,XtRInt,sizeof(int), Offset (tabs),XtRImmediate,(XtPointer)0}, }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLPlainTextClassRec sGMLPlainTextClassRec = { { (WidgetClass) &sGMLTextClassRec, /* superclass */ "SGMLPlainText", /* class_name */ sizeof(SGMLPlainTextRec), /* widget_size */ NULL, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ Destroy, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { ComputeSize, /* compute_size */ AdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ Redisplay, /* expose */ SGMLInheritActivate, /* activate */ SGMLInheritHilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ SGMLInheritCallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ NULL, /* sgml_set_values */ NULL, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ HiliteSelection, /* hilite_selection */ XYToPos, /* xy_to_pos */ PosToXY, /* pos_to_xy */ DumpText, /* dump_text */ NULL, /* extension */ }, { NULL, /* ignore */ } }; WidgetClass sGMLPlainTextObjectClass = (WidgetClass) &sGMLPlainTextClassRec; /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLTextObject request, new; { /* * check that the font REALLY is a fixed font */ short min = new->sgml_text.font->min_bounds.width; short max = new->sgml_text.font->max_bounds.width; if (min != max) { Arg arglist[10]; int n = 0; XrmQuark c = XrmPermStringToQuark("m"); #ifdef DEBUG printf("Inconsistent fonts specified for a SGMLPlainText object\n"); printf("Using 'fixed' font instead\n"); #endif XtSetArg(arglist[n],SGMLNfontSpacing,c); n++; XtSetValues((Widget)new,arglist,n); } } /*--------------------------------------------------------------*/ /* Destroy the widget: release all memory allocated */ /*--------------------------------------------------------------*/ static void Destroy (w) SGMLTextObject w; { } /*--------------------------------------------------------------*/ /* Redisplay */ /*--------------------------------------------------------------*/ static void Redisplay(t,event,region,Offset) SGMLPlainTextObject t; XEvent *event; Region region; { SGMLPosition Y = t->sgml_text.begin.y; Position y = Y; Position margin = t->sgml_text.margin; Dimension width = MINIMUM(t->sgml_text.width,32767-margin); Dimension height = MINIMUM(t->sgml_text.height,32767-y); if (y != Y) return; if(XRectInRegion(region,margin,y,width,height) != RectangleOut) { Display *dpy = XtDisplayOfObject((Widget) t); Window wind = XtWindowOfObject((Widget) t); GC gc = t->sgml_text.gc; int tabs = t->sgml_plain_text.tabs; XSegment *segs = NULL; Position size; Position x = t->sgml_text.begin.x; Dimension ascent = t->sgml_text.begin.ascent; Dimension depth = t->sgml_text.begin.descent + ascent; char *p = t->sgml_text.text; char *line = p; SGMLRendition *rendition = &t->sgml_text.normal_rendition; char *b = t->sgml_text.begin_select; char *e = t->sgml_text.end_select; int line_select = FALSE; char *bp, *ep, *eol; int a_x = 0, a_y = 0; Boolean line_select_flag = FALSE; Boolean f16 = FALSE; if (t->sgml_text.font16_name != XrmStringToQuark("") && t->sgml_text.font16_name != NULL) f16 = TRUE; for (;; p++) { if ( *p == '\n' && b != NULL && e != NULL ) { if (p >= b ) { line_select = TRUE; line_select_flag = TRUE; } if (p >= e && line_select_flag) line_select_flag = FALSE; if (line > e) line_select = FALSE; } /* Fill additional rectangle when there is a newline */ /* located in between the begin_select and end_select. */ if (*p == '\n' && p == line && line_select && line_select_flag && XRectInRegion(region,x,y,width,depth) != RectangleOut ) XFillRectangle(dpy,wind,gc,x,y,t->sgml_text.width,depth); if (*p == '\n' || *p == '\0') { if (p != line && XRectInRegion(region,x,y,width,height) != RectangleOut) { if (*p == '\0') { ascent = t->sgml_text.end.ascent; depth = t->sgml_text.end.descent + ascent; } if (tabs) { int nt = 0, pos=0; char *q, *copy; for (q = line; q < p; q++) if (*q == '\t') nt++; copy = XtMalloc(p-line + nt * tabs); bp = ep = eol = copy; for (q = line; q < p; q++,pos++) { if (line_select) if (q == b) bp += pos; if (*q != '\t') copy[pos] = *q; else for ( copy[pos] = ' '; pos%tabs ; ) copy[++pos] = ' '; if (line_select) if (q == e) ep += pos; } if (line_select && ep == copy) ep += (pos - 1); eol += (pos - 1); if (f16) size = ExtTextWidth((Widget)t,©,pos,FALSE); else size = pos * t->sgml_text.spacing; if (line_select && b != NULL) { DrawByParts(copy,bp,ep,eol,t,x,y+ascent); if (f16) a_x = x + ExtTextWidth((Widget)t,©,ep + 1 - copy,FALSE); else a_x = x + (ep + 1 - copy) * t->sgml_text.spacing; a_y = y; /* fill addition rectangle when > 2 line_select */ /* useful for the hilite (ie: clear it) */ if (line_select_flag) { unsigned int a_width = t->sgml_text.width + margin - a_x; if (a_width > 0) XFillRectangle(dpy,wind,gc,a_x,a_y,a_width,(unsigned int)depth); } } else { if (t->sgml_text.font16_name == XrmStringToQuark("")) XDrawString(dpy, wind,gc, x, y+ascent,copy,pos); else ExtDrawString((Widget)t,FALSE,dpy,wind,gc,x,y+ascent,copy,pos); } XtFree(copy); } else { if (f16) size = ExtTextWidth((Widget)t,&line,p-line,FALSE); else size = (p-line) * t->sgml_text.spacing; if (line_select && b != NULL) { if (line > b) bp = line; else bp = b; if (e > p) ep = p; else ep = e; DrawByParts(line,bp,ep,p,t,x,y+ascent); if (f16) a_x = x + ExtTextWidth((Widget)t,&line,ep+1-line,FALSE); else a_x = x + (ep +1 - line)*t->sgml_text.spacing; a_y = y; /* fill addition rectangle when > 2 line_select */ /* useful for the hilite (ie: clear it) */ if (line_select_flag) { unsigned int a_width = t->sgml_text.width + margin - a_x; if (a_width > 0) XFillRectangle(dpy,wind,gc,a_x,a_y,a_width,(unsigned int)depth); } } else { if (t->sgml_text.font16_name == XrmStringToQuark("")) XDrawString(dpy, wind,gc, x, y+ascent, line, p-line); else ExtDrawString((Widget)t,FALSE,dpy,wind,gc,x,y+ascent,line,p-line); } } if (rendition->underline && size) { int s; Position yy = y+ascent; if (!segs) segs = (XSegment *) XtMalloc(sizeof(XSegment) * rendition->underline); for (s=0; s < rendition->underline ; s++ ) { yy += MAXIMUM(rendition->underline_height,1); segs[s].x1 = x; segs[s].x2 = size; segs[s].y1 = yy; segs[s].y2 = yy; yy += MAXIMUM(rendition->underline_height,1); } XDrawSegments(dpy,wind,gc,segs,rendition->underline); } } if (*p == '\0') break; x = margin; y += depth; Y += depth; if (y != Y) break; line = p+1; ascent = t->sgml_text.ascent; depth = t->sgml_text.descent + ascent; } } } } /*--------------------------------------------------------------*/ /* Adjust Size: */ /*--------------------------------------------------------------*/ static Boolean AdjustSize(w,y,ascent,descent) SGMLPlainTextObject w; SGMLPosition y; SGMLDimension ascent, descent; { if (w->sgml_text.end.y != y) return FALSE; w->sgml_text.height += descent - w->sgml_text.end.descent + ascent - w->sgml_text.end.ascent; w->sgml_text.end.ascent = ascent; w->sgml_text.end.descent = descent; if (w->sgml_text.begin.y == y) { w->sgml_text.begin.ascent = ascent; w->sgml_text.begin.descent = descent; return TRUE; } return FALSE; } /*--------------------------------------------------------------*/ /* Compute Size: */ /*--------------------------------------------------------------*/ static void ComputeSize(w,geom,Adjust,Closure) SGMLTextObject w; SGMLGeometry *geom; AdjustSizeProc Adjust; Opaque Closure; { Dimension left_clearance = w->sgml_text.left_margin; int nlines; SGMLPosition xmin, xmax; /* * Break before? */ if ( w->sgml_text.break_before == SGMLBREAK_ALWAYS) { _SGMLBreak(geom,w->sgml_text.space_before); } if (w->sgml_text.descent > geom->coord.descent || w->sgml_text.ascent > geom->coord.ascent ) { if (w->sgml_text.descent > geom->coord.descent) geom->coord.descent = w->sgml_text.descent; if (w->sgml_text.ascent > geom->coord.ascent) geom->coord.ascent = w->sgml_text.ascent; Adjust(Closure, geom->coord.y, geom->coord.ascent, geom->coord.descent); } if (left_clearance > geom->coord.x ) geom->coord.x = left_clearance; w->sgml_text.begin = geom->coord; nlines = LineSize(w,&geom->coord.x,&geom->actual_width,&xmin,&xmax); w->sgml_text.height = geom->coord.ascent + geom->coord.descent; if (nlines>1) { geom->coord.ascent = w->sgml_text.ascent; geom->coord.descent = w->sgml_text.descent; w->sgml_text.height += (w->sgml_text.descent + w->sgml_text.ascent) * (nlines - 1); geom->coord.y += w->sgml_text.height - w->sgml_text.descent - w->sgml_text.ascent; } w->sgml_text.margin = xmin; w->sgml_text.width = xmax - xmin; geom->space = 0; geom->broken = FALSE; geom->leave_space = FALSE; w->sgml_text.end = geom->coord; /* * Break after? */ if ( w->sgml_text.break_after == SGMLBREAK_ALWAYS) { _SGMLBreak(geom,w->sgml_text.space_after); } w->sgml_text.size_valid = TRUE; } /*-----------------------------------------------------------------------*/ /* Private routines */ /*-----------------------------------------------------------------------*/ /* DrawByParts: Draw each part of a line in different gc */ /* Use to Redisplay when a search string is found */ /*-----------------------------------------------------------------------*/ static void DrawByParts(copy,b,e,l,t,x,y) char *copy; char *b, *e, *l; SGMLPlainTextObject t; Position x; Position y; { Display *dpy = XtDisplayOfObject((Widget) t); Window wind = XtWindowOfObject((Widget) t); GC gc = t->sgml_text.gc; GC rv_gc = t->sgml_text.reverse_gc; int spacing = t->sgml_text.spacing; Position ix = x; int np, size = 0; Boolean f16 = FALSE; if (t->sgml_text.font16_name != XrmStringToQuark("") && t->sgml_text.font16_name != NULL ) f16 = TRUE; np = b - copy; if (np) { if (f16) { ExtDrawString((Widget)t, FALSE, dpy, wind, gc, ix, y, copy, np); size = ExtTextWidth((Widget)t,©,np,FALSE); } else { XDrawString(dpy, wind, gc, ix, y, copy, np); size = np * spacing; } ix += size; } np = (e - b) + 1; if (np) { if (f16) { ExtDrawString((Widget)t, TRUE, dpy, wind, rv_gc, ix, y, b, np); size = ExtTextWidth((Widget)t,&b,np,FALSE); } else { XDrawImageString(dpy, wind, rv_gc, ix, y, b, np); size = np * spacing; } ix += size; } np = l - e; if (np) { if (f16) ExtDrawString((Widget)t, FALSE, dpy, wind, gc, ix, y, e+1, np); else XDrawString(dpy, wind, gc, ix, y, e+1, np); } } /*-----------------------------------------------------------------------*/ /* Private routines */ /*-----------------------------------------------------------------------*/ /* LineSize: In the plain text case, just count the newlines */ /*-----------------------------------------------------------------------*/ static int LineSize(w, inoutx, inoutwidth, xmin, xmax) SGMLPlainTextObject w; SGMLPosition *inoutx; SGMLDimension *inoutwidth; SGMLPosition *xmin, *xmax; { SGMLPosition x = *inoutx; SGMLDimension width, maxWidth = *inoutwidth; Dimension left_clearance = w->sgml_text.left_margin; int nlines = 1; int tabs = w->sgml_plain_text.tabs; char *p = w->sgml_text.text; int size = 0; SGMLPosition maxX = x; SGMLPosition minX = x; SGMLPosition b_y = w->sgml_text.begin.y; char *pp; Boolean f16 = FALSE; if (w->sgml_text.font16_name != XrmStringToQuark("") && w->sgml_text.font16_name != NULL) f16 = TRUE; for (pp = p; *p != '\0'; p++) { if (*p == '\n') { if (f16) width = ExtTextWidth((Widget)w,&pp,size,FALSE); else width = size * w->sgml_text.spacing; if (x+width > maxWidth) maxWidth = x+width; if (x+width > maxX) maxX = x+width; nlines++; size = 0; x = left_clearance; minX = x; pp = p+1; } else if (*p == '\t' && tabs) size += tabs - size%tabs; else size++; } if (f16 && *pp != '0') width = ExtTextWidth((Widget)w,&pp,size,FALSE); else width = size * w->sgml_text.spacing; x += width; if (x > maxWidth) maxWidth = x; if (x > maxX) maxX = x; *inoutx = x; *xmin = minX; *xmax = maxX; *inoutwidth = maxWidth; return nlines; } /*-----------------------------------------------------------------------*/ /* Create a new SGMLPlainTextObject */ /*-----------------------------------------------------------------------*/ Widget SGMLCreatePlainText(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLPlainTextObjectClass,parent,al,ac); } /*-----------------------------------------------------------------------*/ /* Hilite Selection text */ /*-----------------------------------------------------------------------*/ static Widget HiliteSelection(w,mode,ci) SGMLPlainTextObject w; int mode; SGMLCopyInfo *ci; { char *pos = NULL; char *delim = " \r\n\t"; char *text = w->sgml_text.text; SGMLPlainTextObjectClass class = (SGMLPlainTextObjectClass) XtClass((Widget)w); char *b, *e; int x = ci->current_x; int y = ci->current_y; if (mode == SGMLSELECT_LINE) { (*class->sgml_text_class.xy_to_pos)(w,&x,&y,&pos); b = e = pos; for (;*b != '\n';b--) if (b == text) break; for (;*e != '\n' && *e != '\0';e++); if (b == text) w->sgml_text.begin_select = b; else w->sgml_text.begin_select = ++b; w->sgml_text.end_select = --e; (*class->sgml_text_class.hilite)(w,SGMLSELECT_LINE); return (Widget)w; } else return ExtHiliteSelection((Widget)w,mode,ci,TRUE); } /*-----------------------------------------------------------------------*/ /* XY to a char Position */ /*-----------------------------------------------------------------------*/ static void XYToPos(w,x,y,pos) SGMLPlainTextObject w; int *x, *y; char **pos; { char *p = w->sgml_text.text; Position wy = w->sgml_text.begin.y; Position wx = w->sgml_text.begin.x; Position margin = w->sgml_text.margin; Dimension ascent = w->sgml_text.begin.ascent; Dimension depth = w->sgml_text.begin.descent + ascent; int tabs = w->sgml_plain_text.tabs; int spacing = w->sgml_text.spacing; char *np; int width = 0, i; Boolean f16 = FALSE; if (w->sgml_text.font16_name != XrmStringToQuark("") && w->sgml_text.font16_name != NULL) f16 = TRUE; for (np = p; *p != '\0'; p++) { if (wy + depth > *y) break; if (*p == '\n') { wy += depth; wx = margin; np = p+1; } } if (wx < margin) wx = margin; for (i=0; *np != '\0' && *np != '\n'; np++,i++) { if (tabs) { if (*np == '\t') for (;i%tabs; i++,width+=spacing); } if (f16) { if (wx + width + ExtTextWidth((Widget)w,&np,1,FALSE) >= *x) break; width += ExtTextWidth((Widget)w,&np,1,TRUE); } else { if (wx + width + spacing >= *x) break; width += spacing; } } *y = wy; *x = wx + width; /* max x is eol */ *pos = np; /* pos could be possible a '\0' */ } /*-----------------------------------------------------------------------*/ /* A char Position to XY */ /*-----------------------------------------------------------------------*/ static void PosToXY(w,x,y,pos,after) SGMLPlainTextObject w; Position *x, *y; char *pos; Boolean after; { char *p = w->sgml_text.text; Position wy = w->sgml_text.begin.y; Position wx = w->sgml_text.begin.x; Position margin = w->sgml_text.margin; Dimension ascent = w->sgml_text.begin.ascent; Dimension depth = w->sgml_text.begin.descent + ascent; int tabs = w->sgml_plain_text.tabs; char *np; int width, nc = 0; Boolean f16 = FALSE; int swidth; char *copy; if (w->sgml_text.font16_name != XrmStringToQuark("") && w->sgml_text.font16_name != NULL) f16 = TRUE; if (*pos == '\0') { *x = w->sgml_text.end.x; *y = w->sgml_text.end.y; return; } for (np = p; *p != '\0'; p++) { if (p == pos) break; if (*p == '\n') { wy += depth; wx = margin; np = p+1; } } copy = XtMalloc(1 + (p-np)*(tabs?tabs:1)); for (width=0; np < p && *np != '\0';width++,np++) { if (tabs) if (*np == '\t' && np != p) for (;width%tabs; copy[width] = ' ', width++); else copy[width] = *np; } if (*pos == '\t') nc = tabs - (width%tabs ? width%tabs : tabs) +1; else nc = 1; if (f16) { swidth = ExtTextWidth((Widget)w,©,width,FALSE); if (*pos == '\n') *x = wx + (after ? w->sgml_text.width : swidth); else { if (*pos&0x80) { int temp = w->sgml_text.font16->max_bounds.width; *x = wx + swidth + (after ? ((nc-1)*w->sgml_text.spacing + temp) : 0); } else *x = wx + swidth + (after ? (nc*w->sgml_text.spacing) : 0); } } else { if (*pos == '\n') *x = wx + (after ? w->sgml_text.width : (width * w->sgml_text.spacing)); else *x = wx + (width * w->sgml_text.spacing) + (after ? (nc*w->sgml_text.spacing) : 0); } *y = wy; XtFree(copy); } /*-----------------------------------------------------------------------*/ /* Dump Text */ /*-----------------------------------------------------------------------*/ static Boolean DumpText(w,dp,pp) SGMLPlainTextObject w; SGMLDumpTextInfo *dp; char **pp; { char *text = w->sgml_text.text; char *b = w->sgml_text.begin_select; char *e = w->sgml_text.end_select; char *p; int len; char *t, *nl = NULL; if (dp->calc_len) len = (int) *pp; else p = *pp; if (dp->sw) { if (b == NULL || e == NULL) return FALSE; if (dp->calc_len) { if (dp->spacing && !dp->line_spacing) /* spaces */ len += dp->spacing; if (dp->line_spacing) /* lines */ { len += dp->line_spacing; dp->last_len = len; } len += e - b + (*e != '\0' ? 1 : 0); /* do not count the '\0' */ for (t=b; t < e && *t !='\0'; t++) /* locate the \n for last_len */ if (*t == '\n') nl = t; if (*t == '\n') nl = t; if (nl) dp->last_len += nl - b + 1; if (dp->copy_type == SGMLSELECT_LINE && w == (SGMLPlainTextObject) dp->sw) len++; *pp = (char *)len; } else { if (dp->spacing && !dp->line_spacing) /* spaces */ for (;dp->spacing > 0; dp->spacing--) *p++ = ' '; if (dp->line_spacing) /* lines */ for (;dp->line_spacing > 0; dp->line_spacing--) { *p++ = '\n'; dp->last_pos = p; } for (t=b; t < e && *t != '\0'; t++, p++) { *p = *t; if (*t == '\n') dp->last_pos = t; /* locate the \n for last_pos */ } if (dp->copy_type == SGMLSELECT_LINE && w == (SGMLPlainTextObject) dp->sw) *p++ = '\n'; if (*t != '\0') /* do not include the '\0' */ *p++ = *t; *pp = p; } dp->spacing = 1; dp->line_spacing = 0; if (w == (SGMLPlainTextObject) dp->sw) return TRUE; else return FALSE; } else { if (dp->calc_len) len += strlen(text); else for (;*text != '\0';text++,p++) *p = *text; } return FALSE; } midaswww-2.1/SGMLTableText.c100666 21345 173 32051 5554674755 14176 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLTableTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a composite text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include "SGMLTableTextP.h" #include "SGMLMarkerText.h" /* Private functions */ /* Private data struct */ static XrmQuark tdQuark, trQuark, thQuark; /* Widget class methods */ static void ComputeSize(); static void ClassInitialize(); #define Offset(field) XtOffsetOf(SGMLTableTextRec,sgml_table_text.field) static XtResource resources[] = { {SGMLNrows, XtCReadOnly, XtRInt, sizeof(int), Offset(rows), XtRImmediate, (XtPointer) 0}, {SGMLNcolumns, XtCReadOnly, XtRInt, sizeof(int), Offset(cols), XtRImmediate, (XtPointer) 0}, {SGMLNborder, SGMLCBorder, XtRBoolean, sizeof(Boolean), Offset(border), XtRImmediate, (XtPointer) TRUE} }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLTableTextClassRec sGMLTableTextClassRec = { { (WidgetClass) &sGMLCaptionTextClassRec, /* superclass */ "SGMLTableText", /* class_name */ sizeof(SGMLTableTextRec), /* widget_size */ ClassInitialize, /* class_initialize */ NULL, /* class_part_initialize */ FALSE, /* class_inited */ NULL, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ NULL, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { ComputeSize, /* compute_size */ SGMLInheritAdjustSize, /* adjust_size */ SGMLInheritAdjustPosition, /* adjust_position */ SGMLInheritExpose, /* expose */ SGMLInheritActivate, /* activate */ SGMLInheritHilite, /* hilite */ SGMLInheritContains, /* contains */ SGMLInheritCallCreateCallback, /* call_create_callback */ SGMLInheritCallMapCallback, /* call_map_callback */ SGMLInheritMakeVisible, /* make_visible */ NULL, /* sgml_set_values */ NULL, /* inherit_changes */ SGMLInheritComputeChangeMask, /* compute_change_mask */ SGMLInheritSearch, /* search */ SGMLInheritClearSelect, /* clear_select */ SGMLInheritHiliteSelection, /* hilite_selection */ SGMLInheritXYToPos, /* xy_to_pos */ SGMLInheritPosToXY, /* pos_to_xy */ SGMLInheritDumpText, /* dump_text */ NULL, /* extension */ }, { SGMLInheritGeometryManager, /* geometry_manager */ SGMLInheritChangeManaged, /* change_managed */ SGMLInheritInsertChild, /* insert_child */ SGMLInheritDeleteChild, /* delete_child */ SGMLInheritCallAdjustSize, /* call_adjust_size */ NULL, /* ignore */ }, { NULL, /* ignore */ }, { NULL, /* ignore */ }, }; WidgetClass sGMLTableTextObjectClass = (WidgetClass) &sGMLTableTextClassRec; /*--------------------------------------------------------------*/ /* ClassInitialize: Register the converters */ /*--------------------------------------------------------------*/ static void ClassInitialize() { tdQuark = XrmPermStringToQuark("td"); thQuark = XrmPermStringToQuark("th"); trQuark = XrmPermStringToQuark("tr"); } static void DoNothing() {} /*--------------------------------------------------------------*/ /* Compute Size: */ /*--------------------------------------------------------------*/ static void ComputeSize(w,geom,Adjust,Closure) SGMLTableTextObject w; SGMLGeometry *geom; CallAdjustSizeProc Adjust; Opaque Closure; { int n = w->sgml_composite_text.num_children; WidgetList children = w->sgml_composite_text.children; Boolean *managed = w->sgml_composite_text.managed; SGMLPosition xmin, xmax; int ncols, nrows, icol, irow, iw, iwa; Widget *wl; SGMLGeometry tableGeom; /* * Always Break before */ _SGMLBreak(geom, w->sgml_text.space_before); /* * Deal with caption first */ w->sgml_text.begin = geom->coord; xmin = xmax = geom->coord.x; if (w->sgml_caption_text.caption) { SGMLTextObject t = (SGMLTextObject) w->sgml_caption_text.caption; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass((Widget) t); (*childClass->sgml_text_class.compute_size)(t,geom,DoNothing,NULL); if (t->sgml_text.margin < xmin) xmin = t->sgml_text.margin; if (t->sgml_text.margin + t->sgml_text.width > xmax) xmax = t->sgml_text.margin + t->sgml_text.width; } /* * Calculate how many rows/columns there are */ icol = 0; ncols = 0 ; nrows = 0; iw = 0; iwa = 0; wl = NULL; for (; n-- > 0; children++, managed++) if (*managed && *children != w->sgml_caption_text.caption) if (SGMLIsMarkerText(*children)) { SGMLTextObject t = (SGMLTextObject) *children; if (t->object.xrm_name == thQuark || t->object.xrm_name == tdQuark) { if (iw == iwa) wl = (Widget *) XtRealloc((char *) wl,(iwa += 10) * sizeof(Widget *)); wl[iw++] = *children; icol++; } else if (t->object.xrm_name == trQuark) { if (iw == iwa) wl = (Widget *) XtRealloc((char *) wl,(iwa += 10) * sizeof(Widget *)); wl[iw++] = *children; nrows++; if (icol > ncols ) ncols = icol; icol = 0; } } w->sgml_table_text.rows = nrows; w->sgml_table_text.cols = ncols; w->sgml_table_text.widgets = wl; /* * Allocate some arrays */ w->sgml_table_text.columnWidth = (SGMLDimension *) XtMalloc(ncols * sizeof(SGMLDimension *)); w->sgml_table_text.rowHeight = (SGMLDimension *) XtMalloc(nrows * sizeof(SGMLDimension *)); w->sgml_table_text.widgets = wl; for (irow=0; irowsgml_table_text.rowHeight[irow] = 0; for (icol=0; icolsgml_table_text.columnWidth[icol] = 0; printf("nrows = %d ncols = %d\n",nrows,ncols); tableGeom.natural_width = geom->natural_width/ncols; /* * Query children? */ n = w->sgml_composite_text.num_children; children = w->sgml_composite_text.children; icol = -1; irow = 0; iw = 0; for (; n-- > 0; children++, managed++) { if (wl[iw] == *children) { SGMLDimension h = tableGeom.coord.y + tableGeom.coord.ascent + tableGeom.coord.descent; if (icol >=0 && w->sgml_table_text.columnWidth[icol] < tableGeom.actual_width) w->sgml_table_text.columnWidth[icol] = tableGeom.actual_width; if (icol >=0 && h > w->sgml_table_text.rowHeight[irow]) w->sgml_table_text.rowHeight[irow] = h; icol++; if (icol == ncols) { icol = -1; irow++; } tableGeom.actual_width = 0; tableGeom.broken = TRUE; tableGeom.space = 0; tableGeom.leave_space = FALSE; tableGeom.coord.x = 0; tableGeom.coord.y = 0; tableGeom.coord.ascent = 0; tableGeom.coord.descent = 0; iw++; } else if (*managed && *children != w->sgml_caption_text.caption) { SGMLTextObject t = (SGMLTextObject) *children; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); SGMLCompositeTextObjectClass myClass = (SGMLCompositeTextObjectClass) XtClass((Widget) w); (*childClass->sgml_text_class.compute_size) (*children,&tableGeom,myClass->sgml_composite_text_class.call_adjust_size,*children); if (t->sgml_text.margin < xmin) xmin = t->sgml_text.margin; if (t->sgml_text.margin + t->sgml_text.width > xmax) xmax = t->sgml_text.margin + t->sgml_text.width; } } for (irow = 0; irow < nrows; irow++) printf("irow = %d height = %d\n",irow,w->sgml_table_text.rowHeight[irow]); for (icol = 0; icol < ncols; icol++) printf("icol = %d width = %d\n", icol,w->sgml_table_text.columnWidth[icol]); /* * Query children one final time, set final size of children */ n = w->sgml_composite_text.num_children; children = w->sgml_composite_text.children; icol = -1; irow = 0; iw = 0; for (; n-- > 0; children++, managed++) { if (wl[iw] == *children) { if (icol >= 0) geom->coord.x += w->sgml_table_text.columnWidth[icol]; icol++; if (icol == ncols) { geom->coord.x = 0; geom->coord.y += w->sgml_table_text.rowHeight[irow]; icol = -1; irow++; } tableGeom.actual_width = 0; tableGeom.broken = TRUE; tableGeom.space = 0; tableGeom.leave_space = FALSE; tableGeom.coord.x = geom->coord.x; tableGeom.coord.y = geom->coord.y; tableGeom.coord.ascent = 0; tableGeom.coord.descent = 0; iw++; } else if (*managed && *children != w->sgml_caption_text.caption) { SGMLTextObject t = (SGMLTextObject) *children; SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children); SGMLCompositeTextObjectClass myClass = (SGMLCompositeTextObjectClass) XtClass((Widget) w); (*childClass->sgml_text_class.compute_size) (*children,&tableGeom,myClass->sgml_composite_text_class.call_adjust_size,*children); if (t->sgml_text.margin < xmin) xmin = t->sgml_text.margin; if (t->sgml_text.margin + t->sgml_text.width > xmax) xmax = t->sgml_text.margin + t->sgml_text.width; } } w->sgml_text.end = geom->coord; w->sgml_text.height = geom->coord.y + geom->coord.descent + geom->coord.ascent - w->sgml_text.begin.y; w->sgml_text.width = xmax - xmin; w->sgml_text.margin = xmin; /* * Always Break after */ _SGMLBreak(geom,w->sgml_text.space_after); w->sgml_text.size_valid = TRUE; } midaswww-2.1/SGMLText.c100666 21345 173 206221 5554674756 13251 0ustar steffcsc/*==================================================================*/ /* */ /* SGMLTextObject */ /* */ /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu) June.92 */ /* */ /* Defines a text segment for the SGMLHyper widget */ /* */ /*==================================================================*/ #include #include #include #include #include "SGMLTextP.h" #include "SGMLHyperP.h" #include "SGMLCompositeTextP.h" /* External functions */ extern Widget ExtHiliteSelection(); /* Private functions */ #define max(a,b) (a>b?a:b) void _SGMLBreak(); /* Widget class methods */ static void ClassPartInitialize(); static void Initialize(); static void ClassInitialize(); static void Destroy(); static Boolean SetValues(); static void ComputeSize(); static Boolean AdjustSize(); static void AdjustPosition(); static void Redisplay(); static void Activate(); static void Hilite(); static Widget Contains(); static void CallCreateCallback(); static void CallMapCallback(); static void MakeVisible(); static Boolean SGMLSetValues(); static Boolean InheritChanges(); static int ComputeChangeMask(); static Widget Search(); static Boolean ClearSelect(); static Widget HiliteSelection(); static void XYToPos(); static void PosToXY(); static Boolean DumpText(); #define Offset(field) XtOffsetOf(SGMLTextRec,sgml_text.field) static XtResource resources[] = { {SGMLNtext, SGMLCText, XtRString, sizeof(String), Offset(text), XtRString, ""}, {SGMLNparam, SGMLCParam, XtRString, sizeof(String), Offset(param), XtRString, ""}, {SGMLNlength, SGMLCLength, XtRInt, sizeof(int), Offset(length), XtRImmediate, 0}, {SGMLNparamLength, SGMLCParamLength, XtRInt, sizeof(int), Offset(param_length), XtRImmediate, 0}, {SGMLNheight, XtCReadOnly, XtRDimension, sizeof(Dimension), Offset(height), XtRImmediate, 0}, {SGMLNwidth, XtCReadOnly, XtRDimension, sizeof(Dimension), Offset(width), XtRImmediate, 0}, {SGMLNinheritance, XtCReadOnly, XtRInt, sizeof(int), Offset(inheritance), XtRImmediate, 0}, {SGMLNcolor, SGMLCColor, XtRPixel, sizeof (Pixel), Offset(normal_rendition.color),XtRString, SGMLINHERIT_COLOR}, {SGMLNoutline,SGMLCOutline,XtRBoolean,sizeof(Boolean), Offset (normal_rendition.outline),XtRImmediate,(XtPointer)SGMLINHERIT_OUTLINE}, {SGMLNunderline,SGMLCUnderline,XtRInt,sizeof(int), Offset (normal_rendition.underline),XtRImmediate,(XtPointer)SGMLINHERIT_UNDERLINE}, {SGMLNunderlineHeight, SGMLCUnderlineHeight, XtRDimension, sizeof(Dimension), Offset (normal_rendition.underline_height),XtRImmediate,(XtPointer)SGMLINHERIT_UNDERLINEHEIGHT}, {SGMLNunderlineStyle, SGMLCUnderlineStyle, SGMLRLineStyle, sizeof(int), Offset (normal_rendition.underline_style),XtRImmediate,(XtPointer)SGMLINHERIT_UNDERLINESTYLE}, {SGMLNfontFamily, SGMLCFontFamily, SGMLRQuark, sizeof(XrmQuark), Offset (normal_rendition.family), XtRImmediate, SGMLINHERIT_QUARK}, {SGMLNfontWeight, SGMLCFontWeight, SGMLRQuark, sizeof(XrmQuark), Offset (normal_rendition.weight), XtRImmediate, SGMLINHERIT_QUARK}, {SGMLNfontSlant, SGMLCFontSlant, SGMLRQuark, sizeof(XrmQuark), Offset (normal_rendition.slant), XtRImmediate, SGMLINHERIT_QUARK}, {SGMLNfontWidth, SGMLCFontWidth, SGMLRQuark, sizeof(XrmQuark), Offset (normal_rendition.width), XtRImmediate, SGMLINHERIT_QUARK}, {SGMLNfontSpacing, SGMLCFontSpacing, SGMLRQuark, sizeof(XrmQuark), Offset (normal_rendition.spacing), XtRImmediate, SGMLINHERIT_QUARK}, {SGMLNfontRegistry, SGMLCFontRegistry, SGMLRQuark, sizeof(XrmQuark), Offset (normal_rendition.registry), XtRImmediate, SGMLINHERIT_QUARK}, {SGMLNfontSize, SGMLCFontSize, XtRInt, sizeof(int), Offset (normal_rendition.size), XtRImmediate, SGMLINHERIT_SIZE}, {SGMLNbreakBefore,SGMLCBreak,SGMLRBreak,sizeof(int), Offset (break_before),XtRImmediate,(XtPointer)SGMLBREAK_SOFT}, {SGMLNbreakAfter,SGMLCBreak,SGMLRBreak,sizeof(int), Offset (break_after),XtRImmediate,(XtPointer)SGMLBREAK_SOFT}, {SGMLNsensitive,SGMLCSensitive,XtRBoolean,sizeof(Boolean), Offset (sensitive),XtRImmediate,(XtPointer)SGMLINHERIT_SENSITIVITY}, {SGMLNmatched,SGMLCMatched,XtRInt,sizeof(int), Offset (matched),XtRImmediate,(XtPointer)TRUE}, {SGMLNmanaged,SGMLCManaged,XtRBoolean,sizeof(Boolean), Offset (managed),XtRImmediate,(XtPointer)TRUE}, {SGMLNexactTerminator,SGMLCExactTerminator,XtRBoolean,sizeof(Boolean), Offset (exact_terminator),XtRImmediate,(XtPointer)SGMLINHERIT_SENSITIVITY}, {SGMLNhideIllegalTags,SGMLCHideIllegalTags,XtRBoolean,sizeof(Boolean), Offset (hide_illegal_tags),XtRImmediate,(XtPointer)SGMLINHERIT_SENSITIVITY}, {SGMLNsupportsEntities,SGMLCSupportsEntities,XtRBoolean,sizeof(Boolean), Offset (supports_entities),XtRImmediate,(XtPointer)SGMLINHERIT_SENSITIVITY}, {SGMLNrightMargin,SGMLCMargin,XtRInt,sizeof(int), Offset (right_margin),XtRImmediate,(XtPointer)SGMLINHERIT_MARGIN}, {SGMLNleftMargin,SGMLCMargin,XtRInt,sizeof(int), Offset (left_margin),XtRImmediate,(XtPointer)SGMLINHERIT_MARGIN}, {SGMLNrightIndent,SGMLCMargin,XtRInt,sizeof(int), Offset (right_indent),XtRImmediate,(XtPointer)0}, {SGMLNleftIndent,SGMLCMargin,XtRInt,sizeof(int), Offset (left_indent),XtRImmediate,(XtPointer)0}, {SGMLNparagraphIndent,SGMLCMargin,XtRInt,sizeof(int), Offset (paragraph_indent),XtRImmediate,(XtPointer)SGMLINHERIT_PARAGRAPHINDENT}, {SGMLNalignment,SGMLCAlignment,XtRInt,sizeof(int), Offset (alignment),XtRImmediate,(XtPointer)SGMLINHERIT_ALIGNMENT}, {SGMLNspacing,SGMLCSpacing,XtRDimension,sizeof(Dimension), Offset (spacing),XtRImmediate,(XtPointer)0}, {SGMLNspaceBefore,SGMLCSpacing,XtRDimension,sizeof(Dimension), Offset (space_before),XtRImmediate,0}, {SGMLNspaceAfter,SGMLCSpacing,XtRDimension,sizeof(Dimension), Offset (space_after),XtRImmediate,0}, {SGMLNdescent,SGMLCDescent,XtRDimension,sizeof(Dimension), Offset (descent),XtRImmediate,(XtPointer)0}, {SGMLNascent,SGMLCAscent,XtRDimension,sizeof(Dimension), Offset (ascent),XtRImmediate,(XtPointer)0}, {SGMLNuserdata,SGMLCUserdata,XtRPointer,sizeof(XtPointer), Offset (userdata),XtRImmediate,(XtPointer)0}, {SGMLNactivateCallback,SGMLCCallback,XtRCallback,sizeof(caddr_t), Offset (activate),XtRCallback,NULL}, {SGMLNmapCallback,SGMLCCallback,XtRCallback,sizeof(caddr_t), Offset (map),XtRCallback,NULL}, {SGMLNunmapCallback,SGMLCCallback,XtRCallback,sizeof(caddr_t), Offset (unmap),XtRCallback,NULL}, {SGMLNcreateCallback, SGMLCCallback, XtRCallback, sizeof(caddr_t), Offset (create),XtRCallback,NULL}, {SGMLNfont16, SGMLCFont16, SGMLRQuark, sizeof(XrmQuark), Offset (font16_name), XtRImmediate, SGMLINHERIT_QUARK} }; #undef Offset /*---------------------------------------------------------------*/ /* Static initialisation of the class record */ /*---------------------------------------------------------------*/ SGMLTextClassRec sGMLTextClassRec = { { (WidgetClass) &objectClassRec, /* superclass */ "SGMLText", /* class_name */ sizeof(SGMLTextRec), /* widget_size */ ClassInitialize, /* class_initialize */ ClassPartInitialize, /* class_part_initialize */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ NULL, /* obj1 */ NULL, /* obj2 */ 0, /* obj3 */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ 0, /* obj4 */ 0, /* obj5 */ 0, /* obj6 */ 0, /* obj7 */ Destroy, /* destroy */ NULL, /* obj8 */ NULL, /* obj9 */ SetValues, /* set_values */ NULL, /* set_values_hook */ NULL, /* obj10 */ NULL, /* get_values_hook */ NULL, /* obj11 */ XtVersion, /* version */ NULL, /* callback private */ NULL, /* obj12 */ NULL, /* obj13 */ NULL, /* obj14 */ NULL, /* extension */ }, { ComputeSize, /* compute_size */ AdjustSize, /* adjust_size */ AdjustPosition, /* adjust_position */ Redisplay, /* expose */ Activate, /* activate */ Hilite, /* hilite */ Contains, /* contains */ CallCreateCallback, /* call_create_callback */ CallMapCallback, /* call_map_callback */ MakeVisible, /* make_visible */ SGMLSetValues, /* sgml_set_values */ InheritChanges, /* inherit_changes */ ComputeChangeMask, /* compute_change_mask */ Search, /* search */ ClearSelect, /* clear_select */ HiliteSelection, /* hilite_selection */ XYToPos, /* xy_to_pos */ PosToXY, /* pos_to_xy */ DumpText, /* dump_text */ NULL, /* extension */ } }; WidgetClass sGMLTextObjectClass = (WidgetClass) &sGMLTextClassRec; #define done(type, value) \ { \ if (toVal->addr != NULL) { \ if (toVal->size < sizeof(type)) { \ toVal->size = sizeof(type); \ return False; \ } \ *(type*)(toVal->addr) = (value); \ } \ else { \ static type static_val; \ static_val = (value); \ toVal->addr = (XtPointer)&static_val; \ } \ toVal->size = sizeof(type); \ return True; \ } static Boolean CvtStringToBreak (dpy, args, num_args, fromVal, toVal, closure_ret) Display* dpy; XrmValuePtr args; Cardinal *num_args; XrmValuePtr fromVal; XrmValuePtr toVal; XtPointer *closure_ret; { char *s; static int flag; if (*num_args != 0) XtWarningMsg("wrongParameters","cvtStringToBreak","XtToolkitError", "String to Break conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); s = (char *) fromVal->addr; flag = SGMLBREAK_NEVER; if (!strcmp(s,"SGMLBREAK_NEVER" )) flag = SGMLBREAK_NEVER; else if (!strcmp(s,"SGMLBREAK_ALWAYS")) flag = SGMLBREAK_ALWAYS; else if (!strcmp(s,"SGMLBREAK_SOFT")) flag = SGMLBREAK_SOFT; else XtStringConversionWarning((char *) fromVal->addr, SGMLRBreak); done(int,flag); } static Boolean CvtStringToLineStyle (dpy, args, num_args, fromVal, toVal, closure_ret) Display* dpy; XrmValuePtr args; Cardinal *num_args; XrmValuePtr fromVal; XrmValuePtr toVal; XtPointer *closure_ret; { char *s; static int flag; if (*num_args != 0) XtWarningMsg("wrongParameters","cvtStringToLineStyle","XtToolkitError", "String to Break conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); s = (char *) fromVal->addr; flag = SGMLLINE_STYLE_SOLID; if (!strcmp(s,"SGMLLINE_STYLE_SOLID" )) flag = SGMLLINE_STYLE_SOLID; else if (!strcmp(s,"SGMLLINE_STYLE_DOTTED")) flag = SGMLLINE_STYLE_DOTTED; else if (!strcmp(s,"SGMLLINE_STYLE_DASHED")) flag = SGMLLINE_STYLE_DASHED; else XtStringConversionWarning((char *) fromVal->addr, SGMLRLineStyle); done(int,flag); } static void lowcase(p) register char *p; { while(*p) { *p = tolower(*p); p++; } } static Boolean CvtStringToQuark(dpy, args, num_args, fromVal, toVal, closure_ret) Display* dpy; XrmValuePtr args; Cardinal *num_args; XrmValuePtr fromVal; XrmValuePtr toVal; XtPointer *closure_ret; { char *s; static XrmQuark q; if (*num_args != 0) XtWarningMsg("wrongParameters","cvtStringToQuark","XtToolkitError", "String to Quark conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); s = XtNewString((char *) fromVal->addr); lowcase(s); q = XrmStringToQuark(s); XtFree(s); done(XrmQuark,q); } static Boolean CvtRenditionToFontStruct(dpy, args, num_args, fromVal, toVal, closure_ret) Display* dpy; XrmValuePtr args; Cardinal *num_args; XrmValuePtr fromVal; XrmValuePtr toVal; XtPointer *closure_ret; { XFontStruct *f; Display* display; char fontbuf[255]; SGMLRendition *rendition = (SGMLRendition *) fromVal->addr; if (*num_args != 1) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "wrongParameters","cvtRenditionToFontStruct","XtToolkitError", "String to font conversion needs display argument", (String *) NULL, (Cardinal *)NULL); return False; } display = *(Display**)args[0].addr; sprintf(fontbuf,"-*-%s-%s-%s-%s-*-%d-*-*-*-%s-*-%s-1", XrmQuarkToString(rendition->family), XrmQuarkToString(rendition->weight), XrmQuarkToString(rendition->slant), XrmQuarkToString(rendition->width), rendition->size, XrmQuarkToString(rendition->spacing), XrmQuarkToString(rendition->registry)); f = XLoadQueryFont(display, fontbuf); if (f != NULL) { done( XFontStruct*, f); } else { XrmQuark star = XrmPermStringToQuark("*"); static XrmQuark old_registry, old_spacing; static char **fontlist = NULL; static nf; int i, bestPenalty = 99999, best = 0; #ifdef DEBUG XtDisplayStringConversionWarning(dpy, fontbuf, XtRFontStruct); #endif /* Try to find a substitute font */ /* * MacX seems to take forever if you ask it for fonts matching a particular * pattern, but responds reaonably if you ask for all fonts. Most other servers * tested seem to be faster if only asked for a subset of the fonts available. */ if (!strncmp(XServerVendor(display),"MacX",4)) { if (!fontlist) fontlist = XListFonts(display,"*",500,&nf); } else if (!fontlist || rendition->spacing!=old_spacing || rendition->registry!= old_registry) { if (fontlist) XFreeFontNames(fontlist); sprintf(fontbuf,"-*-*-*-*-*-*-*-*-*-*-%s-*-%s-1", XrmQuarkToString(rendition->spacing), XrmQuarkToString(rendition->registry)); old_spacing = rendition->spacing; old_registry = rendition->registry; fontlist = XListFonts(display,fontbuf,500,&nf); } for (i = 0; i < nf; i++ ) { int penalty = 0; char *p, *token = strcpy(fontbuf,fontlist[i]); for (p = token; *p ; p++) if (*p == '-') *p = '\0'; token += strlen(token) + 1; token += strlen(token) + 1; if (rendition->family != star && strcasecmp(token,XrmQuarkToString(rendition->family))) penalty += 10; token += strlen(token) + 1; if (rendition->weight != star && strcasecmp(token,XrmQuarkToString(rendition->weight))) penalty += 5; token += strlen(token) + 1; if (rendition->slant != star && strcasecmp(token,XrmQuarkToString(rendition->slant ))) penalty += 20; token += strlen(token) + 1; if (rendition->width != star && strcasecmp(token,XrmQuarkToString(rendition->width ))) penalty += 20; token += strlen(token) + 1; token += strlen(token) + 1; penalty += (atoi(token)-rendition->size) * (atoi(token)-rendition->size); token += strlen(token) + 1; token += strlen(token) + 1; token += strlen(token) + 1; if (rendition->spacing != star && strcasecmp(token,XrmQuarkToString(rendition->spacing ))) penalty += 200; token += strlen(token) + 1; token += strlen(token) + 1; if (rendition->registry != star && strcasecmp(token,XrmQuarkToString(rendition->registry))) penalty += 2000; if (penalty < bestPenalty) { bestPenalty = penalty; best = i; } } if (best) { int one = 1; #ifdef DEBUG XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "subFont","cvtRenditionToFontStruct","XtToolkitError", "Substituted font '%s'", (String *) &fontlist[best], (Cardinal *) &one); #endif f = XLoadQueryFont(display,fontlist[best]); } if (f != NULL) { done( XFontStruct*, f); } } f = XLoadQueryFont(display,"fixed"); if (f != NULL) { done( XFontStruct*, f); } XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "noFont","cvtRenditionToFontStruct","XtToolkitError", "Unable to load emergency font 'fixed'", (String *) NULL, (Cardinal *)NULL); return False; } static void FreeFontStruct(app, toVal, closure, args, num_args) XtAppContext app; XrmValuePtr toVal; XtPointer closure; /* unused */ XrmValuePtr args; Cardinal *num_args; { Display *display; if (*num_args != 1) { XtAppWarningMsg(app, "wrongParameters","freeFontStruct","XtToolkitError", "Free FontStruct requires display argument", (String *) NULL, (Cardinal *)NULL); return; } display = *(Display**)args[0].addr; XFreeFont( display, *(XFontStruct**)toVal->addr ); } static void FetchDisplayArg(widget, size, value) Widget widget; Cardinal *size; XrmValue* value; { static Display *dpy; if (widget == NULL) XtErrorMsg("missingWidget", "fetchDisplayArg","XtToolkitError", "FetchDisplayArg called without a widget to reference", (String*)NULL, (Cardinal*)NULL); /* can't return any useful Display and caller will de-ref NULL, so aborting is the only useful option */ dpy = DisplayOfScreen(XtScreenOfObject(widget)); value->size = sizeof(Display*); value->addr = (XtPointer) &dpy; } /*--------------------------------------------------------------*/ /* ClassInitialize: Register the converters */ /*--------------------------------------------------------------*/ static void ClassInitialize() { int bug1, bug2; static XtConvertArgRec displayConvertArg[] = { {XtProcedureArg, (XtPointer) FetchDisplayArg, 0} }; XtSetTypeConverter("SGMLRendition", "SGMLFontStruct", CvtRenditionToFontStruct, displayConvertArg, XtNumber(displayConvertArg), XtCacheByDisplay, FreeFontStruct); XtSetTypeConverter(XtRString, SGMLRBreak, CvtStringToBreak, (XtConvertArgList) NULL, (Cardinal) 0, XtCacheNone, NULL); XtSetTypeConverter(XtRString, SGMLRLineStyle, CvtStringToLineStyle, (XtConvertArgList) NULL, (Cardinal) 0, XtCacheNone, NULL); XtSetTypeConverter(XtRString, SGMLRQuark, CvtStringToQuark, (XtConvertArgList) NULL, (Cardinal) 0, XtCacheNone, NULL); /* * Check that the horrible hack to get around Xt bug is going to work */ bug1 = XtOffsetOf(WidgetRec,core.num_popups); bug2 = XtOffsetOf(SGMLTextRec,sgml_text.num_popups); if (bug1 != bug2) { printf("The terrible bug fix strikes again!!!! %d %d\n",bug1,bug2); exit(1); } } /*--------------------------------------------------------------*/ /* SetFontInfo: (private function) */ /*--------------------------------------------------------------*/ static void SetFontInfo(new) SGMLTextObject new; { /* if possible we will inherit graphic contexts from our parent */ SGMLTextObject parent = (SGMLTextObject) XtParent((Widget) new); SGMLRendition *rendition, *parent_rendition; int dir, ascent, descent; XCharStruct charinfo; if (SGMLIsText((Widget) parent)) parent_rendition = &parent->sgml_text.normal_rendition; rendition = &new->sgml_text.normal_rendition; if (SGMLIsText((Widget) parent) && parent_rendition->family == rendition->family && parent_rendition->weight == rendition->weight && parent_rendition->slant == rendition->slant && parent_rendition->width == rendition->width && parent_rendition->size == rendition->size && parent_rendition->spacing == rendition->spacing && parent_rendition->registry == rendition->registry) { new->sgml_text.font = parent->sgml_text.font; } else { XrmValue from; XrmValue to; SGMLRendition x; /* * To get the caching to work we have to make sure the unused space * in the structure is zeroed, and only copy font specific components. * We could save space in the cache by parsing a structure with only * the font components themselves. */ memset(&x,0,sizeof(SGMLRendition)); x.family = rendition->family; x.weight = rendition->weight; x.slant = rendition->slant; x.width = rendition->width; x.size = rendition->size; x.spacing = rendition->spacing; x.registry = rendition->registry; to.addr = (XtPointer) &new->sgml_text.font; to.size = sizeof(new->sgml_text.font); from.addr = (XtPointer) &x; from.size = sizeof(SGMLRendition); XtConvertAndStore((Widget)new,"SGMLRendition",&from,"SGMLFontStruct",&to); } if (SGMLIsText((Widget) parent) && parent->sgml_text.font16_name == new->sgml_text.font16_name ) new->sgml_text.font16 = parent->sgml_text.font16; else { if (new->sgml_text.font16_name != XrmStringToQuark("") && new->sgml_text.font16_name != NULL) { XrmValue from; XrmValue to; char *fname = XrmQuarkToString(new->sgml_text.font16_name); to.addr = (XtPointer) &new->sgml_text.font16; to.size = sizeof(new->sgml_text.font16); from.addr = (XtPointer) fname; from.size = sizeof(char *); XtConvertAndStore((Widget)new,XtRString,&from,XtRFontStruct,&to); } else new->sgml_text.font16 = NULL; } if (SGMLIsText((Widget) parent) && parent_rendition->color == rendition->color && parent->sgml_text.font == new->sgml_text.font && parent_rendition->underline_height == rendition->underline_height && parent_rendition->underline_style == rendition->underline_style && parent->sgml_text.font16_name == new->sgml_text.font16_name ) { new->sgml_text.gc = parent->sgml_text.gc; new->sgml_text.invert_gc = parent->sgml_text.invert_gc; new->sgml_text.reverse_gc = parent->sgml_text.reverse_gc; new->sgml_text.own_gcs = FALSE; new->sgml_text.font16_gc = parent->sgml_text.font16_gc; new->sgml_text.font16_invert_gc = parent->sgml_text.font16_invert_gc; } else { XGCValues values; XtGCMask valueMask; Pixel background, color; Widget w; Visual *Vis; for (w=XtParent((Widget) new); !XtIsWidget(w); w= XtParent(w)); background = w->core.background_pixel; valueMask = GCBackground | GCForeground | GCFont | GCLineWidth | GCLineStyle | GCDashList; if (DefaultDepthOfScreen(XtScreen(w))==1) color = 1 - background; else color = rendition->color; values.background = background; values.foreground = color; values.font = new->sgml_text.font->fid; values.line_width = rendition->underline_height; if (rendition->underline_style == SGMLLINE_STYLE_SOLID) { values.line_style = LineSolid; values.dashes = 4; } else if (rendition->underline_style == SGMLLINE_STYLE_DOTTED) { values.line_style = LineOnOffDash; values.dashes = 2; } else { values.line_style = LineOnOffDash; values.dashes = 8; } new->sgml_text.gc = XtGetGC ((Widget) new, valueMask, &values); if (new->sgml_text.font16) { values.font = new->sgml_text.font16->fid; new->sgml_text.font16_gc = XtGetGC ((Widget) new, valueMask, &values); values.foreground = background; values.background = color; new->sgml_text.font16_invert_gc = XtGetGC ((Widget) new, valueMask, &values); } values.font = new->sgml_text.font->fid; values.foreground = background; values.background = color; new->sgml_text.reverse_gc = XtGetGC ((Widget) new, valueMask, &values); valueMask = GCForeground | GCFunction | GCLineWidth | GCLineStyle; values.foreground = background ^ color; values.function = GXxor; new->sgml_text.invert_gc = XtGetGC ((Widget) new, valueMask, &values); new->sgml_text.own_gcs = TRUE; } XTextExtents(new->sgml_text.font," ",1,&dir,&ascent,&descent,&charinfo); if (new->sgml_text.font16) { int temp; new->sgml_text.ascent = max(new->sgml_text.font16->ascent, ascent); temp = max(descent,2*max(rendition->underline_height,1)* rendition->underline); new->sgml_text.descent = max(temp,new->sgml_text.font16->descent); } else { new->sgml_text.ascent = ascent; new->sgml_text.descent = max(descent,2*max(rendition->underline_height,1)*rendition->underline); } new->sgml_text.spacing = charinfo.width; } /*--------------------------------------------------------------*/ /* FreeFontInfo: (private function) */ /*--------------------------------------------------------------*/ static void FreeFontInfo(new) SGMLTextObject new; { if (new->sgml_text.own_gcs) { XtReleaseGC((Widget) new, new->sgml_text.gc); XtReleaseGC((Widget) new, new->sgml_text.invert_gc); XtReleaseGC((Widget) new, new->sgml_text.reverse_gc); if (new->sgml_text.font16) { XtReleaseGC((Widget) new, new->sgml_text.font16_gc); XtReleaseGC((Widget) new, new->sgml_text.font16_invert_gc); } new->sgml_text.own_gcs = FALSE; } } /*--------------------------------------------------------------*/ /* ClassPartInitialize: */ /*--------------------------------------------------------------*/ static void ClassPartInitialize (class) SGMLTextObjectClass class; { SGMLTextObjectClass superclass = (SGMLTextObjectClass) class->object_class.superclass; #define inherit(field,defval) if (class->sgml_text_class.field == defval) \ class->sgml_text_class.field = superclass->sgml_text_class.field inherit(compute_size ,SGMLInheritComputeSize ); inherit(adjust_size ,SGMLInheritAdjustSize ); inherit(adjust_position ,SGMLInheritAdjustPosition ); inherit(compute_size ,SGMLInheritComputeSize ); inherit(expose ,SGMLInheritExpose ); inherit(activate ,SGMLInheritActivate ); inherit(hilite ,SGMLInheritHilite ); inherit(contains ,SGMLInheritContains ); inherit(call_create_callback,SGMLInheritCallCreateCallback); inherit(call_map_callback ,SGMLInheritCallMapCallback ); inherit(make_visible ,SGMLInheritMakeVisible ); inherit(compute_change_mask ,SGMLInheritComputeChangeMask ); inherit(search ,SGMLInheritSearch ); inherit(clear_select ,SGMLInheritClearSelect ); inherit(hilite_selection ,SGMLInheritHiliteSelection ); inherit(xy_to_pos ,SGMLInheritXYToPos ); inherit(pos_to_xy ,SGMLInheritPosToXY ); inherit(dump_text ,SGMLInheritDumpText ); #undef inherit } /*--------------------------------------------------------------*/ /* Initialize: */ /*--------------------------------------------------------------*/ static void Initialize (request, new) SGMLTextObject request, new; { SGMLTextObject parent = (SGMLTextObject) XtParent((Widget) new); SGMLHyperWidget parentH = (SGMLHyperWidget) parent; XrmQuark any = XrmPermStringToQuark("*"); XrmQuark none = XrmPermStringToQuark(""); new->sgml_text.num_popups = 0; /* Why ask why? */ new->sgml_text.text = new->sgml_text.text?XtNewString(new->sgml_text.text):NULL; new->sgml_text.length = new->sgml_text.text?strlen(new->sgml_text.text):0; new->sgml_text.param = new->sgml_text.param?XtNewString(new->sgml_text.param):NULL; new->sgml_text.param_length = new->sgml_text.param?strlen(new->sgml_text.param):0; new->sgml_text.size_valid = FALSE; new->sgml_text.font = NULL; new->sgml_text.begin_select = NULL; new->sgml_text.end_select = NULL; new->sgml_text.font16 = NULL; /* * Many quantities can be inherited from our parent */ #define inherit(mask,field,defval,def) \ if (new->sgml_text.field == defval) \ { new->sgml_text.field = (SGMLIsText((Widget) parent)) ? parent->sgml_text.field : def; \ new->sgml_text.inheritance |= mask; } if (SGMLIsText((Widget) parent)) { new->sgml_text.left_indent += parent->sgml_text.left_indent; new->sgml_text.right_indent += parent->sgml_text.right_indent; } inherit(SGMLMLEFT_MARGIN ,left_margin ,SGMLINHERIT_MARGIN ,parentH->sgml_hyper.margin); inherit(SGMLMRIGHT_MARGIN ,right_margin ,SGMLINHERIT_MARGIN ,parentH->sgml_hyper.margin); inherit(SGMLMPARAGRAPH_INDENT ,paragraph_indent ,SGMLINHERIT_PARAGRAPHINDENT ,0); inherit(SGMLMSPACE_BEFORE ,space_before ,SGMLINHERIT_SPACE ,0); inherit(SGMLMSPACE_AFTER ,space_after ,SGMLINHERIT_SPACE ,0); inherit(SGMLMBREAK_BEFORE ,break_before ,SGMLINHERIT_BREAK ,SGMLBREAK_SOFT); inherit(SGMLMBREAK_AFTER ,break_after ,SGMLINHERIT_BREAK ,SGMLBREAK_SOFT); inherit(SGMLMALIGNMENT ,alignment ,SGMLINHERIT_ALIGNMENT ,SGMLALIGNMENT_LEFT); inherit(SGMLMSENSITIVE ,sensitive ,SGMLINHERIT_SENSITIVITY ,FALSE;); inherit(SGMLMEXACT_TERMINATOR ,exact_terminator ,SGMLINHERIT_SENSITIVITY ,TRUE); inherit(SGMLMHIDE_ILLEGAL_FLAGS,hide_illegal_tags ,SGMLINHERIT_SENSITIVITY ,FALSE); inherit(SGMLMSUPPORTS_ENTITIES ,supports_entities ,SGMLINHERIT_SENSITIVITY ,FALSE); inherit(SGMLMOUTLINE ,normal_rendition.outline ,SGMLINHERIT_OUTLINE ,FALSE;); inherit(SGMLMUNDERLINE ,normal_rendition.underline ,SGMLINHERIT_UNDERLINE ,0); inherit(SGMLMUNDERLINE_HEIGHT ,normal_rendition.underline_height ,SGMLINHERIT_UNDERLINEHEIGHT,0); inherit(SGMLMUNDERLINE_STYLE ,normal_rendition.underline_style ,SGMLINHERIT_UNDERLINESTYLE ,SGMLLINE_STYLE_SOLID); inherit(SGMLMCOLOR ,normal_rendition.color ,SGMLINHERIT_COLOR ,FALSE); inherit(SGMLMFAMILY ,normal_rendition.family ,SGMLINHERIT_QUARK ,any); inherit(SGMLMWEIGHT ,normal_rendition.weight ,SGMLINHERIT_QUARK ,any); inherit(SGMLMSLANT ,normal_rendition.slant ,SGMLINHERIT_QUARK ,any); inherit(SGMLMWIDTH ,normal_rendition.width ,SGMLINHERIT_QUARK ,any); inherit(SGMLMSPACING ,normal_rendition.spacing ,SGMLINHERIT_QUARK ,any); inherit(SGMLMREGISTRY ,normal_rendition.registry ,SGMLINHERIT_QUARK ,any); inherit(SGMLMSIZE ,normal_rendition.size ,SGMLINHERIT_SIZE ,14); inherit(SGMLMFONT16 ,font16_name ,SGMLINHERIT_QUARK ,none); SetFontInfo(new); #undef inherit } /*--------------------------------------------------------------*/ /* Inherit Changes */ /*--------------------------------------------------------------*/ static Boolean InheritChanges(w,inputMask) SGMLTextObject w; int inputMask; { Boolean redraw = FALSE; SGMLTextObject parent = (SGMLTextObject) XtParent((Widget) w); #define inherit(mask,field) if (mask & inputMask) w->sgml_text.field = parent->sgml_text.field; inherit(SGMLMLEFT_MARGIN ,left_margin ); inherit(SGMLMRIGHT_MARGIN ,right_margin ); inherit(SGMLMPARAGRAPH_INDENT ,paragraph_indent ); inherit(SGMLMSPACE_BEFORE ,space_before ); inherit(SGMLMSPACE_AFTER ,space_after ); inherit(SGMLMBREAK_BEFORE ,break_before ); inherit(SGMLMBREAK_AFTER ,break_after ); inherit(SGMLMALIGNMENT ,alignment ); inherit(SGMLMSENSITIVE ,sensitive ); inherit(SGMLMEXACT_TERMINATOR ,exact_terminator ); inherit(SGMLMHIDE_ILLEGAL_FLAGS,hide_illegal_tags ); inherit(SGMLMSUPPORTS_ENTITIES ,supports_entities ); inherit(SGMLMOUTLINE ,normal_rendition.outline ); inherit(SGMLMUNDERLINE ,normal_rendition.underline ); inherit(SGMLMUNDERLINE_HEIGHT ,normal_rendition.underline_height ); inherit(SGMLMUNDERLINE_STYLE ,normal_rendition.underline_style ); inherit(SGMLMCOLOR ,normal_rendition.color ); inherit(SGMLMFAMILY ,normal_rendition.family ); inherit(SGMLMWEIGHT ,normal_rendition.weight ); inherit(SGMLMSLANT ,normal_rendition.slant ); inherit(SGMLMWIDTH ,normal_rendition.width ); inherit(SGMLMSPACING ,normal_rendition.spacing ); inherit(SGMLMREGISTRY ,normal_rendition.registry ); inherit(SGMLMSIZE ,normal_rendition.size ); inherit(SGMLMFONT16 ,font16_name ); #undef inherit if (inputMask & gcMask) { FreeFontInfo(w); SetFontInfo(w); redraw = TRUE; } return redraw; } /*--------------------------------------------------------------*/ /* Compute Change Mask */ /*--------------------------------------------------------------*/ static int ComputeChangeMask(new,old) SGMLTextObject new,old; { int outputMask = 0; #define inherit(mask,field) if (old->sgml_text.field != new->sgml_text.field) outputMask |= mask; inherit(SGMLMLEFT_MARGIN ,left_margin ); inherit(SGMLMRIGHT_MARGIN ,right_margin ); inherit(SGMLMPARAGRAPH_INDENT ,paragraph_indent ); inherit(SGMLMSPACE_BEFORE ,space_before ); inherit(SGMLMSPACE_AFTER ,space_after ); inherit(SGMLMBREAK_BEFORE ,break_before ); inherit(SGMLMBREAK_AFTER ,break_after ); inherit(SGMLMALIGNMENT ,alignment ); inherit(SGMLMSENSITIVE ,sensitive ); inherit(SGMLMEXACT_TERMINATOR ,exact_terminator ); inherit(SGMLMHIDE_ILLEGAL_FLAGS,hide_illegal_tags ); inherit(SGMLMSUPPORTS_ENTITIES ,supports_entities ); inherit(SGMLMOUTLINE ,normal_rendition.outline ); inherit(SGMLMUNDERLINE ,normal_rendition.underline ); inherit(SGMLMUNDERLINE_HEIGHT ,normal_rendition.underline_height ); inherit(SGMLMUNDERLINE_STYLE ,normal_rendition.underline_style ); inherit(SGMLMCOLOR ,normal_rendition.color ); inherit(SGMLMFAMILY ,normal_rendition.family ); inherit(SGMLMWEIGHT ,normal_rendition.weight ); inherit(SGMLMSLANT ,normal_rendition.slant ); inherit(SGMLMWIDTH ,normal_rendition.width ); inherit(SGMLMSPACING ,normal_rendition.spacing ); inherit(SGMLMREGISTRY ,normal_rendition.registry ); inherit(SGMLMSIZE ,normal_rendition.size ); inherit(SGMLMFONT16 ,font16_name ); #undef inherit return outputMask; } /*--------------------------------------------------------------*/ /* Call the create Callback: */ /*--------------------------------------------------------------*/ static void CallCreateCallback(w,event) SGMLTextObject w; XEvent *event; { SGMLTextCallbackStruct cb; cb.reason = SGMLTEXT_CREATE; cb.event = event; cb.text = w->sgml_text.text; cb.length = w->sgml_text.length; cb.param = w->sgml_text.param; cb.param_length = w->sgml_text.param_length; XtCallCallbacks((Widget) w,SGMLNcreateCallback,(XtPointer) &cb); } /*--------------------------------------------------------------*/ /* Call the map Callback: */ /*--------------------------------------------------------------*/ static void CallMapCallback(w,event,map) SGMLTextObject w; XEvent *event; Boolean map; { SGMLTextCallbackStruct cb; cb.reason = SGMLTEXT_MAP; cb.event = event; cb.text = w->sgml_text.text; cb.length = w->sgml_text.length; cb.param = w->sgml_text.param; cb.param_length = w->sgml_text.param_length; if (map) XtCallCallbacks((Widget) w,SGMLNmapCallback ,(XtPointer) &cb); else XtCallCallbacks((Widget) w,SGMLNunmapCallback,(XtPointer) &cb); } /*--------------------------------------------------------------*/ /* Destroy the widget: release all memory alocated */ /*--------------------------------------------------------------*/ static void Destroy (w) SGMLTextObject w; { Widget parent = XtParent((Widget) w); /* * If our parent is a SGMLCompositeTextObject and is not itself being * destroyed then we better let them in on the act */ if (SGMLIsCompositeText(parent) & !parent->core.being_destroyed) { SGMLCompositeTextDeleteChild((Widget) w); } FreeFontInfo(w); XtFree(w->sgml_text.text); XtFree(w->sgml_text.param); } /*------------------------------------------------------------------*/ /* SetValues : redraw only for font or color changes */ /*------------------------------------------------------------------*/ static Boolean SGMLSetValues (current, request, new, args, num_args) SGMLTextObject current, request, new; ArgList args; Cardinal *num_args; { Boolean redraw = FALSE; int mask = ComputeChangeMask(new,current); new->sgml_text.inheritance &= ~mask; #define HAS_CHANGED(a) (new->sgml_text.a != current->sgml_text.a) if (HAS_CHANGED(text)) { new->sgml_text.text = new->sgml_text.text?XtNewString(new->sgml_text.text):NULL; new->sgml_text.length = new->sgml_text.text?strlen(new->sgml_text.text):0; XtFree(current->sgml_text.text); redraw = TRUE; } if (HAS_CHANGED(param)) { new->sgml_text.param = new->sgml_text.param?XtNewString(new->sgml_text.param):NULL; new->sgml_text.length = new->sgml_text.param?strlen(new->sgml_text.param):0; XtFree(current->sgml_text.param); } if (HAS_CHANGED(managed)) { Widget parent = XtParent((Widget) new); SGMLCompositeTextObjectClass parentClass = (SGMLCompositeTextObjectClass) XtClass(parent); (*parentClass->sgml_composite_text_class.change_managed)((Widget)new); redraw = TRUE; } if (HAS_CHANGED(normal_rendition.underline)) redraw = TRUE; if (mask & gcMask) { FreeFontInfo(new); SetFontInfo(new); redraw = TRUE; } return redraw; #undef HAS_CHANGED } static Boolean CallSetValues(class, current, request, new, args, num_args) SGMLTextObjectClass class; Widget current, request, new; ArgList args; Cardinal *num_args; { Boolean redisplay = FALSE; if ((WidgetClass) class != sGMLTextObjectClass) redisplay = CallSetValues(class->object_class.superclass, current, request, new, args, num_args); if (class->sgml_text_class.sgml_set_values != NULL) redisplay |= (*class->sgml_text_class.sgml_set_values) (current, request, new, args, num_args); return (redisplay); } static Boolean SetValues(current, request, new, args, num_args) SGMLTextObject current, request, new; ArgList args; Cardinal *num_args; { Boolean redraw = CallSetValues(XtClass((Widget) new), current, request, new, args, num_args); if (redraw & new->sgml_text.size_valid) { XtWidgetGeometry dummy; if (SGMLIsCompositeText((Widget) new)) { SGMLCompositeTextObjectClass class = (SGMLCompositeTextObjectClass) XtClass((Widget) new); XtGeometryResult result; result = (*class->sgml_composite_text_class.geometry_manager)((Widget)new,&dummy,&dummy); } else { Widget parent = XtParent((Widget) new); if (SGMLIsCompositeText(parent)) { SGMLCompositeTextObjectClass parentClass = (SGMLCompositeTextObjectClass) XtClass(parent); XtGeometryResult result; result = (*parentClass->sgml_composite_text_class.geometry_manager)(parent,&dummy,&dummy); } } } return redraw; #undef HAS_CHANGED } /*--------------------------------------------------------------*/ /* Redisplay */ /*--------------------------------------------------------------*/ static void Redisplay(t,event,region) SGMLTextObject t; XEvent *event; Region region; { } /*--------------------------------------------------------------*/ /* Compute Size: */ /*--------------------------------------------------------------*/ static void ComputeSize(w,geom,Adjust,Closure) SGMLTextObject w; SGMLGeometry *geom; AdjustSizeProc Adjust; Opaque Closure; { w->sgml_text.height = 0; w->sgml_text.width = 0; w->sgml_text.end = geom->coord; w->sgml_text.begin = geom->coord; w->sgml_text.margin = geom->coord.x; w->sgml_text.size_valid = TRUE; } /*--------------------------------------------------------------*/ /* Adjust Size: */ /*--------------------------------------------------------------*/ static Boolean AdjustSize(w,y,ascent,descent) SGMLTextObject w; Position y; Dimension ascent, descent; { return TRUE; } /*--------------------------------------------------------------*/ /* Adjust Position: */ /*--------------------------------------------------------------*/ static void AdjustPosition(w) SGMLTextObject w; { } /*--------------------------------------------------------------*/ /* Contains: */ /*--------------------------------------------------------------*/ static Widget Contains(w,x,y,mode) SGMLTextObject w; Position x,y; Boolean mode; { if ((w->sgml_text.sensitive || mode ) && w->sgml_text.begin.y < y && w->sgml_text.begin.y + w->sgml_text.height > y && w->sgml_text.margin < x && w->sgml_text.margin + w->sgml_text.width > x ) { if (w->sgml_text.begin.y == w->sgml_text.end.y) { return (Widget) w; } else if (y > w->sgml_text.end.y) { return (x < w->sgml_text.end.x)?(Widget) w:NULL; } else if (y > w->sgml_text.begin.y + w->sgml_text.begin.descent + w->sgml_text.begin.ascent) { return (Widget) w; } else { return (x > w->sgml_text.begin.x)?(Widget) w:NULL; } } return NULL; } /*--------------------------------------------------------------*/ /* Hilite: */ /*--------------------------------------------------------------*/ static void Hilite(t,state) SGMLTextObject t; int state; { Display *dpy = XtDisplayOfObject((Widget) t); Window wind = XtWindowOfObject((Widget) t); GC gc = t->sgml_text.invert_gc; Position margin = t->sgml_text.margin; Dimension depth = t->sgml_text.begin.ascent + t->sgml_text.begin.descent; Position bx, by, ex, ey; Dimension width, height; SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget)t); char *text = t->sgml_text.text; char *b = t->sgml_text.begin_select; char *e = t->sgml_text.end_select; switch (state) { case SGMLSELECT_WIDGET: bx = t->sgml_text.begin.x; by = t->sgml_text.begin.y; ex = t->sgml_text.end.x; ey = t->sgml_text.end.y; width = t->sgml_text.width; height = t->sgml_text.height; break; default: if (b == NULL || e == NULL || text == NULL || *text == '\0') return; (*class->sgml_text_class.pos_to_xy)(t,&bx,&by,b,FALSE); (*class->sgml_text_class.pos_to_xy)(t,&ex,&ey,e,TRUE); if (t->sgml_text.begin.ascent > t->sgml_text.ascent) { if (by == t->sgml_text.begin.y) by += (t->sgml_text.begin.ascent - t->sgml_text.ascent); if (ey == t->sgml_text.begin.y) ey += (t->sgml_text.begin.ascent - t->sgml_text.ascent); depth = t->sgml_text.ascent + t->sgml_text.descent; } if (by == ey) { width = ex - bx; height = depth; } else { width = t->sgml_text.width; height = ey - by + depth; } if (width <= 0 || height <=0) return; break; } if (by == ey) XFillRectangle(dpy,wind,gc,bx,by,width,height); else { XPoint p[8]; p[0].x = bx; p[0].y = by; p[1].x = margin + width; p[1].y = p[0].y; p[2].x = p[1].x; p[2].y = ey; p[3].x = ex; p[3].y = p[2].y; p[4].x = p[3].x; p[4].y = ey + depth; p[5].x = margin; p[5].y = p[4].y; p[6].x = p[5].x; p[6].y = by + depth; p[7].x = p[0].x; p[7].y = p[6].y; XFillPolygon(dpy,wind,gc,p,XtNumber(p),Nonconvex,CoordModeOrigin); } } /*--------------------------------------------------------------*/ /* MakeVisible: */ /*--------------------------------------------------------------*/ static void MakeVisible(w) SGMLTextObject w; { } /*--------------------------------------------------------------*/ /* Activate: */ /*--------------------------------------------------------------*/ static void Activate(w,event) SGMLTextObject w; XEvent *event; { SGMLTextCallbackStruct cb; /* Fill callback struct */ cb.text = w->sgml_text.text; cb.length = w->sgml_text.length; cb.param = w->sgml_text.param; cb.param_length = w->sgml_text.param_length; cb.reason = SGMLTEXT_ACTIVATE; cb.event = event; XtCallCallbacks ((Widget) w, SGMLNactivateCallback,(XtPointer) &cb); } /*--------------------------------------------------------------*/ /* _SGMLBreak: */ /*--------------------------------------------------------------*/ void _SGMLBreak(geom,space) SGMLGeometry *geom; Dimension space; { if (!geom->broken) { geom->coord.y += geom->coord.descent + geom->coord.ascent; geom->coord.y += space; geom->space = space; geom->broken = TRUE; } else { if (space > geom->space) { geom->coord.y += space - geom->space; geom->space = space; } } geom->coord.x = 0; geom->coord.descent = 0; geom->coord.ascent = 0; geom->alignment = SGMLALIGNMENT_NONE; geom->leave_space = FALSE; } /*-----------------------------------------------------------------------*/ /* Create a new SGMLTextObject */ /*-----------------------------------------------------------------------*/ Widget SGMLCreateText(parent,name,al,ac) Widget parent; char *name; ArgList al; int ac; { return XtCreateWidget(name,sGMLTextObjectClass,parent,al,ac); } /*-----------------------------------------------------------------------*/ /* Search: search a string */ /*-----------------------------------------------------------------------*/ static Widget Search(exp,sens,w,mode,extsearch,closure,sw) char *exp; Boolean sens; SGMLTextObject w; Boolean mode; Widget (*extsearch)(); XtPointer closure; SGMLTextObject *sw; { int i; char *p, *d, *f = w->sgml_text.text; char *delim = " \t\n\r"; int dc, pc; Widget result; /* skip all the widgets have been searched */ if (*sw) { if (*sw == w) { f = w->sgml_text.end_select + 1; *sw = NULL; } else { if (w->sgml_text.begin_select) { w->sgml_text.begin_select = NULL; w->sgml_text.end_select = NULL; } return NULL; } } /* strip off delim chars of the search string and data */ for (;f && *f != '\0' && strchr(delim,*f) ;f++); for (;exp && *exp != '\0' && strchr(delim,*exp); exp++); if (XtClass((Widget) w) == sGMLTextObjectClass) { /* skip the widget if it is a textobjectclass (ie: ) */ w->sgml_text.begin_select = NULL; w->sgml_text.end_select = NULL; if (mode) return NULL; else return extsearch(exp,sens,closure); } else { if (mode) /* full search */ { if (f != NULL && *f != '\0') { for (; *f != '\0'; f++) { for(d=f,p=exp; ;d++, p++) { if (*p == '\0') { w->sgml_text.begin_select = f; w->sgml_text.end_select = d - 1; return (Widget)w; } if (*d == '\0') { if (result = extsearch(p,sens,closure)) { while (strchr(delim,*(--d))); w->sgml_text.begin_select = f; w->sgml_text.end_select = d; return result; } else break; } if (!sens) { dc = tolower(*d); pc = tolower(*p); } else { dc = *d; pc = *p; } if (*p == ' ' && strchr (delim,*d)) while (strchr(delim,*(d+1)) && *(d+1)!='\0') d++; else if (pc != dc) break; } } } w->sgml_text.begin_select = NULL; w->sgml_text.end_select = NULL; return NULL; } else /* one loop match */ { if (f != NULL && *f != '\0') { for (p=exp, d=f; ;p++, d++) { if (*p == '\0') { w->sgml_text.begin_select = f; w->sgml_text.end_select = d - 1; return (Widget)w; } if (*d == '\0') break; if (!sens) { dc = tolower(*d); pc = tolower(*p); } else { dc = *d; pc = *p; } if (*p == ' ' && strchr (delim,*d)) while (strchr(delim,*(d+1)) && *(d+1)!='\0') d++; else if (pc != dc) { w->sgml_text.begin_select = NULL; w->sgml_text.end_select = NULL; return NULL; } } if (result = extsearch(p,sens,closure)) { while (strchr(delim,*(--d))); w->sgml_text.begin_select = f; w->sgml_text.end_select = d; } return result; } else return extsearch(exp,sens,closure); } } } /*-----------------------------------------------------------------------*/ /* Clear Select: clear the selected string from search */ /*-----------------------------------------------------------------------*/ static Boolean ClearSelect(w,sw,mode) SGMLTextObject w; SGMLTextObject sw; Boolean mode; { if (w->sgml_text.begin_select == NULL || w->sgml_text.end_select == NULL ) return FALSE; if (mode && w->sgml_text.begin_select) { SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget)w); (*class->sgml_text_class.hilite)(w,SGMLSELECT_WORD); } w->sgml_text.begin_select = NULL; w->sgml_text.end_select = NULL; if (w == sw) return TRUE; else return FALSE; } static Widget HiliteSelection(w,mode,ci) SGMLTextObject w; int mode; SGMLCopyInfo *ci; { return NULL; } static void XYToPos(w,x,y,pos) SGMLTextObject w; int *x, *y; char **pos; { } static void PosToXY(w,x,y,pos,after) SGMLTextObject w; Position *x, *y; char *pos; Boolean after; { } static Boolean DumpText(w,dp,pp) SGMLTextObject w; SGMLDumpTextInfo *dp; char **pp; { Dimension space_before = w->sgml_text.space_before; Dimension space_after = w->sgml_text.space_after; int break_before = w->sgml_text.break_before; int break_after = w->sgml_text.break_after; if (dp->begin_sw) { if (break_before == SGMLBREAK_ALWAYS || break_after == SGMLBREAK_ALWAYS) { int nl = (int)max(space_before,space_after); dp->line_spacing = 1; for (; nl > 0; nl-=10) dp->line_spacing++; } } return FALSE; } /* * External functions */ Widget ExtHiliteSelection(ww,mode,ci,plaintext) Widget ww; int mode; SGMLCopyInfo *ci; Boolean plaintext; { SGMLTextObject w = (SGMLTextObject)ww; char *pos = NULL; char *delim = " \r\n\t"; char *text = w->sgml_text.text; SGMLTextObjectClass class = (SGMLTextObjectClass) XtClass((Widget)w); char *b, *e, *eot; int x = ci->current_x; int y = ci->current_y; /* strip off the blank chars */ if (!plaintext) for (;text != NULL && *text != '\0' && strchr(delim,*text);text++); if (*text == '\0') return NULL; if (mode == SGMLSELECT_WORD) { (*class->sgml_text_class.xy_to_pos)(w,&x,&y,&pos); b = e = pos; if (iscntrl(*pos)) return NULL; if (ispunct(*pos)) { w->sgml_text.begin_select = pos; w->sgml_text.end_select = pos; } else if (strchr(delim,*pos)) { for (;b != text && strchr(delim,*b); b--); for (;*e!= '\0' && strchr(delim,*e); e++); if (b != text) b++; w->sgml_text.begin_select = b; w->sgml_text.end_select = --e; } else { for (;b != text; b--) if (strchr(delim,*b) || ispunct(*b) || iscntrl(*b) ) break; for (;;e++) if (strchr(delim,*e) || ispunct(*e) || iscntrl(*e) ) break; if (b != text) b++; w->sgml_text.begin_select = b; w->sgml_text.end_select = --e; } (*class->sgml_text_class.hilite)(w,SGMLSELECT_WORD); /* set the ci flags for the SelectEnd */ ci->sw_flag = TRUE; ci->last_mode = FALSE; ci->last_widget = (Widget) w; return (Widget) w; } /* Possible do the SGMLSELECT_LINE here also ? */ else if (mode == SGMLSELECT_REGION) { char *tempb = NULL, *tempe = NULL; SGMLTextObject lastw = (SGMLTextObject) ci->last_widget; SGMLTextObject currentw = (SGMLTextObject) ci->current_widget; int lastx = ci->last_x; int lasty = ci->last_y; Boolean unsel, revsel; if (x == lastx && y == lasty) return (Widget) lastw; if (y < ci->first_y || (x < ci->first_x && y <= ci->first_y)) { revsel = TRUE; ci->current_mode = TRUE; } else { revsel = FALSE; ci->current_mode = FALSE; } /* clear the selection when reverse <-> direct select */ if (ci->current_mode != ci->last_mode) { SGMLTextObjectClass cclass = (SGMLTextObjectClass) XtClass(ci->cw); Widget search_widget; search_widget = ci->last_mode ? ci->first_widget : ci->last_widget; (*cclass->sgml_text_class.clear_select)(ci->cw,search_widget,TRUE); ci->last_mode = ci->current_mode; ci->last_widget = ci->first_widget; lastw = (SGMLTextObject) ci->first_widget; if (w == lastw && w != currentw) return NULL; } if (w != lastw && w != currentw && !ci->flag) return NULL; pos = ci->last_pos; ci->sw_flag = TRUE; if (revsel) /* reverse select */ { if (y < lasty || (x < lastx && y <= lasty)) unsel = FALSE; else unsel = TRUE; if (w == lastw && w == currentw) { if ((lasty == ci->first_y && lastx == ci->first_x) && !w->sgml_text.begin_select) { w->sgml_text.begin_select = ci->first_char; w->sgml_text.end_select = ci->first_char; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); } if (unsel) { tempe = w->sgml_text.end_select; w->sgml_text.end_select = pos-1; } else { if (w->sgml_text.begin_select == NULL) /* in case of switching mode */ { w->sgml_text.begin_select = pos; w->sgml_text.end_select = ci->first_char; } else { tempe = w->sgml_text.end_select; w->sgml_text.end_select = w->sgml_text.begin_select -1; w->sgml_text.begin_select = pos; } } (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); if (tempe) w->sgml_text.end_select = tempe; w->sgml_text.begin_select = pos; return (Widget) w; } else if (w == lastw) { if (unsel) { if (w->sgml_text.begin_select) (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); w->sgml_text.begin_select = NULL; w->sgml_text.end_select = NULL; ci->flag = TRUE; return NULL; } else { if (!w->sgml_text.begin_select) { w->sgml_text.begin_select = ci->first_char; w->sgml_text.end_select = ci->first_char; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); } ci->flag = FALSE; tempe = w->sgml_text.end_select; if (w->sgml_text.begin_select != text) w->sgml_text.end_select = w->sgml_text.begin_select -1; else return (Widget) w; w->sgml_text.begin_select = text; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); w->sgml_text.end_select = tempe; return (Widget) w; } } else if (w == currentw) { if (unsel) { ci->flag = FALSE; tempe = w->sgml_text.end_select; if (pos != text) w->sgml_text.end_select = pos - 1; else return (Widget) w; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); w->sgml_text.begin_select = pos; w->sgml_text.end_select = tempe; return (Widget)w; } else { w->sgml_text.begin_select = pos; for (eot = pos; *eot != '\0';eot++); for (;strchr(delim,*eot);eot--); w->sgml_text.end_select = eot; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); ci->flag = TRUE; return NULL; } } } else /* direct select */ { if (y > lasty || (x > lastx && y >= lasty)) unsel = FALSE; else unsel = TRUE; if (w == lastw && w == currentw) { if ((lasty == ci->first_y && lastx == ci->first_x) && !w->sgml_text.begin_select) { w->sgml_text.begin_select = ci->first_char; w->sgml_text.end_select = ci->first_char; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); } if (unsel) { tempb = w->sgml_text.begin_select; if (*pos != '\0') w->sgml_text.begin_select = pos +1; else return (Widget) w; } else { if (w->sgml_text.begin_select == NULL) /* in case of switching mode only */ w->sgml_text.begin_select = ci->first_char; else { tempb = w->sgml_text.begin_select; if (*w->sgml_text.end_select != '\0') w->sgml_text.begin_select = w->sgml_text.end_select +1; else return (Widget) w; } w->sgml_text.end_select = pos; } (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); if (tempb) w->sgml_text.begin_select = tempb; w->sgml_text.end_select = pos; return (Widget) w; } else if (w == lastw) { if (unsel) { if (w->sgml_text.begin_select) (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); w->sgml_text.begin_select = NULL; w->sgml_text.end_select = NULL; ci->flag = FALSE; return (Widget)currentw; } else { if (!w->sgml_text.begin_select) { w->sgml_text.begin_select = ci->first_char; w->sgml_text.end_select = ci->first_char; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); } ci->flag = TRUE; tempb = w->sgml_text.begin_select; if (w->sgml_text.end_select != '\0') w->sgml_text.begin_select = w->sgml_text.end_select +1; else return NULL; for (eot = w->sgml_text.end_select;*eot != '\0';eot++); for (; strchr(delim,*eot)!= NULL && eot >= w->sgml_text.begin_select; eot--); w->sgml_text.end_select = eot; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); w->sgml_text.begin_select = tempb; return NULL; } } else if (w == currentw) { if (unsel) { ci->flag = TRUE; tempb = w->sgml_text.begin_select; if (*pos != '\0') w->sgml_text.begin_select = pos + 1; else return NULL; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); w->sgml_text.begin_select = tempb; w->sgml_text.end_select = pos; return NULL; } else { w->sgml_text.begin_select = text; w->sgml_text.end_select = pos; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); ci->flag = FALSE; return (Widget) w; } } } if (ci->flag) { if (unsel) { if (w->sgml_text.begin_select && w->sgml_text.end_select) (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); w->sgml_text.begin_select = NULL; w->sgml_text.end_select = NULL; } else { if (*text == '\0') return NULL; w->sgml_text.begin_select = text; for (eot = text ; *eot != '\0'; eot++); for (; strchr(delim,*eot)!= NULL; eot--); w->sgml_text.end_select = eot; (*class->sgml_text_class.hilite)(w,SGMLSELECT_REGION); } return NULL; } } else /* select all */ { if (text == NULL || *text == '\0') return NULL; w->sgml_text.begin_select = b = text; for (e = text; *e != '\0'; e++); if (!plaintext) for (;e > b && strchr(delim,*e)!=NULL; e--); w->sgml_text.end_select = e; (*class->sgml_text_class.hilite)(w,SGMLSELECT_ALL); ci->sw_flag = TRUE; ci->last_widget = (Widget) w; } return NULL; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Tree.c���������������������������������������������������������������������������������100666 � 21345 � 173 � 72232 5554674756 12524� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * $XConsortium: Tree.c,v 1.42 91/02/20 20:06:07 converse Exp $ * * Copyright 1990 Massachusetts Institute of Technology * Copyright 1989 Prentice Hall * * Permission to use, copy, modify, and distribute this software for any * purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation. * * M.I.T., Prentice Hall and the authors disclaim all warranties with regard * to this software, including all implied warranties of merchantability and * fitness. In no event shall M.I.T., Prentice Hall or the authors be liable * for any special, indirect or cosequential damages or any damages whatsoever * resulting from loss of use, data or profits, whether in an action of * contract, negligence or other tortious action, arising out of or in * connection with the use or performance of this software. * * Authors: Jim Fulton, MIT X Consortium, * based on a version by Douglas Young, Prentice Hall * * This widget is based on the Tree widget described on pages 397-419 of * Douglas Young's book "The X Window System, Programming and Applications * with Xt OSF/Motif Edition." The layout code has been rewritten to use * additional blank space to make the structure of the graph easier to see * as well as to support vertical trees. */ #include <X11/Intrinsic.h> #include <X11/IntrinsicP.h> #include <X11/StringDefs.h> #include <X11/CoreP.h> #include <X11/CompositeP.h> #include <X11/ConstrainP.h> #include "TreeP.h" #define IsHorizontal(tw) ((tw)->tree.gravity == WestGravity || \ (tw)->tree.gravity == EastGravity) /* widget class method */ static void ClassInitialize(); static void Initialize(); static void ConstraintInitialize(); static void ConstraintDestroy(); static Boolean ConstraintSetValues(); static void Destroy(); static Boolean SetValues(); static XtGeometryResult GeometryManager(); static void ChangeManaged(); static void Redisplay(); static XtGeometryResult QueryGeometry(); /* utility routines */ static void insert_node(); static void delete_node(); static void layout_tree(); /* * resources of the tree itself */ static XtResource resources[] = { { XtNautoReconfigure, XtCAutoReconfigure, XtRBoolean, sizeof (Boolean), XtOffsetOf(TreeRec, tree.auto_reconfigure), XtRImmediate, (XtPointer) FALSE }, { XtNhSpace, XtCHSpace, XtRDimension, sizeof (Dimension), XtOffsetOf(TreeRec, tree.hpad), XtRImmediate, (XtPointer) 0 }, { XtNvSpace, XtCVSpace, XtRDimension, sizeof (Dimension), XtOffsetOf(TreeRec, tree.vpad), XtRImmediate, (XtPointer) 0 }, { XtNforeground, XtCForeground, XtRPixel, sizeof (Pixel), XtOffsetOf(TreeRec, tree.foreground), XtRString, XtDefaultForeground}, { XtNlineWidth, XtCLineWidth, XtRDimension, sizeof (Dimension), XtOffsetOf(TreeRec, tree.line_width), XtRImmediate, (XtPointer) 0 }, { XtNgravity, XtCGravity, XtRGravity, sizeof (XtGravity), XtOffsetOf(TreeRec, tree.gravity), XtRImmediate, (XtPointer) WestGravity }, }; /* * resources that are attached to all children of the tree */ static XtResource treeConstraintResources[] = { { XtNtreeParent, XtCTreeParent, XtRWidget, sizeof (Widget), XtOffsetOf(TreeConstraintsRec, tree.parent), XtRImmediate, NULL }, { XtNtreeGC, XtCTreeGC, XtRGC, sizeof(GC), XtOffsetOf(TreeConstraintsRec, tree.gc), XtRImmediate, NULL }, }; TreeClassRec treeClassRec = { { /* core_class fields */ (WidgetClass) &constraintClassRec, /* superclass */ "Tree", /* class_name */ sizeof(TreeRec), /* widget_size */ ClassInitialize, /* class_init */ NULL, /* class_part_init */ FALSE, /* class_inited */ Initialize, /* initialize */ NULL, /* initialize_hook */ XtInheritRealize, /* realize */ NULL, /* actions */ 0, /* num_actions */ resources, /* resources */ XtNumber(resources), /* num_resources */ NULLQUARK, /* xrm_class */ TRUE, /* compress_motion */ TRUE, /* compress_exposure */ TRUE, /* compress_enterleave*/ TRUE, /* visible_interest */ Destroy, /* destroy */ NULL, /* resize */ Redisplay, /* expose */ SetValues, /* set_values */ NULL, /* set_values_hook */ XtInheritSetValuesAlmost, /* set_values_almost */ NULL, /* get_values_hook */ NULL, /* accept_focus */ XtVersion, /* version */ NULL, /* callback_private */ NULL, /* tm_table */ QueryGeometry, /* query_geometry */ NULL, /* display_accelerator*/ NULL, /* extension */ }, { /* composite_class fields */ GeometryManager, /* geometry_manager */ ChangeManaged, /* change_managed */ XtInheritInsertChild, /* insert_child */ XtInheritDeleteChild, /* delete_child */ NULL, /* extension */ }, { /* constraint_class fields */ treeConstraintResources, /* subresources */ XtNumber(treeConstraintResources), /* subresource_count */ sizeof(TreeConstraintsRec), /* constraint_size */ ConstraintInitialize, /* initialize */ ConstraintDestroy, /* destroy */ ConstraintSetValues, /* set_values */ NULL, /* extension */ }, { /* Tree class fields */ 0, /* ignore */ } }; WidgetClass treeWidgetClass = (WidgetClass) &treeClassRec; /***************************************************************************** * * * tree utility routines * * * *****************************************************************************/ static void initialize_dimensions (listp, sizep, n) Dimension **listp; int *sizep; int n; { register int i; register Dimension *l; if (!*listp) { *listp = (Dimension *) XtCalloc ((unsigned int) n, (unsigned int) sizeof(Dimension)); *sizep = ((*listp) ? n : 0); return; } if (n > *sizep) { *listp = (Dimension *) XtRealloc((char *) *listp, (unsigned int) (n*sizeof(Dimension))); if (!*listp) { *sizep = 0; return; } for (i = *sizep, l = (*listp) + i; i < n; i++, l++) *l = 0; *sizep = n; } return; } static GC get_tree_gc (w) TreeWidget w; { XtGCMask valuemask = GCBackground | GCForeground; XGCValues values; values.background = w->core.background_pixel; values.foreground = w->tree.foreground; if (w->tree.line_width != 0) { valuemask |= GCLineWidth; values.line_width = w->tree.line_width; } return XtGetGC ((Widget) w, valuemask, &values); } static void insert_node (parent, node) Widget parent, node; { TreeConstraints pc; TreeConstraints nc = TREE_CONSTRAINT(node); int nindex; nc->tree.parent = parent; if (parent == NULL) return; /* * If there isn't more room in the children array, * allocate additional space. */ pc = TREE_CONSTRAINT(parent); nindex = pc->tree.n_children; if (pc->tree.n_children == pc->tree.max_children) { pc->tree.max_children += (pc->tree.max_children / 2) + 2; pc->tree.children = (WidgetList) XtRealloc ((char *)pc->tree.children, (unsigned int) ((pc->tree.max_children) * sizeof(Widget))); } /* * Add the sub_node in the next available slot and * increment the counter. */ pc->tree.children[nindex] = node; pc->tree.n_children++; } static void delete_node (parent, node) Widget parent, node; { TreeConstraints pc; int pos, i; /* * Make sure the parent exists. */ if (!parent) return; pc = TREE_CONSTRAINT(parent); /* * Find the sub_node on its parent's list. */ for (pos = 0; pos < pc->tree.n_children; pos++) if (pc->tree.children[pos] == node) break; if (pos == pc->tree.n_children) return; /* * Decrement the number of children */ pc->tree.n_children--; /* * Fill in the gap left by the sub_node. * Zero the last slot for good luck. */ for (i = pos; i < pc->tree.n_children; i++) pc->tree.children[i] = pc->tree.children[i+1]; pc->tree.children[pc->tree.n_children]=0; } static void check_gravity (tw, grav) TreeWidget tw; XtGravity grav; { switch (tw->tree.gravity) { case WestGravity: case NorthGravity: case EastGravity: case SouthGravity: break; default: tw->tree.gravity = grav; break; } } #define done(address, type) \ { (*toVal).size = sizeof(type); (*toVal).addr = (caddr_t) address; } static struct _namepair { XrmQuark quark; char *name; XtGravity gravity; } names[] = { { NULLQUARK, XtEForget, ForgetGravity }, { NULLQUARK, XtENorthWest, NorthWestGravity }, { NULLQUARK, XtENorth, NorthGravity }, { NULLQUARK, XtENorthEast, NorthEastGravity }, { NULLQUARK, XtEWest, WestGravity }, { NULLQUARK, XtECenter, CenterGravity }, { NULLQUARK, XtEEast, EastGravity }, { NULLQUARK, XtESouthWest, SouthWestGravity }, { NULLQUARK, XtESouth, SouthGravity }, { NULLQUARK, XtESouthEast, SouthEastGravity }, { NULLQUARK, XtEStatic, StaticGravity }, { NULLQUARK, XtEUnmap, UnmapGravity }, { NULLQUARK, XtEleft, WestGravity }, { NULLQUARK, XtEtop, NorthGravity }, { NULLQUARK, XtEright, EastGravity }, { NULLQUARK, XtEbottom, SouthGravity }, { NULLQUARK, NULL, ForgetGravity } }; void CvtStringToGravity (args, num_args, fromVal, toVal) XrmValuePtr args; Cardinal *num_args; XrmValuePtr fromVal; XrmValuePtr toVal; { static Boolean haveQuarks = FALSE; char lowerName[40]; XrmQuark q; char *s, *t; struct _namepair *np; if (*num_args != 0) XtWarningMsg("wrongParameters","cvtStringToGravity","XtToolkitError", "String to Gravity conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); if (!haveQuarks) { for (np = names; np->name; np++) { np->quark = XrmStringToQuark (np->name); } haveQuarks = TRUE; } s = (char *) fromVal->addr; if (strlen(s) < sizeof lowerName) { for (t=lowerName; (*t++ = tolower(*s++)) != '\0'; ); q = XrmStringToQuark (lowerName); for (np = names; np->name; np++) { if (np->quark == q) { done (&np->gravity, XtGravity); return; } } } XtStringConversionWarning((char *) fromVal->addr, XtRGravity); } /***************************************************************************** * * * tree class methods * * * *****************************************************************************/ static void ClassInitialize () { XtAddConverter (XtRString, XtRGravity, CvtStringToGravity, (XtConvertArgList) NULL, (Cardinal) 0); } static void Initialize (grequest, gnew) Widget grequest, gnew; { TreeWidget request = (TreeWidget) grequest, new = (TreeWidget) gnew; Arg args[2]; /* * Make sure the widget's width and height are * greater than zero. */ if (request->core.width <= 0) new->core.width = 5; if (request->core.height <= 0) new->core.height = 5; /* * Set the padding according to the orientation */ if (request->tree.hpad == 0 && request->tree.vpad == 0) { if (IsHorizontal (request)) { new->tree.hpad = TREE_HORIZONTAL_DEFAULT_SPACING; new->tree.vpad = TREE_VERTICAL_DEFAULT_SPACING; } else { new->tree.hpad = TREE_VERTICAL_DEFAULT_SPACING; new->tree.vpad = TREE_HORIZONTAL_DEFAULT_SPACING; } } /* * Create a graphics context for the connecting lines. */ new->tree.gc = get_tree_gc (new); /* * Create the hidden root widget. */ new->tree.tree_root = (Widget) NULL; XtSetArg(args[0], XtNwidth, 1); XtSetArg(args[1], XtNheight, 1); new->tree.tree_root = XtCreateWidget ("root", widgetClass, gnew, args,((Cardinal) 2)); /* * Allocate the array used to hold the widest values per depth */ new->tree.largest = NULL; new->tree.n_largest = 0; initialize_dimensions (&new->tree.largest, &new->tree.n_largest, TREE_INITIAL_DEPTH); /* * make sure that our gravity is one of the acceptable values */ check_gravity (new, WestGravity); } /* ARGSUSED */ static void ConstraintInitialize (request, new) Widget request, new; { TreeConstraints tc = TREE_CONSTRAINT(new); TreeWidget tw = (TreeWidget) new->core.parent; /* * Initialize the widget to have no sub-nodes. */ tc->tree.n_children = 0; tc->tree.max_children = 0; tc->tree.children = (Widget *) NULL; tc->tree.x = tc->tree.y = 0; tc->tree.bbsubwidth = 0; tc->tree.bbsubheight = 0; /* * If this widget has a super-node, add it to that * widget' sub-nodes list. Otherwise make it a sub-node of * the tree_root widget. */ if (tc->tree.parent) insert_node (tc->tree.parent, new); else if (tw->tree.tree_root) insert_node (tw->tree.tree_root, new); } /* ARGSUSED */ static Boolean SetValues (gcurrent, grequest, gnew) Widget gcurrent, grequest, gnew; { TreeWidget current = (TreeWidget) gcurrent, new = (TreeWidget) gnew; Boolean redraw = FALSE; /* * If the foreground color has changed, redo the GC's * and indicate a redraw. */ if (new->tree.foreground != current->tree.foreground || new->core.background_pixel != current->core.background_pixel || new->tree.line_width != current->tree.line_width) { XtReleaseGC (gnew, new->tree.gc); new->tree.gc = get_tree_gc (new); redraw = TRUE; } /* * If the minimum spacing has changed, recalculate the * tree layout. layout_tree() does a redraw, so we don't * need SetValues to do another one. */ if (new->tree.gravity != current->tree.gravity) { check_gravity (new, current->tree.gravity); } if (IsHorizontal(new) != IsHorizontal(current)) { if (new->tree.vpad == current->tree.vpad && new->tree.hpad == current->tree.hpad) { new->tree.vpad = current->tree.hpad; new->tree.hpad = current->tree.vpad; } } if (new->tree.vpad != current->tree.vpad || new->tree.hpad != current->tree.hpad || new->tree.gravity != current->tree.gravity) { layout_tree (new, TRUE); redraw = FALSE; } return redraw; } /* ARGSUSED */ static Boolean ConstraintSetValues (current, request, new, args, num_args) Widget current, request, new; ArgList args; Cardinal *num_args; { TreeConstraints newc = TREE_CONSTRAINT(new); TreeConstraints curc = TREE_CONSTRAINT(current); TreeWidget tw = (TreeWidget) new->core.parent; /* * If the parent field has changed, remove the widget * from the old widget's children list and add it to the * new one. */ if (curc->tree.parent != newc->tree.parent){ if (curc->tree.parent) delete_node (curc->tree.parent, new); if (newc->tree.parent) insert_node(newc->tree.parent, new); /* * If the Tree widget has been realized, * compute new layout. */ if (XtIsRealized((Widget)tw)) layout_tree (tw, FALSE); } return False; } static void ConstraintDestroy (w) Widget w; { TreeConstraints tc = TREE_CONSTRAINT(w); TreeWidget tw = (TreeWidget) XtParent(w); int i; /* * Remove the widget from its parent's sub-nodes list and * make all this widget's sub-nodes sub-nodes of the parent. */ if (tw->tree.tree_root == w) { if (tc->tree.n_children > 0) tw->tree.tree_root = tc->tree.children[0]; else tw->tree.tree_root = NULL; } delete_node (tc->tree.parent, (Widget) w); for (i = 0; i< tc->tree.n_children; i++) insert_node (tc->tree.parent, tc->tree.children[i]); layout_tree ((TreeWidget) (w->core.parent), FALSE); } /* ARGSUSED */ static XtGeometryResult GeometryManager (w, request, reply) Widget w; XtWidgetGeometry *request; XtWidgetGeometry *reply; { TreeWidget tw = (TreeWidget) w->core.parent; /* * No position changes allowed!. */ if ((request->request_mode & CWX && request->x!=w->core.x) ||(request->request_mode & CWY && request->y!=w->core.y)) return (XtGeometryNo); /* * Allow all resize requests. */ if (request->request_mode & CWWidth) w->core.width = request->width; if (request->request_mode & CWHeight) w->core.height = request->height; if (request->request_mode & CWBorderWidth) w->core.border_width = request->border_width; if (tw->tree.auto_reconfigure) layout_tree (tw, FALSE); return (XtGeometryYes); } static void ChangeManaged (gw) Widget gw; { layout_tree ((TreeWidget) gw, FALSE); } static void Destroy (gw) Widget gw; { TreeWidget w = (TreeWidget) gw; XtReleaseGC (gw, w->tree.gc); if (w->tree.largest) XtFree ((char *) w->tree.largest); } /* ARGSUSED */ static void Redisplay (tw, event, region) TreeWidget tw; XEvent *event; Region region; { /* * If the Tree widget is visible, visit each managed child. */ if (tw->core.visible) { int i, j; Display *dpy = XtDisplay (tw); Window w = XtWindow (tw); for (i = 0; i < tw->composite.num_children; i++) { register Widget child = tw->composite.children[i]; TreeConstraints tc = TREE_CONSTRAINT(child); /* * Don't draw lines from the fake tree_root. */ if (child != tw->tree.tree_root && tc->tree.n_children) { int srcx = child->core.x + child->core.border_width; int srcy = child->core.y + child->core.border_width; switch (tw->tree.gravity) { case WestGravity: srcx += child->core.width + child->core.border_width; /* fall through */ case EastGravity: srcy += child->core.height / 2; break; case NorthGravity: srcy += child->core.height + child->core.border_width; /* fall through */ case SouthGravity: srcx += child->core.width / 2; break; } for (j = 0; j < tc->tree.n_children; j++) { register Widget k = tc->tree.children[j]; GC gc = (tc->tree.gc ? tc->tree.gc : tw->tree.gc); switch (tw->tree.gravity) { case WestGravity: /* * right center to left center */ XDrawLine (dpy, w, gc, srcx, srcy, (int) k->core.x, (k->core.y + ((int) k->core.border_width) + ((int) k->core.height) / 2)); break; case NorthGravity: /* * bottom center to top center */ XDrawLine (dpy, w, gc, srcx, srcy, (k->core.x + ((int) k->core.border_width) + ((int) k->core.width) / 2), (int) k->core.y); break; case EastGravity: /* * left center to right center */ XDrawLine (dpy, w, gc, srcx, srcy, (k->core.x + (((int) k->core.border_width) << 1) + (int) k->core.width), (k->core.y + ((int) k->core.border_width) + ((int) k->core.height) / 2)); break; case SouthGravity: /* * top center to bottom center */ XDrawLine (dpy, w, gc, srcx, srcy, (k->core.x + ((int) k->core.border_width) + ((int) k->core.width) / 2), (k->core.y + (((int) k->core.border_width) << 1) + (int) k->core.height)); break; } } } } } } static XtGeometryResult QueryGeometry (w, intended, preferred) Widget w; XtWidgetGeometry *intended, *preferred; { register TreeWidget tw = (TreeWidget) w; preferred->request_mode = (CWWidth | CWHeight); preferred->width = tw->tree.maxwidth; preferred->height = tw->tree.maxheight; if (((intended->request_mode & (CWWidth | CWHeight)) == (CWWidth | CWHeight)) && intended->width == preferred->width && intended->height == preferred->height) return XtGeometryYes; else if (preferred->width == w->core.width && preferred->height == w->core.height) return XtGeometryNo; else return XtGeometryAlmost; } /***************************************************************************** * * * tree layout algorithm * * * * Each node in the tree is "shrink-wrapped" with a minimal bounding * * rectangle, laid next to its siblings (with a small about of padding in * * between) and then wrapped with their parent. Parents are centered about * * their children (or vice versa if the parent is larger than the children). * * * *****************************************************************************/ static void compute_bounding_box_subtree (tree, w, depth) TreeWidget tree; Widget w; int depth; { TreeConstraints tc = TREE_CONSTRAINT(w); /* info attached to all kids */ register int i; Bool horiz = IsHorizontal (tree); Dimension newwidth, newheight; Dimension bw2 = w->core.border_width * 2; /* * Set the max-size per level. */ if (depth >= tree->tree.n_largest) { initialize_dimensions (&tree->tree.largest, &tree->tree.n_largest, depth + 1); } newwidth = ((horiz ? w->core.width : w->core.height) + bw2); if (tree->tree.largest[depth] < newwidth) tree->tree.largest[depth] = newwidth; /* * initialize */ tc->tree.bbwidth = w->core.width + bw2; tc->tree.bbheight = w->core.height + bw2; if (tc->tree.n_children == 0) return; /* * Figure the size of the opposite dimension (vertical if tree is * horizontal, else vice versa). The other dimension will be set * in the second pass once we know the maximum dimensions. */ newwidth = 0; newheight = 0; for (i = 0; i < tc->tree.n_children; i++) { Widget child = tc->tree.children[i]; TreeConstraints cc = TREE_CONSTRAINT(child); compute_bounding_box_subtree (tree, child, depth + 1); if (horiz) { if (newwidth < cc->tree.bbwidth) newwidth = cc->tree.bbwidth; newheight += tree->tree.vpad + cc->tree.bbheight; } else { if (newheight < cc->tree.bbheight) newheight = cc->tree.bbheight; newwidth += tree->tree.hpad + cc->tree.bbwidth; } } tc->tree.bbsubwidth = newwidth; tc->tree.bbsubheight = newheight; /* * Now fit parent onto side (or top) of bounding box and correct for * extra padding. Be careful of unsigned arithmetic. */ if (horiz) { tc->tree.bbwidth += tree->tree.hpad + newwidth; newheight -= tree->tree.vpad; if (newheight > tc->tree.bbheight) tc->tree.bbheight = newheight; } else { tc->tree.bbheight += tree->tree.vpad + newheight; newwidth -= tree->tree.hpad; if (newwidth > tc->tree.bbwidth) tc->tree.bbwidth = newwidth; } } static void set_positions (tw, w, level) TreeWidget tw; Widget w; int level; { int i; if (w) { TreeConstraints tc = TREE_CONSTRAINT(w); if (level > 0) { /* * mirror if necessary */ switch (tw->tree.gravity) { case EastGravity: tc->tree.x = (((Position) tw->tree.maxwidth) - ((Position) w->core.width) - tc->tree.x); break; case SouthGravity: tc->tree.y = (((Position) tw->tree.maxheight) - ((Position) w->core.height) - tc->tree.y); break; } /* * Move the widget into position. */ XtMoveWidget (w, tc->tree.x, tc->tree.y); } /* * Set the positions of all children. */ for (i = 0; i < tc->tree.n_children; i++) set_positions (tw, tc->tree.children[i], level + 1); } } static void arrange_subtree (tree, w, depth, x, y) TreeWidget tree; Widget w; int depth; Position x, y; { TreeConstraints tc = TREE_CONSTRAINT(w); /* info attached to all kids */ TreeConstraints firstcc, lastcc; register int i; int newx, newy; Bool horiz = IsHorizontal (tree); Widget child = NULL; Dimension tmp; Dimension bw2 = w->core.border_width * 2; Bool relayout = True; /* * If no children, then just lay out where requested. */ tc->tree.x = x; tc->tree.y = y; if (horiz) { int myh = (w->core.height + bw2); if (myh > (int)tc->tree.bbsubheight) { y += (myh - (int)tc->tree.bbsubheight) / 2; relayout = False; } } else { int myw = (w->core.width + bw2); if (myw > (int)tc->tree.bbsubwidth) { x += (myw - (int)tc->tree.bbsubwidth) / 2; relayout = False; } } if ((tmp = ((Dimension) x) + tc->tree.bbwidth) > tree->tree.maxwidth) tree->tree.maxwidth = tmp; if ((tmp = ((Dimension) y) + tc->tree.bbheight) > tree->tree.maxheight) tree->tree.maxheight = tmp; if (tc->tree.n_children == 0) return; /* * Have children, so walk down tree laying out children, then laying * out parents. */ if (horiz) { newx = x + tree->tree.largest[depth]; if (depth > 0) newx += tree->tree.hpad; newy = y; } else { newx = x; newy = y + tree->tree.largest[depth]; if (depth > 0) newy += tree->tree.vpad; } for (i = 0; i < tc->tree.n_children; i++) { TreeConstraints cc; child = tc->tree.children[i]; /* last value is used outside loop */ cc = TREE_CONSTRAINT(child); arrange_subtree (tree, child, depth + 1, newx, newy); if (horiz) { newy += tree->tree.vpad + cc->tree.bbheight; } else { newx += tree->tree.hpad + cc->tree.bbwidth; } } /* * now layout parent between first and last children */ if (relayout) { Position adjusted; firstcc = TREE_CONSTRAINT (tc->tree.children[0]); lastcc = TREE_CONSTRAINT (child); /* Adjustments are disallowed if they result in a position above * or to the left of the originally requested position, because * this could collide with the position of the previous sibling. */ if (horiz) { tc->tree.x = x; adjusted = firstcc->tree.y + ((lastcc->tree.y + (Position) child->core.height + (Position) child->core.border_width * 2 - firstcc->tree.y - (Position) w->core.height - (Position) w->core.border_width * 2 + 1) / 2); if (adjusted > tc->tree.y) tc->tree.y = adjusted; } else { adjusted = firstcc->tree.x + ((lastcc->tree.x + (Position) child->core.width + (Position) child->core.border_width * 2 - firstcc->tree.x - (Position) w->core.width - (Position) w->core.border_width * 2 + 1) / 2); if (adjusted > tc->tree.x) tc->tree.x = adjusted; tc->tree.y = y; } } } static void set_tree_size (tw, insetvalues, width, height) TreeWidget tw; Boolean insetvalues; Dimension width, height; { if (insetvalues) { tw->core.width = width; tw->core.height = height; } else { Dimension replyWidth = 0, replyHeight = 0; XtGeometryResult result = XtMakeResizeRequest ((Widget) tw, width, height, &replyWidth, &replyHeight); /* * Accept any compromise. */ if (result == XtGeometryAlmost) XtMakeResizeRequest ((Widget) tw, replyWidth, replyHeight, (Dimension *) NULL, (Dimension *) NULL); } return; } static void layout_tree (tw, insetvalues) TreeWidget tw; Boolean insetvalues; { int i; Dimension *dp; /* * Do a depth-first search computing the width and height of the bounding * box for the tree at that position (and below). Then, walk again using * this information to layout the children at each level. */ if (tw->tree.tree_root == NULL) return; tw->tree.maxwidth = tw->tree.maxheight = 0; for (i = 0, dp = tw->tree.largest; i < tw->tree.n_largest; i++, dp++) *dp = 0; initialize_dimensions (&tw->tree.largest, &tw->tree.n_largest, tw->tree.n_largest); compute_bounding_box_subtree (tw, tw->tree.tree_root, 0); /* * Second pass to do final layout. Each child's bounding box is stacked * on top of (if horizontal, else next to) on top of its siblings. The * parent is centered between the first and last children. */ arrange_subtree (tw, tw->tree.tree_root, 0, 0, 0); /* * Move each widget into place. */ set_tree_size (tw, insetvalues, tw->tree.maxwidth, tw->tree.maxheight); set_positions (tw, tw->tree.tree_root, 0); /* * And redisplay. */ if (XtIsRealized ((Widget) tw)) { XClearArea (XtDisplay(tw), XtWindow((Widget)tw), 0, 0, 0, 0, True); } } /***************************************************************************** * * * Public Routines * * * *****************************************************************************/ void #if NeedFunctionPrototypes TreeForceLayout (Widget tree) #else TreeForceLayout (tree) Widget tree; #endif { layout_tree ((TreeWidget) tree, FALSE); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Ghostview.c����������������������������������������������������������������������������100666 � 21345 � 173 � 165112 5554674757 13625� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Ghostview.c -- Ghostview widget. * Copyright (C) 1992 Timothy O. Theisen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Author: Tim Theisen Systems Programmer * Internet: tim@cs.wisc.edu Department of Computer Sciences * UUCP: uwvax!tim University of Wisconsin-Madison * Phone: (608)262-0438 1210 West Dayton Street * FAX: (608)262-9777 Madison, WI 53706 */ #include <X11/IntrinsicP.h> #include <X11/StringDefs.h> #include <X11/Xatom.h> #include <X11/Xproto.h> #include <X11/Xos.h> #include "GhostviewP.h" #include <ctype.h> #ifndef XlibSpecificationRelease typedef char *XPointer; #endif #include <signal.h> #ifdef SIGNALRETURNSINT #define SIGVAL int #else #define SIGVAL void #endif #ifdef sun #include <vfork.h> #endif #ifdef NON_BLOCKING_IO #include <fcntl.h> /* if POSIX O_NONBLOCK is not available, use O_NDELAY */ #if !defined(O_NONBLOCK) && defined(O_NDELAY) #define O_NONBLOCK O_NDELAY #endif #endif #include <errno.h> /* BSD 4.3 errno.h does not declare errno */ extern int errno; /* Both error returns are checked for non-blocking I/O. */ /* Manufacture the other error code if only one exists. */ #if !defined(EWOULDBLOCK) && defined(EAGAIN) #define EWOULDBLOCK EAGAIN #endif #if !defined(EAGAIN) && defined(EWOULDBLOCK) #define EAGAIN EWOULDBLOCK #endif #ifndef VMS /* GV_BUFSIZ is set to the minimum POSIX PIPE_BUF to ensure that * nonblocking writes to ghostscript will work properly. */ #define GV_BUFSIZ 512 #else /* VMS */ /* ** GV_BUFSIZ is the maximum length line we can handle, so we up it to 1024 */ #define GV_BUFSIZ 1024 #endif /* VMS */ /* length calculates string length at compile time */ /* can only be used with character constants */ #define length(a) (sizeof(a)-1) #define iscomment(a, b) (strncmp(a, b, length(b)) == 0) static void ComputeXdpi(); static void ComputeYdpi(); static XtResource resources[] = { #define offset(field) XtOffsetOf(GhostviewRec, ghostview.field) { XtNbottomMargin, XtCMargin, XtRInt, sizeof(int), offset(bottom_margin), XtRImmediate, (XtPointer)0 }, { XtNbusyCursor, XtCCursor, XtRCursor, sizeof(XtPointer), offset(busy_cursor), XtRString, "watch" }, { XtNcallback, XtCCallback, XtRCallback, sizeof(XtPointer), offset(callback), XtRCallback, (XtPointer)NULL }, { XtNcursor, XtCCursor, XtRCursor, sizeof(XtPointer), offset(cursor), XtRString, "crosshair" }, { XtNfilename, XtCFilename, XtRString, sizeof(String), offset(filename), XtRString, (XtPointer)NULL }, { XtNinterpreter, XtCInterpreter, XtRString, sizeof(String), offset(interpreter), XtRString, "gs" }, { XtNleftMargin, XtCMargin, XtRInt, sizeof(int), offset(left_margin), XtRImmediate, (XtPointer)0 }, { XtNllx, XtCBoundingBox, XtRInt, sizeof(int), offset(llx), XtRImmediate, (XtPointer)0 }, { XtNlly, XtCBoundingBox, XtRInt, sizeof(int), offset(lly), XtRImmediate, (XtPointer)0 }, { XtNmessageCallback, XtCCallback, XtRCallback, sizeof(XtPointer), offset(message_callback), XtRCallback, (XtPointer)NULL }, { XtNorientation, XtCOrientation, XtRPageOrientation, sizeof(XtPageOrientation), offset(orientation), XtRImmediate, (XtPointer)XtPageOrientationPortrait }, { XtNoutputCallback, XtCCallback, XtRCallback, sizeof(XtPointer), offset(output_callback), XtRCallback, (XtPointer)NULL }, { XtNpreload, XtCPreload, XtRString, sizeof(String), offset(preload), XtRString, (XtPointer)NULL }, { XtNquiet, XtCQuiet, XtRBoolean, sizeof(Boolean), offset(quiet), XtRImmediate, (XtPointer)True }, { XtNrightMargin, XtCMargin, XtRInt, sizeof(int), offset(right_margin), XtRImmediate, (XtPointer)0 }, { XtNtopMargin, XtCMargin, XtRInt, sizeof(int), offset(top_margin), XtRImmediate, (XtPointer)0 }, { XtNuseBackingPixmap, XtCUseBackingPixmap, XtRBoolean, sizeof(Boolean), offset(use_bpixmap), XtRImmediate, (XtPointer)True }, { XtNurx, XtCBoundingBox, XtRInt, sizeof(int), offset(urx), XtRImmediate, (XtPointer)612 }, { XtNury, XtCBoundingBox, XtRInt, sizeof(int), offset(ury), XtRImmediate, (XtPointer)792 }, { XtNxdpi, XtCResolution, XtRFloat, sizeof(float), offset(xdpi), XtRCallProc, (XtPointer)ComputeXdpi }, { XtNydpi, XtCResolution, XtRFloat, sizeof(float), offset(ydpi), XtRCallProc, (XtPointer)ComputeYdpi }, #undef offset }; static void Message(); static void Notify(); static void Input(); static void Output(); static void ClassInitialize(); static void ClassPartInitialize(); static void Initialize(); static void Realize(); static void Destroy(); static void Resize(); static Boolean SetValues(); static XtGeometryResult QueryGeometry(); static void Layout(); static Boolean ComputeSize(); static void ChangeSize(); static Boolean Setup(); static void StartInterpreter(); static void StopInterpreter(); static void InterpreterFailed(); static XtActionsRec actions[] = { {"message", Message}, {"notify", Notify}, }; /* notify takes zero to four parameters. The first two give the width and * height of the zoom requested in the default user coordinate system. * If they are omitted, a default value of 72 is provided. If the second * parameter is omitted, the zoom area is assumed to be a square. * The next two parameters give the desired resolution of the zoom window. * If they are omitted, a default value of 300 is provided. If the four * parameter is omitted, the y resolution is assumed to be equal to the * x resolution. */ static char translations[] = "<Message>: message() \n\ <Btn1Down>: notify(72) \n\ <Btn2Down>: notify(108) \n\ <Btn3Down>: notify(144) \n\ "; GhostviewClassRec ghostviewClassRec = { { /* core fields */ /* superclass */ (WidgetClass) &coreClassRec, /* class_name */ "Ghostview", /* widget_size */ sizeof(GhostviewRec), /* class_initialize */ ClassInitialize, /* class_part_initialize */ ClassPartInitialize, /* class_inited */ FALSE, /* initialize */ Initialize, /* initialize_hook */ NULL, /* realize */ Realize, /* actions */ actions, /* num_actions */ XtNumber(actions), /* resources */ resources, /* num_resources */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* compress_motion */ TRUE, /* compress_exposure */ TRUE, /* compress_enterleave */ TRUE, /* visible_interest */ FALSE, /* destroy */ Destroy, /* resize */ Resize, /* expose */ NULL, /* set_values */ SetValues, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_private */ NULL, /* tm_table */ translations, /* query_geometry */ QueryGeometry, /* display_accelerator */ XtInheritDisplayAccelerator, /* extension */ NULL }, { /* ghostview fields */ /* ghostview */ NULL, /* next */ NULL, /* page */ NULL, /* done */ NULL } }; WidgetClass ghostviewWidgetClass = (WidgetClass)&ghostviewClassRec; /* Procedures that compute the default xdpi and ydpi from display parameters */ static void ComputeXdpi(w, offset, value) Widget w; int offset; XrmValue *value; { static float xdpi; xdpi = 25.4 * WidthOfScreen(XtScreen(w)) / WidthMMOfScreen(XtScreen(w)); value->addr = (XtPointer) &xdpi; } static void ComputeYdpi(w, offset, value) Widget w; int offset; XrmValue *value; { static float ydpi; ydpi = 25.4 * HeightOfScreen(XtScreen(w)) / HeightMMOfScreen(XtScreen(w)); value->addr = (XtPointer) &ydpi; } /* Message action routine. * Passes ghostscript message events back to application via * the message callback. It also marks the interpreter as * being not busy at the end of page, and stops the interpreter * when it send a "done" message. */ static void Message(w, event, params, num_params) Widget w; XEvent *event; String *params; /* unused */ Cardinal *num_params; /* unused */ { GhostviewWidget gvw = (GhostviewWidget) w; GhostviewWidgetClass gvc = (GhostviewWidgetClass) XtClass(w); gvw->ghostview.mwin = event->xclient.data.l[0]; if (event->xclient.message_type == XmuInternAtom(XtDisplay(w), gvc->ghostview_class.page)) { gvw->ghostview.busy = False; XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.cursor); XtCallCallbackList(w, gvw->ghostview.message_callback, "Page"); } else if (event->xclient.message_type == XmuInternAtom(XtDisplay(w), gvc->ghostview_class.done)) { StopInterpreter(w); XtCallCallbackList(w, gvw->ghostview.message_callback, "Done"); } } /* Notify action routine. * Calculates where the user clicked in the default user coordinate system. * Call the callbacks with the point of click and size of zoom window * requested. */ static void Notify(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { GhostviewWidget gvw = (GhostviewWidget) w; GhostviewReturnStruct ret_val; /* notify takes zero to four parameters. The first two give the width and * height of the zoom requested in the default user coordinate system. * If they are omitted, a default value of 72 is provided. If the second * parameter is omitted, the zoom area is assumed to be a square. * The next two parameters give the desired resolution of the zoom window. * If they are omitted, a default value of 300 is provided. If the four * parameter is omitted, the y resolution is assumed to be equal to the * x resolution. */ switch (*num_params) { case 0: ret_val.width = ret_val.height = 72; ret_val.xdpi = ret_val.ydpi = 300; break; case 1: ret_val.width = ret_val.height = atoi(params[0]); ret_val.xdpi = ret_val.ydpi = 300; break; case 2: ret_val.width = atoi(params[0]); ret_val.height = atoi(params[1]); ret_val.xdpi = ret_val.ydpi = 300; break; case 3: ret_val.width = atoi(params[0]); ret_val.height = atoi(params[1]); ret_val.xdpi = ret_val.ydpi = atoi(params[2]); break; default: ret_val.width = atoi(params[0]); ret_val.height = atoi(params[1]); ret_val.xdpi = atoi(params[2]); ret_val.ydpi = atoi(params[3]); break; } switch (gvw->ghostview.orientation) { case XtPageOrientationPortrait: ret_val.psx = gvw->ghostview.llx + event->xbutton.x * 72.0 / gvw->ghostview.xdpi; ret_val.psy = gvw->ghostview.ury - event->xbutton.y * 72.0 / gvw->ghostview.ydpi; break; case XtPageOrientationLandscape: ret_val.psx = gvw->ghostview.llx + event->xbutton.y * 72.0 / gvw->ghostview.ydpi; ret_val.psy = gvw->ghostview.lly + event->xbutton.x * 72.0 / gvw->ghostview.xdpi; break; case XtPageOrientationUpsideDown: ret_val.psx = gvw->ghostview.urx - event->xbutton.x * 72.0 / gvw->ghostview.xdpi; ret_val.psy = gvw->ghostview.lly + event->xbutton.y * 72.0 / gvw->ghostview.ydpi; break; case XtPageOrientationSeascape: ret_val.psx = gvw->ghostview.urx - event->xbutton.y * 72.0 / gvw->ghostview.ydpi; ret_val.psy = gvw->ghostview.ury - event->xbutton.x * 72.0 / gvw->ghostview.xdpi; break; } XtCallCallbackList(w, gvw->ghostview.callback, (XtPointer) &ret_val); } #ifndef SEEK_SET #define SEEK_SET 0 #endif static Boolean broken_pipe = False; static SIGVAL CatchPipe(i) int i; { broken_pipe = True; #ifdef SIGNALRETURNSINT return 0; #endif } #ifndef VMS /* Input - Feed data to ghostscript's stdin. * Write bytes to ghostscript using non-blocking I/O. * Also, pipe signals are caught during writing. The return * values are checked and the appropriate action is taken. I do * this at this low level, because it may not be appropriate for * SIGPIPE to be caught for the overall application. */ static void Input(client_data, source, id) XtPointer client_data; int *source; XtInputId *id; { Widget w = (Widget) client_data; GhostviewWidget gvw = (GhostviewWidget) w; int bytes_written; SIGVAL (*oldsig)(); oldsig = signal(SIGPIPE, CatchPipe); #ifdef NON_BLOCKING_IO do { #endif if (gvw->ghostview.buffer_bytes_left == 0) { /* Get a new section if required */ if (gvw->ghostview.ps_input && gvw->ghostview.bytes_left == 0) { struct record_list *ps_old = gvw->ghostview.ps_input; gvw->ghostview.ps_input = ps_old->next; if (ps_old->close) fclose(ps_old->fp); XtFree((char *)ps_old); } /* Have to seek at the beginning of each section */ if (gvw->ghostview.ps_input && gvw->ghostview.ps_input->seek_needed) { if (gvw->ghostview.ps_input->len > 0) fseek(gvw->ghostview.ps_input->fp, gvw->ghostview.ps_input->begin, SEEK_SET); gvw->ghostview.ps_input->seek_needed = False; gvw->ghostview.bytes_left = gvw->ghostview.ps_input->len; } if (gvw->ghostview.bytes_left > GV_BUFSIZ) { gvw->ghostview.buffer_bytes_left = fread(gvw->ghostview.input_buffer, sizeof (char), GV_BUFSIZ, gvw->ghostview.ps_input->fp); } else if (gvw->ghostview.bytes_left > 0) { gvw->ghostview.buffer_bytes_left = fread(gvw->ghostview.input_buffer, sizeof (char), gvw->ghostview.bytes_left, gvw->ghostview.ps_input->fp); } else { gvw->ghostview.buffer_bytes_left = 0; } if (gvw->ghostview.bytes_left > 0 && gvw->ghostview.buffer_bytes_left == 0) { InterpreterFailed(w); /* Error occurred */ } gvw->ghostview.input_buffer_ptr = gvw->ghostview.input_buffer; gvw->ghostview.bytes_left -= gvw->ghostview.buffer_bytes_left; } if (gvw->ghostview.buffer_bytes_left > 0) { bytes_written = write(gvw->ghostview.interpreter_input, gvw->ghostview.input_buffer_ptr, gvw->ghostview.buffer_bytes_left); if (broken_pipe) { broken_pipe = False; InterpreterFailed(w); /* Something bad happened */ } else if (bytes_written == -1) { if ((errno != EWOULDBLOCK) && (errno != EAGAIN)) { InterpreterFailed(w); /* Something bad happened */ } } else { gvw->ghostview.buffer_bytes_left -= bytes_written; gvw->ghostview.input_buffer_ptr += bytes_written; } } #ifdef NON_BLOCKING_IO } while(gvw->ghostview.ps_input && gvw->ghostview.buffer_bytes_left == 0); #endif signal(SIGPIPE, oldsig); if (gvw->ghostview.ps_input == NULL && gvw->ghostview.buffer_bytes_left == 0) { if (gvw->ghostview.interpreter_input_id != None) { XtRemoveInput(gvw->ghostview.interpreter_input_id); gvw->ghostview.interpreter_input_id = None; } } } /* Output - receive I/O from ghostscript's stdout and stderr. * Pass this to the application via the output_callback. */ static void Output(client_data, source, id) XtPointer client_data; int *source; XtInputId *id; { Widget w = (Widget) client_data; GhostviewWidget gvw = (GhostviewWidget) w; char buf[GV_BUFSIZ+1]; int bytes = 0; if (*source == gvw->ghostview.interpreter_output) { bytes = read(gvw->ghostview.interpreter_output, buf, GV_BUFSIZ); if (bytes == 0) { /* EOF occurred */ close(gvw->ghostview.interpreter_output); gvw->ghostview.interpreter_output = -1; XtRemoveInput(gvw->ghostview.interpreter_output_id); return; } else if (bytes == -1) { InterpreterFailed(w); /* Something bad happened */ return; } } else if (*source == gvw->ghostview.interpreter_error) { bytes = read(gvw->ghostview.interpreter_error, buf, GV_BUFSIZ); if (bytes == 0) { /* EOF occurred */ close(gvw->ghostview.interpreter_error); gvw->ghostview.interpreter_error = -1; XtRemoveInput(gvw->ghostview.interpreter_error_id); return; } else if (bytes == -1) { InterpreterFailed(w); /* Something bad happened */ return; } } if (bytes > 0) { buf[bytes] = '\0'; XtCallCallbackList(w, gvw->ghostview.output_callback, (XtPointer) buf); } } #endif /* VMS */ /* Register the type converter required for the PageOrientation. */ /* This routine is called exactly once. */ static void ClassInitialize() { XtSetTypeConverter(XtRString, XtRPageOrientation, XmuCvtStringToPageOrientation, NULL, 0, XtCacheAll, NULL); } /* Get atoms needed to communicate with ghostscript. */ /* This routine is called once per display. */ static void ClassPartInitialize(class) WidgetClass class; { GhostviewWidgetClass gvc = (GhostviewWidgetClass)class; gvc->ghostview_class.ghostview = XmuMakeAtom("GHOSTVIEW"); gvc->ghostview_class.next = XmuMakeAtom("NEXT"); gvc->ghostview_class.page = XmuMakeAtom("PAGE"); gvc->ghostview_class.done = XmuMakeAtom("DONE"); } /* Initialize private state. */ static void Initialize(request, new, args, num_args) Widget request, new; ArgList args; /* unused */ Cardinal *num_args; /* unused */ { XGCValues values; XtGCMask mask; GhostviewWidget ngvw = (GhostviewWidget) new; GhostviewWidget rgvw = (GhostviewWidget) request; values.foreground = new->core.background_pixel; mask = GCForeground; ngvw->ghostview.gc = XtGetGC(new, mask, &values); ngvw->ghostview.mwin = None; ngvw->ghostview.disable_start = False; ngvw->ghostview.interpreter_pid = -1; ngvw->ghostview.input_buffer = NULL; ngvw->ghostview.bytes_left = 0; #ifndef VMS ngvw->ghostview.input_buffer_ptr = NULL; ngvw->ghostview.buffer_bytes_left = 0; #endif ngvw->ghostview.ps_input = NULL; ngvw->ghostview.interpreter_input = -1; ngvw->ghostview.interpreter_output = -1; #ifndef VMS ngvw->ghostview.interpreter_error = -1; ngvw->ghostview.interpreter_input_id = None; ngvw->ghostview.interpreter_output_id = None; ngvw->ghostview.interpreter_error_id = None; #else /* VMS */ memset(ngvw->ghostview.interpreter_input_iosb, 0, 8); memset(ngvw->ghostview.interpreter_output_iosb, 0, 8); ngvw->ghostview.output_buffer = NULL; #endif /* VMS */ ngvw->ghostview.gs_width = 0; ngvw->ghostview.gs_height = 0; ngvw->ghostview.changed = False; ngvw->ghostview.busy = False; /* Compute window size */ Layout(new, (rgvw->core.width == 0), (rgvw->core.height == 0)); } /* Create Window and start interpreter if needed */ static void Realize(w, valueMask, attributes) Widget w; Mask *valueMask; XSetWindowAttributes *attributes; { GhostviewWidget gvw = (GhostviewWidget) w; if (gvw->ghostview.cursor != None) { attributes->cursor = gvw->ghostview.cursor; *valueMask |= CWCursor; } XtCreateWindow(w, (unsigned int) InputOutput, (Visual *) CopyFromParent, *valueMask, attributes); Setup(w); } /* Destroy routine: kill the interpreter and release the GC */ static void Destroy(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; StopInterpreter(w); XtReleaseGC(w, gvw->ghostview.gc); if (gvw->ghostview.input_buffer) XtFree(gvw->ghostview.input_buffer); #ifdef VMS if (gvw->ghostview.output_buffer) XtFree(gvw->ghostview.output_buffer); #endif VMS if (gvw->core.background_pixmap != XtUnspecifiedPixmap) XFreePixmap(XtDisplay(w), gvw->core.background_pixmap); } /* Process resize request. Requested size cannot be changed. * NOTE: This routine may be called before the widget is realized. * (It was a surprise to me.) * If the widget is realized, start a new interpreter by calling Setup(). * If Setup() actually started a new interpreter and it is taking input * from stdin, send a refresh message to the application. This is the * only way that the application can be notified that it needs to resend * the input because someone forced a new window size on the widget. */ static void Resize(w) Widget w; { Layout(w, False, False); if (!XtIsRealized(w)) return; if (Setup(w)) { GhostviewWidget gvw = (GhostviewWidget) w; if (gvw->ghostview.filename == NULL) { XtCallCallbackList(w, gvw->ghostview.message_callback, "Refresh"); } } } /* SetValues routine. Set new private state, based on changed values * in the widget. Always returns False, because redisplay is never needed. */ static Boolean SetValues(current, request, new) Widget current, request, new; { GhostviewWidget cgvw = (GhostviewWidget) current; GhostviewWidget rgvw = (GhostviewWidget) request; GhostviewWidget ngvw = (GhostviewWidget) new; String cfilename; String rfilename; String cpreload; String rpreload; cfilename = cgvw->ghostview.filename; if (cfilename == NULL) cfilename = "(null)"; rfilename = rgvw->ghostview.filename; if (rfilename == NULL) rfilename = "(null)"; cpreload = cgvw->ghostview.preload; if (cpreload == NULL) cpreload = "(null)"; rpreload = rgvw->ghostview.preload; if (rpreload == NULL) rpreload = "(null)"; if (XtIsRealized(new) && !ngvw->ghostview.busy && (cgvw->ghostview.cursor != ngvw->ghostview.cursor)) { XDefineCursor(XtDisplay(new), XtWindow(new), ngvw->ghostview.cursor); } if (XtIsRealized(new) && ngvw->ghostview.busy && (cgvw->ghostview.busy_cursor != ngvw->ghostview.busy_cursor)) { XDefineCursor(XtDisplay(new), XtWindow(new), ngvw->ghostview.busy_cursor); } if ((cgvw->core.width != rgvw->core.width) || (cgvw->core.height != rgvw->core.height) || strcmp(cgvw->ghostview.interpreter, rgvw->ghostview.interpreter) || strcmp(cpreload, rpreload) || (cgvw->ghostview.quiet != rgvw->ghostview.quiet) || strcmp(cfilename, rfilename) || (cgvw->ghostview.orientation != rgvw->ghostview.orientation) || (cgvw->ghostview.use_bpixmap != rgvw->ghostview.use_bpixmap) || (cgvw->ghostview.xdpi != rgvw->ghostview.xdpi) || (cgvw->ghostview.ydpi != rgvw->ghostview.ydpi) || (cgvw->ghostview.bottom_margin != rgvw->ghostview.bottom_margin) || (cgvw->ghostview.left_margin != rgvw->ghostview.left_margin) || (cgvw->ghostview.right_margin != rgvw->ghostview.right_margin) || (cgvw->ghostview.top_margin != rgvw->ghostview.top_margin) || (cgvw->ghostview.llx != rgvw->ghostview.llx) || (cgvw->ghostview.lly != rgvw->ghostview.lly) || (cgvw->ghostview.urx != rgvw->ghostview.urx) || (cgvw->ghostview.ury != rgvw->ghostview.ury)) { ngvw->ghostview.changed = True; Layout(new, True, True); } if (ngvw->ghostview.changed && XtIsRealized(current)) Setup(new); return(False); } /* Function Name: QueryGeometry * Description: This tells the parent what size we would like to be * given certain constraints. * Arguments: w - the widget. * intended - what the parent intends to do with us. * requested - what we want to happen. */ static XtGeometryResult QueryGeometry(w, intended, requested) Widget w; XtWidgetGeometry *intended, *requested; { Dimension new_width, new_height; Boolean change, width_req, height_req; width_req = intended->request_mode & CWWidth; height_req = intended->request_mode & CWHeight; if (width_req) new_width = intended->width; else new_width = w->core.width; if (height_req) new_height = intended->height; else new_height = w->core.height; requested->request_mode = 0; /* * We only care about our height and width. */ if (!width_req && !height_req) return(XtGeometryYes); change = ComputeSize(w, !width_req, !height_req, &new_width, &new_height); requested->request_mode |= CWWidth; requested->width = new_width; requested->request_mode |= CWHeight; requested->height = new_height; if (change) return(XtGeometryAlmost); return(XtGeometryYes); } /* Layout the widget. */ static void Layout(w, xfree, yfree) Widget w; Boolean xfree, yfree; { Dimension width = w->core.width; Dimension height = w->core.height; Boolean different_size = ComputeSize(w, xfree, yfree, &width, &height); if (different_size) ChangeSize(w, width, height); } void GhostviewLayout(w,xfree,yfree) Widget w; Bool xfree; Bool yfree; { Layout(w, xfree, yfree); } /* Compute new size of window, sets xdpi and ydpi if necessary. * returns True if new window size is different */ static Boolean ComputeSize(w, xfree, yfree, width, height) Widget w; Boolean xfree, yfree; /* Am I allowed to change width or height */ Dimension *width, *height; { GhostviewWidget gvw = (GhostviewWidget) w; Dimension new_width = *width; Dimension new_height = *height; float newxdpi, newydpi; Boolean change; if (xfree && yfree) { /* width and height can be changed, calculate window size according */ /* to xpdi and ydpi */ switch (gvw->ghostview.orientation) { case XtPageOrientationPortrait: case XtPageOrientationUpsideDown: new_width = (gvw->ghostview.urx - gvw->ghostview.llx) / 72.0 * gvw->ghostview.xdpi + 0.5; new_height = (gvw->ghostview.ury - gvw->ghostview.lly) / 72.0 * gvw->ghostview.ydpi + 0.5; break; case XtPageOrientationLandscape: case XtPageOrientationSeascape: new_width = (gvw->ghostview.ury - gvw->ghostview.lly) / 72.0 * gvw->ghostview.xdpi + 0.5; new_height = (gvw->ghostview.urx - gvw->ghostview.llx) / 72.0 * gvw->ghostview.ydpi + 0.5; break; } } else if (xfree) { /* height is fixed. Preserve aspect ratio by recomputing */ /* ydpi and xdpi */ switch (gvw->ghostview.orientation) { case XtPageOrientationPortrait: case XtPageOrientationUpsideDown: newydpi = gvw->core.height * 72.0 / (gvw->ghostview.ury - gvw->ghostview.lly); newxdpi = newydpi * gvw->ghostview.xdpi / gvw->ghostview.ydpi; gvw->ghostview.xdpi = newxdpi; gvw->ghostview.ydpi = newydpi; new_width = (gvw->ghostview.urx - gvw->ghostview.llx) / 72.0 * gvw->ghostview.xdpi + 0.5; break; case XtPageOrientationLandscape: case XtPageOrientationSeascape: newydpi = gvw->core.height * 72.0 / (gvw->ghostview.urx - gvw->ghostview.llx); newxdpi = newydpi * gvw->ghostview.xdpi / gvw->ghostview.ydpi; gvw->ghostview.xdpi = newxdpi; gvw->ghostview.ydpi = newydpi; new_width = (gvw->ghostview.ury - gvw->ghostview.lly) / 72.0 * gvw->ghostview.xdpi + 0.5; break; } } else if (yfree) { /* width is fixed. Preserve aspect ratio by recomputing */ /* xdpi and ydpi */ switch (gvw->ghostview.orientation) { case XtPageOrientationPortrait: case XtPageOrientationUpsideDown: newxdpi = gvw->core.width * 72.0 / (gvw->ghostview.urx - gvw->ghostview.llx); newydpi = newxdpi * gvw->ghostview.ydpi / gvw->ghostview.xdpi; gvw->ghostview.xdpi = newxdpi; gvw->ghostview.ydpi = newydpi; new_height = (gvw->ghostview.ury - gvw->ghostview.lly) / 72.0 * gvw->ghostview.ydpi + 0.5; break; case XtPageOrientationLandscape: case XtPageOrientationSeascape: newxdpi = gvw->core.width * 72.0 / (gvw->ghostview.ury - gvw->ghostview.lly); newydpi = newxdpi * gvw->ghostview.ydpi / gvw->ghostview.xdpi; gvw->ghostview.xdpi = newxdpi; gvw->ghostview.ydpi = newydpi; new_height = (gvw->ghostview.urx - gvw->ghostview.llx) / 72.0 * gvw->ghostview.ydpi + 0.5; break; } } else { /* height and width are fixed. Just have to live with it. */ switch (gvw->ghostview.orientation) { case XtPageOrientationPortrait: case XtPageOrientationUpsideDown: gvw->ghostview.xdpi = gvw->core.width * 72.0 / (gvw->ghostview.urx - gvw->ghostview.llx); gvw->ghostview.ydpi = gvw->core.height * 72.0 / (gvw->ghostview.ury - gvw->ghostview.lly); break; case XtPageOrientationLandscape: case XtPageOrientationSeascape: gvw->ghostview.xdpi = gvw->core.width * 72.0 / (gvw->ghostview.ury - gvw->ghostview.lly); gvw->ghostview.ydpi = gvw->core.height * 72.0 / (gvw->ghostview.urx - gvw->ghostview.llx); break; } } change = (new_width != *width) || (new_height != *height); *width = new_width; *height = new_height; return (change); } /* Function Name: ChangeSize. * Description: Request a size change. * Arguments: w - the widget to try change the size of. */ static void ChangeSize(w, width, height) Widget w; Dimension width, height; { XtWidgetGeometry request, reply; Boolean changed = False; request.request_mode = CWWidth | CWHeight; request.width = width; request.height = height; switch ( XtMakeGeometryRequest(w, &request, &reply) ) { case XtGeometryYes: changed = True; break; case XtGeometryNo: break; case XtGeometryAlmost: ComputeSize(w, (request.height != reply.height), (request.width != reply.width), &(reply.width), &(reply.height)); request = reply; switch (XtMakeGeometryRequest(w, &request, &reply) ) { case XtGeometryYes: changed = True; break; case XtGeometryNo: break; case XtGeometryAlmost: request = reply; ComputeSize(w, FALSE, FALSE, &(request.width), &(request.height)); request.request_mode = CWWidth | CWHeight; XtMakeGeometryRequest(w, &request, &reply); changed = True; break; } break; } /* If success, setup the widet for the new size. */ if (changed && XtIsRealized(w)) Setup(w); } /* Catch the alloc error when there is not enough resources for the * backing pixmap. Automatically shut off backing pixmap and let the * user know when this happens. */ static Boolean alloc_error; static XErrorHandler oldhandler; static int catch_alloc (dpy, err) Display *dpy; XErrorEvent *err; { if (err->error_code == BadAlloc) { alloc_error = True; } if (alloc_error) return 0; oldhandler(dpy, err); } /* Setup - sets up the backing pixmap, and GHOSTVIEW property and * starts interpreter if needed. * NOTE: the widget must be realized before calling Setup(). * Returns True if a new interpreter was started, False otherwise. */ static Boolean Setup(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; GhostviewWidgetClass gvc = (GhostviewWidgetClass) XtClass(w); char buf[GV_BUFSIZ]; Pixmap bpixmap; XSetWindowAttributes xswa; if (!gvw->ghostview.changed && (gvw->core.width == gvw->ghostview.gs_width) && (gvw->core.height == gvw->ghostview.gs_height)) return False; StopInterpreter(w); if ((gvw->core.width != gvw->ghostview.gs_width) || (gvw->core.height != gvw->ghostview.gs_height) || (!gvw->ghostview.use_bpixmap)) { if (gvw->core.background_pixmap != XtUnspecifiedPixmap) { XFreePixmap(XtDisplay(w), gvw->core.background_pixmap); gvw->core.background_pixmap = XtUnspecifiedPixmap; XSetWindowBackgroundPixmap(XtDisplay(w), XtWindow(w), None); } } if (gvw->ghostview.use_bpixmap) { if (gvw->core.background_pixmap == XtUnspecifiedPixmap) { /* Get a Backing Pixmap, but be ready for the BadAlloc. */ XSync(XtDisplay(w), False); /* Get to known state */ oldhandler = XSetErrorHandler(catch_alloc); alloc_error = False; bpixmap = XCreatePixmap(XtDisplay(w), XtWindow(w), gvw->core.width, gvw->core.height, gvw->core.depth); XSync(XtDisplay(w), False); /* Force the error */ if (alloc_error) { XtCallCallbackList(w, gvw->ghostview.message_callback, "BadAlloc"); if (bpixmap != None) { XFreePixmap(XtDisplay(w), bpixmap); XSync(XtDisplay(w), False); /* Force the error */ bpixmap = None; } } oldhandler = XSetErrorHandler(oldhandler); if (bpixmap != None) { gvw->core.background_pixmap = bpixmap; XSetWindowBackgroundPixmap(XtDisplay(w), XtWindow(w), gvw->core.background_pixmap); } } else { bpixmap = gvw->core.background_pixmap; } } else { if (gvw->core.background_pixmap != XtUnspecifiedPixmap) { XFreePixmap(XtDisplay(w), gvw->core.background_pixmap); gvw->core.background_pixmap = XtUnspecifiedPixmap; XSetWindowBackgroundPixmap(XtDisplay(w), XtWindow(w), None); } bpixmap = None; } if (bpixmap != None) { xswa.backing_store = NotUseful; XChangeWindowAttributes(XtDisplay(w), XtWindow(w), CWBackingStore, &xswa); } else { xswa.backing_store = Always; XChangeWindowAttributes(XtDisplay(w), XtWindow(w), CWBackingStore, &xswa); } gvw->ghostview.gs_width = gvw->core.width; gvw->ghostview.gs_height = gvw->core.height; sprintf(buf, "%d %d %d %d %d %d %g %g %d %d %d %d", bpixmap, gvw->ghostview.orientation, gvw->ghostview.llx, gvw->ghostview.lly, gvw->ghostview.urx, gvw->ghostview.ury, gvw->ghostview.xdpi, gvw->ghostview.ydpi, gvw->ghostview.left_margin, gvw->ghostview.bottom_margin, gvw->ghostview.right_margin, gvw->ghostview.top_margin); XChangeProperty(XtDisplay(w), XtWindow(w), XmuInternAtom(XtDisplay(w), gvc->ghostview_class.ghostview), XA_STRING, 8, PropModeReplace, (unsigned char *)buf, strlen(buf)); StartInterpreter(w); return True; } #ifndef VMS /* This routine starts the interpreter. It sets the DISPLAY and * GHOSTVIEW environment variables. The GHOSTVIEW environment variable * contains the Window that ghostscript should write on. * * This routine also opens pipes for stdout and stderr and initializes * application input events for them. If input to ghostscript is not * from a file, a pipe for stdin is created. This pipe is setup for * non-blocking I/O so that the user interface never "hangs" because of * a write to ghostscript. */ static void StartInterpreter(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; int std_in[2]; int std_out[2]; int std_err[2]; char buf[GV_BUFSIZ]; #define NUM_ARGS 100 char *argv[NUM_ARGS]; char *preload = NULL; char *cptr; int argc = 0; int ret; StopInterpreter(w); /* Clear the window before starting a new interpreter. */ if (gvw->core.background_pixmap != XtUnspecifiedPixmap) { XFillRectangle(XtDisplay(w), gvw->core.background_pixmap, gvw->ghostview.gc, 0, 0, gvw->core.width, gvw->core.height); } XClearArea(XtDisplay(w), XtWindow(w), 0, 0, gvw->core.width, gvw->core.height, False); if (gvw->ghostview.disable_start) return; XFlush(XtDisplay(w)); /* Added by TonyJ!!!! Needed to make sure property gets installed before interpreter starts */ argv[argc++] = gvw->ghostview.interpreter; if (gvw->ghostview.quiet) argv[argc++] = "-dQUIET"; argv[argc++] = "-dNOPAUSE"; argv[argc++] = "-dSAFER"; /* Added by TonyJ!!!! Security fix */ if (gvw->ghostview.preload) { cptr = preload = XtNewString(gvw->ghostview.preload); while (isspace(*cptr)) cptr++; while (*cptr) { argv[argc++] = cptr; while (*cptr && !isspace(*cptr)) cptr++; *cptr++ = '\0'; if (argc + 2 >= NUM_ARGS) { fprintf(stderr, "Too many files to preload.\n"); exit(1); } while (isspace(*cptr)) cptr++; } } argv[argc++] = "-"; argv[argc++] = NULL; if (gvw->ghostview.filename == NULL) { ret = pipe(std_in); if (ret == -1) { perror("Could not create pipe"); exit(1); } } else if (strcmp(gvw->ghostview.filename, "-")) { std_in[0] = open(gvw->ghostview.filename, O_RDONLY, 0); } ret = pipe(std_out); if (ret == -1) { perror("Could not create pipe"); exit(1); } ret = pipe(std_err); if (ret == -1) { perror("Could not create pipe"); exit(1); } gvw->ghostview.changed = False; gvw->ghostview.busy = True; XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.busy_cursor); #if defined(SYSV) || defined(USG) #define vfork fork #endif gvw->ghostview.interpreter_pid = vfork(); if (gvw->ghostview.interpreter_pid == 0) { /* child */ close(std_out[0]); close(std_err[0]); if (gvw->ghostview.filename == NULL) { close(std_in[1]); dup2(std_in[0], 0); close(std_in[0]); } else if (strcmp(gvw->ghostview.filename, "-")) { dup2(std_in[0], 0); close(std_in[0]); } dup2(std_out[1], 1); close(std_out[1]); dup2(std_err[1], 2); close(std_err[1]); sprintf(buf, "%d", XtWindow(w)); setenv("GHOSTVIEW", buf, True); setenv("DISPLAY", XDisplayString(XtDisplay(w)), True); execvp(argv[0], argv); sprintf(buf, "Exec of %s failed", argv[0]); perror(buf); _exit(1); } else { if (gvw->ghostview.filename == NULL) { #ifdef NON_BLOCKING_IO int result; #endif close(std_in[0]); #ifdef NON_BLOCKING_IO result = fcntl(std_in[1], F_GETFL, 0); result = result | O_NONBLOCK; result = fcntl(std_in[1], F_SETFL, result); #endif gvw->ghostview.interpreter_input = std_in[1]; gvw->ghostview.interpreter_input_id = None; } else if (strcmp(gvw->ghostview.filename, "-")) { close(std_in[0]); } close(std_out[1]); gvw->ghostview.interpreter_output = std_out[0]; gvw->ghostview.interpreter_output_id = XtAppAddInput(XtWidgetToApplicationContext(w), std_out[0], (XtPointer)XtInputReadMask, Output, (XtPointer)w); close(std_err[1]); gvw->ghostview.interpreter_error = std_err[0]; gvw->ghostview.interpreter_error_id = XtAppAddInput(XtWidgetToApplicationContext(w), std_err[0], (XtPointer)XtInputReadMask, Output, (XtPointer)w); } if (preload) XtFree(preload); } /* Stop the interperter, if present, and remove any Input sources. */ /* Also reset the busy state. */ static void StopInterpreter(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; if (gvw->ghostview.interpreter_pid >= 0) { kill(gvw->ghostview.interpreter_pid, SIGTERM); wait(0); gvw->ghostview.interpreter_pid = -1; } if (gvw->ghostview.interpreter_input >= 0) { close(gvw->ghostview.interpreter_input); gvw->ghostview.interpreter_input = -1; if (gvw->ghostview.interpreter_input_id != None) { XtRemoveInput(gvw->ghostview.interpreter_input_id); gvw->ghostview.interpreter_input_id = None; } while (gvw->ghostview.ps_input) { struct record_list *ps_old = gvw->ghostview.ps_input; gvw->ghostview.ps_input = ps_old->next; if (ps_old->close) fclose(ps_old->fp); XtFree((char *)ps_old); } } if (gvw->ghostview.interpreter_output >= 0) { close(gvw->ghostview.interpreter_output); gvw->ghostview.interpreter_output = -1; XtRemoveInput(gvw->ghostview.interpreter_output_id); } if (gvw->ghostview.interpreter_error >= 0) { close(gvw->ghostview.interpreter_error); gvw->ghostview.interpreter_error = -1; XtRemoveInput(gvw->ghostview.interpreter_error_id); } gvw->ghostview.busy = False; if (!gvw->core.being_destroyed) XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.cursor); } #endif /* VMS */ /* The interpeter failed, Stop what's left and notify application */ static void InterpreterFailed(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; StopInterpreter(w); XtCallCallbackList(w, gvw->ghostview.message_callback, "Failed"); } /* * Public Routines */ /* GhostviewDisableInterpreter: * Stop any interpreter and disable new ones from starting. */ void GhostviewDisableInterpreter(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; gvw->ghostview.disable_start = True; if (XtIsRealized(w)) StopInterpreter(w); } /* GhostviewDisableInterpreter: * Allow an interpreter to start and start one if the widget is * currently realized. */ void GhostviewEnableInterpreter(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; gvw->ghostview.disable_start = False; if (XtIsRealized(w)) StartInterpreter(w); } /* GhostviewIsInterpreterReady: * Returns True if the interpreter is ready for new input. */ Boolean GhostviewIsInterpreterReady(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; return gvw->ghostview.interpreter_pid != -1 && !gvw->ghostview.busy && gvw->ghostview.ps_input == NULL; } /* GhostviewIsInterpreterRunning: * Returns True if the interpreter is running. */ Boolean GhostviewIsInterpreterRunning(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; return gvw->ghostview.interpreter_pid != -1; } /* GhostviewGetBackingPixmap: * Returns the current backing pixmap. */ Pixmap GhostviewGetBackingPixmap(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; if (gvw->core.background_pixmap != XtUnspecifiedPixmap) return(gvw->core.background_pixmap); else return(None); } #ifndef VMS /* GhostviewSendPS: * Queue a portion of a PostScript file for output to ghostscript. * fp: FILE * of the file in question. NOTE: if you have several * Ghostview widgets reading from the same file. You must open * a unique FILE * for each widget. * SendPS does not actually send the PostScript, it merely queues it * for output. * begin: position in file (returned from ftell()) to start. * len: number of bytes to write. * * If an interpreter is not running, nothing is queued and * False is returned. */ Boolean GhostviewSendPS(w, fp, begin, len, close) Widget w; FILE *fp; long begin; unsigned int len; Bool close; { GhostviewWidget gvw = (GhostviewWidget) w; struct record_list *ps_new; if (gvw->ghostview.interpreter_input < 0) return False; ps_new = (struct record_list *) XtMalloc(sizeof (struct record_list)); ps_new->fp = fp; ps_new->begin = begin; ps_new->len = len; ps_new->seek_needed = True; ps_new->close = close; ps_new->next = NULL; if (gvw->ghostview.input_buffer == NULL) { gvw->ghostview.input_buffer = XtMalloc(GV_BUFSIZ); } if (gvw->ghostview.ps_input == NULL) { gvw->ghostview.input_buffer_ptr = gvw->ghostview.input_buffer; gvw->ghostview.bytes_left = len; gvw->ghostview.buffer_bytes_left = 0; gvw->ghostview.ps_input = ps_new; gvw->ghostview.interpreter_input_id = XtAppAddInput(XtWidgetToApplicationContext(w), gvw->ghostview.interpreter_input, (XtPointer)XtInputWriteMask, Input, (XtPointer)w); } else { struct record_list *p = gvw->ghostview.ps_input; while (p->next != NULL) { p = p->next; } p->next = ps_new; } return True; } #endif /* VMS */ /* GhostviewNextPage: * Tell ghostscript to start the next page. * Returns False if ghostscript is not running, or not ready to start * another page. * If another page is started. Sets the busy flag and cursor. */ Boolean GhostviewNextPage(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; GhostviewWidgetClass gvc = (GhostviewWidgetClass) XtClass(w); XEvent event; if (gvw->ghostview.interpreter_pid < 0) return False; if (gvw->ghostview.mwin == None) return False; if (!gvw->ghostview.busy) { gvw->ghostview.busy = True; XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.busy_cursor); event.xclient.type = ClientMessage; event.xclient.display = XtDisplay(w); event.xclient.window = gvw->ghostview.mwin; event.xclient.message_type = XmuInternAtom(XtDisplay(w), gvc->ghostview_class.next); event.xclient.format = 32; XSendEvent(XtDisplay(w), gvw->ghostview.mwin, False, 0, &event); return True; } else { return False; } } #define done(type, value) \ { \ if (toVal->addr != NULL) { \ if (toVal->size < sizeof(type)) { \ toVal->size = sizeof(type); \ return False; \ } \ *(type*)(toVal->addr) = (value); \ } \ else { \ static type static_val; \ static_val = (value); \ toVal->addr = (XPointer)&static_val; \ } \ toVal->size = sizeof(type); \ return True; \ } /* PageOrienation Conversion Routine. * Returns True if Conversion is successful. */ Boolean XmuCvtStringToPageOrientation(dpy, args, num_args, fromVal, toVal, data) Display *dpy; XrmValue *args; /* unused */ Cardinal *num_args; /* unused */ XrmValue *fromVal; XrmValue *toVal; XtPointer *data; /* unused */ { static XrmQuark XrmQEportrait; static XrmQuark XrmQElandscape; static XrmQuark XrmQEupsideDown; static XrmQuark XrmQEseascape; static int haveQuarks; XrmQuark q; char *str = (XPointer) fromVal->addr; char lowerName[1000]; if (str == NULL) return False; if (!haveQuarks) { XrmQEportrait = XrmStringToQuark(XtEportrait); XrmQElandscape = XrmStringToQuark(XtElandscape); XrmQEupsideDown = XrmStringToQuark(XtEupsideDown); XrmQEseascape = XrmStringToQuark(XtEseascape); haveQuarks = 1; } XmuCopyISOLatin1Lowered(lowerName, str); q = XrmStringToQuark(lowerName); if (q == XrmQEportrait) done(XtPageOrientation, XtPageOrientationPortrait); if (q == XrmQElandscape) done(XtPageOrientation, XtPageOrientationLandscape); if (q == XrmQEupsideDown) done(XtPageOrientation, XtPageOrientationUpsideDown); if (q == XrmQEseascape) done(XtPageOrientation, XtPageOrientationSeascape); XtDisplayStringConversionWarning(dpy, str, XtRPageOrientation); return False; } #ifdef VMS /* ** VMS specific include files */ #include <descrip.h> #include <ssdef.h> #include <clidef.h> #include <lnmdef.h> #include <iodef.h> #include <dvidef.h> #include "vms_types.h" #define ERR_SIGNAL(s) if(!((s) & 1))lib$signal((s), 0, 0) #define XtEFN 23 struct g_l_i { GhostviewWidget w; struct g_l_i *next; }; typedef struct g_l_i GhostListItem, *GLI_p; static GhostListItem glhead = {(GhostviewWidget) -1, NULL}; static GLI_p GL = &glhead; static size_t GLI_Size = sizeof(GhostListItem); static XtInputId EventId; /* ** This routine is passed to XtAppAddInput(). It is called whenever the event ** flag number XtEFN is set and the Xt main loop becomes idle. It clears the ** event flag and then scans all the ghostview widgets for completed I/O ** requests, processing each as they are found. We have to do them all because ** there is no way to have Xt dispatch them individually without a window of ** vulnerability that can cause missed events, or by using a separate event ** flag for each I/O stream. Event flags are, unfortunately, a limited ** resource. */ static void IOProcess() { GhostviewWidget gvw; GLI_p cur; /* ** Before we process any I/O's, clear the event flag. */ sys$clref(XtEFN); /* ** Scan all the ghostview widgets and check for completed I/O's */ for(cur = GL->next; cur; cur = cur->next){ /* ** Get the widget and check for I/O complete on either mailbox. */ gvw = cur->w; if(gvw->ghostview.interpreter_input_iosb[0])Input(gvw); if(gvw->ghostview.interpreter_output_iosb[0])Output(gvw); } } /* ** This is an AST routine. It is called asynchronously whenever one of our ** mailbox I/O's completes. */ static void IOComplete(client_data) XtPointer client_data; { /* ** Set the event flag to tell Xt to call IOProcess. */ sys$setef(XtEFN); } static void GLInsert(w) GhostviewWidget w; { GLI_p new; int first; /* ** Insert this widget after the list head */ first = (GL->next == NULL); new = XtMalloc(GLI_Size); new->w = w; new->next = GL->next; GL->next = new; /* ** If this is the first item on the list, call XtAppAddInput() */ if(first)EventId = XtAppAddInput(XtWidgetToApplicationContext(w), XtEFN, 0, IOProcess, 0); } static void GLRemove(w) GhostviewWidget w; { GLI_p prev, cur; int last = 0; /* ** Find and remove this widget from the list. */ prev = GL; cur = prev->next; while(cur && cur->w != w){ prev = cur; cur = cur->next; } if(cur){ prev->next = cur->next; XtFree(cur); last = (GL->next == NULL); } /* ** If this was the last item on the list, call XtRemoveInput() */ if(last)XtRemoveInput(EventId); } /* Input - Feed data to ghostscript's stdin. * Write bytes to ghostscript using non-blocking I/O. * Also, pipe signals are caught during writing. The return * values are checked and the appropriate action is taken. I do * this at this low level, because it may not be appropriate for * SIGPIPE to be caught for the overall application. */ static void Input(gvw) GhostviewWidget gvw; { int stat, bbytes; char *ch; /* ** Check for error on previous I/O. */ stat = gvw->ghostview.interpreter_input_iosb[0]; if(stat != SS$_NORMAL){ InterpreterFailed(gvw); } else { /* Get a new section if required */ if (gvw->ghostview.ps_input && gvw->ghostview.bytes_left == 0) { struct record_list *ps_old = gvw->ghostview.ps_input; gvw->ghostview.ps_input = ps_old->next; if (ps_old->close) fclose(ps_old->fp); XtFree((char *)ps_old); } if(gvw->ghostview.ps_input){ /* Have to seek at the beginning of each section */ if (gvw->ghostview.ps_input->seek_needed) { if (gvw->ghostview.ps_input->len > 0) fseek(gvw->ghostview.ps_input->fp, gvw->ghostview.ps_input->begin, SEEK_SET); gvw->ghostview.ps_input->seek_needed = False; gvw->ghostview.bytes_left = gvw->ghostview.ps_input->len; } /* ** Read a line from the file. */ ch = fgets(gvw->ghostview.input_buffer, GV_BUFSIZ, gvw->ghostview.ps_input->fp); if(!ch){ /* ** Error, EOF when there's supposed to be data left. */ InterpreterFailed(gvw); } else { /* ** Write it to the mailbox. */ bbytes = strlen(gvw->ghostview.input_buffer); gvw->ghostview.bytes_left -= bbytes; stat = sys$qio(0, (short)gvw->ghostview.interpreter_input, IO$_WRITEVBLK, &gvw->ghostview.interpreter_input_iosb, IOComplete, 0, gvw->ghostview.input_buffer, bbytes, 0, 0, 0, 0); ERR_SIGNAL(stat); } } } } /* Output - receive I/O from ghostscript's stdout and stderr. * Pass this to the application via the output_callback. */ static void Output(gvw) GhostviewWidget gvw; { char buf[GV_BUFSIZ+1]; int bytes, stat; stat = gvw->ghostview.interpreter_output_iosb[0]; bytes = gvw->ghostview.interpreter_output_iosb[1]; if (stat == SS$_NORMAL) { /* ** Got a message. If line complete, pass to the output_callback. ** ** HACK ALERT, if bytes is -1 nothing happens, but an I/O is queued. ** This is our first time code, since Xt doesn't queue the I/O for us ** under VMS, just watches for completion. In StartInterpreter We setup ** an IOSB with a success status and -1 bytes so Xt will call us the ** first time to get the I/O queued. */ if (bytes == 0) { strcpy(buf, "\n"); } else if (bytes == 1) { buf[0] = gvw->ghostview.output_buffer[0]; buf[1] = '\0'; } else if (bytes > 1) { /* ** Copy the message to a local buffer and pass it to the callback. */ memcpy(buf, gvw->ghostview.output_buffer, bytes); buf[bytes] = '\0'; } if(bytes >= 0)XtCallCallbackList(gvw, gvw->ghostview.output_callback, (XtPointer) buf); /* ** Queue a new read to the mailbox */ stat = sys$qio(0, (short)gvw->ghostview.interpreter_output, IO$_READVBLK, &gvw->ghostview.interpreter_output_iosb, IOComplete, 0, gvw->ghostview.output_buffer, GV_BUFSIZ, 0, 0, 0, 0); ERR_SIGNAL(stat); } else { InterpreterFailed(gvw); /* Something bad happened */ } } /* This routine starts the interpreter. It sets the DISPLAY and * GHOSTVIEW environment variables. The GHOSTVIEW environment variable * contains the Window that ghostscript should write on. * * This routine also opens pipes for stdout and stderr and initializes * application input events for them. If input to ghostscript is not * from a file, a pipe for stdin is created. This pipe is setup for * non-blocking I/O so that the user interface never "hangs" because of * a write to ghostscript. */ static void StartInterpreter(w) Widget w; { GhostviewWidget gvw = (GhostviewWidget) w; char buf[GV_BUFSIZ]; char cmd[512]; int ret; short ch1, ch2; char in_mbx_name[65], out_mbx_name[65]; long pid, nowait = CLI$M_NOWAIT; const $DESCRIPTOR(ghostview_desc, "GHOSTVIEW"); const $DESCRIPTOR(gs_input_desc, "GS_INPUT"); const $DESCRIPTOR(display_desc, "DECW$DISPLAY"); const $DESCRIPTOR(lnt_desc, "LNM$PROCESS"); $DESCRIPTOR(in_desc, ""); $DESCRIPTOR(out_desc, ""); $DESCRIPTOR(lnm_desc, ""); $DESCRIPTOR(cmd_desc, cmd); ITEM_LIST_3_T(gv_list, 1) = {{{0, LNM$_STRING, buf, NULL}}, 0}; ITEM_LIST_3_T(dis_list, 1) = {{{0, LNM$_STRING, NULL, NULL}}, 0}; ITEM_LIST_3_T(gsi_list, 1) = {{{0, LNM$_STRING, NULL, NULL}}, 0}; ITEM_LIST_3_T(dvi_list, 1) = {{{64, DVI$_DEVNAM, NULL, NULL}}, 0}; IOSB_GET_T dvi_iosb; /* ** Stop interpreter if running */ StopInterpreter(w); /* ** Clear the window before starting a new interpreter. */ if (gvw->core.background_pixmap != XtUnspecifiedPixmap) { XFillRectangle(XtDisplay(w), gvw->core.background_pixmap, gvw->ghostview.gc, 0, 0, gvw->core.width, gvw->core.height); } XClearArea(XtDisplay(w), XtWindow(w), 0, 0, gvw->core.width, gvw->core.height, False); /* ** Check for disabled. */ if (gvw->ghostview.disable_start) return; /* ** Build Ghostscript startup command */ strcpy(cmd, gvw->ghostview.interpreter); strcat(cmd, " "); if (gvw->ghostview.quiet) strcat(cmd, "\"-dQUIET\" "); strcat(cmd, "\"-dNOPAUSE\" "); strcat(cmd, "\"-dSAFER\" "); if (gvw->ghostview.preload) { strcat(cmd, gvw->ghostview.preload); strcat(cmd, " "); } /* ** Determine input source. */ if (gvw->ghostview.filename == NULL) { /* ** Create a mailbox to feed input to Ghostscript and get its name. */ ret = sys$crembx(0, &ch1, GV_BUFSIZ, GV_BUFSIZ, 0, 0, 0, 0); ERR_SIGNAL(ret); dvi_list.item[0].buffer_p = in_mbx_name; ret = sys$getdvi(0, ch1, 0, &dvi_list, &dvi_iosb, 0, 0, 0); ERR_SIGNAL(ret); ERR_SIGNAL(dvi_iosb.status); in_mbx_name[64] = '\0'; gsi_list.item[0].buffer_p = in_mbx_name; gsi_list.item[0].buffer_size = strlen(in_mbx_name); ret = sys$crelnm(0, &lnt_desc, &gs_input_desc, 0, &gsi_list); ERR_SIGNAL(ret); strcat(cmd, "GS_INPUT:"); } else { /* ** Set up file name to give Ghostscript as standard input. */ strcat(cmd,gvw->ghostview.filename); } /* ** Create mailbox to receive Ghostscript's output */ ret = sys$crembx(0, &ch2, GV_BUFSIZ, GV_BUFSIZ, 0, 0, 0, 0); ERR_SIGNAL(ret); dvi_list.item[0].buffer_p = out_mbx_name; ret = sys$getdvi(0, ch2, 0, &dvi_list, &dvi_iosb, 0, 0, 0); ERR_SIGNAL(ret); ERR_SIGNAL(dvi_iosb.status); out_mbx_name[64] = '\0'; out_desc.dsc$a_pointer = out_mbx_name; out_desc.dsc$w_length = strlen(out_mbx_name); /* ** Create GHOSTVIEW and DECW$DISPLAY logical names. ** ** We use CRELNM rather than LIB$SET_LOGICAL because we want these to be ** user mode and go away when the program exits. It doesn't matter that we ** may set them multiple times, as with the mailbox logicals, since once ** Ghostscript starts we don't need them any more. */ sprintf(buf, "%d", XtWindow(w)); gv_list.item[0].buffer_size = strlen(buf); ret = sys$crelnm(0, &lnt_desc, &ghostview_desc, 0, &gv_list); ERR_SIGNAL(ret); dis_list.item[0].buffer_p = XDisplayString(XtDisplay(w)); dis_list.item[0].buffer_size = strlen(dis_list.item[0].buffer_p); ret = sys$crelnm(0, &lnt_desc, &display_desc, 0, &dis_list); ERR_SIGNAL(ret); /* ** Spawn Ghostscript process */ gvw->ghostview.changed = False; gvw->ghostview.busy = True; cmd_desc.dsc$w_length = strlen(cmd); ret = lib$spawn(&cmd_desc, &in_desc, &out_desc, &nowait, 0, &pid, 0, 0, 0, 0, 0, 0, 0); ERR_SIGNAL(ret); XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.busy_cursor); /* ** Everything worked, initialize IOSBs and save info about interpretter. */ gvw->ghostview.interpreter_pid = pid; if (gvw->ghostview.filename == NULL) { gvw->ghostview.interpreter_input = ch1; gvw->ghostview.interpreter_input_iosb[0] = 0; } gvw->ghostview.interpreter_output = ch2; if (gvw->ghostview.output_buffer == NULL) { gvw->ghostview.output_buffer = XtMalloc(GV_BUFSIZ); } GLInsert(gvw); /* ** Fake a completed I/O so Output will get called to queue the first I/O. */ gvw->ghostview.interpreter_output_iosb[0] = SS$_NORMAL; gvw->ghostview.interpreter_output_iosb[1] = -1; IOComplete(); } /* Stop the interperter, if present, and remove any Input sources. */ /* Also reset the busy state. */ static void StopInterpreter(w) Widget w; { int ret; GhostviewWidget gvw = (GhostviewWidget) w; if (gvw->ghostview.interpreter_pid >= 0) { ret = sys$delprc(&gvw->ghostview.interpreter_pid, 0); if(ret != SS$_NORMAL && ret != SS$_NONEXPR)lib$signal(ret, 0, 0); gvw->ghostview.interpreter_pid = -1; } if (gvw->ghostview.interpreter_input >= 0) { (void) sys$dassgn(gvw->ghostview.interpreter_input); gvw->ghostview.interpreter_input = -1; while (gvw->ghostview.ps_input) { struct record_list *ps_old = gvw->ghostview.ps_input; gvw->ghostview.ps_input = ps_old->next; if (ps_old->close) fclose(ps_old->fp); XtFree((char *)ps_old); } } if (gvw->ghostview.interpreter_output >= 0) { (void) sys$dassgn(gvw->ghostview.interpreter_output); gvw->ghostview.interpreter_output = -1; } gvw->ghostview.busy = False; XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.cursor); GLRemove(gvw); } /* GhostviewSendPS: * Queue a portion of a PostScript file for output to ghostscript. * fp: FILE * of the file in question. NOTE: if you have several * Ghostview widgets reading from the same file. You must open * a unique FILE * for each widget. * SendPS does not actually send the PostScript, it merely queues it * for output. * begin: position in file (returned from ftell()) to start. * len: number of bytes to write. * * If an interpreter is not running, nothing is queued and * False is returned. */ Boolean GhostviewSendPS(w, fp, begin, len, close) Widget w; FILE *fp; long begin; unsigned int len; Bool close; { GhostviewWidget gvw = (GhostviewWidget) w; struct record_list *ps_new; if (gvw->ghostview.interpreter_input < 0) return False; if(len != 0){ ps_new = (struct record_list *) XtMalloc(sizeof (struct record_list)); ps_new->fp = fp; ps_new->begin = begin; ps_new->len = len; ps_new->seek_needed = True; ps_new->close = close; ps_new->next = NULL; if (gvw->ghostview.input_buffer == NULL) { gvw->ghostview.input_buffer = XtMalloc(GV_BUFSIZ); } if (gvw->ghostview.ps_input == NULL) { gvw->ghostview.bytes_left = len; gvw->ghostview.ps_input = ps_new; /* ** Fake a completed I/O so Input will get called to queue the ** first I/O. */ gvw->ghostview.interpreter_input_iosb[0] = SS$_NORMAL; gvw->ghostview.interpreter_input_iosb[1] = -1; IOComplete(); } else { struct record_list *p = gvw->ghostview.ps_input; while (p->next != NULL) { p = p->next; } p->next = ps_new; } } return True; } #endif /* VMS */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/GhostviewPlus.c������������������������������������������������������������������������100666 � 21345 � 173 � 21044 5554674757 14444� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * GhostviewPlus.c -- GhostviewPlus widget. */ #include <X11/IntrinsicP.h> #include <X11/StringDefs.h> #include <X11/Xatom.h> #include <X11/Xproto.h> #include <X11/Xos.h> #include "GhostviewPlusP.h" #include <ctype.h> #define XtSetFloatArg(arg, n, d) \ if (sizeof(float) > sizeof(XtArgVal)) { \ XtSetArg(arg, n, &(d)); \ } else { \ XtArgVal *ld = (XtArgVal *)&(d); \ XtSetArg(arg, n, *ld); \ } static XtResource resources[] = { #define offset(field) XtOffsetOf(GhostviewPlusRec, ghostview_plus.field) { XtNpages, XtCPages, XtRInt, sizeof(int), offset(pages), XtRImmediate, (XtPointer)-1 }, { XtNcurrentPage, XtCCurrentPage, XtRInt, sizeof(int), offset(current_page), XtRImmediate, (XtPointer)0}, { XtNdoc, XtCDoc, XtRPointer, sizeof(XtPointer), offset(doc), XtRImmediate, (XtPointer)NULL}, { XtNfile, XtCFilename, XtRString, sizeof(String), offset(filename), XtRString, (XtPointer)NULL }, { XtNmagstep, XtCMagstep, XtRInt, sizeof(int), offset(magstep), XtRImmediate, (XtPointer)0 }, #undef offset #define offset(field) XtOffsetOf(GhostviewPlusRec, ghostview.field) { XtNcursor, XtCCursor, XtRCursor, sizeof(XtPointer), offset(cursor), XtRImmediate, NULL}, #undef offset }; static void Initialize(); static void Destroy(); static Boolean SetValues(); static void Realize(); static void show_page(); GhostviewPlusClassRec ghostviewPlusClassRec = { { /* core fields */ /* superclass */ (WidgetClass) &ghostviewClassRec, /* class_name */ "GhostviewPlus", /* widget_size */ sizeof(GhostviewPlusRec), /* class_initialize */ NULL, /* class_part_initialize */ NULL, /* class_inited */ FALSE, /* initialize */ Initialize, /* initialize_hook */ NULL, /* realize */ Realize, /* actions */ NULL, /* num_actions */ 0, /* resources */ resources, /* num_resources */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* compress_motion */ TRUE, /* compress_exposure */ TRUE, /* compress_enterleave */ TRUE, /* visible_interest */ FALSE, /* destroy */ Destroy, /* resize */ NULL, /* expose */ NULL, /* set_values */ SetValues, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_private */ NULL, /* tm_table */ XtInheritTranslations, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL }, { /* ghostview fields */ /* ghostview */ NULL, /* next */ NULL, /* page */ NULL, /* done */ NULL }, { /* ghostviewPlus fields */ /* empty */ NULL, } }; WidgetClass ghostviewPlusWidgetClass = (WidgetClass)&ghostviewPlusClassRec; static void Setup(gvw) GhostviewPlusWidget gvw; { struct document *doc; gvw->ghostview_plus.doc = NULL; gvw->ghostview_plus.pages = -1; /* Unlike Ghostview we always copy the filename argument */ if (gvw->ghostview_plus.filename) { FILE *psfile = fopen(gvw->ghostview_plus.filename,"r"); gvw->ghostview_plus.filename = XtNewString(gvw->ghostview_plus.filename); if (psfile) { doc = gvw->ghostview_plus.doc = psscan(psfile); fclose(psfile); } if (doc) { gvw->ghostview_plus.pages = doc->numpages; if (gvw->ghostview_plus.pages < 1) gvw->ghostview_plus.pages = -1; if (doc->epsf && (doc->boundingbox[URX] > doc->boundingbox[LLX]) && (doc->boundingbox[URY] > doc->boundingbox[LLY])) { int new_llx = doc->boundingbox[LLX]; int new_lly = doc->boundingbox[LLY]; int new_urx = doc->boundingbox[URX]; int new_ury = doc->boundingbox[URY]; gvw->ghostview.llx = new_llx; gvw->ghostview.lly = new_lly; gvw->ghostview.urx = new_urx; gvw->ghostview.ury = new_ury; GhostviewLayout((Widget) gvw,True,True); } } if (gvw->ghostview_plus.pages < 0) gvw->ghostview.filename = gvw->ghostview_plus.filename; else gvw->ghostview.disable_start = True; } } /* Initialize private state. */ static void Initialize(request, new, args, num_args) Widget request, new; ArgList args; /* unused */ Cardinal *num_args; /* unused */ { GhostviewPlusWidget ngvw = (GhostviewPlusWidget) new; GhostviewPlusWidget rgvw = (GhostviewPlusWidget) request; ngvw->ghostview_plus.xdpi = ngvw->ghostview.xdpi; ngvw->ghostview_plus.ydpi = ngvw->ghostview.ydpi; Setup(ngvw); } /* Destroy routine: kill the interpreter and release the GC */ static void Destroy(w) Widget w; { GhostviewPlusWidget gvw = (GhostviewPlusWidget) w; XtFree(gvw->ghostview_plus.filename); if (gvw->ghostview_plus.doc ) psfree(gvw->ghostview_plus.doc); } /* SetValues routine. Set new private state, based on changed values * in the widget. Always returns False, because redisplay is never needed. */ static Boolean SetValues(current, request, new) Widget current, request, new; { GhostviewPlusWidget cgvw = (GhostviewPlusWidget) current; GhostviewPlusWidget rgvw = (GhostviewPlusWidget) request; GhostviewPlusWidget ngvw = (GhostviewPlusWidget) new; String cfilename; String rfilename; int rpage = rgvw->ghostview_plus.current_page; int cpage = cgvw->ghostview_plus.current_page; cfilename = cgvw->ghostview.filename; if (cfilename == NULL) cfilename = "(null)"; rfilename = rgvw->ghostview.filename; if (rfilename == NULL) rfilename = "(null)"; if (strcmp(cfilename,rfilename)) { XtFree(cgvw->ghostview_plus.filename); if (cgvw->ghostview_plus.doc ) psfree(cgvw->ghostview_plus.doc); Setup(ngvw); cpage = 1; } else if (rpage != cpage) { if (rpage > 0) { if (ngvw->ghostview_plus.pages < 0) { rpage = 1; } else { if (rpage > ngvw->ghostview_plus.pages) rpage = ngvw->ghostview_plus.pages; else if (rpage < 1) rpage = 1; if (XtIsRealized((Widget)ngvw)) show_page(ngvw,rpage,TRUE); } } ngvw->ghostview_plus.current_page = rpage; } #define HAS_CHANGED(field) (ngvw->ghostview_plus.field != cgvw->ghostview_plus.field) if (HAS_CHANGED(magstep)) { Arg arglist[2]; float newxdpi = ngvw->ghostview_plus.xdpi; float newydpi = ngvw->ghostview_plus.ydpi; int magstep = ngvw->ghostview_plus.magstep; if (magstep < 0) for (;magstep++;) { newxdpi /= 1.2 ; newydpi /= 1.2; } else for (;magstep--;) { newxdpi *= 1.2 ; newydpi *= 1.2; } XtSetFloatArg(arglist[0],XtNxdpi,newxdpi); XtSetFloatArg(arglist[1],XtNydpi,newydpi); XtSetValues((Widget)ngvw,arglist,2); } #undef HAS_CHANGED #define HAS_CHANGED(field) (ngvw->ghostview.field != cgvw->ghostview.field) else if (HAS_CHANGED(xdpi) || HAS_CHANGED(ydpi) || HAS_CHANGED(orientation)) { if (ngvw->ghostview_plus.pages >= 0) show_page(ngvw,rpage,FALSE); } #undef HAS_CHANGED return FALSE; } static void Realize(w, valueMask, attributes) Widget w; Mask *valueMask; XSetWindowAttributes *attributes; { GhostviewPlusWidget gvw = (GhostviewPlusWidget) w; WidgetClass superClass = XtSuperclass(w); (*superClass->core_class.realize)(w, valueMask, attributes); if (gvw->ghostview_plus.current_page) show_page(gvw,gvw->ghostview_plus.current_page,TRUE); } static void show_page(gvw,page,wait) GhostviewPlusWidget gvw; int page; Boolean wait; { int i; FILE *fp = fopen(gvw->ghostview_plus.filename,"r"); struct document *doc = gvw->ghostview_plus.doc; if (!wait || GhostviewIsInterpreterReady((Widget)gvw)) { GhostviewNextPage((Widget)gvw); } else { GhostviewEnableInterpreter((Widget)gvw); wait = FALSE; } if (!wait) { GhostviewSendPS((Widget)gvw, fp, doc->beginprolog, doc->lenprolog, False); GhostviewSendPS((Widget)gvw, fp, doc->beginsetup, doc->lensetup, False); } if (doc->pageorder == DESCEND) i = doc->numpages - page; else i = page - 1; if (!GhostviewSendPS((Widget)gvw,fp,doc->pages[i].begin,doc->pages[i].len, True)) printf("GhostviewSendPS failed\n"); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/ps.c�����������������������������������������������������������������������������������100666 � 21345 � 173 � 123603 5554674760 12261� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ps.c -- Postscript scanning and copying routines. * Copyright (C) 1992 Timothy O. Theisen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Author: Tim Theisen Systems Programmer * Internet: tim@cs.wisc.edu Department of Computer Sciences * UUCP: uwvax!tim University of Wisconsin-Madison * Phone: (608)262-0438 1210 West Dayton Street * FAX: (608)262-9777 Madison, WI 53706 */ #include <stdio.h> #ifndef SEEK_SET #define SEEK_SET 0 #endif #ifndef BUFSIZ #define BUFSIZ 1024 #endif #include <ctype.h> #include <X11/Xos.h> /* #includes the appropriate <string.h> */ #include "ps.h" #ifdef BSD4_2 #define memset(a,b,c) bzero(a,c) #endif /* length calculates string length at compile time */ /* can only be used with character constants */ #define length(a) (sizeof(a)-1) #define iscomment(a, b) (strncmp(a, b, length(b)) == 0) /* list of standard paper sizes from Adobe's PPD. */ struct documentmedia papersizes[] = { "Letter", 612, 792, "LetterSmall", 612, 792, "Tabloid", 792, 1224, "Ledger", 1224, 792, "Legal", 612, 1008, "Statement", 396, 612, "Executive", 540, 720, "A3", 842, 1190, "A4", 595, 842, "A4Small", 595, 842, "A5", 420, 595, "B4", 729, 1032, "B5", 516, 729, "Folio", 612, 936, "Quarto", 610, 780, "10x14", 720, 1008, NULL, 0, 0 }; static char *readline(); static char *gettextline(); static char *gettext(); static int blank(); /* * psscan -- scan the PostScript file for document structuring comments. * * This scanner is designed to retrieve the information necessary for * the ghostview previewer. It will scan files that conform to any * version (1.0, 2.0, 2.1, or 3.0) of the document structuring conventions. * It does not really care which version of comments the file contains. * (The comments are largely upward compatible.) It will scan a number * of non-conforming documents. (You could have part of the document * conform to V2.0 and the rest conform to V3.0. It would be similar * to the DC-2 1/2+, it would look funny but it can still fly.) * * This routine returns a pointer to the document structure. * The structure contains the information relevant to previewing. * These include EPSF flag (to tell if the file is a encapsulated figure), * Page Media (for the Page Size), Bounding Box (to minimize backing * pixmap size or determine window size for encapsulated PostScript), * Orientation of Paper (for default transformation matrix), and * Page Order. The title and CreationDate are also retrieved to * help identify the document. * * The following comments are examined: * * Header section: * Must start with %!PS-Adobe-. Version numbers ignored. * * %!PS-Adobe-* [EPSF-*] * %%BoundingBox: <int> <int> <int> <int>|(atend) * %%CreationDate: <textline> * %%Orientation: Portrait|Landscape|(atend) * %%Pages: <uint> [<int>]|(atend) * %%PageOrder: Ascend|Descend|Special|(atend) * %%Title: <textline> * %%DocumentMedia: <text> <real> <real> <real> <text> <text> * %%DocumentPageSizes: <text> * %%EndComments * * Note: Either the 3.0 or 2.0 syntax for %%Pages is accepted. * Also either the 2.0 %%DocumentPageSizes or the 3.0 * %%DocumentMedia comments are accepted as well. * * The header section ends either explicitly with %%EndComments or * implicitly with any line that does not begin with %X where X is * a not whitespace character. * * If the file is encapsulated PostScript the optional Preview section * is next: * * %%BeginPreview * %%EndPreview * * This section explicitly begins and ends with the above comments. * * Next the Defaults section for version 3 page defaults: * * %%BeginDefaults * %%PageBoundingBox: <int> <int> <int> <int> * %%PageOrientation: Portrait|Landscape * %%PageMedia: <text> * %%EndDefaults * * This section explicitly begins and ends with the above comments. * * The prolog section either explicitly starts with %%BeginProlog or * implicitly with any nonblank line. * * %%BeginProlog * %%EndProlog * * The Prolog should end with %%EndProlog, however the proglog implicitly * ends when %%BeginSetup, %%Page, %%Trailer or %%EOF are encountered. * * The Setup section is where the version 2 page defaults are found. * This section either explicitly begins with %%BeginSetup or implicitly * with any nonblank line after the Prolog. * * %%BeginSetup * %%PageBoundingBox: <int> <int> <int> <int> * %%PageOrientation: Portrait|Landscape * %%PaperSize: <text> * %%EndSetup * * The Setup should end with %%EndSetup, however the setup implicitly * ends when %%Page, %%Trailer or %%EOF are encountered. * * Next each page starts explicitly with %%Page and ends implicitly with * %%Page or %%Trailer or %%EOF. The following comments are recognized: * * %%Page: <text> <uint> * %%PageBoundingBox: <int> <int> <int> <int>|(atend) * %%PageOrientation: Portrait|Landscape * %%PageMedia: <text> * %%PaperSize: <text> * * The tralier section start explicitly with %%Trailer and end with %%EOF. * The following comment are examined with the proper (atend) notation * was used in the header: * * %%Trailer * %%BoundingBox: <int> <int> <int> <int>|(atend) * %%Orientation: Portrait|Landscape|(atend) * %%Pages: <uint> [<int>]|(atend) * %%PageOrder: Ascend|Descend|Special|(atend) * %%EOF * * * + A DC-3 received severe damage to one of its wings. The wing was a total * loss. There was no replacement readily available, so the mechanic * installed a wing from a DC-2. */ struct document * psscan(file) FILE *file; { struct document *doc; int bb_set = NONE; int pages_set = NONE; int page_order_set = NONE; int orientation_set = NONE; int page_bb_set = NONE; int page_media_set = NONE; int preread; /* flag which tells the readline isn't needed */ int i; unsigned int maxpages = 0; unsigned int nextpage = 1; /* Next expected page */ unsigned int thispage; int ignore = 0; /* whether to ignore page ordinals */ char *label; char line[PSLINELENGTH]; /* 255 characters + 1 newline + 1 NULL */ char text[PSLINELENGTH]; /* Temporary storage for text */ long position; /* Position of the current line */ unsigned int line_len; /* Length of the current line */ unsigned int section_len; /* Place to accumulate the section length */ char *next_char; /* 1st char after text returned by gettext() */ char *cp; struct documentmedia *dmp; rewind(file); if (readline(line, sizeof line, file, &position, &line_len) == NULL) { fprintf(stderr, "Warning: empty file.\n"); return(NULL); } /* Header comments (don't enforce PS-ADOBE .. TonyJ) */ if (iscomment(line,"%!PS-Adobe-") || iscomment(line,"%!")) { doc = (struct document *) malloc(sizeof(struct document)); if (doc == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } memset(doc, 0, sizeof(struct document)); sscanf(line, "%*s %s", text); doc->epsf = iscomment(text, "EPSF-"); doc->beginheader = position; section_len = line_len; } else { return(NULL); } preread = 0; while (preread || readline(line, sizeof line, file, &position, &line_len)) { if (!preread) section_len += line_len; preread = 0; if (iscomment(line, "%%EndComments") || line[0] != '%' || (!isprint(line[1]) || line[1] == ' ' || line[1] == '\t' || line[1] == '\n')) { break; } else if (!iscomment(line, "%%")) { /* Do nothing */ } else if (doc->title == NULL && iscomment(line+2, "Title:")) { doc->title = gettextline(line+length("%%Title:")); } else if (doc->date == NULL && iscomment(line+2, "CreationDate:")) { doc->date = gettextline(line+length("%%CreationDate:")); } else if (bb_set == NONE && iscomment(line+2, "BoundingBox:")) { sscanf(line+length("%%BoundingBox:"), "%s", text); if (strcmp(text, "(atend)") == 0) { bb_set = ATEND; } else { if (sscanf(line+length("%%BoundingBox:"), "%d %d %d %d", &(doc->boundingbox[LLX]), &(doc->boundingbox[LLY]), &(doc->boundingbox[URX]), &(doc->boundingbox[URY])) == 4) bb_set = 1; else { float fllx, flly, furx, fury; if (sscanf(line+length("%%BoundingBox:"), "%f %f %f %f", &fllx, &flly, &furx, &fury) == 4) { bb_set = 1; doc->boundingbox[LLX] = fllx; doc->boundingbox[LLY] = flly; doc->boundingbox[URX] = furx; doc->boundingbox[URY] = fury; if (fllx < doc->boundingbox[LLX]) doc->boundingbox[LLX]--; if (flly < doc->boundingbox[LLY]) doc->boundingbox[LLY]--; if (furx > doc->boundingbox[URX]) doc->boundingbox[URX]++; if (fury > doc->boundingbox[URY]) doc->boundingbox[URY]++; } } } } else if (orientation_set == NONE && iscomment(line+2, "Orientation:")) { sscanf(line+length("%%Orientation:"), "%s", text); if (strcmp(text, "(atend)") == 0) { orientation_set = ATEND; } else if (strcmp(text, "Portrait") == 0) { doc->orientation = PORTRAIT; orientation_set = 1; } else if (strcmp(text, "Landscape") == 0) { doc->orientation = LANDSCAPE; orientation_set = 1; } } else if (page_order_set == NONE && iscomment(line+2, "PageOrder:")) { sscanf(line+length("%%PageOrder:"), "%s", text); if (strcmp(text, "(atend)") == 0) { page_order_set = ATEND; } else if (strcmp(text, "Ascend") == 0) { doc->pageorder = ASCEND; page_order_set = 1; } else if (strcmp(text, "Descend") == 0) { doc->pageorder = DESCEND; page_order_set = 1; } else if (strcmp(text, "Special") == 0) { doc->pageorder = SPECIAL; page_order_set = 1; } } else if (pages_set == NONE && iscomment(line+2, "Pages:")) { sscanf(line+length("%%Pages:"), "%s", text); if (strcmp(text, "(atend)") == 0) { pages_set = ATEND; } else { switch (sscanf(line+length("%%Pages:"), "%d %d", &maxpages, &i)) { case 2: if (page_order_set == NONE) { if (i == -1) { doc->pageorder = DESCEND; page_order_set = 1; } else if (i == 0) { doc->pageorder = SPECIAL; page_order_set = 1; } else if (i == 1) { doc->pageorder = ASCEND; page_order_set = 1; } } case 1: /* protection against ludicrous maxpages added.... TonyJ */ if (maxpages>1000) maxpages = 100; else if (maxpages == 0) maxpages = 1; doc->pages = (struct page *) calloc(maxpages,sizeof(struct page)); if (doc->pages == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } } } } else if (doc->nummedia == NONE && iscomment(line+2, "DocumentMedia:")) { float w, h; doc->media = (struct documentmedia *) malloc(sizeof (struct documentmedia)); if (doc->media == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } doc->media[0].name = gettext(line+length("%%DocumentMedia:"), &next_char); if (doc->media[0].name != NULL) { if (sscanf(next_char, "%f %f", &w, &h) == 2) { doc->media[0].width = w + 0.5; doc->media[0].height = h + 0.5; } if (doc->media[0].width != 0 && doc->media[0].height != 0) doc->nummedia = 1; else free(doc->media[0].name); } preread=1; while (readline(line, sizeof line, file, &position, &line_len) && iscomment(line, "%%+")) { section_len += line_len; doc->media = (struct documentmedia *) realloc(doc->media, (doc->nummedia+1)* sizeof (struct documentmedia)); if (doc->media == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } doc->media[doc->nummedia].name = gettext(line+length("%%+"), &next_char); if (doc->media[doc->nummedia].name != NULL) { if (sscanf(next_char, "%f %f", &w, &h) == 2) { doc->media[doc->nummedia].width = w + 0.5; doc->media[doc->nummedia].height = h + 0.5; } if (doc->media[doc->nummedia].width != 0 && doc->media[doc->nummedia].height != 0) doc->nummedia++; else free(doc->media[doc->nummedia].name); } } section_len += line_len; if (doc->nummedia != 0) doc->default_page_media = doc->media; } else if (doc->nummedia == NONE && iscomment(line+2, "DocumentPaperSizes:")) { doc->media = (struct documentmedia *) malloc(sizeof (struct documentmedia)); if (doc->media == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } doc->media[0].name = gettext(line+length("%%DocumentPaperSizes:"), &next_char); if (doc->media[0].name != NULL) { doc->media[0].width = 0; doc->media[0].height = 0; for (dmp=papersizes; dmp->name != NULL; dmp++) { /* Note: Paper size comment uses down cased paper size * name. Case insensitive compares are only used for * PaperSize comments. */ if (strcasecmp(doc->media[0].name, dmp->name) == 0) { free(doc->media[0].name); doc->media[0].name = (char *)malloc(strlen(dmp->name)+1); if (doc->media[0].name == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } strcpy(doc->media[0].name, dmp->name); doc->media[0].width = dmp->width; doc->media[0].height = dmp->height; break; } } if (doc->media[0].width != 0 && doc->media[0].height != 0) doc->nummedia = 1; else free(doc->media[0].name); } while (cp = gettext(next_char, &next_char)) { doc->media = (struct documentmedia *) realloc(doc->media, (doc->nummedia+1)* sizeof (struct documentmedia)); if (doc->media == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } doc->media[doc->nummedia].name = cp; doc->media[doc->nummedia].width = 0; doc->media[doc->nummedia].height = 0; for (dmp=papersizes; dmp->name != NULL; dmp++) { /* Note: Paper size comment uses down cased paper size * name. Case insensitive compares are only used for * PaperSize comments. */ if (strcasecmp(doc->media[doc->nummedia].name, dmp->name) == 0) { free(doc->media[doc->nummedia].name); doc->media[doc->nummedia].name = (char *)malloc(strlen(dmp->name)+1); if (doc->media[doc->nummedia].name == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } strcpy(doc->media[doc->nummedia].name, dmp->name); doc->media[doc->nummedia].name = dmp->name; doc->media[doc->nummedia].width = dmp->width; doc->media[doc->nummedia].height = dmp->height; break; } } if (doc->media[doc->nummedia].width != 0 && doc->media[doc->nummedia].height != 0) doc->nummedia++; else free(doc->media[doc->nummedia].name); } preread=1; while (readline(line, sizeof line, file, &position, &line_len) && iscomment(line, "%%+")) { section_len += line_len; next_char = line + length("%%+"); while (cp = gettext(next_char, &next_char)) { doc->media = (struct documentmedia *) realloc(doc->media, (doc->nummedia+1)* sizeof (struct documentmedia)); if (doc->media == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } doc->media[doc->nummedia].name = cp; doc->media[doc->nummedia].width = 0; doc->media[doc->nummedia].height = 0; for (dmp=papersizes; dmp->name != NULL; dmp++) { /* Note: Paper size comment uses down cased paper size * name. Case insensitive compares are only used for * PaperSize comments. */ if (strcasecmp(doc->media[doc->nummedia].name, dmp->name) == 0) { doc->media[doc->nummedia].width = dmp->width; doc->media[doc->nummedia].height = dmp->height; break; } } if (doc->media[doc->nummedia].width != 0 && doc->media[doc->nummedia].height != 0) doc->nummedia++; else free(doc->media[doc->nummedia].name); } } section_len += line_len; if (doc->nummedia != 0) doc->default_page_media = doc->media; } } if (iscomment(line, "%%EndComments")) { readline(line, sizeof line, file, &position, &line_len); section_len += line_len; } doc->endheader = position; doc->lenheader = section_len - line_len; /* Optional Preview comments for encapsulated PostScript files */ while (blank(line) && readline(line, sizeof line, file, &position, &line_len)) { } if (doc->epsf && iscomment(line, "%%BeginPreview")) { doc->beginpreview = position; section_len = line_len; while (readline(line, sizeof line, file, &position, &line_len) && !iscomment(line, "%%EndPreview")) { section_len += line_len; } section_len += line_len; readline(line, sizeof line, file, &position, &line_len); section_len += line_len; doc->endpreview = position; doc->lenpreview = section_len - line_len; } /* Page Defaults for Version 3.0 files */ while (blank(line) && readline(line, sizeof line, file, &position, &line_len)) { } if (iscomment(line, "%%BeginDefaults")) { doc->begindefaults = position; section_len = line_len; while (readline(line, sizeof line, file, &position, &line_len) && !iscomment(line, "%%EndDefaults")) { section_len += line_len; if (!iscomment(line, "%%")) { /* Do nothing */ } else if (doc->default_page_orientation == NONE && iscomment(line+2, "PageOrientation:")) { sscanf(line+length("%%PageOrientation:"), "%s", text); if (strcmp(text, "Portrait") == 0) { doc->default_page_orientation = PORTRAIT; } else if (strcmp(text, "Landscape") == 0) { doc->default_page_orientation = LANDSCAPE; } } else if (page_media_set == NONE && iscomment(line+2, "PageMedia:")) { cp = gettext(line+length("%%PageMedia:"), NULL); for (dmp = doc->media, i=0; i<doc->nummedia; i++, dmp++) { if (strcmp(cp, dmp->name) == 0) { doc->default_page_media = dmp; page_media_set = 1; break; } } free(cp); } else if (page_bb_set == NONE && iscomment(line+2, "PageBoundingBox:")) { if (sscanf(line+length("%%PageBoundingBox:"), "%d %d %d %d", &(doc->default_page_boundingbox[LLX]), &(doc->default_page_boundingbox[LLY]), &(doc->default_page_boundingbox[URX]), &(doc->default_page_boundingbox[URY])) == 4) page_bb_set = 1; else { float fllx, flly, furx, fury; if (sscanf(line+length("%%PageBoundingBox:"), "%f %f %f %f", &fllx, &flly, &furx, &fury) == 4) { page_bb_set = 1; doc->default_page_boundingbox[LLX] = fllx; doc->default_page_boundingbox[LLY] = flly; doc->default_page_boundingbox[URX] = furx; doc->default_page_boundingbox[URY] = fury; if (fllx < doc->default_page_boundingbox[LLX]) doc->default_page_boundingbox[LLX]--; if (flly < doc->default_page_boundingbox[LLY]) doc->default_page_boundingbox[LLY]--; if (furx > doc->default_page_boundingbox[URX]) doc->default_page_boundingbox[URX]++; if (fury > doc->default_page_boundingbox[URY]) doc->default_page_boundingbox[URY]++; } } } } section_len += line_len; readline(line, sizeof line, file, &position, &line_len); section_len += line_len; doc->enddefaults = position; doc->lendefaults = section_len - line_len; } /* Document Prolog */ while (blank(line) && readline(line, sizeof line, file, &position, &line_len)) { } if (!iscomment(line, "%%BeginSetup") && !iscomment(line, "%%Page:") && !iscomment(line, "%%Trailer") && !iscomment(line, "%%EOF")) { doc->beginprolog = position; section_len = line_len; preread = 1; while ((preread || readline(line, sizeof line, file, &position, &line_len)) && !iscomment(line, "%%EndProlog") && !iscomment(line, "%%BeginSetup") && !iscomment(line, "%%Page:") && !iscomment(line, "%%Trailer") && !iscomment(line, "%%EOF")) { if (!preread) section_len += line_len; preread = 0; } section_len += line_len; if (iscomment(line, "%%EndProlog")) { readline(line, sizeof line, file, &position, &line_len); section_len += line_len; } doc->endprolog = position; doc->lenprolog = section_len - line_len; } /* Document Setup, Page Defaults found here for Version 2 files */ while (blank(line) && readline(line, sizeof line, file, &position, &line_len)) { } if (!iscomment(line, "%%Page:") && !iscomment(line, "%%Trailer") && !iscomment(line, "%%EOF")) { doc->beginsetup = position; section_len = line_len; preread = 1; while ((preread || readline(line, sizeof line, file, &position, &line_len)) && !iscomment(line, "%%EndSetup") && !iscomment(line, "%%Page:") && !iscomment(line, "%%Trailer") && !iscomment(line, "%%EOF")) { if (!preread) section_len += line_len; preread = 0; if (!iscomment(line, "%%")) { /* Do nothing */ } else if (doc->default_page_orientation == NONE && iscomment(line+2, "PageOrientation:")) { sscanf(line+length("%%PageOrientation:"), "%s", text); if (strcmp(text, "Portrait") == 0) { doc->default_page_orientation = PORTRAIT; } else if (strcmp(text, "Landscape") == 0) { doc->default_page_orientation = LANDSCAPE; } } else if (page_media_set == NONE && iscomment(line+2, "PaperSize:")) { cp = gettext(line+length("%%PaperSize:"), NULL); for (dmp = doc->media, i=0; i<doc->nummedia; i++, dmp++) { /* Note: Paper size comment uses down cased paper size * name. Case insensitive compares are only used for * PaperSize comments. */ if (strcasecmp(cp, dmp->name) == 0) { doc->default_page_media = dmp; page_media_set = 1; break; } } free(cp); } else if (page_bb_set == NONE && iscomment(line+2, "PageBoundingBox:")) { if (sscanf(line+length("%%PageBoundingBox:"), "%d %d %d %d", &(doc->default_page_boundingbox[LLX]), &(doc->default_page_boundingbox[LLY]), &(doc->default_page_boundingbox[URX]), &(doc->default_page_boundingbox[URY])) == 4) page_bb_set = 1; else { float fllx, flly, furx, fury; if (sscanf(line+length("%%PageBoundingBox:"), "%f %f %f %f", &fllx, &flly, &furx, &fury) == 4) { page_bb_set = 1; doc->default_page_boundingbox[LLX] = fllx; doc->default_page_boundingbox[LLY] = flly; doc->default_page_boundingbox[URX] = furx; doc->default_page_boundingbox[URY] = fury; if (fllx < doc->default_page_boundingbox[LLX]) doc->default_page_boundingbox[LLX]--; if (flly < doc->default_page_boundingbox[LLY]) doc->default_page_boundingbox[LLY]--; if (furx > doc->default_page_boundingbox[URX]) doc->default_page_boundingbox[URX]++; if (fury > doc->default_page_boundingbox[URY]) doc->default_page_boundingbox[URY]++; } } } } section_len += line_len; if (iscomment(line, "%%EndSetup")) { readline(line, sizeof line, file, &position, &line_len); section_len += line_len; } doc->endsetup = position; doc->lensetup = section_len - line_len; } /* Individual Pages */ while (blank(line) && readline(line, sizeof line, file, &position, &line_len)) { } newpage: while (iscomment(line, "%%Page:")) { if (maxpages == 0) { maxpages = 1; doc->pages = (struct page *) calloc(maxpages, sizeof(struct page)); if (doc->pages == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } } label = gettext(line+length("%%Page:"), &next_char); if (sscanf(next_char, "%d", &thispage) != 1) thispage = 0; if (nextpage == 1) { ignore = thispage != 1; } if (!ignore && thispage != nextpage) { free(label); doc->numpages--; goto continuepage; } nextpage++; if (doc->numpages == maxpages) { maxpages++; doc->pages = (struct page *) realloc(doc->pages, maxpages*sizeof (struct page)); if (doc->pages == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } } memset(&(doc->pages[doc->numpages]), 0, sizeof(struct page)); page_bb_set = NONE; doc->pages[doc->numpages].label = label; doc->pages[doc->numpages].begin = position; section_len = line_len; continuepage: while (readline(line, sizeof line, file, &position, &line_len) && !iscomment(line, "%%Page:") && !iscomment(line, "%%Trailer") && !iscomment(line, "%%EOF")) { section_len += line_len; if (!iscomment(line, "%%")) { /* Do nothing */ } else if (doc->pages[doc->numpages].orientation == NONE && iscomment(line+2, "PageOrientation:")) { sscanf(line+length("%%PageOrientation:"), "%s", text); if (strcmp(text, "Portrait") == 0) { doc->pages[doc->numpages].orientation = PORTRAIT; } else if (strcmp(text, "Landscape") == 0) { doc->pages[doc->numpages].orientation = LANDSCAPE; } } else if (doc->pages[doc->numpages].media == NULL && iscomment(line+2, "PageMedia:")) { cp = gettext(line+length("%%PageMedia:"), NULL); for (dmp = doc->media, i=0; i<doc->nummedia; i++, dmp++) { if (strcmp(cp, dmp->name) == 0) { doc->pages[doc->numpages].media = dmp; break; } } free(cp); } else if (doc->pages[doc->numpages].media == NULL && iscomment(line+2, "PaperSize:")) { cp = gettext(line+length("%%PaperSize:"), NULL); for (dmp = doc->media, i=0; i<doc->nummedia; i++, dmp++) { /* Note: Paper size comment uses down cased paper size * name. Case insensitive compares are only used for * PaperSize comments. */ if (strcasecmp(cp, dmp->name) == 0) { doc->pages[doc->numpages].media = dmp; break; } } free(cp); } else if ((page_bb_set == NONE || page_bb_set == ATEND) && iscomment(line+2, "PageBoundingBox:")) { sscanf(line+length("%%PageBoundingBox:"), "%s", text); if (strcmp(text, "(atend)") == 0) { page_bb_set = ATEND; } else { if (sscanf(line+length("%%PageBoundingBox:"), "%d %d %d %d", &(doc->pages[doc->numpages].boundingbox[LLX]), &(doc->pages[doc->numpages].boundingbox[LLY]), &(doc->pages[doc->numpages].boundingbox[URX]), &(doc->pages[doc->numpages].boundingbox[URY])) == 4) if (page_bb_set == NONE) page_bb_set = 1; else { float fllx, flly, furx, fury; if (sscanf(line+length("%%PageBoundingBox:"), "%f %f %f %f", &fllx, &flly, &furx, &fury) == 4) { if (page_bb_set == NONE) page_bb_set = 1; doc->pages[doc->numpages].boundingbox[LLX] = fllx; doc->pages[doc->numpages].boundingbox[LLY] = flly; doc->pages[doc->numpages].boundingbox[URX] = furx; doc->pages[doc->numpages].boundingbox[URY] = fury; if (fllx < doc->pages[doc->numpages].boundingbox[LLX]) doc->pages[doc->numpages].boundingbox[LLX]--; if (flly < doc->pages[doc->numpages].boundingbox[LLY]) doc->pages[doc->numpages].boundingbox[LLY]--; if (furx > doc->pages[doc->numpages].boundingbox[URX]) doc->pages[doc->numpages].boundingbox[URX]++; if (fury > doc->pages[doc->numpages].boundingbox[URY]) doc->pages[doc->numpages].boundingbox[URY]++; } } } } } section_len += line_len; doc->pages[doc->numpages].end = position; doc->pages[doc->numpages].len = section_len - line_len; doc->numpages++; } /* Document Trailer */ doc->begintrailer = position; section_len = line_len; preread = 1; while ((preread || readline(line, sizeof line, file, &position, &line_len)) && !iscomment(line, "%%EOF")) { if (!preread) section_len += line_len; preread = 0; if (!iscomment(line, "%%")) { /* Do nothing */ } else if (iscomment(line+2, "Page:")) { free(gettext(line+length("%%Page:"), &next_char)); if (sscanf(next_char, "%d", &thispage) != 1) thispage = 0; if (!ignore && thispage == nextpage) { if (doc->numpages > 0) { doc->pages[doc->numpages-1].end = position; doc->pages[doc->numpages-1].len += section_len - line_len; } goto newpage; } } else if (bb_set == ATEND && iscomment(line+2, "BoundingBox:")) { if (sscanf(line+length("%%BoundingBox:"), "%d %d %d %d", &(doc->boundingbox[LLX]), &(doc->boundingbox[LLY]), &(doc->boundingbox[URX]), &(doc->boundingbox[URY])) != 4) { float fllx, flly, furx, fury; if (sscanf(line+length("%%BoundingBox:"), "%f %f %f %f", &fllx, &flly, &furx, &fury) == 4) { doc->boundingbox[LLX] = fllx; doc->boundingbox[LLY] = flly; doc->boundingbox[URX] = furx; doc->boundingbox[URY] = fury; if (fllx < doc->boundingbox[LLX]) doc->boundingbox[LLX]--; if (flly < doc->boundingbox[LLY]) doc->boundingbox[LLY]--; if (furx > doc->boundingbox[URX]) doc->boundingbox[URX]++; if (fury > doc->boundingbox[URY]) doc->boundingbox[URY]++; } } } else if (orientation_set == ATEND && iscomment(line+2, "Orientation:")) { sscanf(line+length("%%Orientation:"), "%s", text); if (strcmp(text, "Portrait") == 0) { doc->orientation = PORTRAIT; } else if (strcmp(text, "Landscape") == 0) { doc->orientation = LANDSCAPE; } } else if (page_order_set == ATEND && iscomment(line+2, "PageOrder:")) { sscanf(line+length("%%PageOrder:"), "%s", text); if (strcmp(text, "Ascend") == 0) { doc->pageorder = ASCEND; } else if (strcmp(text, "Descend") == 0) { doc->pageorder = DESCEND; } else if (strcmp(text, "Special") == 0) { doc->pageorder = SPECIAL; } } else if (pages_set == ATEND && iscomment(line+2, "Pages:")) { if (sscanf(line+length("%%Pages:"), "%*u %d", &i) == 1) { if (page_order_set == NONE) { if (i == -1) doc->pageorder = DESCEND; else if (i == 0) doc->pageorder = SPECIAL; else if (i == 1) doc->pageorder = ASCEND; } } } } section_len += line_len; if (iscomment(line, "%%EOF")) { readline(line, sizeof line, file, &position, &line_len); section_len += line_len; } doc->endtrailer = position; doc->lentrailer = section_len - line_len; section_len = line_len; preread = 1; while (preread || readline(line, sizeof line, file, &position, &line_len)) { if (!preread) section_len += line_len; preread = 0; if (iscomment(line, "%%Page:")) { free(gettext(line+length("%%Page:"), &next_char)); if (sscanf(next_char, "%d", &thispage) != 1) thispage = 0; if (!ignore && thispage == nextpage) { doc->pages[doc->numpages-1].end = position; doc->pages[doc->numpages-1].len += doc->lentrailer + section_len - line_len; goto newpage; } } } return doc; } /* * psfree -- free dynamic storage associated with document structure. */ void psfree(doc) struct document *doc; { int i; if (doc) { for (i=0; i<doc->numpages; i++) { if (doc->pages[i].label) free(doc->pages[i].label); } for (i=0; i<doc->nummedia; i++) { if (doc->media[i].name) free(doc->media[i].name); } if (doc->title) free(doc->title); if (doc->date) free(doc->date); if (doc->pages) free(doc->pages); if (doc->media) free(doc->media); free(doc); } } /* * gettextine -- skip over white space and return the rest of the line. * If the text begins with '(' return the text string * using gettext(). */ static char * gettextline(line) char *line; { char *cp; while (*line && (*line == ' ' || *line == '\t')) line++; if (*line == '(') { return gettext(line, NULL); } else { if (strlen(line) == 0) return NULL; cp = (char *) malloc(strlen(line)); if (cp == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } strncpy(cp, line, strlen(line)-1); cp[strlen(line)-1] = '\0'; return cp; } } /* * gettext -- return the next text string on the line. * return NULL if nothing is present. */ static char * gettext(line, next_char) char *line; char **next_char; { char text[PSLINELENGTH]; /* Temporary storage for text */ char *cp; int quoted=0; while (*line && (*line == ' ' || *line == '\t')) line++; cp = text; if (*line == '(') { int level = 0; quoted=1; line++; while (*line && !(*line == ')' && level == 0 )) { if (*line == '\\') { if (*(line+1) == 'n') { *cp++ = '\n'; line += 2; } else if (*(line+1) == 'r') { *cp++ = '\r'; line += 2; } else if (*(line+1) == 't') { *cp++ = '\t'; line += 2; } else if (*(line+1) == 'b') { *cp++ = '\b'; line += 2; } else if (*(line+1) == 'f') { *cp++ = '\f'; line += 2; } else if (*(line+1) == '\\') { *cp++ = '\\'; line += 2; } else if (*(line+1) == '(') { *cp++ = '('; line += 2; } else if (*(line+1) == ')') { *cp++ = ')'; line += 2; } else if (*(line+1) >= '0' && *(line+1) <= '9') { if (*(line+2) >= '0' && *(line+2) <= '9') { if (*(line+3) >= '0' && *(line+3) <= '9') { *cp++ = ((*(line+1) - '0')*8 + *(line+2) - '0')*8 + *(line+3) - '0'; line += 4; } else { *cp++ = (*(line+1) - '0')*8 + *(line+2) - '0'; line += 3; } } else { *cp++ = *(line+1) - '0'; line += 2; } } else { line++; *cp++ = *line++; } } else if (*line == '(') { level++; *cp++ = *line++; } else if (*line == ')') { level--; *cp++ = *line++; } else { *cp++ = *line++; } } } else { while (*line && !(*line == ' ' || *line == '\t' || *line == '\n')) *cp++ = *line++; } *cp = '\0'; if (next_char) *next_char = line; if (!quoted && strlen(text) == 0) return NULL; cp = (char *) malloc(strlen(text)+1); if (cp == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } strcpy(cp, text); return cp; } /* * readline -- Read the next line in the postscript file. * Automatically skip over data (as indicated by * %%BeginBinary/%%EndBinary or %%BeginData/%%EndData * comments.) * Also, skip over included documents (as indicated by * %%BeginDocument/%%EndDocument comments.) */ static char * readline(line, size, fp, position, line_len) char *line; int size; FILE *fp; long *position; unsigned int *line_len; { char text[PSLINELENGTH]; /* Temporary storage for text */ char save[PSLINELENGTH]; /* Temporary storage for text */ char *cp; unsigned int num; unsigned int nbytes; int i; char buf[BUFSIZ]; if (position) *position = ftell(fp); cp = fgets(line, size, fp); if (cp == NULL) line[0] = '\0'; *line_len = strlen(line); if (line[0] == '\f') { for (i=1; i < *line_len ; i++) line[i-1] = line[i]; *line_len--; } if (iscomment(line, "%%BeginDocument:")) { strcpy(save, line+7); while (readline(line, size, fp, NULL, &nbytes) && !iscomment(line, "%%EndDocument")) { *line_len += nbytes; } *line_len += nbytes; strcpy(line, save); } else if (iscomment(line, "%%BeginFeature:")) { strcpy(save, line+7); while (readline(line, size, fp, NULL, &nbytes) && !iscomment(line, "%%EndFeature")) { *line_len += nbytes; } *line_len += nbytes; strcpy(line, save); } else if (iscomment(line, "%%BeginFile:")) { strcpy(save, line+7); while (readline(line, size, fp, NULL, &nbytes) && !iscomment(line, "%%EndFile")) { *line_len += nbytes; } *line_len += nbytes; strcpy(line, save); } else if (iscomment(line, "%%BeginFont:")) { strcpy(save, line+7); while (readline(line, size, fp, NULL, &nbytes) && !iscomment(line, "%%EndFont")) { *line_len += nbytes; } *line_len += nbytes; strcpy(line, save); } else if (iscomment(line, "%%BeginProcSet:")) { strcpy(save, line+7); while (readline(line, size, fp, NULL, &nbytes) && !iscomment(line, "%%EndProcSet")) { *line_len += nbytes; } *line_len += nbytes; strcpy(line, save); } else if (iscomment(line, "%%BeginResource:")) { strcpy(save, line+7); while (readline(line, size, fp, NULL, &nbytes) && !iscomment(line, "%%EndResource")) { *line_len += nbytes; } *line_len += nbytes; strcpy(line, save); } else if (iscomment(line, "%%BeginData:")) { text[0] = '\0'; strcpy(save, line+7); if (sscanf(line+length("%%BeginData:"), "%d %*s %s", &num, text) >= 1) { if (strcmp(text, "Lines") == 0) { for (i=0; i < num; i++) { cp = fgets(line, size, fp); *line_len += cp ? strlen(line) : 0; } } else { while (num > BUFSIZ) { fread(buf, sizeof (char), BUFSIZ, fp); *line_len += BUFSIZ; num -= BUFSIZ; } fread(buf, sizeof (char), num, fp); *line_len += num; } } while (readline(line, size, fp, NULL, &nbytes) && !iscomment(line, "%%EndData")) { *line_len += nbytes; } *line_len += nbytes; strcpy(line, save); } else if (iscomment(line, "%%BeginBinary:")) { strcpy(save, line+7); if(sscanf(line+length("%%BeginBinary:"), "%d", &num) == 1) { while (num > BUFSIZ) { fread(buf, sizeof (char), BUFSIZ, fp); *line_len += BUFSIZ; num -= BUFSIZ; } fread(buf, sizeof (char), num, fp); *line_len += num; } while (readline(line, size, fp, NULL, &nbytes) && !iscomment(line, "%%EndBinary")) { *line_len += nbytes; } *line_len += nbytes; strcpy(line, save); } return cp; } /* * pscopy -- copy lines of Postscript from a section of one file * to another file. * Automatically switch to binary copying whenever * %%BeginBinary/%%EndBinary or %%BeginData/%%EndData * comments are encountered. */ void pscopy(from, to, begin, end) FILE *from; FILE *to; long begin; /* set negative to avoid initial seek */ long end; { char line[PSLINELENGTH]; /* 255 characters + 1 newline + 1 NULL */ char text[PSLINELENGTH]; /* Temporary storage for text */ unsigned int num; int i; char buf[BUFSIZ]; if (begin >= 0) fseek(from, begin, SEEK_SET); while (ftell(from) < end) { fgets(line, sizeof line, from); fputs(line, to); if (iscomment(line, "%%BeginData:")) { text[0] = '\0'; if (sscanf(line+length("%%BeginData:"), "%d %*s %s", &num, text) >= 1) { if (strcmp(text, "Lines") == 0) { for (i=0; i < num; i++) { fgets(line, sizeof line, from); fputs(line, to); } } else { while (num > BUFSIZ) { fread(buf, sizeof (char), BUFSIZ, from); fwrite(buf, sizeof (char), BUFSIZ, to); num -= BUFSIZ; } fread(buf, sizeof (char), num, from); fwrite(buf, sizeof (char), num, to); } } } else if (iscomment(line, "%%BeginBinary:")) { if(sscanf(line+length("%%BeginBinary:"), "%d", &num) == 1) { while (num > BUFSIZ) { fread(buf, sizeof (char), BUFSIZ, from); fwrite(buf, sizeof (char), BUFSIZ, to); num -= BUFSIZ; } fread(buf, sizeof (char), num, from); fwrite(buf, sizeof (char), num, to); } } } } /* * pscopyuntil -- copy lines of Postscript from a section of one file * to another file until a particular comment is reached. * Automatically switch to binary copying whenever * %%BeginBinary/%%EndBinary or %%BeginData/%%EndData * comments are encountered. */ char * pscopyuntil(from, to, begin, end, comment) FILE *from; FILE *to; long begin; /* set negative to avoid initial seek */ long end; #if NeedFunctionPrototypes const #endif char *comment; { char line[PSLINELENGTH]; /* 255 characters + 1 newline + 1 NULL */ char text[PSLINELENGTH]; /* Temporary storage for text */ unsigned int num; int comment_length; int i; char buf[BUFSIZ]; char *cp; comment_length = strlen(comment); if (begin >= 0) fseek(from, begin, SEEK_SET); while (ftell(from) < end) { fgets(line, sizeof line, from); /* iscomment cannot be used here, * because comment_length is not known at compile time. */ if (strncmp(line, comment, comment_length) == 0) { cp = (char *) malloc(strlen(line)+1); if (cp == NULL) { fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n"); exit(-1); } strcpy(cp, line); return cp; } fputs(line, to); if (iscomment(line, "%%BeginData:")) { text[0] = '\0'; if (sscanf(line+length("%%BeginData:"), "%d %*s %s", &num, text) >= 1) { if (strcmp(text, "Lines") == 0) { for (i=0; i < num; i++) { fgets(line, sizeof line, from); fputs(line, to); } } else { while (num > BUFSIZ) { fread(buf, sizeof (char), BUFSIZ, from); fwrite(buf, sizeof (char), BUFSIZ, to); num -= BUFSIZ; } fread(buf, sizeof (char), num, from); fwrite(buf, sizeof (char), num, to); } } } else if (iscomment(line, "%%BeginBinary:")) { if(sscanf(line+length("%%BeginBinary:"), "%d", &num) == 1) { while (num > BUFSIZ) { fread(buf, sizeof (char), BUFSIZ, from); fwrite(buf, sizeof (char), BUFSIZ, to); num -= BUFSIZ; } fread(buf, sizeof (char), num, from); fwrite(buf, sizeof (char), num, to); } } } return NULL; } /* * blank -- determine whether the line contains nothing but whitespace. */ static int blank(line) char *line; { char *cp = line; while (*cp == ' ' || *cp == '\t') cp++; return *cp == '\n' || (*cp == '%' && (line[0] != '%' || line[1] != '%')); } �����������������������������������������������������������������������������������������������������������������������������midaswww-2.1/custom.c�������������������������������������������������������������������������������100666 � 21345 � 173 � 133763 5554674760 13161� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdio.h> /* For printf and so on. */ #include <string.h> #include <Mrm/MrmAppl.h> /* Motif Toolkit and MRM */ #include <Xm/Text.h> #include <Xm/ToggleBG.h> #include <Xm/PushBG.h> #include <Xm/CascadeBG.h> #include <Xm/SeparatoG.h> #include <Xm/RowColumn.h> #include "midaslist.h" #include "midasoperand.h" #include "midasshell.h" XmString MidasCharToString(); MidasShell *MidasGetShell(); Widget MidasFetch(); #ifndef VMS WidgetList DXmChildren(); int DXmNumChildren(); #endif MidasOperand MidasGetAppResource(); struct VerbInMenu { int Verb; int Menu; }; typedef struct VerbInMenu VerbInMenu; struct VerbStruct { char *Command; Boolean IsToggle; }; typedef struct VerbStruct VerbStruct; struct CustomHeader { int Modified; int Changed; Widget Fetched; Widget Parent; ListItem *Item; Widget CustomCommandText; Widget CustomVerbAddButton; Widget CustomVerbDeleteButton; Widget CustomVerbList; Widget CustomVerbText; Widget CustomVerbIsToggle; Widget CustomMenuAddButton; Widget CustomMenuDeleteButton; Widget CustomMenuList; Widget CustomMenuText; Widget CustomVMUpButton; Widget CustomVMDownButton; Widget CustomVMAddVerbButton; Widget CustomVMAddMenuButton; Widget CustomVMSeparatorButton; Widget CustomVMRemoveButton; Widget CustomVMList; Widget CustomVMActiveLabel; Widget CustomOKButton; Widget CustomApplyButton; Widget CustomCancelButton; Widget CustomResetButton; List TempVerbList; List TempMenuList; List VerbList; List MenuList; List *VMList; List ConnectList; }; typedef struct CustomHeader CustomHeader; struct Link { Widget Widget; CustomHeader *Header; }; typedef struct Link Link; static List CustomHeaders; static int ExitResponse; static void CustomSetActiveMenu(Header,Label) CustomHeader *Header; XmString Label; { int n = 0; Arg args[10]; XtSetArg(args[n],XmNlabelString,Label); n++; XtSetValues(Header->CustomVMActiveLabel,args,n); } static char *CustomAppendArrow(name) char *name; { char *result; result = strcpy(XtMalloc(strlen(name)+4),name); return strcat(result," =>"); } static Boolean CustomIsChild(Header,parent,child) CustomHeader *Header; List *parent; List *child; { ListItem *i; for (i = parent->First; i != 0; i = i->Next) { VerbInMenu *vm = ((VerbInMenu *) i->Pointer); if (vm->Menu != 0) { ListItem *menu = MidasFindItemInListPos(&Header->TempMenuList,vm->Menu); List *NewList = ((List *) menu->Pointer); if (NewList = child) return 1; else if (CustomIsChild(Header,NewList,child)) return 1; } } return 0; } static void CustomUpdatePositionsAdd(L,pos,verb) List *L; int pos; int verb; { ListItem *i , *j; for (i = L->First; i != 0; i = i->Next) { List *menu = ((List *) i->Pointer); if (menu != 0) for (j = menu->First; j != 0; j = j->Next) { VerbInMenu *vm = j->Pointer; if (verb) { if (vm->Verb >= pos) vm->Verb += 1; } else { if (vm->Menu >= pos) vm->Menu += 1; } } } }; static void CustomUpdatePositionsRemove(L,pos,verb) List *L; int pos; int verb; { ListItem *i, *j, *next; for (i = L->First; i != 0; i = i->Next) { List *menu = ((List *) i->Pointer); for (j = menu->First; j != 0; j = next) { VerbInMenu *vm = j->Pointer; next = j->Next; if (verb) { if (vm->Verb == pos) MidasRemoveItemFromList(menu,j); else if (vm->Verb > pos) vm->Verb -= 1; } else { if (vm->Menu == pos) MidasRemoveItemFromList(menu,j); else if (vm->Menu > pos) vm->Menu -= 1; } } } }; static void CustomUpdateSensitivity(Header) /*----Figures out which keys should be sensitive at the current time */ CustomHeader *Header; { char *menu; char *verb; char *command; Boolean sensitive; XtSetSensitive(Header->CustomApplyButton,Header->Changed != 0); XtSetSensitive(Header->CustomResetButton,Header->Changed != 0); XtSetSensitive(Header->CustomVerbDeleteButton, Header->TempVerbList.Selected != 0); XtSetSensitive(Header->CustomMenuDeleteButton, Header->TempMenuList.Selected != 0); verb = XmTextGetString(Header->CustomVerbText); command = XmTextGetString(Header->CustomCommandText); sensitive = (strcmp(verb,"") != 0 && strcmp(command,"") != 0 ); XtSetSensitive(Header->CustomVerbAddButton,sensitive); XtFree(command); XtFree(verb); menu = XmTextGetString(Header->CustomMenuText); sensitive = (strcmp(menu,"")!=0); XtSetSensitive(Header->CustomMenuAddButton,sensitive); XtFree(menu); if (Header->VMList == 0) { XtSetSensitive(Header->CustomVMAddMenuButton,0); XtSetSensitive(Header->CustomVMAddVerbButton,0); XtSetSensitive(Header->CustomVMSeparatorButton,0); XtSetSensitive(Header->CustomVMRemoveButton,0); XtSetSensitive(Header->CustomVMUpButton,0); XtSetSensitive(Header->CustomVMDownButton,0); } else { ListItem *item = Header->VMList->Selected; XtSetSensitive(Header->CustomVMSeparatorButton,1); XtSetSensitive(Header->CustomVMRemoveButton,(item!=0)); XtSetSensitive(Header->CustomVMUpButton, (item!=0 && item!=Header->VMList->First)); XtSetSensitive(Header->CustomVMDownButton, (item!=0 && item!=Header->VMList->Last)); sensitive = (Header->TempVerbList.Selected!=0); if (sensitive) sensitive=(MidasFindItemInList(Header->VMList, Header->TempVerbList.Selected->Entry)==0); XtSetSensitive(Header->CustomVMAddVerbButton,sensitive); sensitive = (Header->TempMenuList.Selected!=0); if (sensitive) { char *entry = CustomAppendArrow(Header->TempMenuList.Selected->Entry); sensitive=(MidasFindItemInList(Header->VMList,entry)==0); XtFree(entry); } if (sensitive) { List *parent = ((List *) Header->TempMenuList.Selected->Pointer); if (parent==0 || parent == Header->VMList) sensitive = 0; else sensitive = (CustomIsChild(Header,parent,Header->VMList)==0); } XtSetSensitive(Header->CustomVMAddMenuButton,sensitive); } } static CustomHeader *CustomFindHeader(w) Widget w; { Widget main; CustomHeader *header; int n = 0; Arg args[10]; XtSetArg(args[n],XmNuserData , &header); n++; for (main=w;; main=XtParent(main)) { XtGetValues(main,args,n); if (header!=0 && header != (CustomHeader *) -1) return header; } } static void CustomUpdateSensitivityCallback(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { CustomHeader *Header = CustomFindHeader(w); CustomUpdateSensitivity(Header); } static void CustomAddVerb(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { int pos; char *verb; char *command; ListItem *item; CustomHeader *Header = CustomFindHeader(w); Boolean istoggle; VerbStruct *Verb; verb = XmTextGetString(Header->CustomVerbText); command = XmTextGetString(Header->CustomCommandText); istoggle = XmToggleButtonGetState(Header->CustomVerbIsToggle); if (item = MidasFindItemInList(&Header->TempVerbList,verb)) { Verb = (VerbStruct *) item->Pointer; XtFree(Verb->Command); XtFree((char *) Verb); } else { item = MidasAddItemToList(&Header->TempVerbList,verb); pos = MidasFindItemPosInList(&Header->TempVerbList,item); MidasSelectItemPosInList(&Header->TempVerbList,pos,FALSE); CustomUpdatePositionsAdd(&Header->TempMenuList,pos,1); } XtFree(verb); Verb = XtNew(VerbStruct); Verb->Command = command; Verb->IsToggle = istoggle; Header->TempVerbList.Selected = item; item->Pointer = Verb; Header->Changed++; CustomUpdateSensitivity(Header); } static void CustomSelVerb(w,closure,cbDataP) Widget w; Opaque closure; XmListCallbackStruct *cbDataP; { ListItem *item; CustomHeader *Header = CustomFindHeader(w); VerbStruct *Verb; item = MidasFindItemInListPos(&Header->TempVerbList,cbDataP->item_position); Header->TempVerbList.Selected = item; XmTextSetString(Header->CustomVerbText,item->Entry); Verb = (VerbStruct *) item->Pointer; XmToggleButtonSetState(Header->CustomVerbIsToggle,Verb->IsToggle,FALSE); XmTextSetString(Header->CustomCommandText,Verb->Command); CustomUpdateSensitivity(Header); } static void CustomDelVerb(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { char *verb; CustomHeader *Header = CustomFindHeader(w); ListItem *item = Header->TempVerbList.Selected; VerbStruct *Verb = (VerbStruct *) item->Pointer; int pos = MidasFindItemPosInList(&Header->TempVerbList,item); XtFree(Verb->Command); CustomUpdatePositionsRemove(&Header->TempMenuList,pos,1); MidasRemoveItemFromList(&Header->TempVerbList,item); XmTextSetString(Header->CustomVerbText,""); XmTextSetString(Header->CustomCommandText,""); XmToggleButtonSetState(Header->CustomVerbIsToggle,FALSE,FALSE); Header->TempVerbList.Selected = 0; Header->Changed++; CustomUpdateSensitivity(Header); } static void CustomAddMenu(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { int pos; char *menu; ListItem *item; CustomHeader *Header = CustomFindHeader(w); menu = XmTextGetString(Header->CustomMenuText); XmTextSetString(Header->CustomMenuText,""); item = MidasAddItemToList(&Header->TempMenuList,menu); pos = MidasFindItemPosInList(&Header->TempMenuList,item); MidasSelectItemPosInList(&Header->TempMenuList,pos,FALSE); CustomUpdatePositionsAdd(&Header->TempMenuList,pos,0); item->Pointer = MidasCreateEmptyList(menu); Header->TempMenuList.Selected = item; Header->Changed++; CustomUpdateSensitivity(Header); XtFree(menu); } static void CustomSelConfMenu(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { char label[100]; XmString string; CustomHeader *Header = CustomFindHeader(w); strcpy(label,"Menu: "); if (Header->VMList!=0) MidasUnrealizeList(Header->VMList); Header->VMList = ((List *) Header->TempMenuList.Selected->Pointer); MidasRealizeList(Header->VMList,Header->CustomVMList); string = MidasCharToString(strcat(label,Header->TempMenuList.Selected->Entry)); CustomSetActiveMenu(Header,string); XmStringFree(string); CustomUpdateSensitivity(Header); } static void CustomSelMenu(w,closure,cbDataP) Widget w; Opaque closure; XmListCallbackStruct *cbDataP; { ListItem *item; CustomHeader *Header = CustomFindHeader(w); item = MidasFindItemInListPos(&Header->TempMenuList,cbDataP->item_position); Header->TempMenuList.Selected = item; CustomUpdateSensitivity(Header); } static void CustomDelMenu(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { char *menu; CustomHeader *Header = CustomFindHeader(w); int pos = MidasFindItemPosInList(&Header->TempMenuList, Header->TempMenuList.Selected); CustomUpdatePositionsRemove(&Header->TempMenuList,pos,0); if (((List *) Header->TempMenuList.Selected->Pointer) == Header->VMList) { XmString string; MidasUnrealizeList(Header->VMList); Header->VMList=0; string = MidasCharToString("No Menu Selected"); CustomSetActiveMenu(Header,string); XmStringFree(string); } MidasDestroyList(Header->TempMenuList.Selected->Pointer); Header->TempMenuList.Selected->Pointer = 0; MidasRemoveItemFromList(&Header->TempMenuList,Header->TempMenuList.Selected); Header->TempMenuList.Selected = 0; Header->Changed++; CustomUpdateSensitivity(Header); } static void CustomVMAddSeparator(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { ListItem *item; VerbInMenu *vm; CustomHeader *Header = CustomFindHeader(w); item = MidasAddItemToListPos(Header->VMList,"......",0); MidasSelectItemPosInList(Header->VMList,0,FALSE); vm = XtNew(VerbInMenu); vm->Menu = 0; vm->Verb = 0; item->Pointer = vm; Header->VMList->Selected = item; Header->Changed++; CustomUpdateSensitivity(Header); } static void CustomVMAddVerb(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { char *verb; VerbInMenu *vm; ListItem *item; CustomHeader *Header = CustomFindHeader(w); verb = Header->TempVerbList.Selected->Entry; item = MidasAddItemToListPos(Header->VMList,verb,0); MidasSelectItemPosInList(Header->VMList,0,FALSE); vm = XtNew(VerbInMenu); vm->Menu = 0; vm->Verb = MidasFindItemPosInList(&Header->TempVerbList, Header->TempVerbList.Selected); item->Pointer = vm; Header->VMList->Selected = item; Header->Changed++; CustomUpdateSensitivity(Header); } static void CustomSelConfVerb(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { CustomHeader *Header = CustomFindHeader(w); if (XtIsSensitive(Header->CustomVMAddVerbButton)) CustomVMAddVerb(w,closure,(XmAnyCallbackStruct *) cbDataP); } static void CustomVMAddMenu(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { char *menu, *arrow; VerbInMenu *vm; ListItem *item; CustomHeader *Header = CustomFindHeader(w); menu = Header->TempMenuList.Selected->Entry; arrow = CustomAppendArrow(menu); item = MidasAddItemToListPos(Header->VMList,arrow,0); MidasSelectItemPosInList(Header->VMList,0,FALSE); XtFree(arrow); vm = XtNew(VerbInMenu); vm->Menu = MidasFindItemPosInList(&Header->TempMenuList, Header->TempMenuList.Selected); vm->Verb = 0; item->Pointer = vm; Header->VMList->Selected = item; Header->Changed++; CustomUpdateSensitivity(Header); } static void CustomVMSel(w,closure,cbDataP) Widget w; Opaque closure; XmListCallbackStruct *cbDataP; { ListItem *item; CustomHeader *Header = CustomFindHeader(w); item = MidasFindItemInListPos(Header->VMList,cbDataP->item_position); Header->VMList->Selected = item; CustomUpdateSensitivity(Header); } static void CustomVMSelConf(w,closure,cbDataP) Widget w; Opaque closure; XmListCallbackStruct *cbDataP; { VerbInMenu *vm; ListItem *item; CustomHeader *Header = CustomFindHeader(w); item = MidasFindItemInListPos(Header->VMList,cbDataP->item_position); vm = ((VerbInMenu *) item->Pointer); if (vm->Verb != 0) { ListItem *verb = MidasFindItemInListPos(&Header->TempVerbList,vm->Verb); XmString string = MidasCharToString(verb->Entry); XmListSelectItem(Header->CustomVerbList,string,1); XmStringFree(string); } else if (vm->Menu != 0) { ListItem *menu = MidasFindItemInListPos(&Header->TempMenuList,vm->Menu); XmString string = MidasCharToString(menu->Entry); XmListSelectItem(Header->CustomMenuList,string,1); XmStringFree(string); } } static void CustomVMDel(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { char *menu; ListItem *item; CustomHeader *Header = CustomFindHeader(w); MidasRemoveItemFromList(Header->VMList,Header->VMList->Selected); Header->VMList->Selected = 0; Header->Changed++; CustomUpdateSensitivity(Header); } static void CustomMoveUp(Header,item,dir) CustomHeader *Header; ListItem *item; int dir; { XmString NewItems[2]; ListItem *i; ListItem *swap = item->Prev; int position=0; for (i = Header->VMList->First; i != 0; i = i->Next) { position++; if (i == item) break; } NewItems[0] = MidasCharToString(item->Entry); NewItems[1] = MidasCharToString(swap->Entry); XmListReplaceItemsPos(Header->VMList->W,NewItems,2,--position); XmStringFree(NewItems[0]); XmStringFree(NewItems[1]); if (dir) { XmListDeselectPos(Header->VMList->W,position); XmListSelectPos(Header->VMList->W,position+1,0); } else { XmListSelectPos(Header->VMList->W,position,0); XmListDeselectPos(Header->VMList->W,position+1); } if (Header->VMList->First == swap) Header->VMList->First = item; else swap->Prev->Next = item; if (Header->VMList->Last == item) Header->VMList->Last = swap; else item->Next->Prev = swap; item->Prev = swap->Prev; swap->Next = item->Next; item->Next = swap; swap->Prev = item; Header->Changed++; CustomUpdateSensitivity(Header); } static void CustomVMUp(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { CustomHeader *Header = CustomFindHeader(w); CustomMoveUp(Header,Header->VMList->Selected,0); } static void CustomVMDown(w,closure,cbDataP) Widget w; Opaque closure; XmAnyCallbackStruct *cbDataP; { CustomHeader *Header = CustomFindHeader(w); CustomMoveUp(Header,Header->VMList->Selected->Next,1); } static void CustomDispatchCommand(w,tag,cbDataP) Widget w; Opaque tag; XmAnyCallbackStruct *cbDataP; { MidasDispatchCommandCallback(w,tag,cbDataP); } static void CustomCreateCallback(w,tag,cbDataP) Widget w; int *tag; XmAnyCallbackStruct *cbDataP; { ListItem *item = CustomHeaders.Selected; CustomHeader *Header = item->Pointer; if (*tag == 1) Header->CustomCommandText = w; else if (*tag == 2) Header->CustomVMUpButton = w; else if (*tag == 3) Header->CustomVMDownButton = w; else if (*tag == 4) Header->CustomVMAddVerbButton = w; else if (*tag == 5) Header->CustomVMAddMenuButton = w; else if (*tag == 6) Header->CustomVMSeparatorButton = w; else if (*tag == 7) Header->CustomVMRemoveButton = w; else if (*tag == 8) Header->CustomVMList = w; else if (*tag == 9) Header->CustomOKButton = w; else if (*tag == 10) Header->CustomApplyButton = w; else if (*tag == 11) Header->CustomCancelButton = w; else if (*tag == 12) Header->CustomResetButton = w; else if (*tag == 13) Header->CustomVerbList = w; else if (*tag == 14) Header->CustomVerbText = w; else if (*tag == 15) Header->CustomVerbAddButton = w; else if (*tag == 16) Header->CustomVerbDeleteButton = w; else if (*tag == 17) Header->CustomMenuList = w; else if (*tag == 18) Header->CustomMenuText = w; else if (*tag == 19) Header->CustomMenuAddButton = w; else if (*tag == 20) Header->CustomMenuDeleteButton = w; else if (*tag == 21) Header->CustomVMActiveLabel = w; else if (*tag == 22) Header->CustomVerbIsToggle = w; } static void CustomDestroyMenu(w) Widget w; { Widget *list = DXmChildren(w); int n = DXmNumChildren(w); for (; n > 0; n--) { XtUnmanageChild(*list); XtDestroyWidget(*list); list++; } } static char *strtrn(in,from,to) char *in; char from; char to; { char *p = in; for (; *p != 0; p++) if (*p == from) *p = to; return in; } static void CustomBuildMenu(Header,w,menu) CustomHeader *Header; Widget w; List *menu; { Widget child[4000]; ListItem *j; int pass, m=0; char *p; char mnemonic,mnemonics[37]; char *parentType; Arg args[10]; int n = 0; Boolean enableMnemonics; strcpy(mnemonics,"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"); XtSetArg(args[n],XmNrowColumnType,&parentType); n++; XtGetValues(w,args,n); enableMnemonics = (parentType != XmWORK_AREA); for (j = menu->First; j != 0; j = j->Next) { VerbInMenu *vm = ((VerbInMenu *) j->Pointer); n = 0; if (vm->Verb != 0) { ListItem *verb = MidasFindItemInListPos(&Header->VerbList,vm->Verb); XmString verbname; char *label = XtNewString(verb->Entry); VerbStruct *Verb = (VerbStruct *) verb->Pointer; char *name = strtrn(XtNewString(verb->Entry),' ','_'); strtrn(name,'.','_'); strtok(label,"("); /* Remove parenthetical comments */ for (p = label + strlen(label); *p == ' '; p--) *p='\0'; verbname = MidasCharToString(label); /* * Try to choose a suitable Mnemonic. Choose first letter of word if * possible, otherwise all letters in turn. */ mnemonic = ' '; for (pass = 0; pass < 2; pass++) { for (p = label; *p; p++) if (*p != ' ') { char m = toupper(*p); char *ok = strchr(mnemonics,m); if (ok) { *ok = ' '; mnemonic = *p; break; } if (pass == 0) for ( ; *p != ' ' && *p != '\0' ; p++); if (!*p) break; } if (mnemonic != ' ') break; } if (Verb->IsToggle) { XtSetArg(args[n],XmNlabelString, verbname); n++; if (mnemonic != ' ' && enableMnemonics) XtSetArg(args[n],XmNmnemonic, mnemonic); n++; child[m] = XmCreateToggleButtonGadget(w,name,args,n); MidasSetupWidget(child[m]); XtAddCallback(child[m++],XmNvalueChangedCallback, (XtCallbackProc) CustomDispatchCommand,Verb->Command); } else { XtSetArg(args[n],XmNlabelString, verbname); n++; if (mnemonic != ' ' && enableMnemonics) XtSetArg(args[n],XmNmnemonic, mnemonic); n++; child[m] = XmCreatePushButtonGadget(w,name,args,n); MidasSetupWidget(child[m]); XtAddCallback(child[m++],XmNactivateCallback, (XtCallbackProc) CustomDispatchCommand,Verb->Command); } XtFree(name); XtFree(label); XmStringFree(verbname); } else if (vm->Menu != 0) { ListItem *menu = MidasFindItemInListPos(&Header->MenuList,vm->Menu); XmString menuname; char *label = XtNewString(menu->Entry); char *name = strtrn(XtNewString(menu->Entry),' ','_'); Widget submenu = XmCreatePulldownMenu(w,name,NULL,0); strtok(label,"("); /* Remove parenthetical comments */ for (p = label + strlen(label); *--p == ' ';) *p='\0'; menuname = MidasCharToString(label); /* * Try to choose a suitable Mnemonic. Choose first letter of word if * possible, otherwise all letters in turn. */ mnemonic = ' '; for (pass = 0; pass < 2; pass++) { for (p = label; *p; p++) if (*p != ' ') { char m = toupper(*p); char *ok = strchr(mnemonics,m); if (ok) { *ok = ' '; mnemonic = *p; break; } if (pass == 0) for ( ; *p != ' ' && *p != '\0' ; p++); if (!*p) break; } if (mnemonic != ' ') break; } XtSetArg(args[n],XmNlabelString , menuname ); n++; XtSetArg(args[n],XmNsubMenuId , submenu ); n++; if (mnemonic != ' ') XtSetArg(args[n],XmNmnemonic, mnemonic); n++; child[m] = XmCreateCascadeButtonGadget(w,name,args,n); /* * If the last item in a menu is a HELP menu, force it to be right aligned */ if (j->Next == NULL && strcmp(label,"Help")==0) { n = 0; XtSetArg(args[n],XmNmenuHelpWidget,child[m]); n++; XtSetValues(w,args,n); } MidasSetupWidget(submenu); MidasSetupWidget(child[m++]); XtFree(name); XtFree(label); XmStringFree(menuname); CustomBuildMenu(Header,submenu,menu->Pointer); } else { child[m++] = XmCreateSeparatorGadget(w," ",NULL,0); } } XtManageChildren(child,m); } static void CustomWrite(Header,Name) CustomHeader *Header; char *Name; { ListItem *i,*j; List *menu; char list[4096]; char value[4096]; char specifier[80]; char *l = list; MidasShell *ms = MidasGetShell(Header->Parent); XrmDatabase *database = &ms->Application->Database; int n= 0 ; for (i = Header->VerbList.First; i != 0; i = i->Next) { VerbStruct *Verb = (VerbStruct *) i->Pointer; strcpy(l,i->Entry); l += strlen(i->Entry); *l++ = '#'; sprintf(specifier,"CUSTOM.%s.Verb.%d",Name,++n); if (Verb->IsToggle) sprintf(value,"#%s",Verb->Command); else sprintf(value,"%s" ,Verb->Command); XrmPutStringResource(database,specifier,value); } *(--l) = '\0'; sprintf(specifier,"CUSTOM.%s.Verbs",Name); XrmPutStringResource(database,specifier,list); l = list; n = 0; for (i = Header->MenuList.First; i != 0; i = i->Next) { char *v = value; menu = i->Pointer; strcpy(l,i->Entry); l += strlen(i->Entry); *l++ = '#'; for (j = menu->First; j != 0; j = j->Next) { VerbInMenu *vm = ((VerbInMenu *) j->Pointer); int pos = 0; if (vm->Verb != 0) pos = vm->Verb; else if (vm->Menu != 0) pos = -vm->Menu; sprintf(v,"%s@%d#",j->Entry,pos); v += strlen(v); } *(--v) = '\0'; sprintf(specifier,"CUSTOM.%s.Menu.%d",Name,++n); XrmPutStringResource(database,specifier,value); } *(--l) = '\0'; sprintf(specifier,"CUSTOM.%s.Menus",Name); XrmPutStringResource(database,specifier,list); ms->Application->Changes++; Header->Modified = 0; } static void CustomReadOld(Header,Name,UserDefaults) CustomHeader *Header; char *Name; int UserDefaults; { char buffer[4000] , name[80]; FILE *file; if (UserDefaults) { #ifdef VMS sprintf(name,"DECW$USER_DEFAULTS:MIDAS_%s.DAT",Name); #else sprintf(name,".Midas_%src",Name); #endif file = fopen(name,"r"); } if (file == 0) { sprintf(name,"DECW$SYSTEM_DEFAULTS:MIDAS_%s.DAT",Name); file = fopen(name,"r"); } if (file == 0) file = fopen("DECW$SYSTEM_DEFAULTS:MIDAS_CUSTOM.DAT","r"); if (file == 0) MidasError("Could not open customization file for %s",Name); for (;;) { int c = fgetc(file); if (c == EOF) break; if (c == '$') { int i,j,l; char type[6],*p; p = type; *p++ = fgetc(file); *p++ = fgetc(file); *p++ = fgetc(file); *p++ = fgetc(file); *p++ = fgetc(file); *p = '\0'; for (l=0;;l++) { c = fgetc(file); buffer[l] = c; if (c == '{') j=l; if (c == '}' | c == EOF) break; } i = 1; buffer[j-1] = '\0'; j += 2; if (strcmp(type,"Verb:") == 0) { VerbStruct *Verb = XtNew(VerbStruct); ListItem *item; if (buffer[i]=='#') { i++; Verb->IsToggle = TRUE; } else Verb->IsToggle = FALSE; item = MidasAddItemToList(&Header->VerbList,&buffer[i]); buffer[l-1] = '\0'; item->Pointer = Verb; Verb->Command = XtNewString(&buffer[j]); } else if (strcmp(type,"Menu:") == 0) { int k; List *list; ListItem *item = MidasAddItemToListPos(&Header->MenuList,&buffer[i],0); list = XtNew(List); list->First = 0; list->Last = 0; list->Selected = 0; list->W = 0; item->Pointer = list; for (;;) { VerbInMenu *vm; int pos; for (;buffer[j]==' ';j++); for (k=j; buffer[k]!='@' && buffer[k]!='}'; k++); if (buffer[k]=='}') break; buffer[k]='\0'; item = MidasAddItemToListPos(list,&buffer[j],0); vm = XtNew(VerbInMenu); item->Pointer = vm; vm->Menu = 0; vm->Verb = 0; j = k+1; for (k=j; buffer[k]!='\n'; k++); buffer[k]='\0'; pos = atoi(&buffer[j]); if (pos > 0) vm->Verb = pos; else if (pos < 0) vm->Menu = -pos; j = k+1; } } } } fclose(file); } static void CustomRead(Header,Name,UserDefaults) CustomHeader *Header; char *Name; int UserDefaults; { XrmDatabase database = XtDatabase(XtDisplay(Header->Parent)); char specifier[80]; char *type; XrmRepresentation rep; char *Verbs, *verb; char *Menus, *menu; XrmValue value; Boolean found; int n = 0; XrmHashTable root[10]; XrmQuark quarks[3]; /* * Start by reading the lists of verbs and menus */ sprintf(specifier,"CUSTOM.%s.Verbs",Name); found = XrmGetResource(database,specifier,specifier,&type,&value); if (!found) { CustomReadOld(Header,Name,UserDefaults); return; } Verbs = XtNewString(value.addr); sprintf(specifier,"CUSTOM.%s.Menus",Name); found = XrmGetResource(database,specifier,specifier,&type,&value); Menus = XtNewString(value.addr); sprintf(specifier,"CUSTOM.%s.Verb",Name); XrmStringToNameList(specifier,quarks); XrmQGetSearchList(database,quarks,quarks,root,XtNumber(root)); for (verb = strtok(Verbs,"#"); verb != NULL; verb = strtok(NULL,"#")) { VerbStruct *Verb = XtNew(VerbStruct); ListItem *item = MidasAddItemToListPos(&Header->VerbList,verb,0); char name[8]; char *command; sprintf(name,"%d",++n); XrmQGetSearchResource(root,XrmStringToName(name),XrmStringToClass(name),&rep,&value); command = value.addr; if (Verb->IsToggle = (*command == '#')) command++; item->Pointer = Verb; Verb->Command = XtNewString(command); } n = 0; sprintf(specifier,"CUSTOM.%s.Menu",Name); XrmStringToNameList(specifier,quarks); XrmQGetSearchList(database,quarks,quarks,root,XtNumber(root)); for (menu = strtok(Menus,"#"); menu != NULL; menu = strtok(NULL,"#")) { char *menuitems, *p; char name[8]; List *list = MidasCreateEmptyList(""); ListItem *item = MidasAddItemToListPos(&Header->MenuList,menu,0); item->Pointer = list; sprintf(name,"%d",++n); XrmQGetSearchResource(root,XrmStringToName(name),XrmStringToClass(name),&rep,&value); menuitems = XtNewString(value.addr); for (p = menuitems; *p != '\0'; p++) { VerbInMenu *vm = XtNew(VerbInMenu); int pos; ListItem *item; for (verb = p; *p != '@'; p++); *p = '\0'; item = MidasAddItemToListPos(list,verb,0); item->Pointer = vm; vm->Menu = 0; vm->Verb = 0; for (verb = ++p; *p != '#' && *p != '\0'; p++); pos = atoi(verb); if (pos > 0) vm->Verb = pos; else if (pos < 0) vm->Menu = -pos; if (*p == '\0') break; } XtFree(menuitems); } XtFree(Verbs); XtFree(Menus); } static void CustomUpdateMenus(Header) CustomHeader *Header; { ListItem *connect = Header->ConnectList.First; for (; connect != 0 ; connect = connect->Next ) { Link *link = connect->Pointer; ListItem *menu = MidasFindItemInList(&Header->MenuList,connect->Entry); CustomDestroyMenu(link->Widget); CustomBuildMenu(Header,link->Widget,menu->Pointer); } } static VerbStruct *CustomCopyVerbListElement(Old) VerbStruct *Old; { VerbStruct *New = XtNew(VerbStruct); New->IsToggle = Old->IsToggle; New->Command = XtNewString(Old->Command); return New; } static VerbInMenu *CustomCopyVMListElement(vm) VerbInMenu *vm; { return (VerbInMenu *) memcpy(XtMalloc(sizeof(VerbInMenu)),vm,sizeof(VerbInMenu)); } static List *CustomCopyMenuListElement(L) List *L; { List *New = MidasCreateEmptyList(""); MidasCopyList(L,New,(MidasCopyListRtn)CustomCopyVMListElement); return New; } static void CustomCopyVerbList(Old,New) List *Old; List *New; { MidasCopyList(Old,New,(MidasCopyListRtn)CustomCopyVerbListElement); } static void CustomCopyMenuList(Old,New) List *Old; List *New; { MidasCopyList(Old,New,(MidasCopyListRtn)CustomCopyMenuListElement); } static void CustomCleanup(Header) CustomHeader *Header; { XmString string; if (Header->VMList != 0) MidasUnrealizeList(Header->VMList); MidasUnrealizeList(&Header->TempVerbList); MidasUnrealizeList(&Header->TempMenuList); Header->VMList=0; string = MidasCharToString("No Menu Selected"); CustomSetActiveMenu(Header,string); XmStringFree(string); XmTextSetString(Header->CustomVerbText,""); XmTextSetString(Header->CustomMenuText,""); XmTextSetString(Header->CustomCommandText,""); } static void CustomApply(w,tag,cbDataP) Widget w; int *tag; XmSelectionBoxCallbackStruct *cbDataP; { ListItem *i; CustomHeader *Header = CustomFindHeader(w); Header->Changed = 0; Header->Modified++; for (i = Header->MenuList.First ; i != 0 ; i = i->Next ) { MidasDestroyList(i->Pointer); i->Pointer = 0; } for (i = Header->VerbList.First ; i != 0 ; i = i->Next ) { VerbStruct *Verb = (VerbStruct *) i->Pointer; XtFree(Verb->Command); XtFree((char *) Verb); i->Pointer = 0; } MidasEmptyList(&Header->VerbList); MidasEmptyList(&Header->MenuList); Header->VerbList = NullList; Header->MenuList = NullList; CustomCopyVerbList(&Header->TempVerbList,&Header->VerbList); CustomCopyMenuList(&Header->TempMenuList,&Header->MenuList); CustomUpdateMenus(Header); CustomUpdateSensitivity(Header); CustomWrite(Header,Header->Item->Entry); } static void CustomReset(w,tag,cbDataP) Widget w; int *tag; XmSelectionBoxCallbackStruct *cbDataP; { CustomHeader *Header = CustomFindHeader(w); ListItem *i; CustomCleanup(Header); for (i = Header->TempMenuList.First ; i != 0 ; i = i->Next ) { MidasDestroyList(i->Pointer); i->Pointer = 0; } for (i = Header->TempVerbList.First ; i != 0 ; i = i->Next ) { VerbStruct *Verb = (VerbStruct *) i->Pointer; XtFree(Verb->Command); XtFree((char *) Verb); i->Pointer = 0; } MidasEmptyList(&Header->TempVerbList); MidasEmptyList(&Header->TempMenuList); Header->TempVerbList = NullList; Header->TempMenuList = NullList; CustomCopyVerbList(&Header->VerbList,&Header->TempVerbList); CustomCopyMenuList(&Header->MenuList,&Header->TempMenuList); MidasRealizeList(&Header->TempVerbList,Header->CustomVerbList); MidasRealizeList(&Header->TempMenuList,Header->CustomMenuList); Header->Changed = 0; CustomUpdateSensitivity(Header); } static void CustomCancel(w,tag,cbDataP) Widget w; int *tag; XmSelectionBoxCallbackStruct *cbDataP; { ListItem *i; CustomHeader *Header = CustomFindHeader(w); XtUnmanageChild(Header->Fetched); CustomCleanup(Header); for (i = Header->TempMenuList.First ; i != 0 ; i = i->Next ) { MidasDestroyList(i->Pointer); i->Pointer = 0; } for (i = Header->TempVerbList.First ; i != 0 ; i = i->Next ) { VerbStruct *Verb = (VerbStruct *) i->Pointer; XtFree(Verb->Command); XtFree((char *) Verb); i->Pointer = 0; } MidasEmptyList(&Header->TempVerbList); MidasEmptyList(&Header->TempMenuList); Header->TempVerbList = NullList; Header->TempMenuList = NullList; } static void CustomOk(w,tag,cbDataP) Widget w; int *tag; XmSelectionBoxCallbackStruct *cbDataP; { CustomHeader *Header = CustomFindHeader(w); ListItem *i; CustomCleanup(Header); if (Header->Changed != 0) { for (i = Header->MenuList.First ; i != 0 ; i = i->Next ) { MidasDestroyList(i->Pointer); i->Pointer = 0; } for (i = Header->VerbList.First ; i != 0 ; i = i->Next ) { VerbStruct *Verb = (VerbStruct *) i->Pointer; XtFree(Verb->Command); XtFree((char *) Verb); i->Pointer = 0; } MidasEmptyList(&Header->VerbList); MidasEmptyList(&Header->MenuList); Header->VerbList = Header->TempVerbList; Header->MenuList = Header->TempMenuList; CustomUpdateMenus(Header); Header->Modified++; } else { for (i = Header->TempMenuList.First ; i != 0 ; i = i->Next ) { MidasDestroyList(i->Pointer); i->Pointer = 0; } for (i = Header->TempVerbList.First ; i != 0 ; i = i->Next ) { VerbStruct *Verb = (VerbStruct *) i->Pointer; XtFree(Verb->Command); XtFree((char *) Verb); i->Pointer = 0; } MidasEmptyList(&Header->TempVerbList); MidasEmptyList(&Header->TempMenuList); } Header->TempVerbList = NullList; Header->TempVerbList = NullList; XtUnmanageChild(Header->Fetched); CustomWrite(Header,Header->Item->Entry); } static void CustomDisconnect(w,connect,cbDataP) Widget w; ListItem *connect; XmSelectionBoxCallbackStruct *cbDataP; { Link *link = connect->Pointer; CustomHeader *Header = link->Header; MidasRemoveItemFromList(&Header->ConnectList,connect); } void CustomWriteUser(name,entry) char *name; char *entry; { CustomHeader *Header; ListItem *item = MidasFindItemInList(&CustomHeaders,name); char *fname; if (item == 0) return; Header = item->Pointer; if (entry==0) fname=name; else fname=entry; CustomWrite(Header,fname); } void CustomReadUser(name,entry) char *name; char *entry; { CustomHeader *Header; ListItem *item = MidasFindItemInList(&CustomHeaders,name); char *fname; if (item == 0) return; Header = item->Pointer; if (entry==0) fname=name; else fname=entry; CustomRead(Header,fname,1); } void CustomReadSystem(name,entry) char *name; char *entry; { CustomHeader *Header; ListItem *item = MidasFindItemInList(&CustomHeaders,name); char *fname; if (item == 0) return; Header = item->Pointer; if (entry==0) fname=name; else fname=entry; CustomRead(Header,fname,0); } void CustomConnect(name,entry,w) char *name; char *entry; Widget w; { CustomHeader *Header; ListItem *item = MidasFindItemInList(&CustomHeaders,name); ListItem *menu, *connect; Link *link; int pos; if (item == 0) return; Header = item->Pointer; menu = MidasFindItemInList(&Header->MenuList,entry); if (menu==0) { menu = MidasAddItemToList(&Header->MenuList,entry); pos = MidasFindItemPosInList(&Header->MenuList,menu); CustomUpdatePositionsAdd(&Header->MenuList,pos,0); menu->Pointer = MidasCreateEmptyList(""); } else { CustomBuildMenu(Header,w,menu->Pointer); } connect = MidasAddItemToListPos(&Header->ConnectList,entry,0); link = XtNew(Link); connect->Pointer = link; link->Widget = w; link->Header = Header; XtAddCallback(w,XmNdestroyCallback,(XtCallbackProc) CustomDisconnect,(XtPointer) connect); } void CustomPopup(name) char *name; { CustomHeader *Header; ListItem *item = MidasFindItemInList(&CustomHeaders,name); if (item == 0) return; Header = item->Pointer; if (Header->Fetched == 0) { int n = 0; Arg args[10]; XtSetArg(args[n],XmNuserData , Header); n++; CustomHeaders.Selected = item; Header->Fetched = MidasFetch("Midas_Custom",Header->Parent); XtSetValues(Header->Fetched,args,n); } if (XtIsManaged(Header->Fetched) == 0) { Header->TempVerbList = NullList; Header->TempMenuList = NullList; CustomCopyVerbList(&Header->VerbList,&Header->TempVerbList); CustomCopyMenuList(&Header->MenuList,&Header->TempMenuList); MidasRealizeList(&Header->TempVerbList,Header->CustomVerbList); MidasRealizeList(&Header->TempMenuList,Header->CustomMenuList); Header->Changed = 0; XtManageChild(Header->Fetched); } CustomUpdateSensitivity(Header); } void CustomCreate(name,parent) char *name; Widget parent; { CustomHeader *NewHeader; ListItem *NewItem; if (MidasFindItemInList(&CustomHeaders,name)) return; NewItem = MidasAddItemToList(&CustomHeaders,name); NewHeader = XtNew(CustomHeader); NewItem->Pointer = NewHeader; NewHeader->Modified = 0; NewHeader->Fetched = 0; NewHeader->Parent = parent; NewHeader->MenuList = NullList; NewHeader->VerbList = NullList; NewHeader->TempMenuList = NullList; NewHeader->TempVerbList = NullList; NewHeader->VMList = 0; NewHeader->ConnectList = NullList; NewHeader->Item = NewItem; CustomRead(NewHeader,name,1); } void CustomInit() { static MrmRegisterArg reglist[] = { {"CustomAddVerb", (caddr_t) CustomAddVerb}, {"CustomDelVerb", (caddr_t) CustomDelVerb}, {"CustomSelVerb", (caddr_t) CustomSelVerb}, {"CustomSelConfVerb", (caddr_t) CustomSelConfVerb}, {"CustomAddMenu", (caddr_t) CustomAddMenu}, {"CustomDelMenu", (caddr_t) CustomDelMenu}, {"CustomSelMenu", (caddr_t) CustomSelMenu}, {"CustomSelConfMenu", (caddr_t) CustomSelConfMenu}, {"CustomVMAddSeparator", (caddr_t) CustomVMAddSeparator}, {"CustomVMAddVerb", (caddr_t) CustomVMAddVerb}, {"CustomVMAddMenu", (caddr_t) CustomVMAddMenu}, {"CustomVMDel", (caddr_t) CustomVMDel}, {"CustomVMSel", (caddr_t) CustomVMSel}, {"CustomVMSelConf", (caddr_t) CustomVMSelConf}, {"CustomVMUp", (caddr_t) CustomVMUp}, {"CustomVMDown", (caddr_t) CustomVMDown}, {"CustomUpdateSensitivity", (caddr_t) CustomUpdateSensitivityCallback}, {"CustomCreate", (caddr_t) CustomCreateCallback }, {"CustomApply", (caddr_t) CustomApply }, {"CustomReset", (caddr_t) CustomReset }, {"CustomOk", (caddr_t) CustomOk }, {"CustomCancel", (caddr_t) CustomCancel } }; MrmRegisterNames(reglist, XtNumber (reglist)); CustomHeaders = NullList; MidasDeclareVerb("CUSTOM CREATE upname Widget" ,CustomCreate); MidasDeclareVerb("CUSTOM POPUP upname" ,CustomPopup); MidasDeclareVerb("CUSTOM CONNECT upname name Widget",CustomConnect); MidasDeclareVerb("CUSTOM WRITE upname {name}" ,CustomWriteUser); MidasDeclareVerb("CUSTOM READ USER upname {name}" ,CustomReadUser); MidasDeclareVerb("CUSTOM READ SYSTEM upname {name}" ,CustomReadSystem); } �������������midaswww-2.1/dxm.c����������������������������������������������������������������������������������100666 � 21345 � 173 � 554 5554674761 12347� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <Mrm/MrmAppl.h> /* Motif Toolkit and MRM */ #include <X11/CompositeP.h> Cardinal DXmNumChildren(w) Widget w; { CompositePart *p; p = &(((CompositeRec *)w)->composite); return p->num_children; } Widget *DXmChildren(w) Widget w; { CompositePart *p; p = &(((CompositeRec *)w)->composite); return p->children; } ����������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midas.c��������������������������������������������������������������������������������100666 � 21345 � 173 � 272053 5554674761 12741� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdio.h> /* For printf and so on. */ #include <setjmp.h> /* For setjmp and so on. */ #include <stdlib.h> /* for system() etc. */ #include <string.h> #include <Mrm/MrmAppl.h> /* Motif Toolkit and MRM */ #include <X11/CoreP.h> #include <X11/Xatom.h> #include <X11/cursorfont.h> #include <Xm/List.h> #include <Xm/PushB.h> #include <Xm/DialogS.h> #include <Xm/Command.h> #include <Xm/BulletinB.h> #include <Xm/MessageB.h> #include "SGMLHyper.h" #include "SGMLCompositeText.h" #include "midaslist.h" #include "midasoperand.h" #include "midaswidget.h" #include "midasshell.h" #include "Tree.h" typedef Widget (*MidasWidgetScanProc)(); #ifdef VMS #define FAILURE 0 #define SUCCESS 1 #else #define SUCCESS 0 #define FAILURE 1 #endif #if !defined(__STDC__) && !defined(_NO_PROTO) #define _NO_PROTO #endif #if defined(__STDC__) && defined(_NO_PROTO) #undef _NO_PROTO #endif #ifdef __STDC__ # ifndef MISSING_STDARG_H # include <stdarg.h> # endif # define Va_start(a,b) va_start(a,b) #else # include <varargs.h> # define Va_start(a,b) va_start(a) #endif #ifndef VMS #include <pwd.h> #endif #ifdef EDITRES extern void _XEditResCheckMessages(); #endif MidasOperand MidasGetIngot(); MidasOperand MidasGetCreateCallback(); void MidasLoadImage(); void MidasDispatchCommandCallback(); MidasOperand MidasEvaluateExpression(); #ifndef VMS WidgetList DXmChildren(); int DXmNumChildren(); #endif /* * Global data */ Display *display; /* Display variable */ XtAppContext app_context; /* application context */ static Widget WidgetTree = NULL; static Widget MidasMain; /* Root widget ID of main */ /* MRM fetch */ #define HASHTABLESIZE 137 static MidasWidget *HashTable[HASHTABLESIZE]; struct QueuedCommand { Widget Widget; char *Command; struct QueuedCommand *Next; }; typedef struct QueuedCommand QueuedCommand; static struct { QueuedCommand *Head; QueuedCommand *Tail; } CommandQueue; struct MidasFile { MrmHierarchy Hierarchy; Widget DefaultParent; Pixel foreground; Pixel background; }; typedef struct MidasFile MidasFile; struct ConvertPair { char *Name; char Value; }; typedef struct ConvertPair ConvertPair; static ConvertPair ConvertBoolean[] = {{"true",1}, {"false",0}, {0,0}}; static XtConvertArgRec ConvertBooleanArg[] = {{XtAddress,(XtPointer) ConvertBoolean,sizeof(XtPointer)}}; static ConvertPair ConvertPacking[] = {{"XmPACK_TIGHT" ,1}, {"XmPACK_COLUMN",2}, {"XmPACK_NONE" ,3}, {0,0}}; static XtConvertArgRec ConvertPackingArg[] = {{XtAddress,(XtPointer) ConvertPacking,sizeof(XtPointer)}}; static XtConvertArgRec ConvertWidgetArg[] = {{XtWidgetBaseOffset,0,sizeof(Widget)}}; static List *MidasWidgetList; static List *MidasFileList; static List *MidasApplicationList; static List *MidasShellList; static XtTranslations MidasTranslations; Widget ActiveWidget; XmAnyCallbackStruct *ActiveCallback; Boolean IfState; static char ProblemStrings[2000]; static char *ProblemPtr = ProblemStrings; /* we need some protection here against exceeding the buffer size */ jmp_buf JmpEnv[100]; int NumJump = 0; static Widget MidasFindName(); void *MidasConvertExpression(); static XtErrorMsgHandler OldHandler; void MidasDummyHandler(){} void MidasDefaultWarningHandler(msg) char *msg; { fprintf(stderr,"%s \n",msg); } /* void MidasSuppressXtWarningMessages() { OldHandler = XtAppSetWarningMsgHandler(app_context,MidasDummyHandler); } void MidasReenableXtWarningMessages() { XtAppSetWarningMsgHandler(app_context,OldHandler); } */ void MidasSuppressXtWarningMessages() { XtAppSetWarningHandler(app_context,(XtErrorHandler) MidasDummyHandler); } void MidasReenableXtWarningMessages() { XtAppSetWarningHandler(app_context,MidasDefaultWarningHandler); } static char *MidasClassName(w) Widget w; { CoreClassPart *Class = (CoreClassPart *) XtClass(w); return Class->class_name; } Widget MidasGetActiveWidget() { return ActiveWidget; } XmAnyCallbackStruct *MidasGetActiveCallback() { return ActiveCallback; } XmString MidasCharToString(C) /*---Convert a char * to an XmString */ char *C; { return XmStringCreateSimple(C); } #ifndef _NO_PROTO void MidasError(char *fmt,...) #else /* VARARGS2*/ void MidasError(fmt,va_alist) char *fmt; va_dcl #endif { va_list args; Va_start(args, fmt); vsprintf(ProblemPtr, fmt, args); printf("Error: %s\n",ProblemPtr); ProblemPtr += strlen(ProblemPtr); *ProblemPtr++ = '\n'; va_end(args); if (NumJump > 0) longjmp(JmpEnv[--NumJump],1); *--ProblemPtr = '\0'; { Widget w; XmString string = XmStringCreateLtoR(ProblemStrings, XmSTRING_DEFAULT_CHARSET); int n = 0; Arg args[10]; XtSetArg(args[n],XmNmessageString, string); n++; w = MidasFindName("MidasErrorBox"); if (w != 0) { XtSetValues(w,args,n); XmStringFree(string); XtManageChild(w); } } ProblemPtr = ProblemStrings; }; char *MidasStringToChar(string) /*----Convert an XmString to a char */ XmString string; { XmStringContext context; char *result; XmStringCharSet charset; XmStringDirection direction; Boolean separator; XmStringInitContext(&context,string); XmStringGetNextSegment(context,&result,&charset,&direction,&separator); XmStringFreeContext(context); return result; }; void MidasScanChildren(w,Rtn,Closure1,Closure2) Widget w; void (*Rtn)(); XtPointer Closure1; XtPointer Closure2; { int n; Widget *list; if (XtIsSubclass(w,compositeWidgetClass)) { list = DXmChildren(w); n = DXmNumChildren(w); for (; n > 0; n-- , list++) Rtn(*list,Closure1,Closure2); } if (SGMLIsCompositeText(w)) { Arg arglist[10]; int nn = 0; XtSetArg(arglist[nn],XtNchildren,&list); nn++; XtSetArg(arglist[nn],XtNnumChildren,&n); nn++; XtGetValues(w,arglist,nn); for (; n > 0; n-- , list++) Rtn(*list,Closure1,Closure2); } if (XtIsWidget(w) && w->core.screen != 0) { list = w->core.popup_list; n = w->core.num_popups; if (list != NULL) for (; n > 0; n-- , list++) Rtn(*list,Closure1,Closure2); } } void MidasScanAncestors(w,Rtn,Closure1) Widget w; void (*Rtn)(); XtPointer Closure1; { int n; Widget *list; Rtn(w,Closure1); MidasScanChildren(w,MidasScanAncestors,(XtPointer) Rtn,Closure1); } void MidasCloseUidFile(w,mfile) Widget w; MidasFile *mfile; { ListItem *item; MrmCloseHierarchy(mfile->Hierarchy); for (item = MidasFileList->First; item != NULL; item = item->Next) { if (mfile == (MidasFile *) item->Pointer) { MidasRemoveItemFromList(MidasFileList,item); return; } } } static MrmHierarchy MidasOpenUidFile(name,parent) char *name; Widget parent; { MrmHierarchy hierarchy; MidasFile *mfile; ListItem *item; Cardinal rc; caddr_t version; MrmCode type; MidasSuppressXtWarningMessages(); if (MrmOpenHierarchy(1, &name, NULL, &hierarchy)!= MrmSUCCESS) { #ifndef VMS char *newname = name; MidasReenableXtWarningMessages(); if (MidasMakeUid(&newname)) { rc = MrmOpenHierarchy(1, &newname, NULL, &hierarchy); unlink(newname); XtFree(newname); if (rc != MrmSUCCESS) { fprintf(stderr,"Fatal error opening self-contained uid file %s\n",name); exit(FAILURE); } } else #endif { #ifdef VMS fprintf(stderr,"Unable to open uid file %s\n",name); #endif exit(FAILURE); } } rc = MrmFetchLiteral(hierarchy,"MidasVersion",display,&version,&type); if (rc != MrmSUCCESS || strcmp((char *)version,VERSION)) { fprintf(stderr,"Version mismatch for uidfile %s\n",name); if (rc == MrmSUCCESS) fprintf(stderr,"Expected %s, found %s\n",VERSION,version); fprintf(stderr,"Please see installation instructions\n"); exit(FAILURE); } MidasReenableXtWarningMessages(); item = MidasAddItemToList(MidasFileList,name); mfile = XtNew(MidasFile); mfile->DefaultParent = parent; mfile->Hierarchy = hierarchy; mfile->foreground = XBlackPixelOfScreen(XtScreen(parent)); mfile->background = XWhitePixelOfScreen(XtScreen(parent)); item->Pointer = mfile; XtAddCallback(parent,XtNdestroyCallback,(XtCallbackProc) MidasCloseUidFile,(XtPointer) mfile); return hierarchy; } void MidasWidgetBeingDestroyed(w,mw,reason) Widget w; MidasWidget *mw; MidasWidget **reason; { /* remove from hash chain */ int hash = ((int) w) % HASHTABLESIZE; MidasWidget *loop = HashTable[hash]; if (loop == mw) HashTable[hash] = mw->HashChain; else { for ( ; loop->HashChain != mw; loop = loop->HashChain); loop->HashChain = mw->HashChain; } if (mw->Map != NULL) XtDestroyWidget(mw->Map); if (mw->IngotList != NULL) MidasDestroyIngots(mw); if (mw->NameEntry != NULL) MidasRemoveItemFromList(MidasWidgetList,mw->NameEntry); else XtFree((char *) mw); } MidasWidget *MidasWidgetToMW(w) Widget w; /* * This routine returns a pointer to the MidasWidget structure for any widget. */ { int hash = ((int) w) % HASHTABLESIZE; MidasWidget *mw = HashTable[hash]; for ( ; mw != NULL; mw = mw->HashChain) if (mw->Widget == w) return mw; mw = XtNew(MidasWidget); mw->Widget = w; mw->ShowChildren = False; mw->Map = NULL; mw->IngotList = NULL; mw->Parent = NULL; mw->NameEntry = NULL; mw->HashChain = HashTable[hash]; mw->Inited = FALSE; HashTable[hash] = mw; return mw; } static void MidasRegisterName(name,w) char *name; Widget w; { ListItem *item = MidasFindItemInList(MidasWidgetList,name); if (item == NULL || ((MidasWidget *) item->Pointer)->Widget != w) { MidasWidget *mw = MidasWidgetToMW(w); item = MidasAddItemToList(MidasWidgetList,name); item->Pointer = mw; mw->NameEntry = item; } } static void MidasAddChildTree(Child,mw) Widget Child; MidasWidget *mw; { Widget w; MidasWidget *newmw = MidasWidgetToMW(Child); XmString label; Arg arglist[3]; int n = 0; if (WidgetTree == NULL) return; label = MidasCharToString(XtName(Child)); if (mw != NULL) { XtSetArg(arglist[n],XtNtreeParent,mw->Map); n++; } XtSetArg(arglist[n],XmNuserData,Child); n++; XtSetArg(arglist[n],XmNlabelString,label); n++; w = XmCreatePushButton(WidgetTree,"TreeLeaf",arglist,n); XmStringFree(label); XtManageChild(w); newmw->Map = w; } static void MidasRemoveChildTree(Child) Widget Child; { MidasWidget *mw = MidasWidgetToMW(Child); if (mw->ShowChildren) MidasScanChildren(Child,MidasRemoveChildTree,NULL,NULL); if (mw->Map != NULL) { XtDestroyWidget(mw->Map); mw->Map = NULL; } mw->ShowChildren = FALSE; } static void MidasToggleChildrenTree(w) Widget w; { MidasWidget *mw = MidasWidgetToMW(w); if (WidgetTree == NULL) return; mw->ShowChildren = !mw->ShowChildren; if (mw->ShowChildren) MidasScanChildren(w,MidasAddChildTree,(XtPointer) mw,NULL); else MidasScanChildren(w,MidasRemoveChildTree,NULL,NULL); } void MidasSetupWidget(w) Widget w; { typedef struct _MR { char *Ingots; char *CreateCallback; } MidasResources; MidasResources result; MidasWidget *mw = MidasWidgetToMW(w); MidasWidget *parent = MidasWidgetToMW(XtParent(w)); #define Offset(field) XtOffsetOf(MidasResources,field) static XtResource resources[] = {{"midasIngots" ,"MidasIngots" ,XtRString ,sizeof(char *), Offset(Ingots) ,XtRImmediate ,NULL}, {"midasCreateCallback" ,"MidasCreateCallback" ,XtRString ,sizeof(char *), Offset(CreateCallback) ,XtRImmediate ,NULL}}; #undef Offset /* * Check if widget already initialized */ if (mw->Inited) return; mw->Inited = TRUE; /* * If the widgets parent has show children (in the widget tree) * then make it so */ if (parent->ShowChildren) MidasAddChildTree(w,parent); /* * Add the special midas translation to all Widget children */ if (XtIsWidget(w)) XtOverrideTranslations(w,MidasTranslations); XtAddCallback(w,XtNdestroyCallback,(XtCallbackProc) MidasWidgetBeingDestroyed,(XtPointer) mw); XtGetApplicationResources(w,(XtPointer)&result,resources,XtNumber(resources),NULL,0); if (result.Ingots != NULL) MidasSetupIngots(mw,result.Ingots); if (result.CreateCallback != NULL) { MidasSetIngotString(w,"midasCreateCallback",result.CreateCallback); MidasDispatchCommandCallback(w,result.CreateCallback,NULL); } } Widget MidasCreateWidget(Parent,Class,Name) Widget Parent; WidgetClass Class; char *Name; { Widget w = XtCreateManagedWidget(Name,Class,Parent,NULL,0); MidasRegisterName(Name,w); MidasSetupWidget(w); return w; } Widget MidasFetch(name,parent) char *name; Widget parent; { MrmType class; Widget actualParent, widget = 0; MidasFile *mfile; ListItem *i; Boolean Dialog = MidasGetQualifier("DIALOG"); static LookingForParent = FALSE; if (!LookingForParent) { LookingForParent = TRUE; MidasGetQualifier("PARENT",&parent); LookingForParent = FALSE; } for (i=MidasFileList->First; i != 0; i=i->Next) { mfile = i->Pointer; if (parent==0) actualParent = mfile->DefaultParent; else actualParent = parent; if (Dialog) { Arg args[10]; int n = 0; char *dialogName = strcat(strcpy(XtMalloc(strlen(name)+7),name),"Dialog"); Widget Dw = XmCreateDialogShell(actualParent,dialogName,NULL,0); XtSetArg(args[n],XmNx, 0); n++; XtSetArg(args[n],XmNy, 0); n++; if (MrmFetchWidgetOverride(mfile->Hierarchy,name,Dw,NULL, args,n,&widget,&class) ==MrmSUCCESS) { MidasRegisterName(name,widget); MidasScanAncestors(Dw,MidasSetupWidget,NULL); return widget; } XtDestroyWidget(Dw); } else { if (MrmFetchWidget(mfile->Hierarchy,name,actualParent,&widget,&class) == MrmSUCCESS) { /* * This might be a dialog box, in which case its parent is also created by * this call. */ Widget parent = XtParent(widget); MidasRegisterName(name,widget); if (XtIsShell(parent)) MidasScanAncestors(parent,MidasSetupWidget,NULL); else MidasScanAncestors(widget,MidasSetupWidget,NULL); return widget; } } } return 0; } Pixmap MidasFetchIcon(name,ww) char *name; Widget ww; { Arg arglist[1]; Pixel f,b; Pixmap PixMap; ListItem *i; MidasSuppressXtWarningMessages(); for (i=MidasFileList->Last; i != 0; i=i->Prev) { MidasFile *mfile = i->Pointer; Widget w = mfile->DefaultParent; Display *dpy = XtDisplay(w); Screen *screen = XtScreen(w); Cardinal depth; XtSetArg(arglist[0],XtNdepth,&depth); XtGetValues(w,arglist,1); if (depth == 1) { f = 1; b = 0; } else if (ww) { XtSetArg(arglist[0],XtNbackground,&b); XtGetValues(ww,arglist,1); f = mfile->foreground; } else { f = mfile->foreground; b = mfile->background; } if (MrmFetchIconLiteral(mfile->Hierarchy,name, screen, dpy, f, b, &PixMap) == MrmSUCCESS) { MidasReenableXtWarningMessages(); return PixMap; } } MidasReenableXtWarningMessages(); return 0; } static Widget MidasFindName(name) char *name; { ListItem *item = MidasFindItemInList(MidasWidgetList,name); if (item != 0) { MidasWidget *mw = item->Pointer; return mw->Widget; } else { return MidasFetch(name,0); } } void MidasFetchDispatchEvent() { XtAppProcessEvent(app_context,XtIMAll); } void MidasGetCallbacks(L,w) List *L; Widget w; { unsigned int numResource; XtResource *Resource, *R; WidgetClass Class = XtClass(w); MidasEmptyList(L); MidasAddItemToList(L,"midasCreateCallback"); XtGetResourceList(Class,&Resource,&numResource); for (R=Resource; numResource-- > 0; R += 1) if (strcmp(R->resource_type,"Callback") == 0) { ListItem *item = MidasAddItemToList(L,R->resource_name); } } void MidasGetResources(L,w) List *L; Widget w; { unsigned int numResource; XtResource *Resource, *R; WidgetClass Class = XtClass(w); MidasEmptyList(L); XtGetResourceList(Class,&Resource,&numResource); for (R=Resource; numResource-- > 0; R += 1) if (strcmp(R->resource_type,"Callback") != 0) { ListItem *item = MidasAddItemToList(L,R->resource_name); } } MidasOperand MidasModifier(modifierName) char *modifierName; { Boolean result = FALSE; MidasOperand Temp; XEvent *event = ActiveCallback ? ActiveCallback->event : NULL; if (event) { if (event->type == ButtonPress || event->type == ButtonRelease) { XButtonEvent *be = (XButtonEvent *) event; if (!strcmp(modifierName,"shift") && be->state & ShiftMask) result = TRUE; if (!strcmp(modifierName,"lock") && be->state & LockMask) result = TRUE; if (!strcmp(modifierName,"control") && be->state & ControlMask) result = TRUE; } if (event->type == KeyPress || event->type == KeyRelease) { XKeyEvent *ke = (XKeyEvent *) event; if (!strcmp(modifierName,"shift") && ke->state & ShiftMask) result = TRUE; if (!strcmp(modifierName,"lock") && ke->state & LockMask) result = TRUE; if (!strcmp(modifierName,"control") && ke->state & ControlMask) result = TRUE; } } Temp.Value.I = result; Temp.Dynamic = FALSE; Temp.Type = MBoolean; return Temp; } MidasOperand MidasGetAppResource(w,ResourceName) Widget w; char *ResourceName; { static XtResource resources = {"userData","UserData",XtRString,sizeof(char *),0,XtRString,""}; char *result=""; MidasOperand Temp; XtResource *rt = XtNew(XtResource); *rt = resources; rt->resource_name = XtNewString(ResourceName); XtGetApplicationResources(w,(XtPointer) &result,rt,1,NULL,0); Temp.Value.P = (XtPointer)result; Temp.Dynamic = FALSE; Temp.Type = MString; return Temp; } MidasOperand MidasGetValue(w,ResourceName) Widget w; char *ResourceName; { MidasOperand Temp; char result[200], *ret; unsigned int numResource; int notfound = 1; XtResource *Resource, *R; WidgetClass Class = XtClass(w); /* Special handling for midasCreateCallback resource */ if (strcmp(ResourceName,"midasCreateCallback") == 0) return MidasGetCreateCallback(w); XtGetResourceList(Class,&Resource,&numResource); for (R=Resource; numResource-- > 0; R += 1) { if (strcmp(R->resource_name,ResourceName) == 0) { notfound = 0; if (strcmp(R->resource_type,XtRString) == 0) { char *ptr; int n=0; Arg args[10]; XtSetArg(args[n],ResourceName,&ptr); n++; XtGetValues(w,args,n); ret = XtNewString(ptr); } else if (strcmp(R->resource_type,"XmString") == 0) { String ptr; int n=0; Arg args[10]; XtSetArg(args[n],ResourceName, &ptr); n++; XtGetValues(w,args,n); if (ptr == 0) ret = XtNewString(""); else ret = MidasStringToChar(ptr); } else { XrmValue from,to; if (strcmp(R->resource_type,"Callback") == 0) { int n = 0; Arg args[10]; XtSetArg(args[n],ResourceName, &from.addr); n++; XtGetValues(w,args,n); } else from.addr = ((char *) w) + R->resource_offset; from.size = R->resource_size; to.size = 200; to.addr = result; XtConvertAndStore(w,R->resource_type,&from,XtRString,&to); if (to.size > 200) { ret = XtMalloc(to.size); to.addr = ret; XtConvertAndStore(w,R->resource_type,&from,XtRString,&to); } else ret = XtNewString(result); } } } XtFree((char *)Resource); if (notfound) MidasError("Resource %s not found",ResourceName); Temp.Value.P = ret; Temp.Dynamic = TRUE; Temp.Type = MString; return Temp; } MidasOperand MidasGetValueRaw(w,ResourceName) Widget w; char *ResourceName; { MidasOperand Temp; unsigned int numResource; int notfound = 1; XtResource *Resource, *R; WidgetClass Class = XtClass(w); /* Special handling for midasCreateCallback resource */ if (strcmp(ResourceName,"midasCreateCallback") == 0) return MidasGetCreateCallback(w); XtGetResourceList(Class,&Resource,&numResource); for (R=Resource; numResource-- > 0; R += 1) { if (strcmp(R->resource_name,ResourceName) == 0) { char *addr = (char *) w; addr += R->resource_offset; if (R->resource_size <= sizeof(Temp.Value.P)) { Temp.Value.P = NULL; memcpy(&Temp.Value.P,addr,R->resource_size); } else Temp.Value.P = addr; Temp.Type = R->resource_type; Temp.Dynamic = False; notfound = 0; } } XtFree((char *)Resource); if (notfound) MidasError("Resource %s not found",ResourceName); return Temp; } MidasShell *MidasGetShell(w) Widget w; { MidasShell *ms; ListItem *i; for (; ; w = XtParent(w)) for (i = MidasShellList->First; i != 0; i = i->Next) { ms = i->Pointer; if (ms->Widget == w) return ms; } } void MidasDispatchAndTrapErrors(command) char *command; { if (setjmp(JmpEnv[NumJump++]) == 0) { MidasDispatchCommand(command); NumJump--; } else MidasError("Error interpreting command: %s\n from widget %s (class %s)" ,command,XtName(ActiveWidget),MidasClassName(ActiveWidget)); } static void midas_command_proc(w,tag,reason) Widget w; char *tag; XmCommandCallbackStruct *reason; { char *command = MidasStringToChar(reason->value); Widget Stack = ActiveWidget; Boolean StackIf = IfState; ActiveWidget = w; IfState = FALSE; MidasDispatchAndTrapErrors(command); ActiveWidget = Stack; IfState = StackIf; XtFree(command); }; void MidasEchoCommand(command) char *command; { Widget w = MidasFindName("MidasCommand"); if (w && XtIsRealized(w) && XtIsManaged(w)) { XmString s = MidasCharToString(command); if (w != 0) w = XmCommandGetChild(w,XmDIALOG_HISTORY_LIST); if (w != 0) { XmListAddItem(w,s,0); XmListSetBottomPos(w,0); } XmStringFree(s); } } void MidasDispatchCommandCallback(w,tag,reason) Widget w; char *tag; XmAnyCallbackStruct *reason; { char buffer[2000]; char *p = tag , *q = buffer; Boolean quotes = FALSE; Widget Stack = ActiveWidget; XmAnyCallbackStruct *CStack = ActiveCallback; ActiveWidget = w; if (reason) ActiveCallback = reason; for (;; p++) { if (!quotes && (*p == '\n' || *p == ';')) { *q = '\0'; if (*buffer != '\0') { MidasEchoCommand(buffer); MidasDispatchAndTrapErrors(buffer); } q = buffer; } else if (*p == '\0') { *q = '\0'; if (*buffer != '\0') { MidasEchoCommand(buffer); MidasDispatchAndTrapErrors(buffer); } break; } else if (*p == '%') MidasForceEvaluateExpression(&p,&q); else { *q++ = *p; if (*p == '"') quotes = !quotes; } } ActiveWidget = Stack; ActiveCallback = CStack; }; void MidasSendActionProc(w,event,params,num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { MidasDispatchCommandCallback(w,*params,NULL); } void MidasSpecialActionProc(w,event,params,num_params) Widget w; XButtonEvent *event; String *params; Cardinal *num_params; { /* * Check to see if the event really came from some child gadget * or insenstive widget */ Widget OldWidget = 0; for ( ;w != OldWidget && XtIsComposite(w); ) { Widget *list = DXmChildren(w); int n = DXmNumChildren(w); OldWidget = w; for (; n>0; n--, list++) { if (!XtIsWidget(*list) || !XtIsSensitive(*list)) { Dimension width, height; Position x,y; Arg arglist[4]; XtSetArg(arglist[0],XmNx,&x); XtSetArg(arglist[1],XmNy,&y); XtSetArg(arglist[2],XmNwidth ,&width); XtSetArg(arglist[3],XmNheight,&height); XtGetValues(*list,arglist,4); if (event->x >= x && event->x < x+width && event->y >= y && event->y < y+height) { w = *list; break; } } } } MidasDispatchCommandCallback(w,*params,NULL); } void MidasQueueCommand(w,Command) Widget w; char *Command; { QueuedCommand *QC = XtNew(QueuedCommand); QC->Widget = w; QC->Command = XtNewString(Command); QC->Next = 0; if (CommandQueue.Head == 0) CommandQueue.Head = QC; else CommandQueue.Tail->Next = QC; CommandQueue.Tail = QC; } void MidasDispatchQueuedCommands() { /* * Care is needed, reentrant routine * (if queued command is Dispatch Queued Comands). */ QueuedCommand *QC; for (QC = CommandQueue.Head; QC != 0; QC = CommandQueue.Head) { CommandQueue.Head = QC->Next; if (!QC->Next) CommandQueue.Tail = NULL; MidasDispatchCommandCallback(QC->Widget, QC->Command, 0); XtFree(QC->Command); XtFree((char *)QC); } } void MidasIgnore(Command) char *Command; { MidasDispatchCommandCallback(ActiveWidget,Command,NULL); } static void MidasIf(Doit,Command) Boolean Doit; char *Command; { if (Doit) MidasDispatchCommandCallback(ActiveWidget,Command,ActiveCallback); IfState = Doit; } static void MidasElseIf(Doit,Command) Boolean Doit; char *Command; { if (!IfState) MidasIf(Doit,Command); } static void MidasElse(Command) char *Command; { if (!IfState) MidasDispatchCommandCallback(ActiveWidget,Command,ActiveCallback); } void MidasBeep(pcent,w) int pcent; Widget w; { if (w == NULL) w = ActiveWidget; XBell(XtDisplay(w),pcent); } /* * This procedure will ensure that, if a dialog window is being mapped, * its contents become visible before returning. It is intended to be * used just before a bout of computing that doesn't service the display. * You should still call XmUpdateDisplay() at intervals during this * computing if possible. * * The monitoring of window states is necessary because attempts to map * the dialog are redirected to the window manager (if there is one) and * this introduces a significant delay before the window is actually mapped * and exposed. This code works under mwm, twm, uwm, and no-wm. It * doesn't work (but doesn't hang) with olwm if the mainwindow is iconified. * * The argument to ForceDialog is any widget in the dialog (often it * will be the BulletinBoard child of a DialogShell). */ void MidasForceDialog(w) Widget w; { Widget diashell, topshell; Window diawindow, topwindow; Display *dpy; XWindowAttributes xwa; XEvent event; XtAppContext cxt; /* Locate the shell we are interested in. In a particular instance, you * may know these shells already. */ for (diashell = w; !XtIsShell(diashell); diashell = XtParent(diashell)) ; /* Locate its primary window's shell (which may be the same) */ for (topshell = diashell; !XtIsTopLevelShell(topshell); topshell = XtParent(topshell)) ; if (XtIsRealized(diashell) && XtIsRealized(topshell)) { dpy = XtDisplay(topshell); diawindow = XtWindow(diashell); topwindow = XtWindow(topshell); cxt = XtWidgetToApplicationContext(diashell); /* Wait for the dialog to be mapped. It's guaranteed to become so unless... */ while (XGetWindowAttributes(dpy, diawindow, &xwa), xwa.map_state != IsViewable) { /* ...if the primary is (or becomes) unviewable or unmapped, it's probably iconified, and nothing will happen. */ if (XGetWindowAttributes(dpy, topwindow, &xwa), xwa.map_state != IsViewable) break; /* At this stage, we are guaranteed there will be an event of some kind. Beware; we are presumably in a callback, so this can recurse. */ XtAppNextEvent(cxt, &event); XtDispatchEvent(&event); } } /* The next XSync() will get an expose event if the dialog was unmapped. */ XmUpdateDisplay(topshell); } void MidasSetCursor(w,c) Widget w; int c; { Cursor C; if (c!=0) C = XCreateFontCursor(XtDisplay(w),c); else C = None; XDefineCursor(XtDisplay(w),XtWindow(w),C); XFlush(XtDisplay(w)); } void MidasSetSensitive(w,Sensitive) Widget w; Boolean Sensitive; { XtSetSensitive(w,Sensitive); } char *MidasGetWidgetName(w) Widget w; { char *parent, *thisone, *new; int pl, tl; MidasShell *ms = MidasGetShell(w); thisone = XtName(w); if (*thisone == '\0' || strchr(thisone,'-') != 0) MidasError("Can not STORE RESOURCE for unnamed widget"); parent = XtName(ms->Widget); pl = strlen(parent); tl = strlen(thisone); new = XtMalloc(pl+tl+2); strcpy(new,parent); if (ms->Widget != w) { strcat(new,"*"); strcat(new,thisone); } return new; } void MidasSetValue(w,ResourceName,Op) Widget w; char *ResourceName; MidasOperand *Op; { char *result; unsigned int numResource; int found = FALSE; XtResource *Resource, *R; WidgetClass Class = XtClass(w); if (strcmp(ResourceName,"midasCreateCallback") == 0) { MidasSetIngotP(w,ResourceName,Op); return; } XtGetResourceList(Class,&Resource,&numResource); for (R=Resource; numResource-- > 0; R += 1) { if (strcmp(R->resource_name,ResourceName) == 0) { Arg arglist[1]; found = TRUE; MidasConvertOperand(Op,R->resource_type); XtSetArg(arglist[0],ResourceName,Op->Value.P); XtSetValues(w,arglist,1); break; } } XtFree((char *) Resource); if (!found) MidasError("Resource %s not found",ResourceName); } static void MidasStoreAppResource(w,resource,value) Widget w; char *resource; char *value; { char *name = MidasGetWidgetName(w); char *new = XtMalloc(strlen(name)+strlen(resource)+2); MidasShell *ms = MidasGetShell(w); MidasApplication *ma = ms->Application; strcpy(new,name); strcat(new,"."); strcat(new,resource); XrmPutStringResource(&ma->Database,new,value); if (ma->Changes++ == 0 && ma->AutoStore) MidasQueueCommand(w,"Midas Save Stored Resources ."); XtFree(new); XtFree(name); } static void MidasStoreNamedResource(w,name,resource) Widget w; char *name; char *resource; { MidasShell *ms = MidasGetShell(w); MidasApplication *ma = ms->Application; XrmPutStringResource(&ma->Database,name,resource); if (ma->Changes++ == 0 && ma->AutoStore) MidasQueueCommand(w,"Midas Save Stored Resources ."); } static void MidasUpdateNamedResource(w,name,resource) Widget w; char *name; char *resource; { XrmDatabase db = XtDatabase(XtDisplay(w)); XrmPutStringResource(&db,name,resource); } static void MidasStoreResource(w,resource) Widget w; char *resource; { MidasOperand Temp; Temp = MidasGetValue(w,resource); if (strcmp(Temp.Type,MString)) MidasConvertOperand(Temp,MString); MidasStoreAppResource(w,resource,Temp.Value.P); if (Temp.Dynamic) XtFree(Temp.Value.P); } static void MidasSaveStoredResources(w) Widget w; { MidasShell *ms = MidasGetShell(w); XrmPutFileDatabase(ms->Application->Database, ms->Application->Filename); ms->Application->Changes = 0; } static void MidasSaveGeometry(w) Widget w; { MidasStoreResource(w,XmNx); MidasStoreResource(w,XmNy); MidasStoreResource(w,XmNwidth); MidasStoreResource(w,XmNheight); MidasSaveStoredResources(w); } static MidasOperand MidasInt(f) float f; { MidasOperand Temp; Temp.Dynamic = FALSE; Temp.Type = MInt; Temp.Value.I = (int) f; return Temp; } static void MidasSetFlag(w,flag) Widget w; int *flag; { *flag = 1; } static MidasOperand MidasHasChildren(w) Widget w; { MidasOperand Temp; Temp.Dynamic = FALSE; Temp.Type = MBoolean; Temp.Value.I = FALSE; MidasScanChildren(w,MidasSetFlag,(XtPointer) &Temp.Value.I,NULL); return Temp; } static MidasOperand MidasChildrenInTree(w) Widget w; { MidasOperand Temp; MidasWidget *mw = MidasWidgetToMW(w); Temp.Dynamic = FALSE; Temp.Type = MBoolean; Temp.Value.I = mw->ShowChildren; return Temp; } static MidasOperand MidasStrnspn(s,t) char *s; char *t; /* Exceedingly temporary */ { MidasOperand Temp; char *p = s; for (;*p != '\0' && *p == ' '; p++); for (;*p != '\0' && *p != ' '; p++); *p = '\0'; Temp.Dynamic = TRUE; Temp.Type = MString; Temp.Value.P = (XtPointer) XtNewString(s); return Temp; } static MidasOperand MidasGetWidgetId(w) Widget w; { MidasOperand Temp; Temp.Dynamic = FALSE; Temp.Type = MInt; Temp.Value.I = (int) w; return Temp; } static MidasOperand MidasIsManaged(w) Widget w; { MidasOperand Temp; int result = XtIsManaged(w); Temp.Dynamic = FALSE; Temp.Type = MBoolean; Temp.Value.I = (result != 0); return Temp; } static MidasOperand MidasIsRealized(w) Widget w; { MidasOperand Temp; int result = XtIsRealized(w); Temp.Dynamic = FALSE; Temp.Type = MBoolean; Temp.Value.I = (result != 0); return Temp; } static MidasOperand MidasGetOperandType(Op) MidasOperand *Op; { MidasOperand Temp; Temp.Dynamic = FALSE; Temp.Type = MString; Temp.Value.P = Op->Type; return Temp; } static MidasOperand MidasWidgetFunction(w) Widget w; { MidasOperand Temp; Temp.Dynamic = FALSE; Temp.Type = MWidget; Temp.Value.P = (XtPointer) w; return Temp; } static MidasOperand MidasFetchFunction(name,parent) char *name; Widget parent; { MidasOperand Temp; Temp.Dynamic = FALSE; Temp.Type = MWidget; Temp.Value.P = (XtPointer) MidasFetch(name,parent); return Temp; } static MidasOperand MidasParent(w) Widget w; { MidasOperand Temp; Temp.Dynamic = FALSE; Temp.Type = MWidget; Temp.Value.P = (XtPointer) XtParent(w); return Temp; } static MidasOperand MidasShellFunction(w) Widget w; { MidasOperand Temp; MidasShell *ms = MidasGetShell(w); Temp.Dynamic = FALSE; Temp.Type = MWidget; Temp.Value.P = (XtPointer) ms->Widget; return Temp; } static MidasOperand MidasWidgetName(w) Widget w; { MidasOperand Temp; char *name = XtName(w); if (*name == '\0') { name = XtMalloc(24); sprintf(name,"No Name (%d)",w); Temp.Dynamic = TRUE; } else Temp.Dynamic = FALSE; Temp.Value.P = name; Temp.Type = MString; return Temp; } static void MidasGetSelectionCallback(w,closure,selection,type,value,length,format) Widget w; XtPointer closure; Atom *selection; Atom *type; XtPointer value; unsigned long *length; int *format; { MidasOperand *Temp = (MidasOperand *) closure; int size = *length * *format; if (*type == XA_STRING) { Temp->Value.P = (XtPointer) memcpy(XtMalloc(size+1),value,size); ((char *)Temp->Value.P)[size] = '\0'; Temp->Type = MString; Temp->Dynamic = TRUE; } else if (*type == XA_INTEGER) { Temp->Value.I = *((int *) value); Temp->Type = MInt; Temp->Dynamic = FALSE; } else { Temp->Value.P = ""; Temp->Type = MString; Temp->Dynamic = FALSE; } XtFree(value); } static MidasOperand MidasGetSelection(w,selection,target) Widget w; Atom selection; Atom target; { MidasOperand Temp; Temp.Value.P = NULL; /* w must be a real,realized widget */ for (; w && (!XtIsWidget(w) || !XtIsRealized(w)); w = XtParent(w)); if (!w) MidasError("MidasGetSelection requires realized widget"); XtGetSelectionValue(w,selection,target,(XtSelectionCallbackProc)MidasGetSelectionCallback,(XtPointer)&Temp, XtLastTimestampProcessed(XtDisplay(w))); for (; !Temp.Value.P; ) MidasFetchDispatchEvent(); return Temp; } static MidasOperand MidasGetProperty(w,property) Widget w; Atom property; { Display *dpy = XtDisplay(w); Window wind = XtWindow(w); Atom type; int format; unsigned long nitems; unsigned long bytes; unsigned char *result; Boolean rc; MidasOperand Temp; rc = XGetWindowProperty(dpy,wind,property,0,1024,FALSE,AnyPropertyType, &type,&format,&nitems,&bytes,&result); if (rc != Success) MidasError("Could not get property %s from window %x",XmGetAtomName(dpy,property),wind); if (type == XA_STRING) { Temp.Value.P = (XtPointer) result; Temp.Type = MString; Temp.Dynamic = TRUE; } else { XFree(result); MidasError("Property %s on window %x has unknown type: %s", XmGetAtomName(dpy,property),wind,XmGetAtomName(dpy,type)); } return Temp; } static MidasOperand MidasWidgetClass(w) Widget w; { MidasOperand Temp; Temp.Dynamic = FALSE; Temp.Type = MString; Temp.Value.P = MidasClassName(w); return Temp; } static MidasOperand MidasGetCommand() { MidasOperand Temp; XmCommandCallbackStruct *cb = (XmCommandCallbackStruct *) ActiveCallback; if (ActiveCallback->reason != XmCR_COMMAND_ENTERED) MidasError("GETCOMMAND requires callback reason XmCR_COMMAND_ENTERED"); Temp.Dynamic = TRUE; Temp.Type = MString; Temp.Value.P = MidasStringToChar(cb->value); return Temp; } static MidasOperand MidasGetConfirmExit(w) Widget w; { MidasShell *ms = MidasGetShell(w); MidasApplication *ma = ms->Application; MidasOperand Temp; Temp.Dynamic = FALSE; Temp.Type = MBoolean; Temp.Value.I = ma->ConfirmExit; return Temp; } static MidasOperand MidasGetClickCount() { MidasOperand Temp; XmPushButtonCallbackStruct *cb = (XmPushButtonCallbackStruct *) ActiveCallback; if (ActiveCallback->reason != XmCR_ACTIVATE) MidasError("GETCLICKCOUNT requires callback reason XmCR_ACTIVATE"); Temp.Dynamic = FALSE; Temp.Type = MInt; Temp.Value.I = cb->click_count; return Temp; } static MidasOperand MidasHyperGetText() { MidasOperand Temp; SGMLHyperCallbackStruct *cb = (SGMLHyperCallbackStruct *) ActiveCallback; /* if (ActiveCallback->reason != SGMLHYPER_REASON) MidasError("HYPERGETTEXT requires callback reason SGMLHYPER_REASON"); */ Temp.Dynamic = TRUE; Temp.Type = MString; Temp.Value.P = XtNewString(cb->text); return Temp; } static MidasOperand MidasHyperGetHidden() { MidasOperand Temp; SGMLHyperCallbackStruct *cb = (SGMLHyperCallbackStruct *) ActiveCallback; /* if (ActiveCallback->reason != SGMLHYPER_REASON) MidasError("HYPERGETTEXT requires callback reason SGMLHYPER_REASON"); */ Temp.Dynamic = TRUE; Temp.Type = MString; Temp.Value.P = XtNewString(cb->hidden); return Temp; } static MidasOperand MidasHyperGrep(w,string) Widget w; char *string; { MidasOperand Temp; Boolean result = SGMLHyperGrep(w,string,TRUE,FALSE,TRUE); Temp.Value.I = result; Temp.Type = MBoolean; Temp.Dynamic = FALSE; return Temp; } #ifndef VMS static String MidasGetRootDirName(buf) String buf; { #ifndef X_NOT_POSIX uid_t uid; #else int uid; extern int getuid(); #ifndef SYSV386 extern struct passwd *getpwuid(), *getpwnam(); #endif #endif struct passwd *pw; static char *ptr = NULL; if (ptr == NULL) { if (!(ptr = getenv("HOME"))) { if (ptr = getenv("USER")) pw = getpwnam(ptr); else { uid = getuid(); pw = getpwuid(uid); } if (pw) ptr = pw->pw_dir; else { ptr = NULL; *buf = '\0'; } } } if (ptr) (void) strcpy(buf, ptr); buf += strlen(buf); *buf = '/'; buf++; *buf = '\0'; return buf; } #endif static char* MidasGetAppUserDefaults(dpy,name) Display *dpy; char *name; { char *filename; #ifdef VMS static char file[] = "DECW$USER_DEFAULTS:", ext[] = ".DAT"; int totlen; totlen = strlen(file) + strlen(ext) + strlen(name) + 1; filename = XtMalloc(totlen); strcpy(filename,file); strcat(filename,name); strcat(filename,ext); #else char* path; Boolean Alloc=False; char homedir[256]; MidasGetRootDirName(homedir); if (!(path = getenv("XUSERFILESEARCHPATH"))) { char *old_path; if (!(old_path = getenv("XAPPLRESDIR"))) { char *path_default = "%s/%%L/%%N%%C:%s/%%l/%%N%%C:%s/%%N%%C:%s/%%L/%%N:%s/%%l/%%N:%s/%%N"; path = XtMalloc(6*strlen(homedir) + strlen(path_default)); sprintf( path, path_default, homedir, homedir, homedir, homedir, homedir, homedir ); } else { char *path_default = "%s/%%L/%%N%%C:%s/%%l/%%N%%C:%s/%%N%%C:%s/%%N%%C:%s/%%L/%%N:%s/%%l/%%N:%s/%%N:%s/%%N"; path = XtMalloc( 6*strlen(old_path) + 2*strlen(homedir) + strlen(path_default)); sprintf(path, path_default, old_path, old_path, old_path, homedir, old_path, old_path, old_path, homedir ); } Alloc=True; } filename = XtResolvePathname(dpy,NULL,name,NULL,path,NULL,0,NULL); if (!filename) { filename = XtMalloc(strlen(homedir)+strlen(name)+1); strcpy(filename,homedir); strcat(filename,name); } if (Alloc) XtFree(path); #endif return filename; } Widget MidasCreateDialog(name) char *name; { Widget parent, dialog; if (MidasGetQualifier("PARENT",&parent) == 0) MidasError("Parent required"); dialog = XmCreateDialogShell(parent,name,NULL,0); MidasRegisterName(name,dialog); return dialog; } void MidasDestroyApplication(ma) MidasApplication *ma; { /* * /* BUG - What if the database hasn't been written out? */ if (ma->Help) XtDestroyWidget(ma->Help); XtCloseDisplay(ma->Display); XtFree(ma->AppName); XtFree(ma->AppClass); MidasRemoveItemFromList(MidasApplicationList,ma->Item); } void MidasDestroyShell(w,ms) Widget w; MidasShell *ms; { MidasApplication *ma = ms->Application; MidasRemoveItemFromList(MidasShellList,ms->Item); ma->Shells--; if (ma->Shells == 0) MidasDestroyApplication(ma); } MidasApplication *MidasCreateApplication(name,argv,argc) char *name; String *argv; Cardinal *argc; { MidasApplication *ma = XtNew(MidasApplication); char *ShellName = XtNewString(name); char *ShellClass = XtNewString(name); char *new; ListItem *item; *ShellName = tolower(*ShellName); *ShellClass = toupper(*ShellClass); display = XtOpenDisplay(app_context,NULL,NULL,ShellClass, NULL, 0, argc, argv); if (display == 0) { MidasError("Could not open display"); exit(FAILURE); } new = MidasGetAppUserDefaults(display,ShellClass); item = MidasAddItemToList(MidasApplicationList,name); item->Pointer = ma; ma->Display = display; ma->Database = XrmGetFileDatabase(new); ma->Filename = new; ma->Changes = 0; ma->Item = item; ma->Help = NULL; ma->AppClass = ShellClass; ma->AppName = ShellName; ma->Shells = 0; ma->Argc = *argc; ma->Argv = argv; ma->ConfirmExit = TRUE; ma->AutoStore = TRUE; return ma; } MidasApplication *MidasGetApplication(name) char *name; { ListItem *item = MidasFindItemInList(MidasApplicationList,name); if (item) return item->Pointer; else return NULL; } Widget MidasCreateShell(name) char *name; { MidasApplication *ma = MidasGetApplication(name); MidasShell *ms = XtNew(MidasShell); ListItem *item; Widget w; char junk[12]; int i; w = XtAppCreateShell(ma->AppName,ma->AppClass, applicationShellWidgetClass, ma->Display, NULL, 0); item = MidasAddItemToList(MidasShellList,name); item->Pointer = ms; ma->Shells++; ms->Widget = w; ms->Application = ma; ms->Item = item; XtAddCallback(w,XtNdestroyCallback,(XtCallbackProc) MidasDestroyShell,(XtPointer)ms); MidasSetupWidget(w); MidasRegisterName(name,w); #ifdef EDITRES XtAddEventHandler(w, (EventMask)0, True, _XEditResCheckMessages, (XtPointer)NULL); #endif /* Shells are always displayed in the Widget Tree */ MidasAddChildTree(w,NULL); /* Put the command line options into ingots so they can be access by the application */ sprintf(junk,"%d",ma->Argc); MidasSetIngotString(w, "argc", junk); for (i=0; i < ma->Argc; i++) { sprintf(junk,"argv[%d]",i); MidasSetIngotString(w,junk,ma->Argv[i]); } return w; } static void MidasSetConfirmExit(w,value) Widget w; Boolean value; { MidasShell *ms = MidasGetShell(w); MidasApplication *ma = ms->Application; ma->ConfirmExit = value; } static MidasOperand MidasTreeToWidget(w) Widget w; { MidasOperand Temp; Arg arglist[1]; XtSetArg(arglist[0],XmNuserData,&Temp.Value.P); XtGetValues(w,arglist,1); Temp.Type = MWidget; Temp.Dynamic = FALSE; return Temp; } void MidasCreateWidgetTree(Tree) Widget Tree; { ListItem *item; WidgetTree = Tree; for (item = MidasShellList->First; item != 0; item = item->Next) { MidasShell *ms = (MidasShell *) item->Pointer; MidasAddChildTree(ms->Widget,NULL); } } static void MidasInvertWidget(w) Widget w; { Arg arglist[2]; Pixel fg; Pixel bg; XtSetArg(arglist[0],XmNforeground,&fg); XtSetArg(arglist[1],XmNbackground,&bg); XtGetValues(w,arglist,2); XtSetArg(arglist[0],XmNforeground,bg); XtSetArg(arglist[1],XmNbackground,fg); XtSetValues(w,arglist,2); } static void MidasCurrentWidgetInTree(w) Widget w; { static Widget OldWidget = NULL; Widget TreeW; MidasWidget *mw, *parent; if (OldWidget != NULL) { mw = MidasWidgetToMW(OldWidget); TreeW = mw->Map; if (TreeW != NULL) MidasInvertWidget(TreeW); } OldWidget = w; mw = MidasWidgetToMW(w); /* if this widget isnt in the tree, make it so */ for (; mw->Map == NULL; ) { for (parent = mw; parent->Map == NULL ; parent = MidasWidgetToMW(XtParent(parent->Widget)) ); MidasToggleChildrenTree(parent->Widget); } TreeW = mw->Map; MidasInvertWidget(TreeW); /* it may be necessary to scroll the tree to make this widget visible */ { Arg arglist[10]; int n=0; Widget h_scroll, v_scroll; Widget Tree = XtParent(TreeW); Widget Clip = XtParent(Tree); Widget Swin = XtParent(Clip); Position x_button,y_button; Dimension h_button,w_button; Position x_clip,y_clip; Dimension h_clip,w_clip; Position dv=0,dh=0; int min,max; int v_val,v_size,v_inc,v_page; int h_val,h_size,h_inc,h_page; Position x,y; /* Get window scroll bars */ XtSetArg(arglist[n],XmNhorizontalScrollBar, &h_scroll); n++; XtSetArg(arglist[n],XmNverticalScrollBar, &v_scroll); n++; XtGetValues(Swin,arglist,n); /* Get size of clip window and button */ n = 0; XtSetArg(arglist[n],XmNwidth, &w_clip); n++; XtSetArg(arglist[n],XmNheight, &h_clip); n++; XtGetValues(Clip,arglist,n); n = 0; XtSetArg(arglist[n],XmNwidth, &w_button); n++; XtSetArg(arglist[n],XmNheight, &h_button); n++; XtGetValues(TreeW,arglist,n); /* Get global coordinates of clip and selection rect */ XtTranslateCoords(Clip,0,0,&x_clip,&y_clip); XtTranslateCoords(TreeW,0,0,&x_button,&y_button); /* offset of selection within clip window */ x = x_button - x_clip; y = y_button - y_clip; /* selection y coordinate is not visible */ if( y < 0 || y + h_button > h_clip) { /* the widget must be moved verticaly by dv pixels */ dv = (y + h_button / 2) - h_clip / 2; n = 0; XtSetArg(arglist[n],XmNminimum,&min); n++; XtSetArg(arglist[n],XmNmaximum,&max); n++; XtGetValues(v_scroll,arglist,n); XmScrollBarGetValues(v_scroll,&v_val,&v_size,&v_inc,&v_page); max -= v_size; if( dv + v_val > max ) dv = max - v_val; if( dv + v_val < min ) dv = min - v_val; } /* selection x coordinate is not visible */ if( x < 0 || x + w_button > w_clip) { /* the widget must be moved horizontaly by dh pixels */ dh = (x + w_button / 2) - w_clip / 2; n = 0; XtSetArg(arglist[n],XmNminimum,&min); n++; XtSetArg(arglist[n],XmNmaximum,&max); n++; XtGetValues(h_scroll,arglist,n); XmScrollBarGetValues(h_scroll,&h_val,&h_size,&h_inc,&h_page); max -= h_size; if( dh + h_val > max ) dh = max - h_val; if( dh + h_val < min ) dh = min - h_val; } /* if the widget must be moved */ if(dv || dh) { Position x,y; n = 0; XtSetArg(arglist[n],XmNx,&x); n++; XtSetArg(arglist[n],XmNy,&y); n++; XtGetValues(Tree,arglist,n); x -= dh; y -= dv; /* move it */ n = 0; XtSetArg(arglist[n],XmNx,x); n++; XtSetArg(arglist[n],XmNy,y); n++; XtSetValues(Tree,arglist,n); /* update scroll bars */ if(dv) XmScrollBarSetValues(v_scroll,v_val+dv,v_size,v_inc, v_page,TRUE); if(dh) XmScrollBarSetValues(h_scroll,h_val+dh,h_size,h_inc, h_page,TRUE); } } } Widget MidasScanWidgetTree(root,path,scnrtn,closure) Widget root; char *path; MidasWidgetScanProc scnrtn; XtPointer closure; { Widget w = root; if (strcmp(path,"") == 0) { if (scnrtn) return (*scnrtn)(w,closure); else return w; } else if (strncmp("^^^",path,3) == 0) { path += 3; for (w = XtParent(w); w != 0; w = XtParent(w)) { Widget result = MidasScanWidgetTree(w,path,scnrtn,closure); if (result != 0) return result; } return 0; } else if (*path == '^') { path += 1; w = XtParent(w); return MidasScanWidgetTree(w,path,scnrtn,closure); } else if (strncmp("###",path,3) == 0) { char t,*p; Widget result; strncpy(path,"...",3); result = MidasScanWidgetTree(w,path,scnrtn,closure); strncpy(path,"###",3); if (result) return result; for (p = path+3 ; *p != '\0' && *p != '.' && *p != '#' && *p != '^' ;p++); t = *p; *p = '\0'; result= MidasFetch(path+3,w); if (!result) return result; *p = t; return MidasScanWidgetTree(result,p,scnrtn,closure); } else if (strncmp("...",path,3) == 0) { Widget *list, *save; int n , nsave; if (XtIsSubclass(w,compositeWidgetClass) != 0) { save = DXmChildren(w); nsave = DXmNumChildren(w); path += 3; for (list = save , n = nsave; n > 0; n-- , list++) { Widget result = MidasScanWidgetTree(*list,path,scnrtn,closure); if (result != 0) return result; } path -= 3; for (list = save , n = nsave; n > 0; n-- , list++) { Widget result = MidasScanWidgetTree(*list,path,scnrtn,closure); if (result != 0) return result; } } if (XtIsWidget(w)) { save = w->core.popup_list; nsave = w->core.num_popups; path += 3; for (list = save , n = nsave; n > 0; n-- , list++) { Widget result = MidasScanWidgetTree(*list,path,scnrtn,closure); if (result != 0) return result; } path -= 3; for (list = save , n = nsave; n > 0; n-- , list++) { Widget result = MidasScanWidgetTree(*list,path,scnrtn,closure); if (result != 0) return result; } } if (SGMLIsCompositeText(w)) { Arg arglist[10]; int nn = 0; XtSetArg(arglist[nn],XtNchildren,&save); nn++; XtSetArg(arglist[nn],XtNnumChildren,&nsave); nn++; XtGetValues(w,arglist,nn); path += 3; for (list = save , n = nsave ; n > 0; n-- , list++) { Widget result = MidasScanWidgetTree(*list,path,scnrtn,closure); if (result != 0) return result; } path -= 3; for (list = save , n = nsave ; n > 0; n-- , list++) { Widget result = MidasScanWidgetTree(*list,path,scnrtn,closure); if (result != 0) return result; } } return 0; } else if (*path == '.') { Widget *list, *save; int n, nsave; path++; if (XtIsSubclass(w,compositeWidgetClass)) { list = DXmChildren(w); n = DXmNumChildren(w); for (; n > 0; n-- , list++) { Widget result = MidasScanWidgetTree(*list,path,scnrtn,closure); if (result != 0) return result; } } if (XtIsWidget(w)) { save = w->core.popup_list; nsave = w->core.num_popups; for (list = save , n = nsave; n > 0; n-- , list++) { Widget result = MidasScanWidgetTree(*list,path,scnrtn,closure); if (result != 0) return result; } } if (SGMLIsCompositeText(w)) { Arg arglist[10]; int nn = 0; XtSetArg(arglist[nn],XtNchildren,&list); nn++; XtSetArg(arglist[nn],XtNnumChildren,&n); nn++; XtGetValues(w,arglist,nn); for (; n > 0; n-- , list++) { Widget result = MidasScanWidgetTree(*list,path,scnrtn,closure); if (result != 0) return result; } } path--; return 0; } else { char temp, *p, *e = 0; for (p=path; *p != '.' && *p != '^' && *p != '#' && *p != '\0'; p++) { if (*p == '=') e = p; } temp = *p; *p = '\0'; if (e == 0) { if (strcmp(path,"*") == 0) { *p = temp; return MidasScanWidgetTree(w,p,scnrtn,closure); } else { if (strcmp(XtName(w),path) == 0) { *p = temp; return MidasScanWidgetTree(w,p,scnrtn,closure); } else if (strcmp(MidasClassName(w),path) == 0) { *p = temp; return MidasScanWidgetTree(w,p,scnrtn,closure); } else { *p = temp; return 0; } } } else { unsigned int numResource; XtResource *Resource, *R; WidgetClass Class = XtClass(w); XtGetResourceList(Class,&Resource,&numResource); *e = '\0'; for (R=Resource; numResource-- > 0; R += 1) if (strcmp(R->resource_name,path) == 0) { XtPointer ptr , result; XrmValue from,to; int n = 0; Arg args[10]; XtSetArg(args[n],path,&result); n++; XtGetValues(w, args, n); *e = '='; *p = temp; from.size = strlen(e+1)+1; from.addr = e+1; to.size = sizeof(XtArgVal); to.addr = (XtPointer) &ptr; XtConvertAndStore(w,XtRString,&from,R->resource_type,&to); if (to.size > sizeof(XtArgVal)) { Widget res; XtPointer ptr = XtMalloc(to.size); to.addr = ptr; XtConvertAndStore(w,XtRString,&from,R->resource_type,&to); if (memcmp(to.addr,result,to.size) == 0) res = MidasScanWidgetTree(w,p,scnrtn,closure); else res = NULL; XtFree((char *) ptr); return res; } else { if (memcmp(to.addr,result,to.size) == 0) return MidasScanWidgetTree(w,p,scnrtn,closure); else return 0; } } *e = '='; *p = temp; return 0; } } } Widget MidasTraceWidgetTree(root,path) Widget root; char *path; { return MidasScanWidgetTree(root,path,NULL,NULL); } static MidasOperand MidasTraceWidgetTreeFunction(w,path) Widget w; char *path; { MidasOperand Temp; Temp.Dynamic = FALSE; Temp.Type = MWidget; Temp.Value.P = (XtPointer) MidasTraceWidgetTree(w,path); return Temp; } Widget MidasFindWidget(name) char *name; { Widget w, root; char temp, *p, *path = XtNewString(name); for (p = path+1; *p != '.' && *p != '^' && *p != '\0'; p++); temp = *p; *p = '\0'; if (strcmp(path,".") == 0) root = ActiveWidget; else root = MidasFindName(path); if (root == 0) MidasError("Could not find widget %s",path); *p = temp; w = MidasTraceWidgetTree(root,p); if (w == 0) MidasError("Could not follow path %s",path); XtFree(path); return w; } static MidasWidgetScanProc MidasForAllScan(w,command) Widget w; char *command; { MidasDispatchCommandCallback(w,command,NULL); return NULL; } static void MidasForAll(name,command) char *name; char *command; { Widget w, root; char temp, *p, *path = XtNewString(name); for (p = path+1; *p != '.' && *p != '^' && *p != '\0'; p++); temp = *p; *p = '\0'; if (strcmp(path,".") == 0) root = ActiveWidget; else root = MidasFindName(path); if (root == 0) MidasError("Could not find widget %s",path); *p = temp; MidasScanWidgetTree(root,p,MidasForAllScan,command); XtFree(path); } static void MidasDestroy(widget) Widget widget; { XtDestroyWidget(widget); } static void MidasQuitMidas() /* * Like totally */ { exit(SUCCESS); } void MidasClearWindow(w) Widget w; { XClearArea(XtDisplay(w),XtWindow(w),0,0,0,0,TRUE); } void MidasPopup(widget) Widget widget; { if (XtIsManaged(widget)==0) XtManageChild(widget); else if (XtIsRealized(widget)) { Widget parent = XtParent(widget); if (XtIsShell(parent)) { Display *dpy = XtDisplay(parent); Window wind = XtWindow(parent); XWindowAttributes attr; XGetWindowAttributes(dpy,wind,&attr); if (attr.map_state == IsUnmapped) XMapWindow(dpy,wind); else XRaiseWindow(dpy , wind); } } if (XtIsRealized(widget)==0) { MidasShell *ms = MidasGetShell(widget); XtRealizeWidget(ms->Widget); } } static void MidasPopdown(widget) Widget widget; { MidasShell *ms = MidasGetShell(widget); if (ms->Widget == widget) widget = MidasTraceWidgetTree(widget,"."); if (XtIsManaged(widget)) XtUnmanageChild(widget); if (XtParent(widget) == ms->Widget) XtUnrealizeWidget(ms->Widget); } static void MidasToggle(widget) Widget widget; { if (XtIsManaged(widget)) MidasPopdown(widget); else MidasPopup(widget); } static void MidasCenterHorizontal(w,position) Widget w; int position; { Dimension width; Position offset; Widget parent = XtParent(w); int n = 0; Arg args[10]; XtSetArg(args[n],XmNwidth, &width); n++; if (XmIsForm(parent) == 0) MidasError("Can only center widgets whose parent is FORM"); XtGetValues(w,args,n); offset = -((int) width)/2; { int n = 0; Arg args[10]; XtSetArg(args[n],XmNleftAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n],XmNleftOffset, offset); n++, XtSetArg(args[n],XmNleftPosition, position); n++; XtSetValues(w,args,n); } } static void Set1Flag(w,flag) Widget w; int *flag; { *flag = 1; } static void Set2Flag(w,flag) Widget w; int *flag; { *flag = 2; } static void ClearFlag(w,flag) Widget w; int *flag; { *flag = 0; } static Widget WhyDoIHaveToDoThis(w,closure) Widget w; XtPointer closure; { XtRemoveAllCallbacks(w,XtNdestroyCallback); return NULL; } /* * Quit applcation closes a complete application. It: * a) Checks if there are any unsaved changes in the resource database, and if so * asks the user whether to save them. * b) If confirm exit is set for the shell, asks the user if he really wants to exit. * c) If there are no more active applications, exits the program. * d) Destroys all the shells in the application. */ static void MidasQuitApplication(w) Widget w; { MidasShell *ms; MidasApplication *ma; int mods; ListItem *item; int Nshell = 0; if (w == NULL) w = ActiveWidget; ms = MidasGetShell(w); ma = ms->Application; if (ma->Changes > 0 || ma->ConfirmExit) { char message[255]; XmString Message; XmString Yes = MidasCharToString("Yes"); XmString No = MidasCharToString("No"); XmString Cancel = MidasCharToString("Cancel"); XmString ConfirmExit = MidasCharToString("Confirm Exit"); int ExitResponse = -1; Arg arglist[10]; int n = 0; Widget w; if (ma->Changes > 0) sprintf(message,"Save changes before quitting %s?",ma->AppClass); else sprintf(message,"Do you really want to quit %s?" ,ma->AppClass); Message = MidasCharToString(message); XtSetArg(arglist[n],XmNmessageString,Message); n++; XtSetArg(arglist[n],XmNdialogTitle,ConfirmExit); n++; XtSetArg(arglist[n],XmNdialogStyle,XmDIALOG_FULL_APPLICATION_MODAL); n++; XtSetArg(arglist[n],XmNmessageAlignment,XmALIGNMENT_CENTER); n++; XtSetArg(arglist[n],XmNokLabelString,Yes); n++; XtSetArg(arglist[n],XmNcancelLabelString,No); n++; XtSetArg(arglist[n],XmNhelpLabelString,Cancel); n++; w = XmCreateQuestionDialog(ms->Widget,"ExitDialog",arglist,n); XtAddCallback(w,XmNokCallback ,(XtCallbackProc) Set1Flag ,(XtPointer) &ExitResponse); XtAddCallback(w,XmNcancelCallback,(XtCallbackProc) ClearFlag ,(XtPointer) &ExitResponse); XtAddCallback(w,XmNhelpCallback ,(XtCallbackProc) Set2Flag ,(XtPointer) &ExitResponse); if (ma->Changes == 0) { MidasPopdown(XmMessageBoxGetChild(w,XmDIALOG_CANCEL_BUTTON)); } XtManageChild(w); for (;ExitResponse == -1;) MidasFetchDispatchEvent(); XmStringFree(Message); XmStringFree(Yes); XmStringFree(No); XmStringFree(Cancel); XmStringFree(ConfirmExit); if (ExitResponse == 2) /* Cancel */ { XtDestroyWidget(w); return; } if (ExitResponse == 1 && ma->Changes > 0) /* Yes */ { XrmPutFileDatabase(ma->Database, ma->Filename); ma->Changes = 0; } } /* * Ok, we really want to quit, are we the only active application? */ for (item = MidasShellList->First; item != NULL; item = item->Next) { MidasShell *s = (MidasShell *) item->Pointer; if (s->Application != ma && XtIsRealized(s->Widget)) Nshell++; } if (Nshell == 0) { XtCallCallbacks(ms->Widget,XtNpopdownCallback,NULL); exit(SUCCESS); } for (item = MidasShellList->First; item != NULL; item = item->Next) { MidasShell *s = (MidasShell *) item->Pointer; if (s->Application == ma) { XtCallCallbacks(s->Widget,XtNpopdownCallback,NULL); MidasPopdown(s->Widget); MidasScanWidgetTree(s->Widget,"...XmMainWindow.XmDrawingArea.",WhyDoIHaveToDoThis,NULL); MidasScanWidgetTree(s->Widget,"...XmMainWindow.",WhyDoIHaveToDoThis,NULL); MidasQueueCommand(s->Widget,"Destroy ."); } } } /* * Midas Quit Shell destroys a specific shell. If it is the only shell in the * application then it closes the application. */ static void MidasQuitShell(w) Widget w; { MidasShell *ms; if (w == NULL) w = ActiveWidget; ms = MidasGetShell(w); if (ms->Application->Shells == 1) { MidasQuitApplication(w); return; } /* We usurp the unused PopDonw callback of the applicationShell as a way of providing * a Destroy callback for the shell. */ XtCallCallbacks(ms->Widget,XtNpopdownCallback,NULL); /* Some versions of the toolkit seem to have problems destroying main windows * The following seems to circumvent the problems. */ MidasPopdown(ms->Widget); MidasScanWidgetTree(ms->Widget,"...XmMainWindow.XmDrawingArea.",WhyDoIHaveToDoThis,NULL); MidasScanWidgetTree(ms->Widget,"...XmMainWindow.",WhyDoIHaveToDoThis,NULL); MidasQueueCommand(ms->Widget,"Destroy ."); } static Widget MidasInvokeApplication(command) char *command; { Widget toplevel_widget; MidasOperand Temp; char *argv[20]; int argc; MidasTokenizeCommand(command,argv,&argc,XtNumber(argv)," "); MidasCreateApplication(argv[0],argv,&argc); toplevel_widget = MidasCreateShell(argv[0]); Temp = MidasGetAppResource(toplevel_widget,"startup"); if (*((char *)Temp.Value.P) != '\0') MidasQueueCommand(toplevel_widget,Temp.Value.P); return toplevel_widget; } /* * This procedure is useful for kicking widgets that refuse to notice * that their children have changed size */ static void MidasKick(w) Widget w; { if (XtIsWidget(w)) { WidgetClass class = XtClass(w); if (class->core_class.resize) (*class->core_class.resize)(w); } } static void MidasHelpOnContext(w) Widget w; { MidasShell *ms = MidasGetShell(w); Cursor C = XCreateFontCursor(XtDisplay(w),XC_question_arrow); Widget new = XmTrackingLocate(ms->Widget,C,FALSE); for (; new != NULL; new = XtParent(new)) if (XtHasCallbacks(new,XmNhelpCallback) == XtCallbackHasSome) { XtCallCallbacks(new,XmNhelpCallback,NULL); break; } XFreeCursor(XtDisplay(w),C); } /*------------------------------------------------------------- ** Trap any errors that occur as a result of trying to ** communicate with MidasWWW */ static Boolean ErrorFlag; static int (*OldErrorHandler)(); static int MidasHelpErrorHandler(dpy,event) Display *dpy; XErrorEvent *event; { if (event->error_code == BadWindow) ErrorFlag = True; else OldErrorHandler(dpy,event); return 0; } static void MidasHelp(w,url) Widget w; char *url; { Display *dpy = XtDisplay(w); Window root = XRootWindowOfScreen(XtScreen(w)); Atom urlAtom = XInternAtom(dpy,"URL",FALSE); Atom prop = XInternAtom(dpy,"midaswww",FALSE); Atom type; int format, rc; unsigned long items, bytes; Window *windowList; char *startCommand = "midaswww"; char command[500]; #ifdef VMS int flags = 1; /* NOWAIT */ int d[2]; #endif /* * Get the list of registered MidasWWW windows by accessing the appropriate * property on the root window. */ XGrabServer(dpy); rc = XGetWindowProperty(dpy,root,prop,0,100,FALSE,XA_WINDOW, &type,&format,&items,&bytes,(unsigned char **)&windowList); if (rc == Success) { /* * OK, property already exists, but beware, window may not actually exist, so be * ready to trap error. (This can happen if MidasWWW client somehow exited without * cleaning up the root window property). */ int try; /* window to try */ OldErrorHandler = XSetErrorHandler(MidasHelpErrorHandler); for (try = 0; try < items ; try++) { ErrorFlag = FALSE; XChangeProperty(dpy,windowList[try],urlAtom,XA_STRING,8, PropModeReplace,(unsigned char *) url,strlen(url)); XSync(dpy,FALSE); /* wait for any error to come back */ if (!ErrorFlag) break; } /* to be sociable we will clean up any spurious entries we found */ if (try > 0) { if (ErrorFlag) XDeleteProperty(dpy,root,prop); else XChangeProperty(dpy,root,prop,XA_WINDOW,32,PropModeReplace, (unsigned char *) windowList + try, items - try); } XUngrabServer(dpy); XFlush(dpy); XSetErrorHandler(OldErrorHandler); XFree((char *) windowList); if (!ErrorFlag) return; } else XUngrabServer(dpy); /* * Have to start a new client */ #ifdef VMS sprintf(command,"%s %s",startCommand,url); d[0] = strlen(command); d[1] = command; rc = Lib$Spawn(d,0,0,&flags); #else sprintf(command,"%s %s &",startCommand,url); system(command); #endif } static void MidasGrabFocus(w) Widget w; { XmProcessTraversal(w,XmTRAVERSE_CURRENT); } static MidasOperand QueryUser(w) Widget w; { int flag = 0; Arg arglist[10]; if (!XmIsBulletinBoard(w)) MidasError("QUERYUSER requires a widget of subclass BulletinBoard"); XtAddCallback(w,XmNunmapCallback,(XtCallbackProc) MidasSetFlag,(XtPointer) &flag); XtSetArg(arglist[0],XmNdialogStyle,XmDIALOG_FULL_APPLICATION_MODAL); XtSetValues(w,arglist,1); MidasPopup(w); for (;flag == 0;) { MidasDispatchQueuedCommands(); MidasFetchDispatchEvent(); } return MidasGetIngot(w,"result"); } char *MidasQueryUser(w) Widget w; { MidasOperand Temp; Temp = QueryUser(w); return (char *)MidasConvertToString(Temp); } /* The names and addresses of Things that Mrm.has to bind. The names do * not have to be in alphabetical order. */ static MrmRegisterArg reglist[] = { {"midas_command_proc", (caddr_t) midas_command_proc}, {"SendMidas", (caddr_t) MidasDispatchCommandCallback}}; static XtActionsRec actions[] = { {"SendMidas" , (XtActionProc) MidasSendActionProc}, {"MidasSpecial", (XtActionProc) MidasSpecialActionProc}}; static Boolean MidasConvertStringToCallback(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { int size = sizeof(XtPointer); XtPointer new; XtCallbackRec *Callback; if (*from->addr == '\0') Callback = 0; else { /* This stuff is currently never freed....need to implement destructor??? */ Callback = (XtCallbackRec *) XtMalloc(sizeof(XtCallbackRec)*2); Callback[0].callback = (XtCallbackProc) MidasDispatchCommandCallback; Callback[0].closure = (XtPointer) XtNewString((char *) from->addr); Callback[1].callback = NULL; Callback[1].closure = NULL; } new = (XtPointer) &Callback; if (to->addr == 0) { to->addr = new; to->size = size; return TRUE; } else if (to->size >= size) { memcpy(to->addr,new,size); to->size = size; return TRUE; } else { to->size = size; return FALSE; } } static Boolean MidasConvertStringToList(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { int size = sizeof(List *); static List *new; char *in = XtNewString((char *) from->addr); char *token; new = MidasCreateEmptyList(""); for (token = strtok(in," "); token ; token = strtok(NULL," ")) { MidasAddItemToList(new,token); } XtFree(in); /* WARNING: Memory leak....There is no destructor to delete this List */ if (to->addr == 0) { to->addr = (XtPointer) &new; to->size = size; return TRUE; } else if (to->size >= size) { memcpy(to->addr,&new,size); to->size = size; return TRUE; } else { to->size = size; return FALSE; } } static Boolean MidasConvertStringToPixmap(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { int size = sizeof(Pixmap); static Pixmap new; Widget w = *((Widget *) args[0].addr); new = MidasFetchIcon((char *) from->addr,w); /* WARNING: Memory leak....There is no destructor to delete this Pixmap */ if (to->addr == 0) { to->addr = (XtPointer) &new; to->size = size; return TRUE; } else if (to->size >= size) { memcpy(to->addr,&new,size); to->size = size; return TRUE; } else { to->size = size; return FALSE; } } static Boolean MidasConvertCallbackToString(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { XtCallbackRec *Callback = (XtCallbackRec *) from->addr; int size; XtPointer new; static char empty[] = ""; if (Callback == 0) { new = empty; } else if (Callback[0].callback == (XtCallbackProc) MidasDispatchCommandCallback) { new = Callback[0].closure; } else { new = empty; } size = strlen((char *) new) + 1; if (to->addr == 0) { to->addr = new; to->size = size; return TRUE; } else if (to->size >= size) { memcpy(to->addr,new,size); to->size = size; return TRUE; } else { to->size = size; return FALSE; } } static Boolean MidasConvertStringTable(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { XmString **string = (XmString **) from->addr; char *new; int size; if (*string == 0 || **string == 0) { new = XtNewString(""); size = 1; } else { new = MidasStringToChar(**string); size = strlen(new) + 1; } if (to->addr == 0) { to->addr = new; to->size = size; return TRUE; } else if (to->size >= size) { strcpy(to->addr,new); to->size = size; XtFree(new); return TRUE; } else { to->size = size; XtFree(new); return FALSE; } } static Boolean MidasConvertEnum(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { char *val = from->addr; char *new; int size; ConvertPair *cp = (ConvertPair *) args->addr; for (; cp->Name != 0; cp++) if (cp->Value == *val) { new = cp->Name; break; } if (cp->Name == 0) return FALSE; size =strlen(new); if (to->addr == 0) { to->addr = new; to->size = size; return TRUE; } else if (to->size >= size) { strcpy(to->addr,new); to->size = size; return TRUE; } else { to->size = size; return FALSE; } } static Boolean MidasConvertInteger(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { static char buffer[12]; int size; if (from->size == sizeof(short int)) { int i; short int s; memcpy(&s,from->addr,sizeof(s)); i = s; sprintf(buffer,"%d",i); size = 1 + strlen(buffer); } else { int s; memcpy(&s,from->addr,sizeof(s)); sprintf(buffer,"%d",s); size = 1 + strlen(buffer); } if (to->addr == 0) { to->addr = buffer; to->size = size; return TRUE; } else if (to->size >= size) { strcpy(to->addr,buffer); to->size = size; return TRUE; } else { to->size = size; return FALSE; } } static Boolean MidasConvertQuark(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { char *buffer; int size; XrmQuark s; memcpy(&s,from->addr,sizeof(s)); buffer = XrmQuarkToString(s); size = 1 + strlen(buffer); if (to->addr == 0) { to->addr = buffer; to->size = size; return TRUE; } else if (to->size >= size) { strcpy(to->addr,buffer); to->size = size; return TRUE; } else { to->size = size; return FALSE; } } static Boolean MidasConvertFloat(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { static char buffer[12]; int size; float s; memcpy(&s,from->addr,sizeof(s)); sprintf(buffer,"%f",s); size = 1 + strlen(buffer); if (to->addr == 0) { to->addr = buffer; to->size = size; return TRUE; } else if (to->size >= size) { strcpy(to->addr,buffer); to->size = size; return TRUE; } else { to->size = size; return FALSE; } } void MidasMainLoop() { for (;;) { MidasDispatchQueuedCommands(); MidasFetchDispatchEvent(); } } void MidasInvokeAction(w,name) Widget w; char *name; { XtCallActionProc(w,name,NULL,NULL,0); } void MidasSystem(name) char *name; { system(name); } void MidasInvokeCallback(w,name) Widget w; char *name; { XtCallCallbacks(w,name,NULL); } void MidasFlush(w) Widget w; { XFlush(XtDisplay(w)); } void MidasUpdate(w) Widget w; { XmUpdateDisplay(w); } Widget MidasInitializeFallback(argc,argv,fallback) Cardinal *argc; char *argv[]; char *fallback[]; { MrmHierarchy MidasHierarchy; MrmType *dummy_class; Pixmap PixMap; Pixel foreground,background; Widget MidasMenu; MidasOperand Temp; Widget toplevel_widget; int i; for (i=0; i < HASHTABLESIZE; i++) HashTable[i] = NULL; MidasWidgetList = MidasCreateEmptyList("MidasWidgets"); MidasFileList = MidasCreateEmptyList("MidasFiles"); MidasShellList = MidasCreateEmptyList("MidasShells"); MidasApplicationList = MidasCreateEmptyList("MidasApplications"); CommandQueue.Head = 0; CommandQueue.Tail = 0; MrmInitialize(); /* Initialize MRM before initializing */ /* the X Toolkit. */ /* If we had user-defined widgets, we would register them with Mrm.here. */ /* Set up initial command parsing stuff */ XtSetTypeConverter("XmStringTable","String",MidasConvertStringTable, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("ShellVertPos","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("ShellHorizPos","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("ShellVertDim","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("ShellHorizDim","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("VerticalPosition","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("HorizontalPosition","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("VerticalDimension","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("HorizontalDimension","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("Dimension","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("Int","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("Short","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("Cardinal","String",MidasConvertInteger, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("Float","String",MidasConvertFloat, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("Quark","String",MidasConvertQuark, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("String","Callback",MidasConvertStringToCallback, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("Callback","String",MidasConvertCallbackToString, NULL,0,XtCacheNone,NULL); XtSetTypeConverter("Boolean","String",MidasConvertEnum, ConvertBooleanArg,1,XtCacheNone,NULL); XtSetTypeConverter("Packing","String",MidasConvertEnum, ConvertPackingArg,1,XtCacheNone,NULL); XtSetTypeConverter("String","Icon",MidasConvertStringToPixmap, ConvertWidgetArg,1,XtCacheByDisplay,NULL); XtSetTypeConverter("String","List",MidasConvertStringToList, NULL,0,XtCacheNone,NULL); MidasDeclareInit(); MidasConvertInit(); MidasDeclareQualifier("PARENT","Widget"); MidasDeclareQualifier("UIDFILE","name"); MidasDeclareQualifier("ICON","Icon"); MidasDeclareQualifier("DIALOG",""); MidasDeclareFunction("STRNSPN(name,name)" ,MidasStrnspn); MidasDeclareFunction("GETWIDGETID(Widget)" ,MidasGetWidgetId); MidasDeclareFunction("HASCHILDREN(Widget)" ,MidasHasChildren); MidasDeclareFunction("CHILDRENINTREE(Widget)" ,MidasChildrenInTree); MidasDeclareFunction("ISMANAGED(Widget)" ,MidasIsManaged); MidasDeclareFunction("ISREALIZED(Widget)" ,MidasIsRealized); MidasDeclareFunction("GETVALUE(Widget,name)" ,MidasGetValue); MidasDeclareFunction("GETVALUERAW(Widget,name)" ,MidasGetValueRaw); MidasDeclareFunction("GETAPPRESOURCE(Widget,name)" ,MidasGetAppResource); MidasDeclareFunction("EVALU8(name)" ,MidasEvaluateExpression); MidasDeclareFunction("INT(Float)" ,MidasInt); MidasDeclareFunction("FETCH(name,{Widget})" ,MidasFetchFunction); MidasDeclareFunction("TRACEWIDGETTREE(Widget,name)" ,MidasTraceWidgetTreeFunction); MidasDeclareFunction("WIDGET(Widget)" ,MidasWidgetFunction); MidasDeclareFunction("WIDGETNAME(Widget)" ,MidasWidgetName); MidasDeclareFunction("WIDGETCLASS(Widget)" ,MidasWidgetClass); MidasDeclareFunction("PARENT(Widget)" ,MidasParent); MidasDeclareFunction("SHELL(Widget)" ,MidasShellFunction); MidasDeclareFunction("GETSELECTION(Widget,Atom,Atom)" ,MidasGetSelection); MidasDeclareFunction("TYPE(any)" ,MidasGetOperandType); MidasDeclareFunction("GETPROPERTY(Widget,Atom)" ,MidasGetProperty); MidasDeclareFunction("GETCOMMAND()" ,MidasGetCommand); MidasDeclareFunction("GETCONFIRMEXIT(Widget)" ,MidasGetConfirmExit); MidasDeclareFunction("GETCLICKCOUNT()" ,MidasGetClickCount); MidasDeclareFunction("MODIFIER(name)" ,MidasModifier); MidasDeclareFunction("HYPERGETTEXT()" ,MidasHyperGetText); MidasDeclareFunction("HYPERGETHIDDEN()" ,MidasHyperGetHidden); MidasDeclareFunction("QUERYUSER(Widget)" ,QueryUser); MidasDeclareFunction("HYPERGREP(Widget,name)" ,MidasHyperGrep); MidasDeclareFunction("TREETOWIDGET(Widget)" ,MidasTreeToWidget); MidasDeclareVerb("MIDAS *name..." ,MidasIgnore); MidasDeclareVerb("POPUP Widget" ,MidasPopup); MidasDeclareVerb("POPDOWN Widget" ,MidasPopdown); MidasDeclareVerb("TOGGLE Widget" ,MidasToggle); MidasDeclareVerb("FETCH name {Widget}" ,MidasFetch); MidasDeclareVerb("DESTROY Widget" ,MidasDestroy); MidasDeclareVerb("OPEN UID name Widget" ,MidasOpenUidFile); MidasDeclareVerb("CREATE SHELL name" ,MidasCreateShell); MidasDeclareVerb("CREATE WIDGET TREE Widget" ,MidasCreateWidgetTree); MidasDeclareVerb("CREATE DIALOG name" ,MidasCreateDialog); MidasDeclareVerb("CREATE WIDGET Widget Class name" ,MidasCreateWidget); MidasDeclareVerb("QUIT {Widget}" ,MidasQuitApplication); MidasDeclareVerb("QUIT APPLICATION {Widget}" ,MidasQuitApplication); MidasDeclareVerb("QUIT SHELL {Widget}" ,MidasQuitShell); MidasDeclareVerb("QUIT MIDAS" ,MidasQuitMidas); MidasDeclareVerb("REGISTER NAME name Widget" ,MidasRegisterName); MidasDeclareVerb("TOGGLE CHILDREN Widget" ,MidasToggleChildrenTree); MidasDeclareVerb("GET CALLBACKS list Widget" ,MidasGetCallbacks); MidasDeclareVerb("GET RESOURCES list Widget" ,MidasGetResources); MidasDeclareVerb("SET VALUE Widget name any..." ,MidasSetValue); MidasDeclareVerb("SET SENSITIVE Widget Boolean" ,MidasSetSensitive); MidasDeclareVerb("SAVE GEOMETRY Widget" ,MidasSaveGeometry); MidasDeclareVerb("STORE RESOURCE Widget name" ,MidasStoreResource); MidasDeclareVerb("STORE NAMED RESOURCE Widget name name",MidasStoreNamedResource); MidasDeclareVerb("UPDATE NAMED RESOURCE Widget name name" ,MidasUpdateNamedResource); MidasDeclareVerb("STORE APP RESOURCE Widget name name" ,MidasStoreAppResource); MidasDeclareVerb("SAVE STORED RESOURCES Widget" ,MidasSaveStoredResources); MidasDeclareVerb("CENTER HORIZONTAL Widget Int" ,MidasCenterHorizontal); MidasDeclareVerb("CLEAR WINDOW Widget", MidasClearWindow); MidasDeclareVerb("CURRENT WIDGET IN TREE Widget" ,MidasCurrentWidgetInTree); MidasDeclareVerb("IF Boolean *name...", MidasIf); MidasDeclareVerb("ELSE IF Boolean *name...", MidasElseIf); MidasDeclareVerb("ELSE *name...", MidasElse); MidasDeclareVerb("INVOKE ACTION Widget name", MidasInvokeAction); MidasDeclareVerb("INVOKE CALLBACK Widget name", MidasInvokeCallback); MidasDeclareVerb("LOAD IMAGE name", MidasLoadImage); MidasDeclareVerb("FLUSH Widget", MidasFlush); MidasDeclareVerb("UPDATE Widget", MidasUpdate); MidasDeclareVerb("FORCE DIALOG Widget", MidasForceDialog); MidasDeclareVerb("SYSTEM name...", MidasSystem); MidasDeclareVerb("INVOKE APPLICATION name...", MidasInvokeApplication); MidasDeclareVerb("SET CURSOR Widget Cursor", MidasSetCursor); MidasDeclareVerb("ERROR name...", MidasError); MidasDeclareVerb("BEEP {Int} {Widget}", MidasBeep); MidasDeclareVerb("HYPER LOAD FILE Widget name", SGMLHyperLoadFile); MidasDeclareVerb("LIST SELECT ITEM Widget XmString {Boolean}",XmListSelectItem); MidasDeclareVerb("HELP ON CONTEXT Widget", MidasHelpOnContext); MidasDeclareVerb("HELP Widget name", MidasHelp); MidasDeclareVerb("GRAB FOCUS Widget", MidasGrabFocus); MidasDeclareVerb("FOR ALL name name...", MidasForAll); MidasDeclareVerb("KICK Widget", MidasKick); MidasDeclareVerb("QUEUE Widget name..." , MidasQueueCommand); MidasDeclareVerb("DISPATCH QUEUED COMMANDS", MidasDispatchQueuedCommands); MidasDeclareVerb("SET CONFIRM EXIT Widget Boolean", MidasSetConfirmExit); MidasUtilInit(); MidasListInit(); MidasInitializeIngots(); /* Initialize the X Toolkit. We get back a top level shell widget. */ XtToolkitInitialize(); app_context = XtCreateApplicationContext(); /* declare fallback resources */ XtAppSetFallbackResources(app_context,fallback); /* declare SendMidas action routine */ XtAppAddActions(app_context,actions,XtNumber(actions)); /* Parse the special midas translations */ MidasTranslations = XtParseTranslationTable("Ctrl <Btn1Down> : MidasSpecial(\"Set Ingot WidgetList currentWidget Widget(.):dialog;Popup MidasInfo:parent=WidgetList;Register Name WidgetName(.) .\")"); MidasCreateApplication("Midas",argv,argc); toplevel_widget = MidasCreateShell("Midas"); /* Open the UID files (the output of the UIL compiler) in the hierarchy*/ MidasHierarchy = MidasOpenUidFile("midas.uid",toplevel_widget); /* Register the items MRM needs to bind for us. */ MrmRegisterNames(reglist,XtNumber(reglist)); /* Go get the midas pixmap */ PixMap = MidasFetchIcon("MidasIcon",NULL); { int n = 0; Arg args[10]; XtSetArg(args[n],XmNiconPixmap, PixMap); n++; XtSetValues(toplevel_widget, args, n); } /* Initialize Customization stuff */ CustomInit(); return toplevel_widget; } /* Invoke the users profile */ Widget MidasInitializeUser(AppName,argv,argc) Cardinal *argc; char *argv[]; char *AppName; { MidasCreateApplication(AppName,argv,argc); return MidasCreateShell(AppName); }; void MidasStartInterpreter(top) Widget top; { MidasOperand Temp; Temp = MidasGetAppResource(top,"startup"); if (*((char *)Temp.Value.P) != '\0') MidasQueueCommand(top,Temp.Value.P); else MidasQueueCommand(top,"Popup Midas_Main"); } XtAppContext MidasInitialize(argc,argv) Cardinal argc; char *argv[]; { Widget top = MidasInitializeFallback(&argc,argv,NULL); char *AppName, *AppClass; XtGetApplicationNameAndClass(XtDisplay(top),&AppName,&AppClass); if (strcmp(AppName,"midas") && strcmp(AppName,"MIDAS") && strcmp(AppName,"Midas")) top = MidasInitializeUser(AppName,argv,&argc); MidasStartInterpreter(top); return XtWidgetToApplicationContext(top); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midasclass.c���������������������������������������������������������������������������100666 � 21345 � 173 � 1505 5554674761 13717� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <Xm/Label.h> #include <Xm/LabelG.h> #include <Xm/RowColumn.h> #include <Xm/PushB.h> #include <Xm/PushBG.h> #include <Xm/ToggleB.h> #include <Xm/ToggleBG.h> #include <Xm/TextF.h> #include "SGMLHyper.h" #include "Tree.h" #include "Ghostview.h" #include "GhostviewPlus.h" void MidasClassInit() { MidasDeclareClass(xmRowColumnWidgetClass); MidasDeclareClass(xmToggleButtonWidgetClass); MidasDeclareClass(xmPushButtonWidgetClass); MidasDeclareClass(xmToggleButtonGadgetClass); MidasDeclareClass(xmPushButtonGadgetClass); MidasDeclareClass(xmLabelWidgetClass); MidasDeclareClass(xmLabelGadgetClass); MidasDeclareClass(xmTextFieldWidgetClass); MidasDeclareClass(sGMLHyperWidgetClass); MidasDeclareClass(treeWidgetClass); MidasDeclareClass(ghostviewWidgetClass); MidasDeclareClass(ghostviewPlusWidgetClass); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midasconvert.c�������������������������������������������������������������������������100666 � 21345 � 173 � 34675 5554674761 14330� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <Mrm/MrmAppl.h> /* Motif Toolkit and MRM */ #include "midaslist.h" #include "midaserrors.h" #include "midasoperand.h" #include "midasconvert.h" #include <X11/cursorfont.h> #include <X11/CoreP.h> #include <stdlib.h> typedef Boolean (*cr)(); static List ConverterList; static List MidasClassList; Widget MidasGetActiveWidget(); ConvertBlock *MidasFindStringConverter(Type) MidasType Type; { ListItem *item; char buffer[256]; strcpy(buffer,MString); strcat(buffer,"."); strcat(buffer,Type); item = MidasFindItemInList(&ConverterList,buffer); if (item == 0) MidasError("Could not find converter for %s to %s",MString,Type); return item->Pointer; } static Boolean MidasConversionConverter(display,args,nargs,from,to,converter_data) Display *display; XrmValue *args; Cardinal *nargs; XrmValue *from; XrmValue *to; XtPointer *converter_data; { cr ConvertRtn = (cr) args[0].addr; MidasOperand FromOp, ToOp; XtPointer new; int size; FromOp.Value.P = from->addr; FromOp.Type = args[1].addr; FromOp.Dynamic = FALSE; ToOp.Dynamic = FALSE; ToOp.Type = args[2].addr; printf("Converting %s to %s rtn=%x\n",FromOp.Type,ToOp.Type,ConvertRtn); if (!ConvertRtn(&FromOp,&ToOp)) return FALSE; new = ToOp.Value.P; if (strcmp(ToOp.Type,"String")) size = sizeof(new); else size = strlen((char *) new) + 1; if (to->addr == 0) { to->addr = new; to->size = size; return TRUE; } else if (to->size >= size) { strcpy(to->addr,new); to->size = size; return TRUE; } else { to->size = size; return FALSE; } } void MidasDeclareConverter(FromType,ToType,ConvertRtn) MidasType FromType; MidasType ToType; cr ConvertRtn; { char *name = XtMalloc(strlen(FromType)+strlen(ToType)+2); ListItem *item; strcpy(name,FromType); strcat(name,"."); strcat(name,ToType); item = MidasFindItemInList(&ConverterList,name); if (item != 0) { XtFree(name); MidasError("Duplicate converter for %s to %s ignored",FromType,ToType); } else { ConvertBlock *ab = XtNew(ConvertBlock); /* XtConvertArgRec ConvertArgs[] = {{XtAddress ,(XtPointer)ConvertRtn ,sizeof(XtPointer)}, {XtAddress ,(XtPointer)FromType ,strlen(FromType)+1} , {XtAddress ,(XtPointer)ToType ,strlen(ToType)+1}}; */ item = MidasAddItemToList(&ConverterList,name); item->Pointer = ab; ab->ConvertRtn = ConvertRtn; ab->FromType = FromType; ab->ToType = ToType; /* printf("Convert %s to %s rtn=%x\n",FromType ,ToType,ConvertRtn); XtSetTypeConverter(FromType,ToType,MidasConversionConverter, &ConvertArgs,XtNumber(ConvertArgs),XtCacheNone); */ } XtFree(name); } void MidasDeclareStringConverter(ToType,ConvertRtn) MidasType ToType; Boolean (*ConvertRtn)(); { MidasDeclareConverter(MString,ToType,ConvertRtn); } Boolean MidasConvertOperandInternal(Operand,Type) MidasOperand *Operand; MidasType Type; { MidasOperand Temp; char name[256]; ListItem *item; ConvertBlock *cb; Boolean ok; if (strcmp(Operand->Type,Type) == 0) return TRUE; if (strcmp(Type,"any") == 0) { MidasOperand *new = XtNew(MidasOperand); *new = *Operand; Operand->Type = "any"; Operand->Dynamic = TRUE; Operand->Value.P = (XtPointer) new; return TRUE; } strcpy(name,Operand->Type); strcat(name,"."); strcat(name,Type); item = MidasFindItemInList(&ConverterList,name); if (item == 0) { /* * Maybe the intrinsics can do the job for us? * */ XrmValue from, to; Widget ActiveWidget = MidasGetActiveWidget(); int result; if (strcmp(Operand->Type,MString) == 0) { from.size = strlen(Operand->Value.P) + 1; from.addr = Operand->Value.P; } else { from.size = sizeof(Operand->Value.P); from.addr = Operand->Value.P; } to.addr = (XtPointer) &result; to.size = sizeof(result); MidasSuppressXtWarningMessages(); ok = XtConvertAndStore(ActiveWidget,Operand->Type,&from,Type,&to); MidasReenableXtWarningMessages(); if (ok) { if (to.size == sizeof(result)) Operand->Value.I = result; else { short s; memcpy(&s,to.addr,to.size); Operand->Value.I = s; } } else if (to.size>sizeof(result)) { to.addr = XtMalloc(to.size); ok = XtConvertAndStore(ActiveWidget,Operand->Type,&from,Type,&to); Operand->Value.P = to.addr; Operand->Dynamic = TRUE; } if (ok) { Operand->Type = Type; return ok; } if (strcmp(Type,MString) == 0) { char *p = XtMalloc(12); sprintf(p,"%d",Operand->Value.I); if (Operand->Dynamic) XtFree(Operand->Value.P); Operand->Value.P = p; Operand->Dynamic = TRUE; Operand->Type = MString; return TRUE; } MidasError("No converter declared for %s to %s",Operand->Type,Type); } cb = item->Pointer; Temp.Dynamic = FALSE; Temp.Type = Type; ok = cb->ConvertRtn(Operand,&Temp); if (ok) { if (Operand->Dynamic) XtFree(Operand->Value.P); *Operand = Temp; } return ok; } void MidasConvertOperand(Operand,Type) MidasOperand *Operand; MidasType Type; { Boolean ok = MidasConvertOperandInternal(Operand, Type); if (ok) return; /* Try to report error as best we can */ if (strcmp(Operand->Type,MString) == 0) MidasError("Can not convert %s from %s to %s",Operand->Value.P,Operand->Type,Type); else if (strcmp(Type,MString) == 0) MidasError("Can not convert operand from %s to %s",Operand->Type,Type); else { ok = MidasConvertOperandInternal(Operand, MString); if (ok) MidasError("Can not convert %s from %s to %s",Operand->Value.P,Operand->Type,Type); else MidasError("Can not convert operand from %s to %s",Operand->Type,Type); } } static MidasOperand MidasConvertForce(Operand,Type) MidasOperand *Operand; char *Type; { MidasOperand Temp; Temp = *Operand; MidasConvertOperand(&Temp,XtNewString(Type)); /* bug ... never freed */ return Temp; } static Boolean MidasConvertBooleanString(In,Out) MidasOperand *In; MidasOperand *Out; { if (In->Value.I) Out->Value.P = "True"; else Out->Value.P = "False"; return TRUE; } static Boolean MidasConvertIntString(In,Out) MidasOperand *In; MidasOperand *Out; { char *new = XtMalloc(12); sprintf(new,"%d",In->Value.P); Out->Value.P = new; return TRUE; } static Boolean MidasConvertFloatString(In,Out) MidasOperand *In; MidasOperand *Out; { char *new = XtMalloc(20); sprintf(new,"%f",In->Value.F); Out->Value.P = new; return TRUE; } static Boolean MidasConvertStringBoolean(In,Out) MidasOperand *In; MidasOperand *Out; { if (strcmp(In->Value.P,"True" ) == 0) Out->Value.I = TRUE; else if (strcmp(In->Value.P,"true" ) == 0) Out->Value.I = TRUE; else if (strcmp(In->Value.P,"TRUE" ) == 0) Out->Value.I = TRUE; else if (strcmp(In->Value.P,"False") == 0) Out->Value.I = FALSE; else if (strcmp(In->Value.P,"false") == 0) Out->Value.I = FALSE; else if (strcmp(In->Value.P,"FALSE") == 0) Out->Value.I = FALSE; else return FALSE; return TRUE; } static Boolean MidasConvertStringXmString(In,Out) MidasOperand *In; MidasOperand *Out; { Out->Value.P = (XtPointer) MidasCharToString(In->Value.P); Out->Dynamic = TRUE; /* Need special destructor for this ??? */ return TRUE; } static Boolean MidasConvertStringUpperName(In,Out) MidasOperand *In; MidasOperand *Out; { char *p = In->Value.P; for (; *p != '\0'; p++) *p = toupper(*p); Out->Value.P = In->Value.P; Out->Dynamic = In->Dynamic; In->Dynamic = FALSE; return TRUE; } static Boolean MidasConvertStringName(In,Out) MidasOperand *In; MidasOperand *Out; { Out->Value.P = In->Value.P; Out->Dynamic = In->Dynamic; In->Dynamic = FALSE; return TRUE; } static Boolean MidasConvertStringInt(In,Out) MidasOperand *In; MidasOperand *Out; { char *End; Out->Value.P = (XtPointer) strtol((char *)In->Value.P,&End,10); return (*End == '\0'); } static Boolean MidasConvertStringFloat(In,Out) MidasOperand *In; MidasOperand *Out; { char *End; Out->Value.F = strtod(In->Value.P,&End); return (*End == '\0'); } static Boolean MidasConvertStringWidget(In,Out) MidasOperand *In; MidasOperand *Out; { Out->Value.P = (XtPointer) MidasFindWidget(In->Value.P); return TRUE; } static Boolean MidasConvertStringIcon(In,Out) MidasOperand *In; MidasOperand *Out; { Out->Value.P = (XtPointer) MidasFetchIcon(In->Value.P,NULL); return TRUE; } static Boolean MidasConvertStringClass(In,Out) MidasOperand *In; MidasOperand *Out; { ListItem *i = MidasFindItemInList(&MidasClassList,In->Value.P); if (i == 0) return FALSE; Out->Value.P = i->Pointer; return TRUE; } void MidasDeclareClass(Class) CoreClassPart *Class; { ListItem *i = MidasFindItemInList(&MidasClassList,Class->class_name); if (i==0) { i = MidasAddItemToList(&MidasClassList,Class->class_name); i->Pointer = Class; } } static Boolean MidasConvertStringAny(In,Out) MidasOperand *In; MidasOperand *Out; { return FALSE; } static Boolean MidasConvertIntNumber(In,Out) MidasOperand *In; MidasOperand *Out; { *Out = *In; return TRUE; } static Boolean MidasConvertFloatNumber(In,Out) MidasOperand *In; MidasOperand *Out; { *Out = *In; return TRUE; } static Boolean MidasConvertIntFloat(In,Out) MidasOperand *In; MidasOperand *Out; { Out->Value.F = (float) In->Value.I; return TRUE; } /* * * Converting shorts to Ints in a portable way is not trivial * */ static Boolean MidasConvertIntShort(In,Out) MidasOperand *In; MidasOperand *Out; { if (In->Value.I > 32767 || In->Value.I < -32768) return FALSE; Out->Value.I = In->Value.I; return TRUE; } static Boolean MidasConvertShortInt(In,Out) MidasOperand *In; MidasOperand *Out; { printf("%x\n",In->Value.I); printf("%x\n",In->Value.S); Out->Value.I = (int) In->Value.S; printf("%x\n",Out->Value.I); return TRUE; } static Boolean MidasConvertStringNumber(In,Out) MidasOperand *In; MidasOperand *Out; { Boolean ok; ok = MidasConvertStringInt(In,Out); if (ok) { Out->Type = MInt; return ok; } ok = MidasConvertStringFloat(In,Out); if (ok) { Out->Type = MFloat; return ok; } return ok; } static Boolean MidasConvertStringCursor(In,Out) MidasOperand *In; MidasOperand *Out; { int r; if (strcmp(In->Value.P,"" ) == 0) r = 0; else if (strcmp(In->Value.P,"watch") == 0) r = XC_watch; else if (strcmp(In->Value.P,"trek" ) == 0) r = XC_trek; else return False; Out->Value.I = r; return True; } static Boolean MidasConvertStringAtom(In,Out) MidasOperand *In; MidasOperand *Out; { XrmValue source, dest; Atom result; Widget ActiveWidget = MidasGetActiveWidget(); source.size = strlen(In->Value.P) + 1; source.addr = In->Value.P; dest.size = sizeof(Atom); dest.addr = (XtPointer) &result; XtConvertAndStore(ActiveWidget,XtRString,&source,XtRAtom,&dest); Out->Value.P = (XtPointer) result; return True; } void MidasConvertInit() { ConverterList = NullList; MidasClassList = NullList; MidasDeclareStringConverter("name", MidasConvertStringName); MidasDeclareStringConverter("upname", MidasConvertStringUpperName); MidasDeclareStringConverter("Widget", MidasConvertStringWidget); MidasDeclareStringConverter("list", MidasConvertStringList); MidasDeclareStringConverter("Int", MidasConvertStringInt); MidasDeclareStringConverter("Float", MidasConvertStringFloat); MidasDeclareStringConverter("Icon", MidasConvertStringIcon); MidasDeclareStringConverter("Boolean", MidasConvertStringBoolean); MidasDeclareStringConverter("any", MidasConvertStringAny); MidasDeclareStringConverter("XmString", MidasConvertStringXmString); MidasDeclareStringConverter("MenuWidget", MidasConvertStringWidget); MidasDeclareStringConverter("Pixmap", MidasConvertStringIcon); MidasDeclareStringConverter("Cursor", MidasConvertStringCursor); MidasDeclareStringConverter("Class", MidasConvertStringClass); MidasDeclareStringConverter("Atom", MidasConvertStringAtom); /* * Although the intrinsics have converters for Shell*Dim they rely * an ACTUALLY getting a shell widget. Thus we need these two extra * lines here (otherwise MidasWWW show source can bomb). */ MidasDeclareStringConverter("ShellVertDim", MidasConvertStringInt); MidasDeclareStringConverter("ShellHorizDim", MidasConvertStringInt); MidasDeclareConverter("Boolean","String", MidasConvertBooleanString); MidasDeclareConverter("Boolean","name", MidasConvertBooleanString); MidasDeclareConverter("Int","String", MidasConvertIntString); MidasDeclareConverter("Int","name", MidasConvertIntString); MidasDeclareConverter("Float","String", MidasConvertFloatString); MidasDeclareConverter("String","Number", MidasConvertStringNumber); MidasDeclareConverter("Int","Number", MidasConvertIntNumber); MidasDeclareConverter("Float","Number", MidasConvertFloatNumber); MidasDeclareConverter("Int","Float", MidasConvertIntFloat); MidasDeclareConverter("Int","Short", MidasConvertIntShort); MidasDeclareConverter("Int","HorizontalDimension",MidasConvertIntShort); MidasDeclareConverter("Int","VerticalDimension" ,MidasConvertIntShort); MidasDeclareConverter("Int","ShellHorizPos" ,MidasConvertIntShort); MidasDeclareConverter("Int","ShellVertPos" ,MidasConvertIntShort); MidasDeclareConverter("HorizontalDimension","Int",MidasConvertShortInt); MidasDeclareConverter("VerticalDimension","Int" ,MidasConvertShortInt); MidasDeclareConverter("HorizontalDimension","Number",MidasConvertShortInt); MidasDeclareConverter("VerticalDimension","Number" ,MidasConvertShortInt); MidasDeclareFunction("CONVERT(any,name)",MidasConvertForce); MidasClassInit(); } �������������������������������������������������������������������midaswww-2.1/midasdeclare.c�������������������������������������������������������������������������100666 � 21345 � 173 � 40701 5554674762 14233� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <Mrm/MrmAppl.h> /* Motif Toolkit and MRM */ #include "midaslist.h" #include "midaserrors.h" #include "midasoperand.h" #include "midasconvert.h" #include <ctype.h> MidasOperand MidasEvaluateExpression(); ConvertBlock *MidasFindStringConverter(); struct ActionBlock { void (*ActionRtn)(); }; typedef struct ActionBlock ActionBlock; struct ConvertLink { List *CList; ConvertBlock *CLink; }; typedef struct ConvertLink ConvertLink; static List TopLevelCommandList; static List FunctionList; static List QualifierList; static List *QualifierLists[20]; static List **CurrentQualifierList = QualifierLists; static char *MidasRemoveSpuriousJunk(in) char *in; { /* * BUG: This should also support {&*aaa} */ int l = strlen(in); if (*in == '&') { in++; l--; } if (*in == '*') { in++; l--; } if (*in == '{') { char *p = strncpy(XtMalloc(l-1),++in,l-2); *(p+l-2) = '\0'; return p; } else if (l > 3 && strcmp("...",in+l-3) == 0) { char *p = strncpy(XtMalloc(l-2),in,l-3); *(p+l-3) = '\0'; return p; } else return XtNewString(in); } static char *MidasRestOfLine(i,VerbVector,VerbCount) int i; char *VerbVector[]; int VerbCount; { char *p; for (p = VerbVector[i]; p < VerbVector[VerbCount-1]; p++) if (*p == '\0') *p = ' '; return VerbVector[i]; } void MidasTokenizeCommand(command,verbVector,verbCount,maxVerbs,delimiters) char *command; char *verbVector[]; int *verbCount; int maxVerbs; char *delimiters; { char *p; *verbCount = 0; for (p=command;;) { int quotes = 0, paren = 0; for (; *p == ' '; p++); if (*p == '\0') break; if (*verbCount == maxVerbs) MidasError("Too many tokens found in line"); verbVector[(*verbCount)++] = p; for (; (paren > 0 || quotes || strchr(delimiters,*p) == 0) && *p != '\0'; p++) if (*p == '"') quotes = !quotes; else if (*p == '(') paren++; else if (*p == ')') paren--; if (*p == '\0') break; *p++ = '\0'; } } void MidasDeclareInit() { TopLevelCommandList = NullList; FunctionList = NullList; QualifierList = NullList; } void MidasDeclare(CList,command,ActionRtn,delimiters) List *CList; char *command; void (*ActionRtn)(); char *delimiters; { ActionBlock *ab; ConvertLink *cl; ListItem *item; int verbCount , i; char *verbVector[20]; MidasTokenizeCommand(command,verbVector,&verbCount, XtNumber(verbVector),delimiters); for (i=0; i < verbCount; i++) { char *token = verbVector[i]; Boolean allupper = TRUE; char *p = token; if (*token == '\0') continue; for (; *p != '\0'; p++) if (islower(*p)) { allupper = FALSE; break; } item = MidasFindItemInList(CList,token); if (item == 0) { item = MidasAddItemToList(CList,token); cl = XtNew(ConvertLink); item->Pointer = cl; cl->CList = MidasCreateEmptyList(""); if (allupper) cl->CLink = 0; else { MidasType type = MidasRemoveSpuriousJunk(token); cl->CLink = MidasFindStringConverter(type); XtFree(type); } } cl = item->Pointer; CList = cl->CList; } item = MidasFindItemInList(CList,"endofcommand"); if (item == 0) { item = MidasAddItemToList(CList,"endofcommand"); item->Pointer = XtNew(ActionBlock); } ab = item->Pointer; ab->ActionRtn = ActionRtn; } void MidasDeclareVerb(command,ActionRtn) char *command; void (*ActionRtn)(); { char *buffer = XtNewString(command); MidasDeclare(&TopLevelCommandList,buffer,ActionRtn," "); XtFree(buffer); } void MidasDeclareFunction(command,ActionRtn) char *command; void (*ActionRtn)(); { char *buffer = XtNewString(command); MidasDeclare(&FunctionList,buffer,ActionRtn,"(,)"); XtFree(buffer); } MidasDeclareQualifier(qualifier,type) char *qualifier; MidasType type; { ListItem *item; ConvertBlock *ab,*cab; item = MidasAddItemToList(&QualifierList,qualifier); if (*type == '\0') item->Pointer = 0; else { cab = MidasFindStringConverter(type); ab = XtNew(ConvertBlock); *ab = *cab; item->Pointer = ab; } } ActionBlock *MidasPrepareToDispatch(CList,command,delimiters,Argv,Argi,ArgC) List *CList; char *command; char *delimiters; MidasOperand Argv[10]; Boolean Argi[10]; int *ArgC; { int verbCount , i, Argc = 0; char *verbVector[100]; ListItem *item = 0; void *result = 0; char *rest = 0; MidasTokenizeCommand(command,verbVector,&verbCount, XtNumber(verbVector),delimiters); for (i=0; i < verbCount; i++) { char *c , *token = XtNewString(verbVector[i]); for (c=token ; *c != '\0' ; c++ ) *c = toupper(*c); item = MidasFindItemInList(CList,token); XtFree(token); if (item != 0) { ConvertLink *cl = item->Pointer; CList = cl->CList; } else { for (item = CList->First; item != 0; item = item->Next ) { ConvertLink *cl = item->Pointer; ConvertBlock *ab = cl->CLink; char *entry = item->Entry; Boolean indirect = (*entry == '&'); if (indirect) entry++; if (ab != 0) { MidasOperand Temp; if (strcmp("...",item->Entry+strlen(entry)-3)) { if (*entry == '*') { char *p = verbVector[i]; if (*p == '"') { p++; *(p + strlen(p) - 1) = '\0'; } Temp.Value.P = (XtPointer) p; Temp.Dynamic = FALSE; Temp.Type = MString; } else Temp = MidasEvaluateExpression(verbVector[i]); } else { rest = MidasRestOfLine(i,verbVector,verbCount); if (*entry == '*') { char *p = rest; if (*p == '"') { p++; *(p + strlen(p) - 1) = '\0'; } Temp.Value.P = (XtPointer) p; Temp.Dynamic = FALSE; Temp.Type = MString; } else Temp = MidasEvaluateExpression(rest); i = verbCount; } /* * if (strcmp(ab->FromType,Temp.Type) == 0) ab->ConvertRtn(&Temp); * */ if (strcmp(ab->ToType,Temp.Type)) MidasConvertOperand(&Temp,ab->ToType); Argv[Argc ] = Temp; Argi[Argc++] = indirect; CList = cl->CList; break; } } } } /* Skip optional arguments until end of command */ if (item != 0) { for (; (item = MidasFindItemInList(CList,"endofcommand")) == 0;) { for (item = CList->First; item != 0; item = item->Next ) if (*item->Entry == '{') { ConvertLink *cl = item->Pointer; Argv[Argc].Value.P = NULL; Argv[Argc].Dynamic = FALSE; Argv[Argc].Type = MInt; Argi[Argc] = FALSE; Argc++; CList = cl->CList; break; } if (item == 0) MidasError("Premature end of command found"); } } if (item == 0) { for (i=0; i<Argc; i++) if (Argv[i].Dynamic) XtFree((char *)Argv[i].Value.P); MidasError("Syntax error in expression"); } *ArgC = Argc; return item->Pointer; } MidasOperand MidasCallFunction(in) char **in; { MidasOperand result; if (setjmp(JmpEnv[NumJump++]) == 0) { char buffer[2000]; char *p = *in, *q = buffer; int n=0 , m=0; for (; *p != '\0'; p++) { *q = *p; if (*p == '"') m = !m; else if (!m && *p == '(') { if (++n == 1) *q = ' '; } else if (!m && *p == ')') { if (--n == 0) break; } q++; } if (n != 0) MidasError("Parentheses error in expression: %s",*in+1); if (m != 0) MidasError("Mismatched quotes in expression: %s",*in+1); *q = '\0'; { MidasOperand Argv[10]; Boolean Argi[10]; int Argc, i; ActionBlock *ab = MidasPrepareToDispatch(&FunctionList,buffer," ,",Argv,Argi,&Argc); MidasOperand (*routine)() = (MidasOperand (*)()) ab->ActionRtn; XtPointer A[10]; for (i=0; i<Argc; i++) if (Argi[i]) A[i]=(XtPointer) &Argv[i].Value.P; else A[i]=Argv[i].Value.P; switch (Argc) { case 0: result = routine(); break; case 1: result = routine(A[0]); break; case 2: result = routine(A[0],A[1]); break; case 3: result = routine(A[0],A[1],A[2]); break; case 4: result = routine(A[0],A[1],A[2],A[3]); break; case 5: result = routine(A[0],A[1],A[2],A[3],A[4]); break; case 6: result = routine(A[0],A[1],A[2],A[3],A[4],A[5]); break; case 7: result = routine(A[0],A[1],A[2],A[3],A[4],A[5],A[6]); break; case 8: result = routine(A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7]); break; case 9: result = routine(A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7],A[8]); break; case 10: result = routine(A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7],A[8],A[9]); } for (i=0; i<Argc; i++) if (Argv[i].Dynamic) XtFree((char *)Argv[i].Value.P); } *in = p; NumJump--; } else { MidasError("Error invoking function: %s",*in); } return result; } static List *MidasFindCommandQualifiers(QL,command) List *QL; char *command; { char *p, *q, *r, delim; int Quotes = 0, paren = 0; ListItem *item; ListItem *new; List *CurrentQualifierList = NULL; for (p=command; *p != '\0'; p++) if (*p == '"') Quotes = 1 - Quotes; else if (!Quotes && *p == '(') paren++; else if (!Quotes && *p == ')') paren--; else if (!Quotes && paren == 0 && *p == ':') { for (q = p+1 ; *q != ' ' && *q != ':' && *q != '=' && *q != '\0'; q++) *q = toupper(*q); delim = *q; *q = '\0'; item = MidasFindItemInList(QL,p+1); if (item == 0) MidasError("Unrecognized qualifier %s",p+1); if (!CurrentQualifierList) CurrentQualifierList = MidasCreateEmptyList("CurrentQualifiers"); new = MidasAddItemToList(CurrentQualifierList,p+1); if (delim == '=') { MidasOperand *Temp = XtNew(MidasOperand); for (r = q + 1; *r != ':' && *r != '\0' && *r != ' '; r++); delim = *r; *r = '\0'; new->Pointer = Temp; Temp->Type = MString; Temp->Dynamic = TRUE; Temp->Value.P = (XtPointer) XtNewString(q+1); } else { r = q; new->Pointer = 0; } for (; p < r ; p++) *p=' '; *p = delim; p--; } return CurrentQualifierList; } void MidasDispatchCommand(command) char *command; { char *p; char *buffer = XtNewString(command); List *QL = 0; ListItem *item; if (setjmp(JmpEnv[NumJump++]) == 0) { QL = MidasFindCommandQualifiers(&QualifierList,buffer); *++CurrentQualifierList = QL; { MidasOperand Argv[10]; Boolean Argi[10]; int Argc, i; ActionBlock *ab = MidasPrepareToDispatch(&TopLevelCommandList,buffer," ",Argv,Argi,&Argc); XtPointer A[10]; for (i=0; i<Argc; i++) if (Argi[i]) A[i]=(XtPointer) &Argv[i].Value.P; else A[i]=Argv[i].Value.P; switch (Argc) { case 0: ab->ActionRtn(); break; case 1: ab->ActionRtn(A[0]); break; case 2: ab->ActionRtn(A[0],A[1]); break; case 3: ab->ActionRtn(A[0],A[1],A[2]); break; case 4: ab->ActionRtn(A[0],A[1],A[2],A[3]); break; case 5: ab->ActionRtn(A[0],A[1],A[2],A[3],A[4]); break; case 6: ab->ActionRtn(A[0],A[1],A[2],A[3],A[4],A[5]); break; case 7: ab->ActionRtn(A[0],A[1],A[2],A[3],A[4],A[5],A[6]); break; case 8: ab->ActionRtn(A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7]); break; case 9: ab->ActionRtn(A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7],A[8]); break; case 10: ab->ActionRtn(A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7],A[8],A[9]); } for (i=0; i<Argc; i++) if (Argv[i].Dynamic) XtFree((char *) Argv[i].Value.P); } if (QL) { for (item = QL->First; item != 0; item = item->Next) { MidasOperand *Temp = item->Pointer; if (Temp != 0 && Temp->Dynamic) XtFree((char *) Temp->Value.P); } MidasDestroyList(QL); } CurrentQualifierList--; XtFree(buffer); NumJump--; } else { if (QL != 0) { for (item = QL->First; item != 0; item = item->Next) { MidasOperand *Temp = item->Pointer; if (Temp != 0 && Temp->Dynamic) XtFree((char *) Temp->Value.P); } if (*CurrentQualifierList) MidasDestroyList(*CurrentQualifierList); CurrentQualifierList--; } XtFree(buffer); MidasError("Illegal command"); } } Boolean MidasGetQualifier(Qualifier,Result) char *Qualifier; XtPointer *Result; { ConvertBlock *ab; ListItem *qitem, *item; if (*CurrentQualifierList == 0) return FALSE; item = MidasFindItemInList(*CurrentQualifierList, Qualifier); if (item == 0) return FALSE; qitem = MidasFindItemInList(&QualifierList,Qualifier); ab = qitem->Pointer; if (ab != 0) { MidasOperand *Temp = item->Pointer; /* * Speed up temporarily removed. * if (strcmp(Temp->Type,ab->FromType) == 0) ab->ConvertRtn(Temp); * */ if (strcmp(Temp->Type,ab->ToType)) MidasConvertOperand(Temp,ab->ToType); *Result = Temp->Value.P; } return TRUE; } void MidasSetQualifier(Qualifier,Value) char *Qualifier; char *Value; { ActionBlock *ab; ListItem *qitem, *item; if (*CurrentQualifierList == 0) *CurrentQualifierList = MidasCreateEmptyList("CurrentQualifiers"); item = MidasFindItemInList(*CurrentQualifierList, Qualifier); if (item == 0) { item = MidasAddItemToList(*CurrentQualifierList, Qualifier); } else { if (item->Pointer != 0) XtFree(item->Pointer); } if (Value == NULL) item->Pointer = NULL; else { MidasOperand *Operand = XtNew(MidasOperand); item->Pointer = Operand; Operand->Type = MString; Operand->Dynamic = TRUE; Operand->Value.P = (XtPointer) XtNewString(Value); } } ���������������������������������������������������������������midaswww-2.1/midasevaluate.c������������������������������������������������������������������������100666 � 21345 � 173 � 26177 5554674762 14455� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <Mrm/MrmAppl.h> /* Motif Toolkit and MRM */ #include "midasoperand.h" #include <string.h> extern Widget ActiveWidget; MidasOperand MidasGetIngotValue(); MidasOperand MidasCallFunction(); XtPointer MidasFindIngot(); static char *UnaryOperatorCharacters = "+-"; static char *BinaryOperatorCharacters = "+-*/><!=&|"; static MidasOperator BinaryOperators[] = { {"==", 6, MString, MString, MBoolean}, {"!=", 6, MString, MString, MBoolean}, {"<=", 7, MNumber, MNumber, MBoolean}, {">=", 7, MNumber, MNumber, MBoolean}, {"&&", 1, MBoolean, MBoolean, MBoolean}, {"||", 1, MBoolean, MBoolean, MBoolean}, {"//", 9, MInt, MInt, MInt}, {"++",10, MString, MString, MString}, {"<" , 7, MNumber, MNumber, MBoolean}, {">" , 7, MNumber, MNumber, MBoolean}, {"+" , 8, MNumber, MNumber, MNumber}, {"-" , 8, MNumber, MNumber, MNumber}, {"*" , 9, MNumber, MNumber, MNumber}, {"/" , 9, MNumber, MNumber, MNumber}}; static char *SBool[2] = {"False" , "True"}; MidasOperand MidasApplyOperation(Op1,Op2,Op) MidasOperand Op1; MidasOperand Op2; MidasOperator *Op; { MidasOperand Result; Boolean Float = FALSE; char *v1,*v2,*v; float f; Result.Dynamic = FALSE; if (strcmp(Op1.Type,Op->Op1)) MidasConvertOperand(&Op1,Op->Op1); if (strcmp(Op2.Type,Op->Op2)) MidasConvertOperand(&Op2,Op->Op2); if (strcmp(Op->Op1,MNumber) == 0) { if (strcmp(Op1.Type,MFloat) == 0) Float = TRUE; else if (strcmp(Op2.Type,MFloat) == 0) Float = TRUE; if (Float && strcmp(Op1.Type,MFloat)) MidasConvertOperand(&Op1,MFloat); if (Float && strcmp(Op2.Type,MFloat)) MidasConvertOperand(&Op2,MFloat); } v1 = (char *) Op1.Value.P; v2 = (char *) Op2.Value.P; if (strcmp(Op->Symbol,"==") == 0) v = (char *) (strcmp(v1,v2) == 0); else if (strcmp(Op->Symbol,"!=") == 0) v = (char *) (strcmp(v1,v2) != 0); else if (strcmp(Op->Symbol,"&&") == 0) v = v1 ? v2 : (char *) FALSE; else if (strcmp(Op->Symbol,"||") == 0) v = v1 ? (char *) TRUE : v2; else if (strcmp(Op->Symbol,"++") == 0) { v = XtMalloc(strlen(v1)+strlen(v2)+1); strcpy(v,v1); strcat(v,v2); Result.Dynamic = TRUE; } else if (strcmp(Op->Symbol,"//") == 0) { if (!v2) MidasError("Integer division by zero"); v = (char *) (((int) v1) / ((int) v2)); } else if (Float) { float f1 = Op1.Value.F; float f2 = Op2.Value.F; if (strcmp(Op->Symbol,">=") == 0) f = f1 >= f2; else if (strcmp(Op->Symbol,"<=") == 0) f = f1 <= f2; else if (strcmp(Op->Symbol,">" ) == 0) f = f1 > f2; else if (strcmp(Op->Symbol,"<" ) == 0) f = f1 < f2; else if (strcmp(Op->Symbol,"-") == 0) f = f1 - f2; else if (strcmp(Op->Symbol,"+") == 0) f = f1 + f2; else if (strcmp(Op->Symbol,"*") == 0) f = f1 * f2; else if (strcmp(Op->Symbol,"/") == 0) { if (f2 == 0) MidasError("Division by zero"); f = f1 / f2; } else MidasError("Midas Internal Error: MidasApplyOperation"); } else { if (strcmp(Op->Symbol,">=") == 0) v = (char *) (((int) v1) >= ((int) v2)); else if (strcmp(Op->Symbol,"<=") == 0) v = (char *) (((int) v1) <= ((int) v2)); else if (strcmp(Op->Symbol,">" ) == 0) v = (char *) (((int) v1) > ((int) v2)); else if (strcmp(Op->Symbol,"<" ) == 0) v = (char *) (((int) v1) < ((int) v2)); else if (strcmp(Op->Symbol,"-") == 0) v = (char *) (((int) v1) - ((int) v2)); else if (strcmp(Op->Symbol,"+") == 0) v = (char *) (((int) v1) + ((int) v2)); else if (strcmp(Op->Symbol,"*") == 0) v = (char *) (((int) v1) * ((int) v2)); else if (strcmp(Op->Symbol,"/") == 0) { float r; if (!v2) MidasError("Division by zero"); if (((int) v1) % ((int) v2) == 0) v = (char *) (((int) v1) / ((int) v2)); else { float f1 = Op1.Value.F; float f2 = Op2.Value.F; f = f1 / f2; Float = TRUE; } } else MidasError("Midas Internal Error: MidasApplyOperation"); } if (Op1.Dynamic) XtFree((char *)Op1.Value.P); if (Op2.Dynamic) XtFree((char *)Op2.Value.P); if (Float) Result.Value.F = f; else Result.Value.P = v; if (strcmp(Op->Result,MNumber) == 0) Result.Type = Float ? MFloat : MInt; else Result.Type = Op->Result; return Result; } static MidasOperand MidasEvaluateFunction(in,outlen) char *in; int *outlen; { MidasOperand Temp; char *q = in; Temp = MidasCallFunction(&q); *outlen = q - in + 1; return Temp; } MidasOperand MidasEvaluateExpression(in) char *in; { MidasStack Stack[10]; MidasStack *SP = &Stack[0]; MidasOperator Dummy, EndOfLine, *CurrentOperator; char Unary = '\0'; #ifdef debug printf("Evaluating: %s\n",in); #endif Dummy.Precedence = -1; EndOfLine.Precedence = 0; EndOfLine.Symbol = ""; SP->Op = &Dummy; for (;;) { int l1; if (*in != '\0' && strchr(UnaryOperatorCharacters,*in) != 0) Unary = *in++; /* Tokens in expressions may be: a) sub-expressions (in parentheses) b) Function invokations c) Quoted strings d) Ingots e) Unquoted strings First deal with Sub-expressions */ if (*in == '(') { int n = 1, q = 0; char *p = in + 1; for (; *p != '\0'; p++) { if (*p == '"') q = !q; else if (!q && *p == '(') n++; else if (!q && *p == ')') if (--n == 0) break; } if (q != 0) MidasError("Mismatched quotes in expression: %s",in); if (n != 0) MidasError("Parenthesis error in expression: %s",in); *p = '\0'; in++; SP->Operand = MidasEvaluateExpression(in); l1 = p - in + 1; } /* Now deal with quoted strings */ else if (*in == '"') { int q = 1; char *p = in + 1; for (; *p != '\0'; p++) if (*p == '"') { q = 0; break; } if (q != 0) MidasError("Mismatched quotes in expression: %s",in); *p = '\0'; in++; SP->Operand.Type = MString; SP->Operand.Dynamic = FALSE; SP->Operand.Value.P = (XtPointer) in; l1 = p - in + 1; } else /* Could be a function invokation */ { char *l2 = strchr(in,'('); l1 = strcspn(in,BinaryOperatorCharacters); if (l2 != NULL && l2 < in+l1) { SP->Operand = MidasEvaluateFunction(in,&l1); } else { /* Or it could be an ingot */ XtPointer Ingot; char temp = *(in + l1); *(in + l1) = '\0'; Ingot = MidasFindIngot(ActiveWidget,in); if (Ingot != 0) SP->Operand = MidasGetIngotValue(Ingot); else { SP->Operand.Type = MString; SP->Operand.Dynamic = FALSE; SP->Operand.Value.P = (XtPointer) in; } *(in + l1) = temp; } } /* Now deal with any pending unary operator */ if (Unary == '-') { MidasConvertOperand(&SP->Operand,MInt); SP->Operand.Value.I = -(int) SP->Operand.Value.I; } if (*(in+l1) == '\0') CurrentOperator = &EndOfLine; else { int op; for (op = 0; op < XtNumber(BinaryOperators); op++) if (strncmp(in+l1,BinaryOperators[op].Symbol, strlen(BinaryOperators[op].Symbol)) == 0) break; if (op == XtNumber(BinaryOperators)) MidasError("Unrecognised operator %s in expression",in+l1); CurrentOperator = &BinaryOperators[op]; } *(in+l1) = '\0'; in += l1 + strlen(CurrentOperator->Symbol); for (; CurrentOperator->Precedence <= SP->Op->Precedence; ) { (SP-1)->Operand = MidasApplyOperation((SP-1)->Operand,SP->Operand,SP->Op); SP--; } if (strcmp(CurrentOperator->Symbol,"&&") == 0) { if (strcmp(SP->Operand.Type,MBoolean)) MidasConvertOperand(&SP->Operand,MBoolean); if (SP->Operand.Value.I == FALSE) break; } else if (strcmp(CurrentOperator->Symbol,"||") == 0) { if (strcmp(SP->Operand.Type,MBoolean)) MidasConvertOperand(&SP->Operand,MBoolean); if (SP->Operand.Value.I == TRUE) break; } if (CurrentOperator == &EndOfLine) break; (++SP)->Op = CurrentOperator; } #ifdef debug printf ("Result is %s = ",SP->Operand.Type); if (strcmp(SP->Operand.Type,MString) == 0) printf("%s\n",SP->Operand.Value.I); else printf("%d\n",SP->Operand.Value.I); #endif return SP->Operand; } void MidasForceEvaluateExpression(in,out) char **in; char **out; { MidasOperand Result; char temp, *p = *in+1, *pp, *buffer; int q = 0, m = 0; for (; *p != '\0' && *p != '\n'; p++) { if (*p == '"') { if (m == 0 && !q) break; else q = !q; } else if (!q && *p == '(') m++; else if (!q && *p == ')') m--; else if (!q && m == 0 && *p == ' ') break; } temp = *p; *p = '\0'; buffer = XtNewString(*in+1); *p = temp; Result = MidasEvaluateExpression(buffer); if (strcmp(Result.Type,MString) != 0) MidasConvertOperand(&Result,MString); for (pp = Result.Value.P; *pp != '\0';) *(*out)++ = *pp++; if (Result.Dynamic) XtFree((char *)Result.Value.P); XtFree(buffer); *in = p - 1; } int MidasConvertToInteger(Operand) MidasOperand Operand; { if (strcmp(Operand.Type,MInt)) MidasConvertOperand(&Operand,MInt); return Operand.Value.I; } char *MidasConvertToString(Operand) MidasOperand Operand; { if (strcmp(Operand.Type,MString)) MidasConvertOperand(&Operand,MString); return XtNewString(Operand.Value.P); } char *MidasConvertToBoolean(Operand) MidasOperand Operand; { if (strcmp(Operand.Type,MBoolean)) MidasConvertOperand(&Operand,MString); return Operand.Value.P; } MidasOperand MidasConvertFromString(string) char *string; { MidasOperand Temp; Temp.Type = MString; Temp.Dynamic = TRUE; Temp.Value.P = XtNewString(string); return Temp; } MidasOperand MidasConvertFromInteger(i) int i; { MidasOperand Temp; Temp.Type = MInt; Temp.Dynamic = FALSE; Temp.Value.I = i; return Temp; } MidasOperand MidasConvertFromBoolean(b) int b; { MidasOperand Temp; Temp.Type = MBoolean; Temp.Dynamic = FALSE; Temp.Value.I = (b != 0); return Temp; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midasingot.c���������������������������������������������������������������������������100666 � 21345 � 173 � 34430 5554674762 13756� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <Mrm/MrmAppl.h> /* Motif Toolkit and MRM */ #include "midaslist.h" #include "midasoperand.h" #include "midaswidget.h" #include "midasshell.h" #include <string.h> MidasOperand MidasConvertFromInteger(); MidasOperand MidasConvertFromString(); MidasOperand MidasConvertFromBoolean(); MidasWidget *MidasWidgetToMW(); MidasShell *MidasGetShell(); char *MidasGetWidgetName(); char *MidasConvertToString(); static char *Option = "ExecuteWhenCreated"; typedef struct _IR {char *Command; Boolean ExecuteWhenCreated; } IngotParm; #define Offset(field) XtOffsetOf(IngotParm,field) static XtResource resources[] = { {"midasIngots","MidasIngots",XtRString ,sizeof(char *) ,Offset(Command) ,XtRImmediate,(XtPointer)0}, {"midasIngots","MidasIngots",XtRBoolean,sizeof(Boolean),Offset(ExecuteWhenCreated),XtRImmediate,(XtPointer)True}}; #undef Offset static List *IngotRList; struct Ingot { Boolean Valued; MidasOperand Operand; char *Command; Widget Parent; struct Ingot *ValueOwner; List *CallbackList; Boolean ExecuteWhenCreated; }; typedef struct Ingot Ingot; static XtConvertArgRec ConvertWidgetArg[] = {{XtBaseOffset,0,sizeof(Widget)}}; Ingot *MidasFindIngotHere(w,Name) Widget w; char *Name; { MidasWidget *mw = MidasWidgetToMW(w); ListItem *i; List *TList = mw->IngotList; if (TList != NULL) { i = MidasFindItemInList(TList,Name); if (i != 0) return i->Pointer; } return 0; } Ingot *MidasFindIngot(w,Name) Widget w; char *Name; { MidasShell *ms = MidasGetShell(w); for (;; w = XtParent(w)) { Ingot *T = MidasFindIngotHere(w,Name); if (T != 0) return T; if (w == ms->Widget) break; } return 0; } static void MidasDestroyIngot(T) Ingot *T; /* This routine is called from MidasDestroyIngots during the destruction of a widget that has ingots. It assumes that all child widgets are also being destroyed and therefore does not worry about them. */ { if (!T->Valued) { Ingot *ValueOwner = T->ValueOwner; List *CallbackList = ValueOwner->CallbackList; if (CallbackList != 0) { ListItem *item; for (item = CallbackList->First; item != 0 ; item = item->Next) { if (item->Pointer == T) { item->Pointer = 0; MidasRemoveItemFromList(CallbackList,item); break; } } } } else if (T->Operand.Dynamic) XtFree((char *)T->Operand.Value.P); if (T->CallbackList != 0) MidasDestroyList(T->CallbackList); XtFree(T->Command); } void MidasDestroyIngots(mw) MidasWidget *mw; /* * This routine is called whenever a widget that has ingots * goes and gets itself destroyed. */ { ListItem *item; List *TList = mw->IngotList; for (item = TList->First; item != 0; item = item->Next) { Ingot *T = item->Pointer; MidasDestroyIngot(T); item->Pointer = 0; } MidasDestroyList(TList); } Ingot *MidasCreateIngot(w,Name) Widget w; char *Name; /* If this ingot does not already have an explicit ingot of this name it is created. A pointer to the (newly created) ingot is returned; A created ingot initially has no value and no callbacks; */ { MidasWidget *mw = MidasWidgetToMW(w); Ingot *T; ListItem *item; List *TList = mw->IngotList; if (TList == NULL) { mw->IngotList = TList = MidasCreateEmptyList(XtName(w)); } item = MidasFindItemInList(TList,Name); if (item == 0) { T = XtNew(Ingot); T->CallbackList = 0; T->Command = 0; T->Parent = w; T->ValueOwner = 0; T->Valued = FALSE; T->ExecuteWhenCreated = TRUE; item = MidasAddItemToList(TList,Name); item->Pointer = T; } else T = item->Pointer; return T; } void MidasInheritIngotValue(T,Name) Ingot *T; char *Name; { Ingot *ValueOwner; MidasShell *ms = MidasGetShell(T->Parent); if (strncmp(Name,"Midas",5) && ms->Widget != T->Parent) ValueOwner = MidasFindIngot(XtParent(T->Parent),Name); else ValueOwner = 0; if (ValueOwner == 0) { T->Valued = TRUE; T->Operand.Value.P = (XtPointer)""; T->Operand.Dynamic = FALSE; T->Operand.Type = MString; } else { if (ValueOwner->Valued == 0) ValueOwner = ValueOwner->ValueOwner; T->ValueOwner = ValueOwner; } #ifdef debug if (T->Valued) printf("Ingot %s in %s did not ingerit a value\n",Name,XtName(T->Parent)); else printf("Ingot %s inherited value %s from %s\n",Name,ValueOwner->Operand.Value, XtName(ValueOwner->Parent)); #endif } void MidasSetIngotValue(T,Operand) Ingot *T; MidasOperand Operand; /* This routine sets the value of the specified ingot and calls the value changed callbacks belonging to the ingot */ { if (T->Valued && T->Operand.Dynamic) XtFree((char *)T->Operand.Value.P); T->Operand = Operand; /* * BIG KLUGE .. must be fixed soon */ if (strcmp(Operand.Type,MString)==0 && Operand.Dynamic==FALSE) { T->Operand.Value.P = XtNewString(Operand.Value.P); T->Operand.Dynamic = TRUE; } T->Valued = TRUE; if (T->Command != 0) MidasDispatchCommandCallback(T->Parent,T->Command,0); if (T->CallbackList != 0) { ListItem *item; for (item = T->CallbackList->First; item != 0; item = item->Next) { Ingot *T = item->Pointer; MidasDispatchCommandCallback(T->Parent,T->Command,0); } } } void MidasSetCallbackValue(T,Command) Ingot *T; char *Command; { Widget SW, w = T->Parent; MidasShell *ms = MidasGetShell(w); if (T->Command == 0) { if (T->Valued == 0) { ListItem *item; Ingot *ValueOwner = T->ValueOwner; if (ValueOwner->CallbackList == 0) ValueOwner->CallbackList = MidasCreateEmptyList(""); item = MidasAddItemToListPos(ValueOwner->CallbackList,XtName(w),0); item->Pointer = T; } } else XtFree(T->Command); T->Command = XtNewString(Command); } MidasOperand MidasGetIngotValue(T) Ingot *T; { MidasOperand Temp; if (T->Valued == 0) T = T->ValueOwner; Temp = T->Operand; Temp.Dynamic = FALSE; /* The ingot retains ownership of the operand */ return Temp; } char *MidasGetCallbackValue(T) Ingot *T; { if (T->Command == 0) return XtNewString(""); else return XtNewString(T->Command); } MidasOperand MidasGetCallback(w,Name) Widget w; char *Name; { MidasOperand Temp; Ingot *T = MidasFindIngotHere(w,Name); if (T == 0) { Temp.Value.P = ""; Temp.Dynamic = FALSE; } else { Temp.Value.P = MidasGetCallbackValue(T); Temp.Dynamic = TRUE; } Temp.Type = MString; return Temp; } MidasOperand MidasGetCreateCallback(w) Widget w; { Ingot *T = MidasFindIngotHere(w,"midasCreateCallback"); if (T == 0) { MidasOperand Temp; Temp.Value.P = ""; Temp.Dynamic = FALSE; Temp.Type = MString; return Temp; } else return MidasGetIngotValue(T); } MidasOperand MidasGetIngot(w,Name) Widget w; char *Name; { Ingot *T = MidasFindIngot(w,Name); if (T == 0) MidasError("Can not find ingot %s",Name); return MidasGetIngotValue(T); } MidasOperand MidasGetValueOwner(w,Name) Widget w; char *Name; { MidasOperand Temp; Ingot *T = MidasFindIngot(w,Name); if (T == 0) MidasError("Can not find ingot %s",Name); if (T->Valued) Temp.Value.P = (XtPointer) T->Parent; else Temp.Value.P = (XtPointer) T->ValueOwner->Parent; Temp.Type = MWidget; Temp.Dynamic = FALSE; return Temp; } MidasOperand MidasGetIngotOption(w,Name) Widget w; char *Name; { MidasOperand Temp; Ingot *T = MidasFindIngot(w,Name); if (T == 0) MidasError("Can not find ingot %s",Name); Temp.Value.I = T->ExecuteWhenCreated; Temp.Type = MBoolean; Temp.Dynamic = FALSE; return Temp; } void MidasSetIngotOption(w,Name,Opt) Widget w; char *Name; Boolean Opt; { MidasOperand Temp; Ingot *T = MidasFindIngot(w,Name); if (T == 0) MidasError("Can not find ingot %s",Name); T->ExecuteWhenCreated = Opt; } void MidasSetIngot(w,Name,Temp) Widget w; char *Name; MidasOperand Temp; { Ingot *T = MidasCreateIngot(w, Name); MidasSetIngotValue(T, Temp); #ifdef debug printf("Set Ingot %s in %s to value %s\n",Name,XtName(w),Temp.Value.I); #endif } void MidasSetIngotString(w,Name,Value) Widget w; char *Name; char *Value; { MidasSetIngot(w,Name,MidasConvertFromString(Value)); } void MidasSetIngotP(w,Name,Temp) Widget w; char *Name; MidasOperand *Temp; { MidasSetIngot(w,Name,*Temp); } void MidasSetCallback(w,Name,Command) Widget w; char *Name; char *Command; { Ingot *T = MidasCreateIngot(w, Name); MidasInheritIngotValue(T,Name); MidasSetCallbackValue(T,Command); } void MidasGetIngots(L,w) List *L; Widget w; { MidasShell *ms = MidasGetShell(w); MidasEmptyList(L); for (;; w = XtParent(w)) { MidasWidget *mw = MidasWidgetToMW(w); ListItem *i; List *TList = mw->IngotList; if (TList != NULL) for (i = TList->First; i != 0; i = i->Next) if (strncmp(i->Entry,"midas",5)) if (MidasFindItemInList(L,i->Entry) == 0) MidasAddItemToList(L,i->Entry); if (w == ms->Widget) break; } } static void MidasStoreCallback(w,cname) Widget w; char *cname; { char *result; char *name = MidasGetWidgetName(w); char *value = MidasConvertToString(MidasGetCallback(w,cname)); char *new = XtMalloc(strlen(name)+strlen(cname)+strlen(Option)+2); MidasShell *ms = MidasGetShell(w); XtGetApplicationResources(w,(XtPointer) &result,resources,1,NULL,0); strcpy(new,name); strcat(new,"."); strcat(new,cname); XrmPutStringResource(&ms->Application->Database,new,value); strcat(new,Option); value = MidasConvertToString(MidasGetIngotOption(w,cname)); XrmPutStringResource(&ms->Application->Database,new,value); ms->Application->Changes++; XtFree(new); XtFree(value); if (result != 0) { Boolean found = FALSE; char *token, *old = XtNewString(result); for (token = strtok(old," "); token != NULL; token = strtok(NULL," ")) if (strcmp(token,cname)==0) found = TRUE; XtFree(old); if (found) { XtFree(name); return; } value = XtMalloc(strlen(result)+strlen(cname)+2); strcpy(value,result); strcat(value," "); strcat(value,cname); } else value = XtNewString(cname); new = XtMalloc(strlen(name)+strlen(".midasIngots")+1); strcpy(new,name); strcat(new,".midasIngots"); XrmPutStringResource(&ms->Application->Database,new,value); XtFree(new); XtFree(value); XtFree(name); } void MidasSetupIngots(mw,IngotNames) MidasWidget *mw; char *IngotNames; { List *TList; ListItem *item; char *Input = XtNewString(IngotNames); char *VerbVector[100]; int VerbCount, i; Widget w = mw->Widget; MidasShell *ms = MidasGetShell(w); mw->IngotList = TList = MidasCreateEmptyList(XtName(w)); MidasTokenizeCommand(Input,VerbVector,&VerbCount,XtNumber(VerbVector)," "); /* This could be made more efficient by fetching all the ingots at once */ for (i = 0; i < VerbCount; i++) { IngotParm result; Ingot *T = XtNew(Ingot); XtResource *temp; ListItem *item = MidasFindItemInList(IngotRList,VerbVector[i]); if (item == 0) { temp = (XtResource *) XtMalloc(sizeof(XtResource)*2); temp[0] = resources[0]; temp[1] = resources[1]; temp[0].resource_name = XtNewString(VerbVector[i]); temp[1].resource_name = strcpy(XtMalloc(strlen(VerbVector[i])+strlen(Option)+1),VerbVector[i]); strcat(temp[1].resource_name,Option); item = MidasAddItemToList(IngotRList,temp->resource_name); item->Pointer = temp; } else temp = item->Pointer; XtGetApplicationResources(w,(XtPointer) &result,temp,XtNumber(resources), NULL,0); if (result.Command == 0 || *result.Command == '\0') T->Command = 0; else T->Command = XtNewString(result.Command); T->Valued = 0; T->Parent = w; T->ValueOwner = 0; T->CallbackList = 0; T->ExecuteWhenCreated = result.ExecuteWhenCreated; item = MidasAddItemToList(TList,VerbVector[i]); item->Pointer = T; } XtFree(Input); for (item = TList->First; item != 0; item = item->Next) { Widget SW; Ingot *T = item->Pointer; if (T->Valued == 0) MidasInheritIngotValue(T,item->Entry); if (T->Command != 0) { if (T->Valued == 0) { ListItem *item; Ingot *ValueOwner = T->ValueOwner; if (ValueOwner->CallbackList == 0) ValueOwner->CallbackList = MidasCreateEmptyList(""); item = MidasAddItemToListPos(ValueOwner->CallbackList,XtName(w),0); item->Pointer = T; } if (T->ExecuteWhenCreated) MidasQueueCommand(w,T->Command); } } } void MidasInitializeIngots() { IngotRList = MidasCreateEmptyList("IngotResourceList"); MidasDeclareFunction("GETINGOT(Widget,name)" ,MidasGetIngot); MidasDeclareFunction("GETCALLBACK(Widget,name)" ,MidasGetCallback); MidasDeclareFunction("GETVALUEOWNER(Widget,name)" ,MidasGetValueOwner); MidasDeclareFunction("GETINGOTOPTION(Widget,name)" ,MidasGetIngotOption); MidasDeclareVerb("SET INGOT Widget *name any..." ,MidasSetIngotP); MidasDeclareVerb("GET INGOTS list Widget" ,MidasGetIngots); MidasDeclareVerb("SET CALLBACK Widget name name...", MidasSetCallback); MidasDeclareVerb("SET INGOT OPTION Widget name Boolean",MidasSetIngotOption); MidasDeclareVerb("STORE CALLBACK Widget name", MidasStoreCallback); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midaslist.c����������������������������������������������������������������������������100666 � 21345 � 173 � 14532 5554674762 13612� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <Mrm/MrmAppl.h> /* Motif Toolkit and MRM */ #include "midaslist.h" #include "midasoperand.h" XmString MidasCharToString(); static List MasterList = {0,0,0,0,0}; Boolean MidasConvertStringList(In,Out) MidasOperand *In; MidasOperand *Out; { ListItem *item = MidasFindItemInList(&MasterList,In->Value.P); if (item == 0) Out->Value.P = (void *) MidasCreateEmptyList(In->Value.P); else Out->Value.P = item->Pointer; return TRUE; } List *MidasCreateEmptyList(name) char *name; { ListItem *item; List *list = XtNew(List); *list = NullList; item = MidasAddItemToList(&MasterList,name); item->Pointer = list; list->Name = item->Entry; return list; } void MidasEmptyList(L) List *L; { ListItem *i, *next; for (i = L->First; i != 0; i = next) { next = i->Next; XtFree((XtPointer) i->Pointer); XtFree((XtPointer) i); } L->First = 0; L->Last = 0; L->Selected = 0; if (L->W != 0) XmListDeleteAllItems(L->W); } ListItem *MidasFindItemInList(L,Entry) List *L; char *Entry; { ListItem *i = L->First; if (i) { XrmQuark name = XrmStringToQuark(Entry); for (; i ; i = i->Next) if (i->Name == name) return i; } return 0; } int MidasFindItemPosInList(L,Item) List *L; ListItem *Item; { ListItem *i; int p = 1; for (i = L->First; i != 0; i = i->Next, p++) if (i == Item) return p; return 0; } ListItem *MidasFindItemInListPos(L,Pos) List *L; int Pos; { ListItem *i; if (Pos == 0) return L->Last; for (i = L->First; i != 0; i = i->Next) if (--Pos == 0) return i; return 0; } ListItem *MidasAddItemToListPos(L,Entry,position) List *L; char *Entry; int position; { XmString string; ListItem *i; ListItem *new = XtNew(ListItem); new->Name = XrmStringToQuark(Entry); new->Entry = XrmQuarkToString(new->Name); new->Pointer = 0; if (L->W != 0) { string = MidasCharToString(Entry); XmListAddItem(L->W,string,position); XmStringFree(string); } if (position == 0) i = 0; else for (i = L->First; --position; i = i->Next); if (L->First == 0) { new->Next = 0; new->Prev = 0; L->Last = new; L->First = new; } else if (i == 0 ) { new->Next = 0; L->Last->Next = new; new->Prev = L->Last; L->Last = new; } else if (i == L->First) { new->Prev = 0; L->First->Prev = new; new->Next = L->First; L->First = new; } else { new->Next = i; new->Prev = i->Prev; i->Prev->Next = new; i->Prev = new; } return new; } ListItem *MidasAddItemToList(L,Entry) List *L; char *Entry; { int position=1; ListItem *i; for (i = L->First; i != 0; i = i->Next, position++) { int compare = strcmp(i->Entry,Entry); if (compare >= 0) break; } if (i==0) position=0; return MidasAddItemToListPos(L,Entry,position); } void MidasCopyList(Old,New,CopyRtn) List *Old; List *New; XtPointer (*CopyRtn)(); { ListItem *iold, *inew; for (iold = Old->First; iold != 0; iold = iold->Next) { inew = MidasAddItemToListPos(New,iold->Entry,0); inew->Pointer = CopyRtn(iold->Pointer); } } void MidasRealizeList(L,W) List *L; Widget W; { XmString list[4000]; ListItem *i; int list_size=0; for (i = L->First; i != 0; i = i->Next) list[list_size++] = MidasCharToString(i->Entry); { int n=0; Arg args[10]; XtSetArg(args[n],XmNitemCount,list_size ); n++; XtSetArg(args[n],XmNselectedItemCount, (XtArgVal) 0 ); n++; XtSetArg(args[n],XmNselectedItems, NULL ); n++; XtSetArg(args[n],XmNitems, (XtArgVal) list); n++; XtSetValues(W,args,n); } for (; list_size > 0; ) XmStringFree(list[--list_size]); L->Selected = 0; L->W = W; } void MidasUnrealizeList(L) List *L; { if (L->W != 0) { XmListDeleteAllItems(L->W); L->Selected = 0; L->W = 0; } } void MidasRemoveItemFromList(L,item) List *L; ListItem *item; { int position=1; ListItem *i; for (i = L->First; i != 0; i = i->Next, position++) if (i == item) break; if (i == 0) return; if (L->W != 0) XmListDeletePos(L->W,position); if (i->Next == 0) L->Last = i->Prev; else i->Next->Prev = i->Prev; if (i->Prev == 0) L->First = i->Next; else i->Prev->Next = i->Next; if (i->Pointer != 0) XtFree(i->Pointer); XtFree((XtPointer) i); } void MidasSelectItemPosInList(L,Pos,Notify) List *L; int Pos; Boolean Notify; { XmListSelectPos(L->W,Pos,Notify); } void MidasDestroyList(L) List *L; { ListItem *i; MidasEmptyList(L); for (i = MasterList.First; i != 0; i = i->Next) if (i->Pointer == L) { MidasRemoveItemFromList(&MasterList,i); return; } } static MidasOperand MidasFindNameInListPos(L,pos) List *L; int pos; { MidasOperand Temp; ListItem *item = MidasFindItemInListPos(L,pos); if (item != NULL) Temp.Value.P = item->Entry; else Temp.Value.P = ""; Temp.Dynamic = FALSE; Temp.Type = MString; return Temp; } static MidasOperand MidasCreateList(name) char *name; { MidasOperand Temp; Temp.Value.P = (XtPointer) MidasCreateEmptyList(name); Temp.Dynamic = False; /* A lie...but what is one to do */ Temp.Type = "list"; return Temp; } MidasListInit() { MidasDeclareVerb("ADD LIST POSITION list name Int" ,MidasAddItemToListPos); MidasDeclareVerb("ADD LIST list name" ,MidasAddItemToList); MidasDeclareVerb("REALIZE LIST list Widget" ,MidasRealizeList); MidasDeclareVerb("UNREALIZE LIST list" ,MidasUnrealizeList); MidasDeclareVerb("EMPTY LIST list" ,MidasEmptyList); MidasDeclareFunction("LISTNAMEPOS(list,Int)" ,MidasFindNameInListPos); MidasDeclareFunction("CREATELIST(name)" ,MidasCreateList); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midasloadimage.c�����������������������������������������������������������������������100666 � 21345 � 173 � 2562 5554674762 14541� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifdef VMS #include <lnmdef.h> #include descrip typedef struct dsc$descriptor_s string; #endif MidasLoadImage(name) char *name; /* The VAX version of MidasLoadImage looks for a shareable using the SLD dynamic loading convention. */ { #ifdef VMS int Iss, lr; string LogicalName, RoutineName = {0,0,0,0}, ImageName = {0,0,0,0}; char *p; $DESCRIPTOR(FileDev,"LNM$FILE_DEV"); void (*Routine)(); char result[80] = "SHR_"; struct { short BufLen; short ItmCod; int BufAdr; int RetAdr; } ItmLst[] = {{80, LNM$_STRING, result, 0}, {4 , LNM$_LENGTH, &lr, 0}, {0,0,0,0}}; strcat(result,name); LogicalName.dsc$a_pointer = result; LogicalName.dsc$w_length = strlen(result); Iss = Sys$TrnLnm(&LNM$M_CASE_BLIND,&FileDev,&LogicalName,0,ItmLst); if ((Iss & 1) == 0) MidasError("Could not load image %s",name); p = &result + lr; *p = '\0'; p = strstr(result,"/IMAGE="); if (p == 0) MidasError("Could not load image %s",name); *p = '\0'; p += 7; ImageName.dsc$a_pointer = p; ImageName.dsc$w_length = strlen(p); RoutineName.dsc$a_pointer = &result; RoutineName.dsc$w_length = strlen(result); Iss = Lib$Find_Image_Symbol(&ImageName,&RoutineName,&Routine); if ((Iss & 1) == 0) MidasError("Could not load image %s",name); Routine(); #endif } ����������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midasutil.c����������������������������������������������������������������������������100666 � 21345 � 173 � 5075 5554674763 13577� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <Mrm/MrmAppl.h> /* Motif Toolkit and MRM */ #include <string.h> #include <stdlib.h> #include "midasoperand.h" #ifndef VMS #include <sys/utsname.h> #endif /* * General utility functions */ static MidasOperand MidasGetenv(var) char *var; { MidasOperand Temp; char *p= getenv(var); Temp.Value.P = p?p:""; Temp.Type = MString; Temp.Dynamic = FALSE; return Temp; } static MidasOperand MidasUname() { MidasOperand Temp; #ifdef VMS Temp.Value.P = "VMS"; #else static struct utsname name; int rc = uname(&name); Temp.Value.P = name.sysname; #endif Temp.Type = MString; Temp.Dynamic = FALSE; return Temp; } static MidasOperand Locate(needle,haystack) char *needle; char *haystack; { MidasOperand Temp; char *p = strstr(haystack,needle); Temp.Value.I = p ? p-haystack : strlen(haystack); Temp.Type = MInt; Temp.Dynamic = FALSE; return Temp; } static MidasOperand Extract(start,length,string) int start; int length; char *string; { MidasOperand Temp; int len = strlen(string); char *p; if (start>=len) p = NULL; else { p = string + start; if (start+length < len) *(p+length) = '\0'; } Temp.Value.P = XtNewString(p); Temp.Type = MString; Temp.Dynamic = TRUE; return Temp; } static MidasOperand Length(string) char *string; { MidasOperand Temp; Temp.Value.I = strlen(string); Temp.Type = MInt; Temp.Dynamic = FALSE; return Temp; } static MidasOperand MidasSprintf(format,p1,p2,p3,p4,p5,p6,p7,p8) char *format; MidasOperand *p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8; { MidasOperand Temp; char buffer[1000]; sprintf(buffer,format,p1->Value.P,p2->Value.P,p3->Value.P,p4->Value.P,p5->Value.P,p6->Value.P,p7->Value.P,p8->Value.P); Temp.Value.P = XtNewString(buffer); Temp.Type = MString; Temp.Dynamic = TRUE; return Temp; } static void MidasPrintf(format,p1,p2,p3,p4,p5,p6,p7,p8) MidasOperand *p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8; { printf(format,p1->Value.P,p2->Value.P,p3->Value.P,p4->Value.P,p5->Value.P,p6->Value.P,p7->Value.P,p8->Value.P); } void MidasUtilInit() { MidasDeclareFunction("GETENV(name)" ,MidasGetenv); MidasDeclareFunction("UNAME()" ,MidasUname); MidasDeclareFunction("LENGTH(name)" ,Length); MidasDeclareFunction("EXTRACT(Int,Int,name)",Extract); MidasDeclareFunction("LOCATE(name,name)" ,Locate); MidasDeclareFunction("SPRINTF(name,{any},{any},{any},{any},{any},{any},{any},{any})",MidasSprintf); MidasDeclareVerb("PRINTF name {any} {any} {any} {any} {any} {any} {any} {any}",MidasPrintf); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/setenv.c�������������������������������������������������������������������������������100666 � 21345 � 173 � 5717 5554674763 13113� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1987 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that: (1) source distributions retain this entire copyright * notice and comment, and (2) distributions including binaries display * the following acknowledgement: ``This product includes software * developed by the University of California, Berkeley and its contributors'' * in the documentation or other materials provided with the distribution * and in all advertising materials mentioning features or use of this * software. Neither the name of the University nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)setenv.c 5.4 (Berkeley) 6/1/90"; #endif /* LIBC_SCCS and not lint */ #include <stdio.h> #include <sys/types.h> extern char *malloc(); /* * setenv -- * Set the value of the environmental variable "name" to be * "value". If rewrite is set, replace any current value. */ setenv(name, value, rewrite) register char *name, *value; int rewrite; { extern char **environ; static int alloced; /* if allocated space before */ register char *C; int l_value, offset; char *_findenv(); if (*value == '=') /* no `=' in value */ ++value; l_value = strlen(value); if ((C = _findenv(name, &offset))) { /* find if already exists */ if (!rewrite) return(0); if (strlen(C) >= l_value) { /* old larger; copy over */ while (*C++ = *value++); return(0); } } else { /* create new slot */ register int cnt; register char **P; for (P = environ, cnt = 0; *P; ++P, ++cnt); if (alloced) { /* just increase size */ environ = (char **)realloc((char *)environ, (size_t)(sizeof(char *) * (cnt + 2))); if (!environ) return(-1); } else { /* get new space */ alloced = 1; /* copy old entries into it */ P = (char **)malloc((size_t)(sizeof(char *) * (cnt + 2))); if (!P) return(-1); memcpy(P, environ, cnt * sizeof(char *)); environ = P; } environ[cnt + 1] = NULL; offset = cnt; } for (C = name; *C && *C != '='; ++C); /* no `=' in name */ if (!(environ[offset] = /* name + `=' + value */ malloc((size_t)((int)(C - name) + l_value + 2)))) return(-1); for (C = environ[offset]; (*C = *name++) && *C != '='; ++C); for (*C++ = '='; *C++ = *value++;); return(0); } /* * unsetenv(name) -- * Delete environmental variable "name". */ void unsetenv(name) char *name; { extern char **environ; register char **P; int offset; while (_findenv(name, &offset)) /* if set multiple times */ for (P = &environ[offset];; ++P) if (!(*P = *(P + 1))) break; } �������������������������������������������������midaswww-2.1/getenv.c�������������������������������������������������������������������������������100666 � 21345 � 173 � 3747 5554674763 13100� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1987 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that: (1) source distributions retain this entire copyright * notice and comment, and (2) distributions including binaries display * the following acknowledgement: ``This product includes software * developed by the University of California, Berkeley and its contributors'' * in the documentation or other materials provided with the distribution * and in all advertising materials mentioning features or use of this * software. Neither the name of the University nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)getenv.c 5.7 (Berkeley) 6/1/90"; #endif /* LIBC_SCCS and not lint */ #include <stdio.h> /* * getenv -- * Returns ptr to value associated with name, if any, else NULL. */ char * getenv(name) char *name; { int offset; char *_findenv(); return(_findenv(name, &offset)); } /* * _findenv -- * Returns pointer to value associated with name, if any, else NULL. * Sets offset to be the offset of the name/value combination in the * environmental array, for use by setenv(3) and unsetenv(3). * Explicitly removes '=' in argument name. * * This routine *should* be a static; don't use it. */ char * _findenv(name, offset) register char *name; int *offset; { extern char **environ; register int len; register char **P, *C; for (C = name, len = 0; *C && *C != '='; ++C, ++len); for (P = environ; *P; ++P) if (!strncmp(*P, name, len)) if (*(C = *P + len) == '=') { *offset = P - environ; return(++C); } return(NULL); } �������������������������midaswww-2.1/xgifload.c�����������������������������������������������������������������������������100666 � 21345 � 173 � 63630 5554674764 13423� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Modified for use with MidasWWW .... December 1992 * Tony Johnson (Tony_Johnson@Slac.Stanford.Edu) * * This file now contains multiple routines: * GIFLoadFile ... loads a gif file and returns a GIF structure * GIFFreeFile ... frees a GIF structure * GIFToXImage ... converts a GIF structure to an XImage * GIFFreeImage ... free colors associated with a GIF image * * xgifload.c - based strongly on... * * gif2ras.c - Converts from a Compuserve GIF (tm) image to a Sun Raster image. * * Copyright (c) 1988, 1989 by Patrick J. Naughton * * Author: Patrick J. Naughton * naughton@wind.sun.com * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * */ #include <stdio.h> #include <math.h> #include <ctype.h> #include <Mrm/MrmAppl.h> /* Motif Toolkit and MRM */ #include "xgifload.h" #include "midaswww.h" #define NEXTBYTE (GetChar(data)) #define READCODE (ReadCode(&context,gifImage)) #define IMAGESEP 0x2c #define INTERLACEMASK 0x40 #define COLORMAPMASK 0x80 char *id87 = "GIF87a"; char *id89 = "GIF89a"; typedef struct _Context { int XC, YC; /* Output X and Y coords of current pixel */ int Pass; /* Used by output routine if interlaced pic */ byte *Image; /* The result array */ int BytesPerImageCell; /* Bytes per cell in output Image */ int BytesPerScanline; /* bytes per scanline in output Raster */ struct _used { int count; int index; } used[256]; int CodeSize; int numused; int BitOffset; int ReadMask; /* Code AND mask for current code size */ } Context; /* * Function used to sort _used structure */ static int sortfun(a,b) struct _used *a,*b; { return b->count - a->count; } /* * The fastAlloc routines provide fast color allocation for pseudoColor * visuals */ static unsigned long pixels[256]; static XColor colors[256]; static int npixels = 0; static int useCount[256]; static Display *fastdpy; static Colormap fastcmap; static XColor ToBeStored[256]; static int nToBeStored; static int maxpixels; #define MINIMUM(a,b) ((a)<(b)?(a):(b)) static Boolean fastAllocInit(dpy,theVisual,cmap,dispcells) Display *dpy; Colormap cmap; Visual *theVisual; int dispcells; { int i; Status rc; if (npixels > 0) return TRUE; if (theVisual->class != PseudoColor && theVisual->class != GrayScale ) return FALSE; maxpixels = MINIMUM(dispcells/2,256); rc = XAllocColorCells(dpy,cmap,FALSE,NULL,0,pixels,maxpixels); if (rc == 0) return FALSE; for (i=0; i < maxpixels; i++) useCount[i] = 0; fastdpy = dpy; fastcmap = cmap; npixels = maxpixels; nToBeStored = 0; return TRUE; } static void fastAllocColor(x) XColor *x; { int j, d, mdist, close, free; unsigned long freej; /* run through the entire X colormap and pick the closest color */ mdist = 1000000; close = -1; free = -1; for (j=0; j<npixels; j++) { int i = pixels[j]; if (useCount[i]) { d = abs(x->red - colors[i].red ) + abs(x->green - colors[i].green) + abs(x->blue - colors[i].blue ); if (d<mdist) { mdist=d; close=i; } } else free = i; } if (mdist > 20 && free < 0 && npixels < maxpixels) { int rc = XAllocColorCells(fastdpy,fastcmap,FALSE,NULL,0,&pixels[npixels],maxpixels-npixels); if (rc != 0) { free = pixels[npixels]; npixels = maxpixels; } } if (mdist <= 20 || free < 0) { /* close enough?? */ useCount[close]++; x->pixel = close; } else { useCount[free]++; x->pixel = free; colors[free] = *x; ToBeStored[nToBeStored++] = *x; } return; } static void fastAllocStore() { XStoreColors(fastdpy,fastcmap,ToBeStored,nToBeStored); nToBeStored = 0; } static void fastAllocFree(free) Pixel free; { useCount[free]--; } void fastAllocFreeUnusedColors() { Pixel free[256]; int nFree = 0, j; for (j=0; j<npixels; ) { if (useCount[pixels[j]] == 0) { free[nFree++] = pixels[j]; pixels[j] = pixels[--npixels]; } else j++; } if (nFree) XFreeColors(fastdpy,fastcmap,free,nFree,0); } /* Fetch the next code from the Raster data stream. The codes can be * any length from 3 to 12 bits, packed into 8-bit bytes, so we have to * maintain our location in the Raster array as a BIT Offset. We compute * the byte Offset into the Raster array by dividing this by 8, pick up * three bytes, compute the bit Offset into our 24-bit chunk, shift to * bring the desired code to the bottom, then mask it off and return it. */ static int ReadCode(context,gifImage) Context *context; GIFImage *gifImage; { int RawCode, ByteOffset; ByteOffset = context->BitOffset / 8; RawCode = gifImage->Raster[ByteOffset] + (0x100 * gifImage->Raster[ByteOffset + 1]); if (context->CodeSize >= 8) RawCode += (0x10000 * gifImage->Raster[ByteOffset + 2]); RawCode >>= (context->BitOffset % 8); context->BitOffset += context->CodeSize; return(RawCode & context->ReadMask); } static void AddToPixel(context,gifImage,Index) Context *context; GIFImage *gifImage; int Index; { if (context->YC < gifImage->Height) *(context->Image + context->YC * context->BytesPerScanline + context->XC) = Index; if (context->used[Index].count++ == 0) context->numused++; /* Update the X-coordinate, and if it overflows, update the Y-coordinate */ if (++context->XC == gifImage->Width) { /* If a non-interlaced picture, just increment YC to the next scan line. * If it's interlaced, deal with the interlace as described in the GIF * spec. Put the decoded scan line out to the screen if we haven't gone * past the bottom of it */ context->XC = 0; if (!gifImage->Interlace) context->YC++; else { switch (context->Pass) { case 0: context->YC += 8; if (context->YC >= gifImage->Height) { context->Pass++; context->YC = 4; } break; case 1: context->YC += 8; if (context->YC >= gifImage->Height) { context->Pass++; context->YC = 2; } break; case 2: context->YC += 4; if (context->YC >= gifImage->Height) { context->Pass++; context->YC = 1; } break; case 3: context->YC += 2; break; default: break; } } } } /*****************************/ GIFImage *GIFLoadFile(parent,message,GetChar,data) Widget parent; char *message; int (*GetChar)(); DataSource *data; /*****************************/ { register byte ch, ch1; register byte *ptr1; int filesize; register int i; char test[6]; GIFImage *gifImage; int Rwidth, Rheight; /* screen dimensions */ Boolean HasColormap; int LeftOfs, TopOfs; /* image offset */ int BitsPerPixel; /* Bits per pixel, read from GIF header */ int Background; /* background color */ int ColorMapSize; int gif89; int Aspect; int block; byte *Raster; for (i=0; i<6; i++) test[i] = NEXTBYTE; if (!strncmp(test, id87, 6)) gif89 = 0; else if (!strncmp(test, id89, 6)) gif89 = 1; else { strcpy(message,"File is not in GIF format."); return NULL; } /* Get variables from the GIF screen descriptor */ ch = NEXTBYTE; Rwidth = ch + 0x100 * NEXTBYTE; /* screen dimensions... not used. */ ch = NEXTBYTE; Rheight = ch + 0x100 * NEXTBYTE; ch = NEXTBYTE; HasColormap = ((ch & COLORMAPMASK) ? True : False); BitsPerPixel = (ch & 7) + 1; Background = NEXTBYTE; /* background color... not used. */ Aspect = NEXTBYTE; if (Aspect) /* supposed to be NULL for gif87 */ { if (!gif89) { strcpy(message,"Corrupt GIF file (bad screen descriptor)."); return NULL; } } /* Create the GIFImage */ gifImage = XtNew(GIFImage); gifImage->HasColormap = HasColormap; gifImage->BitsPerPixel = BitsPerPixel; gifImage->Image = NULL; gifImage->Pixmap = NULL; gifImage->Refcount = 0; ColorMapSize = 1 << BitsPerPixel; /* Read in global colormap. */ if (HasColormap) { for (i = 0; i < ColorMapSize; i++) { gifImage->Red[i] = NEXTBYTE; gifImage->Green[i] = NEXTBYTE; gifImage->Blue[i] = NEXTBYTE; } } else { /* no colormap in GIF file */ fprintf(stderr,"GIF warning! no colortable in this file. Winging it.\n"); } /* Check for image seperator */ for (block = NEXTBYTE; block != IMAGESEP; block = NEXTBYTE) { int sbsize; NEXTBYTE; /* read (and ignore) data sub-blocks */ do { int j = 0; sbsize = NEXTBYTE; if (data->eof) { strcpy(message,"Corrupt GIF file (image separator)."); goto cleanup; } while (j<sbsize) { NEXTBYTE; j++; } } while (sbsize); } /* Now read in values from the image descriptor */ ch = NEXTBYTE; LeftOfs = ch + 0x100 * NEXTBYTE; ch = NEXTBYTE; TopOfs = ch + 0x100 * NEXTBYTE; ch = NEXTBYTE; gifImage->Width = ch + 0x100 * NEXTBYTE; ch = NEXTBYTE; gifImage->Height = ch + 0x100 * NEXTBYTE; gifImage->Interlace = ((NEXTBYTE & INTERLACEMASK) ? True : False); gifImage->CodeSize = NEXTBYTE; /* Note that I ignore the possible existence of a local color map. * I'm told there aren't many files around that use them, and the spec * says it's defined for future use. This could lead to an error * reading some files. */ /* Read the Raster data. Here we just transpose it from the GIF array * to the Raster array, turning it from a series of blocks into one long * data stream, which makes life much easier for ReadCode(). */ filesize = gifImage->Width * gifImage->Height * (gifImage->CodeSize+1)/8; Raster = (byte *) XtMalloc(filesize); ptr1 = Raster; do { ch = ch1 = NEXTBYTE; if (data->eof) { XtFree((char *) Raster); strcpy(message,"Premature end-of-file found in GIF file."); goto cleanup; } if (ptr1 - Raster + ch > filesize) { int nused = ptr1 - Raster; Raster = (byte *) XtRealloc((char *) Raster, filesize += filesize/4); ptr1 = Raster + nused; } while (ch--) *ptr1++ = NEXTBYTE; } while(ch1); if (filesize - (ptr1 - Raster) > 1000) Raster = (byte *) XtRealloc((char *) Raster,(ptr1 - Raster)); gifImage->Raster = Raster; return gifImage; cleanup: XtFree((char *)gifImage); return NULL; } XImage *GIFToXImage(w,gifImage,message) Widget w; GIFImage *gifImage; char *message; { register byte ch, ch1; register int i; int numcols; int *thiserr = NULL , *nexterr = NULL, *temperr; int fs_direction; int threshval; #define FS_SCALE 1024 #define HALF_FS_SCALE 512 int BitsPerPixel = gifImage->BitsPerPixel; int Width = gifImage->Width; int Height = gifImage->Height; unsigned long *cols = gifImage->cols; byte *Raster = gifImage->Raster; /* The Raster data stream, unblocked */ char *data = NULL; Widget s; Display *theDisp = XtDisplay(w); int theScreen = XScreenNumberOfScreen(XtScreen(w)); int dispcells = DisplayCells(theDisp, theScreen); Colormap theCmap; Visual *theVisual = DefaultVisual(theDisp,theScreen); int theDepth; XImage *theImage; int ColorMapSize, /* number of colors */ InitCodeSize, /* Starting code size, used during Clear */ Code, /* Value returned by ReadCode */ MaxCode, /* limiting value for current code size */ ClearCode, /* GIF clear code */ EOFCode, /* GIF end-of-information code */ CurCode, OldCode, InCode, /* Decompressor variables */ FirstFree, /* First free code, generated per GIF spec */ FreeCode, /* Decompressor, next free slot in hash table */ FinChar, /* Decompressor variable */ BitMask; /* AND mask for data size */ int OutCount = 0; /* Decompressor output 'stack count' */ int OutCode[1025]; /* An output array used by the decompressor */ int Prefix[4096]; /* The hash table used by the decompressor */ int Suffix[4096]; Context context; Arg arglist[10]; int n=0; if (gifImage->Image) { gifImage->Refcount++; return gifImage->Image; } XtSetArg(arglist[n], XtNdepth, &theDepth); n++; XtSetArg(arglist[n], XtNcolormap, &theCmap); n++; XtGetValues(w,arglist,n); if (theDepth <= 4) { int col; /* prepare for Floyd-Steinberg halftone conversion */ thiserr = (int *) XtMalloc((gifImage->Width + 2) * sizeof(int)); nexterr = (int *) XtMalloc((gifImage->Width + 2) * sizeof(int)); srand((int) (time(0) ^ getpid ())); for (col = 0 ; col < gifImage->Width + 2 ; col++) thiserr[col] = (rand() % FS_SCALE - HALF_FS_SCALE ) / 4; fs_direction = 1; threshval = HALF_FS_SCALE; } context.XC = 0; context.YC = 0; context.Pass = 0; context.CodeSize = gifImage->CodeSize; context.BitOffset = 0; /* Start reading the Raster data. First we get the intial code size * and compute decompressor constant values, based on this code size. */ numcols = ColorMapSize = 1 << BitsPerPixel; BitMask = ColorMapSize - 1; ClearCode = (1 << context.CodeSize); EOFCode = ClearCode + 1; FreeCode = FirstFree = ClearCode + 2; for (i=0 ; i<numcols ; i++) { context.used[i].count = 0; context.used[i].index = i; gifImage->Allocd[i] = FALSE; } /* The GIF spec has it that the code size is the code size used to * compute the above values is the code size given in the file, but the * code size used in compression/decompression is the code size given in * the file plus one. (thus the ++). */ context.CodeSize++; InitCodeSize = context.CodeSize; MaxCode = (1 << context.CodeSize); context.ReadMask = MaxCode - 1; /* Allocate the X Image */ /* WARNING: I've only tested this on 8 and 16 depth DISPLAY, who knows if it works elsewhere???....let me know if you improve it please. TonyJ */ if (theDepth<=8 ) context.BytesPerImageCell = 1; else if (theDepth<=16) context.BytesPerImageCell = 2; else context.BytesPerImageCell = 4; context.Image = (byte *) XtMalloc(context.BytesPerImageCell*Width*Height); data = XtMalloc(context.BytesPerImageCell*Width*Height); theImage = XCreateImage(theDisp,theVisual,theDepth,ZPixmap,0,data, Width,Height,context.BytesPerImageCell*8,Width * context.BytesPerImageCell); if (!theImage) { XtFree((char *) context.Image); strcpy(message,"Unable to create image for GIF file."); goto cleanup; } context.BytesPerScanline = Width; /* Decompress the file, continuing until you see the GIF EOF code. * One obvious enhancement is to add checking for corrupt files here. */ Code = READCODE; while (Code != EOFCode) { /* Clear code sets everything back to its initial value, then reads the * immediately subsequent code as uncompressed data. */ if (Code == ClearCode) { context.CodeSize = InitCodeSize; MaxCode = (1 << context.CodeSize); context.ReadMask = MaxCode - 1; FreeCode = FirstFree; CurCode = OldCode = Code = READCODE; FinChar = CurCode & BitMask; AddToPixel(&context,gifImage,FinChar); } else { /* If not a clear code, then must be data: save same as CurCode and InCode */ CurCode = InCode = Code; /* If greater or equal to FreeCode, not in the hash table yet; * repeat the last character decoded */ if (CurCode >= FreeCode) { CurCode = OldCode; OutCode[OutCount++] = FinChar; } /* Unless this code is raw data, pursue the chain pointed to by CurCode * through the hash table to its end; each code in the chain puts its * associated output code on the output queue. */ while (CurCode > BitMask) { if (OutCount > 1024) { strcpy(message,"Corrupt GIF file (OutCount)!."); XDestroyImage(theImage); theImage = NULL; goto cleanup; } OutCode[OutCount++] = Suffix[CurCode]; CurCode = Prefix[CurCode]; } /* The last code in the chain is treated as raw data. */ FinChar = CurCode & BitMask; OutCode[OutCount++] = FinChar; /* Now we put the data out to the Output routine. * It's been stacked LIFO, so deal with it that way... */ for (i = OutCount - 1; i >= 0; i--) AddToPixel(&context,gifImage,OutCode[i]); OutCount = 0; /* Build the hash table on-the-fly. No table is stored in the file. */ Prefix[FreeCode] = OldCode; Suffix[FreeCode] = FinChar; OldCode = InCode; /* Point to the next slot in the table. If we exceed the current * MaxCode value, increment the code size unless it's already 12. If it * is, do nothing: the next code decompressed better be CLEAR */ FreeCode++; if (FreeCode >= MaxCode) { if (context.CodeSize < 12) { context.CodeSize++; MaxCode *= 2; context.ReadMask = (1 << context.CodeSize) - 1; } } } Code = READCODE; } if (theDepth <= 4) { byte *bP = context.Image - gifImage->Width - 1; int row; for (row = 0; row < gifImage->Height; row++) { int col, limitcol; for (col = 0 ; col < gifImage->Width + 2 ; col++) nexterr[col] = 0; if (fs_direction) { col = 0; limitcol = gifImage->Width; bP += gifImage->Width + 1; } else { col = gifImage->Width - 1; limitcol = -1; bP += gifImage->Width - 1; } do { char c = *bP; int gray = .299 * gifImage->Red[c] + .587 * gifImage->Green[c] + .114 * gifImage->Blue[c]; int sum = (gray * FS_SCALE) / 256 + thiserr[col+1]; if (sum >= threshval) { XPutPixel(theImage,col,row,WhitePixel(theDisp,theScreen)); sum -= threshval + HALF_FS_SCALE; } else XPutPixel(theImage,col,row,BlackPixel(theDisp,theScreen)); if (fs_direction) { thiserr[col + 2] += (sum * 7) / 16; nexterr[col ] += (sum * 3) / 16; nexterr[col + 1] += (sum * 5) / 16; nexterr[col + 2] += (sum ) / 16; ++col; ++bP; } else { thiserr[col ] += (sum * 7) / 16; nexterr[col + 2] += (sum * 3) / 16; nexterr[col + 1] += (sum * 5) / 16; nexterr[col ] += (sum ) / 16; --col; --bP; } } while (col != limitcol); temperr = thiserr; thiserr = nexterr; nexterr = temperr; fs_direction = ! fs_direction; } } /* we've got the picture loaded, we know what colors are needed. get 'em */ /* no need to allocate any colors if no colormap in GIF file */ else if (gifImage->HasColormap) { Boolean no_more_colors = FALSE; register int i,j,k; XColor defs[256]; XColor ctab[256]; int dc = (dispcells<256) ? dispcells : 256; byte *ptr; Boolean fastAlloc = gifImage->fastAlloc = fastAllocInit(theDisp,theVisual,theCmap,dispcells); /* * The first colors that we try to allocate are more likely to be allocated * exactly, so sort by frequency of use */ qsort(context.used,numcols,sizeof(struct _used),sortfun); /* Allocate the X colors for this picture */ for (k=j=0; k<numcols; k++) { i = context.used[k].index; if (context.used[k].count) { defs[i].red = gifImage->Red[i]<<8; defs[i].green = gifImage->Green[i]<<8; defs[i].blue = gifImage->Blue[i]<<8; defs[i].flags = DoRed | DoGreen | DoBlue; if (!no_more_colors) { if (fastAlloc) { fastAllocColor(&defs[i]); gifImage->Allocd[i] = TRUE; cols[i] = defs[i].pixel; } else if (XAllocColor(theDisp,theCmap,&defs[i])) { gifImage->Allocd[i] = TRUE; cols[i] = defs[i].pixel; } else { /* * In the interest of speed we assume that if * one allocation fails all subsequent ones will * fail too. */ no_more_colors = TRUE; /* read in the color table */ for (j=0; j<dc; j++) ctab[j].pixel = j; XQueryColors(theDisp,theCmap,ctab,dc); } } if (no_more_colors) { Boolean skip; int k, d, mdist, close; /* run through the entire X colormap and pick the closest color */ mdist = 1000000; close = -1; for (j=0; j<dc; j++) { d = abs(defs[i].red - ctab[j].red ) + abs(defs[i].green - ctab[j].green) + abs(defs[i].blue - ctab[j].blue ); if (d<mdist) { mdist=d; close=j; } } if (close<0) { strcpy(message,"Can't allocate colors for GIF file."); XDestroyImage(theImage); theImage = NULL; goto cleanup; } defs[i] = ctab[close]; /* * We attempt to alloocate colors here to simplify the task of freeing * them ,and to make sure no one else changes the ones we are using. * This might fail if the color is allocated read/write by some-other * application, in fact we shouldn't really be using such pixels anyway * but it probably doesn't REALLY matter. */ skip = FALSE; cols[i] = defs[i].pixel; for (j = 0 ; j < i ; j++) if (cols[j] == cols[i]) skip = TRUE; if (!skip && XAllocColor(theDisp,theCmap,&defs[i])) { cols[i] = defs[i].pixel; /* just in case it changed */ gifImage->Allocd[i] = TRUE; } } } } ptr = context.Image; for (i=0; i<Height; i++) for (j=0; j<Width; j++,ptr++) XPutPixel(theImage,j,i,cols[*ptr]); if (fastAlloc) fastAllocStore(); } gifImage->Refcount = 1; gifImage->Image = theImage; cleanup: XtFree((char *) thiserr); XtFree((char *) nexterr); XtFree((char *) context.Image); return theImage; } /* Catch the alloc error when there is not enough resources for the * pixmap. */ static Boolean alloc_error; static XErrorHandler oldhandler; static int catch_alloc (dpy, err) Display *dpy; XErrorEvent *err; { if (err->error_code == BadAlloc) { alloc_error = True; } if (alloc_error) return 0; oldhandler(dpy, err); } Pixmap GIFToPixmap(w,gifImage,message) Widget w; GIFImage *gifImage; char *message; { Pixmap pixmap = gifImage->Pixmap; XImage *image = gifImage->Image; int Width = gifImage->Width; int Height = gifImage->Height; Display *theDisp = XtDisplay(w); Window theWind = XtWindow(w); GC gc = DefaultGCOfScreen(XtScreen(w)); int theDepth; Arg arglist[10]; int n=0; if (pixmap) return pixmap; if (!image) image = GIFToXImage(w,gifImage,message); if (!image) return NULL; XtSetArg(arglist[n], XtNdepth, &theDepth); n++; XtGetValues(w,arglist,n); XSync(XtDisplay(w), False); /* Get to known state */ oldhandler = XSetErrorHandler(catch_alloc); alloc_error = False; pixmap = XCreatePixmap(theDisp,theWind,Width,Height,theDepth); XSync(XtDisplay(w), False); /* Force the error */ if (alloc_error && pixmap) { XFreePixmap(theDisp,pixmap); XSync(XtDisplay(w), False); /* Force the error */ pixmap = NULL; } oldhandler = XSetErrorHandler(oldhandler); if (pixmap) { gifImage->Pixmap = pixmap; XPutImage(theDisp, pixmap, gc, image, 0,0,0,0,Width,Height); } return pixmap; } void GIFFreeImage(w,gifImage) Widget w; GIFImage *gifImage; { int i,j; Pixel cols[256]; int numcols = 1 << gifImage->BitsPerPixel; Colormap theCmap; Arg arglist[10]; int n=0; if (!gifImage->Image) return; if (--gifImage->Refcount) return; XDestroyImage(gifImage->Image); if (gifImage->Pixmap) XFreePixmap(XtDisplay(w),gifImage->Pixmap); if (gifImage->fastAlloc) { for (i=0 ; i < numcols; i++) if (gifImage->Allocd[i]) fastAllocFree(gifImage->cols[i]); } else { for (j=0 , i=0 ; i < numcols; i++) if (gifImage->Allocd[i]){ cols[j++] = gifImage->cols[i]; } XtSetArg(arglist[n], XtNcolormap, &theCmap); n++; XtGetValues(w,arglist,n); XFreeColors(XtDisplay(w),theCmap,cols,j,0); } gifImage->Image = NULL; gifImage->Pixmap = NULL; } void GIFFreeFile(gifImage) GIFImage *gifImage; { XtFree((char *) gifImage->Raster); XtFree((char *) gifImage); } ��������������������������������������������������������������������������������������������������������midaswww-2.1/uid2c.c��������������������������������������������������������������������������������100666 � 21345 � 173 � 2371 5554674764 12607� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdio.h> #include <string.h> /* convert uid file to ascii file to use in c */ void converttoc (); char *getfilename(); main ( argc, agrv) int argc; char *agrv[]; { FILE *fp; if (argc == 1) { printf("uid2c: no file input \n"); exit(0); } else { if ((fp = fopen(agrv[1], "r")) == NULL) { printf("uid2c: can't open %s\n",agrv[1]); return 1; } else { converttoc(fp, agrv[1]); fclose(fp); } } return 0; } void converttoc (infp, filein) FILE *infp; char *filein; { FILE *outfp; char fileout[100], name[100], *tempf; int c, i; tempf = getfilename(filein); strcpy(fileout, tempf); strcpy(name, tempf); strcat(fileout,".uic"); if ((outfp = fopen(fileout,"w")) == NULL) { printf("uid2c: can't open %s\n",fileout); exit (1); } else { c = getc(infp); fprintf(outfp, "char %s[] = { \n %d",name,c); i = 0; while ((c = getc(infp)) != EOF) { i++; if (i < 20) fprintf(outfp, ",%d",c); else { fprintf(outfp, ",%d\n",c); i = 0; } } fprintf(outfp," };\n"); fclose(outfp); } } char *getfilename (infile) char *infile; { char filename[100]; strcpy(filename, infile); filename[strlen(infile)-4] = '\0'; return filename; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midasfetchuid.c������������������������������������������������������������������������100666 � 21345 � 173 � 2042 5554674764 14405� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "midas.uic" #include "midaswww.uic" #include <stdio.h> #include <string.h> #include <fcntl.h> #include <sys/stat.h> #include <X11/Intrinsic.h> /* MidasMakeUid (): to make a uid file from the data input of a uic file. parameters: filename return: 1 if make uid file success, 0 if make uid file fail. filename if make uid file success */ int MidasMakeUid(filename) char **filename; { int fileout; char *buffer = XtMalloc(L_tmpnam); char *temp = tmpnam(buffer); if ((fileout = open(temp, O_CREAT | O_RDWR, 0666)) > 0) { if (!strcmp("midas.uid", *filename)) write(fileout, midas, sizeof(midas)); else if (!strcmp("midaswww.uid", *filename)) write(fileout, midaswww, sizeof(midaswww)); else { printf("MidasMakeUid error: don't find the UIC file of %s\n",*filename); unlink(temp); XtFree(temp); return 0; } *filename = temp; return 1; } else { printf("Unable to open file %s \n",temp); XtFree(temp); return 0; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/strcasecmp.c���������������������������������������������������������������������������100666 � 21345 � 173 � 10107 5554674764 13761� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1987 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that: (1) source distributions retain this entire copyright * notice and comment, and (2) distributions including binaries display * the following acknowledgement: ``This product includes software * developed by the University of California, Berkeley and its contributors'' * in the documentation or other materials provided with the distribution * and in all advertising materials mentioning features or use of this * software. Neither the name of the University nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ #include "stdc.h" #include <sys/types.h> #ifdef VMS #include <stddef.h> #endif #if defined(LIBC_SCCS) && !defined(lint) static const char sccsid[] = "@(#)strcasecmp.c 5.9 (Berkeley) 6/1/90"; #endif /* LIBC_SCCS and not lint */ /* * This array is designed for mapping upper and lower case letter * together for a case independent comparison. The mappings are * based upon ascii character sequences. */ static const unsigned char charmap[] = { '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', }; int strcasecmp(s1, s2) const char *s1, *s2; { register const unsigned char *cm = charmap, *us1 = (const unsigned char *)s1, *us2 = (const unsigned char *)s2; while (cm[*us1] == cm[*us2++]) if (*us1++ == '\0') return (0); return (cm[*us1] - cm[*--us2]); } int strncasecmp(s1, s2, n) const char *s1, *s2; register size_t n; { if (n != 0) { register const unsigned char *cm = charmap, *us1 = (const unsigned char *)s1, *us2 = (const unsigned char *)s2; do { if (cm[*us1] != cm[*us2++]) return (cm[*us1] - cm[*--us2]); if (*us1++ == '\0') break; } while (--n != 0); } return (0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/mwhttp.c�������������������������������������������������������������������������������100666 � 21345 � 173 � 3114 5554674764 13120� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * These are the WWW - Midas Interface routines */ #include "midasnet.h" #include <Xm/MessageB.h> #include <string.h> extern XrmQuark fileDestination; /* * Fetch the document using TCP/IP and HTTP * ---------------------------------------- */ Widget WWWFetchDocumentHTTP(w,file,mb) Widget w; WWWFile *file; MessageBlock *mb; { char *command; Widget result = NULL; DataSource data; int s; char *ext; WWWFiletype *filetype; char buffer[8096]; if (file->node == NULL) { strcat(mb->message,"No node specified for HTTP connection"); mb->help_code = "http_no_node"; return NULL; } if (file->port == 0) file->port = appResources.default_HTTP_port; filetype = WWWGetFiletype(XrmQuarkToString(file->file),appResources.httpDefaultFiletype); if (filetype->Destination == fileDestination) { /* First we need to ask the user where he wants to save this thing?? */ if (!WWWAskForFileDestination(w,mb,filetype,FALSE)) goto cleanup; } s = TCPIPConnect(file,mb); if (s == 0) goto cleanup; command = XtMalloc(20 + (file->file ? strlen(XrmQuarkToString(file->file)) : 0)); strcpy(command,"GET "); strcat(command,file->file ? XrmQuarkToString(file->file): "/"); strcat(command,"\r\n"); if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; XtFree(command); WWWInitDataSource(&data,mb,buffer,sizeof(buffer),socket_read,s); mb->flag = -1; result = WWWLoadByFiletype(w,mb,filetype,GetCharacter,&data); cleanup: WWWFreeFiletype(filetype); if (s) socket_close(s); return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/mwhttp2.c������������������������������������������������������������������������������100666 � 21345 � 173 � 32512 5554674764 13226� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * These are the WWW - Midas Interface routines */ #include "midasnet.h" #include <string.h> extern XtAppContext appl_context; extern XrmQuark fileDestination; extern XrmQuark htmlDestination; extern XrmQuark textDestination; extern XrmQuark psDestination; extern XrmQuark gifDestination; extern XrmQuark xbmDestination; extern XrmQuark unsupportDestination; #define DEADNODE ((WWWNode *) -1) extern WWWNode *WWWFromLink; extern char password[64]; extern void ClearFlag(); extern char *WWWAsciiFile(); void WWWAddReadInputEvent(); static int WWWUseHTTPVersion1(); static char *htrq = NULL; char *WWWGetHTRQ() { int size = 512; char *accept = "Accept: "; char *accept_encode = "Accept-Encoding: "; char *from = "From: "; char useragent[100]; char *header = XtMalloc(size); ListItem *i = appResources.mimetypes->First; ListItem *j = appResources.mimeencode->First; ListItem *k = appResources.usermimetypes->First; ListItem *l = appResources.usermimeencode->First; sprintf(useragent,"User-Agent: MidasWWW/%s\r\n",VERSION); *header = '\0'; for (; i ; i = i->Next) { if (strlen(header) > size - 128) header = XtRealloc(header, size += 128); strcat(header,accept); strcat(header,i->Entry); strcat(header,"\r\n"); } for (;k ; k = k->Next) { if (MidasFindItemInList(appResources.mimetypes,k->Entry)) continue; if (strlen(header) > size - 128) header = XtRealloc(header, size += 128); strcat(header,accept); strcat(header,k->Entry); strcat(header,"\r\n"); } for(; j ; j = j->Next) { if (strlen(header) > size - 128) header = XtRealloc(header, size += 128); strcat(header,accept_encode); strcat(header,j->Entry); strcat(header,"\r\n"); } for (;l ; l = l->Next) { if (MidasFindItemInList(appResources.mimeencode,l->Entry)) continue; if (strlen(header) > size - 128) header = XtRealloc(header, size += 128); strcat(header,accept_encode); strcat(header,l->Entry); strcat(header,"\r\n"); } header = XtRealloc(header, size += 128); strcat(header,from); strcat(header,password); strcat(header,"\r\n"); strcat(header,useragent); return header; } Widget WWWPostDocumentHTTP1(w,file,mb) Widget w; WWWFile *file; MessageBlock *mb; { char *command, *copy, name[128]; Widget result = NULL; DataSource data; int s, http1 = -1, fd = 0; WWWFiletype *filetype = NULL; char *tmpf; char *referer, post[256]; ListItem *item; char buffer[8096]; char *idata = XrmQuarkToString(file->keyword); if (file->node == NULL) { strcat(mb->message,"No node specified for HTTP connection"); mb->help_code = "http_no_node"; return NULL; } if (file->port == 0) file->port = appResources.default_HTTP_port; s = TCPIPConnect(file,mb); if (s == 0) return result; /* use static so that we don't need to waste time to get it each time */ if (htrq == NULL) htrq = WWWGetHTRQ(); if (WWWFromLink != DEADNODE && WWWFromLink != NULL) { char *fromurl; char *refer = "Referer: "; fromurl = WWWAsciiFile(WWWFromLink->file); referer = XtMalloc(strlen(fromurl)+30); strcpy(referer,refer); strcat(referer,fromurl); strcat(referer,"\r\n"); XtFree(fromurl); } else referer = NULL; sprintf(post,"Content-type: application/x-www-form-urlencoded\r\nContent-length: %d\r\n\r\n",strlen(idata)); command = XtMalloc(30 + strlen(htrq) + strlen(referer) + strlen(post) + (file->file ? strlen(XrmQuarkToString(file->file)) : 0)); strcpy(command,"POST "); strcat(command,file->file ? XrmQuarkToString(file->file): "/"); strcat(command," HTTP/1.0\r\n"); strcat(command, htrq); if (referer) { strcat(command,referer); XtFree(referer); } strcat(command,post); if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; XtFree(command); if (!TCPIPWriteAndWaitForResponse(s,file,mb,idata)) goto cleanup; WWWInitDataSource(&data,mb,buffer,sizeof(buffer),socket_read,s); http1 = WWWUseHTTPVersion1(&data,filetype,mb,name); if (mb->flag == 1) goto cleanup; data.read = 0; /* Some (bad) Load routines expect this */ if (http1 == 1) { filetype = WWWGetFiletype(name,appResources.httpDefaultFiletype); if (filetype->Destination == fileDestination) { /* First we need to ask the user where he wants to save this thing?? */ int managed = 0; copy = strrchr(XrmQuarkToString(file->file), '/'); if (copy) copy = XtNewString(copy+1); else copy = XtNewString(XrmQuarkToString(file->file)); if (copy && filetype->Filter) { char *ext = strrchr(copy,'.'); if (ext) *ext = '\0'; } filetype->UserData = copy; /* In case the time asking the user for file destination is */ /* longer than the time socket buffer is filled up, therefore */ /* we write data to temp file and then re-load it back. */ if (!WWWWriteToTempfile(mb,GetCharacter,&data,&tmpf,".tar")) goto cleanup; if ((fd = open(tmpf,O_RDONLY,0)) < 0) { sprintf(mb->message,"Cannot open file <p>Reason: %s",strerror(errno)); mb->help_code = "file_open_failed"; goto cleanup; } data.socket = fd; *mb->message = '\0'; if (managed = XtIsManaged(mb->widget)) XtUnmanageChild(mb->widget); if (!WWWAskForFileDestination(w,mb,filetype,FALSE)) goto cleanup; if (managed) XtManageChild(mb->widget); } } else /* http1 < 0 : either the client error or server error */ { if (http1 == 0) { strcat(mb->message,"Bad HTTP response from POST command"); mb->help_code = "http_bad_post"; } goto cleanup; } result = WWWLoadByFiletype(w,mb,filetype,GetCharacter,&data); cleanup: if (filetype) WWWFreeFiletype(filetype); if (s) socket_close(s); if (fd) { unlink(tmpf); XtFree(tmpf); } return result; } /* * Fetch the document using TCP/IP and HTTP * ---------------------------------------- */ Widget WWWFetchDocumentHTTP1(w,file,mb) Widget w; WWWFile *file; MessageBlock *mb; { char *command, *copy, name[128]; Widget result = NULL; DataSource data; int s, http1 = -1, fd = 0; WWWFiletype *filetype = NULL; char *tmpf; char referer[256]; ListItem *item; static List *http0List = NULL; char buffer[8096]; if (file->node == NULL) { strcat(mb->message,"No node specified for HTTP connection"); mb->help_code = "http_no_node"; return NULL; } if (file->port == 0) file->port = appResources.default_HTTP_port; if (http0List) { sprintf(name,"%s:%d",XrmQuarkToString(file->node),file->port); item = MidasFindItemInList(http0List,name); if (item) return WWWFetchDocumentHTTP(w,file,mb); } s = TCPIPConnect(file,mb); if (s == 0) return result; /* use static so that we don't need to waste time to get it each time */ if (htrq == NULL) htrq = WWWGetHTRQ(); if (WWWFromLink != DEADNODE && WWWFromLink != NULL) { char *fromurl; char *refer = "Referer: "; fromurl = WWWAsciiFile(WWWFromLink->file); strcpy(referer,refer); strcat(referer,fromurl); strcat(referer,"\r\n\r\n"); XtFree(fromurl); } else *referer = '\0'; command = XtMalloc(20 + strlen(htrq) + strlen(referer) + (file->file ? strlen(XrmQuarkToString(file->file)) : 0)); strcpy(command,"GET "); strcat(command,file->file ? XrmQuarkToString(file->file): "/"); strcat(command," HTTP/1.0\r\n"); strcat(command, htrq); if (*referer) strcat(command,referer); else strcat(command,"\r\n"); if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; XtFree(command); WWWInitDataSource(&data,mb,buffer,sizeof(buffer),socket_read,s); http1 = WWWUseHTTPVersion1(&data,filetype,mb,name); if (mb->flag == 1) goto cleanup; data.read = 0; /* Some (bad) Load routines expect this */ if (http1 == 1) { filetype = WWWGetFiletype(name,appResources.httpDefaultFiletype); if (filetype->Destination == fileDestination) { /* First we need to ask the user where he wants to save this thing?? */ int managed = 0; copy = strrchr(XrmQuarkToString(file->file), '/'); if (copy) copy = XtNewString(copy+1); else copy = XtNewString(XrmQuarkToString(file->file)); if (copy && filetype->Filter) { char *ext = strrchr(copy,'.'); if (ext) *ext = '\0'; } filetype->UserData = copy; /* In case the time asking the user for file destination is */ /* longer than the time socket buffer is filled up, therefore */ /* we write data to temp file and then re-load it back. */ if (!WWWWriteToTempfile(mb,GetCharacter,&data,&tmpf,".tar")) goto cleanup; if ((fd = open(tmpf,O_RDONLY,0)) < 0) { sprintf(mb->message,"Cannot open file <p>Reason: %s",strerror(errno)); mb->help_code = "file_open_failed"; goto cleanup; } data.socket = fd; *mb->message = '\0'; if (managed = XtIsManaged(mb->widget)) XtUnmanageChild(mb->widget); if (!WWWAskForFileDestination(w,mb,filetype,FALSE)) goto cleanup; if (managed) XtManageChild(mb->widget); } } else if (http1 == 0) { /* if the server does not understand HTTP/1.0, then use HTTP/0.9 */ /* * Experience shows that if the server fails to identify itself as * HTTP/1.0 compatible, then best course of action is to close the * socket and try again with HTTP/0.9 (otherwise various problems can arise). * * We cache the names of such servers so that future connections can use * HTTP/0.9 immediately. */ socket_close(s); if (!http0List) http0List = MidasCreateEmptyList("http0List"); sprintf(name,"%s:%d",XrmQuarkToString(file->node),file->port); MidasAddItemToList(http0List,name); return WWWFetchDocumentHTTP(w,file,mb); } else /* http1 < 0 : either the client error or server error */ { goto cleanup; } result = WWWLoadByFiletype(w,mb,filetype,GetCharacter,&data); cleanup: if (filetype) WWWFreeFiletype(filetype); if (s) socket_close(s); if (fd) { unlink(tmpf); XtFree(tmpf); } return result; } static int WWWUseHTTPVersion1(data,filetype,mb,ext) DataSource *data; WWWFiletype *filetype; MessageBlock *mb; char *ext; { int save, i, n; char response[256], c_type[256], c_encode[256], location[256], error[256]; char pheader[10]; char *copy; float level = 0.0; int rcode = 200; /* * Note: We cannot allow GetCharacter to buffer characters * internally, thus causing problems if the stream has to be * subsequently passed to a forked process that does not use * GetCharacter */ save = data->bsize; data->bsize = 1; for (i = 0; i < 8; i++) pheader[i] = GetCharacter(data); if (data->eof) goto fail; data->mb->newMessage = TRUE; strcpy(data->mb->message,"Reading HTTP header"); sscanf(pheader, "HTTP/%f", &level); if (level < 0.99) goto fail; c_type[0] = c_encode[0] = '\0'; for (n = i = 0; ; ) { char c = response[i++] = GetCharacter(data); if (data->eof) { if (rcode/100 == 2) /* if things were ok , they are not now! */ { rcode = 999; } break; } else if (c == '\n' || i > 253) /* read a line each time */ { response[i] = '\0'; if (n == 0) { sscanf(response,"%d",&rcode); strcpy(error,response); } else { char *token = strtok(response,":"); if (strlen(response) < 3) break; else if (!strcasecmp(token,"encoding")) strcpy(c_encode,strtok(NULL," \r\n")); else if (!strcasecmp(response,"content-type")) strcpy(c_type,strtok(NULL," \r\n")); else if (!strcasecmp(response,"location")) strcpy(location,strtok(NULL," \r\n")); else if (!strcasecmp(response,"content-length")) sscanf(strtok(NULL," \r\n"),"%d",&data->length); } i = 0; n++; } } strcpy(ext,"http1."); copy = strrchr(c_type,'/'); if (copy) strcat(ext,copy+1); if (*c_encode) { strcat(ext,"."); strcat(ext,c_encode); } data->bsize = save; if (rcode == 301 || rcode == 302) { sprintf(mb->message,"<h1>Moved</h1>Document has moved <a href=\"%s\" redirect=true>here</a>.",location); return -rcode; } else if (rcode == 999) { sprintf(mb->message,"Error reading document header."); mb->help_code = "header_error"; return -rcode; } else if (rcode/100 != 2) { mb->help_code = "request_error"; sprintf(mb->message,"Document fetch failed.<p>Reason: %s",error); return -rcode; } return 1; fail: data->bsize = save; return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/mwgopher.c�����������������������������������������������������������������������������100666 � 21345 � 173 � 17010 5554674764 13445� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * These are the WWW - Midas Interface routines */ #include "midasnet.h" #include "SGMLHyper.h" extern XrmQuark fileDestination; extern XrmQuark textDestination; #include <string.h> extern Widget WWWLoadGIF(); extern Widget WWWLoadPS(); /* * Fetch the document using TCP/IP and Gopher * ------------------------------------------ */ static int GopherBuildFile(data) DataSource *data; { static char prefix[] = "<plaintext>\n"; if (data->nleft == 0) { if (data->read == 0) { data->next = prefix; data->nleft = strlen(prefix); data->read += data->nleft; } else { return GetCharacter(data); } } if (data->nleft-- > 0) return *(data->next++); return EOF; } static int GopherBuildIndex(data) DataSource *data; { static char newbuffer[8096]; static DataSource newdata; int ip; if (data->nleft == 0) { int type; if (data->read == 0) { newdata = *data; newdata.buffer = newbuffer; newdata.bsize = sizeof(newdata); } /* * Each line contains * 1) A single character that gives the gopher "type" * 2) A User readable name (terminated by a tab) * 3) A Closure String (possibly null) (terminated by a tab) * 4) A Node name (terminated by a tab) * 5) A Port number (terminated by /r/n) */ type = GetCharacter(&newdata); while (type == ' ' || type == '\n') type = GetCharacter(&newdata); /* ??? */ if (type == '.' || type == EOF) { return EOF; } else { char buffer[900]; char *name; char *closure; char *node; char *port; char *icon; char *p; name = buffer; for (p = buffer; (ip = GetCharacter(&newdata)) != '\t' && ip != EOF; p++) *p = ip; *p++ = '\0'; closure = p; for ( ; (ip = GetCharacter(&newdata)) != '\t' && ip != EOF; ) { if (ip==' ' || ip=='"' || ip=='%' || ip == '?') { sprintf(p,"%%%2x",ip); p += 3; } else *p++ = ip; } *p++ = '\0'; node = p; for ( ; (ip = GetCharacter(&newdata)) != '\t' && ip != EOF; p++) *p = ip; *p++ = '\0'; port = p; for ( ; (ip = GetCharacter(&newdata)) != '\t' && ip != EOF && ip != '\r'; p++) *p = ip; for ( ; ip != '\r' && ip != EOF; ip = GetCharacter(&newdata)); *p++ = '\0'; GetCharacter(&newdata); /* Skip /n */ if (type == '0') { WWWFiletype *ft = WWWGetFiletype(closure,appResources.gopherDefaultFiletype); icon = ft->IconName; WWWFreeFiletype(ft); } else if (type == '1') icon = "directory"; else if (type == '7') icon = "search"; else if (type == 'I') icon = "graphics"; else if (type == '8') icon = "telnet"; else if (type == 'g') icon = "graphics"; else if (type == 'h') icon = "web"; else if (type == 'p') icon = "ps"; else icon = NULL; if (icon) sprintf(data->buffer,"<li pixmap=%s><a href=\"gopher://%s:%s/%c%s\" title=\"%s\">%s</a>\n", icon,node,port,type,closure,name,name); else sprintf(data->buffer,"<li pixmap=noEntry>%s\n",name); data->next = data->buffer; data->nleft = strlen(data->buffer); data->read += data->nleft; } } if (data->nleft-- > 0) return (ip = *(data->next++)) ? ip : EOF; return EOF; } Widget WWWFetchDocumentGOPHER(w,file,mb,title) Widget w; WWWFile *file; MessageBlock *mb; char *title; { char command[256]; char *q, *p, gopher_type; Widget result; DataSource data; int s; char buffer[8096]; if (file->node == NULL) { strcat(mb->message,"No node specified for Gopher connection"); mb->help_code = "gopher_no_node"; return NULL; } p = strcpy(command,file->file ? XrmQuarkToString(file->file) : "/"); if (*p == '/' ) p++; if (*p != '\0') gopher_type = *p++; else gopher_type = '1'; if (gopher_type == '8') return WWWFetchDocumentTELNET(w,file,mb); if (file->port == 0) file->port = appResources.default_Gopher_port; if (gopher_type == '7') { char *key; /* * Look for keyword (delimited by ?) */ key = strchr(p,'?'); if (key) *key = '\t'; else { XtPointer doc = SGMLHyperOpen(w); if (title && *title) { SGMLHyperWrite(doc,"<title>"); SGMLHyperWrite(doc,title); SGMLHyperWrite(doc,"

"); SGMLHyperWrite(doc,title); SGMLHyperWrite(doc,"

"); } SGMLHyperWrite(doc,"Give search term:"); return SGMLHyperClose(doc); } } s = TCPIPConnect(file,mb); if (s == 0) return NULL; /* * Gopher addresses use %xx as an escape sequence * Deal with it here. (assumes machine is using ASCII!) */ for (q = p ; *q != '\0' ; q++ ) if (*q == '%') { int x; sscanf(q,"%%%2x",&x); *q = (char) x; strcpy(q+1,q+3); } strcat(command, "\r\n"); if (!TCPIPWriteAndWaitForResponse(s,file,mb,p)) return NULL; WWWInitDataSource(&data,mb,buffer,sizeof(buffer),socket_read,s); if (gopher_type == '1' || gopher_type == '7') { XtPointer doc = SGMLHyperOpen(w); if (title && *title) { SGMLHyperWrite(doc,""); SGMLHyperWrite(doc,title); SGMLHyperWrite(doc,"

"); SGMLHyperWrite(doc,title); SGMLHyperWrite(doc,"

"); } else SGMLHyperWrite(doc,"

"); SGMLHyperWrite(doc,"Select one of:"); SGMLHyperWriteData(doc,GopherBuildIndex,&data); SGMLHyperWrite(doc,""); result = SGMLHyperClose(doc); } else if (gopher_type == 'g' || gopher_type == 'I') result = WWWLoadGIF(w,mb,GetCharacter,&data); else if (gopher_type == 'p') result = WWWLoadPS(w,mb,GetCharacter,&data); else if (gopher_type == 'h') result = SGMLHyperLoadText(w,GetCharacter,&data); else { WWWFiletype *filetype; p = strcpy(command,file->file ? XrmQuarkToString(file->file) : "/"); if (*p == '/' ) p++; if (*p != '\0') p++; filetype = WWWGetFiletype(p,appResources.gopherDefaultFiletype); if (filetype->Destination == fileDestination) { /* First we need to ask the user where he wants to save this thing?? */ if (!WWWAskForFileDestination(w,mb,filetype,FALSE)) goto cleanup; } if (filetype->Destination == textDestination) { XtPointer doc = SGMLHyperOpen(w); if (title && *title) { SGMLHyperWrite(doc,""); SGMLHyperWrite(doc,title); SGMLHyperWrite(doc,""); } SGMLHyperWrite(doc,""); SGMLHyperWriteData(doc,GetCharacter,&data); result = SGMLHyperClose(doc); } else { result = WWWLoadByFiletype(w,mb,filetype,GetCharacter,&data); } WWWFreeFiletype(filetype); } cleanup: socket_close(s); return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/mwftp.c��������������������������������������������������������������������������������100666 � 21345 � 173 � 51104 5554674765 12755� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * These are the WWW - Midas Interface routines */ #include "midasnet.h" #include "SGMLHyper.h" #include <string.h> extern XrmQuark fileDestination; extern char password[64]; extern XtAppContext appl_context; extern void ClearFlag(); /* * Fetch the document using TCP/IP and FTP * --------------------------------------- */ static int TCPIPListenConnect(mb,command,control_sock,port) MessageBlock *mb; char *command; int control_sock; int *port; { struct sockaddr_in server; struct sockaddr_in *sin = &server; int addr_len; int sockfd = 0; server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; /* * Sockets 0,1,2 are no good, just get another one */ for (;sockfd >= 0 && sockfd <= 2;) sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sockfd < 0) { sprintf(mb->message,"Can't open socket stream<p> Reason: %s",strerror(errno)); mb->help_code = "connection_fail"; return 0; } addr_len = sizeof(server); if (getsockname(control_sock,(struct sockaddr *)&server,&addr_len) < 0) { sprintf(mb->message,"Can't retrieve locally bound address of control socket <p> Reason: %s",strerror(errno)); mb->help_code = "connection_fail"; return 0; } server.sin_port = 0; /* This must be assigned after getsockname */ if (bind(sockfd,(struct sockaddr *)&server,sizeof(server)) < 0) { sprintf(mb->message,"Can't bind local address<p> Reason: %s",strerror(errno)); mb->help_code = "connection_fail"; return 0; } if (getsockname(sockfd,(struct sockaddr *)&server,&addr_len) < 0) { sprintf(mb->message,"Can't retrieve locally bound address of data socket <p> Reason: %s",strerror(errno)); mb->help_code = "connection_fail"; return 0; } if (listen(sockfd,1) < 0) { sprintf(mb->message,"Listen Failure <p> Reason: %s",strerror(errno)); mb->help_code = "connection_fail"; return 0; } *port = server.sin_port; sprintf(command,"PORT %d,%d,%d,%d,%d,%d\r\n", (int) *((unsigned char *)(&sin->sin_addr)+0), (int) *((unsigned char *)(&sin->sin_addr)+1), (int) *((unsigned char *)(&sin->sin_addr)+2), (int) *((unsigned char *)(&sin->sin_addr)+3), (int) *((unsigned char *)(&sin->sin_port)+0), (int) *((unsigned char *)(&sin->sin_port)+1)); return sockfd; } static int FTPResponse(data,port,messages) DataSource *data; int *port; char **messages; { char *command, temp[256]; int i = 0; int j = 0; int rc, size = 256; char cont; command = XtMalloc(size); while (1) { command[i] = GetCharacter(data); temp[j] = command[i]; if (command[i] == '\n') { temp[j] = '\0'; if (isdigit(*temp)) { sscanf(temp,"%d%c",&rc,&cont); if (cont != '-') break; } j = -1; size = size + 256; command = XtRealloc(command, size); } else if (command[i] == (char)EOF) { XtFree(command); return -1; } i++; j++; } command[i+1] = '\0'; *messages = command; /* * Handle some special return codes here */ if (rc==227 && port) { int reply, h0, h1, h2, h3, p0, p1; /* Parts of reply */ char *p; for (p=command; *p ; p++) if ((*p<'0')||(*p>'9')) *p = ' '; /* Keep only digits */ sscanf(command,"%d%d%d%d%d%d%d",&reply,&h0,&h1,&h2,&h3,&p0,&p1); *port = (p0<<8) + (p1&255); } if (rc==150 && port) { char check[6],*skip; int size = 0; skip = strrchr(command,'('); if (skip) { sscanf(skip,"(%d%5s",&size,check); if (size && !strcmp(check,"bytes")) *port = size; } } return rc; } static int FTPBuildDirectory(data) DataSource *data; { static char newbuffer[8096]; static char postfix[] = "</menu>"; static DataSource newdata; int ip; if (data->nleft == 0) { char *current = XtNewString(XrmQuarkToString(data->mb->file->file)); char *node = XrmQuarkToString(data->mb->file->node); if (data->read == 0) { newdata = *data; newdata.buffer = newbuffer; newdata.bsize = sizeof(newbuffer); sprintf(data->buffer,"<title>%s %s</title>\n<h1>%s</h1>\n See<a href=\"ftp://%s/$$login\"> login messages </a><menu>\n",node,current?current:"",current?current:"",node); if (current && *current && strcmp(current,"/")) strcat(data->buffer,"<li pixmap=directory><a href=\"../\">&lt;parent directory&gt;</a>\n"); data->next = data->buffer; data->nleft = strlen(data->buffer); data->read += data->nleft; } else { /* * Each line contains a file specification */ char buffer[900]; char *p, *q, *type; char *icon; int ip; char *system = data->mb->help_code; /* this was stashed here by FetchDocumentFTP */ /* Remove any trailing / from current, remembering current could be empty (or null) */ if (current && strrchr(current,'/') == current + strlen(current) - 1) *strrchr(current,'/') = '\0'; next: for (q = p = buffer; (ip = GetCharacter(&newdata)) != '\r' && ip != EOF; p++) *p = ip; if (GetCharacter(&newdata) == EOF) /* Skip /n */ { data->next = postfix; data->nleft = strlen(postfix)+1; /* include the trailing null */ data->read += data->nleft; } else { *p = '\0'; if (*(p-1) == '*') *--p = '\0'; if (*(p-1) == '@') *--p = '\0'; if (!strcmp(system,"VMS")) { char *t; if (*buffer == '[') for ( ; *q != '\0' && *q++ != ']' ; ); for (t = q ; *t != '\0'; t++) *t = tolower(*t); } else if (!strcmp(system,"OS/2")) { char *t, *size, *date, *time; size = strtok(buffer," "); type = strtok(NULL," "); date = strtok(NULL," "); time = strtok(NULL," "); q = strtok(NULL," "); for (t = q ; *t != '\0'; t++) *t = tolower(*t); } else { if (*(p-1) == '*') *--p = '\0'; if (*(p-1) == '@') *--p = '\0'; } if (*(p-1) == '/') { *--p = '\0'; icon = "directory"; } else if (!strcmp(system,"VMS") && !strcmp(p-4,".dir")) { icon = "directory"; p -= 4; *p = '\0'; } else if (!strcmp(system,"OS/2") && !strcmp(type,"DIR")) { if (!strcmp(q,".") || !strcmp(q,"..")) goto next; icon = "directory"; } else { WWWFiletype *ft = WWWGetFiletype(q,appResources.ftpDefaultFiletype); icon = ft->IconName; WWWFreeFiletype(ft); } if (icon) sprintf(data->buffer,"<li pixmap=%s><a href=\"%s/%s\">%s</a>\n",icon,current?current:"",q,q); else sprintf(data->buffer,"<li pixmap=noEntry>%s\n",q); data->next = data->buffer; data->nleft = strlen(data->buffer); data->read += data->nleft; } } XtFree(current); } if (data->nleft-- > 0) return (ip = *(data->next++)) ? ip : EOF; return EOF; } Widget WWWFetchDocumentFTP(w,file,mb) Widget w; WWWFile *file; MessageBlock *mb; { Widget result = NULL; DataSource data, new_data; char buffer[1024], new_buffer[8096]; int s, rc, new_socket = 0, port; WWWFile new; char command[256]; char *ext; char mode; char *msg; char *filename = XrmQuarkToString(file->file); char *save_message = NULL; WWWFiletype *filetype = NULL; struct sockaddr_in soc_addr; int soc_addrlen = sizeof(soc_addr); XtInputId id; static char *active_msg1; static char *active_msg2; static int active_port = 0; static XrmQuark active_node = (XrmQuark)NULL; static int active_socket = 0; static char active_mode = ' '; static char active_system[5]; new = *file; /* * If no node was specified, treat as local file spec */ if (file->node == NULL) return WWWFetchDocumentLOCAL(w,file,mb); if (file->port == 0) file->port = appResources.default_FTP_port; filetype = WWWGetFiletype(filename,appResources.ftpDefaultFiletype); if (filetype->Destination == fileDestination) { /* First we need to ask the user where he wants to save this thing?? * Also since this is an FTP transfer we need to ask if it is a binary * file. */ if (!WWWAskForFileDestination(w,mb,filetype,TRUE)) goto cleanup; } /* connect label is used for time-out goto */ connect: if (active_socket == 0 || file->port != active_port || file->node != active_node) { char *user = "anonymous"; if (active_socket) { socket_close(active_socket); active_socket = 0; XtFree(active_msg1); XtFree(active_msg2); } s = TCPIPConnect(file,mb); if (s == 0) return NULL; if (!TCPIPWriteAndWaitForResponse(s,file,mb,"")) goto cleanup; WWWInitDataSource(&data,mb,buffer,sizeof(buffer),socket_read,s); rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; active_msg1 = msg; if (rc/100 == 2) { sprintf(command,"USER %s\r\n",user); if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; active_msg2 = msg; } if (rc/100 == 3) { XtFree(active_msg2); sprintf(command,"PASS %s\r\n",password); if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; active_msg2 = msg; } if (rc/100 == 3) { XtFree(active_msg2); if (!TCPIPWriteAndWaitForResponse(s,file,mb,"ACCT noaccount\r\n")) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; active_msg2 = msg; } if (rc/100 != 2) { int maxlen = sizeof(mb->message) - 200; socket_close(s); if (strlen(msg) > maxlen) strcpy(msg + maxlen,"...(message too long...truncated)"); sprintf(mb->message,"Cannot login to <i>%s</i> port %d as user <i>%s</i> with password <i>%s</i> <p> Reason: <pre>\n%s</pre>", XrmQuarkToString(file->node),file->port,user,password,msg); mb->help_code = "cannot_login"; goto cleanup; } if (!TCPIPWriteAndWaitForResponse(s,file,mb,"SYST\r\n")) goto cleanup; rc =FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; if (rc/100 == 2) { sscanf(msg,"%*d%4s",active_system); } else active_system[0] = '\0'; XtFree(msg); active_socket = s; active_port = file->port; active_node = file->node; active_mode = 'A'; } else { s = active_socket; WWWInitDataSource(&data,mb,buffer,sizeof(buffer),socket_read,s); } /* * Display the login messages with /$$login as anchor */ if (file->file == XrmStringToQuark("/$$login")) { char c[256]; XtPointer temp = SGMLHyperOpen(w); sprintf(c,"<title> %s /Login Messages </title>",XrmQuarkToString(file->node)); SGMLHyperWrite(temp,c); SGMLHyperWrite(temp,"<h1> Login Messages </h1>"); SGMLHyperWrite(temp,"<xmp>"); SGMLHyperWrite(temp,active_msg1); SGMLHyperWrite(temp,active_msg2); SGMLHyperWrite(temp,"</xmp>"); return SGMLHyperClose(temp); } #ifdef PASV /* * Tell the other guy to shut up and listen */ if (!TCPIPWriteAndWaitForResponse(s,file,mb,"PASV\r\n")) goto cleanup; rc = FTPResponse(&data,&port,&msg); if (rc < 0) goto cleanup; /* if it is a time-out, connect again */ if (rc == 421) { active_socket = 0; XtFree(active_msg1); XtFree(active_msg2); XtFree(msg); goto connect; } if (rc/100 != 2) { if (strlen(msg) > 512) *(msg+512) = '\0'; sprintf(mb->message,"Server at %s port %d does not understand PASV command <p> Reason: %s",XrmQuarkToString(file->node),file->port,msg); mb->help_code = "brain_dead"; XtFree(msg); goto cleanup; } XtFree(msg); new.port = port; new_socket = TCPIPConnect(&new,mb); if (new_socket == 0) goto cleanup; #else /* Use Listen */ new_socket = TCPIPListenConnect(mb,command,s,&port); if (new_socket == 0) goto cleanup; if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; /* if it is a time-out, connect again */ if (rc == 421) { active_socket = 0; XtFree(active_msg1); XtFree(active_msg2); XtFree(msg); goto connect; } if (rc/100 != 2) { if (strlen(msg) > 512) *(msg+512) = '\0'; sprintf(mb->message,"Server at %s does not understand PORT command <p> Reason: %s",XrmQuarkToString(file->node),msg); mb->help_code = "brain_dead"; XtFree(msg); goto cleanup; } XtFree(msg); #endif WWWInitDataSource(&new_data,mb,new_buffer,sizeof(new_buffer),socket_read,new_socket); /* * Ok we are ready to get the file at last */ if (filetype->Binary) mode = 'I'; else mode = 'A'; if (mode != active_mode) { active_mode = mode; sprintf(command,"TYPE %c\r\n",mode); if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; XtFree(msg); } if (filename && *filename) { if (!strcmp(active_system,"VMS")) { char buf[521]; char *l, *t = buf; char *f = filename; if (*f == '/') f = ++filename; /* chop off leading / */ l = strrchr(f,'/'); if (l) { *t++ = '['; *t++ = '.'; } for ( ; *f != '\0' ; f++, t++) if ( *f == '/') *t = '.'; else *t = *f; *t = '\0'; if (l) *(buf+(l-filename)+2) = ']'; sprintf(command,"RETR %s\r\n",buf); } else if (!strcmp(active_system,"OS/2")) { if (*filename == '/') filename++; /* chop off leading / */ sprintf(command,"RETR %s\r\n",filename); } else sprintf(command,"RETR %s\r\n",filename); } else strcpy(command,"RETR\r\n"); if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; rc = FTPResponse(&data,&new_data.length,&msg); if (rc < 0) goto cleanup; XtFree(msg); if (rc/100 == 1) { #ifndef PASV mb->newMessage = TRUE; sprintf(mb->message,"Waiting for connection from %s port %d",XrmQuarkToString(file->node),port); mb->flag = -1; #ifndef NO_NBIO id = XtAppAddInput(appl_context,new_socket,(XtPointer) XtInputReadMask,ClearFlag,(XtPointer) &mb->flag); for (;mb->flag < 0;) { MidasFetchDispatchEvent(); } XtRemoveInput(id); #endif if (mb->flag == 1) { strcpy(mb->message,AbortMessage); goto cleanup; } new_data.socket = accept(new_socket,(struct sockaddr *)&soc_addr,&soc_addrlen); if (new_data.socket < 0) { sprintf(mb->message,"Can't accept connect request on socket %d",new_socket); mb->help_code = "connection_fail"; goto cleanup; } #endif /* PASV */ result = WWWLoadByFiletype(w,mb,filetype,GetCharacter,&new_data); if (result == NULL) { if (*mb->help_code) goto cleanup; else save_message = XtNewString(mb->message); } } else { /* we assume null is unix (nic.merit.edu for example) */ if (!strcmp(active_system,"UNIX") || !*active_system) { if (filename && *filename) sprintf(command, "CWD %s\r\n",filename); else strcpy(command,"CWD /\r\n"); if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; if (rc/100 == 2) { XtFree(msg); /* CWD msg */ if (!TCPIPWriteAndWaitForResponse(s,file,mb,"NLST -F\r\n")) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; XtFree(msg); if (rc/100 != 1) { if (!TCPIPWriteAndWaitForResponse(s,file,mb,"NLST\r\n")) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; } } } else if (!strcmp(active_system,"VMS")) { if (!filename || !*filename) sprintf(command,"NLST\r\n"); else { char *t; sprintf(command,"NLST [.%s]\r\n",filename); for (t = command; *t != '\0' ; t++) if (*t == '/') *t = '.'; } if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; } else if (!strcmp(active_system,"OS/2")) /* NLST under OS/2 doesn't show the directories! */ { if (filename && *filename) sprintf(command,"LIST %s\r\n",filename); else strcpy(command,"LIST\r\n"); if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; } else /* just hope for the best! */ { if (filename && *filename) sprintf(command,"NLST %s\r\n",filename); else strcpy(command,"NLST\r\n"); if (!TCPIPWriteAndWaitForResponse(s,file,mb,command)) goto cleanup; rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; } #ifndef PASV if (rc/100 == 1) { mb->newMessage = TRUE; sprintf(mb->message,"Waiting for connection from %s port %d",XrmQuarkToString(file->node),port); mb->flag = -1; #ifndef NO_NBIO id = XtAppAddInput(appl_context,new_socket,(XtPointer) XtInputReadMask,ClearFlag,(XtPointer) &mb->flag); for (;mb->flag < 0;) { MidasFetchDispatchEvent(); } XtRemoveInput(id); #endif if (mb->flag == 1) { strcpy(mb->message,AbortMessage); goto cleanup; } new_data.socket = accept(new_socket,(struct sockaddr *)&soc_addr,&soc_addrlen); if (new_data.socket < 0) { sprintf(mb->message,"Can't accept connect request on socket %d",new_socket); mb->help_code = "connection_fail"; goto cleanup; } #endif /* PASV */ mb->help_code = active_system; /* ugly way to get this into FTPBuildDirectory */ result = SGMLHyperLoadText(w,FTPBuildDirectory,&new_data); if (result) mb->help_code = ""; /* Get rid of temporary value */ } } socket_close(new_data.socket); socket_close(new_socket); new_socket = 0; WWWFreeFiletype(filetype); filetype = NULL; if (rc/100 == 1) { rc = FTPResponse(&data,NULL,&msg); if (rc < 0) goto cleanup; if (rc != 226 && result) { XtDestroyWidget(result); if (strlen(msg) > 512) *(msg+512) = '\0'; sprintf(mb->message,"Transfer incomplete at %s port %d <p> Reason: %s",XrmQuarkToString(file->node),file->port,msg); mb->help_code = "transfer_fail"; XtFree(msg); goto cleanup; } XtFree(msg); } else { sprintf(mb->message,"File access failed <p> Reason: %s",msg); mb->help_code = "file_access_fail"; XtFree(msg); goto cleanup; } if (save_message) { strcpy(mb->message,save_message); XtFree(save_message); } return result; cleanup: if (new_socket) socket_close(new_socket); if (active_socket) { socket_close(active_socket); active_socket = 0; } XtFree(save_message); if (filetype) WWWFreeFiletype(filetype); return NULL; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/mwmain.c�������������������������������������������������������������������������������100666 � 21345 � 173 � 6554 5554674765 13101� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Main routine for MidasWWW */ #include "midaswww.h" #include <stdio.h> extern Widget MidasInitializeUser(); extern Widget MidasInitializeFallback(); XtAppContext appl_context; #define WWWNversion "version" #define WWWCVersion "Version" static XtResource resources[] = { {WWWNversion, WWWCVersion, XtRString, sizeof(char *), XtOffsetOf(WWWResources,version),XtRString,(XtPointer) "0"}, }; static int DummyErrorHandler(dpy,ee) Display *dpy; XErrorEvent *ee; { return 0; } int main(argc,argv) int argc; char *argv[]; { int depth, n=0; Arg arglist[10]; static char *midas_resources[] = { #include "Midas.adh" "",NULL}; static char *midaswww_common_resources[] = { #include "Midaswww_common_part.adh" "",NULL}; static char *midaswww_color_resources[] = { #include "Midaswww_color_part.adh" "",NULL}; static char *midaswww_mono_resources[] = { #include "Midaswww_mono_part.adh" "",NULL}; static char **midaswww_resources; int none = 0; Widget top = MidasInitializeFallback(&none,NULL,midas_resources); appl_context = XtWidgetToApplicationContext(top); XtGetApplicationResources(top,(XtPointer) &appResources,resources,XtNumber(resources),NULL,0); if (strcmp(appResources.version,VERSION)) { fprintf(stderr,"Wrong version of Midas resource file found:\n"); fprintf(stderr,"Midas Version = %s ; Resource file Version = %s\n",VERSION,appResources.version); fprintf(stderr,"Please consult installation instructions\n"); exit(FAILURE); } XtSetArg(arglist[n],XtNdepth,&depth); n++; XtGetValues(top,arglist,n); if (depth > 4) { char **temp = midaswww_resources = (char **) XtMalloc(sizeof(char *) * (XtNumber(midaswww_common_resources) + XtNumber(midaswww_color_resources ))); memcpy(temp,midaswww_common_resources,sizeof(char *) * XtNumber(midaswww_common_resources)); temp += XtNumber(midaswww_common_resources) - 2; memcpy(temp,midaswww_color_resources ,sizeof(char *) * XtNumber(midaswww_color_resources )); } else { char **temp = midaswww_resources = (char **) XtMalloc(sizeof(char *) * (XtNumber(midaswww_common_resources) + XtNumber(midaswww_mono_resources ))); memcpy(temp,midaswww_common_resources,sizeof(char *) * XtNumber(midaswww_common_resources)); temp += XtNumber(midaswww_common_resources) - 2; memcpy(temp,midaswww_mono_resources ,sizeof(char *) * XtNumber(midaswww_mono_resources )); } XtAppSetFallbackResources(appl_context,midaswww_resources); top = MidasInitializeUser("midaswww",argv,&argc); XtFree((char *)midaswww_resources); XtGetApplicationResources(top,(XtPointer) &appResources,resources,XtNumber(resources),NULL,0); if (strcmp(appResources.version,VERSION)) { fprintf(stderr,"Wrong version of Midas WWW resource file found:\n"); fprintf(stderr,"Midas WWW Version = %s ; Resource file Version = %s\n",VERSION,appResources.version); fprintf(stderr,"Please consult installation instructions\n"); exit(FAILURE); } /* * Unless running in debug mode we will silently ignore any X errors */ #ifndef DEBUG XSetErrorHandler(DummyErrorHandler); #endif MidasStartInterpreter(top); WWWMidasInit(argv,argc); MidasMainLoop(); } ����������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/mwfont16.c�����������������������������������������������������������������������������100666 � 21345 � 173 � 6256 5554674765 13271� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdio.h> #include <errno.h> #include <ctype.h> #include <string.h> #include <X11/IntrinsicP.h> #include <X11/StringDefs.h> #include "SGMLTextP.h" #define isch16(c) ((c)&0x80) extern void ExtDrawString(w,img,dpy,wind,gc,x,y,copy,len) Widget w; Boolean img; Display *dpy; Drawable wind; GC gc; int x, y; char *copy; int len; { SGMLTextObject tw = (SGMLTextObject) w; char *np, *p = copy; int i, l; Boolean mode, lastmode; XFontStruct *font = tw->sgml_text.font; GC sgc = tw->sgml_text.font16_gc; GC invert_sgc = tw->sgml_text.font16_invert_gc; short swidth = tw->sgml_text.font16->max_bounds.width; if (isch16(*p)) mode = lastmode = TRUE; else mode = lastmode = FALSE; for (i=0, np=p;i < len;i++,p++) { if (isch16(*p)) mode = TRUE; else mode = FALSE; if (lastmode != mode && lastmode) { l = (int)( (p - np)/2); if (img) XDrawImageString16(dpy,wind,invert_sgc,x,y,(XChar2b *) np,l); else XDrawString16(dpy,wind,sgc,x,y,(XChar2b *) np,l); x += (l * swidth); np = p; lastmode = mode; } if (lastmode != mode && !lastmode) { l = p - np; if (img) XDrawImageString(dpy,wind,gc,x,y,np,l); else XDrawString(dpy,wind,gc,x,y,np,l); x += XTextWidth(font,np,l); np = p; lastmode = mode; } if (mode) { i++; p++; } } lastmode = mode; if (lastmode) { l = (int)( (p - np)/2); if (img) XDrawImageString16(dpy,wind,invert_sgc,x,y,(XChar2b *) np,l); else XDrawString16(dpy,wind,sgc,x,y,(XChar2b *) np,l); x += (l * swidth); } else { l = p - np; if (img) XDrawImageString(dpy,wind,gc,x,y,np,l); else XDrawString(dpy,wind,gc,x,y,np,l); x += XTextWidth(font,np,l); } } extern int ExtTextWidth(w,copy,len,byref) Widget w; char **copy; int len; Boolean byref; { SGMLTextObject tw = (SGMLTextObject) w; XFontStruct *font = tw->sgml_text.font; char *np, *p = *copy; Boolean mode, lastmode; int i, nc, l = 0; short swidth = tw->sgml_text.font16->max_bounds.width; if (len == 1) { if (isch16(*p)) { if (byref) *copy = p+1; return swidth; } else return XTextWidth(font,p,1); } if (isch16(*p)) mode = lastmode = TRUE; else mode = lastmode = FALSE; for (i=0, np=p;i < len;i++,p++) { if (isch16(*p)) mode = TRUE; else mode = FALSE; if (lastmode != mode && lastmode) { nc = (int)( (p - np)/2); l += ( nc * swidth); np = p; lastmode = mode; } if (lastmode != mode && !lastmode) { nc = p - np; l += XTextWidth(font,np,nc); np = p; lastmode = mode; } if (mode) { i++; p++; } } lastmode = mode; if (lastmode) { nc = (int)( (p - np)/2); l += ( nc * swidth); } else { nc = p - np; l += XTextWidth(font,np,nc); } return l; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midas.uil������������������������������������������������������������������������������100666 � 21345 � 173 � 260334 6003413510 13254� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������module vuitDummy names = case_sensitive version = " 2.1" value !`T^ Midas_Custom_Button_Width: 82; Midas_Cusom_Button_Offset: -35; Midas_Custom_Large_Font: font_table(font('-*-HELVETICA-BOLD-R-*--*-180-*-*-*-*-ISO8859-1')); coltab: color_table(background color = ' ', foreground color = '*'); HandyPakIcon: exported icon(color_table = coltab, ' ', ' ***************************************', ' * * **', ' * ** * *', ' * * *** * ** * * *', ' * ** *** * ** ** * * *', ' * * ** * ** * *', ' * * * * * * * *', ' * * * * *', ' * **** * ** * **', ' * * * ** * *', ' * * ** * *', ' * ** * *** * *', ' * * * * * * * * * *', ' * * *** * ** * *', ' * * * ** * **', ' * * * * *', ' * * * * *', ' * * * ** * *', ' * * * *', ' * * * * *', ' * * * ** * * * ***', ' * * * * * *', ' * * ** *** * * *** *', ' * * * ** * *** * * *', ' * **** ** * * *** *', ' * * * * *** * *', ' * * * * * * **', ' * * ** *** * * *', ' * *** * * * * *', ' * * * *** *', ' * * * * * *', ' * * *** * *', ' * ** * * **', ' * * *** *', ' * * * *', ' * * * *', ' * * * * *', ' ** * * * * * * * * *', ' ***************************************'); MidasIcon: exported icon(color_table = coltab, '** ** * **** ', ' *** * * * * ** * ', ' **** * * * * ** * ', ' * ** * * * * ** ** ', ' * ** ** ** * ', ' * * ', ' * ** ', ' * * ', ' * * ', ' * **** ', ' ********************** * ', ' * ****** ', ' * ****** ', ' * *** **** ****** ', ' * * ** * * ****** ', ' * *** * *** ****** ', ' ** * * * * * * ****** ', ' ** *** * *** ****** ', ' * * * ****** ', ' *** * ****** ', ' * * * ****** ', ' *** ** ** * ****** ', ' *** *** *** ****** ', ' ** ** ****** ', ' *** ***** * ', ' *** ** ** ******* ', ' *** ********* ******** ', ' *** ***** * ******* ', ' *** * ********* * ', ' *** * *** ** * * * ** ', ' ****** *** ***** ***** ', ' * ***** *** *********** ', ' * ** **** * * * ***** *** ', ' ** ** ******** **** ***** ', ' ****** *** ******** **** ', ' **** * ** ***** **', '*** ** ** * *** ', ' **** * *** ', ' ** ', ' '); list_offset: 7; Buitton_Bottom_Offset: 4; LabelTextOffset: -5; MidasVersion: exported "2.1"; list Midas_Custom_Label: arguments { XmNtopOffset = 10; XmNleftOffset = 9; XmNfontList = Midas_Custom_Large_Font; }; procedure midas_command_proc(); CustomCreate(integer); CustomDelVerb(); CustomAddVerb(); CustomSelVerb(); CustomAddMenu(); CustomDelMenu(); CustomSelMenu(); CustomVMAddSeparator(); CustomUpdateSensitivity(); CustomVMAddMenu(); CustomVMAddVerb(); CustomVMDel(); CustomVMUp(); CustomVMDown(); CustomSelConfMenu(); CustomVMSel(); CustomSelConfVerb(); CustomVMSelConf(); CustomApply(); CustomOk(); CustomReset(); CustomCancel(); CustomExit(integer); SendMidas(string); object Midas_Main: XmMainWindow { arguments { XmNworkWindow = XmCommand Midas_Command; }; controls { XmCommand Midas_Command; XmMenuBar { callbacks { MrmNcreateCallback = procedures { SendMidas( "Custom Connect CUSTOM \"<main>\" ."); }; }; }; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Custom Create CUSTOM ."); }; }; }; Midas_Command: XmCommand { arguments { }; callbacks { XmNcommandEnteredCallback = procedures { midas_command_proc(); }; MrmNcreateCallback = procedures { SendMidas( "Midas Register Name MidasCommand ."); }; }; }; Midas_Custom: XmFormDialog { arguments { XmNx = 9; XmNy = 499; XmNwidth = 612; XmNheight = 496; XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_NONE; XmNfractionBase = 90; XmNdialogTitle = compound_string("Midas Customize Verbs and Menus"); }; controls { XmForm { arguments { XmNx = 251; XmNy = 7; XmNwidth = 25; XmNheight = 355; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = 0; XmNtopOffset = 0; XmNleftPosition = 60; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmForm Midas_Custom_Buttons; }; controls { XmLabelGadget Midas_Custom_Verb_Menu_Label; XmPushButtonGadget Midas_Custom_Add_Verb; XmPushButtonGadget { arguments { XmNx = 91; XmNy = 252; XmNlabelString = compound_string("Add Menu"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 75; XmNtopOffset = 0; XmNleftOffset = Midas_Cusom_Button_Offset; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Midas_Custom_Add_Verb; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(5); }; XmNactivateCallback = procedures { CustomVMAddMenu(); }; }; }; XmPushButtonGadget Midas_Custom_Separator; XmPushButtonGadget { arguments { XmNx = 94; XmNy = 345; XmNlabelString = compound_string("Remove"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 75; XmNtopOffset = 0; XmNleftOffset = Midas_Cusom_Button_Offset; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Midas_Custom_Separator; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(7); }; XmNactivateCallback = procedures { CustomVMDel(); }; }; }; XmLabelGadget ActiveMenuLabel; XmScrolledList { arguments { XmNwidth = 181; XmNheight = 160; XmNlistSizePolicy = XmCONSTANT; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = list_offset; XmNtopOffset = 0; XmNrightOffset = list_offset; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 1; XmNbottomAttachment = XmATTACH_WIDGET; XmNtopWidget = XmLabelGadget Midas_Custom_Verb_Menu_Label; XmNbottomWidget = XmLabelGadget ActiveMenuLabel; XmNvisibleItemCount = 999; XmNx = 20; XmNy = 5; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(8); }; XmNbrowseSelectionCallback = procedures { CustomVMSel(); }; XmNdefaultActionCallback = procedures { CustomVMSelConf(); }; }; }; XmPushButtonGadget Midas_Custom_Up; XmPushButtonGadget { arguments { XmNx = 134; XmNy = 252; XmNlabelString = compound_string("Down"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 75; XmNtopOffset = 0; XmNleftOffset = Midas_Cusom_Button_Offset; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Midas_Custom_Up; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(3); }; XmNactivateCallback = procedures { CustomVMDown(); }; }; }; }; }; XmForm Midas_Custom_Command; XmForm Midas_Custom_Buttons; XmForm Verb_Form; XmForm { arguments { XmNx = 191; XmNy = 91; XmNwidth = 25; XmNheight = 25; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = 0; XmNtopOffset = 0; XmNleftPosition = 30; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 60; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmForm Verb_Form; XmNdefaultButton = XmPushButtonGadget Menu_Ok_Button; }; controls { XmLabelGadget Menu_Label; XmText Menu_Text; XmScrolledList { arguments { XmNwidth = 181; XmNheight = 160; XmNlistSizePolicy = XmCONSTANT; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = list_offset; XmNtopOffset = 0; XmNrightOffset = list_offset; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = list_offset; XmNbottomAttachment = XmATTACH_WIDGET; XmNtopWidget = XmLabelGadget Menu_Label; XmNbottomWidget = XmText Menu_Text; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(17); }; XmNdefaultActionCallback = procedures { CustomSelConfMenu(); }; XmNbrowseSelectionCallback = procedures { CustomSelMenu(); }; }; }; XmPushButtonGadget Menu_Ok_Button; XmPushButtonGadget { arguments { XmNx = 74; XmNy = 0; XmNlabelString = compound_string("Delete"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNleftPosition = 73; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Menu_Ok_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(20); }; XmNactivateCallback = procedures { CustomDelMenu(); }; }; }; }; }; }; callbacks { XmNhelpCallback = procedures { SendMidas( "Help . \"http://slacvx.slac.stanford.edu/MidasHelp/v09/custom.html\""); }; }; }; Midas_Custom_Buttons: XmForm { arguments { XmNx = 247; XmNy = 178; XmNwidth = 27; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = 0; XmNtopOffset = 0; XmNleftPosition = 60; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_FORM; }; controls { XmPushButtonGadget Midas_Custom_OK_Button; XmPushButtonGadget Midas_Custom_Apply_Button; XmPushButtonGadget { arguments { XmNx = 82; XmNy = 16; XmNlabelString = compound_string("Reset"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNleftPosition = 75; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Midas_Custom_Apply_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(12); }; XmNactivateCallback = procedures { CustomReset(); }; }; }; XmPushButtonGadget CustomHelp; XmPushButtonGadget { arguments { XmNx = 86; XmNy = 40; XmNlabelString = compound_string("Cancel"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNwidth = Midas_Custom_Button_Width; XmNleftPosition = 75; XmNtopWidget = XmPushButtonGadget Midas_Custom_OK_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(11); }; XmNactivateCallback = procedures { CustomCancel(); }; }; }; }; }; Midas_Custom_Apply_Button: XmPushButtonGadget { arguments { XmNx = 77; XmNy = 9; XmNlabelString = compound_string("Apply"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 10; XmNleftPosition = 25; XmNwidth = Midas_Custom_Button_Width; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(10); }; XmNactivateCallback = procedures { CustomApply(); }; }; }; Midas_Custom_OK_Button: XmPushButtonGadget { arguments { XmNx = 18; XmNy = 13; XmNlabelString = compound_string("OK"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = Buitton_Bottom_Offset; XmNleftPosition = 25; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Midas_Custom_Apply_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(9); }; XmNactivateCallback = procedures { CustomOk(); }; }; }; Midas_Custom_Command: XmForm { arguments { XmNx = 36; XmNy = 316; XmNwidth = 25; XmNheight = 126; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 60; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_FORM; XmNresizePolicy = XmRESIZE_GROW; }; controls { XmLabelGadget Midas_Custom_Command_Label; XmText { arguments { XmNx = 14; XmNy = 32; XmNwidth = 25; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 9; XmNtopOffset = 2; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 9; XmNbottomAttachment = XmATTACH_FORM; XmNtopWidget = XmLabelGadget Midas_Custom_Command_Label; XmNeditMode = XmMULTI_LINE_EDIT; XmNrows = 4; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(1); }; XmNvalueChangedCallback = procedures { CustomUpdateSensitivity(); }; }; }; }; }; Midas_Custom_Command_Label: XmLabelGadget { arguments { arguments Midas_Custom_Label; XmNlabelString = compound_string("Command(s) for Selected Verb"); XmNx = 8; XmNtopAttachment = XmATTACH_FORM; }; }; Midas_Custom_Add_Verb: XmPushButtonGadget { arguments { XmNx = 14; XmNy = 252; XmNlabelString = compound_string("Add Verb"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNwidth = Midas_Custom_Button_Width; XmNleftOffset = Midas_Cusom_Button_Offset; XmNleftPosition = 25; XmNtopOffset = 0; XmNbottomOffset = 4; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Midas_Custom_Separator; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(4); }; XmNactivateCallback = procedures { CustomVMAddVerb(); }; }; }; Midas_Custom_Separator: XmPushButtonGadget { arguments { XmNx = 19; XmNy = 279; XmNlabelString = compound_string("......."); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 25; XmNtopOffset = 0; XmNleftOffset = Midas_Cusom_Button_Offset; XmNwidth = Midas_Custom_Button_Width; XmNbottomOffset = Buitton_Bottom_Offset; XmNbottomAttachment = XmATTACH_FORM; XmNheight = 28; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(6); }; XmNactivateCallback = procedures { CustomVMAddSeparator(); }; }; }; Midas_Custom_Up: XmPushButtonGadget { arguments { XmNx = 11; XmNy = 223; XmNlabelString = compound_string("Up"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNwidth = Midas_Custom_Button_Width; XmNleftOffset = Midas_Cusom_Button_Offset; XmNleftPosition = 25; XmNtopOffset = 0; XmNbottomOffset = 5; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Midas_Custom_Add_Verb; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(2); }; XmNactivateCallback = procedures { CustomVMUp(); }; }; }; Midas_Custom_Verb_Menu_Label: XmLabelGadget { arguments { arguments Midas_Custom_Label; XmNlabelString = compound_string("Verbs in Menu"); XmNtopAttachment = XmATTACH_FORM; }; }; Verb_Label: XmLabelGadget { arguments { arguments Midas_Custom_Label; XmNlabelString = compound_string("Verbs"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; }; }; Verb_Enter_Button: XmPushButtonGadget { arguments { XmNx = 13; XmNy = 277; XmNlabelString = compound_string("Enter"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNleftPosition = 23; XmNwidth = Midas_Custom_Button_Width; XmNbottomOffset = Buitton_Bottom_Offset; XmNbottomAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(15); }; XmNactivateCallback = procedures { CustomAddVerb(); }; }; }; Verb_Text: XmText { arguments { XmNx = 18; XmNy = 264; XmNheight = 35; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = list_offset; XmNtopOffset = 0; XmNrightOffset = list_offset; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = list_offset; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Verb_Enter_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(14); }; XmNvalueChangedCallback = procedures { CustomUpdateSensitivity(); }; }; }; Verb_Form: XmForm { arguments { XmNx = 31; XmNy = 61; XmNwidth = 25; XmNheight = 315; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 30; XmNbottomOffset = -1+1; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmForm Midas_Custom_Command; XmNdefaultButton = XmPushButtonGadget Verb_Enter_Button; }; controls { XmLabelGadget Verb_Label; XmText Verb_Text; XmPushButtonGadget Verb_Enter_Button; XmToggleButtonGadget Verb_Is_Toggle; XmPushButtonGadget { arguments { XmNx = 81; XmNy = 279; XmNlabelString = compound_string("Delete"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNtopWidget = XmPushButtonGadget Verb_Enter_Button; XmNleftPosition = 71; XmNwidth = Midas_Custom_Button_Width; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(16); }; XmNactivateCallback = procedures { CustomDelVerb(); }; }; }; XmScrolledList { arguments { XmNwidth = 69; XmNheight = 182; XmNy = 25; XmNx = 77; XmNtopOffset = 0; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmLabelGadget Verb_Label; XmNleftOffset = list_offset; XmNleftAttachment = XmATTACH_FORM; XmNrightOffset = list_offset; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_WIDGET; XmNlistSizePolicy = XmCONSTANT; XmNvisibleItemCount = 999; XmNbottomWidget = XmToggleButtonGadget Verb_Is_Toggle; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(13); }; XmNbrowseSelectionCallback = procedures { CustomSelVerb(); }; XmNdefaultActionCallback = procedures { CustomSelConfVerb(); }; }; }; }; }; Menu_Label: XmLabelGadget { arguments { arguments Midas_Custom_Label; XmNlabelString = compound_string("Menus"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; }; }; Menu_Text: XmText { arguments { XmNx = 15; XmNy = 264; XmNheight = 35; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = list_offset; XmNtopOffset = 0; XmNrightOffset = list_offset; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = list_offset; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Menu_Ok_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(18); }; XmNvalueChangedCallback = procedures { CustomUpdateSensitivity(); }; }; }; Menu_Ok_Button: XmPushButtonGadget { arguments { XmNx = 9; XmNy = 277; XmNlabelString = compound_string("Enter"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNleftPosition = 25; XmNwidth = Midas_Custom_Button_Width; XmNbottomOffset = Buitton_Bottom_Offset; XmNbottomAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(19); }; XmNactivateCallback = procedures { CustomAddMenu(); }; }; }; ActiveMenuLabel: XmLabelGadget { arguments { XmNx = 10; XmNy = 239; XmNlabelString = compound_string("No Menu Selected"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 10; XmNtopOffset = 0; XmNbottomOffset = 5; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Midas_Custom_Up; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(21); }; }; }; MidasCustomExitDialog: XmWarningDialog { arguments { XmNmessageString = compound_string("Customization changes have not been saved.",separate=true) & compound_string("Save changes before exiting?"); XmNx = 34; XmNy = 55; XmNborderWidth = 1; XmNcancelLabelString = compound_string("No"); XmNokLabelString = compound_string("Yes"); XmNhelpLabelString = compound_string("Cancel"); XmNdialogStyle = XmDIALOG_FULL_APPLICATION_MODAL; XmNmessageAlignment = XmALIGNMENT_CENTER; XmNdialogTitle = compound_string("Confirmation Needed..."); }; callbacks { XmNcancelCallback = procedures { CustomExit(0); CustomExit(0); }; XmNhelpCallback = procedures { CustomExit(2); }; XmNokCallback = procedures { CustomExit(1); }; }; }; FileList: XmFormDialog { arguments { XmNx = 59; XmNy = 211; XmNwidth = 340; XmNheight = 211; XmNborderWidth = 1; XmNdialogTitle = compound_string("Midas - File Manager"); XmNresizePolicy = XmRESIZE_NONE; }; controls { XmMenuBar MidasFilesMenu; XmScrolledList { arguments { XmNx = 21; XmNy = 64; XmNwidth = 25; XmNheight = 25; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 0; XmNtopOffset = 0; XmNtopWidget = XmMenuBar MidasFilesMenu; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "midas realize list MidasFiles ."); }; }; }; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "custom create FILELIST ."); }; }; }; MidasFilesMenu: XmMenuBar { arguments { XmNrightOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNx = 10; XmNwidth = 263; XmNleftOffset = 0; XmNleftAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "custom connect FILELIST \"<main>\" ."); }; }; }; MidasFilesSelector: XmFileSelectionDialog { arguments { XmNx = 0; XmNy = 7; XmNborderWidth = 1; XmNdialogTitle = compound_string("Midas - Open File"); XmNpattern = compound_string("*.uid"); }; callbacks { XmNcancelCallback = procedures { SendMidas( "Midas PopDown ."); }; MrmNcreateCallback = procedures { SendMidas( "Midas PopDown ..Help"); }; }; }; MidasCallbackManager: XmFormDialog { arguments { XmNwidth = 377; XmNheight = 455; XmNborderWidth = 1; XmNdialogTitle = compound_string("Midas - Callback Manager"); XmNresizePolicy = XmRESIZE_NONE; XmNautoUnmanage = false; }; controls { XmLabelGadget MidasCallbackManagerLabel; XmPanedWindow { arguments { XmNx = 149; XmNy = 13; XmNwidth = 98; XmNheight = 151; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 4; XmNtopOffset = 54; XmNrightOffset = 6; XmNrightAttachment = XmATTACH_FORM; XmNtopWidget = XmLabelGadget MidasCallbackManagerLabel; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasCallbackManagerCancel; }; controls { XmScrolledList MidasCallbackManagerList; XmForm { arguments { XmNx = 4; XmNy = 134; XmNwidth = 25; XmNheight = 122; XmNborderWidth = 1; }; controls { XmLabelGadget MidasCallbackManagerLabel2; XmScrolledText MidasCallbackManagerText; }; }; }; }; XmPushButtonGadget MidasCallbackManagerCancel; XmPushButtonGadget MidasCallbackManagerApply; XmPushButtonGadget MidasCallbackManagerSave; XmLabelGadget MidasCallbackManagerClassLabel; XmText MidasCallbackManagerClassText; XmText MidasCallbackManagerWidgetText; }; }; MidasCallbackManagerLabel: XmLabelGadget { arguments { XmNx = 15; XmNy = 12; XmNlabelString = compound_string("Widget"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 15; XmNtopOffset = 18; }; }; MidasCallbackManagerList: XmScrolledList { arguments { XmNx = 18; XmNy = 12; XmNwidth = 25; XmNheight = 80; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Realize List CallbackList ."); }; }; }; MidasCallbackManagerText: XmScrolledText { arguments { XmNx = 186; XmNy = 32; XmNwidth = 125; XmNheight = 83; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 1; XmNtopOffset = 2; XmNrightOffset = 4; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; XmNtopWidget = XmLabelGadget MidasCallbackManagerLabel2; XmNeditMode = XmMULTI_LINE_EDIT; }; }; MidasErrorBox: XmErrorDialog { arguments { XmNmessageString = compound_string("Error Dialog Label"); XmNx = 43; XmNy = 62; XmNborderWidth = 1; XmNwidth = 418; XmNheight = 188; XmNdialogStyle = XmDIALOG_FULL_APPLICATION_MODAL; XmNdialogTitle = compound_string("Midas Error Message"); XmNokLabelString = compound_string("Acknowleged"); }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas PopDown ..Help\nMIdas PopDown ..Cancel"); }; }; }; MidasResourceManager: XmFormDialog { arguments { XmNx = 66; XmNy = 115; XmNwidth = 368; XmNheight = 288; XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_NONE; XmNautoUnmanage = false; XmNdialogTitle = compound_string("Midas - Resource Manager"); XmNdefaultButton = XmPushButtonGadget Apply; }; controls { XmLabelGadget Label; XmLabelGadget Class; XmText NameText; XmText ClassText; XmText Text; XmLabelGadget ValueLabel; XmPushButtonGadget Cancel; XmPushButtonGadget Apply; XmScrolledList List; XmPushButtonGadget Save; }; }; List: XmScrolledList { arguments { XmNx = 20; XmNy = 87; XmNwidth = 324; XmNheight = 87; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 20; XmNtopOffset = 8; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNrightOffset = 20; XmNbottomWidget = XmLabelGadget ValueLabel; XmNtopWidget = XmText ClassText; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Realize List ResourceList ."); }; }; }; Label: XmLabelGadget { arguments { XmNx = 18; XmNy = 6; XmNlabelString = compound_string("Widget"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 7; XmNtopOffset = 13; }; }; ValueLabel: XmLabelGadget { arguments { XmNx = 18; XmNy = 203; XmNlabelString = compound_string("Resource Value"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 18; XmNtopOffset = 0; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmText Text; }; }; Text: XmText { arguments { XmNx = 20; XmNy = 216; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 20; XmNtopOffset = 0; XmNrightOffset = 21; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Apply; }; }; Cancel: XmPushButtonGadget { arguments { XmNx = 242; XmNy = 261; XmNlabelString = compound_string("Dismiss"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNtopWidget = XmPushButtonGadget Apply; XmNrightOffset = 41; XmNrightAttachment = XmATTACH_FORM; }; callbacks { XmNactivateCallback = procedures { SendMidas( "Midas Popdown .^"); }; }; }; Apply: XmPushButtonGadget { arguments { XmNx = 55; XmNy = 260; XmNlabelString = compound_string("Apply"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = 92; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; XmNleftPosition = 16; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Center Horizontal . 50"); }; }; }; MidasIngotManager: XmFormDialog { arguments { XmNx = 98; XmNy = 143; XmNwidth = 359; XmNheight = 478; XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_NONE; XmNdialogTitle = compound_string("Midas - Ingot Manager"); }; controls { XmPanedWindow MidasIngotManagerPanes; XmLabelGadget MidasIngotManagerLabel; XmPushButtonGadget MidasIngotManagerDismiss; XmLabelGadget MidasIngotManagerClassLabel; XmText MidasIngotManagerNameText; XmText MidasIngotManagerClassText; XmPushButtonGadget MidasIngotManagerCreateNew; }; }; MidasCallbackManagerLabel2: XmLabelGadget { arguments { XmNx = 13; XmNy = 8; XmNlabelString = compound_string("Callback Command"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 13; XmNtopOffset = 8; }; }; MidasCallbackManagerCancel: XmPushButtonGadget { arguments { XmNx = 42; XmNy = 361; XmNlabelString = compound_string("Dismiss"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 185; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_NONE; XmNwidth = 73; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Center Horizontal . 75"); }; }; }; MidasCallbackManagerApply: XmPushButtonGadget { arguments { XmNx = 168; XmNy = 360; XmNlabelString = compound_string("Apply"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 27; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Center Horizontal . 50"); }; }; }; MidasCallbackManagerSave: XmPushButtonGadget { arguments { XmNx = 103; XmNy = 358; XmNlabelString = compound_string("Save"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 102; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Center Horizontal . 25"); }; }; }; MidasIngotManagerPanes: XmPanedWindow { arguments { XmNx = 46; XmNy = 78; XmNwidth = 25; XmNheight = 25; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 6; XmNtopOffset = 8; XmNrightOffset = 6; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 3; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasIngotManagerDismiss; XmNtopWidget = XmText MidasIngotManagerClassText; }; controls { XmScrolledList MidasIngotManagerList; XmForm { arguments { XmNx = 13; XmNy = 21; XmNwidth = 25; XmNheight = 33; XmNborderWidth = 1; }; controls { XmLabelGadget MidasIngotManagerValueLabel; XmText MidasIngotManagerValueText; XmPushButtonGadget MidasIngotManagerValueApply; XmText MidasIngotManagerCallbackText; XmLabelGadget MidasIngotManagerCallbackLabel; XmPushButtonGadget MidasIngotManagerCallbackApply; XmPushButtonGadget MidasIngotManagerCallbackSave; XmText MidasIngotValueOwnerText; XmLabelGadget MidasIngotValueOwnerLabel; XmToggleButtonGadget MidasIngotManagerCallbackOption; }; }; }; }; MidasIngotManagerList: XmScrolledList { arguments { XmNx = 37; XmNy = 9; XmNwidth = 16; XmNheight = 74; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Realize List IngotList ."); }; }; }; MidasIngotManagerDismiss: XmPushButtonGadget { arguments { XmNx = 11; XmNy = 199; XmNlabelString = compound_string("Dismiss"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 11; XmNtopOffset = 0; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_FORM; }; }; MidasIngotManagerLabel: XmLabelGadget { arguments { XmNx = 8; XmNy = 10; XmNlabelString = compound_string("Widget"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 8; XmNtopOffset = 10; }; }; MidasIngotManagerValueLabel: XmLabelGadget { arguments { XmNx = 10; XmNy = 5; XmNlabelString = compound_string("Value"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 10; XmNtopOffset = 6; }; }; MidasIngotManagerValueApply: XmPushButtonGadget { arguments { XmNx = 198; XmNy = 5; XmNlabelString = compound_string("Apply"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 4; XmNrightOffset = 3; XmNrightAttachment = XmATTACH_FORM; }; }; MidasIngotManagerValueText: XmText { arguments { XmNx = 69; XmNy = 6; XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 6; XmNtopOffset = 2; XmNleftWidget = XmLabelGadget MidasIngotManagerValueLabel; XmNrightOffset = 4; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmPushButtonGadget MidasIngotManagerValueApply; }; }; MidasIngotManagerCallbackApply: XmPushButtonGadget { arguments { XmNx = 14; XmNy = 150; XmNlabelString = compound_string("Apply"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 14; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; }; }; MidasIngotManagerCallbackSave: XmPushButtonGadget { arguments { XmNx = 255; XmNy = 145; XmNlabelString = compound_string("Save"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; XmNrightOffset = 19; XmNrightAttachment = XmATTACH_FORM; }; }; MidasIngotManagerCallbackLabel: XmLabelGadget { arguments { XmNx = 11; XmNy = 83; XmNlabelString = compound_string("Callback"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 7; XmNtopOffset = 7; XmNtopWidget = XmText MidasIngotValueOwnerText; }; }; MidasIngotManagerCallbackText: XmText { arguments { XmNx = 6; XmNy = 60; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 3; XmNtopOffset = 1; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmToggleButtonGadget MidasIngotManagerCallbackOption; XmNtopWidget = XmLabelGadget MidasIngotManagerCallbackLabel; XmNeditMode = XmMULTI_LINE_EDIT; }; }; Save: XmPushButtonGadget { arguments { XmNx = 151; XmNy = 247; XmNlabelString = compound_string("Save"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 55; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; }; }; WidgetList: XmMainWindow { arguments { XmNborderWidth = 1; XmNmessageWindow = XmRowColumn WidgetListButtons; XmNscrollingPolicy = XmAUTOMATIC; }; controls { XmMenuBar WidgetListMenu; XmRowColumn WidgetListButtons; }; }; WidgetListMenu: XmMenuBar { }; WidgetListButtons: XmRowColumn { arguments { XmNborderWidth = 1; XmNwidth = 214; XmNheight = 113; XmNy = 97; XmNorientation = XmHORIZONTAL; XmNresizeWidth = false; }; }; MidasExpressionEvaluator: XmFormDialog { arguments { XmNx = 19; XmNy = 116; XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_ANY; XmNdialogTitle = compound_string("Midas: Expression Evaluator"); XmNautoUnmanage = false; XmNdefaultButton = XmPushButtonGadget MidasEvalEvaluateButton; XmNmarginHeight = 10; }; controls { XmLabelGadget MidasEvalExpressionLabel; XmText MidasEvalExpressionText; XmLabelGadget MidasEvalResultLabel; XmText MidasEvalResultText; XmPushButtonGadget MidasEvalDismissButton; XmPushButtonGadget MidasEvalEvaluateButton; XmPushButtonGadget MidasEvalClearButton; XmLabelGadget MidasEvalTypeLabel; XmText MidasEvalTypeText; }; }; MidasEvalExpressionLabel: XmLabelGadget { arguments { XmNx = 13; XmNy = 28; XmNlabelString = compound_string("Expression"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 13; XmNtopOffset = 8; }; }; MidasEvalExpressionText: XmText { arguments { XmNx = 18; XmNy = 46; XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 14; XmNtopOffset = 3; XmNrightOffset = 8; XmNrightAttachment = XmATTACH_WIDGET; XmNtopWidget = XmPushButtonGadget MidasEvalEvaluateButton; XmNrightWidget = XmPushButtonGadget MidasEvalEvaluateButton; XmNrows = 1; }; }; MidasEvalResultText: XmText { arguments { XmNx = 19; XmNy = 113; XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 14; XmNtopOffset = -4; XmNrightOffset = 16; XmNrightAttachment = XmATTACH_FORM; XmNleftWidget = XmLabelGadget MidasEvalResultLabel; XmNtopWidget = XmLabelGadget MidasEvalResultLabel; XmNrows = 1; XmNeditable = false; }; }; MidasEvalResultLabel: XmLabelGadget { arguments { XmNx = 17; XmNy = 80; XmNlabelString = compound_string("Result"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 17; XmNtopOffset = 15; XmNtopWidget = XmText MidasEvalExpressionText; }; }; MidasEvalDismissButton: XmPushButtonGadget { arguments { XmNx = 22; XmNy = 174; XmNlabelString = compound_string("Dismiss"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 22; XmNtopOffset = 5; XmNtopWidget = XmLabelGadget MidasEvalTypeLabel; }; }; MidasEvalEvaluateButton: XmPushButtonGadget { arguments { XmNx = 271; XmNy = 39; XmNlabelString = compound_string("Evaluate"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = -1; XmNrightOffset = 11; XmNrightAttachment = XmATTACH_FORM; XmNtopWidget = XmLabelGadget MidasEvalExpressionLabel; }; }; MidasEvalClearButton: XmPushButtonGadget { arguments { XmNx = 291; XmNy = 137; XmNlabelString = compound_string("Clear"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNtopWidget = XmPushButtonGadget MidasEvalDismissButton; XmNrightOffset = 11; XmNrightAttachment = XmATTACH_FORM; }; }; MidasStartup: XmFormDialog { arguments { XmNx = 48; XmNy = 97; XmNwidth = 425; XmNheight = 225; XmNborderWidth = 1; XmNdialogTitle = compound_string("Midas Startup"); XmNautoUnmanage = false; XmNresizePolicy = XmRESIZE_GROW; }; controls { XmLabelGadget MidasStartupLabel; XmText MidasStartupText; XmPushButtonGadget MidasStartupSave; XmPushButtonGadget MidasStartupDismiss; }; }; MidasStartupLabel: XmLabelGadget { arguments { XmNx = 9; XmNy = 19; XmNlabelString = compound_string("Commands to be executed at startup"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 15; XmNtopOffset = 9; }; }; MidasStartupSave: XmPushButtonGadget { arguments { XmNx = 19; XmNy = 189; XmNlabelString = compound_string("Save"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 19; XmNtopOffset = 0; XmNbottomOffset = 7; XmNbottomAttachment = XmATTACH_FORM; }; }; MidasStartupDismiss: XmPushButtonGadget { arguments { XmNx = 235; XmNy = 192; XmNlabelString = compound_string("Dismiss"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 14; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = -1; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasStartupSave; }; }; MidasStartupText: XmText { arguments { XmNx = 13; XmNy = 33; XmNwidth = 269; XmNheight = 142; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 13; XmNtopOffset = 3; XmNrightOffset = 15; XmNrightAttachment = XmATTACH_FORM; XmNtopWidget = XmLabelGadget MidasStartupLabel; XmNbottomOffset = 5; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasStartupSave; XmNeditMode = XmMULTI_LINE_EDIT; }; }; MidasInfo: XmFormDialog { arguments { XmNx = 150; XmNy = 96; XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_ANY; XmNwidth = 336; }; controls { XmLabelGadget MidasInfoLabel; XmText MidasInfoClassText; XmLabelGadget MidasInfoNameLabel; XmLabelGadget MidasInfoClassLabel; XmText MidasInfoNameText; XmRowColumn MidasInfoButtonBox; XmArrowButtonGadget MidasInfoUpButton; }; }; MidasInfoLabel: XmLabelGadget { arguments { XmNx = 13; XmNy = 17; XmNlabelString = compound_string("Selected Widget"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 13; XmNtopOffset = 6; XmNalignment = XmALIGNMENT_CENTER; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; }; }; MidasInfoNameLabel: XmLabelGadget { arguments { XmNx = 15; XmNy = 45; XmNlabelString = compound_string("Name:"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 15; XmNtopOffset = 6; XmNheight = 27; XmNtopWidget = XmLabelGadget MidasInfoLabel; }; }; MidasInfoClassLabel: XmLabelGadget { arguments { XmNx = 16; XmNy = 98; XmNlabelString = compound_string("Class:"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 16; XmNtopOffset = 0; XmNbottomOffset = 5; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasInfoClassText; XmNheight = 31; }; }; MidasInfoNameText: XmText { arguments { XmNx = 65; XmNy = 26; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 7; XmNtopOffset = 0; XmNleftWidget = XmLabelGadget MidasInfoNameLabel; XmNrightOffset = 2; XmNrightAttachment = XmATTACH_WIDGET; XmNeditable = false; XmNbottomOffset = LabelTextOffset; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmLabelGadget MidasInfoNameLabel; XmNrightWidget = XmArrowButtonGadget MidasInfoUpButton; }; }; MidasInfoClassText: XmText { arguments { XmNx = 65; XmNy = 93; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = -1; XmNtopOffset = 8; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_OPPOSITE_WIDGET; XmNeditable = false; XmNtopWidget = XmText MidasInfoNameText; XmNleftWidget = XmText MidasInfoNameText; XmNrightWidget = XmText MidasInfoNameText; }; }; MidasInfoButtonBox: XmRowColumn { arguments { XmNx = 7; XmNy = 159; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 0; XmNtopOffset = 9; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNtopWidget = XmText MidasInfoClassText; }; }; MidasCallbackManagerClassLabel: XmLabelGadget { arguments { XmNx = 14; XmNy = 41; XmNlabelString = compound_string("Class"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasCallbackManagerClassText; XmNrightOffset = 4; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmText MidasCallbackManagerClassText; }; }; MidasCallbackManagerWidgetText: XmText { arguments { XmNx = 73; XmNy = 9; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 2; XmNtopOffset = 0; XmNleftWidget = XmLabelGadget MidasCallbackManagerLabel; XmNrightOffset = 5; XmNrightAttachment = XmATTACH_FORM; XmNeditable = false; XmNbottomOffset = -6; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmLabelGadget MidasCallbackManagerLabel; }; }; MidasCallbackManagerClassText: XmText { arguments { XmNx = 66; XmNy = 9; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = 0; XmNtopOffset = 7; XmNrightOffset = 5; XmNrightAttachment = XmATTACH_FORM; XmNeditable = false; XmNtopWidget = XmText MidasCallbackManagerWidgetText; XmNleftWidget = XmText MidasCallbackManagerWidgetText; }; }; Class: XmLabelGadget { arguments { XmNx = 15; XmNy = 38; XmNlabelString = compound_string("Class"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 4; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmText ClassText; XmNbottomOffset = 7; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText ClassText; }; }; NameText: XmText { arguments { XmNx = 85; XmNy = 5; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 5; XmNtopOffset = 0; XmNeditable = false; XmNleftWidget = XmLabelGadget Label; XmNbottomOffset = -7; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmLabelGadget Label; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; }; }; ClassText: XmText { arguments { XmNx = 86; XmNy = 49; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = -1; XmNtopOffset = 5; XmNeditable = false; XmNtopWidget = XmText NameText; XmNleftWidget = XmText NameText; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; }; }; MidasIngotManagerClassLabel: XmLabelGadget { arguments { XmNx = 10; XmNy = 41; XmNlabelString = compound_string("Class"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 8; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmText MidasIngotManagerClassText; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasIngotManagerClassText; }; }; MidasIngotManagerClassText: XmText { arguments { XmNx = 68; XmNy = 55; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 66; XmNtopOffset = 3; XmNrightOffset = 7; XmNrightAttachment = XmATTACH_FORM; XmNeditable = false; XmNtopWidget = XmText MidasIngotManagerNameText; }; }; MidasIngotManagerNameText: XmText { arguments { XmNx = 66; XmNy = 11; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 9; XmNtopOffset = 0; XmNrightOffset = 7; XmNrightAttachment = XmATTACH_FORM; XmNeditable = false; XmNbottomOffset = -8; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmLabelGadget MidasIngotManagerLabel; XmNleftWidget = XmLabelGadget MidasIngotManagerLabel; }; }; MidasIngotValueOwnerText: XmText { arguments { XmNx = 89; XmNy = 51; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = 0; XmNtopOffset = 4; XmNleftWidget = XmText MidasIngotManagerValueText; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_OPPOSITE_WIDGET; XmNrightWidget = XmText MidasIngotManagerValueText; XmNtopWidget = XmText MidasIngotManagerValueText; XmNeditable = false; }; }; MidasIngotValueOwnerLabel: XmLabelGadget { arguments { XmNx = 5; XmNy = 45; XmNlabelString = compound_string("Owner"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNheight = 22; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasIngotValueOwnerText; XmNrightOffset = 5; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmText MidasIngotValueOwnerText; }; }; MidasIngotManagerCreateNew: XmPushButtonGadget { arguments { XmNx = 257; XmNy = 366; XmNlabelString = compound_string("Create New Ingot..."); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_FORM; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; }; }; MidasCreateNewIngot: XmFormDialog { arguments { XmNx = 99; XmNy = 665; XmNwidth = 338; XmNheight = 139; XmNborderWidth = 1; XmNautoUnmanage = false; XmNdefaultButton = XmPushButtonGadget MidasCreateIngotOk; }; controls { XmLabelGadget MidasCreateIngotNameLabel; XmLabelGadget MidasCreateIngotOwnerLabel; XmText MidasCreateIngotOwnerText; XmArrowButtonGadget MidasCreateIngotUp; XmText MidasCreateIngotNameText; XmPushButtonGadget MidasCreateIngotOk; XmPushButtonGadget MidasCreateIngotCancel; }; }; MidasCreateIngotNameLabel: XmLabelGadget { arguments { XmNx = 13; XmNy = 18; XmNlabelString = compound_string("Name"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 5; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmText MidasCreateIngotNameText; XmNbottomOffset = 9; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasCreateIngotNameText; }; }; MidasCreateIngotOwnerLabel: XmLabelGadget { arguments { XmNx = 17; XmNy = 154; XmNlabelString = compound_string("Owner"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 6; XmNtopOffset = 0; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_NONE; XmNbottomOffset = 9; XmNbottomAttachment = XmATTACH_WIDGET; XmNheight = 28; XmNbottomWidget = XmPushButtonGadget MidasCreateIngotOk; }; }; MidasCreateIngotUp: XmArrowButtonGadget { arguments { XmNx = 299; XmNy = 76; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 10; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = -1; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmLabelGadget MidasCreateIngotOwnerLabel; }; }; MidasCreateIngotNameText: XmText { arguments { XmNx = 102; XmNy = 11; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = -1; XmNtopOffset = 0; XmNbottomOffset = 7; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmText MidasCreateIngotOwnerText; XmNleftWidget = XmText MidasCreateIngotOwnerText; XmNwidth = 176; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_OPPOSITE_WIDGET; XmNrightWidget = XmText MidasCreateIngotOwnerText; }; }; MidasCreateIngotOwnerText: XmText { arguments { XmNx = 76; XmNy = 100; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 6; XmNtopOffset = 0; XmNbottomOffset = -5; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNrightOffset = 6; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmArrowButtonGadget MidasCreateIngotUp; XmNbottomWidget = XmLabelGadget MidasCreateIngotOwnerLabel; XmNleftWidget = XmLabelGadget MidasCreateIngotOwnerLabel; }; }; MidasCreateIngotOk: XmPushButtonGadget { arguments { XmNx = 7; XmNy = 91; XmNlabelString = compound_string("Ok"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 29; XmNtopOffset = 0; XmNbottomOffset = 3; XmNbottomAttachment = XmATTACH_FORM; }; }; MidasCreateIngotCancel: XmPushButtonGadget { arguments { XmNx = 220; XmNy = 94; XmNlabelString = compound_string("Cancel"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasCreateIngotOk; XmNrightOffset = 8; XmNrightAttachment = XmATTACH_FORM; }; }; MidasEvalTypeText: XmText { arguments { XmNx = 155; XmNy = 83; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = 0; XmNtopOffset = 4; XmNrightOffset = 16; XmNrightAttachment = XmATTACH_FORM; XmNleftWidget = XmText MidasEvalResultText; XmNrows = 1; XmNeditable = false; XmNtopWidget = XmText MidasEvalResultText; }; }; MidasEvalTypeLabel: XmLabelGadget { arguments { XmNx = 17; XmNy = 132; XmNlabelString = compound_string("Result",separate=true) & compound_string("Type"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 17; XmNtopOffset = 0; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasEvalTypeText; }; }; MidasInfoUpButton: XmArrowButtonGadget { arguments { XmNx = 301; XmNy = 33; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNwidth = 34; XmNrightOffset = 1; XmNrightAttachment = XmATTACH_FORM; XmNheight = 29; XmNbottomOffset = -28; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmLabelGadget MidasInfoNameLabel; }; }; MidasIngotManagerCallbackOption: XmToggleButtonGadget { arguments { XmNlabelString = compound_string("Invoke Callback When Parent Created"); XmNleftAttachment = XmATTACH_FORM; XmNtopAttachment = XmATTACH_NONE; XmNleftOffset = 14; XmNtopOffset = 2; XmNy = 176; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasIngotManagerCallbackApply; XmNbottomOffset = 1; }; }; MidasHelp: XmMainWindow { arguments { XmNx = 150; XmNy = 104; XmNborderWidth = 1; XmNwidth = 454; XmNheight = 418; XmNmessageWindow = XmForm MidasHelpBulletinBoard; XmNscrollingPolicy = XmAUTOMATIC; }; controls { XmForm MidasHelpBulletinBoard; unmanaged XmPromptDialog MidasHelpSearchDialog; }; }; MidasHelpBulletinBoard: XmForm { arguments { XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_GROW; XmNmarginHeight = 10; }; controls { XmPushButtonGadget MidasHelpGoBack; XmPushButtonGadget MidasHelpSearch; XmPushButtonGadget MidasHelpDismiss; }; }; MidasHelpGoBack: XmPushButtonGadget { arguments { XmNx = 11; XmNy = 2; XmNlabelString = compound_string("Go Back"); XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 11; XmNbottomAttachment = XmATTACH_FORM; XmNbottomOffset = 0; }; }; MidasHelpDismiss: XmPushButtonGadget { arguments { XmNlabelString = compound_string("Dismiss"); XmNleftAttachment = XmATTACH_NONE; XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = 367; XmNtopOffset = 0; XmNx = 367; XmNrightAttachment = XmATTACH_FORM; XmNrightOffset = 12; XmNtopWidget = XmPushButtonGadget MidasHelpGoBack; }; }; MidasHelpSearch: XmPushButtonGadget { arguments { XmNlabelString = compound_string("Search..."); XmNleftAttachment = XmATTACH_WIDGET; XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = 19; XmNtopOffset = 0; XmNtopWidget = XmPushButtonGadget MidasHelpGoBack; XmNleftWidget = XmPushButtonGadget MidasHelpGoBack; }; }; MidasHelpSearchDialog: XmPromptDialog { arguments { XmNborderWidth = 1; }; }; Verb_Is_Toggle: XmToggleButtonGadget { arguments { XmNlabelString = compound_string("Is Toggle Button"); XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNtopAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 246; XmNy = 246; XmNleftWidget = XmText Verb_Text; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmText Verb_Text; XmNbottomOffset = 1; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(22); }; }; }; CustomHelp: XmPushButtonGadget { arguments { XmNx = 86; XmNy = 51; XmNlabelString = compound_string("Help"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = Buitton_Bottom_Offset; XmNwidth = Midas_Custom_Button_Width; XmNleftPosition = 75; XmNtopWidget = XmPushButtonGadget Midas_Custom_OK_Button; }; callbacks { XmNactivateCallback = procedures { SendMidas( "Help . \"http://slacvx.slac.stanford.edu/MidasHelp/v09/custom.html\""); }; }; }; end module; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Midas.adh������������������������������������������������������������������������������100666 � 21345 � 173 � 46064 6003413532 13145� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"midas.Version: 2.1\n", "midas*MidasIngotManagerCallbackApply.activateCallback: Set Callback currentWidget GetValue(MidasIngotManager...MidasIngotManagerList,selectedItems) GetValue(MidasIngotManager...MidasIngotManagerCallbackText,value)\\n\ Set Ingot Option currentWidget GetValue(MidasIngotManager...MidasIngotManagerList,selectedItems) GetValue(MidasIngotManager...MidasIngotManagerCallbackOption,set)\\n\ Set Sensitive .^.MidasIngotManagerCallbackSave True\\n\ Set Sensitive . False\n", "midas*MidasIngotManagerCallbackApply.currentWidget: Set Sensitive . False\n", "midas*MidasIngotManagerCallbackApply.midasIngots: currentWidget\n", "midas*MidasIngotManagerNameText.currentWidget: Set Value . value WidgetName(currentWidget)\n", "midas*MidasIngotManagerNameText.midasIngots: currentWidget\n", "midas*WidgetListList.defaultActionCallback: If GetValue(.^^^XmMainWindow...Show_Children,sensitive) Invoke Callback .^^^XmMainWindow...Show_Children activateCallback\n", "midas*WidgetListList.browseSelectionCallback: Set Ingot WidgetList \"currentWidget\" GetValue(.,selectedItems)\n", "midas*MidasEvalDismissButton.activateCallback: Midas PopDown .^\n", "midas*XmForm.Text.currentWidget: Set Value . value \"\"\\n\ Set Sensitive . False\n", "midas*XmForm.Text.midasIngots: currentWidget\n", "midas*XmForm.Text.valueChangedCallback: Set Sensitive .^^^...Apply True\n", "midas*MidasCreateNewIngot.currentWidget: Invoke Callback . mapCallback\n", "midas*MidasCreateNewIngot.midasIngots: currentWidget Owner\n", "midas*MidasCreateNewIngot.dialogTitle: Midas - Create New Ingot\n", "midas*MidasCreateNewIngot.mapCallback: Set Ingot . Owner currentWidget\\n\ Set Value ..MidasCreateIngotNameText value \"\"\n", "midas*MidasStartupText.valueChangedCallback: Set Sensitive .^.MidasStartupSave True\n", "midas*MidasCreateIngotOwnerText.editable: false\n", "midas*MidasCreateIngotOwnerText.midasIngots: Owner\n", "midas*MidasCreateIngotOwnerText.Owner: Set Value . value WidgetName(Owner)\n", "midas*MidasEvalResultText.midasIngots: Result\n", "midas*MidasEvalResultText.Result: Set Value . value Result\n", "midas*MidasCallbackManagerClassText.currentWidget: Set Value . value WidgetClass(currentWidget)\n", "midas*MidasCallbackManagerClassText.midasIngots: currentWidget\n", "midas*MidasIngotManagerCallbackText.currentWidget: Set Value . value \"\"\\n\ Set Sensitive . False\n", "midas*MidasIngotManagerCallbackText.midasIngots: currentWidget\n", "midas*MidasIngotManagerCallbackText.valueChangedCallback: Set Sensitive .^.MidasIngotManagerCallbackApply True\\n\ Set Sensitive .^.MidasIngotManagerCallbackOption GetValue(.,value)!=\"\"\n", "midas*MidasIngotManagerCallbackOption.currentWidget: Set Sensitive . False\n", "midas*MidasIngotManagerCallbackOption.midasIngots: currentWidget\n", "midas*MidasIngotManagerCallbackOption.valueChangedCallback: Set Sensitive .^.MidasIngotManagerCallbackApply True\n", "midas*MidasIngotManagerValueText.currentWidget: Set Value . value \"\"\\n\ Set Sensitive . False\n", "midas*MidasIngotManagerValueText.midasIngots: currentWidget\n", "midas*MidasIngotManagerValueText.valueChangedCallback: Midas Set Sensitive .^.MidasIngotManagerValueApply True\n", "midas*Label.currentWidget: \n", "midas*Label.midasIngots: currentWidget\n", "midas*MidasCallbackManagerSave.activateCallback: Store Resource currentWidget GetValue(MidasCallbackManager...MidasCallbackManagerList,selectedItems)\\n\ Set Sensitive . False\n", "midas*MidasCallbackManagerSave.currentWidget: Set Sensitive . False\n", "midas*MidasCallbackManagerSave.midasIngots: currentWidget\n", "midas*MidasCallbackManagerLabel.currentWidget: \n", "midas*MidasCallbackManagerLabel.midasIngots: currentWidget\n", "midas*MidasIngotManagerCallbackSave.activateCallback: Store Callback currentWidget GetValue(MidasIngotManager...MidasIngotManagerList,selectedItems)\\n\ Set Sensitive . False\n", "midas*MidasIngotManagerCallbackSave.currentWidget: Set Sensitive . False\n", "midas*MidasIngotManagerCallbackSave.midasIngots: currentWidget\n", "midas*MidasEvalTypeText.midasIngots: Result\n", "midas*MidasEvalTypeText.Result: \n", "midas*NameText.currentWidget: Set Value . value WidgetName(currentWidget)\n", "midas*NameText.midasIngots: currentWidget\n", "midas*MidasEvalEvaluateButton.activateCallback: Set Ingot .^ Result Evalu8(GetValue(.^.MidasEvalExpressionText,value))\\n\ Set Value .^.MidasEvalTypeText value Type(Result)\n", "midas*ClassText.currentWidget: Set Value . value WidgetClass(currentWidget)\n", "midas*ClassText.midasIngots: currentWidget\n", "midas*MidasHelp.midasCreateCallback: Create Widget . SGMLHyper MidasHelpHyper\n", "midas*MidasHelp.Position: \n", "midas*MidasHelp.PositionExecuteWhenCreated: True\n", "midas*MidasHelp.midasIngots: Position\n", "midas*MidasHelpDialog.title: Midas Help\n", "midas*MidasCreateIngotUp.activateCallback: Set Ingot .^ Owner Parent(Owner)\n", "midas*MidasCreateIngotUp.midasIngots: Owner\n", "midas*MidasCreateIngotUp.Owner: Set Sensitive . Owner!=Shell(Owner)\n", "midas*Toggle.currentWidget: Set Sensitive . currentWidget!=\"\"\n", "midas*Toggle.midasIngots: currentWidget\n", "midas*MidasStartup.mapCallback: Midas Set Value ..MidasStartupText value GetAppResource(Midas,startup)\\n\ Midas Set Sensitive ..MidasStartupSave False\n", "midas*WidgetList*Tree.XmPushButton.activateCallback: if GetClickCount()==2 Toggle Children currentWidget \\n\ Set Ingot .^^^XmMainWindow currentWidget TreeToWidget(.)\n", "midas*WidgetList.midasIngots: currentWidget TreeStyle\n", "midas*WidgetList.TreeStyle: \n", "midas*WidgetList.midasCreateCallback: Custom Create WIDGETLIST .\\n\ Set Ingot . TreeStyle left\\n\ Create Widget . Tree WidgetTree\\n\ Create Widget Tree ....WidgetTree\n", "midas*WidgetList.: \n", "midas*WidgetList.TreeStyleExecuteWhenCreated: False\n", "midas*WidgetList.mappedWhenManaged: true\n", "midas*MidasCallbackManagerList.currentWidget: Unrealize List CallbackList\\n\ Get Callbacks CallbackList currentWidget\\n\ Realize List CallbackList .\\n\n", "midas*MidasCallbackManagerList.midasIngots: currentWidget\n", "midas*MidasCallbackManagerList.browseSelectionCallback: Set Value MidasCallbackManager...MidasCallbackManagerText value GetValue(currentWidget,GetValue(.,selectedItems))\\n\ Set Sensitive MidasCallbackManager...MidasCallbackManagerText True\\n\ Set Sensitive .^^^...MidasCallbackManagerApply False\\n\ Set Sensitive .^^^...MidasCallbackManagerSave False\n", "midas*Save.activateCallback: Store Resource currentWidget GetValue(MidasResourceManager...List,selectedItems)\\n\ Set Sensitive . False\n", "midas*Save.currentWidget: Set Sensitive . False\n", "midas*Save.midasIngots: currentWidget\n", "midas*MidasCallbackManagerText.currentWidget: Set Value . value \"\"\\n\ Set Sensitive . False\n", "midas*MidasCallbackManagerText.midasIngots: currentWidget\n", "midas*MidasCallbackManagerText.valueChangedCallback: Set Sensitive .^^^...MidasCallbackManagerApply True \\n\n", "midas*MidasIngotManagerDismiss.activateCallback: Midas PopDown .^\n", "midas*MidasIngotManagerLabel.currentWidget: \n", "midas*MidasIngotManagerLabel.midasIngots: currentWidget\n", "midas*MidasCreateIngotCancel.activateCallback: PopDown .^\n", "midas*MidasIngotManagerList.currentWidget: UnRealize List IngotList\\n\ Get Ingots IngotList currentWidget\\n\ Realize List IngotList .\\n\n", "midas*MidasIngotManagerList.midasIngots: currentWidget\n", "midas*MidasIngotManagerList.browseSelectionCallback: Set Value MidasIngotManager...MidasIngotManagerValueText value GetIngot(currentWidget,GetValue(.,selectedItems))\\n\ Set Value MidasIngotManager...MidasIngotManagerCallbackText value GetCallback(currentWidget,GetValue(.,selectedItems))\\n\ Set Value MidasIngotManager...MidasIngotValueOwnerText value WidgetName(GetValueOwner(currentWidget,GetValue(.,selectedItems)))\\n\ Set Value MidasIngotManager...MidasIngotManagerCallbackOption set GetIngotOption(currentWidget,GetValue(.,selectedItems))\\n\ Set Sensitive .^^^...MidasIngotManagerValueText True\\n\ Set Sensitive .^^^...MidasIngotManagerCallbackText True\\n\ Set Sensitive .^^^...MidasIngotManagerCallbackOption GetCallback(currentWidget,GetValue(.,selectedItems))!=\"\"\\n\ Set Sensitive .^^^...MidasIngotManagerValueApply False\\n\ Set Sensitive .^^^...MidasIngotManagerCallbackApply False\\n\ Set Sensitive .^^^...MidasIngotManagerCallbackSave False\n", "midas*Vertical_Tree.TreeStyle: Set Value . set TreeStyle==top\n", "midas*Vertical_Tree.TreeStyleExecuteWhenCreated: True\n", "midas*Vertical_Tree.midasIngots: TreeStyle\n", "midas*Apply.activateCallback: Set Value currentWidget GetValue(MidasResourceManager...List,selectedItems) GetValue(MidasResourceManager...Text,value)\\n\ Set Sensitive .^.Save True\\n\ Set Sensitive . False\n", "midas*Apply.currentWidget: Set Sensitive . False\n", "midas*Apply.midasIngots: currentWidget\n", "midas*MidasExpressionEvaluator.midasIngots: Result\n", "midas*MidasExpressionEvaluator.Result: \n", "midas*MidasExpressionEvaluator.mapCallback: Invoke Callback ..MidasEvalClearButton activateCallback\n", "midas*MidasEvalClearButton.activateCallback: Set Value .^.MidasEvalResultText value \"\"\\n\ Set Value .^.MidasEvalTypeText value \"\"\\n\ Set Value .^.MidasEvalExpressionText value \"\"\\n\n", "midas*MidasInfoUpButton.activateCallback: Set Ingot .^^^WidgetList currentWidget Parent(currentWidget)\n", "midas*MidasInfoUpButton.currentWidget: Set Sensitive . currentWidget!=Shell(currentWidget)\n", "midas*MidasInfoUpButton.midasIngots: currentWidget\n", "midas*MidasInfoButtonBox.midasCreateCallback: Custom Connect WIDGETLIST \"<Info Buttons>\" .\n", "midas*MidasIngotManager.autoUnmanage: false\n", "midas*MidasCreateIngotOk.activateCallback: Set Ingot Owner %GetValue(.^.MidasCreateIngotNameText,value) \"\"\\n\ Store Callback Owner %GetValue(.^.MidasCreateIngotNameText,value)\\n\ PopDown .^\\n\ Get Ingots IngotList currentWidget\\n\n", "midas*WidgetListButtons.midasCreateCallback: Custom Connect WIDGETLIST \"<buttons>\" .\n", "midas*Pop_Down.currentWidget: Set Sensitive . currentWidget!=&&IsManaged(currentWidget)\n", "midas*Pop_Down.midasIngots: currentWidget\n", "midas*MidasCreateIngotNameText.valueChangedCallback: Set Sensitive .^.MidasCreateIngotOk GetValue(.,value)!=\"\"\n", "midas*Midas_Command.promptString: Midas Command\n", "midas*List.currentWidget: Unrealize List ResourceList\\n\ If currentWidget!=\"\" Get Resources ResourceList currentWidget\\n\ Else Empty List ResourceList\\n\ Realize List ResourceList .\\n\n", "midas*List.midasIngots: currentWidget\n", "midas*List.browseSelectionCallback: Set Value MidasResourceManager.Text value GetValue(currentWidget,GetValue(.,selectedItems))\\n\ Set Sensitive .^^^...Text True\\n\ Set Sensitive .^^^...Apply False\\n\ Set Sensitive .^^^...Save False\n", "midas*Pop_Up.currentWidget: Set Sensitive . currentWidget!=&&IsManaged(currentWidget)==False\n", "midas*Pop_Up.midasIngots: currentWidget\n", "midas*MidasInfo.midasIngots: currentWidget\n", "midas*MidasInfo.dialogTitle: Midas - Widget Info\n", "midas*MidasInfoNameText.currentWidget: Set Value . value WidgetName(currentWidget)\n", "midas*MidasInfoNameText.midasIngots: currentWidget\n", "midas*Show_Children.currentWidget: Set Sensitive . currentWidget!=&&HasChildren(currentWidget)\\n\ if (GetValue(.,sensitive)&&ChildrenInTree(currentWidget)==True&&GetValue(.,labelString)==\"Show Children\") Set Value . labelString \"Hide Children\"\\n\ else if (GetValue(.,sensitive)&&ChildrenInTree(currentWidget)==False&&GetVAlue(.,labelString)==\"Hide Children\") Set Value . labelString \"Show Children\"\n", "midas*Show_Children.midasIngots: currentWidget\n", "midas*Show_Children.currentWidgetExecuteWhenCreated: True\n", "midas*MidasFilesSelector.okCallback: Open Uid GetValue(..sb_text,value)\\n\ PopDown .\\n\n", "midas*MidasCallbackManagerCancel.activateCallback: PopDown .^\n", "midas*MidasIngotManagerValueApply.activateCallback: Set Ingot currentWidget GetValue(MidasIngotManager...MidasIngotManagerList,selectedItems) GetValue(MidasIngotManager...MidasIngotManagerValueText,value)\\n\ Set Sensitive . False\n", "midas*MidasIngotManagerValueApply.currentWidget: Set Sensitive . False\n", "midas*MidasIngotManagerValueApply.midasIngots: currentWidget\n", "midas*title.createCallback: Set Value .^^^XmDialogShell title HyperGetText()\n", "midas*MidasHelpSearch.activateCallback: Popup .^^^XmMainWindow...MidasHelpSearchDialog\n", "midas*MidasInfoClassText.currentWidget: Set Value . value WidgetClass(currentWidget)\n", "midas*MidasInfoClassText.midasIngots: currentWidget\n", "midas*Destroy.currentWidget: Set Sensitive . currentWidget!=\"\"\n", "midas*Destroy.midasIngots: currentWidget\n", "midas*MidasCallbackManagerWidgetText.currentWidget: Set Value . value WidgetName(currentWidget)\n", "midas*MidasCallbackManagerWidgetText.midasIngots: currentWidget\n", "midas*WidgetListMenu.midasCreateCallback: Custom Connect WIDGETLIST \"<main>\" .\n", "midas*WidgetListDialog.x: 604\n", "midas*WidgetListDialog.height: 422\n", "midas*WidgetListDialog.y: 32\n", "midas*WidgetListDialog.width: 665\n", "midas*WidgetListDialog.title: Midas - Widget List\n", "midas*WidgetListDialog.geometry: 288x500+604+32\n", "midas*MidasCallbackManagerApply.activateCallback: Set Value currentWidget GetValue(MidasCallbackManager...MidasCallbackManagerList,selectedItems) GetValue(MidasCallbackManager...MidasCallbackManagerText,value)\\n\ Set Sensitive .^.MidasCallbackManagerSave True\\n\ Set Sensitive . False\n", "midas*MidasCallbackManagerApply.currentWidget: Set Sensitive . False\n", "midas*MidasCallbackManagerApply.midasIngots: currentWidget\n", "midas*MidasIngotManagerCreateNew.activateCallback: Popup MidasCreateNewIngot:parent=.^\n", "midas*Horizontal_Tree.TreeStyle: Set Value . set TreeStyle==left\n", "midas*Horizontal_Tree.TreeStyleExecuteWhenCreated: True\n", "midas*Horizontal_Tree.midasIngots: TreeStyle\n", "midas*MidasStartupSave.activateCallback: Store App Resource Midas startup GetValue(.^.MidasStartupText,value)\n", "midas*WidgetTree.midasIngots: currentWidget TreeStyle\n", "midas*WidgetTree.TreeStyle: Set Value . gravity TreeStyle\n", "midas*WidgetTree.TreeStyleExecuteWhenCreated: True\n", "midas*WidgetTree.currentWidgetExecuteWhenCreated: False\n", "midas*WidgetTree.currentWidget: If currentWidget!=\"\" Current Widget In Tree currentWidget \n", "midas*MidasIngotManagerClassText.currentWidget: Set Value . value WidgetClass(currentWidget)\n", "midas*MidasIngotManagerClassText.midasIngots: currentWidget\n", "midas*MidasStartupDismiss.activateCallback: PopDown .^\n", "midas.geometry: 567x233+11+32\n", "midas.startup: Midas Popup Midas_Main\n", "midas.title: MIDAS - Motif Interactive Data Analysis Shell\n", "idas*SGMLHyper.p.breakBefore: true\n", "CUSTOM.CUSTOM.Verb.2: Popup MidasExpressionEvaluator\n", "CUSTOM.CUSTOM.Verb.15: Custom Popup CUSTOM\n", "CUSTOM.CUSTOM.Verb.6: help . \"http://slacvx.slac.stanford.edu:80/MidasHelp/v09/midas.html\"\n", "CUSTOM.CUSTOM.Verb.3: Popup FileList\n", "CUSTOM.CUSTOM.Verb.8: Quit\n", "CUSTOM.CUSTOM.Verb.9: Save Geometry Midas_Main+\n", "CUSTOM.CUSTOM.Verb.5: Create Shell jazelle:UidFile=Ducsjazelle:Jazelle.Uid :Icon=JazelleIcon\\n\ PopUp JazelleMain\\n\ Load Image MidasJazelle\\n\ Index\n", "CUSTOM.CUSTOM.Verb.16: Popup WidgetList:Dialog\n", "CUSTOM.CUSTOM.Verb.4: Cr \\n\ Load Image MidasHandypak\n", "CUSTOM.CUSTOM.Verb.1: help . \"http://slacvx.slac.stanford.edu:80/MidasHelp/v09/about.html\"\n", "CUSTOM.CUSTOM.Verb.7: Invoke Application puzzle\n", "CUSTOM.CUSTOM.Verb.10: Custom Write CUSTOM CUSTOM\n", "CUSTOM.CUSTOM.Verb.11: Popup MidasStartup\n", "CUSTOM.CUSTOM.Verb.12: Popup MidasHelp:Dialog\\n\ Set Ingot MidasHelp Position 1\\n\ Empty List HelpStack\\n\ Add List Position HelpStack fhbenefit.html 0\\n\ Hyper Load File MidasHelpHyper fhbenefit.html\n", "CUSTOM.CUSTOM.Verb.13: Popup MidasHelp:Dialog\\n\ Set Ingot MidasHelp Position 1\\n\ Empty List HelpStack\\n\ Add List Position HelpStack hlmain.html 0\\n\ Hyper Load File MidasHelpHyper hlmain.html\n", "CUSTOM.CUSTOM.Verb.14: Popup MidasHelp:Dialog\\n\ Set Ingot MidasHelp Position 1\\n\ Empty List HelpStack\\n\ Add List Position HelpStack \"/nfs/juno/u1/ey/tonyj/WWW/LineMode/Defaults/Features.html\" 0\\n\ Hyper Load File MidasHelpHyper \"/nfs/juno/u1/ey/tonyj/WWW/LineMode/Defaults/Features.html\" \n", "CUSTOM.CUSTOM.Menu.3: Quit@8\n", "CUSTOM.CUSTOM.Menu.6: Widget Manager...@16#File Manager...@3#Expression Evaluator...@2\n", "CUSTOM.CUSTOM.Menu.2: Puzzle@7\n", "CUSTOM.CUSTOM.Menu.1: Control =>@-3#Tools =>@-6#Applications =>@-2#Customize =>@-4#Help =>@-5\n", "CUSTOM.CUSTOM.Menu.4: Startup...@11#Verbs and Menus...@15#......@0#Save Current Settings@10#Save Current Geometry@9\n", "CUSTOM.CUSTOM.Menu.5: About...@1#Overview...@6\n", "CUSTOM.CUSTOM.Verbs: About...#Expression Evaluator...#File Manager...#Ida#Jazelle#Overview...#Puzzle#Quit#Save Current Geometry#Save Current Settings#Startup...#Test...#Test2...#Test3...#Verbs and Menus...#Widget Manager...\n", "CUSTOM.CUSTOM.Menus: <main>#Applications#Control#Customize#Help#Tools\n", "CUSTOM.WIDGETLIST.Verb.2: PopDown WidgetList\n", "CUSTOM.WIDGETLIST.Verb.15: Custom Popup WIDGETLIST\n", "CUSTOM.WIDGETLIST.Verb.5: #Set Ingot .^^^XmMainWindow TreeStyle left\n", "CUSTOM.WIDGETLIST.Verb.9: Popup MidasResourceManager:parent=WidgetList\n", "CUSTOM.WIDGETLIST.Verb.1: Popup MidasCallbackManager:Parent=WidgetList\n", "CUSTOM.WIDGETLIST.Verb.7: PopDown currentWidget\\n\ Set Sensitive . False\\n\ Set Sensitive .^.Pop_Up True\n", "CUSTOM.WIDGETLIST.Verb.13: #Custom Popup WIDGETLIST\n", "CUSTOM.WIDGETLIST.Verb.12: Toggle Children currentWidget\\n\ If ChildrenInTree(currentWidget) Set Value . labelString \"Hide Children\"\\n\ Else Set Value . labelString \"Show Children\" \n", "CUSTOM.WIDGETLIST.Verb.3: Destroy currentWidget\\n\ Set Ingot WidgetList \"currentWidget\" \"\"\n", "CUSTOM.WIDGETLIST.Verb.6: Popup MidasIngotManager:parent=WidgetList\n", "CUSTOM.WIDGETLIST.Verb.17: Popup WidgetList\n", "CUSTOM.WIDGETLIST.Verb.8: PopUp currentWidget\\n\ Set Sensitive . False\\n\ Set Sensitive .^.Pop_Down True\n", "CUSTOM.WIDGETLIST.Verb.16: #Set Ingot .^^^XmMainWindow TreeStyle top\n", "CUSTOM.WIDGETLIST.Verb.4: Midas PopDown .^^\n", "CUSTOM.WIDGETLIST.Verb.10: Save Geometry WidgetList^\n", "CUSTOM.WIDGETLIST.Verb.14: Toggle currentWidget\\n\ Set Sensitive .^.Pop_Down IsManaged(currentWidget)\\n\ Set Sensitive .^.Pop_Up IsManaged(currentWidget)==False\n", "CUSTOM.WIDGETLIST.Verb.11: Custom Write WIDGETLIST\n", "CUSTOM.WIDGETLIST.Menu.6: Horizontal Tree@5#Vertical Tree@16#......@0#Show Class@13\n", "CUSTOM.WIDGETLIST.Menu.2: Show Children@12#Pop Up@8#Pop Down@7#Toggle@14#Destroy@3\n", "CUSTOM.WIDGETLIST.Menu.7: Callback Manager...@1#Resource Manager...@9#Ingot Manager...@6\n", "CUSTOM.WIDGETLIST.Menu.1: Callback Manager...@1#Resource Manager...@9#Ingot Manager...@6#Widget Manager...@17#Dismiss@4\n", "CUSTOM.WIDGETLIST.Menu.4: Layout =>@-6#......@0#Close Window@2\n", "CUSTOM.WIDGETLIST.Menu.3: Control =>@-4#Tools =>@-7#Customize =>@-5\n", "CUSTOM.WIDGETLIST.Menu.5: Verbs and Menus...@15#......@0#Save Current Settings@11#Save Current Geometry@10\n", "CUSTOM.WIDGETLIST.Verbs: Callback Manager...#Close Window#Destroy#Dismiss#Horizontal Tree#Ingot Manager...#Pop Down#Pop Up#\ Resource Manager...#Save Current Geometry#Save Current Settings#Show Children#Show Class#Toggle#Verbs and Menus...#Vertical Tree#Widget Manager...\n", "CUSTOM.WIDGETLIST.Menus: <Info Buttons>#<buttons>#<main>#Control#Customize#Layout#Tools\n", ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Midaswww_color_part.adh����������������������������������������������������������������100666 � 21345 � 173 � 1336 6003413533 16110� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"midaswww*Background: #d3d3d3d3d3d3\n", "midaswww*Foreground: #000000000000\n", "midaswww*SelectColor: #ffffffff0000\n", "midaswww*HighlightColor: orange\n", "midaswww*TopShadowColor: #ffffffffffff\n", "midaswww*BottomShadowColor: #a1a1a1a1a1a1\n", "midaswww*WWWMenu*Background: #8d8dd1d1d2d2\n", "midaswww*WWWMenu*TopShadowColor: #d6d6efefefef\n", "midaswww*WWWMenu*BottomShadowColor: #4646b1b1b3b3\n", "midaswww*WWWHistoryMenu*Background: #8d8dd1d1d2d2\n", "midaswww*WWWHistoryMenu*TopShadowColor: #d6d6efefefef\n", "midaswww*WWWHistoryMenu*BottomShadowColor: #4646b1b1b3b3\n", " \n", "midaswww*XmTextField*Background: #b2b2b2b2b2b2\n", "midaswww*XmLabel*Foreground: #1d1d15155b5b\n", "midaswww*XmText*Background: #b2b2b2b2b2b2\n", ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Midaswww_mono_part.adh�����������������������������������������������������������������100666 � 21345 � 173 � 276 6003413533 15724� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"midaswww.sensitiveUnderline: 1\n", "midaswww.sensitiveUnderlineStyle: SGMLLINE_STYLE_DASHED\n", "midaswww.visitedUnderline: 1\n", "midaswww.visitedUnderlineStyle: SGMLLINE_STYLE_DOTTED\n", ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Midaswww_common_part.adh���������������������������������������������������������������100666 � 21345 � 173 � 240176 6003413534 16332� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"CUSTOM.WWW.Menu.10: Headings =>@-12#Paragraphs =>@-20\n", "CUSTOM.WWW.Menu.11: GopherSpace Overview@36#Veronica Interface@115#......@0#Original UMN Gopher@73#UIUC Weather Machine@106\n", "CUSTOM.WWW.Menu.12: Helvetica (Headings)@41#New Century (Headings)@59#Times (Headings)@102\n", "CUSTOM.WWW.Menu.13: Overview@74#On Version@68#On WWW@69#On Help@66#......@0#On HTML@65#On URL's@67#......@0#On Context@64\n", "CUSTOM.WWW.Menu.14: On Window@70#On Context@64\n", "CUSTOM.WWW.Menu.15: -5@5#-4@4#-3@3#-2@2#-1@1#0@6#1@7#2@8#3@9#4@10#5@11\n", "CUSTOM.WWW.Menu.16: SunOS 4.1.1 Man Pages@99#HP-UX 8.0.7 Man Pages@38#Ultrix 4.2a Man Pages@108#IRIX 4.0 Man Pages@47#Pyramid OSx Man Pages@84#......@0#VMS Help System@113#X11R5 Man Pages@126#GNU manu\ als@33\n", "CUSTOM.WWW.Menu.17: Visited Documents@116#Visited Documents...@117#......@0#Home Page@43#Go Back@34#Next@61#Previous@79#......@0#Hotlist@44#Add Document to Hotlist@14\n", "CUSTOM.WWW.Menu.18: Document...@29#Gopher Document...@35#FTP Document...@30#Local Document...@52\n", "CUSTOM.WWW.Menu.19: Portrait@76#Landscape@50#Seascape@96#Upside Down@111\n", "CUSTOM.WWW.Menu.1: Go Back@34#Previous@79#Next@61#......@0#Save...@93#Search...@94#......@0#Clone @19#Close Window@21\n", "CUSTOM.WWW.Menu.20: Helvetica (Text)@42#New Century (Text)@60#Times (Text)@103\n", "CUSTOM.WWW.Menu.21: First Page@32#Next Page@62#Previous Page@80#Index@48#......@0#MagStep =>@-15#Orientation =>@-19\n", "CUSTOM.WWW.Menu.22: Document Title@27#Document URL@28#......@0#Unrecognized Markup@109\n", "CUSTOM.WWW.Menu.23: Headings (Underline)@40\n", "CUSTOM.WWW.Menu.2: HTML@39#Text@101#Postscript@78\n", "CUSTOM.WWW.Menu.3: File (History) =>@-8#Help (History) =>@-14\n", "CUSTOM.WWW.Menu.4: File =>@-7#Postscript =>@-21#Navigate =>@-17#Customize =>@-5#Documents =>@-6#Manuals =>@-16#Help =>@-13\n", "CUSTOM.WWW.Menu.5: Options...@72#Print Options...@82#Show =>@-22#......@0#Fonts =>@-10#Font Size =>@-9#Underline =>@-23\n", "CUSTOM.WWW.Menu.6: MidasWWW Welcome Page@56#......@0#Web Overview@120#Web Project@121#Web Servers@122#Information by Subject@49#Data Sources by Service@23#W3 Catalog@118#......@0#What's New@123#......\ @0#Wais Interface@119#Gopher Interface =>@-11#Usenet Interface@112#Finger Interface@31#HyTelnet Interface@45#Techinfo Interface@100#Archie Interface@15#X.500 Interface@125#Hyper-G Interface@46#......@\ 0#HEP Overview@37#......@0#CERN Home Page@16#SLAC Home Page@90#SSC Home Page@91#Ohio State Home Page@63\n", "CUSTOM.WWW.Menu.7: Reread Document@86#Document Info...@25#Document Source...@26#......@0#Open Selected@71#Open =>@-18#......@0#Save...@93#Mail...@53#Print...@83#Search...@94#......@0#Clone@19#......@0\ #Close Window@21#Quit@85\n", "CUSTOM.WWW.Menu.8: Update@110#Search... (History)@95#Close@20\n", "CUSTOM.WWW.Menu.9: Small@97#Medium@54#Large@51\n", "CUSTOM.WWW.Menus: <buttons>#<format>#<history_menu>#<main_menu>#Customize#Documents#File#File (History)#Font Size#Fonts#Gopher Interface#Headings#Help#Help (History)#MagStep#Manuals#Navigate#Open#Orie\ ntation#Paragraphs#Postscript#Show#Underline\n", "CUSTOM.WWW.Verb.100: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch:8004/\"\n", "CUSTOM.WWW.Verb.101: Set Ingot .^^^XmDiialogShell Format TEXT\n", "CUSTOM.WWW.Verb.102: #Set Ingot .^^^WWWMain HeadingFont \"times\"\\nStore App Resource .^^^midaswww headingFont \"times\"\n", "CUSTOM.WWW.Verb.103: #Set Ingot .^^^WWWMain TextFont \"times\"\\nStore App Resource .^^^midaswww textFont \"times\"\n", "CUSTOM.WWW.Verb.104: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://gopher.uiuc.edu:70/1\"\n", "CUSTOM.WWW.Verb.105: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://gopher.uiuc.edu:70/1\"\n", "CUSTOM.WWW.Verb.106: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://wx.atmos.uiuc.edu:70/1\"\n", "CUSTOM.WWW.Verb.107: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://bigcheese.math.scarolina.edu:70/1\"\n", "CUSTOM.WWW.Verb.108: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.cis.ohio-state.edu:80/man/ultrix.top.html\"\n", "CUSTOM.WWW.Verb.109: #Set Ingot .^^^XmMainWindow ShowUnrecognizedMarkup GetValue(.,set)\\nStore App Resource .^^^midaswww \"ShowUnrecognizedMarkup\" ShowUnrecognizedMarkup\\nFor All .^^^XmMainWindow...hid\ den Set Value . managed ShowUnrecognizedMarkup\n", "CUSTOM.WWW.Verb.10: #Set Value PSState magstep 4\n", "CUSTOM.WWW.Verb.110: Invoke Callback .^^^XmForm unmapCallback\\nInvoke Callback .^^^XmForm mapCallback\n", "CUSTOM.WWW.Verb.111: #Set Value PSState orientation \"upside-down\"\n", "CUSTOM.WWW.Verb.112: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/hypertext/DataSources/News/Groups/Overview.html\"\n", "CUSTOM.WWW.Verb.113: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www-midas.slac.stanford.edu:80/HELP\"\n", "CUSTOM.WWW.Verb.114: Custom Popup WWW\n", "CUSTOM.WWW.Verb.115: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://gopher.tc.umn.edu:70/11/Other Gopher and Information Servers/Veronica\"\n", "CUSTOM.WWW.Verb.116: Set Ingot .^^^XmMainWindow WWWFileTemp \"history:\"\n", "CUSTOM.WWW.Verb.117: Popup .^^^XmMainWindow###WWWHistory\n", "CUSTOM.WWW.Verb.118: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://cui_www.unige.ch/w3catalog\"\n", "CUSTOM.WWW.Verb.119: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/hypertext/DataSources/WAIS/ByHost.html\"\n", "CUSTOM.WWW.Verb.11: #Set Value PSState magstep 5\n", "CUSTOM.WWW.Verb.120: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/hypertext/WWW/LineMode/Defaults/default.html\"\n", "CUSTOM.WWW.Verb.121: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/hypertext/WWW/TheProject.html\"\n", "CUSTOM.WWW.Verb.122: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/hypertext/DataSources/WWW/Servers.html\"\n", "CUSTOM.WWW.Verb.123: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html\"\n", "CUSTOM.WWW.Verb.124: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://gopher.tc.umn.edu:70/11/Phone Books/WHOIS Searches\"\n", "CUSTOM.WWW.Verb.125: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://umich.edu:7777/\"\n", "CUSTOM.WWW.Verb.126: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.cis.ohio-state.edu:80/man/x11.top.html\"\n", "CUSTOM.WWW.Verb.12: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://hoohoo.ncsa.uiuc.edu:1235/man/index\"\n", "CUSTOM.WWW.Verb.13: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/hypertext/DataSources/bySubject/Overview.html\"\n", "CUSTOM.WWW.Verb.14: Set Ingot .^^^XmMainWindow HotList HotList++\"<h6><kill><a href = %WWWParent(WWWFile) > %WWWTitle </a></h6>\" \\nStore App Resource .^^^midaswww hotList HotList \\n\n", "CUSTOM.WWW.Verb.15: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://web.nexor.co.uk/archie.html\"\n", "CUSTOM.WWW.Verb.16: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/\"\n", "CUSTOM.WWW.Verb.17: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://gopher.tc.cornell.edu:70/1\"\n", "CUSTOM.WWW.Verb.18: WWW Reset\n", "CUSTOM.WWW.Verb.19: Set Ingot WWWMain WWWFileNew WWWFile\n", "CUSTOM.WWW.Verb.1: #Set Value PSState magstep -1\n", "CUSTOM.WWW.Verb.20: For All .^^^XmForm.XmDialogShell. PopDown .\\nPopDown .^^^XmForm\n", "CUSTOM.WWW.Verb.21: Quit Shell .\n", "CUSTOM.WWW.Verb.22: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://fatty.law.cornell.edu.:80/usr2/wwwtext/lii.table.html\"\n", "CUSTOM.WWW.Verb.23: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/hypertext/DataSources/ByAccess.html\"\n", "CUSTOM.WWW.Verb.24: Popup .^^^XmMainWindow###WWWDisplayOptions\n", "CUSTOM.WWW.Verb.25: Popup .^^^XmMainWindow###WWWDocInfo\\nSet Ingot .^^^XmMainWindow###WWWDocInfo ShowSource False\n", "CUSTOM.WWW.Verb.26: Popup .^^^XmMainWindow###WWWDocInfo\\nSet Ingot .^^^XmMainWindow###WWWDocInfo ShowSource True\n", "CUSTOM.WWW.Verb.27: #Set Ingot .^^^XmMainWindow ShowTitle GetValue(.,set)\\nStore App Resource .^^^midaswww \"ShowTitle\" ShowTitle\\nKick .^^^XmMainWindow\n", "CUSTOM.WWW.Verb.28: #Set Ingot .^^^XmMainWindow ShowURL GetValue(.,set)\\nStore App Resource .^^^midaswww \"ShowURL\" ShowURL\\nkick .^^^XmMainWindow\n", "CUSTOM.WWW.Verb.29: Popup .^^^XmMainWindow###WWWDocOpen\n", "CUSTOM.WWW.Verb.2: #Set Value PSState magstep -2\n", "CUSTOM.WWW.Verb.30: Popup .^^^XmMainWindow###WWWOpenFTP\n", "CUSTOM.WWW.Verb.31: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://cs.indiana.edu/finger/gateway\"\n", "CUSTOM.WWW.Verb.32: WWW First Page PSState\\nSet Sensitive .^.Next_Page True\\nSet Sensitive . False \n", "CUSTOM.WWW.Verb.33: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.cis.ohio-state.edu:85/info/dir\"\n", "CUSTOM.WWW.Verb.34: Set Ingot . Temp WWWBack(HistoryList)\\nWWW Delete History HistoryList\\nWWW Link\\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(Temp,\"WWWFile\")\n", "CUSTOM.WWW.Verb.35: Popup .^^^XmMainWindow###WWWOpenGopher\n", "CUSTOM.WWW.Verb.36: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://gopher.micro.umn.edu:70/11/Other Gopher and Information Servers\"\n", "CUSTOM.WWW.Verb.37: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/hypertext/DataSources/bySubject/Physics/HEP.html\"\n", "CUSTOM.WWW.Verb.38: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.cis.ohio-state.edu:80/man/hpux.top.html\"\n", "CUSTOM.WWW.Verb.39: Set Ingot .^^^XmDialogShell Format HTML\n", "CUSTOM.WWW.Verb.3: #Set Value PSState magstep -3\n", "CUSTOM.WWW.Verb.40: #Set Ingot .^^^WWWMain UnderlineHeadings GetValue(.,set)\\nStore App Resource .^^^midaswww underlineHeadings UnderlineHeadings \n", "CUSTOM.WWW.Verb.41: #Set Ingot .^^^WWWMain HeadingFont helvetica\\nStore App Resource .^^^midaswww headingFont helvetica\n", "CUSTOM.WWW.Verb.42: #Set Ingot .^^^WWWMain TextFont helvetica\\nStore App Resource .^^^midaswww textFont helvetica\n", "CUSTOM.WWW.Verb.43: Set Ingot .^^^XmMainWindow WWWFileTemp WWW_Home\n", "CUSTOM.WWW.Verb.44: Set Ingot .^^^XmMainWindow WWWFileTemp \"ingot:HotList\"\n", "CUSTOM.WWW.Verb.45: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www-midas.slac.stanford.edu/misc/hytelnet.html\"\n", "CUSTOM.WWW.Verb.46: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://iicm.tu-graz.ac.at:80/ROOT\"\n", "CUSTOM.WWW.Verb.47: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://z0.slac.stanford.edu:1234/man/index\"\n", "CUSTOM.WWW.Verb.48: Set Ingot . Temp WWWBack(HistoryList)\\nWWW Delete History HistoryList\\nWWW Link\\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(Temp,\"WWWFile\")\n", "CUSTOM.WWW.Verb.49: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/hypertext/DataSources/bySubject/Overview.html\"\n", "CUSTOM.WWW.Verb.4: #Set Value PSState magstep -4\n", "CUSTOM.WWW.Verb.50: #Set Value PSState orientation landscape\n", "CUSTOM.WWW.Verb.51: #Set Ingot .^^^WWWMain FontSize Large\\nStore App Resource .^^^midaswww \"fontSize\" Large\n", "CUSTOM.WWW.Verb.52: Popup .^^^XmMainWindow###WWWOpenLocal\n", "CUSTOM.WWW.Verb.53: Popup .^^^XmMainWindow###WWWMail\n", "CUSTOM.WWW.Verb.54: #Set Ingot .^^^WWWMain FontSize Medium\\nStore App Resource .^^^midaswww \"fontSize\" Medium\\n\n", "CUSTOM.WWW.Verb.55: Popup Midas_Main\n", "CUSTOM.WWW.Verb.56: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www-midas.slac.stanford.edu:80/midasv21/welcome.html\"\n", "CUSTOM.WWW.Verb.57: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://gopher.ncsa.uiuc.edu:70/1\"\n", "CUSTOM.WWW.Verb.58: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://hoohoo.ncsa.uiuc.edu/welcome.html\"\n", "CUSTOM.WWW.Verb.59: #Set Ingot .^^^WWWMain HeadingFont \"new century schoolbook\"\\nStore App Resource .^^^midaswww headingFont \"new century schoolbook\"\n", "CUSTOM.WWW.Verb.5: #Set Value PSState magstep -5\n", "CUSTOM.WWW.Verb.60: #Set Ingot .^^^WWWMain TextFont \"new century schoolbook\"\\nStore App Resource .^^^midaswww textFont \"new century schoolbook\"\n", "CUSTOM.WWW.Verb.61: Set Ingot . Temp WWWNext(WWWBack(HistoryList))\\nWWW Delete History HistoryList\\nWWW Link Temp \\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),\"WWWFile\")\n", "CUSTOM.WWW.Verb.62: If GetValue(PSState,\"pages\")>0 Invoke Callback .^^^WWWMain...Next activateCallback\\nElse WWW Next Page PSState\\nElse Set Sensitive .^.First_Page True \n", "CUSTOM.WWW.Verb.63: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.cis.ohio-state.edu:80/hypertext/information/information.html\"\n", "CUSTOM.WWW.Verb.64: Help On Context .\n", "CUSTOM.WWW.Verb.65: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.ncsa.uiuc.edu/demoweb/html-primer.html\"\n", "CUSTOM.WWW.Verb.66: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www-midas.slac.stanford.edu:80/midasv21/help.html\"\n", "CUSTOM.WWW.Verb.67: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.ncsa.uiuc.edu/demoweb/url-primer.html\"\n", "CUSTOM.WWW.Verb.68: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www-midas.slac.stanford.edu:80/midasv21/about.html\"\n", "CUSTOM.WWW.Verb.69: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://info.cern.ch/hypertext/WWW/TheProject.html\"\n", "CUSTOM.WWW.Verb.6: #Set Value PSState magstep 0\n", "CUSTOM.WWW.Verb.70: Invoke Callback .^^^XmForm helpCallback\n", "CUSTOM.WWW.Verb.71: If GetSelection(.,\"PRIMARY\",\"STRING\")!=\"\" Set Ingot .^^^XmMainWindow WWWFileTemp GetSelection(.,\"PRIMARY\",\"STRING\") \\nElse Popup .^^^XmMainWindow###WWWDocOpen\n", "CUSTOM.WWW.Verb.72: Popup .^^^XmMainWindow###WWWParameters\n", "CUSTOM.WWW.Verb.73: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://gopher.micro.umn.edu:70/1\"\n", "CUSTOM.WWW.Verb.74: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www-midas.slac.stanford.edu:80/midasv21/overview.html\"\n", "CUSTOM.WWW.Verb.75: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://pscuxb.psc.edu:1563/1\"\n", "CUSTOM.WWW.Verb.76: #Set Value PSState orientation portrait\n", "CUSTOM.WWW.Verb.77: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://una.hh.lib.umich.edu:70/11/journals/pmc\"\n", "CUSTOM.WWW.Verb.78: Set Ingot .^^^XmDialogShell Format Postscript\n", "CUSTOM.WWW.Verb.79: Set Ingot . Temp WWWPrev(WWWBack(HistoryList))\\nWWW Delete History HistoryList\\nWWW Link Temp \\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),\"WWWFile\")\n", "CUSTOM.WWW.Verb.7: #Set Value PSState magstep 1\n", "CUSTOM.WWW.Verb.80: Set Ingot . Temp WWWPrev(WWWBack(HistoryList))\\nWWW Delete History HistoryList\\nWWW Link Temp \\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),\"WWWFile\")\n", "CUSTOM.WWW.Verb.81: Invoke Callback .^^^XmMainWindow###WWWPrint...WWWPrintOk activateCallback\n", "CUSTOM.WWW.Verb.82: Popup .^^^XmMainWindow###WWWPrintOptions\n", "CUSTOM.WWW.Verb.83: Popup .^^^XmMainWindow###WWWPrint\n", "CUSTOM.WWW.Verb.84: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.cis.ohio-state.edu:80/man/pyramid.top.html\"\n", "CUSTOM.WWW.Verb.85: Quit Application .\n", "CUSTOM.WWW.Verb.86: WWW Zap .^^^XmMainWindow...WWWHyper WWWFile\\nWWW Link\\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWFile,\"WWWNode\")\n", "CUSTOM.WWW.Verb.87: Set Ingot .^^^XmMainWindow WWWFileTemp \"gopher://gopher.sdsc.edu:70/1\"\n", "CUSTOM.WWW.Verb.88: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://iicm.tu-graz.ac.at:80/CSIGGRAPHbib\"\n", "CUSTOM.WWW.Verb.89: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://slacvm.slac.stanford.edu:5080/FIND/SLAC.HTML\"\n", "CUSTOM.WWW.Verb.8: #Set Value PSState magstep 2\n", "CUSTOM.WWW.Verb.90: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://slacvm.slac.stanford.edu./FIND/SLAC.HTML\"\n", "CUSTOM.WWW.Verb.91: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.ssc.gov/SSC.html\"\n", "CUSTOM.WWW.Verb.92: Custom Write WWW\\nSave Stored Resources .\n", "CUSTOM.WWW.Verb.93: Popup .^^^XmMainWindow###WWWSave\n", "CUSTOM.WWW.Verb.94: Popup .^^^XmMainWindow###WWWSearch\n", "CUSTOM.WWW.Verb.95: Popup .^^^WWWHistory###WWWSearch\n", "CUSTOM.WWW.Verb.96: #Set Value PSState orientation seascape\n", "CUSTOM.WWW.Verb.97: #Set Ingot .^^^WWWMain FontSize Small\\nStore App Resource .^^^midaswww \"fontSize\" Small\\n\n", "CUSTOM.WWW.Verb.98: Popup WWWStartup\n", "CUSTOM.WWW.Verb.99: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www.cis.ohio-state.edu:80/man/sunos.top.html\"\n", "CUSTOM.WWW.Verb.9: #Set Value PSState magstep 3\n", "CUSTOM.WWW.Verbs: -1#-2#-3#-4#-5#0#1#2#3#4#5#AIX 3.2 Man Pages#Academic Information#Add Document to Hotlist#Archie Interface#CERN Home Page#CTC Gopher#Clear Visited Documents#Clone#Close#Close Window#\ Cornell Law School#Data Sources by Service#Display...#Document Info...#Document Source...#Document Title#Document URL#Document...#FTP Document...#Finger Interface#First Page#GNU manuals#Go Back#Gopher\ Document...#GopherSpace Overview#HEP Overview#HP-UX 8.0.7 Man Pages#HTML#Headings (Underline)#Helvetica (Headings)#Helvetica (Text)#Home Page#Hotlist#HyTelnet Interface#Hyper-G Interface#IRIX 4.0 Man\ Pages#Index#Information by Subject#Landscape#Large#Local Document...#Mail...#Medium#Midas...#MidasWWW Welcome Page#NCSA Gopher#NCSA Home Page#New Century (Headings)#New Century (Text)#Next#Next Page#\ Ohio State Home Page#On Context#On HTML#On Help#On URL's#On Version#On WWW#On Window#Open Selected#Options...#Original UMN Gopher#Overview#PSC Gopher#Portrait#PostModern Culture#Postscript#Previous#Pr\ evious Page#Print#Print Options...#Print...#Pyramid OSx Man Pages#Quit#Reread Document#SDSC Gopher#SIGGRAPH Bibliography#SLAC#SLAC Home Page#SSC Home Page#Save Current Settings#Save...#Search...#Searc\ h... (History)#Seascape#Small#Startup...#SunOS 4.1.1 Man Pages#Techinfo Interface#Text#Times (Headings)#Times (Text)#UIUC Gopher#UIUC Gopher#UIUC Weather Machine#USC Math Gopher#Ultrix 4.2a Man Pages\ #Unrecognized Markup#Update#Upside Down#Usenet Interface#VMS Help System#Verbs and Menus...#Veronica Interface#Visited Documents#Visited Documents...#W3 Catalog#Wais Interface#Web Overview#Web Project\ #Web Servers#What's New#Whois Interface#X.500 Interface#X11R5 Man Pages\n", "midaswww*Clone.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/clone.html\"\n", "midaswww*Close_Window.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/quit.html\"\n", "midaswww*ConfirmExit.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\\nSet Sensitive .^^^WWWParameters...WWWParamReset True\\nSet Sensitive .^^^WWWParameters...WWWParamSave Fa\ lse\n", "midaswww*Customize.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Customize\"\n", "midaswww*Document_Source___.DocFormat: Set Sensitive . DocFormat==\"HTML\"\n", "midaswww*Document_Source___.DocFormatExecuteWhenCreated: False\n", "midaswww*Document_Source___.midasIngots: DocFormat\n", "midaswww*Document_Title.midasCreateCallback: Set Value . set ShowTitle\n", "midaswww*Document_URL.midasCreateCallback: set value . set ShowURL\n", "midaswww*Documents.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Documents\"\n", "midaswww*EnableHTTP2.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\\nSet Sensitive .^^^WWWParameters...WWWParamReset True\\nSet Sensitive .^^^WWWParameters...WWWParamSave Fa\ lse\n", "midaswww*File.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/menus.html#File\"\n", "midaswww*First_Page.WWWFile: Set Sensitive . False\n", "midaswww*First_Page.midasIngots: WWWFile\n", "midaswww*FontList: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1\n", "midaswww*Font_Size.radioBehavior: true\n", "midaswww*GhostscriptErrorCancel.activateCallback: PopDown .^^\n", "midaswww*GhostviewErrorsHelp.activateCallback: Invoke Callback .^^ helpCallback\n", "midaswww*Go_Back.WWWFile: Set Sensitive . WWWBack(HistoryList)!=0\n", "midaswww*Go_Back.WWWFileExecuteWhenCreated: True\n", "midaswww*Go_Back.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#GoBack\"\n", "midaswww*Go_Back.midasIngots: WWWFile\n", "midaswww*HTML.DocFormat: Set Sensitive . DocFormat==\"HTML\"\\nIf DocFormat==\"HTML\" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\\nIf DocFormat==\"HTML\" Invoke Callback . activateCallback\n", "midaswww*HTML.DocFormatExecuteWhenCreated: True\n", "midaswww*HTML.midasIngots: DocFormat\n", "midaswww*Headings.radioBehavior: true\n", "midaswww*Headings_(Underline).midasCreateCallback: Set Value . set UnderlineHeadings\n", "midaswww*Helvetica_(Headings).midasCreateCallback: Set Value . set HeadingFont==\"helvetica\"\n", "midaswww*Helvetica_(Text).midasCreateCallback: Set Value . set TextFont==\"helvetica\"\n", "midaswww*Index.WWWFile: Set Sensitive . PSState!=0&&GetValue(PSState,\"pages\")>1\n", "midaswww*Index.midasIngots: WWWFile\n", "midaswww*Large.midasCreateCallback: Set Value . set FontSize==\"Large\"\n", "midaswww*MagStep.XmToggleButtonGadget.PSState: If PSState!=0 Set Value . set GetValue(PSState,magstep)==GetValue(.,labelString)\n", "midaswww*MagStep.XmToggleButtonGadget.midasIngots: PSState\n", "midaswww*MagStep.radioBehavior: true\n", "midaswww*Mail___.DocFormat: Set Sensitive . DocFormat!=\"GIF Image\"\n", "midaswww*Mail___.DocFormatExecuteWhenCreated: False\n", "midaswww*Mail___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/slac_library.html#Mail\"\n", "midaswww*Mail___.midasIngots: DocFormat\n", "midaswww*Manuals.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/menus.html#manuals\"\n", "midaswww*Medium.midasCreateCallback: Set Value . set FontSize==\"Medium\"\n", "midaswww*Navigate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Navigate\"\n", "midaswww*New_Century_(Headings).midasCreateCallback: Set Value . set HeadingFont==\"new century schoolbook\"\n", "midaswww*New_Century_(Text).midasCreateCallback: Set Value . set TextFont==\"new century schoolbook\"\n", "midaswww*Next.WWWFile: Set Sensitive . WWWDest(WWWNext(WWWBack(HistoryList)))!=0\n", "midaswww*Next.WWWFileExecuteWhenCreated: True\n", "midaswww*Next.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#NextPrevious\"\n", "midaswww*Next.midasIngots: WWWFile\n", "midaswww*Next_Page.WWWFile: Set Sensitive . WWWDest(WWWNext(WWWBack(HistoryList)))!=0&&PSState!=0&&GetValue(PSState,\"pages\")!=1\n", "midaswww*Next_Page.midasIngots: WWWFile\n", "midaswww*Orientation.XmToggleButtonGadget.PSState: If PSState!=0 Set Value . set GetValueRaw(PSState,orientation)==GetValue(.,labelString)\n", "midaswww*Orientation.XmToggleButtonGadget.midasIngots: PSState\n", "midaswww*Orientation.radioBehavior: true\n", "midaswww*PSF.activateCallback: WWW Next Page PSState\n", "midaswww*Paragraphs.radioBehavior: true\n", "midaswww*Postscript.DocFormat: Set Sensitive . DocFormat==\"Postscript\"\n", "midaswww*Postscript.DocFormatExecuteWhenCreated: True\n", "midaswww*Postscript.midasIngots: DocFormat\n", "midaswww*Previous.WWWFile: Set Sensitive . WWWDest(WWWPrev(WWWBack(HistoryList)))!=0\n", "midaswww*Previous.WWWFileExecuteWhenCreated: True\n", "midaswww*Previous.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#NextPrevious\"\n", "midaswww*Previous.midasIngots: WWWFile\n", "midaswww*Previous_Page.WWWFile: Set Sensitive . WWWDest(WWWPrev(WWWBack(HistoryList)))!=0&&PSState!=0&&GetValue(PSState,\"pages\")>1\n", "midaswww*Previous_Page.midasIngots: WWWFile\n", "midaswww*Print.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/slac_library.html#Print\"\n", "midaswww*Print___.DocFormat: Set Sensitive . DocFormat!=\"GIF Image\"\n", "midaswww*Print___.DocFormatExecuteWhenCreated: False\n", "midaswww*Print___.midasIngots: DocFormat\n", "midaswww*Quit.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/quit.html\"\n", "midaswww*SGMLHyper.midasCreateCallback: WWW CopyB . .^\n", "midaswww*SGMLMarkerText.bombPixmap: bomb\n", "midaswww*Save___.DocFormat: Set Sensitive . DocFormat!=\"GIF Image\"\n", "midaswww*Save___.DocFormatExecuteWhenCreated: False\n", "midaswww*Save___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/save.html\"\n", "midaswww*Save___.midasIngots: DocFormat\n", "midaswww*Search___.DocFormat: Set Sensitive . DocFormat==\"HTML\"\n", "midaswww*Search___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/search_window.html\"\n", "midaswww*Search___.midasIngots: DocFormat\n", "midaswww*ShowDocumentSource.DocFormat: Set Sensitive . DocFormat==\"HTML\"\n", "midaswww*ShowDocumentSource.DocFormatExecuteWhenCreated: True\n", "midaswww*ShowDocumentSource.ShowSource: Set Value . set ShowSource \n", "midaswww*ShowDocumentSource.ShowSourceExecuteWhenCreated: True\n", "midaswww*ShowDocumentSource.midasIngots: ShowSource DocFormat\n", "midaswww*ShowDocumentSource.valueChangedCallback: Set Ingot .^^^WWWDocInfo ShowSource GetValue(.,set) \n", "midaswww*Small.midasCreateCallback: Set Value . set FontSize==\"Small\" \n", "midaswww*SourceTextSW.ShowSource: If ShowSource Then PopUp .\\nElse PopDown .\\nIf ShowSource Set Value .^^ height 600\\nElse Set Value .^^ height GetValue(.,y)\\nIf ShowSource WWW Put ....WWWSource WWWSo\ urce(.^^^XmMainWindow...WWWHyper)\n", "midaswww*SourceTextSW.ShowSourceExecuteWhenCreated: False\n", "midaswww*SourceTextSW.midasCreateCallback: Create Widget . SGMLHyper WWWSource\n", "midaswww*SourceTextSW.midasIngots: ShowSource\n", "midaswww*Times_(Headings).midasCreateCallback: Set Value . set HeadingFont==\"times\"\n", "midaswww*Times_(Text).midasCreateCallback: Set Value . set TextFont==\"times\"\n", "midaswww*Unrecognized_Markup.midasCreateCallback: set value . set ShowUnrecognizedMarkup\n", "midaswww*WWWButtons.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Buttons\"\n", "midaswww*WWWButtons.midasCreateCallback: Custom Connect WWW \"<buttons>\" .\n", "midaswww*WWWButtons.orientation: XMHORIZONTAL\n", "midaswww*WWWCommand.KeywordVisible: Set Sensitive . KeywordVisible\n", "midaswww*WWWCommand.KeywordVisibleExecuteWhenCreated: False\n", "midaswww*WWWCommand.midasIngots: KeywordVisible\n", "midaswww*WWWCommand.sensitive: false\n", "midaswww*WWWCommandText.KeywordVisible: If KeywordVisible Grab Focus .\n", "midaswww*WWWCommandText.KeywordVisibleExecuteWhenCreated: False\n", "midaswww*WWWCommandText.commandEnteredCallback: If GetCommand()!=\"\" Set Ingot . temp WWWCreateNodeFromKeyword(GetIngot(.^^^WWWMain...WWWHyper,WWWFileBase),WWWFile,WWWEncode(GetCommand()),\"get\")\\n\ If GetCommand()!=\"\" WWW Link temp\\nIf GetCommand()!=\"\" S\ et Ingot .^^^XmMainWindow WWWFileRequest WWWDest(temp)\n", "midaswww*WWWCommandText.marginHeight: 0\n", "midaswww*WWWCommandText.marginWidth: 2\n", "midaswww*WWWCommandText.midasCreateCallback: PopDown ..XmScrolledWindow\\nPopDown ..Selection \n", "midaswww*WWWCommandText.midasIngots: KeywordVisible\n", "midaswww*WWWDocInfo*WWWSearch.ShowSource: If ShowSource==False PopDown .\n", "midaswww*WWWDocInfo*WWWSearch.ShowSourceExecuteWhenCreated: False\n", "midaswww*WWWDocInfo*WWWSearch.dialogTitle: Search Source\n", "midaswww*WWWDocInfo*WWWSearch.midasIngots: ShowSource\n", "midaswww*WWWDocInfo.DocFormat: If DocFormat!=\"HTML\" Set Ingot . ShowSource False\n", "midaswww*WWWDocInfo.DocFormatExecuteWhenCreated: False\n", "midaswww*WWWDocInfo.ShowSourceExecuteWhenCreated: True\n", "midaswww*WWWDocInfo.dialogTitle: Document Info.\n", "midaswww*WWWDocInfo.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/docinfo.html\"\n", "midaswww*WWWDocInfo.mapCallback: Set Value ....SourceTextSW height 600\\nSet Value ....SourceTextSW width 600\n", "midaswww*WWWDocInfo.midasCreateCallback: Set Ingot . ShowSource False \n", "midaswww*WWWDocInfo.midasIngots: ShowSource DocFormat\n", "midaswww*WWWDocInfoCancel.activateCallback: PopDown .^^\n", "midaswww*WWWDocInfoDismiss.activateCallback: For All .^^.XmDialogShell. PopDown .\\nPopDown .^^\n", "midaswww*WWWDocInfoDocFormatText.DocFormat: Set Value . value DocFormat\n", "midaswww*WWWDocInfoDocFormatText.DocFormatExecuteWhenCreated: True\n", "midaswww*WWWDocInfoDocFormatText.editable: false\n", "midaswww*WWWDocInfoDocFormatText.midasIngots: DocFormat\n", "midaswww*WWWDocInfoDocTitleText.WWWTitle: Set Value . value WWWTitle\n", "midaswww*WWWDocInfoDocTitleText.WWWTitleExecuteWhenCreated: True\n", "midaswww*WWWDocInfoDocTitleText.midasIngots: WWWTitle\n", "midaswww*WWWDocInfoHelp.activateCallback: Invoke Callback .^^ helpCallback\n", "midaswww*WWWDocInfoIndexToggle.IsIndexExecuteWhenCreated: True\n", "midaswww*WWWDocInfoIndexToggle.KeywordVisible: set Value . set KeywordVisible \n", "midaswww*WWWDocInfoIndexToggle.midasIngots: KeywordVisible\n", "midaswww*WWWDocInfoSearch.ShowSource: Set Sensitive . ShowSource\n", "midaswww*WWWDocInfoSearch.activateCallback: Popup .^^^WWWDocInfo###WWWSearch\n", "midaswww*WWWDocInfoSearch.midasIngots: ShowSource\n", "midaswww*WWWDocOpen.autoUnmanage: false\n", "midaswww*WWWDocOpen.dialogTitle: Open Document\n", "midaswww*WWWDocOpen.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www-midas.slac.stanford.edu:80/midasv21/opendoc.html\"\n", "midaswww*WWWDocOpenOk.activateCallback: PopDown .^^ \\nSet Ingot .^^^XmMainWindow WWWFileRequest GetValue(.^^...WWWDocOpenText,value)\n", "midaswww*WWWGhostviewErrors.dialogTitle: Ghostscript Errors\n", "midaswww*WWWGhostviewErrors.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/gs_error.html\"\n", "midaswww*WWWGhostviewErrors.unmapCallback: Set Value ....XmText value \"\"\n", "midaswww*WWWHeader.ShowTitle: If ShowTitle||ShowURL PopUp .\\nElse PopDown .\n", "midaswww*WWWHeader.ShowTitleExecuteWhenCreated: True\n", "midaswww*WWWHeader.ShowURL: If ShowTitle||ShowURL PopUp .\\nElse PopDown .\n", "midaswww*WWWHeader.ShowURLExecuteWhenCreated: True\n", "midaswww*WWWHeader.midasIngots: ShowURL ShowTitle\n", "midaswww*WWWHeaderDocumentLabel.ShowURL: If ShowURL PopUp .\\nElse PopDown .\n", "midaswww*WWWHeaderDocumentLabel.ShowURLExecuteWhenCreated: True\n", "midaswww*WWWHeaderDocumentLabel.midasIngots: ShowURL\n", "midaswww*WWWHeaderDocumentText.ShowURL: If ShowURL PopUp .\\nElse Popdown .\n", "midaswww*WWWHeaderDocumentText.ShowURLExecuteWhenCreated: True\n", "midaswww*WWWHeaderDocumentText.WWWFile: Set Value . value WWWParent(WWWFile)\n", "midaswww*WWWHeaderDocumentText.WWWFileExecuteWhenCreated: True\n", "midaswww*WWWHeaderDocumentText.editable: false\n", "midaswww*WWWHeaderDocumentText.midasIngots: WWWFile ShowURL\n", "midaswww*WWWHeaderTitleLabel.ShowTitle: If ShowTitle Then Popup .\\nElse PopDown .\n", "midaswww*WWWHeaderTitleLabel.ShowTitleExecuteWhenCreated: True\n", "midaswww*WWWHeaderTitleLabel.midasIngots: ShowTitle\n", "midaswww*WWWHeaderTitleText.ShowTitle: If ShowTitle PopUp .\\nElse PopDown .\n", "midaswww*WWWHeaderTitleText.ShowTitleExecuteWhenCreated: True\n", "midaswww*WWWHeaderTitleText.WWWTitle: Set Value . value WWWTitle\n", "midaswww*WWWHeaderTitleText.WWWTitleExecuteWhenCreated: False\n", "midaswww*WWWHeaderTitleText.editable: false\n", "midaswww*WWWHeaderTitleText.midasIngots: WWWTitle ShowTitle\n", "midaswww*WWWHistory*Search___.midasIngots: \n", "midaswww*WWWHistory*WWWHyper*a*activateCallback: WWW Link\\nSet Ingot .^^^WWWMain WWWFileTemp Convert(WWWDest(WWWNode(.^^^a)),\"WWWFile\")\n", "midaswww*WWWHistory*WWWHyper*a.createCallback: WWW Anchor . \"history:\"\\nSet Value . sensitive GetValue(.,href)!=\"\"\n", "midaswww*WWWHistory*WWWHyper*title.createCallback: \n", "midaswww*WWWHistory*WWWHyper*title.mapCallback: \n", "midaswww*WWWHistory*WWWHyper.midasIngots: \n", "midaswww*WWWHistory*WWWSearch.dialogTitle: Search History\n", "midaswww*WWWHistory*WWWSearch.midasIngots: \n", "midaswww*WWWHistory.dialogTitle: Visited Documents \n", "midaswww*WWWHistory.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/visited_documents_window.html\"\n", "midaswww*WWWHistory.mapCallback: set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)\\nWWW Link\\nWWW Get ....WWWHyper \"history:\" IncludeList \"\"\n", "midaswww*WWWHistory.unmapCallback: WWW Zap ....WWWHyper \"history:\"\\n\n", "midaswww*WWWHistoryButton.activateCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"history:\"\n", "midaswww*WWWHistoryButton.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#history\"\n", "midaswww*WWWHistoryMenu*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1\n", "midaswww*WWWHistoryMenu.midasCreateCallback: Custom Connect WWW \"<history_menu>\" .\\n\n", "midaswww*WWWHistorySW.midasCreateCallback: Create Widget . SGMLHyper WWWHyper\n", "midaswww*WWWHistorySW.scrollingPolicy: XMAUTOMATIC\n", "midaswww*WWWHistorySW.translations: #override \\n:<ConfigureNotify> : SendMidas(\"set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)\")\n", "midaswww*WWWHome.activateCallback: Set Ingot .^^^XmMainWindow WWWFileRequest WWW_Home\n", "midaswww*WWWHome.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/home.html\"\n", "midaswww*WWWHotList.activateCallback: Invoke Callback .^^^WWWMain...Hotlist activateCallback\n", "midaswww*WWWHotList.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest \" http://www-midas.slac.stanford.edu:80/midasv21/hotlist.html\"\n", "midaswww*WWWHotListDeleteConfirm.dialogTitle: Delete Item? \n", "midaswww*WWWHotListDeleteConfirm.helpCallback: PopDown .\\nSet Ingot .^^^WWWMain WWWFileNew \"http://www-midas.slac.stanford.edu:80/midasv21/hotlist.html\"\n", "midaswww*WWWHotListDeleteConfirm.mapCallback: Set Ingot . result false\n", "midaswww*WWWHotListDeleteConfirm.okCallback: Set Ingot . result true\n", "midaswww*WWWHyper*SGMLPlainText.tabs: 8\n", "midaswww*WWWHyper*a*activateCallback: WWW Link WWWNode(.^^^a)\\nSet Ingot .^^^WWWMain NewTitle GetValue(.^^^a,\"title\")\\n\ if WWWIsMap(.)!=\"\" Set Ingot .^^^WWWMain WWWFileTemp WWWDest(WWWCreateNodeFromKeyword(WWWFileBase,WWWDest(WWWNode(.^^^a)),WWWIsMap(.),\"get\"))\\nelse Set Ingot .^^^WWWMain WWWFileTemp Convert(WWWDest(WWWNode(.^^^a)),\"WWWFile\")\n", "midaswww*WWWHyper*a*img.outline: true\n", "midaswww*WWWHyper*a*img.underlineHeight: 2\n", "midaswww*WWWHyper*a.createCallback: WWW Anchor . WWWFileBase\\nSet Value . sensitive GetValue(.,href)!=\"\"\\nIf WWWParam(.,\"redirect\")!=\"\" WWW Redirect WWWFileRequest WWWDest(WWWNode(.))\n", "midaswww*WWWHyper*a.tagList: * SGMLAnchorText: -a\n", "midaswww*WWWHyper*address.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*address.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*address.fontSlant: i\n", "midaswww*WWWHyper*address.spaceAfter: 10\n", "midaswww*WWWHyper*address.spaceBefore: 10\n", "midaswww*WWWHyper*b.fontWeight: bold\n", "midaswww*WWWHyper*base.createCallback: Set Ingot .^^^WWWHyper WWWFileBase WWWParse(WWWParam(.,\"href\"),WWWFileBase)\n", "midaswww*WWWHyper*blockquote.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*blockquote.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*blockquote.leftIndent: 20\n", "midaswww*WWWHyper*blockquote.rightIndent: 20\n", "midaswww*WWWHyper*blockquote.spaceAfter: 10\n", "midaswww*WWWHyper*blockquote.spaceBefore: 10\n", "midaswww*WWWHyper*br.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*cite.fontSlant: i\n", "midaswww*WWWHyper*code.fontFamily: courier\n", "midaswww*WWWHyper*code.fontSpacing: m\n", "midaswww*WWWHyper*dd.position: 0\n", "midaswww*WWWHyper*default.FontRegistry: iso8859\n", "midaswww*WWWHyper*default.color: Black\n", "midaswww*WWWHyper*default.exactTerminator: True\n", "midaswww*WWWHyper*default.fontSlant: r\n", "midaswww*WWWHyper*default.fontSpacing: p\n", "midaswww*WWWHyper*default.fontWeight: medium\n", "midaswww*WWWHyper*default.hideIllegalTags: True\n", "midaswww*WWWHyper*default.leftIndent: 20\n", "midaswww*WWWHyper*default.supportsEntities: True\n", "midaswww*WWWHyper*default.tagList: SGMLMarkerText: %tryagain %!-- %img %p %br %isindex %base %nextid %kill %nocache SGMLFormText: form SGMLCompositeText: html body head header address dl dlc dl_compact h1 h2 h3 h4 h5 h6 dir menu pre b\ i tt u em strong code samp kbd var dfn cite blockquote xmp listing plaintext SGMLAnchorText: a SGMLListText: ul ol SGMLText: comment title SGMLRuleText: %hr SGMLTableText: table\n", "midaswww*WWWHyper*dfn.fontWeight: bold\n", "midaswww*WWWHyper*dir.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*dir.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*dir.li.breakBefore: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*dir.li.columnAlign: 125\n", "midaswww*WWWHyper*dir.spaceAfter: 6\n", "midaswww*WWWHyper*dir.spaceBefore: 6\n", "midaswww*WWWHyper*dir.tagList: * SGMLMarkerText: +%li\n", "midaswww*WWWHyper*dl.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*dl.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*dl.dd.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*dl.dt.position: -50\n", "midaswww*WWWHyper*dl.leftIndent: 50\n", "midaswww*WWWHyper*dl.spaceAfter: 6\n", "midaswww*WWWHyper*dl.spaceBefore: 6\n", "midaswww*WWWHyper*dl.tagList: * SGMLMarkerText: +%dt +%dd\n", "midaswww*WWWHyper*dl_compact.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*dl_compact.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*dl_compact.dt.position: -150\n", "midaswww*WWWHyper*dl_compact.leftIndent: 150\n", "midaswww*WWWHyper*dl_compact.spaceAfter: 6\n", "midaswww*WWWHyper*dl_compact.spaceBefore: 6\n", "midaswww*WWWHyper*dl_compact.tagList: * SGMLMarkerText: +%dt +%dd\n", "midaswww*WWWHyper*dlc.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*dlc.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*dlc.dt.position: -150\n", "midaswww*WWWHyper*dlc.leftIndent: 150\n", "midaswww*WWWHyper*dlc.spaceAfter: 6\n", "midaswww*WWWHyper*dlc.spaceBefore: 6\n", "midaswww*WWWHyper*dlc.tagList: * SGMLMarkerText: +%dt +%dd\n", "midaswww*WWWHyper*dt.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*dt.spaceBefore: 6\n", "midaswww*WWWHyper*em.fontSlant: i\n", "midaswww*WWWHyper*form.tagList: * SGMLInputText: +%input +textarea SGMLCompositeText: +select -form\n", "midaswww*WWWHyper*form.activateCallback: Set Ingot . temp WWWCreateNodeFromKeyword(WWWFileBase,WWWParse(GetValue(.,action),WWWFileBase),GetValue(.,result),GetValue(.,method))\\nWWW Link temp\\nSet Ingot .^^^XmMainWindow WWWFileRequest WWWDest(temp)\n", "midaswww*WWWHyper*h1.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h1.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h1.fontWeight: bold\n", "midaswww*WWWHyper*h1.leftIndent: -20\n", "midaswww*WWWHyper*h1.spaceAfter: 20\n", "midaswww*WWWHyper*h1.spaceBefore: 40\n", "midaswww*WWWHyper*h1.underlineHeight: 3\n", "midaswww*WWWHyper*h1.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6\n", "midaswww*WWWHyper*h2.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h2.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h2.fontWeight: bold\n", "midaswww*WWWHyper*h2.leftIndent: -20\n", "midaswww*WWWHyper*h2.spaceAfter: 10\n", "midaswww*WWWHyper*h2.spaceBefore: 20\n", "midaswww*WWWHyper*h2.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6\n", "midaswww*WWWHyper*h3.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h3.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h3.fontWeight: bold\n", "midaswww*WWWHyper*h3.spaceAfter: 6 \n", "midaswww*WWWHyper*h3.spaceBefore: 12 \n", "midaswww*WWWHyper*h3.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6\n", "midaswww*WWWHyper*h4.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h4.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h4.fontWeight: bold\n", "midaswww*WWWHyper*h4.spaceBefore: 8\n", "midaswww*WWWHyper*h4.underline: 1\n", "midaswww*WWWHyper*h4.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6\n", "midaswww*WWWHyper*h5.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h5.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h5.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6\n", "midaswww*WWWHyper*h6.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h6.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*h6.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6\n", "midaswww*WWWHyper*head.tagList: * SGMLCompositeText: -body -head -header\n", "midaswww*WWWHyper*header.tagList: * SGMLCompositeText: -body -head -header\n", "midaswww*WWWHyper*hidden.color: red\n", "midaswww*WWWHyper*hidden.createCallback: Set Value . managed ShowUnrecognizedMarkup\n", "midaswww*WWWHyper*hidden.fontWeight: bold\n", "midaswww*WWWHyper*hidden.sensitiveColor: red\n", "midaswww*WWWHyper*hr.leftIndent: 30\n", "midaswww*WWWHyper*hr.rightIndent: 30\n", "midaswww*WWWHyper*hr.spaceAfter: 12\n", "midaswww*WWWHyper*hr.spaceBefore: 12\n", "midaswww*WWWHyper*i.fontSlant: i\n", "midaswww*WWWHyper*image.mapCallback: Set Ingot .^^^WWWMain IsGIF true\n", "midaswww*WWWHyper*img.createCallback: if WWWParam(.,\"src\")!=\"\" WWW Include IncludeList . WWWParse(WWWParam(.,\"src\"),WWWFileBase)\n", "midaswww*WWWHyper*img.pixmap: bomb\n", "midaswww*WWWHyper*input.bombPixmap: bomb\n", "midaswww*WWWHyper*input.createCallback: if WWWParam(.,\"src\")!=\"\" WWW Include IncludeList . WWWParse(WWWParam(.,\"src\"),WWWFileBase)\n", "midaswww*WWWHyper*isindex.mapCallback: Set Ingot .^^^XmMainWindow IsIndex True\n", "midaswww*WWWHyper*kbd.color: dark green\n", "midaswww*WWWHyper*kbd.fontFamily: courier\n", "midaswww*WWWHyper*kbd.fontSpacing: m\n", "midaswww*WWWHyper*kill.activateCallback: if QueryUser(.^^^XmMainWindow###WWWHotListDeleteConfirm) Destroy .^\\nSet Ingot .^^^XmMainWindow HotList WWWSource(.^^^XmMainWindow...WWWHyper)\\nStore App Resou\ rce .^^^midaswww hotList HotList \n", "midaswww*WWWHyper*kill.outline: true\n", "midaswww*WWWHyper*kill.pixmap: kill\n", "midaswww*WWWHyper*kill.sensitive: true\n", "midaswww*WWWHyper*kill.underlineHeight: 3\n", "midaswww*WWWHyper*li.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*li.spaceBefore: 6\n", "midaswww*WWWHyper*listing.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*listing.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*listing.defaultClass: SGMLPlainText\n", "midaswww*WWWHyper*listing.exactTerminator: True\n", "midaswww*WWWHyper*listing.fontFamily: courier\n", "midaswww*WWWHyper*listing.fontSize: 12\n", "midaswww*WWWHyper*listing.fontSpacing: m\n", "midaswww*WWWHyper*listing.hideIllegalTags: False\n", "midaswww*WWWHyper*listing.supportsEntities: False\n", "midaswww*WWWHyper*listing.tagList: \n", "midaswww*WWWHyper*menu.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*menu.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*menu.spaceAfter: 4\n", "midaswww*WWWHyper*menu.spaceBefore: 4\n", "midaswww*WWWHyper*menu.tagList: * SGMLMarkerText: +%li\n", "midaswww*WWWHyper*nocache.unmapCallback: Destroy .^^^default\n", "midaswww*WWWHyper*ol.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*ol.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*ol.bulletMarker: li\n", "midaswww*WWWHyper*ol.bulletType: ordered\n", "midaswww*WWWHyper*ol.leftIndent: 20\n", "midaswww*WWWHyper*ol.spaceAfter: 6\n", "midaswww*WWWHyper*ol.spaceBefore: 6\n", "midaswww*WWWHyper*select*option.type: option\n", "midaswww*WWWHyper*ol.tagList: * SGMLMarkerText: +%li\n", "midaswww*WWWHyper*p.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*p.spaceBefore: 6\n", "midaswww*WWWHyper*plaintext.defaultClass: SGMLPlainText\n", "midaswww*WWWHyper*plaintext.exactTerminator: True\n", "midaswww*WWWHyper*plaintext.fontFamily: courier\n", "midaswww*WWWHyper*plaintext.fontSpacing: m\n", "midaswww*WWWHyper*plaintext.hideIllegalTags: False\n", "midaswww*WWWHyper*plaintext.supportsEntities: False\n", "midaswww*WWWHyper*plaintext.tagList: \n", "midaswww*WWWHyper*pre*h1.breakAfter: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h1.breakBefore: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h1.fontFamlily: courier\n", "midaswww*WWWHyper*pre*h2.breakAfter: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h2.breakBefore: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h2.fontFamlily: courier\n", "midaswww*WWWHyper*pre*h3.breakAfter: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h3.breakBefore: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h3.fontFamlily: courier\n", "midaswww*WWWHyper*pre*h4.breakAfter: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h4.breakBefore: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h4.fontFamlily: courier\n", "midaswww*WWWHyper*pre*h5.breakAfter: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h5.breakBefore: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h5.fontFamlily: courier\n", "midaswww*WWWHyper*pre*h6.breakAfter: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h6.breakBefore: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*h6.fontFamlily: courier\n", "midaswww*WWWHyper*pre*p.breakBefore: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre*SGMLInputText.breakBefore: SGMLBREAK_NEVER\n", "midaswww*WWWHyper*pre.FontSpacing: m\n", "midaswww*WWWHyper*pre.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*pre.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*pre.defaultClass: SGMLPlainText\n", "midaswww*WWWHyper*pre.fontFamily: courier\n", "midaswww*WWWHyper*samp.fontFamily: courier\n", "midaswww*WWWHyper*samp.fontSpacing: m\n", "midaswww*WWWHyper*strong.fontWeight: bold\n", "midaswww*WWWHyper*table.tagList: * SGMLMarkerText: +tr +%th +%td SGMLCompositeText: +caption\n", "midaswww*WWWHyper*table.spaceBefore: 20\n", "midaswww*WWWHyper*table.spaceAfter: 20\n", "midaswww*WWWHyper*table.caption.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*table.caption.spaceAfter: 10\n", "midaswww*WWWHyper*table.caption.fontWeight: bold\n", "midaswww*WWWHyper*table.caption.createCallback: Set Ingot .^ caption .\n", "midaswww*WWWHyper*title.mapCallback: Set Ingot .^^^WWWMain NewTitle HyperGetText()\n", "midaswww*WWWHyper*textarea.type: textarea\n", "midaswww*WWWHyper*select.tagList: SGMLInputText: %option\n", "midaswww*WWWHyper*select.defaultClass: SGMLInputText\n", "midaswww*WWWHyper*select*SGMLInputText.type: select\n", "midaswww*WWWHyper*tryagain.activateCallback: Invoke Callback .^^^WWWMain...Reread_Document activateCallback\n", "midaswww*WWWHyper*tryagain.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*tryagain.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*tryagain.outline: true\n", "midaswww*WWWHyper*tryagain.pixmap: tryagain\n", "midaswww*WWWHyper*tryagain.sensitive: true\n", "midaswww*WWWHyper*tryagain.spaceAfter: 20\n", "midaswww*WWWHyper*tryagain.spaceBefore: 20\n", "midaswww*WWWHyper*tryagain.underlineHeight: 2\n", "midaswww*WWWHyper*tt.fontFamily: courier\n", "midaswww*WWWHyper*tt.fontSpacing: m\n", "midaswww*WWWHyper*u.underline: 1\n", "midaswww*WWWHyper*ul.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*ul.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*ul.bulletMarker: li\n", "midaswww*WWWHyper*ul.bulletType: unordered\n", "midaswww*WWWHyper*ul.leftIndent: 20\n", "midaswww*WWWHyper*ul.spaceAfter: 6\n", "midaswww*WWWHyper*ul.spaceBefore: 6\n", "midaswww*WWWHyper*ul.tagList: * SGMLMarkerText: +%li\n", "midaswww*WWWHyper*var.fontFamily: courier\n", "midaswww*WWWHyper*var.fontSpacing: m\n", "midaswww*WWWHyper*var.fontWeight: bold\n", "midaswww*WWWHyper*xmp.breakAfter: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*xmp.breakBefore: SGMLBREAK_ALWAYS\n", "midaswww*WWWHyper*xmp.defaultClass: SGMLPlainText\n", "midaswww*WWWHyper*xmp.exactTerminator: True\n", "midaswww*WWWHyper*xmp.fontFamily: courier\n", "midaswww*WWWHyper*xmp.fontSpacing: m\n", "midaswww*WWWHyper*xmp.hideIllegalTags: False\n", "midaswww*WWWHyper*xmp.supportsEntities: False\n", "midaswww*WWWHyper*xmp.tagList: \n", "midaswww*WWWHyper.WWWFileRequest: Set Cursor .^^^midaswww watch\\nSet Cursor . \"\"\\nSet Ingot .^^^XmMainWindow IsIndex False\\nSet Ingot .^^^XmMainWindow IsGIF False\\nSet Ingot . WWWFileBase WWWFileRequest\\n\ WWW Get . WWWFileRequest IncludeList NewTitle\\nSet Ingot .^^^XmMainWindow WWWFile WWWRedirect(WWWFileRequest)\n", "midaswww*WWWHyper.WWWFile: If NewTitle==\"\" Set Ingot .^^^WWWMain NewTitle \"Untitled (\"++WWWParent(WWWFile)++\")\"\\nWWW Set Title WWWFile NewTitle\\nWWW Add History HistoryList NewTitle\\nif IsIndex!=KeywordVisible Set Ingot .^^^XmMain\ Window KeywordVisible IsIndex\\nif IsPS!=PSState Set Ingot .^^^XmMainWindow PSState IsPS\\nif IsPS!=0 Set Ingot .^^^XmMainWindow DocFormat \"Postscript\"\\nelse if IsGIF Set Ingot .^^^XmMainWindow DocForma\ t \"GIF Image\"\\nelse Set Ingot .^^^XmMainWindow DocFormat \"HTML\"\\nSet Ingot .^^^XmMainWindow WWWTitle NewTitle\\nSet Ingot .^^^WWWMain NewTitle \"\"\\nSet Cursor .^^^midaswww \"\"\n", "midaswww*WWWHyper.WWWFileExecuteWhenCreated: False\n", "midaswww*WWWHyper.WWWFileRequestExecuteWhenCreated: False\n", "midaswww*WWWHyper.borderWidth: 0 \n", "midaswww*WWWHyper.cacheSize: 10\n", "midaswww*WWWHyper.midasIngots: WWWFileRequest WWWFileBase WWWFile\n", "midaswww*WWWKey.translations: #override \\n Shift <Btn1Down> : SendMidas(\"Custom Popup WWW\")\n", "midaswww*WWWMail.dialogTitle: WWW Mail\n", "midaswww*WWWMail.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/mail_window.html\"\n", "midaswww*WWWMail.mapCallback: Set Sensitive ....WWWMailOk GetValue(....WWWMailToText,value)!=\"\"\n", "midaswww*WWWMailDismiss.activateCallback: PopDown .^^\n", "midaswww*WWWMailFormatMenu.midasCreateCallback: Custom Connect WWW \"<format>\" .\n", "midaswww*WWWMailHelp.activateCallback: Invoke Callback .^^ helpCallback\n", "midaswww*WWWMailOk.activateCallback: Set Ingot . Tempfile WWWTempFile()\\nIf Format==\"Postscript\" Set Ingot .^^^WWWMail FileSpec GetValue(IsPS,file)\\nIf Format==\"HTML\" WWW Dump .^^^XmMainWindow...WWWHy\ per Tempfile\\nIf Format==\"HTML\" Set Ingot .^^^WWWMail FileSpec Tempfile\\nif uname()==\"VMS\" system \"MAIL/NOEDIT %FileSpec %GetValue(.^^^WWWMail...WWWMailToText,value)\"\\nelse system \"mail %GetValue(.^^^\ WWWMail...WWWMailToText,value) < %FileSpec\"\\nIf Format==\"HTML\" system \"%delete %Tempfile \"\\nPopDown .^^\n", "midaswww*WWWMailToText.valueChangedCallback: Invoke Callback .^^^WWWMail mapCallback\n", "midaswww*WWWMain.ConfirmPrint: \n", "midaswww*WWWMain.ConfirmPrintExecuteWhenCreated: True\n", "midaswww*WWWMain.FontSize: If FontSize==\"Small\" For All ....WWWHyper...default Set Value . fontSize 12\\nElse If FontSize==\"Medium\" For All ....WWWHyper...default Set Value . fontSize 14\\nElse If FontS\ ize==\"Large\" For All ....WWWHyper...default Set Value . fontSize 17\\nIf FontSize==\"Small\" For All ....WWWHyper...h2 Set Value . fontSize 14\\nElse If FontSize==\"Medium\" For All ....WWWHyper...h2 Set Va\ lue . fontSize 17\\nElse If FontSize==\"Large\" For All ....WWWHyper...h2 Set Value . fontSize 20\\nIf FontSize==\"Small\" For All ....WWWHyper...h1 Set Value . fontSize 17\\nElse If FontSize==\"Medium\" For A\ ll ....WWWHyper...h1 Set Value . fontSize 20\\nElse If FontSize==\"Large\" For All ....WWWHyper...h1 Set Value . fontSize 24\\nIf FontSize==\"Small\" Update Named Resource . \"midaswww*WWWHyper*default.fontS\ ize\" 12\\nElse If FontSize==\"Medium\" Update Named Resource . \"midaswww*WWWHyper*default.fontSize\" 14\\nElse If FontSize==\"Large\" Update Named Resource . \"midaswww*WWWHyper*default.fontSize\" 17\\nIf FontS\ ize==\"Small\" Update Named Resource . \"midaswww*WWWHyper*h2.fontSize\" 14\\nElse If FontSize==\"Medium\" Update Named Resource . \"midaswww*WWWHyper*h2.fontSize\" 17\\nElse If FontSize==\"Large\" Update Named R\ esource . \"midaswww*WWWHyper*h2.fontSize\" 20\\nIf FontSize==\"Small\" Update Named Resource . \"midaswww*WWWHyper*h1.fontSize\" 17\\nElse If FontSize==\"Medium\" Update Named Resource . \"midaswww*WWWHyper*h1.\ fontSize\" 20\\nElse If FontSize==\"Large\" Update Named Resource . \"midaswww*WWWHyper*h1.fontSize\" 24\\n\n", "midaswww*WWWMain.FontSizeExecuteWhenCreated: False\n", "midaswww*WWWMain.HeadingFont: For All ....WWWHyper...h1 Set Value . fontFamily HeadingFont \\nFor All ....WWWHyper...h2 Set Value . fontFamily HeadingFont\\nFor All ....WWWHyper...h3 Set Value . fontFam\ ily HeadingFont \\nFor All ....WWWHyper...h4 Set Value . fontFamily HeadingFont\\nUpdate Named Resource . \"midaswww*WWWHyper*h1.fontFamily\" HeadingFont\\nUpdate Named Resource . \"midaswww*WWWHyper*h2.fon\ tFamily\" HeadingFont\\nUpdate Named Resource . \"midaswww*WWWHyper*h3.fontFamily\" HeadingFont\\nUpdate Named Resource . \"midaswww*WWWHyper*h4.fontFamily\" HeadingFont\n", "midaswww*WWWMain.HeadingFontExecuteWhenCreated: False\n", "midaswww*WWWMain.IsIndexExecuteWhenCreated: True\n", "midaswww*WWWMain.PrintCommandHTML: \n", "midaswww*WWWMain.PrintCommandHTMLExecuteWhenCreated: True\n", "midaswww*WWWMain.PrintCommandPS: \n", "midaswww*WWWMain.PrintCommandPSExecuteWhenCreated: True\n", "midaswww*WWWMain.ShowUnrecognizedMarkupExecuteWhenCreated: False\n", "midaswww*WWWMain.TextFont: For All ....WWWHyper...default Set Value . fontFamily TextFont\\nUpdate Named Resource . \"midaswww*WWWHyper*default.fontFamily\" TextFont\n", "midaswww*WWWMain.TextFontExecuteWhenCreated: False\n", "midaswww*WWWMain.UnderlineHeadings: If UnderlineHeadings For All ....WWWHyper...h1 Set Value . underline 2\\nElse For All ....WWWHyper...h1 Set Value . underline 0\\nIf UnderlineHeadings For All ....WWW\ Hyper...h2 Set Value . underline 1\\nElse For All ....WWWHyper...h2 Set Value . underline 0\\nIf UnderlineHeadings For All ....WWWHyper...h3 Set Value . underline 1\\nElse For All ....WWWHyper...h3 Set V\ alue . underline 0\\nIf UnderlineHeadings Update Named Resource . \"midaswww*WWWHyper*h1.underline\" 2\\nElse Update Named Resource . \"midaswww*WWWHyper*h1.underline\" 0\\nIf UnderlineHeadings Update Named \ Resource . \"midaswww*WWWHyper*h2.underline\" 1\\nElse Update Named Resource . \"midaswww*WWWHyper*h2.underline\" 0\\nIf UnderlineHeadings Update Named Resource . \"midaswww*WWWHyper*h3.underline\" 1\\nElse Up\ date Named Resource . \"midaswww*WWWHyper*h3.underline\" 0\n", "midaswww*WWWMain.UnderlineHeadingsExecuteWhenCreated: False\n", "midaswww*WWWMain.WWWFileExecuteWhenCreated: False\n", "midaswww*WWWMain.WWWFileNew: Set Cursor .^^^midaswww watch\\nSet Cursor ....WWWHyper \"\"\\nUpdate Named Resource . midaswww.iconic false\\nCreate Shell midaswww\\nSet Value midaswww x GetValue(.^^^midaswww\ ,x)+40\\nSet Value midaswww y GetValue(.^^^midaswww,y)+40\\nFetch WWWMain:parent=midaswww\\nPopup WWWMain\\nSet value WWWMain...WWWHyper naturalWidth 0++(GetValue(WWWMain,width)-40)\\nSet Ingot WWWMain PSS\ tate 0\\nDispatch Queued Commands\\nSet Ingot WWWMain WWWFileRequest WWWFileNew\\nSet Cursor .^^^midaswww \"\"\\nWWW Register midaswww False\n", "midaswww*WWWMain.WWWFileNewExecuteWhenCreated: False\n", "midaswww*WWWMain.WWWFileTemp: if Modifier(\"shift\") Set Ingot . WWWFileNew WWWFileTemp\\nelse Set Ingot . WWWFileRequest WWWFileTemp\n", "midaswww*WWWMain.WWWFileTempExecuteWhenCreated: False\n", "midaswww*WWWMain.WWWTitle: Set Value .^ title WWWTitle \n", "midaswww*WWWMain.WWWTitleExecuteWhenCreated: False\n", "midaswww*WWWMain.WWW_Gateway: WWW Set Gateway WWW_Gateway\n", "midaswww*WWWMain.WWW_GatewayExecuteWhenCreated: False\n", "midaswww*WWWMain.WWW_Home: \n", "midaswww*WWWMain.WWW_HomeExecuteWhenCreated: True\n", "midaswww*WWWMain.helpCallback: Set Ingot . WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/overview.html\"\n", "midaswww*WWWMain.mainWindowMarginWidth: 2\n", "midaswww*WWWMain.midasCreateCallback: Set Value .^ iconPixmap MidasWWWIcon\\nCustom Create WWW .\\nFetch WWWSearch .\\nCreate Widget . SGMLHyper WWWHyper\\nSet Ingot . IncludeList CreateList(\"IncludeList\"\ )\\nSet Ingot . HistoryList CreateList(HistoryList)\\nSet Ingot . IsPS 0\\nSet Ingot .^ Popup Convert(0,\"Int\")\\nif argc>1 Set ingot . WWW_Home argv[1]\\nelse if getenv(WWW_HOME)!=\"\" Set ingot . WWW_Home g\ etenv(WWW_HOME)\\nelse Set ingot . WWW_Home GetAppResource(.^,home)\\nSet Confirm Exit . GetAppResource(.^,confirmExit)\\nSet ingot . ShowTitle GetAppResource(.^,\"ShowTitle\")\\nSet ingot . ShowURL GetAppR\ esource(.^,\"ShowURL\")\\nSet ingot . WWW_Gateway GetAppResource(.^,gateway)\\nSet ingot . HotList GetAppResource(.^,hotList)\\nSet ingot . PrintCommandHTML GetAppResource(.^,printCommandHTML)\\nSet ingot .\ PrintCommandPS GetAppResource(.^,printCommandPS)\\nSet ingot . ConfirmPrint GetAppResource(.^,confirmPrint)\\nSet ingot . ShowUnrecognizedMarkup GetAppResource(.^,\"ShowUnrecognizedMarkup\")\\nSet Ingot .\ FontSize GetAppResource(.^,\"fontSize\")\\nSet Ingot . HeadingFont GetAppResource(.^,\"headingFont\")\\nSet Ingot . TextFont GetAppResource(.^,\"textFont\")\\nSet Ingot . UnderlineHeadings GetAppResource(.^,\"\ underlineHeadings\")\\nif uname()==\"VMS\" Set Ingot . delete \"delete/noconfirm\"\\nelse Set Ingot . delete \"rm -f\"\\nif uname()==\"VMS\" Set Ingot . copy \"copy\"\\nelse Set Ingot . copy \"cp\"\n", "midaswww*WWWMain.midasIngots: WWWFile WWWFileNew WWWFileTemp WWWFileRequest IsIndex IsPS IsGIF KeywordVisible PSState WWWTitle WWW_Home WWW_Gateway DocFormat ShowUnrecognizedMarkup ShowTitle ShowURL PrintCommandPS F\ ontSize HeadingFont TextFont UnderlineHeadings\n", "midaswww*WWWMain.scrollingPolicy: XMAUTOMATIC\n", "midaswww*WWWMain.translations: #override \\n:<ConfigureNotify> : SendMidas(\"set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)\")\n", "midaswww*WWWMenu*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1\n", "midaswww*WWWMenu*XmToggleButtonGadget.visibleWhenOff: True\n", "midaswww*WWWMenu.midasCreateCallback: Custom Connect WWW \"<main_menu>\" .\n", "midaswww*WWWOpenFTP.dialogTitle: Open FTP Document\n", "midaswww*WWWOpenFTP.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www-midas.slac.stanford.edu:80/midasv21/open_ftp_doc.html\"\n", "midaswww*WWWOpenFTPApply.activateCallback: Set Ingot .^^^WWWMain WWWFileRequest \"ftp://\"++GetValue(.^^...WWWOpenFTPHost,value)++\":\"++GetValue(.^^...WWWOpenFTPPort,value)++GetValue(.^^...WWWOpenFTPPath,value)\n", "midaswww*WWWOpenFTPDismiss.activateCallback: PopDown .^^\n", "midaswww*WWWOpenFTPHelp.activateCallback: Invoke Callback .^^ helpCallback\n", "midaswww*WWWOpenFTPHost.value: info.cern.ch\n", "midaswww*WWWOpenFTPOk.activateCallback: Popdown .^^\\nInvoke Callback .^.WWWOpenFTPApply activateCallback\n", "midaswww*WWWOpenFTPPassword.value: %u@%h\n", "midaswww*WWWOpenFTPPath.value: /\n", "midaswww*WWWOpenFTPPort.value: 21\n", "midaswww*WWWOpenFTPUserid.value: anonymous\n", "midaswww*WWWOpenGopher.dialogTitle: Open Gopher Document\n", "midaswww*WWWOpenGopher.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest Temp \"http://www-midas.slac.stanford.edu:80/midasv21/open_gopher_doc.html\"\n", "midaswww*WWWOpenGopherApply.activateCallback: Set Ingot .^^^WWWMain WWWFileRequest \"gopher://\"++GetValue(.^^...WWWOpenGopherHost,value)++\":\"++GetValue(.^^...WWWOpenGopherPort,value)++\"/\"++GetValue(.^^...WWWO\ penGopherType,value)++GetValue(.^^...WWWOpenGopherPath,value)\n", "midaswww*WWWOpenGopherDismiss.activateCallback: PopDown .^^\n", "midaswww*WWWOpenGopherHelp.activateCallback: Invoke Callback .^^ helpCallback\n", "midaswww*WWWOpenGopherHost.value: gopher.micro.umn.edu\n", "midaswww*WWWOpenGopherName.value: Home of Gopher\n", "midaswww*WWWOpenGopherOk.activateCallback: PopDown .^^\\nInvoke Callback .^.WWWOpenGopherApply activateCallback\n", "midaswww*WWWOpenGopherPath.value: /\n", "midaswww*WWWOpenGopherPort.value: 70\n", "midaswww*WWWOpenGopherType.value: 1\n", "midaswww*WWWOpenHelp.activateCallback: Invoke Callback .^^ helpCallback\n", "midaswww*WWWOpenLocal.applyCallback: \n", "midaswww*WWWOpenLocal.cancelCallback: Popdown .\n", "midaswww*WWWOpenLocal.dialogTitle: Open Local Document\n", "midaswww*WWWOpenLocal.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp \"http://www-midas.slac.stanford.edu:80/midasv21/open_local_doc.html\"\n", "midaswww*WWWOpenLocal.okCallback: PopDown . \\nSet Ingot .^^^WWWMain WWWFileRequest \"local:\"++GetValue(.,dirSpec)\n", "midaswww*WWWOptionShowProgress.valueChangedCallback: Set Sensitive .^.WWWOptionShowProgressTime GetValue(.,set)\\nSet Sensitive .^.WWWShowProgressUpdateTime GetValue(.,set)\\nSet Sensitive .^^^WWWParame\ ters...WWWParamApply True\\nSet Sensitive .^^^WWWParameters...WWWParamReset True\\nSet Sensitive .^^^WWWParameters...WWWParamSave False\n", "midaswww*WWWOptionShowProgressTime.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\\nSet Sensitive .^^^WWWParameters...WWWParamReset True\\nSet Sensitive .^^^WWWParameters...W\ WWParamSave False\\n\n", "midaswww*WWWPS.PSState: Set Sensitive . PSState!=0\n", "midaswww*WWWPS.PSStateExecuteWhenCreated: False\n", "midaswww*WWWPS.midasIngots: PSState\n", "midaswww*WWWParamApply.activateCallback: If GetValue(.^^^...WWWParamCacheEnable,set) Set Value .^^^XmMainWindow...WWWHyper cacheSize GetValue(.^^^...WWWParamCacheSize,value)\\nElse Set Value .^^^XmMain\ Window...WWWHyper cacheSize 0\\nSet Ingot .^^^XmMainWindow WWW_Home GetValue(.^^^...WWWParamHome,value)\\nSet Ingot .^^^XmMainWindow WWW_Gateway GetValue(.^^^...WWWParamGate,value)\\nSet Confirm Exit . G\ etValue( .^^^...ConfirmExit,set)\\nif GetValue(.^^^...WWWOptionShowProgress,set) WWW Set Waiting Time GetValue(.^^^...WWWOptionShowProgressTime,value)*100\\nelse WWW Set Waiting Time -1\\nif GetValue(.^^\ ^...EnableHTTP2,set) WWW Set HTTP Level 1.0\\nelse WWW Set HTTP Level 0.9\\nWWW Set Update Time GetValue(.^^^...WWWShowProgressUpdateTime,value)*100\\nInvoke Callback .^^^^WWWParameters mapCallback\n", "midaswww*WWWParamApply.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/options.html#Apply\"\n", "midaswww*WWWParamCache.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/options.html#Caching\"\n", "midaswww*WWWParamCacheEnable.valueChangedCallback: Set Sensitive .^.WWWParamCacheSize GetValue(.,set)\\nSet Sensitive .^^^WWWParameters...WWWParamApply True\\nSet Sensitive .^^^WWWParameters...WWWParamR\ eset True\\nSet Sensitive .^^^WWWParameters...WWWParamSave False\n", "midaswww*WWWParamCacheSize.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\\nSet Sensitive .^^^WWWParameters...WWWParamReset True\\nSet Sensitive .^^^WWWParameters...WWWParamS\ ave False\n", "midaswww*WWWParamDismiss.activateCallback: PopDown .^^^WWWParameters\n", "midaswww*WWWParamDismiss.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/options.html#Dismiss\"\n", "midaswww*WWWParamGate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/options.html#Gateway\"\n", "midaswww*WWWParamGate.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\\nSet Sensitive .^^^WWWParameters...WWWParamReset True\\nSet Sensitive .^^^WWWParameters...WWWParamSave F\ alse\n", "midaswww*WWWParamHelp.activateCallback: Invoke Callback .^^ helpCallback\n", "midaswww*WWWParamHome.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/options.html#Home\"\n", "midaswww*WWWParamHome.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\\nSet Sensitive .^^^WWWParameters...WWWParamReset True\\nSet Sensitive .^^^WWWParameters...WWWParamSave F\ alse\n", "midaswww*WWWParamOk.activateCallback: If GetValue(.^.WWWParamApply,sensitive) Invoke Callback .^.WWWParamApply activateCallback\\nPopDown .^^^WWWParameters \n", "midaswww*WWWParamOk.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/options.html#Ok\"\n", "midaswww*WWWParamReset.activateCallback: Invoke Callback .^^^WWWParameters mapCallback\n", "midaswww*WWWParamReset.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/options.html#Reset\"\n", "midaswww*WWWParamSave.activateCallback: Store App Resource .^^^midaswww confirmExit GetConfirmExit(.)\\nStore App Resource .^^^midaswww home WWW_Home\\nStore App Resource .^^^midaswww gateway WWW_Gatewa\ y\\nStore App Resource .^^^midaswww waitingTimeOut WWWWaitingTime()\\nStore App Resource .^^^midaswww updateTimeOut WWWUpdateTime()\\nStore App Resource .^^^midaswww defaultHTTPProtocol WWWHTTPLevel()\\nS\ tore Resource .^^^XmMainWindow...WWWHyper cacheSize \n", "midaswww*WWWParamSave.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/options.html#Save\"\n", "midaswww*WWWParameters.dialogTitle: WWW Options\n", "midaswww*WWWParameters.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/options.html\"\n", "midaswww*WWWParameters.mapCallback: Set Value ....WWWParamHome value WWW_Home\\nSet Value ....WWWParamGate value WWW_Gateway\\nSet Ingot . N GetValue(.^^^XmMainWindow...WWWHyper,cacheSize)\\nif N>0 Set V\ alue ....WWWParamCacheSize value N\\nelse Set Value ....WWWParamCacheSize value 2\\nSet Value ....WWWParamCacheEnable set N>0\\nSet Value ....ConfirmExit set GetConfirmExit(.)\\nSet Value ....WWWOptionSho\ wProgress set WWWWaitingTime()>=0\\nif WWWWaitingTime()>=0 Set Value ....WWWOptionShowProgressTime value WWWWaitingTime()/100\\nSet Value ....WWWShowProgressUpdateTime value WWWUpdateTime()/100\\nSet Val\ ue ....EnableHTTP2 set WWWHTTPLevel()==\"1.0\"\\nSet Sensitive ....WWWOptionShowProgressTime WWWWaitingTime()>=0\\nSet Sensitive ....WWWShowProgressUpdateTime WWWWaitingTime()>=0\\nSet Sensitive ....WWWPar\ amCacheSize N>0\\nSet Sensitive ....WWWParamApply False\\nSet Sensitive ....WWWParamReset False\\nSet Sensitive ....WWWParamSave True\n", "midaswww*WWWPrint.dialogTitle: WWW Print ...\n", "midaswww*WWWPrint.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/print_window.html\"\n", "midaswww*WWWPrintCancel.activateCallback: PopDown .^^\n", "midaswww*WWWPrintConfirm.dialogTitle: WWW Print Confirm\n", "midaswww*WWWPrintConfirm.midasCreateCallback: PopDown ..Cancel\n", "midaswww*WWWPrintFormatMenu.midasCreateCallback: Custom Connect WWW \"<format>\" .\n", "midaswww*WWWPrintHelp.activateCallback: Invoke Callback .^^ helpCallback\n", "midaswww*WWWPrintOk.activateCallback: If Format==\"Postscript\" Set Ingot . Tempfile GetValue(IsPS,file)\\nIf Format==\"HTML\" Set Ingot . Tempfile WWWTempFile()\\nIf Format==\"HTML\" WWW Dump .^^^XmMainWindo\ w...WWWHyper Tempfile\\nSet Ingot . PrintCommand GetValue(.^^^...WWWPrintCommandText,value)\\nsystem PrintCommand++\" \"++Tempfile\\nIf Format==\"HTML\" system \"%delete %Tempfile\"\\nIf ConfirmPrint Set Value \ .^^^XmMainWindow###WWWPrintConfirm messageString \"Document '\"++WWWTitle++\"' printed (Command: \"++PrintCommand++\")\"\\nIf ConfirmPrint Popup .^^^XmMainWindow...WWWPrintConfirm\\nPopDown .^^ \n", "midaswww*WWWPrintOptions.dialogTitle: Print Options\n", "midaswww*WWWPrintOptions.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/print_options.html\"\n", "midaswww*WWWPrintOptions.mapCallback: Set Value ....WWWPrintOptionsHTMLText value PrintCommandHTML\\nSet Value ....WWWPrintOptionsPostscriptText value PrintCommandPS\\nSet Value ....WWWPrintOptionsCon\ firm set ConfirmPrint\\nSet Sensitive ....WWWPrintOptionsReset False\\nSet Sensitive ....WWWPrintOptionsApply False\n", "midaswww*WWWPrintOptionsApply.activateCallback: Set Ingot .^^^XmMainWindow PrintCommandHTML GetValue(.^^^...WWWPrintOptionsHTMLText,value)\\nSet Ingot .^^^XmMainWindow PrintCommandPS GetValue(.^^^...\ WWWPrintOptionsPostscriptText,value)\\nSet Ingot .^^^XmMainWindow ConfirmPrint GetValue(.^^^...WWWPrintOptionsConfirm,set)\\nStore App Resource .^^^midaswww \"confirmPrint\" ConfirmPrint\\nStore App Resour\ ce .^^^midaswww \"printCommandHTML\" PrintCommandHTML\\nStore App Resource .^^^midaswww \"printCommandPS\" PrintCommandPS\\nSet Sensitive .^^^...WWWPrintOptionsApply False\\nSet Sensitive .^^^...WWWPrintOpti\ onsReset False\\n\n", "midaswww*WWWPrintOptionsCancel.activateCallback: PopDown .^^\n", "midaswww*WWWPrintOptionsConfirm.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\\nSet Sensitive .^^^...WWWPrintOptionsReset True\n", "midaswww*WWWPrintOptionsHTMLText.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\\nSet Sensitive .^^^...WWWPrintOptionsReset True\\n\n", "midaswww*WWWPrintOptionsHelp.activateCallback: Invoke Callback .^^ helpCallback\n", "midaswww*WWWPrintOptionsOk.activateCallback: Invoke Callback .^.WWWPrintOptionsApply activateCallback\\nInvoke Callback .^.WWWPrintOptionsCancel activateCallback\n", "midaswww*WWWPrintOptionsPostscriptText.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\\nSet Sensitive .^^^...WWWPrintOptionsReset True\\n\n", "midaswww*WWWPrintOptionsReset.activateCallback: Invoke Callback .^^^WWWPrintOptions mapCallback\n", "midaswww*WWWPrint_popup.Format: If Format==\"Postscript\" Set Value ....WWWPrintCommandText value PrintCommandPS\\nIf Format==\"HTML\" Set Value ....WWWPrintCommandText value PrintCommandHTML\n", "midaswww*WWWPrint_popup.FormatExecuteWhenCreated: True\n", "midaswww*WWWPrint_popup.PrintCommandHTML: If Format==\"HTML\" Set Value ....WWWPrintCommandText value PrintCommandHTML\n", "midaswww*WWWPrint_popup.PrintCommandHTMLExecuteWhenCreated: False\n", "midaswww*WWWPrint_popup.PrintCommandPS: If Format==\"Postscript\" Set Value ....WWWPrintCommandText value PrintCommandPS\n", "midaswww*WWWPrint_popup.PrintCommandPSExecuteWhenCreated: False\n", "midaswww*WWWPrint_popup.midasIngots: Format PrintCommandHTML\n", "midaswww*WWWSave.DocFormat: \n", "midaswww*WWWSave.DocFormatExecuteWhenCreated: True\n", "midaswww*WWWSave.SaveAs: \n", "midaswww*WWWSave.SaveAsExecuteWhenCreated: True\n", "midaswww*WWWSave.activateCallback: If IsPs!=0 System \"%copy %GetValue(IsPS,file) %GetValue(.^...XmTextField,value)\"\\nElse WWW Dump .^^^XmMainWindow...WWWHyper GetValue(.^...XmTextField,value)\\nPopDown\ .^ \n", "midaswww*WWWSave.cancelCallback: Popdown .\n", "midaswww*WWWSave.dialogTitle: Save Document\n", "midaswww*WWWSave.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/save.html\"\n", "midaswww*WWWSave.midasIngots: DocFormat SaveAs\n", "midaswww*WWWSave.okCallback: Set Ingot . SaveAs GetValue(.,dirSpec)\\nIf Format==\"Postscript\" Set Ingot . PSFile GetValue(IsPS,file) \\nIf Format==\"HTML\" WWW Dump .^^^XmMainWindow...WWWHyper SaveAs\\nEls\ e If Format==\"Postscript\" System \"%copy %PSFile %SaveAs\"\\nPopDown .\n", "midaswww*WWWSave.selectionLabelString: Save As\n", "midaswww*WWWSaveFileAs.cancelCallback: PopDown .\n", "midaswww*WWWSaveFileAs.dialogTitle: Save File As...\n", "midaswww*WWWSaveFileAs.mapCallback: Set Ingot . result \"\"\\nSet Value ....WWWSaveFileAsText value WWWParent(WWWFile)\\nSet Value . dirSpec GetValue(.,directory)++file \n", "midaswww*WWWSaveFileAs.okCallback: Set Ingot . result GetValue(.,\"dirSpec\")\\nPopDown .\n", "midaswww*WWWSaveFileAs.selectionLabelString: Save As\n", "midaswww*WWWSaveFileAsText.editable: false\n", "midaswww*WWWSaveFormatMenu.midasCreateCallback: Custom Connect WWW \"<format>\" .\n", "midaswww*WWWSaveHelp.activateCallback: Invoke Callback .^ helpCallback\n", "midaswww*WWWSearch.DocFormat: If DocFormat!=\"HTML\" PopDown .\n", "midaswww*WWWSearch.dialogTitle: Search Document\n", "midaswww*WWWSearch.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/search_window.html\"\n", "midaswww*WWWSearch.midasIngots: DocFormat\n", "midaswww*WWWSearchCancel.activateCallback: Popdown .^^WWWSearch\n", "midaswww*WWWSearchFind.activateCallback: WWW Search .^^^...SGMLHyper GetValue(.^^WWWSearch...WWWSearchText,value) GetValue(.^^WWWSearch...WWWSearchCaseSensitive,set) GetValue(.^^WWWSearch...WWWSearchC\ ontinue,set)\n", "midaswww*WWWSearchHelp.activateCallback: Invoke Callback .^^ helpCallback\n", "midaswww*WWWShowProgressUpdateTime.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\\nSet Sensitive .^^^WWWParameters...WWWParamReset True\\nSet Sensitive .^^^WWWParameters...W\ WWParamSave False\\n\n", "midaswww*WWWSource*default.color: Black\n", "midaswww*WWWSource*default.defaultClass: SGMLPlainText\n", "midaswww*WWWSource*default.fontFamily: courier\n", "midaswww*WWWSource*default.fontSpacing: m\n", "midaswww*WWWSource.BorderWidth: 0\n", "midaswww*WWWSource.WWWFile: If ShowSource WWW Put . WWWSource(.^^^XmMainWindow...WWWHyper)\n", "midaswww*WWWSource.WWWFileExecuteWhenCreated: False\n", "midaswww*WWWSource.midasIngots: WWWFile\n", "midaswww*WWWTruncate.dialogTitle: Truncated...\n", "midaswww*WWWTruncate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/truncate.html\"\n", "midaswww*WWWWDocInfoDocNameText.WWWFile: Set Value . value WWWParent(WWWFile)\n", "midaswww*WWWWDocInfoDocNameText.WWWFileExecuteWhenCreated: True\n", "midaswww*WWWWDocInfoDocNameText.midasIngots: WWWFile\n", "midaswww*WWWWaiting.dialogStyle: XmDIALOG_MODELESS\n", "midaswww*WWWWaiting.dialogTitle: Waiting...\n", "midaswww*WWWWaiting_popup.overrideRedirect: true\n", "midaswww*XmCascaseButtonGadget: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 \n", "midaswww*XmDialogShell*Postscript.DocFormat: Set Sensitive . DocFormat==\"Postscript\"\\nIf DocFormat==\"Postscript\" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\\nIf DocFormat==\"Postscript\" Invoke\ Callback . activateCallback\n", "midaswww*XmMenuShell*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1\n", "midaswww*XmRowColumn.Text.DocFormat: Set Sensitive . DocFormat==\"Text\"\\nIf DocFormat==\"Text\" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\\nIf DocFormat==\"Text\" Invoke Callback . activateCallba\ ck\n", "midaswww*XmRowColumn.Text.DocFormatExecuteWhenCreated: True\n", "midaswww*XmRowColumn.Text.midasIngots: DocFormat\n", "midaswww*XmScrollBar.foreground: #d3d3d3d3d3d3\n", "XXmidaswww*XmText.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1\n", "XXmidaswww*XmTextField.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1\n", "midaswww*confirmPrint: False\n", "midaswww*gv_manager.container.mapCallback: Set Ingot .^^^XmMainWindow IsPS GetValueRaw(.,child)\n", "midaswww*gv_manager.container.unmapCallback: Set Ingot .^^^XmMainWindow IsPS 0\n", "midaswww*gv_manager.managementPolicy: ManageOne\n", "midaswww*printCommandHTML: lpr\n", "midaswww*printCommandPS: lpr\n", "midaswww*pulldownmenu*fontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1\n", "midaswww*rc2.orientation: XmHORIZONTAL\n", "midaswww.ShowTitle: true\n", "midaswww.ShowURL: true\n", "midaswww.ShowUnrecognizedMarkup: false\n", "midaswww.WWWMain*XmRowColumn.Help.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest \"http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Help\"\n", "midaswww.confirmExit: True\n", "midaswww.confirmPrint: true\n", "midaswww.defaultHTTPProtocol: 1.0\n", "midaswww.filetype_$http_destination: html\n", "midaswww.filetype_Z_binary: true\n", "midaswww.filetype_Z_command: uncompress -c\n", "midaswww.filetype_Z_filter: true\n", "midaswww.filetype_au_destination: file\n", "midaswww.filetype_au_icon: music\n", "midaswww.filetype_basic_destination: file\n", "midaswww.filetype_basic_icon: music\n", "midaswww.filetype_binary_destination: xbm\n", "midaswww.filetype_eps_destination: ps\n", "midaswww.filetype_eps_icon: ps\n", "midaswww.filetype_exe_binary: true\n", "midaswww.filetype_exe_destination: file\n", "midaswww.filetype_exe_icon: floppy\n", "midaswww.filetype_gif_binary: true\n", "midaswww.filetype_gif_destination: gif\n", "midaswww.filetype_gif_icon: graphics\n", "midaswww.filetype_gz_binary: true\n", "midaswww.filetype_gz_command: gzip -dc\n", "midaswww.filetype_gz_filter: true\n", "midaswww.filetype_html_destination: html\n", "midaswww.filetype_html_icon: web\n", "midaswww.filetype_jpeg_binary: true\n", "midaswww.filetype_jpeg_command: djpeg -colors 256 -gif\n", "midaswww.filetype_jpeg_destination: gif\n", "midaswww.filetype_jpeg_icon: graphics\n", "midaswww.filetype_jpg_binary: true\n", "midaswww.filetype_jpg_command: djpeg -colors 256 -gif\n", "midaswww.filetype_jpg_destination: gif\n", "midaswww.filetype_jpg_icon: graphics\n", "midaswww.filetype_mpeg_binary: true\n", "midaswww.filetype_mpeg_command: mpeg_play -quiet\n", "midaswww.filetype_mpeg_destination: multimedia\n", "midaswww.filetype_mpeg_icon: movie_icon\n", "midaswww.filetype_mpeg_shellflag: false\n", "midaswww.filetype_mpeg_tempfile: true\n", "midaswww.filetype_mpg_binary: true\n", "midaswww.filetype_mpg_command: mpeg_play -quiet\n", "midaswww.filetype_mpg_destination: multimedia\n", "midaswww.filetype_mpg_icon: movie_icon\n", "midaswww.filetype_mpg_shellflag: false\n", "midaswww.filetype_mpg_tempfile: true\n", "midaswww.filetype_plain_destination: text\n", "midaswww.filetype_pnm_binary: true\n", "midaswww.filetype_pnm_command: ppmquant 256 | ppmtogif\n", "midaswww.filetype_pnm_destination: gif\n", "midaswww.filetype_pnm_icon: graphics\n", "midaswww.filetype_postscript_destination: ps\n", "midaswww.filetype_postscript_icon: ps\n", "midaswww.filetype_ppm_binary: true\n", "midaswww.filetype_ppm_command: ppmquant 256 | ppmtogif\n", "midaswww.filetype_ppm_destination: gif\n", "midaswww.filetype_ppm_icon: graphics\n", "midaswww.filetype_ps_destination: ps\n", "midaswww.filetype_ps_icon: ps\n", "midaswww.filetype_shar_binary: true\n", "midaswww.filetype_shar_destination: file\n", "midaswww.filetype_shar_icon: floppy\n", "midaswww.filetype_tar_binary: true\n", "midaswww.filetype_tar_destination: file\n", "midaswww.filetype_tar_icon: floppy\n", "midaswww.filetype_tiff_binary: true\n", "midaswww.filetype_tiff_command: tifftopnm | ppmtogif\n", "midaswww.filetype_tiff_destination: gif\n", "midaswww.filetype_tiff_icon: graphics\n", "midaswww.filetype_tiff_tempfile: true\n", "midaswww.filetype_txt_destination: text\n", "midaswww.filetype_x-compress_binary: true\n", "midaswww.filetype_x-compress_command: uncompress -c\n", "midaswww.filetype_x-compress_filter: true\n", "midaswww.filetype_x-tiff_binary: true\n", "midaswww.filetype_x-tiff_command: tifftopnm | ppmtogif\n", "midaswww.filetype_x-tiff_destination: gif\n", "midaswww.filetype_x-tiff_icon: graphics\n", "midaswww.filetype_x-tiff_tempfile: true\n", "midaswww.filetype_x-xbitmap_destination: xbm\n", "midaswww.filetype_x-xbitmap_icon: floppy\n", "midaswww.filetype_x-zip_binary: true\n", "midaswww.filetype_x-zip_command: gzip -dc\n", "midaswww.filetype_x-zip_filter: true\n", "midaswww.filetype_x-zip_icon: floppy\n", "midaswww.filetype_xbm_destination: xbm\n", "midaswww.filetype_xbm_icon: floppy\n", "midaswww.filetype_z_binary: true\n", "midaswww.filetype_z_command: gzip -dc\n", "midaswww.filetype_z_filter: true\n", "midaswww.filetypes: ps eps Z z gz gif jpeg jpg html ppm pnm tiff exe tar $http xbm au txt mpeg mpg basic plain x-xbitmap x-tiff postscript binary shar x-compress x-zip\n", "midaswww.font: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1\n", "midaswww.fontSize: Large\n", "midaswww.gateway: http://htmlgate.slac.stanford.edu:2784\n", "midaswww.geometry: 700x800\n", "midaswww.headingFont: helvetica\n", "midaswww.headingsFont: Helvetica\n", "midaswww.home: http://slacvm.slac.stanford.edu:80/FIND/slac.html\n", "midaswww.hotList: <title>HotList</title><nocache><h1><img pixmap=flame>HotList</h1>\\nClick on the <img pixmap=kill> icon to remove an item from the list, or\\n<a href=http://www-midas.slac.stanford.edu:80\ /midasv21/hotlist.html>here</a> for more help.\\n<h6><kill><a href=news:comp.infosystems.www>Comp.Infosystems.WWW</a></h6><h6><kill><a href = http://info.cern.ch/hypertext/WWW/TheProject.html > The Wor\ ld Wide Web project </a></h6>\\n<h6><kill><a href = http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html > What's New With NCSA Mosaic </a></h6><h6><kill><a href = http://sunsite.unc.edu/ex\ po/ticket_office.html > EXPO Ticket Office </a></h6><h6><kill><a href = http://aka.dcrt.nih.gov > Rob's Multimedia Lab </a></h6><h6><kill><a href = http://www.ncsa.uiuc.edu/demoweb/url-primer.html > A\ Beginner's Guide to URLs </a></h6><h6><kill><a href = http://www.ncsa.uiuc.edu/demoweb/html-primer.html > A Beginner's Guide to HTML </a></h6><h6><kill><a href = http://www-midas.slac.stanford.edu/tonyw\ ww/talk/talk.html > World-Wide Web: An Illustrated Seminar </a></h6><h6><kill><a href = http://pulua.hcc.hawaii.edu/guide/www.guide.html > Entering the World-Wide Web: A Guide to Cyberspace </a></h6>\n", "midaswww.mimeencode: x-compress x-zip\n", "midaswww.mimetypes: text/plain text/html image/gif image/jpeg image/x-xbitmap image/x-tiff video/mpeg audio/basic application/postscript archive/tar archive/shar application/binary \n", "midaswww.printCommandHTML: lpr\n", "midaswww.printCommandPS: lpr\n", "midaswww.sensitiveColor: blue\n", "midaswww.sensitiveFontWeight: bold\n", "midaswww.startup: Open Uid midaswww.uid .\\nPopup WWWMain\\nWWW Init .\\nSet value ....WWWHyper naturalWidth 0++(GetValue(..WWWMain,width)-40)\\nSet Ingot ..WWWMain PSState 0\\nDispatch Queued Commands\\nIn\ voke Callback ....Home_Page activateCallback\\nSet Ingot Midas_Main NWin 1\\nWWW Register . False\n", "midaswww.textFont: new century schoolbook\n", "midaswww.translations: #override \\n <PropertyNotify> URL : SendMidas(\"Popup ..XmMainWindow ; Set Ingot ..XmMainWindow WWWFileTemp GetProperty(.,URL)\")\n", "midaswww.underlineHeadings: true\n", "midaswww.updateTimeOut: 200\n", "midaswww.version: 2.1\n", "midaswww.visitedColor: #59597171EAEA\n", "midaswww.visitedFontWeight: medium\n", "midaswww.waitingTimeOut: 2000\n", ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Imakefile������������������������������������������������������������������������������100666 � 21345 � 173 � 2646 5554674767 13256� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * midaswww -- Machine independent makefile * * (c) Copyright 1992, Tony Johnson (Tony_Johnson@Slac.Stanford.Edu) * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Kirk Erickson and * Silicon Graphics Inc. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. Tony Johnson makes no * representations about the suitability of this software for any purpose. * It is provided "as is" without express or implied warranty. * * THE ABOVE-NAMED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE ABOVE-NAMED BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ SYS_LIBRARIES = -lMrm -lXm -lXt -lX11 -lXmu -lXext /* You shouldn't need to modify anything below this line */ include CommonMakefile ComplexProgramTarget($(PGM)) ������������������������������������������������������������������������������������������midaswww-2.1/CommonMakefile�������������������������������������������������������������������������100666 � 21345 � 173 � 10356 5554674767 14273� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� MAJORVERSION = 2 MINORVERSION = 1 VERSION = $(MAJORVERSION).$(MINORVERSION) PGM = midaswww CLASS = Midaswww DIR = $(PGM)-$(VERSION) DEFINES = -DVERSION="\"$(VERSION)\"" HEADERS = \ SGMLAnchorText.h \ SGMLAnchorTextP.h \ SGMLCompositeText.h \ SGMLCompositeTextP.h \ SGMLCaptionText.h \ SGMLCaptionTextP.h \ SGMLFormattedText.h \ SGMLFormattedTextP.h \ SGMLFormText.h \ SGMLFormTextP.h \ SGMLHyper.h \ SGMLHyperP.h \ SGMLContainerText.h \ SGMLContainerTextP.h \ SGMLInputText.h \ SGMLInputTextP.h \ SGMLListText.h \ SGMLListTextP.h \ SGMLMarkerText.h \ SGMLMarkerTextP.h \ SGMLRuleText.h \ SGMLRuleTextP.h \ SGMLPlainText.h \ SGMLPlainTextP.h \ SGMLTableText.h \ SGMLTableTextP.h \ SGMLText.h \ SGMLTextP.h \ Tree.h \ TreeP.h \ Ghostview.h \ GhostviewP.h \ GhostviewPlusP.h \ GhostviewPlus.h \ ps.h \ midas.h \ midasconvert.h \ midaserrors.h \ midaslist.h \ midasoperand.h \ midasshell.h \ midaswidget.h \ midaswww.h \ midasnet.h \ vms_types.h \ xgifload.h \ stdc.h SRCS = \ SGMLAnchorText.c \ SGMLCompositeText.c \ SGMLFormattedText.c \ SGMLFormText.c \ SGMLHyper.c \ SGMLCaptionText.c \ SGMLContainerText.c \ SGMLInputText.c \ SGMLListText.c \ SGMLMarkerText.c \ SGMLRuleText.c \ SGMLPlainText.c \ SGMLTableText.c \ SGMLText.c \ Tree.c \ Ghostview.c \ GhostviewPlus.c \ ps.c \ custom.c \ dxm.c \ midas.c \ midasclass.c \ midasconvert.c \ midasdeclare.c \ midasevaluate.c \ midasingot.c \ midaslist.c \ midasloadimage.c \ midaswww.c \ midasutil.c \ setenv.c \ getenv.c \ xgifload.c \ uid2c.c \ midasfetchuid.c \ strcasecmp.c \ mwhttp.c \ mwhttp2.c \ mwgopher.c \ mwftp.c \ mwmain.c \ mwfont16.c OBJS = \ SGMLAnchorText.o \ SGMLCompositeText.o \ SGMLFormattedText.o \ SGMLFormText.o \ SGMLHyper.o \ SGMLCaptionText.o \ SGMLContainerText.o \ SGMLInputText.o \ SGMLListText.o \ SGMLMarkerText.o \ SGMLRuleText.o \ SGMLPlainText.o \ SGMLTableText.o \ SGMLText.o \ Tree.o \ Ghostview.o \ GhostviewPlus.o \ ps.o \ custom.o \ dxm.o \ midas.o \ midasclass.o \ midasconvert.o \ midasdeclare.o \ midasevaluate.o \ midasingot.o \ midaslist.o \ midasloadimage.o \ midaswww.o \ midasutil.o \ setenv.o \ getenv.o \ xgifload.o \ midasfetchuid.o \ mwhttp.o \ mwhttp2.o \ mwgopher.o \ mwftp.o \ mwmain.o \ mwfont16.o UILS = \ midas.uil \ midaswww.uil UIDS = \ midas.uid \ midaswww.uid UICS = \ midas.uic \ midaswww.uic ADS = \ Midas.ad \ Midaswww_color.ad \ Midaswww_mono.ad ADHS = \ Midas.adh \ Midaswww_color_part.adh \ Midaswww_mono_part.adh \ Midaswww_common_part.adh OTHERS = \ Imakefile \ CommonMakefile \ Makefile.hp \ Makefile.sgi \ Makefile.aix32 \ ad2c \ Midas.ad \ Midaswww_color_part.ad \ Midaswww_mono_part.ad \ Midaswww_common_part.ad \ descrip.mms \ make.com \ midaswww_multinet.opt \ midaswww_ucx.opt \ README_VMS \ README world:: $(UIDS) $(UICS) $(ADS) $(ADHS) $(PGM) .SUFFIXES : .uic .uid .uil .ad .adh mwmain.o: $(ADHS) Midaswww_color.ad: Midaswww_common_part.ad Midaswww_color_part.ad cat Midaswww_common_part.ad Midaswww_color_part.ad > $@ Midaswww_mono.ad: Midaswww_common_part.ad Midaswww_mono_part.ad cat Midaswww_common_part.ad Midaswww_mono_part.ad > $@ .ad.adh: ./ad2c $< > $*.adh uid2c: uid2c.o $(CC) -o $@ uid2c.o $(UICS): $(UIDS) uid2c .uid.uic: ./uid2c $*.uid .uil.uid: $(UIL) -o $*.uid $< test:: $(PGM) $(UIDS) XFILESEARCHPATH=./%N.xx ; export XFILESEARCHPATH; ./$(PGM) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Makefile.hp����������������������������������������������������������������������������100666 � 21345 � 173 � 755 6003421515 13435� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generic makefile - Unix (hp) version # LDLIBS = -lMrm -lXm -lXt -lXmu -lX11 LDOPTIONS = -L/usr/lib/Motif1.2 -L/usr/lib/X11R5 -L/usr/lib/X11R4 CFLAGS = -O -Wp,-H200000 -D_HPUX_SOURCE -DSYSV -D_NO_PROTO $(DEFINES) -I/usr/include/Motif1.2 -I/usr/include/X11R5 -I/usr/local/X11R5/include -I./ RM = rm -f UIL = /usr/bin/X11/uil include CommonMakefile $(PGM):: $(OBJS) $(RM) $@ $(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LDLIBS) �������������������midaswww-2.1/Makefile.sgi���������������������������������������������������������������������������100666 � 21345 � 173 � 676 5554674770 13641� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generic makefile - Unix (sgi) version # SHELL = /bin/sh LDLIBS = -lMrm -lXm_s -lXt_s -lXmu -lX11_s -lPW -lmalloc LDOPTIONS = CFLAGS = -O2 -prototypes -cckr -float -I/usr/include $(DEFINES) -DSYSV -DMALLOC_0_RETURNS_NULL -DFUNCPROTO -DNARROWPROTO RM = rm -f UIL = uil include CommonMakefile $(PGM):: $(OBJS) $(RM) $@ $(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LDLIBS) ������������������������������������������������������������������midaswww-2.1/Makefile.aix32�������������������������������������������������������������������������100666 � 21345 � 173 � 543 5554674770 13776� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generic makefile - Unix (rs6000) version # LDLIBS = -lXm -lPW -lIM -lXt -lXmu -lX11 -lMrm -lbsd LDOPTIONS = -bnodelcsect CFLAGS = -O -DAIXV3 -D_BSD -Dqnoro $(DEFINES) RM = rm -f UIL = uil include CommonMakefile $(PGM):: $(OBJS) $(RM) $@ $(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LDLIBS) �������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/ad2c�����������������������������������������������������������������������������������100777 � 21345 � 173 � 1457 5554674770 12175� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # ad2c : Convert app-defaults file to C strings decls. # # George Ferguson, ferguson@cs.rcohester.edu, 12 Nov 1990. # 19 Mar 1991 : gf # Made it self-contained. # 6 Jan 1992 : mycroft@gnu.ai.mit.edu (Charles Hannum) # Removed use of "-n" and ":read" label since Gnu and # IBM sed print pattern space on "n" command. Still works # with Sun sed, of course. # 7 Jan 1992: matthew@sunpix.East.Sun.COM (Matthew Stier) # Escape quotes after escaping backslashes. # 17 Nov 1993: tonyj@slacvx.slac.stanford.edu (Tony Johnson) # Include \n at end of each line to keep VMS happy # # sed ' /^!/d /^$/d s/\\/\\\\/g s/\\$//g s/"/\\"/g s/^/"/ : test /\\$/b slash s/$/\\n",/ p d : slash n /^!/d /^$/d s/"/\\"/g s/\\\\/\\/g s/\\n/\\\\n/g s/\\t/\\\\t/g s/\\f/\\\\f/g s/\\b/\\\\b/g b test' "$@" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Midas.ad�������������������������������������������������������������������������������100666 � 21345 � 173 � 43624 5554674770 13023� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midas.Version: 2.1 midas*MidasIngotManagerCallbackApply.activateCallback: Set Callback currentWidget GetValue(MidasIngotManager...MidasIngotManagerList,selectedItems) GetValue(MidasIngotManager...MidasIngotManagerCallbackText,value)\n\ Set Ingot Option currentWidget GetValue(MidasIngotManager...MidasIngotManagerList,selectedItems) GetValue(MidasIngotManager...MidasIngotManagerCallbackOption,set)\n\ Set Sensitive .^.MidasIngotManagerCallbackSave True\n\ Set Sensitive . False midas*MidasIngotManagerCallbackApply.currentWidget: Set Sensitive . False midas*MidasIngotManagerCallbackApply.midasIngots: currentWidget midas*MidasIngotManagerNameText.currentWidget: Set Value . value WidgetName(currentWidget) midas*MidasIngotManagerNameText.midasIngots: currentWidget midas*WidgetListList.defaultActionCallback: If GetValue(.^^^XmMainWindow...Show_Children,sensitive) Invoke Callback .^^^XmMainWindow...Show_Children activateCallback midas*WidgetListList.browseSelectionCallback: Set Ingot WidgetList "currentWidget" GetValue(.,selectedItems) midas*MidasEvalDismissButton.activateCallback: Midas PopDown .^ midas*XmForm.Text.currentWidget: Set Value . value ""\n\ Set Sensitive . False midas*XmForm.Text.midasIngots: currentWidget midas*XmForm.Text.valueChangedCallback: Set Sensitive .^^^...Apply True midas*MidasCreateNewIngot.currentWidget: Invoke Callback . mapCallback midas*MidasCreateNewIngot.midasIngots: currentWidget Owner midas*MidasCreateNewIngot.dialogTitle: Midas - Create New Ingot midas*MidasCreateNewIngot.mapCallback: Set Ingot . Owner currentWidget\n\ Set Value ..MidasCreateIngotNameText value "" midas*MidasStartupText.valueChangedCallback: Set Sensitive .^.MidasStartupSave True midas*MidasCreateIngotOwnerText.editable: false midas*MidasCreateIngotOwnerText.midasIngots: Owner midas*MidasCreateIngotOwnerText.Owner: Set Value . value WidgetName(Owner) midas*MidasEvalResultText.midasIngots: Result midas*MidasEvalResultText.Result: Set Value . value Result midas*MidasCallbackManagerClassText.currentWidget: Set Value . value WidgetClass(currentWidget) midas*MidasCallbackManagerClassText.midasIngots: currentWidget midas*MidasIngotManagerCallbackText.currentWidget: Set Value . value ""\n\ Set Sensitive . False midas*MidasIngotManagerCallbackText.midasIngots: currentWidget midas*MidasIngotManagerCallbackText.valueChangedCallback: Set Sensitive .^.MidasIngotManagerCallbackApply True\n\ Set Sensitive .^.MidasIngotManagerCallbackOption GetValue(.,value)!="" midas*MidasIngotManagerCallbackOption.currentWidget: Set Sensitive . False midas*MidasIngotManagerCallbackOption.midasIngots: currentWidget midas*MidasIngotManagerCallbackOption.valueChangedCallback: Set Sensitive .^.MidasIngotManagerCallbackApply True midas*MidasIngotManagerValueText.currentWidget: Set Value . value ""\n\ Set Sensitive . False midas*MidasIngotManagerValueText.midasIngots: currentWidget midas*MidasIngotManagerValueText.valueChangedCallback: Midas Set Sensitive .^.MidasIngotManagerValueApply True midas*Label.currentWidget: midas*Label.midasIngots: currentWidget midas*MidasCallbackManagerSave.activateCallback: Store Resource currentWidget GetValue(MidasCallbackManager...MidasCallbackManagerList,selectedItems)\n\ Set Sensitive . False midas*MidasCallbackManagerSave.currentWidget: Set Sensitive . False midas*MidasCallbackManagerSave.midasIngots: currentWidget midas*MidasCallbackManagerLabel.currentWidget: midas*MidasCallbackManagerLabel.midasIngots: currentWidget midas*MidasIngotManagerCallbackSave.activateCallback: Store Callback currentWidget GetValue(MidasIngotManager...MidasIngotManagerList,selectedItems)\n\ Set Sensitive . False midas*MidasIngotManagerCallbackSave.currentWidget: Set Sensitive . False midas*MidasIngotManagerCallbackSave.midasIngots: currentWidget midas*MidasEvalTypeText.midasIngots: Result midas*MidasEvalTypeText.Result: midas*NameText.currentWidget: Set Value . value WidgetName(currentWidget) midas*NameText.midasIngots: currentWidget midas*MidasEvalEvaluateButton.activateCallback: Set Ingot .^ Result Evalu8(GetValue(.^.MidasEvalExpressionText,value))\n\ Set Value .^.MidasEvalTypeText value Type(Result) midas*ClassText.currentWidget: Set Value . value WidgetClass(currentWidget) midas*ClassText.midasIngots: currentWidget midas*MidasHelp.midasCreateCallback: Create Widget . SGMLHyper MidasHelpHyper midas*MidasHelp.Position: midas*MidasHelp.PositionExecuteWhenCreated: True midas*MidasHelp.midasIngots: Position midas*MidasHelpDialog.title: Midas Help midas*MidasCreateIngotUp.activateCallback: Set Ingot .^ Owner Parent(Owner) midas*MidasCreateIngotUp.midasIngots: Owner midas*MidasCreateIngotUp.Owner: Set Sensitive . Owner!=Shell(Owner) midas*Toggle.currentWidget: Set Sensitive . currentWidget!="" midas*Toggle.midasIngots: currentWidget midas*MidasStartup.mapCallback: Midas Set Value ..MidasStartupText value GetAppResource(Midas,startup)\n\ Midas Set Sensitive ..MidasStartupSave False midas*WidgetList*Tree.XmPushButton.activateCallback: if GetClickCount()==2 Toggle Children currentWidget \n\ Set Ingot .^^^XmMainWindow currentWidget TreeToWidget(.) midas*WidgetList.midasIngots: currentWidget TreeStyle midas*WidgetList.TreeStyle: midas*WidgetList.midasCreateCallback: Custom Create WIDGETLIST .\n\ Set Ingot . TreeStyle left\n\ Create Widget . Tree WidgetTree\n\ Create Widget Tree ....WidgetTree midas*WidgetList.: midas*WidgetList.TreeStyleExecuteWhenCreated: False midas*WidgetList.mappedWhenManaged: true midas*MidasCallbackManagerList.currentWidget: Unrealize List CallbackList\n\ Get Callbacks CallbackList currentWidget\n\ Realize List CallbackList .\n midas*MidasCallbackManagerList.midasIngots: currentWidget midas*MidasCallbackManagerList.browseSelectionCallback: Set Value MidasCallbackManager...MidasCallbackManagerText value GetValue(currentWidget,GetValue(.,selectedItems))\n\ Set Sensitive MidasCallbackManager...MidasCallbackManagerText True\n\ Set Sensitive .^^^...MidasCallbackManagerApply False\n\ Set Sensitive .^^^...MidasCallbackManagerSave False midas*Save.activateCallback: Store Resource currentWidget GetValue(MidasResourceManager...List,selectedItems)\n\ Set Sensitive . False midas*Save.currentWidget: Set Sensitive . False midas*Save.midasIngots: currentWidget midas*MidasCallbackManagerText.currentWidget: Set Value . value ""\n\ Set Sensitive . False midas*MidasCallbackManagerText.midasIngots: currentWidget midas*MidasCallbackManagerText.valueChangedCallback: Set Sensitive .^^^...MidasCallbackManagerApply True \n midas*MidasIngotManagerDismiss.activateCallback: Midas PopDown .^ midas*MidasIngotManagerLabel.currentWidget: midas*MidasIngotManagerLabel.midasIngots: currentWidget midas*MidasCreateIngotCancel.activateCallback: PopDown .^ midas*MidasIngotManagerList.currentWidget: UnRealize List IngotList\n\ Get Ingots IngotList currentWidget\n\ Realize List IngotList .\n midas*MidasIngotManagerList.midasIngots: currentWidget midas*MidasIngotManagerList.browseSelectionCallback: Set Value MidasIngotManager...MidasIngotManagerValueText value GetIngot(currentWidget,GetValue(.,selectedItems))\n\ Set Value MidasIngotManager...MidasIngotManagerCallbackText value GetCallback(currentWidget,GetValue(.,selectedItems))\n\ Set Value MidasIngotManager...MidasIngotValueOwnerText value WidgetName(GetValueOwner(currentWidget,GetValue(.,selectedItems)))\n\ Set Value MidasIngotManager...MidasIngotManagerCallbackOption set GetIngotOption(currentWidget,GetValue(.,selectedItems))\n\ Set Sensitive .^^^...MidasIngotManagerValueText True\n\ Set Sensitive .^^^...MidasIngotManagerCallbackText True\n\ Set Sensitive .^^^...MidasIngotManagerCallbackOption GetCallback(currentWidget,GetValue(.,selectedItems))!=""\n\ Set Sensitive .^^^...MidasIngotManagerValueApply False\n\ Set Sensitive .^^^...MidasIngotManagerCallbackApply False\n\ Set Sensitive .^^^...MidasIngotManagerCallbackSave False midas*Vertical_Tree.TreeStyle: Set Value . set TreeStyle==top midas*Vertical_Tree.TreeStyleExecuteWhenCreated: True midas*Vertical_Tree.midasIngots: TreeStyle midas*Apply.activateCallback: Set Value currentWidget GetValue(MidasResourceManager...List,selectedItems) GetValue(MidasResourceManager...Text,value)\n\ Set Sensitive .^.Save True\n\ Set Sensitive . False midas*Apply.currentWidget: Set Sensitive . False midas*Apply.midasIngots: currentWidget midas*MidasExpressionEvaluator.midasIngots: Result midas*MidasExpressionEvaluator.Result: midas*MidasExpressionEvaluator.mapCallback: Invoke Callback ..MidasEvalClearButton activateCallback midas*MidasEvalClearButton.activateCallback: Set Value .^.MidasEvalResultText value ""\n\ Set Value .^.MidasEvalTypeText value ""\n\ Set Value .^.MidasEvalExpressionText value ""\n midas*MidasInfoUpButton.activateCallback: Set Ingot .^^^WidgetList currentWidget Parent(currentWidget) midas*MidasInfoUpButton.currentWidget: Set Sensitive . currentWidget!=Shell(currentWidget) midas*MidasInfoUpButton.midasIngots: currentWidget midas*MidasInfoButtonBox.midasCreateCallback: Custom Connect WIDGETLIST "<Info Buttons>" . midas*MidasIngotManager.autoUnmanage: false midas*MidasCreateIngotOk.activateCallback: Set Ingot Owner %GetValue(.^.MidasCreateIngotNameText,value) ""\n\ Store Callback Owner %GetValue(.^.MidasCreateIngotNameText,value)\n\ PopDown .^\n\ Get Ingots IngotList currentWidget\n midas*WidgetListButtons.midasCreateCallback: Custom Connect WIDGETLIST "<buttons>" . midas*Pop_Down.currentWidget: Set Sensitive . currentWidget!=&&IsManaged(currentWidget) midas*Pop_Down.midasIngots: currentWidget midas*MidasCreateIngotNameText.valueChangedCallback: Set Sensitive .^.MidasCreateIngotOk GetValue(.,value)!="" midas*Midas_Command.promptString: Midas Command midas*List.currentWidget: Unrealize List ResourceList\n\ If currentWidget!="" Get Resources ResourceList currentWidget\n\ Else Empty List ResourceList\n\ Realize List ResourceList .\n midas*List.midasIngots: currentWidget midas*List.browseSelectionCallback: Set Value MidasResourceManager.Text value GetValue(currentWidget,GetValue(.,selectedItems))\n\ Set Sensitive .^^^...Text True\n\ Set Sensitive .^^^...Apply False\n\ Set Sensitive .^^^...Save False midas*Pop_Up.currentWidget: Set Sensitive . currentWidget!=&&IsManaged(currentWidget)==False midas*Pop_Up.midasIngots: currentWidget midas*MidasInfo.midasIngots: currentWidget midas*MidasInfo.dialogTitle: Midas - Widget Info midas*MidasInfoNameText.currentWidget: Set Value . value WidgetName(currentWidget) midas*MidasInfoNameText.midasIngots: currentWidget midas*Show_Children.currentWidget: Set Sensitive . currentWidget!=&&HasChildren(currentWidget)\n\ if (GetValue(.,sensitive)&&ChildrenInTree(currentWidget)==True&&GetValue(.,labelString)=="Show Children") Set Value . labelString "Hide Children"\n\ else if (GetValue(.,sensitive)&&ChildrenInTree(currentWidget)==False&&GetVAlue(.,labelString)=="Hide Children") Set Value . labelString "Show Children" midas*Show_Children.midasIngots: currentWidget midas*Show_Children.currentWidgetExecuteWhenCreated: True midas*MidasFilesSelector.okCallback: Open Uid GetValue(..sb_text,value)\n\ PopDown .\n midas*MidasCallbackManagerCancel.activateCallback: PopDown .^ midas*MidasIngotManagerValueApply.activateCallback: Set Ingot currentWidget GetValue(MidasIngotManager...MidasIngotManagerList,selectedItems) GetValue(MidasIngotManager...MidasIngotManagerValueText,value)\n\ Set Sensitive . False midas*MidasIngotManagerValueApply.currentWidget: Set Sensitive . False midas*MidasIngotManagerValueApply.midasIngots: currentWidget midas*title.createCallback: Set Value .^^^XmDialogShell title HyperGetText() midas*MidasHelpSearch.activateCallback: Popup .^^^XmMainWindow...MidasHelpSearchDialog midas*MidasInfoClassText.currentWidget: Set Value . value WidgetClass(currentWidget) midas*MidasInfoClassText.midasIngots: currentWidget midas*Destroy.currentWidget: Set Sensitive . currentWidget!="" midas*Destroy.midasIngots: currentWidget midas*MidasCallbackManagerWidgetText.currentWidget: Set Value . value WidgetName(currentWidget) midas*MidasCallbackManagerWidgetText.midasIngots: currentWidget midas*WidgetListMenu.midasCreateCallback: Custom Connect WIDGETLIST "<main>" . midas*WidgetListDialog.x: 604 midas*WidgetListDialog.height: 422 midas*WidgetListDialog.y: 32 midas*WidgetListDialog.width: 665 midas*WidgetListDialog.title: Midas - Widget List midas*WidgetListDialog.geometry: 288x500+604+32 midas*MidasCallbackManagerApply.activateCallback: Set Value currentWidget GetValue(MidasCallbackManager...MidasCallbackManagerList,selectedItems) GetValue(MidasCallbackManager...MidasCallbackManagerText,value)\n\ Set Sensitive .^.MidasCallbackManagerSave True\n\ Set Sensitive . False midas*MidasCallbackManagerApply.currentWidget: Set Sensitive . False midas*MidasCallbackManagerApply.midasIngots: currentWidget midas*MidasIngotManagerCreateNew.activateCallback: Popup MidasCreateNewIngot:parent=.^ midas*Horizontal_Tree.TreeStyle: Set Value . set TreeStyle==left midas*Horizontal_Tree.TreeStyleExecuteWhenCreated: True midas*Horizontal_Tree.midasIngots: TreeStyle midas*MidasStartupSave.activateCallback: Store App Resource Midas startup GetValue(.^.MidasStartupText,value) midas*WidgetTree.midasIngots: currentWidget TreeStyle midas*WidgetTree.TreeStyle: Set Value . gravity TreeStyle midas*WidgetTree.TreeStyleExecuteWhenCreated: True midas*WidgetTree.currentWidgetExecuteWhenCreated: False midas*WidgetTree.currentWidget: If currentWidget!="" Current Widget In Tree currentWidget midas*MidasIngotManagerClassText.currentWidget: Set Value . value WidgetClass(currentWidget) midas*MidasIngotManagerClassText.midasIngots: currentWidget midas*MidasStartupDismiss.activateCallback: PopDown .^ midas.geometry: 567x233+11+32 midas.startup: Midas Popup Midas_Main midas.title: MIDAS - Motif Interactive Data Analysis Shell idas*SGMLHyper.p.breakBefore: true CUSTOM.CUSTOM.Verb.2: Popup MidasExpressionEvaluator CUSTOM.CUSTOM.Verb.15: Custom Popup CUSTOM CUSTOM.CUSTOM.Verb.6: help . "http://slacvx.slac.stanford.edu:80/MidasHelp/v09/midas.html" CUSTOM.CUSTOM.Verb.3: Popup FileList CUSTOM.CUSTOM.Verb.8: Quit CUSTOM.CUSTOM.Verb.9: Save Geometry Midas_Main+ CUSTOM.CUSTOM.Verb.5: Create Shell jazelle:UidFile=Ducsjazelle:Jazelle.Uid :Icon=JazelleIcon\n\ PopUp JazelleMain\n\ Load Image MidasJazelle\n\ Index CUSTOM.CUSTOM.Verb.16: Popup WidgetList:Dialog CUSTOM.CUSTOM.Verb.4: Cr \n\ Load Image MidasHandypak CUSTOM.CUSTOM.Verb.1: help . "http://slacvx.slac.stanford.edu:80/MidasHelp/v09/about.html" CUSTOM.CUSTOM.Verb.7: Invoke Application puzzle CUSTOM.CUSTOM.Verb.10: Custom Write CUSTOM CUSTOM CUSTOM.CUSTOM.Verb.11: Popup MidasStartup CUSTOM.CUSTOM.Verb.12: Popup MidasHelp:Dialog\n\ Set Ingot MidasHelp Position 1\n\ Empty List HelpStack\n\ Add List Position HelpStack fhbenefit.html 0\n\ Hyper Load File MidasHelpHyper fhbenefit.html CUSTOM.CUSTOM.Verb.13: Popup MidasHelp:Dialog\n\ Set Ingot MidasHelp Position 1\n\ Empty List HelpStack\n\ Add List Position HelpStack hlmain.html 0\n\ Hyper Load File MidasHelpHyper hlmain.html CUSTOM.CUSTOM.Verb.14: Popup MidasHelp:Dialog\n\ Set Ingot MidasHelp Position 1\n\ Empty List HelpStack\n\ Add List Position HelpStack "/nfs/juno/u1/ey/tonyj/WWW/LineMode/Defaults/Features.html" 0\n\ Hyper Load File MidasHelpHyper "/nfs/juno/u1/ey/tonyj/WWW/LineMode/Defaults/Features.html" CUSTOM.CUSTOM.Menu.3: Quit@8 CUSTOM.CUSTOM.Menu.6: Widget Manager...@16#File Manager...@3#Expression Evaluator...@2 CUSTOM.CUSTOM.Menu.2: Puzzle@7 CUSTOM.CUSTOM.Menu.1: Control =>@-3#Tools =>@-6#Applications =>@-2#Customize =>@-4#Help =>@-5 CUSTOM.CUSTOM.Menu.4: Startup...@11#Verbs and Menus...@15#......@0#Save Current Settings@10#Save Current Geometry@9 CUSTOM.CUSTOM.Menu.5: About...@1#Overview...@6 CUSTOM.CUSTOM.Verbs: About...#Expression Evaluator...#File Manager...#Ida#Jazelle#Overview...#Puzzle#Quit#Save Current Geometry#Save Current Settings#Startup...#Test...#Test2...#Test3...#Verbs and Menus...#Widget Manager... CUSTOM.CUSTOM.Menus: <main>#Applications#Control#Customize#Help#Tools CUSTOM.WIDGETLIST.Verb.2: PopDown WidgetList CUSTOM.WIDGETLIST.Verb.15: Custom Popup WIDGETLIST CUSTOM.WIDGETLIST.Verb.5: #Set Ingot .^^^XmMainWindow TreeStyle left CUSTOM.WIDGETLIST.Verb.9: Popup MidasResourceManager:parent=WidgetList CUSTOM.WIDGETLIST.Verb.1: Popup MidasCallbackManager:Parent=WidgetList CUSTOM.WIDGETLIST.Verb.7: PopDown currentWidget\n\ Set Sensitive . False\n\ Set Sensitive .^.Pop_Up True CUSTOM.WIDGETLIST.Verb.13: #Custom Popup WIDGETLIST CUSTOM.WIDGETLIST.Verb.12: Toggle Children currentWidget\n\ If ChildrenInTree(currentWidget) Set Value . labelString "Hide Children"\n\ Else Set Value . labelString "Show Children" CUSTOM.WIDGETLIST.Verb.3: Destroy currentWidget\n\ Set Ingot WidgetList "currentWidget" "" CUSTOM.WIDGETLIST.Verb.6: Popup MidasIngotManager:parent=WidgetList CUSTOM.WIDGETLIST.Verb.17: Popup WidgetList CUSTOM.WIDGETLIST.Verb.8: PopUp currentWidget\n\ Set Sensitive . False\n\ Set Sensitive .^.Pop_Down True CUSTOM.WIDGETLIST.Verb.16: #Set Ingot .^^^XmMainWindow TreeStyle top CUSTOM.WIDGETLIST.Verb.4: Midas PopDown .^^ CUSTOM.WIDGETLIST.Verb.10: Save Geometry WidgetList^ CUSTOM.WIDGETLIST.Verb.14: Toggle currentWidget\n\ Set Sensitive .^.Pop_Down IsManaged(currentWidget)\n\ Set Sensitive .^.Pop_Up IsManaged(currentWidget)==False CUSTOM.WIDGETLIST.Verb.11: Custom Write WIDGETLIST CUSTOM.WIDGETLIST.Menu.6: Horizontal Tree@5#Vertical Tree@16#......@0#Show Class@13 CUSTOM.WIDGETLIST.Menu.2: Show Children@12#Pop Up@8#Pop Down@7#Toggle@14#Destroy@3 CUSTOM.WIDGETLIST.Menu.7: Callback Manager...@1#Resource Manager...@9#Ingot Manager...@6 CUSTOM.WIDGETLIST.Menu.1: Callback Manager...@1#Resource Manager...@9#Ingot Manager...@6#Widget Manager...@17#Dismiss@4 CUSTOM.WIDGETLIST.Menu.4: Layout =>@-6#......@0#Close Window@2 CUSTOM.WIDGETLIST.Menu.3: Control =>@-4#Tools =>@-7#Customize =>@-5 CUSTOM.WIDGETLIST.Menu.5: Verbs and Menus...@15#......@0#Save Current Settings@11#Save Current Geometry@10 CUSTOM.WIDGETLIST.Verbs: Callback Manager...#Close Window#Destroy#Dismiss#Horizontal Tree#Ingot Manager...#Pop Down#Pop Up#\ Resource Manager...#Save Current Geometry#Save Current Settings#Show Children#Show Class#Toggle#Verbs and Menus...#Vertical Tree#Widget Manager... CUSTOM.WIDGETLIST.Menus: <Info Buttons>#<buttons>#<main>#Control#Customize#Layout#Tools ������������������������������������������������������������������������������������������������������������midaswww-2.1/Midaswww_color_part.ad�����������������������������������������������������������������100666 � 21345 � 173 � 1250 5554674770 15761� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������! ! Color preferences ! midaswww*Background: #d3d3d3d3d3d3 midaswww*Foreground: #000000000000 midaswww*SelectColor: #ffffffff0000 midaswww*HighlightColor: orange midaswww*TopShadowColor: #ffffffffffff midaswww*BottomShadowColor: #a1a1a1a1a1a1 midaswww*WWWMenu*Background: #8d8dd1d1d2d2 midaswww*WWWMenu*TopShadowColor: #d6d6efefefef midaswww*WWWMenu*BottomShadowColor: #4646b1b1b3b3 midaswww*WWWHistoryMenu*Background: #8d8dd1d1d2d2 midaswww*WWWHistoryMenu*TopShadowColor: #d6d6efefefef midaswww*WWWHistoryMenu*BottomShadowColor: #4646b1b1b3b3 midaswww*XmTextField*Background: #b2b2b2b2b2b2 midaswww*XmLabel*Foreground: #1d1d15155b5b midaswww*XmText*Background: #b2b2b2b2b2b2 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Midaswww_mono_part.ad������������������������������������������������������������������100666 � 21345 � 173 � 302 5554674770 15570� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������! ! Color preferences ! midaswww.sensitiveUnderline: 1 midaswww.sensitiveUnderlineStyle: SGMLLINE_STYLE_DASHED midaswww.visitedUnderline: 1 midaswww.visitedUnderlineStyle: SGMLLINE_STYLE_DOTTED ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Midaswww_common_part.ad����������������������������������������������������������������100666 � 21345 � 173 � 225661 5554674771 16212� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CUSTOM.WWW.Menu.10: Headings =>@-12#Paragraphs =>@-20 CUSTOM.WWW.Menu.11: GopherSpace Overview@36#Veronica Interface@115#......@0#Original UMN Gopher@73#UIUC Weather Machine@106 CUSTOM.WWW.Menu.12: Helvetica (Headings)@41#New Century (Headings)@59#Times (Headings)@102 CUSTOM.WWW.Menu.13: Overview@74#On Version@68#On WWW@69#On Help@66#......@0#On HTML@65#On URL's@67#......@0#On Context@64 CUSTOM.WWW.Menu.14: On Window@70#On Context@64 CUSTOM.WWW.Menu.15: -5@5#-4@4#-3@3#-2@2#-1@1#0@6#1@7#2@8#3@9#4@10#5@11 CUSTOM.WWW.Menu.16: SunOS 4.1.1 Man Pages@99#HP-UX 8.0.7 Man Pages@38#Ultrix 4.2a Man Pages@108#IRIX 4.0 Man Pages@47#Pyramid OSx Man Pages@84#......@0#VMS Help System@113#X11R5 Man Pages@126#GNU manu\ als@33 CUSTOM.WWW.Menu.17: Visited Documents@116#Visited Documents...@117#......@0#Home Page@43#Go Back@34#Next@61#Previous@79#......@0#Hotlist@44#Add Document to Hotlist@14 CUSTOM.WWW.Menu.18: Document...@29#Gopher Document...@35#FTP Document...@30#Local Document...@52 CUSTOM.WWW.Menu.19: Portrait@76#Landscape@50#Seascape@96#Upside Down@111 CUSTOM.WWW.Menu.1: Go Back@34#Previous@79#Next@61#......@0#Save...@93#Search...@94#......@0#Clone @19#Close Window@21 CUSTOM.WWW.Menu.20: Helvetica (Text)@42#New Century (Text)@60#Times (Text)@103 CUSTOM.WWW.Menu.21: First Page@32#Next Page@62#Previous Page@80#Index@48#......@0#MagStep =>@-15#Orientation =>@-19 CUSTOM.WWW.Menu.22: Document Title@27#Document URL@28#......@0#Unrecognized Markup@109 CUSTOM.WWW.Menu.23: Headings (Underline)@40 CUSTOM.WWW.Menu.2: HTML@39#Text@101#Postscript@78 CUSTOM.WWW.Menu.3: File (History) =>@-8#Help (History) =>@-14 CUSTOM.WWW.Menu.4: File =>@-7#Postscript =>@-21#Navigate =>@-17#Customize =>@-5#Documents =>@-6#Manuals =>@-16#Help =>@-13 CUSTOM.WWW.Menu.5: Options...@72#Print Options...@82#Show =>@-22#......@0#Fonts =>@-10#Font Size =>@-9#Underline =>@-23 CUSTOM.WWW.Menu.6: MidasWWW Welcome Page@56#......@0#Web Overview@120#Web Project@121#Web Servers@122#Information by Subject@49#Data Sources by Service@23#W3 Catalog@118#......@0#What's New@123#......\ @0#Wais Interface@119#Gopher Interface =>@-11#Usenet Interface@112#Finger Interface@31#HyTelnet Interface@45#Techinfo Interface@100#Archie Interface@15#X.500 Interface@125#Hyper-G Interface@46#......@\ 0#HEP Overview@37#......@0#CERN Home Page@16#SLAC Home Page@90#SSC Home Page@91#Ohio State Home Page@63 CUSTOM.WWW.Menu.7: Reread Document@86#Document Info...@25#Document Source...@26#......@0#Open Selected@71#Open =>@-18#......@0#Save...@93#Mail...@53#Print...@83#Search...@94#......@0#Clone@19#......@0\ #Close Window@21#Quit@85 CUSTOM.WWW.Menu.8: Update@110#Search... (History)@95#Close@20 CUSTOM.WWW.Menu.9: Small@97#Medium@54#Large@51 CUSTOM.WWW.Menus: <buttons>#<format>#<history_menu>#<main_menu>#Customize#Documents#File#File (History)#Font Size#Fonts#Gopher Interface#Headings#Help#Help (History)#MagStep#Manuals#Navigate#Open#Orie\ ntation#Paragraphs#Postscript#Show#Underline CUSTOM.WWW.Verb.100: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch:8004/" CUSTOM.WWW.Verb.101: Set Ingot .^^^XmDiialogShell Format TEXT CUSTOM.WWW.Verb.102: #Set Ingot .^^^WWWMain HeadingFont "times"\nStore App Resource .^^^midaswww headingFont "times" CUSTOM.WWW.Verb.103: #Set Ingot .^^^WWWMain TextFont "times"\nStore App Resource .^^^midaswww textFont "times" CUSTOM.WWW.Verb.104: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.uiuc.edu:70/1" CUSTOM.WWW.Verb.105: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.uiuc.edu:70/1" CUSTOM.WWW.Verb.106: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://wx.atmos.uiuc.edu:70/1" CUSTOM.WWW.Verb.107: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://bigcheese.math.scarolina.edu:70/1" CUSTOM.WWW.Verb.108: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/ultrix.top.html" CUSTOM.WWW.Verb.109: #Set Ingot .^^^XmMainWindow ShowUnrecognizedMarkup GetValue(.,set)\nStore App Resource .^^^midaswww "ShowUnrecognizedMarkup" ShowUnrecognizedMarkup\nFor All .^^^XmMainWindow...hid\ den Set Value . managed ShowUnrecognizedMarkup CUSTOM.WWW.Verb.10: #Set Value PSState magstep 4 CUSTOM.WWW.Verb.110: Invoke Callback .^^^XmForm unmapCallback\nInvoke Callback .^^^XmForm mapCallback CUSTOM.WWW.Verb.111: #Set Value PSState orientation "upside-down" CUSTOM.WWW.Verb.112: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/News/Groups/Overview.html" CUSTOM.WWW.Verb.113: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/HELP" CUSTOM.WWW.Verb.114: Custom Popup WWW CUSTOM.WWW.Verb.115: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.tc.umn.edu:70/11/Other Gopher and Information Servers/Veronica" CUSTOM.WWW.Verb.116: Set Ingot .^^^XmMainWindow WWWFileTemp "history:" CUSTOM.WWW.Verb.117: Popup .^^^XmMainWindow###WWWHistory CUSTOM.WWW.Verb.118: Set Ingot .^^^XmMainWindow WWWFileTemp "http://cui_www.unige.ch/w3catalog" CUSTOM.WWW.Verb.119: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/WAIS/ByHost.html" CUSTOM.WWW.Verb.11: #Set Value PSState magstep 5 CUSTOM.WWW.Verb.120: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/WWW/LineMode/Defaults/default.html" CUSTOM.WWW.Verb.121: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/WWW/TheProject.html" CUSTOM.WWW.Verb.122: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/WWW/Servers.html" CUSTOM.WWW.Verb.123: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html" CUSTOM.WWW.Verb.124: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.tc.umn.edu:70/11/Phone Books/WHOIS Searches" CUSTOM.WWW.Verb.125: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://umich.edu:7777/" CUSTOM.WWW.Verb.126: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/x11.top.html" CUSTOM.WWW.Verb.12: Set Ingot .^^^XmMainWindow WWWFileTemp "http://hoohoo.ncsa.uiuc.edu:1235/man/index" CUSTOM.WWW.Verb.13: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/bySubject/Overview.html" CUSTOM.WWW.Verb.14: Set Ingot .^^^XmMainWindow HotList HotList++"<h6><kill><a href = %WWWParent(WWWFile) > %WWWTitle </a></h6>" \nStore App Resource .^^^midaswww hotList HotList \n CUSTOM.WWW.Verb.15: Set Ingot .^^^XmMainWindow WWWFileTemp "http://web.nexor.co.uk/archie.html" CUSTOM.WWW.Verb.16: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/" CUSTOM.WWW.Verb.17: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.tc.cornell.edu:70/1" CUSTOM.WWW.Verb.18: WWW Reset CUSTOM.WWW.Verb.19: Set Ingot WWWMain WWWFileNew WWWFile CUSTOM.WWW.Verb.1: #Set Value PSState magstep -1 CUSTOM.WWW.Verb.20: For All .^^^XmForm.XmDialogShell. PopDown .\nPopDown .^^^XmForm CUSTOM.WWW.Verb.21: Quit Shell . CUSTOM.WWW.Verb.22: Set Ingot .^^^XmMainWindow WWWFileTemp "http://fatty.law.cornell.edu.:80/usr2/wwwtext/lii.table.html" CUSTOM.WWW.Verb.23: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/ByAccess.html" CUSTOM.WWW.Verb.24: Popup .^^^XmMainWindow###WWWDisplayOptions CUSTOM.WWW.Verb.25: Popup .^^^XmMainWindow###WWWDocInfo\nSet Ingot .^^^XmMainWindow###WWWDocInfo ShowSource False CUSTOM.WWW.Verb.26: Popup .^^^XmMainWindow###WWWDocInfo\nSet Ingot .^^^XmMainWindow###WWWDocInfo ShowSource True CUSTOM.WWW.Verb.27: #Set Ingot .^^^XmMainWindow ShowTitle GetValue(.,set)\nStore App Resource .^^^midaswww "ShowTitle" ShowTitle\nKick .^^^XmMainWindow CUSTOM.WWW.Verb.28: #Set Ingot .^^^XmMainWindow ShowURL GetValue(.,set)\nStore App Resource .^^^midaswww "ShowURL" ShowURL\nkick .^^^XmMainWindow CUSTOM.WWW.Verb.29: Popup .^^^XmMainWindow###WWWDocOpen CUSTOM.WWW.Verb.2: #Set Value PSState magstep -2 CUSTOM.WWW.Verb.30: Popup .^^^XmMainWindow###WWWOpenFTP CUSTOM.WWW.Verb.31: Set Ingot .^^^XmMainWindow WWWFileTemp "http://cs.indiana.edu/finger/gateway" CUSTOM.WWW.Verb.32: WWW First Page PSState\nSet Sensitive .^.Next_Page True\nSet Sensitive . False CUSTOM.WWW.Verb.33: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:85/info/dir" CUSTOM.WWW.Verb.34: Set Ingot . Temp WWWBack(HistoryList)\nWWW Delete History HistoryList\nWWW Link\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(Temp,"WWWFile") CUSTOM.WWW.Verb.35: Popup .^^^XmMainWindow###WWWOpenGopher CUSTOM.WWW.Verb.36: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.micro.umn.edu:70/11/Other Gopher and Information Servers" CUSTOM.WWW.Verb.37: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/bySubject/Physics/HEP.html" CUSTOM.WWW.Verb.38: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/hpux.top.html" CUSTOM.WWW.Verb.39: Set Ingot .^^^XmDialogShell Format HTML CUSTOM.WWW.Verb.3: #Set Value PSState magstep -3 CUSTOM.WWW.Verb.40: #Set Ingot .^^^WWWMain UnderlineHeadings GetValue(.,set)\nStore App Resource .^^^midaswww underlineHeadings UnderlineHeadings CUSTOM.WWW.Verb.41: #Set Ingot .^^^WWWMain HeadingFont helvetica\nStore App Resource .^^^midaswww headingFont helvetica CUSTOM.WWW.Verb.42: #Set Ingot .^^^WWWMain TextFont helvetica\nStore App Resource .^^^midaswww textFont helvetica CUSTOM.WWW.Verb.43: Set Ingot .^^^XmMainWindow WWWFileTemp WWW_Home CUSTOM.WWW.Verb.44: Set Ingot .^^^XmMainWindow WWWFileTemp "ingot:HotList" CUSTOM.WWW.Verb.45: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu/misc/hytelnet.html" CUSTOM.WWW.Verb.46: Set Ingot .^^^XmMainWindow WWWFileTemp "http://iicm.tu-graz.ac.at:80/ROOT" CUSTOM.WWW.Verb.47: Set Ingot .^^^XmMainWindow WWWFileTemp "http://z0.slac.stanford.edu:1234/man/index" CUSTOM.WWW.Verb.48: Set Ingot . Temp WWWBack(HistoryList)\nWWW Delete History HistoryList\nWWW Link\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(Temp,"WWWFile") CUSTOM.WWW.Verb.49: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/bySubject/Overview.html" CUSTOM.WWW.Verb.4: #Set Value PSState magstep -4 CUSTOM.WWW.Verb.50: #Set Value PSState orientation landscape CUSTOM.WWW.Verb.51: #Set Ingot .^^^WWWMain FontSize Large\nStore App Resource .^^^midaswww "fontSize" Large CUSTOM.WWW.Verb.52: Popup .^^^XmMainWindow###WWWOpenLocal CUSTOM.WWW.Verb.53: Popup .^^^XmMainWindow###WWWMail CUSTOM.WWW.Verb.54: #Set Ingot .^^^WWWMain FontSize Medium\nStore App Resource .^^^midaswww "fontSize" Medium\n CUSTOM.WWW.Verb.55: Popup Midas_Main CUSTOM.WWW.Verb.56: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/welcome.html" CUSTOM.WWW.Verb.57: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.ncsa.uiuc.edu:70/1" CUSTOM.WWW.Verb.58: Set Ingot .^^^XmMainWindow WWWFileTemp "http://hoohoo.ncsa.uiuc.edu/welcome.html" CUSTOM.WWW.Verb.59: #Set Ingot .^^^WWWMain HeadingFont "new century schoolbook"\nStore App Resource .^^^midaswww headingFont "new century schoolbook" CUSTOM.WWW.Verb.5: #Set Value PSState magstep -5 CUSTOM.WWW.Verb.60: #Set Ingot .^^^WWWMain TextFont "new century schoolbook"\nStore App Resource .^^^midaswww textFont "new century schoolbook" CUSTOM.WWW.Verb.61: Set Ingot . Temp WWWNext(WWWBack(HistoryList))\nWWW Delete History HistoryList\nWWW Link Temp \nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),"WWWFile") CUSTOM.WWW.Verb.62: If GetValue(PSState,"pages")>0 Invoke Callback .^^^WWWMain...Next activateCallback\nElse WWW Next Page PSState\nElse Set Sensitive .^.First_Page True CUSTOM.WWW.Verb.63: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/hypertext/information/information.html" CUSTOM.WWW.Verb.64: Help On Context . CUSTOM.WWW.Verb.65: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ncsa.uiuc.edu/demoweb/html-primer.html" CUSTOM.WWW.Verb.66: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/help.html" CUSTOM.WWW.Verb.67: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ncsa.uiuc.edu/demoweb/url-primer.html" CUSTOM.WWW.Verb.68: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/about.html" CUSTOM.WWW.Verb.69: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/WWW/TheProject.html" CUSTOM.WWW.Verb.6: #Set Value PSState magstep 0 CUSTOM.WWW.Verb.70: Invoke Callback .^^^XmForm helpCallback CUSTOM.WWW.Verb.71: If GetSelection(.,"PRIMARY","STRING")!="" Set Ingot .^^^XmMainWindow WWWFileTemp GetSelection(.,"PRIMARY","STRING") \nElse Popup .^^^XmMainWindow###WWWDocOpen CUSTOM.WWW.Verb.72: Popup .^^^XmMainWindow###WWWParameters CUSTOM.WWW.Verb.73: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.micro.umn.edu:70/1" CUSTOM.WWW.Verb.74: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/overview.html" CUSTOM.WWW.Verb.75: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://pscuxb.psc.edu:1563/1" CUSTOM.WWW.Verb.76: #Set Value PSState orientation portrait CUSTOM.WWW.Verb.77: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://una.hh.lib.umich.edu:70/11/journals/pmc" CUSTOM.WWW.Verb.78: Set Ingot .^^^XmDialogShell Format Postscript CUSTOM.WWW.Verb.79: Set Ingot . Temp WWWPrev(WWWBack(HistoryList))\nWWW Delete History HistoryList\nWWW Link Temp \nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),"WWWFile") CUSTOM.WWW.Verb.7: #Set Value PSState magstep 1 CUSTOM.WWW.Verb.80: Set Ingot . Temp WWWPrev(WWWBack(HistoryList))\nWWW Delete History HistoryList\nWWW Link Temp \nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),"WWWFile") CUSTOM.WWW.Verb.81: Invoke Callback .^^^XmMainWindow###WWWPrint...WWWPrintOk activateCallback CUSTOM.WWW.Verb.82: Popup .^^^XmMainWindow###WWWPrintOptions CUSTOM.WWW.Verb.83: Popup .^^^XmMainWindow###WWWPrint CUSTOM.WWW.Verb.84: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/pyramid.top.html" CUSTOM.WWW.Verb.85: Quit Application . CUSTOM.WWW.Verb.86: WWW Zap .^^^XmMainWindow...WWWHyper WWWFile\nWWW Link\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWFile,"WWWNode") CUSTOM.WWW.Verb.87: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.sdsc.edu:70/1" CUSTOM.WWW.Verb.88: Set Ingot .^^^XmMainWindow WWWFileTemp "http://iicm.tu-graz.ac.at:80/CSIGGRAPHbib" CUSTOM.WWW.Verb.89: Set Ingot .^^^XmMainWindow WWWFileTemp "http://slacvm.slac.stanford.edu:5080/FIND/SLAC.HTML" CUSTOM.WWW.Verb.8: #Set Value PSState magstep 2 CUSTOM.WWW.Verb.90: Set Ingot .^^^XmMainWindow WWWFileTemp "http://slacvm.slac.stanford.edu./FIND/SLAC.HTML" CUSTOM.WWW.Verb.91: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ssc.gov/SSC.html" CUSTOM.WWW.Verb.92: Custom Write WWW\nSave Stored Resources . CUSTOM.WWW.Verb.93: Popup .^^^XmMainWindow###WWWSave CUSTOM.WWW.Verb.94: Popup .^^^XmMainWindow###WWWSearch CUSTOM.WWW.Verb.95: Popup .^^^WWWHistory###WWWSearch CUSTOM.WWW.Verb.96: #Set Value PSState orientation seascape CUSTOM.WWW.Verb.97: #Set Ingot .^^^WWWMain FontSize Small\nStore App Resource .^^^midaswww "fontSize" Small\n CUSTOM.WWW.Verb.98: Popup WWWStartup CUSTOM.WWW.Verb.99: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/sunos.top.html" CUSTOM.WWW.Verb.9: #Set Value PSState magstep 3 CUSTOM.WWW.Verbs: -1#-2#-3#-4#-5#0#1#2#3#4#5#AIX 3.2 Man Pages#Academic Information#Add Document to Hotlist#Archie Interface#CERN Home Page#CTC Gopher#Clear Visited Documents#Clone#Close#Close Window#\ Cornell Law School#Data Sources by Service#Display...#Document Info...#Document Source...#Document Title#Document URL#Document...#FTP Document...#Finger Interface#First Page#GNU manuals#Go Back#Gopher\ Document...#GopherSpace Overview#HEP Overview#HP-UX 8.0.7 Man Pages#HTML#Headings (Underline)#Helvetica (Headings)#Helvetica (Text)#Home Page#Hotlist#HyTelnet Interface#Hyper-G Interface#IRIX 4.0 Man\ Pages#Index#Information by Subject#Landscape#Large#Local Document...#Mail...#Medium#Midas...#MidasWWW Welcome Page#NCSA Gopher#NCSA Home Page#New Century (Headings)#New Century (Text)#Next#Next Page#\ Ohio State Home Page#On Context#On HTML#On Help#On URL's#On Version#On WWW#On Window#Open Selected#Options...#Original UMN Gopher#Overview#PSC Gopher#Portrait#PostModern Culture#Postscript#Previous#Pr\ evious Page#Print#Print Options...#Print...#Pyramid OSx Man Pages#Quit#Reread Document#SDSC Gopher#SIGGRAPH Bibliography#SLAC#SLAC Home Page#SSC Home Page#Save Current Settings#Save...#Search...#Searc\ h... (History)#Seascape#Small#Startup...#SunOS 4.1.1 Man Pages#Techinfo Interface#Text#Times (Headings)#Times (Text)#UIUC Gopher#UIUC Gopher#UIUC Weather Machine#USC Math Gopher#Ultrix 4.2a Man Pages\ #Unrecognized Markup#Update#Upside Down#Usenet Interface#VMS Help System#Verbs and Menus...#Veronica Interface#Visited Documents#Visited Documents...#W3 Catalog#Wais Interface#Web Overview#Web Project\ #Web Servers#What's New#Whois Interface#X.500 Interface#X11R5 Man Pages midaswww*Clone.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/clone.html" midaswww*Close_Window.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/quit.html" midaswww*ConfirmExit.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave Fa\ lse midaswww*Customize.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Customize" midaswww*Document_Source___.DocFormat: Set Sensitive . DocFormat=="HTML" midaswww*Document_Source___.DocFormatExecuteWhenCreated: False midaswww*Document_Source___.midasIngots: DocFormat midaswww*Document_Title.midasCreateCallback: Set Value . set ShowTitle midaswww*Document_URL.midasCreateCallback: set value . set ShowURL midaswww*Documents.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Documents" midaswww*EnableHTTP2.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave Fa\ lse midaswww*File.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#File" midaswww*First_Page.WWWFile: Set Sensitive . False midaswww*First_Page.midasIngots: WWWFile midaswww*FontList: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1 midaswww*Font_Size.radioBehavior: true midaswww*GhostscriptErrorCancel.activateCallback: PopDown .^^ midaswww*GhostviewErrorsHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*Go_Back.WWWFile: Set Sensitive . WWWBack(HistoryList)!=0 midaswww*Go_Back.WWWFileExecuteWhenCreated: True midaswww*Go_Back.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#GoBack" midaswww*Go_Back.midasIngots: WWWFile midaswww*HTML.DocFormat: Set Sensitive . DocFormat=="HTML"\nIf DocFormat=="HTML" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\nIf DocFormat=="HTML" Invoke Callback . activateCallback midaswww*HTML.DocFormatExecuteWhenCreated: True midaswww*HTML.midasIngots: DocFormat midaswww*Headings.radioBehavior: true midaswww*Headings_(Underline).midasCreateCallback: Set Value . set UnderlineHeadings midaswww*Helvetica_(Headings).midasCreateCallback: Set Value . set HeadingFont=="helvetica" midaswww*Helvetica_(Text).midasCreateCallback: Set Value . set TextFont=="helvetica" midaswww*Index.WWWFile: Set Sensitive . PSState!=0&&GetValue(PSState,"pages")>1 midaswww*Index.midasIngots: WWWFile midaswww*Large.midasCreateCallback: Set Value . set FontSize=="Large" midaswww*MagStep.XmToggleButtonGadget.PSState: If PSState!=0 Set Value . set GetValue(PSState,magstep)==GetValue(.,labelString) midaswww*MagStep.XmToggleButtonGadget.midasIngots: PSState midaswww*MagStep.radioBehavior: true midaswww*Mail___.DocFormat: Set Sensitive . DocFormat!="GIF Image" midaswww*Mail___.DocFormatExecuteWhenCreated: False midaswww*Mail___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/slac_library.html#Mail" midaswww*Mail___.midasIngots: DocFormat midaswww*Manuals.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#manuals" midaswww*Medium.midasCreateCallback: Set Value . set FontSize=="Medium" midaswww*Navigate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Navigate" midaswww*New_Century_(Headings).midasCreateCallback: Set Value . set HeadingFont=="new century schoolbook" midaswww*New_Century_(Text).midasCreateCallback: Set Value . set TextFont=="new century schoolbook" midaswww*Next.WWWFile: Set Sensitive . WWWDest(WWWNext(WWWBack(HistoryList)))!=0 midaswww*Next.WWWFileExecuteWhenCreated: True midaswww*Next.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#NextPrevious" midaswww*Next.midasIngots: WWWFile midaswww*Next_Page.WWWFile: Set Sensitive . WWWDest(WWWNext(WWWBack(HistoryList)))!=0&&PSState!=0&&GetValue(PSState,"pages")!=1 midaswww*Next_Page.midasIngots: WWWFile midaswww*Orientation.XmToggleButtonGadget.PSState: If PSState!=0 Set Value . set GetValueRaw(PSState,orientation)==GetValue(.,labelString) midaswww*Orientation.XmToggleButtonGadget.midasIngots: PSState midaswww*Orientation.radioBehavior: true midaswww*PSF.activateCallback: WWW Next Page PSState midaswww*Paragraphs.radioBehavior: true midaswww*Postscript.DocFormat: Set Sensitive . DocFormat=="Postscript" midaswww*Postscript.DocFormatExecuteWhenCreated: True midaswww*Postscript.midasIngots: DocFormat midaswww*Previous.WWWFile: Set Sensitive . WWWDest(WWWPrev(WWWBack(HistoryList)))!=0 midaswww*Previous.WWWFileExecuteWhenCreated: True midaswww*Previous.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#NextPrevious" midaswww*Previous.midasIngots: WWWFile midaswww*Previous_Page.WWWFile: Set Sensitive . WWWDest(WWWPrev(WWWBack(HistoryList)))!=0&&PSState!=0&&GetValue(PSState,"pages")>1 midaswww*Previous_Page.midasIngots: WWWFile midaswww*Print.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/slac_library.html#Print" midaswww*Print___.DocFormat: Set Sensitive . DocFormat!="GIF Image" midaswww*Print___.DocFormatExecuteWhenCreated: False midaswww*Print___.midasIngots: DocFormat midaswww*Quit.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/quit.html" midaswww*SGMLHyper.midasCreateCallback: WWW CopyB . .^ midaswww*SGMLMarkerText.bombPixmap: bomb midaswww*Save___.DocFormat: Set Sensitive . DocFormat!="GIF Image" midaswww*Save___.DocFormatExecuteWhenCreated: False midaswww*Save___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/save.html" midaswww*Save___.midasIngots: DocFormat midaswww*Search___.DocFormat: Set Sensitive . DocFormat=="HTML" midaswww*Search___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/search_window.html" midaswww*Search___.midasIngots: DocFormat midaswww*ShowDocumentSource.DocFormat: Set Sensitive . DocFormat=="HTML" midaswww*ShowDocumentSource.DocFormatExecuteWhenCreated: True midaswww*ShowDocumentSource.ShowSource: Set Value . set ShowSource midaswww*ShowDocumentSource.ShowSourceExecuteWhenCreated: True midaswww*ShowDocumentSource.midasIngots: ShowSource DocFormat midaswww*ShowDocumentSource.valueChangedCallback: Set Ingot .^^^WWWDocInfo ShowSource GetValue(.,set) midaswww*Small.midasCreateCallback: Set Value . set FontSize=="Small" midaswww*SourceTextSW.ShowSource: If ShowSource Then PopUp .\nElse PopDown .\nIf ShowSource Set Value .^^ height 600\nElse Set Value .^^ height GetValue(.,y)\nIf ShowSource WWW Put ....WWWSource WWWSo\ urce(.^^^XmMainWindow...WWWHyper) midaswww*SourceTextSW.ShowSourceExecuteWhenCreated: False midaswww*SourceTextSW.midasCreateCallback: Create Widget . SGMLHyper WWWSource midaswww*SourceTextSW.midasIngots: ShowSource midaswww*Times_(Headings).midasCreateCallback: Set Value . set HeadingFont=="times" midaswww*Times_(Text).midasCreateCallback: Set Value . set TextFont=="times" midaswww*Unrecognized_Markup.midasCreateCallback: set value . set ShowUnrecognizedMarkup midaswww*WWWButtons.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Buttons" midaswww*WWWButtons.midasCreateCallback: Custom Connect WWW "<buttons>" . midaswww*WWWButtons.orientation: XMHORIZONTAL midaswww*WWWCommand.KeywordVisible: Set Sensitive . KeywordVisible midaswww*WWWCommand.KeywordVisibleExecuteWhenCreated: False midaswww*WWWCommand.midasIngots: KeywordVisible midaswww*WWWCommand.sensitive: false midaswww*WWWCommandText.KeywordVisible: If KeywordVisible Grab Focus . midaswww*WWWCommandText.KeywordVisibleExecuteWhenCreated: False midaswww*WWWCommandText.commandEnteredCallback: If GetCommand()!="" Set Ingot . temp WWWCreateNodeFromKeyword(GetIngot(.^^^WWWMain...WWWHyper,WWWFileBase),WWWFile,WWWEncode(GetCommand()),"get")\n\ If GetCommand()!="" WWW Link temp\nIf GetCommand()!="" S\ et Ingot .^^^XmMainWindow WWWFileRequest WWWDest(temp) midaswww*WWWCommandText.marginHeight: 0 midaswww*WWWCommandText.marginWidth: 2 midaswww*WWWCommandText.midasCreateCallback: PopDown ..XmScrolledWindow\nPopDown ..Selection midaswww*WWWCommandText.midasIngots: KeywordVisible midaswww*WWWDocInfo*WWWSearch.ShowSource: If ShowSource==False PopDown . midaswww*WWWDocInfo*WWWSearch.ShowSourceExecuteWhenCreated: False midaswww*WWWDocInfo*WWWSearch.dialogTitle: Search Source midaswww*WWWDocInfo*WWWSearch.midasIngots: ShowSource midaswww*WWWDocInfo.DocFormat: If DocFormat!="HTML" Set Ingot . ShowSource False midaswww*WWWDocInfo.DocFormatExecuteWhenCreated: False midaswww*WWWDocInfo.ShowSourceExecuteWhenCreated: True midaswww*WWWDocInfo.dialogTitle: Document Info. midaswww*WWWDocInfo.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/docinfo.html" midaswww*WWWDocInfo.mapCallback: Set Value ....SourceTextSW height 600\nSet Value ....SourceTextSW width 600 midaswww*WWWDocInfo.midasCreateCallback: Set Ingot . ShowSource False midaswww*WWWDocInfo.midasIngots: ShowSource DocFormat midaswww*WWWDocInfoCancel.activateCallback: PopDown .^^ midaswww*WWWDocInfoDismiss.activateCallback: For All .^^.XmDialogShell. PopDown .\nPopDown .^^ midaswww*WWWDocInfoDocFormatText.DocFormat: Set Value . value DocFormat midaswww*WWWDocInfoDocFormatText.DocFormatExecuteWhenCreated: True midaswww*WWWDocInfoDocFormatText.editable: false midaswww*WWWDocInfoDocFormatText.midasIngots: DocFormat midaswww*WWWDocInfoDocTitleText.WWWTitle: Set Value . value WWWTitle midaswww*WWWDocInfoDocTitleText.WWWTitleExecuteWhenCreated: True midaswww*WWWDocInfoDocTitleText.midasIngots: WWWTitle midaswww*WWWDocInfoHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWDocInfoIndexToggle.IsIndexExecuteWhenCreated: True midaswww*WWWDocInfoIndexToggle.KeywordVisible: set Value . set KeywordVisible midaswww*WWWDocInfoIndexToggle.midasIngots: KeywordVisible midaswww*WWWDocInfoSearch.ShowSource: Set Sensitive . ShowSource midaswww*WWWDocInfoSearch.activateCallback: Popup .^^^WWWDocInfo###WWWSearch midaswww*WWWDocInfoSearch.midasIngots: ShowSource midaswww*WWWDocOpen.autoUnmanage: false midaswww*WWWDocOpen.dialogTitle: Open Document midaswww*WWWDocOpen.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/opendoc.html" midaswww*WWWDocOpenOk.activateCallback: PopDown .^^ \nSet Ingot .^^^XmMainWindow WWWFileRequest GetValue(.^^...WWWDocOpenText,value) midaswww*WWWGhostviewErrors.dialogTitle: Ghostscript Errors midaswww*WWWGhostviewErrors.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/gs_error.html" midaswww*WWWGhostviewErrors.unmapCallback: Set Value ....XmText value "" midaswww*WWWHeader.ShowTitle: If ShowTitle||ShowURL PopUp .\nElse PopDown . midaswww*WWWHeader.ShowTitleExecuteWhenCreated: True midaswww*WWWHeader.ShowURL: If ShowTitle||ShowURL PopUp .\nElse PopDown . midaswww*WWWHeader.ShowURLExecuteWhenCreated: True midaswww*WWWHeader.midasIngots: ShowURL ShowTitle midaswww*WWWHeaderDocumentLabel.ShowURL: If ShowURL PopUp .\nElse PopDown . midaswww*WWWHeaderDocumentLabel.ShowURLExecuteWhenCreated: True midaswww*WWWHeaderDocumentLabel.midasIngots: ShowURL midaswww*WWWHeaderDocumentText.ShowURL: If ShowURL PopUp .\nElse Popdown . midaswww*WWWHeaderDocumentText.ShowURLExecuteWhenCreated: True midaswww*WWWHeaderDocumentText.WWWFile: Set Value . value WWWParent(WWWFile) midaswww*WWWHeaderDocumentText.WWWFileExecuteWhenCreated: True midaswww*WWWHeaderDocumentText.editable: false midaswww*WWWHeaderDocumentText.midasIngots: WWWFile ShowURL midaswww*WWWHeaderTitleLabel.ShowTitle: If ShowTitle Then Popup .\nElse PopDown . midaswww*WWWHeaderTitleLabel.ShowTitleExecuteWhenCreated: True midaswww*WWWHeaderTitleLabel.midasIngots: ShowTitle midaswww*WWWHeaderTitleText.ShowTitle: If ShowTitle PopUp .\nElse PopDown . midaswww*WWWHeaderTitleText.ShowTitleExecuteWhenCreated: True midaswww*WWWHeaderTitleText.WWWTitle: Set Value . value WWWTitle midaswww*WWWHeaderTitleText.WWWTitleExecuteWhenCreated: False midaswww*WWWHeaderTitleText.editable: false midaswww*WWWHeaderTitleText.midasIngots: WWWTitle ShowTitle midaswww*WWWHistory*Search___.midasIngots: midaswww*WWWHistory*WWWHyper*a*activateCallback: WWW Link\nSet Ingot .^^^WWWMain WWWFileTemp Convert(WWWDest(WWWNode(.^^^a)),"WWWFile") midaswww*WWWHistory*WWWHyper*a.createCallback: WWW Anchor . "history:"\nSet Value . sensitive GetValue(.,href)!="" midaswww*WWWHistory*WWWHyper*title.createCallback: midaswww*WWWHistory*WWWHyper*title.mapCallback: midaswww*WWWHistory*WWWHyper.midasIngots: midaswww*WWWHistory*WWWSearch.dialogTitle: Search History midaswww*WWWHistory*WWWSearch.midasIngots: midaswww*WWWHistory.dialogTitle: Visited Documents midaswww*WWWHistory.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/visited_documents_window.html" midaswww*WWWHistory.mapCallback: set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)\nWWW Link\nWWW Get ....WWWHyper "history:" IncludeList "" midaswww*WWWHistory.unmapCallback: WWW Zap ....WWWHyper "history:"\n midaswww*WWWHistoryButton.activateCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "history:" midaswww*WWWHistoryButton.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#history" midaswww*WWWHistoryMenu*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*WWWHistoryMenu.midasCreateCallback: Custom Connect WWW "<history_menu>" .\n midaswww*WWWHistorySW.midasCreateCallback: Create Widget . SGMLHyper WWWHyper midaswww*WWWHistorySW.scrollingPolicy: XMAUTOMATIC midaswww*WWWHistorySW.translations: #override \n:<ConfigureNotify> : SendMidas("set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)") midaswww*WWWHome.activateCallback: Set Ingot .^^^XmMainWindow WWWFileRequest WWW_Home midaswww*WWWHome.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/home.html" midaswww*WWWHotList.activateCallback: Invoke Callback .^^^WWWMain...Hotlist activateCallback midaswww*WWWHotList.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest " http://www-midas.slac.stanford.edu:80/midasv21/hotlist.html" midaswww*WWWHotListDeleteConfirm.dialogTitle: Delete Item? midaswww*WWWHotListDeleteConfirm.helpCallback: PopDown .\nSet Ingot .^^^WWWMain WWWFileNew "http://www-midas.slac.stanford.edu:80/midasv21/hotlist.html" midaswww*WWWHotListDeleteConfirm.mapCallback: Set Ingot . result false midaswww*WWWHotListDeleteConfirm.okCallback: Set Ingot . result true midaswww*WWWHyper*SGMLPlainText.tabs: 8 midaswww*WWWHyper*a*activateCallback: WWW Link WWWNode(.^^^a)\nSet Ingot .^^^WWWMain NewTitle GetValue(.^^^a,"title")\n\ if WWWIsMap(.)!="" Set Ingot .^^^WWWMain WWWFileTemp WWWDest(WWWCreateNodeFromKeyword(WWWFileBase,WWWDest(WWWNode(.^^^a)),WWWIsMap(.),"get"))\nelse Set Ingot .^^^WWWMain WWWFileTemp Convert(WWWDest(WWWNode(.^^^a)),"WWWFile") midaswww*WWWHyper*a*img.outline: true midaswww*WWWHyper*a*img.underlineHeight: 2 midaswww*WWWHyper*a.createCallback: WWW Anchor . WWWFileBase\nSet Value . sensitive GetValue(.,href)!=""\nIf WWWParam(.,"redirect")!="" WWW Redirect WWWFileRequest WWWDest(WWWNode(.)) midaswww*WWWHyper*a.tagList: * SGMLAnchorText: -a midaswww*WWWHyper*address.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*address.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*address.fontSlant: i midaswww*WWWHyper*address.spaceAfter: 10 midaswww*WWWHyper*address.spaceBefore: 10 midaswww*WWWHyper*b.fontWeight: bold midaswww*WWWHyper*base.createCallback: Set Ingot .^^^WWWHyper WWWFileBase WWWParse(WWWParam(.,"href"),WWWFileBase) midaswww*WWWHyper*blockquote.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*blockquote.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*blockquote.leftIndent: 20 midaswww*WWWHyper*blockquote.rightIndent: 20 midaswww*WWWHyper*blockquote.spaceAfter: 10 midaswww*WWWHyper*blockquote.spaceBefore: 10 midaswww*WWWHyper*br.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*cite.fontSlant: i midaswww*WWWHyper*code.fontFamily: courier midaswww*WWWHyper*code.fontSpacing: m midaswww*WWWHyper*dd.position: 0 midaswww*WWWHyper*default.FontRegistry: iso8859 midaswww*WWWHyper*default.color: Black midaswww*WWWHyper*default.exactTerminator: True midaswww*WWWHyper*default.fontSlant: r midaswww*WWWHyper*default.fontSpacing: p midaswww*WWWHyper*default.fontWeight: medium midaswww*WWWHyper*default.hideIllegalTags: True midaswww*WWWHyper*default.leftIndent: 20 midaswww*WWWHyper*default.supportsEntities: True midaswww*WWWHyper*default.tagList: SGMLMarkerText: %tryagain %!-- %img %p %br %isindex %base %nextid %kill %nocache SGMLFormText: form SGMLCompositeText: html body head header address dl dlc dl_compact h1 h2 h3 h4 h5 h6 dir menu pre b\ i tt u em strong code samp kbd var dfn cite blockquote xmp listing plaintext SGMLAnchorText: a SGMLListText: ul ol SGMLText: comment title SGMLRuleText: %hr SGMLTableText: table midaswww*WWWHyper*dfn.fontWeight: bold midaswww*WWWHyper*dir.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dir.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dir.li.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*dir.li.columnAlign: 125 midaswww*WWWHyper*dir.spaceAfter: 6 midaswww*WWWHyper*dir.spaceBefore: 6 midaswww*WWWHyper*dir.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*dl.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl.dd.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl.dt.position: -50 midaswww*WWWHyper*dl.leftIndent: 50 midaswww*WWWHyper*dl.spaceAfter: 6 midaswww*WWWHyper*dl.spaceBefore: 6 midaswww*WWWHyper*dl.tagList: * SGMLMarkerText: +%dt +%dd midaswww*WWWHyper*dl_compact.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl_compact.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl_compact.dt.position: -150 midaswww*WWWHyper*dl_compact.leftIndent: 150 midaswww*WWWHyper*dl_compact.spaceAfter: 6 midaswww*WWWHyper*dl_compact.spaceBefore: 6 midaswww*WWWHyper*dl_compact.tagList: * SGMLMarkerText: +%dt +%dd midaswww*WWWHyper*dlc.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dlc.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dlc.dt.position: -150 midaswww*WWWHyper*dlc.leftIndent: 150 midaswww*WWWHyper*dlc.spaceAfter: 6 midaswww*WWWHyper*dlc.spaceBefore: 6 midaswww*WWWHyper*dlc.tagList: * SGMLMarkerText: +%dt +%dd midaswww*WWWHyper*dt.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dt.spaceBefore: 6 midaswww*WWWHyper*em.fontSlant: i midaswww*WWWHyper*form.tagList: * SGMLInputText: +%input +textarea SGMLCompositeText: +select -form midaswww*WWWHyper*form.activateCallback: Set Ingot . temp WWWCreateNodeFromKeyword(WWWFileBase,WWWParse(GetValue(.,action),WWWFileBase),GetValue(.,result),GetValue(.,method))\nWWW Link temp\nSet Ingot .^^^XmMainWindow WWWFileRequest WWWDest(temp) midaswww*WWWHyper*h1.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h1.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h1.fontWeight: bold midaswww*WWWHyper*h1.leftIndent: -20 midaswww*WWWHyper*h1.spaceAfter: 20 midaswww*WWWHyper*h1.spaceBefore: 40 midaswww*WWWHyper*h1.underlineHeight: 3 midaswww*WWWHyper*h1.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h2.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h2.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h2.fontWeight: bold midaswww*WWWHyper*h2.leftIndent: -20 midaswww*WWWHyper*h2.spaceAfter: 10 midaswww*WWWHyper*h2.spaceBefore: 20 midaswww*WWWHyper*h2.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h3.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h3.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h3.fontWeight: bold midaswww*WWWHyper*h3.spaceAfter: 6 midaswww*WWWHyper*h3.spaceBefore: 12 midaswww*WWWHyper*h3.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h4.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h4.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h4.fontWeight: bold midaswww*WWWHyper*h4.spaceBefore: 8 midaswww*WWWHyper*h4.underline: 1 midaswww*WWWHyper*h4.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h5.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h5.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h5.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h6.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h6.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h6.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*head.tagList: * SGMLCompositeText: -body -head -header midaswww*WWWHyper*header.tagList: * SGMLCompositeText: -body -head -header midaswww*WWWHyper*hidden.color: red midaswww*WWWHyper*hidden.createCallback: Set Value . managed ShowUnrecognizedMarkup midaswww*WWWHyper*hidden.fontWeight: bold midaswww*WWWHyper*hidden.sensitiveColor: red midaswww*WWWHyper*hr.leftIndent: 30 midaswww*WWWHyper*hr.rightIndent: 30 midaswww*WWWHyper*hr.spaceAfter: 12 midaswww*WWWHyper*hr.spaceBefore: 12 midaswww*WWWHyper*i.fontSlant: i midaswww*WWWHyper*image.mapCallback: Set Ingot .^^^WWWMain IsGIF true midaswww*WWWHyper*img.createCallback: if WWWParam(.,"src")!="" WWW Include IncludeList . WWWParse(WWWParam(.,"src"),WWWFileBase) midaswww*WWWHyper*img.pixmap: bomb midaswww*WWWHyper*input.bombPixmap: bomb midaswww*WWWHyper*input.createCallback: if WWWParam(.,"src")!="" WWW Include IncludeList . WWWParse(WWWParam(.,"src"),WWWFileBase) midaswww*WWWHyper*isindex.mapCallback: Set Ingot .^^^XmMainWindow IsIndex True midaswww*WWWHyper*kbd.color: dark green midaswww*WWWHyper*kbd.fontFamily: courier midaswww*WWWHyper*kbd.fontSpacing: m midaswww*WWWHyper*kill.activateCallback: if QueryUser(.^^^XmMainWindow###WWWHotListDeleteConfirm) Destroy .^\nSet Ingot .^^^XmMainWindow HotList WWWSource(.^^^XmMainWindow...WWWHyper)\nStore App Resou\ rce .^^^midaswww hotList HotList midaswww*WWWHyper*kill.outline: true midaswww*WWWHyper*kill.pixmap: kill midaswww*WWWHyper*kill.sensitive: true midaswww*WWWHyper*kill.underlineHeight: 3 midaswww*WWWHyper*li.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*li.spaceBefore: 6 midaswww*WWWHyper*listing.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*listing.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*listing.defaultClass: SGMLPlainText midaswww*WWWHyper*listing.exactTerminator: True midaswww*WWWHyper*listing.fontFamily: courier midaswww*WWWHyper*listing.fontSize: 12 midaswww*WWWHyper*listing.fontSpacing: m midaswww*WWWHyper*listing.hideIllegalTags: False midaswww*WWWHyper*listing.supportsEntities: False midaswww*WWWHyper*listing.tagList: midaswww*WWWHyper*menu.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*menu.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*menu.spaceAfter: 4 midaswww*WWWHyper*menu.spaceBefore: 4 midaswww*WWWHyper*menu.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*nocache.unmapCallback: Destroy .^^^default midaswww*WWWHyper*ol.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*ol.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*ol.bulletMarker: li midaswww*WWWHyper*ol.bulletType: ordered midaswww*WWWHyper*ol.leftIndent: 20 midaswww*WWWHyper*ol.spaceAfter: 6 midaswww*WWWHyper*ol.spaceBefore: 6 midaswww*WWWHyper*select*option.type: option midaswww*WWWHyper*ol.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*p.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*p.spaceBefore: 6 midaswww*WWWHyper*plaintext.defaultClass: SGMLPlainText midaswww*WWWHyper*plaintext.exactTerminator: True midaswww*WWWHyper*plaintext.fontFamily: courier midaswww*WWWHyper*plaintext.fontSpacing: m midaswww*WWWHyper*plaintext.hideIllegalTags: False midaswww*WWWHyper*plaintext.supportsEntities: False midaswww*WWWHyper*plaintext.tagList: midaswww*WWWHyper*pre*h1.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h1.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h1.fontFamlily: courier midaswww*WWWHyper*pre*h2.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h2.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h2.fontFamlily: courier midaswww*WWWHyper*pre*h3.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h3.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h3.fontFamlily: courier midaswww*WWWHyper*pre*h4.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h4.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h4.fontFamlily: courier midaswww*WWWHyper*pre*h5.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h5.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h5.fontFamlily: courier midaswww*WWWHyper*pre*h6.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h6.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h6.fontFamlily: courier midaswww*WWWHyper*pre*p.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*SGMLInputText.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre.FontSpacing: m midaswww*WWWHyper*pre.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*pre.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*pre.defaultClass: SGMLPlainText midaswww*WWWHyper*pre.fontFamily: courier midaswww*WWWHyper*samp.fontFamily: courier midaswww*WWWHyper*samp.fontSpacing: m midaswww*WWWHyper*strong.fontWeight: bold midaswww*WWWHyper*table.tagList: * SGMLMarkerText: +tr +%th +%td SGMLCompositeText: +caption midaswww*WWWHyper*table.spaceBefore: 20 midaswww*WWWHyper*table.spaceAfter: 20 midaswww*WWWHyper*table.caption.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*table.caption.spaceAfter: 10 midaswww*WWWHyper*table.caption.fontWeight: bold midaswww*WWWHyper*table.caption.createCallback: Set Ingot .^ caption . midaswww*WWWHyper*title.mapCallback: Set Ingot .^^^WWWMain NewTitle HyperGetText() midaswww*WWWHyper*textarea.type: textarea midaswww*WWWHyper*select.tagList: SGMLInputText: %option midaswww*WWWHyper*select.defaultClass: SGMLInputText midaswww*WWWHyper*select*SGMLInputText.type: select midaswww*WWWHyper*tryagain.activateCallback: Invoke Callback .^^^WWWMain...Reread_Document activateCallback midaswww*WWWHyper*tryagain.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*tryagain.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*tryagain.outline: true midaswww*WWWHyper*tryagain.pixmap: tryagain midaswww*WWWHyper*tryagain.sensitive: true midaswww*WWWHyper*tryagain.spaceAfter: 20 midaswww*WWWHyper*tryagain.spaceBefore: 20 midaswww*WWWHyper*tryagain.underlineHeight: 2 midaswww*WWWHyper*tt.fontFamily: courier midaswww*WWWHyper*tt.fontSpacing: m midaswww*WWWHyper*u.underline: 1 midaswww*WWWHyper*ul.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*ul.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*ul.bulletMarker: li midaswww*WWWHyper*ul.bulletType: unordered midaswww*WWWHyper*ul.leftIndent: 20 midaswww*WWWHyper*ul.spaceAfter: 6 midaswww*WWWHyper*ul.spaceBefore: 6 midaswww*WWWHyper*ul.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*var.fontFamily: courier midaswww*WWWHyper*var.fontSpacing: m midaswww*WWWHyper*var.fontWeight: bold midaswww*WWWHyper*xmp.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*xmp.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*xmp.defaultClass: SGMLPlainText midaswww*WWWHyper*xmp.exactTerminator: True midaswww*WWWHyper*xmp.fontFamily: courier midaswww*WWWHyper*xmp.fontSpacing: m midaswww*WWWHyper*xmp.hideIllegalTags: False midaswww*WWWHyper*xmp.supportsEntities: False midaswww*WWWHyper*xmp.tagList: midaswww*WWWHyper.WWWFileRequest: Set Cursor .^^^midaswww watch\nSet Cursor . ""\nSet Ingot .^^^XmMainWindow IsIndex False\nSet Ingot .^^^XmMainWindow IsGIF False\nSet Ingot . WWWFileBase WWWFileRequest\n\ WWW Get . WWWFileRequest IncludeList NewTitle\nSet Ingot .^^^XmMainWindow WWWFile WWWRedirect(WWWFileRequest) midaswww*WWWHyper.WWWFile: If NewTitle=="" Set Ingot .^^^WWWMain NewTitle "Untitled ("++WWWParent(WWWFile)++")"\nWWW Set Title WWWFile NewTitle\nWWW Add History HistoryList NewTitle\nif IsIndex!=KeywordVisible Set Ingot .^^^XmMain\ Window KeywordVisible IsIndex\nif IsPS!=PSState Set Ingot .^^^XmMainWindow PSState IsPS\nif IsPS!=0 Set Ingot .^^^XmMainWindow DocFormat "Postscript"\nelse if IsGIF Set Ingot .^^^XmMainWindow DocForma\ t "GIF Image"\nelse Set Ingot .^^^XmMainWindow DocFormat "HTML"\nSet Ingot .^^^XmMainWindow WWWTitle NewTitle\nSet Ingot .^^^WWWMain NewTitle ""\nSet Cursor .^^^midaswww "" midaswww*WWWHyper.WWWFileExecuteWhenCreated: False midaswww*WWWHyper.WWWFileRequestExecuteWhenCreated: False midaswww*WWWHyper.borderWidth: 0 midaswww*WWWHyper.cacheSize: 10 midaswww*WWWHyper.midasIngots: WWWFileRequest WWWFileBase WWWFile midaswww*WWWKey.translations: #override \n Shift <Btn1Down> : SendMidas("Custom Popup WWW") midaswww*WWWMail.dialogTitle: WWW Mail midaswww*WWWMail.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/mail_window.html" midaswww*WWWMail.mapCallback: Set Sensitive ....WWWMailOk GetValue(....WWWMailToText,value)!="" midaswww*WWWMailDismiss.activateCallback: PopDown .^^ midaswww*WWWMailFormatMenu.midasCreateCallback: Custom Connect WWW "<format>" . midaswww*WWWMailHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWMailOk.activateCallback: Set Ingot . Tempfile WWWTempFile()\nIf Format=="Postscript" Set Ingot .^^^WWWMail FileSpec GetValue(IsPS,file)\nIf Format=="HTML" WWW Dump .^^^XmMainWindow...WWWHy\ per Tempfile\nIf Format=="HTML" Set Ingot .^^^WWWMail FileSpec Tempfile\nif uname()=="VMS" system "MAIL/NOEDIT %FileSpec %GetValue(.^^^WWWMail...WWWMailToText,value)"\nelse system "mail %GetValue(.^^^\ WWWMail...WWWMailToText,value) < %FileSpec"\nIf Format=="HTML" system "%delete %Tempfile "\nPopDown .^^ midaswww*WWWMailToText.valueChangedCallback: Invoke Callback .^^^WWWMail mapCallback midaswww*WWWMain.ConfirmPrint: midaswww*WWWMain.ConfirmPrintExecuteWhenCreated: True midaswww*WWWMain.FontSize: If FontSize=="Small" For All ....WWWHyper...default Set Value . fontSize 12\nElse If FontSize=="Medium" For All ....WWWHyper...default Set Value . fontSize 14\nElse If FontS\ ize=="Large" For All ....WWWHyper...default Set Value . fontSize 17\nIf FontSize=="Small" For All ....WWWHyper...h2 Set Value . fontSize 14\nElse If FontSize=="Medium" For All ....WWWHyper...h2 Set Va\ lue . fontSize 17\nElse If FontSize=="Large" For All ....WWWHyper...h2 Set Value . fontSize 20\nIf FontSize=="Small" For All ....WWWHyper...h1 Set Value . fontSize 17\nElse If FontSize=="Medium" For A\ ll ....WWWHyper...h1 Set Value . fontSize 20\nElse If FontSize=="Large" For All ....WWWHyper...h1 Set Value . fontSize 24\nIf FontSize=="Small" Update Named Resource . "midaswww*WWWHyper*default.fontS\ ize" 12\nElse If FontSize=="Medium" Update Named Resource . "midaswww*WWWHyper*default.fontSize" 14\nElse If FontSize=="Large" Update Named Resource . "midaswww*WWWHyper*default.fontSize" 17\nIf FontS\ ize=="Small" Update Named Resource . "midaswww*WWWHyper*h2.fontSize" 14\nElse If FontSize=="Medium" Update Named Resource . "midaswww*WWWHyper*h2.fontSize" 17\nElse If FontSize=="Large" Update Named R\ esource . "midaswww*WWWHyper*h2.fontSize" 20\nIf FontSize=="Small" Update Named Resource . "midaswww*WWWHyper*h1.fontSize" 17\nElse If FontSize=="Medium" Update Named Resource . "midaswww*WWWHyper*h1.\ fontSize" 20\nElse If FontSize=="Large" Update Named Resource . "midaswww*WWWHyper*h1.fontSize" 24\n midaswww*WWWMain.FontSizeExecuteWhenCreated: False midaswww*WWWMain.HeadingFont: For All ....WWWHyper...h1 Set Value . fontFamily HeadingFont \nFor All ....WWWHyper...h2 Set Value . fontFamily HeadingFont\nFor All ....WWWHyper...h3 Set Value . fontFam\ ily HeadingFont \nFor All ....WWWHyper...h4 Set Value . fontFamily HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h1.fontFamily" HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h2.fon\ tFamily" HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h3.fontFamily" HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h4.fontFamily" HeadingFont midaswww*WWWMain.HeadingFontExecuteWhenCreated: False midaswww*WWWMain.IsIndexExecuteWhenCreated: True midaswww*WWWMain.PrintCommandHTML: midaswww*WWWMain.PrintCommandHTMLExecuteWhenCreated: True midaswww*WWWMain.PrintCommandPS: midaswww*WWWMain.PrintCommandPSExecuteWhenCreated: True midaswww*WWWMain.ShowUnrecognizedMarkupExecuteWhenCreated: False midaswww*WWWMain.TextFont: For All ....WWWHyper...default Set Value . fontFamily TextFont\nUpdate Named Resource . "midaswww*WWWHyper*default.fontFamily" TextFont midaswww*WWWMain.TextFontExecuteWhenCreated: False midaswww*WWWMain.UnderlineHeadings: If UnderlineHeadings For All ....WWWHyper...h1 Set Value . underline 2\nElse For All ....WWWHyper...h1 Set Value . underline 0\nIf UnderlineHeadings For All ....WWW\ Hyper...h2 Set Value . underline 1\nElse For All ....WWWHyper...h2 Set Value . underline 0\nIf UnderlineHeadings For All ....WWWHyper...h3 Set Value . underline 1\nElse For All ....WWWHyper...h3 Set V\ alue . underline 0\nIf UnderlineHeadings Update Named Resource . "midaswww*WWWHyper*h1.underline" 2\nElse Update Named Resource . "midaswww*WWWHyper*h1.underline" 0\nIf UnderlineHeadings Update Named \ Resource . "midaswww*WWWHyper*h2.underline" 1\nElse Update Named Resource . "midaswww*WWWHyper*h2.underline" 0\nIf UnderlineHeadings Update Named Resource . "midaswww*WWWHyper*h3.underline" 1\nElse Up\ date Named Resource . "midaswww*WWWHyper*h3.underline" 0 midaswww*WWWMain.UnderlineHeadingsExecuteWhenCreated: False midaswww*WWWMain.WWWFileExecuteWhenCreated: False midaswww*WWWMain.WWWFileNew: Set Cursor .^^^midaswww watch\nSet Cursor ....WWWHyper ""\nUpdate Named Resource . midaswww.iconic false\nCreate Shell midaswww\nSet Value midaswww x GetValue(.^^^midaswww\ ,x)+40\nSet Value midaswww y GetValue(.^^^midaswww,y)+40\nFetch WWWMain:parent=midaswww\nPopup WWWMain\nSet value WWWMain...WWWHyper naturalWidth 0++(GetValue(WWWMain,width)-40)\nSet Ingot WWWMain PSS\ tate 0\nDispatch Queued Commands\nSet Ingot WWWMain WWWFileRequest WWWFileNew\nSet Cursor .^^^midaswww ""\nWWW Register midaswww False midaswww*WWWMain.WWWFileNewExecuteWhenCreated: False midaswww*WWWMain.WWWFileTemp: if Modifier("shift") Set Ingot . WWWFileNew WWWFileTemp\nelse Set Ingot . WWWFileRequest WWWFileTemp midaswww*WWWMain.WWWFileTempExecuteWhenCreated: False midaswww*WWWMain.WWWTitle: Set Value .^ title WWWTitle midaswww*WWWMain.WWWTitleExecuteWhenCreated: False midaswww*WWWMain.WWW_Gateway: WWW Set Gateway WWW_Gateway midaswww*WWWMain.WWW_GatewayExecuteWhenCreated: False midaswww*WWWMain.WWW_Home: midaswww*WWWMain.WWW_HomeExecuteWhenCreated: True midaswww*WWWMain.helpCallback: Set Ingot . WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/overview.html" midaswww*WWWMain.mainWindowMarginWidth: 2 midaswww*WWWMain.midasCreateCallback: Set Value .^ iconPixmap MidasWWWIcon\nCustom Create WWW .\nFetch WWWSearch .\nCreate Widget . SGMLHyper WWWHyper\nSet Ingot . IncludeList CreateList("IncludeList"\ )\nSet Ingot . HistoryList CreateList(HistoryList)\nSet Ingot . IsPS 0\nSet Ingot .^ Popup Convert(0,"Int")\nif argc>1 Set ingot . WWW_Home argv[1]\nelse if getenv(WWW_HOME)!="" Set ingot . WWW_Home g\ etenv(WWW_HOME)\nelse Set ingot . WWW_Home GetAppResource(.^,home)\nSet Confirm Exit . GetAppResource(.^,confirmExit)\nSet ingot . ShowTitle GetAppResource(.^,"ShowTitle")\nSet ingot . ShowURL GetAppR\ esource(.^,"ShowURL")\nSet ingot . WWW_Gateway GetAppResource(.^,gateway)\nSet ingot . HotList GetAppResource(.^,hotList)\nSet ingot . PrintCommandHTML GetAppResource(.^,printCommandHTML)\nSet ingot .\ PrintCommandPS GetAppResource(.^,printCommandPS)\nSet ingot . ConfirmPrint GetAppResource(.^,confirmPrint)\nSet ingot . ShowUnrecognizedMarkup GetAppResource(.^,"ShowUnrecognizedMarkup")\nSet Ingot .\ FontSize GetAppResource(.^,"fontSize")\nSet Ingot . HeadingFont GetAppResource(.^,"headingFont")\nSet Ingot . TextFont GetAppResource(.^,"textFont")\nSet Ingot . UnderlineHeadings GetAppResource(.^,"\ underlineHeadings")\nif uname()=="VMS" Set Ingot . delete "delete/noconfirm"\nelse Set Ingot . delete "rm -f"\nif uname()=="VMS" Set Ingot . copy "copy"\nelse Set Ingot . copy "cp" midaswww*WWWMain.midasIngots: WWWFile WWWFileNew WWWFileTemp WWWFileRequest IsIndex IsPS IsGIF KeywordVisible PSState WWWTitle WWW_Home WWW_Gateway DocFormat ShowUnrecognizedMarkup ShowTitle ShowURL PrintCommandPS F\ ontSize HeadingFont TextFont UnderlineHeadings midaswww*WWWMain.scrollingPolicy: XMAUTOMATIC midaswww*WWWMain.translations: #override \n:<ConfigureNotify> : SendMidas("set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)") midaswww*WWWMenu*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*WWWMenu*XmToggleButtonGadget.visibleWhenOff: True midaswww*WWWMenu.midasCreateCallback: Custom Connect WWW "<main_menu>" . midaswww*WWWOpenFTP.dialogTitle: Open FTP Document midaswww*WWWOpenFTP.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/open_ftp_doc.html" midaswww*WWWOpenFTPApply.activateCallback: Set Ingot .^^^WWWMain WWWFileRequest "ftp://"++GetValue(.^^...WWWOpenFTPHost,value)++":"++GetValue(.^^...WWWOpenFTPPort,value)++GetValue(.^^...WWWOpenFTPPath,value) midaswww*WWWOpenFTPDismiss.activateCallback: PopDown .^^ midaswww*WWWOpenFTPHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWOpenFTPHost.value: info.cern.ch midaswww*WWWOpenFTPOk.activateCallback: Popdown .^^\nInvoke Callback .^.WWWOpenFTPApply activateCallback midaswww*WWWOpenFTPPassword.value: %u@%h midaswww*WWWOpenFTPPath.value: / midaswww*WWWOpenFTPPort.value: 21 midaswww*WWWOpenFTPUserid.value: anonymous midaswww*WWWOpenGopher.dialogTitle: Open Gopher Document midaswww*WWWOpenGopher.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest Temp "http://www-midas.slac.stanford.edu:80/midasv21/open_gopher_doc.html" midaswww*WWWOpenGopherApply.activateCallback: Set Ingot .^^^WWWMain WWWFileRequest "gopher://"++GetValue(.^^...WWWOpenGopherHost,value)++":"++GetValue(.^^...WWWOpenGopherPort,value)++"/"++GetValue(.^^...WWWO\ penGopherType,value)++GetValue(.^^...WWWOpenGopherPath,value) midaswww*WWWOpenGopherDismiss.activateCallback: PopDown .^^ midaswww*WWWOpenGopherHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWOpenGopherHost.value: gopher.micro.umn.edu midaswww*WWWOpenGopherName.value: Home of Gopher midaswww*WWWOpenGopherOk.activateCallback: PopDown .^^\nInvoke Callback .^.WWWOpenGopherApply activateCallback midaswww*WWWOpenGopherPath.value: / midaswww*WWWOpenGopherPort.value: 70 midaswww*WWWOpenGopherType.value: 1 midaswww*WWWOpenHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWOpenLocal.applyCallback: midaswww*WWWOpenLocal.cancelCallback: Popdown . midaswww*WWWOpenLocal.dialogTitle: Open Local Document midaswww*WWWOpenLocal.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/open_local_doc.html" midaswww*WWWOpenLocal.okCallback: PopDown . \nSet Ingot .^^^WWWMain WWWFileRequest "local:"++GetValue(.,dirSpec) midaswww*WWWOptionShowProgress.valueChangedCallback: Set Sensitive .^.WWWOptionShowProgressTime GetValue(.,set)\nSet Sensitive .^.WWWShowProgressUpdateTime GetValue(.,set)\nSet Sensitive .^^^WWWParame\ ters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave False midaswww*WWWOptionShowProgressTime.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...W\ WWParamSave False\n midaswww*WWWPS.PSState: Set Sensitive . PSState!=0 midaswww*WWWPS.PSStateExecuteWhenCreated: False midaswww*WWWPS.midasIngots: PSState midaswww*WWWParamApply.activateCallback: If GetValue(.^^^...WWWParamCacheEnable,set) Set Value .^^^XmMainWindow...WWWHyper cacheSize GetValue(.^^^...WWWParamCacheSize,value)\nElse Set Value .^^^XmMain\ Window...WWWHyper cacheSize 0\nSet Ingot .^^^XmMainWindow WWW_Home GetValue(.^^^...WWWParamHome,value)\nSet Ingot .^^^XmMainWindow WWW_Gateway GetValue(.^^^...WWWParamGate,value)\nSet Confirm Exit . G\ etValue( .^^^...ConfirmExit,set)\nif GetValue(.^^^...WWWOptionShowProgress,set) WWW Set Waiting Time GetValue(.^^^...WWWOptionShowProgressTime,value)*100\nelse WWW Set Waiting Time -1\nif GetValue(.^^\ ^...EnableHTTP2,set) WWW Set HTTP Level 1.0\nelse WWW Set HTTP Level 0.9\nWWW Set Update Time GetValue(.^^^...WWWShowProgressUpdateTime,value)*100\nInvoke Callback .^^^^WWWParameters mapCallback midaswww*WWWParamApply.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Apply" midaswww*WWWParamCache.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Caching" midaswww*WWWParamCacheEnable.valueChangedCallback: Set Sensitive .^.WWWParamCacheSize GetValue(.,set)\nSet Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamR\ eset True\nSet Sensitive .^^^WWWParameters...WWWParamSave False midaswww*WWWParamCacheSize.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamS\ ave False midaswww*WWWParamDismiss.activateCallback: PopDown .^^^WWWParameters midaswww*WWWParamDismiss.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Dismiss" midaswww*WWWParamGate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Gateway" midaswww*WWWParamGate.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave F\ alse midaswww*WWWParamHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWParamHome.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Home" midaswww*WWWParamHome.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave F\ alse midaswww*WWWParamOk.activateCallback: If GetValue(.^.WWWParamApply,sensitive) Invoke Callback .^.WWWParamApply activateCallback\nPopDown .^^^WWWParameters midaswww*WWWParamOk.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Ok" midaswww*WWWParamReset.activateCallback: Invoke Callback .^^^WWWParameters mapCallback midaswww*WWWParamReset.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Reset" midaswww*WWWParamSave.activateCallback: Store App Resource .^^^midaswww confirmExit GetConfirmExit(.)\nStore App Resource .^^^midaswww home WWW_Home\nStore App Resource .^^^midaswww gateway WWW_Gatewa\ y\nStore App Resource .^^^midaswww waitingTimeOut WWWWaitingTime()\nStore App Resource .^^^midaswww updateTimeOut WWWUpdateTime()\nStore App Resource .^^^midaswww defaultHTTPProtocol WWWHTTPLevel()\nS\ tore Resource .^^^XmMainWindow...WWWHyper cacheSize midaswww*WWWParamSave.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Save" midaswww*WWWParameters.dialogTitle: WWW Options midaswww*WWWParameters.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html" midaswww*WWWParameters.mapCallback: Set Value ....WWWParamHome value WWW_Home\nSet Value ....WWWParamGate value WWW_Gateway\nSet Ingot . N GetValue(.^^^XmMainWindow...WWWHyper,cacheSize)\nif N>0 Set V\ alue ....WWWParamCacheSize value N\nelse Set Value ....WWWParamCacheSize value 2\nSet Value ....WWWParamCacheEnable set N>0\nSet Value ....ConfirmExit set GetConfirmExit(.)\nSet Value ....WWWOptionSho\ wProgress set WWWWaitingTime()>=0\nif WWWWaitingTime()>=0 Set Value ....WWWOptionShowProgressTime value WWWWaitingTime()/100\nSet Value ....WWWShowProgressUpdateTime value WWWUpdateTime()/100\nSet Val\ ue ....EnableHTTP2 set WWWHTTPLevel()=="1.0"\nSet Sensitive ....WWWOptionShowProgressTime WWWWaitingTime()>=0\nSet Sensitive ....WWWShowProgressUpdateTime WWWWaitingTime()>=0\nSet Sensitive ....WWWPar\ amCacheSize N>0\nSet Sensitive ....WWWParamApply False\nSet Sensitive ....WWWParamReset False\nSet Sensitive ....WWWParamSave True midaswww*WWWPrint.dialogTitle: WWW Print ... midaswww*WWWPrint.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/print_window.html" midaswww*WWWPrintCancel.activateCallback: PopDown .^^ midaswww*WWWPrintConfirm.dialogTitle: WWW Print Confirm midaswww*WWWPrintConfirm.midasCreateCallback: PopDown ..Cancel midaswww*WWWPrintFormatMenu.midasCreateCallback: Custom Connect WWW "<format>" . midaswww*WWWPrintHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWPrintOk.activateCallback: If Format=="Postscript" Set Ingot . Tempfile GetValue(IsPS,file)\nIf Format=="HTML" Set Ingot . Tempfile WWWTempFile()\nIf Format=="HTML" WWW Dump .^^^XmMainWindo\ w...WWWHyper Tempfile\nSet Ingot . PrintCommand GetValue(.^^^...WWWPrintCommandText,value)\nsystem PrintCommand++" "++Tempfile\nIf Format=="HTML" system "%delete %Tempfile"\nIf ConfirmPrint Set Value \ .^^^XmMainWindow###WWWPrintConfirm messageString "Document '"++WWWTitle++"' printed (Command: "++PrintCommand++")"\nIf ConfirmPrint Popup .^^^XmMainWindow...WWWPrintConfirm\nPopDown .^^ midaswww*WWWPrintOptions.dialogTitle: Print Options midaswww*WWWPrintOptions.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/print_options.html" midaswww*WWWPrintOptions.mapCallback: Set Value ....WWWPrintOptionsHTMLText value PrintCommandHTML\nSet Value ....WWWPrintOptionsPostscriptText value PrintCommandPS\nSet Value ....WWWPrintOptionsCon\ firm set ConfirmPrint\nSet Sensitive ....WWWPrintOptionsReset False\nSet Sensitive ....WWWPrintOptionsApply False midaswww*WWWPrintOptionsApply.activateCallback: Set Ingot .^^^XmMainWindow PrintCommandHTML GetValue(.^^^...WWWPrintOptionsHTMLText,value)\nSet Ingot .^^^XmMainWindow PrintCommandPS GetValue(.^^^...\ WWWPrintOptionsPostscriptText,value)\nSet Ingot .^^^XmMainWindow ConfirmPrint GetValue(.^^^...WWWPrintOptionsConfirm,set)\nStore App Resource .^^^midaswww "confirmPrint" ConfirmPrint\nStore App Resour\ ce .^^^midaswww "printCommandHTML" PrintCommandHTML\nStore App Resource .^^^midaswww "printCommandPS" PrintCommandPS\nSet Sensitive .^^^...WWWPrintOptionsApply False\nSet Sensitive .^^^...WWWPrintOpti\ onsReset False\n midaswww*WWWPrintOptionsCancel.activateCallback: PopDown .^^ midaswww*WWWPrintOptionsConfirm.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\nSet Sensitive .^^^...WWWPrintOptionsReset True midaswww*WWWPrintOptionsHTMLText.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\nSet Sensitive .^^^...WWWPrintOptionsReset True\n midaswww*WWWPrintOptionsHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWPrintOptionsOk.activateCallback: Invoke Callback .^.WWWPrintOptionsApply activateCallback\nInvoke Callback .^.WWWPrintOptionsCancel activateCallback midaswww*WWWPrintOptionsPostscriptText.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\nSet Sensitive .^^^...WWWPrintOptionsReset True\n midaswww*WWWPrintOptionsReset.activateCallback: Invoke Callback .^^^WWWPrintOptions mapCallback midaswww*WWWPrint_popup.Format: If Format=="Postscript" Set Value ....WWWPrintCommandText value PrintCommandPS\nIf Format=="HTML" Set Value ....WWWPrintCommandText value PrintCommandHTML midaswww*WWWPrint_popup.FormatExecuteWhenCreated: True midaswww*WWWPrint_popup.PrintCommandHTML: If Format=="HTML" Set Value ....WWWPrintCommandText value PrintCommandHTML midaswww*WWWPrint_popup.PrintCommandHTMLExecuteWhenCreated: False midaswww*WWWPrint_popup.PrintCommandPS: If Format=="Postscript" Set Value ....WWWPrintCommandText value PrintCommandPS midaswww*WWWPrint_popup.PrintCommandPSExecuteWhenCreated: False midaswww*WWWPrint_popup.midasIngots: Format PrintCommandHTML midaswww*WWWSave.DocFormat: midaswww*WWWSave.DocFormatExecuteWhenCreated: True midaswww*WWWSave.SaveAs: midaswww*WWWSave.SaveAsExecuteWhenCreated: True midaswww*WWWSave.activateCallback: If IsPs!=0 System "%copy %GetValue(IsPS,file) %GetValue(.^...XmTextField,value)"\nElse WWW Dump .^^^XmMainWindow...WWWHyper GetValue(.^...XmTextField,value)\nPopDown\ .^ midaswww*WWWSave.cancelCallback: Popdown . midaswww*WWWSave.dialogTitle: Save Document midaswww*WWWSave.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/save.html" midaswww*WWWSave.midasIngots: DocFormat SaveAs midaswww*WWWSave.okCallback: Set Ingot . SaveAs GetValue(.,dirSpec)\nIf Format=="Postscript" Set Ingot . PSFile GetValue(IsPS,file) \nIf Format=="HTML" WWW Dump .^^^XmMainWindow...WWWHyper SaveAs\nEls\ e If Format=="Postscript" System "%copy %PSFile %SaveAs"\nPopDown . midaswww*WWWSave.selectionLabelString: Save As midaswww*WWWSaveFileAs.cancelCallback: PopDown . midaswww*WWWSaveFileAs.dialogTitle: Save File As... midaswww*WWWSaveFileAs.mapCallback: Set Ingot . result ""\nSet Value ....WWWSaveFileAsText value WWWParent(WWWFile)\nSet Value . dirSpec GetValue(.,directory)++file midaswww*WWWSaveFileAs.okCallback: Set Ingot . result GetValue(.,"dirSpec")\nPopDown . midaswww*WWWSaveFileAs.selectionLabelString: Save As midaswww*WWWSaveFileAsText.editable: false midaswww*WWWSaveFormatMenu.midasCreateCallback: Custom Connect WWW "<format>" . midaswww*WWWSaveHelp.activateCallback: Invoke Callback .^ helpCallback midaswww*WWWSearch.DocFormat: If DocFormat!="HTML" PopDown . midaswww*WWWSearch.dialogTitle: Search Document midaswww*WWWSearch.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/search_window.html" midaswww*WWWSearch.midasIngots: DocFormat midaswww*WWWSearchCancel.activateCallback: Popdown .^^WWWSearch midaswww*WWWSearchFind.activateCallback: WWW Search .^^^...SGMLHyper GetValue(.^^WWWSearch...WWWSearchText,value) GetValue(.^^WWWSearch...WWWSearchCaseSensitive,set) GetValue(.^^WWWSearch...WWWSearchC\ ontinue,set) midaswww*WWWSearchHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWShowProgressUpdateTime.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...W\ WWParamSave False\n midaswww*WWWSource*default.color: Black midaswww*WWWSource*default.defaultClass: SGMLPlainText midaswww*WWWSource*default.fontFamily: courier midaswww*WWWSource*default.fontSpacing: m midaswww*WWWSource.BorderWidth: 0 midaswww*WWWSource.WWWFile: If ShowSource WWW Put . WWWSource(.^^^XmMainWindow...WWWHyper) midaswww*WWWSource.WWWFileExecuteWhenCreated: False midaswww*WWWSource.midasIngots: WWWFile midaswww*WWWTruncate.dialogTitle: Truncated... midaswww*WWWTruncate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/truncate.html" midaswww*WWWWDocInfoDocNameText.WWWFile: Set Value . value WWWParent(WWWFile) midaswww*WWWWDocInfoDocNameText.WWWFileExecuteWhenCreated: True midaswww*WWWWDocInfoDocNameText.midasIngots: WWWFile midaswww*WWWWaiting.dialogStyle: XmDIALOG_MODELESS midaswww*WWWWaiting.dialogTitle: Waiting... midaswww*WWWWaiting_popup.overrideRedirect: true midaswww*XmCascaseButtonGadget: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*XmDialogShell*Postscript.DocFormat: Set Sensitive . DocFormat=="Postscript"\nIf DocFormat=="Postscript" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\nIf DocFormat=="Postscript" Invoke\ Callback . activateCallback midaswww*XmMenuShell*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*XmRowColumn.Text.DocFormat: Set Sensitive . DocFormat=="Text"\nIf DocFormat=="Text" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\nIf DocFormat=="Text" Invoke Callback . activateCallba\ ck midaswww*XmRowColumn.Text.DocFormatExecuteWhenCreated: True midaswww*XmRowColumn.Text.midasIngots: DocFormat midaswww*XmScrollBar.foreground: #d3d3d3d3d3d3 XXmidaswww*XmText.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1 XXmidaswww*XmTextField.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1 midaswww*confirmPrint: False midaswww*gv_manager.container.mapCallback: Set Ingot .^^^XmMainWindow IsPS GetValueRaw(.,child) midaswww*gv_manager.container.unmapCallback: Set Ingot .^^^XmMainWindow IsPS 0 midaswww*gv_manager.managementPolicy: ManageOne midaswww*printCommandHTML: lpr midaswww*printCommandPS: lpr midaswww*pulldownmenu*fontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*rc2.orientation: XmHORIZONTAL midaswww.ShowTitle: true midaswww.ShowURL: true midaswww.ShowUnrecognizedMarkup: false midaswww.WWWMain*XmRowColumn.Help.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Help" midaswww.confirmExit: True midaswww.confirmPrint: true midaswww.defaultHTTPProtocol: 1.0 midaswww.filetype_$http_destination: html midaswww.filetype_Z_binary: true midaswww.filetype_Z_command: uncompress -c midaswww.filetype_Z_filter: true midaswww.filetype_au_destination: file midaswww.filetype_au_icon: music midaswww.filetype_basic_destination: file midaswww.filetype_basic_icon: music midaswww.filetype_binary_destination: xbm midaswww.filetype_eps_destination: ps midaswww.filetype_eps_icon: ps midaswww.filetype_exe_binary: true midaswww.filetype_exe_destination: file midaswww.filetype_exe_icon: floppy midaswww.filetype_gif_binary: true midaswww.filetype_gif_destination: gif midaswww.filetype_gif_icon: graphics midaswww.filetype_gz_binary: true midaswww.filetype_gz_command: gzip -dc midaswww.filetype_gz_filter: true midaswww.filetype_html_destination: html midaswww.filetype_html_icon: web midaswww.filetype_jpeg_binary: true midaswww.filetype_jpeg_command: djpeg -colors 256 -gif midaswww.filetype_jpeg_destination: gif midaswww.filetype_jpeg_icon: graphics midaswww.filetype_jpg_binary: true midaswww.filetype_jpg_command: djpeg -colors 256 -gif midaswww.filetype_jpg_destination: gif midaswww.filetype_jpg_icon: graphics midaswww.filetype_mpeg_binary: true midaswww.filetype_mpeg_command: mpeg_play -quiet midaswww.filetype_mpeg_destination: multimedia midaswww.filetype_mpeg_icon: movie_icon midaswww.filetype_mpeg_shellflag: false midaswww.filetype_mpeg_tempfile: true midaswww.filetype_mpg_binary: true midaswww.filetype_mpg_command: mpeg_play -quiet midaswww.filetype_mpg_destination: multimedia midaswww.filetype_mpg_icon: movie_icon midaswww.filetype_mpg_shellflag: false midaswww.filetype_mpg_tempfile: true midaswww.filetype_plain_destination: text midaswww.filetype_pnm_binary: true midaswww.filetype_pnm_command: ppmquant 256 | ppmtogif midaswww.filetype_pnm_destination: gif midaswww.filetype_pnm_icon: graphics midaswww.filetype_postscript_destination: ps midaswww.filetype_postscript_icon: ps midaswww.filetype_ppm_binary: true midaswww.filetype_ppm_command: ppmquant 256 | ppmtogif midaswww.filetype_ppm_destination: gif midaswww.filetype_ppm_icon: graphics midaswww.filetype_ps_destination: ps midaswww.filetype_ps_icon: ps midaswww.filetype_shar_binary: true midaswww.filetype_shar_destination: file midaswww.filetype_shar_icon: floppy midaswww.filetype_tar_binary: true midaswww.filetype_tar_destination: file midaswww.filetype_tar_icon: floppy midaswww.filetype_tiff_binary: true midaswww.filetype_tiff_command: tifftopnm | ppmtogif midaswww.filetype_tiff_destination: gif midaswww.filetype_tiff_icon: graphics midaswww.filetype_tiff_tempfile: true midaswww.filetype_txt_destination: text midaswww.filetype_x-compress_binary: true midaswww.filetype_x-compress_command: uncompress -c midaswww.filetype_x-compress_filter: true midaswww.filetype_x-tiff_binary: true midaswww.filetype_x-tiff_command: tifftopnm | ppmtogif midaswww.filetype_x-tiff_destination: gif midaswww.filetype_x-tiff_icon: graphics midaswww.filetype_x-tiff_tempfile: true midaswww.filetype_x-xbitmap_destination: xbm midaswww.filetype_x-xbitmap_icon: floppy midaswww.filetype_x-zip_binary: true midaswww.filetype_x-zip_command: gzip -dc midaswww.filetype_x-zip_filter: true midaswww.filetype_x-zip_icon: floppy midaswww.filetype_xbm_destination: xbm midaswww.filetype_xbm_icon: floppy midaswww.filetype_z_binary: true midaswww.filetype_z_command: gzip -dc midaswww.filetype_z_filter: true midaswww.filetypes: ps eps Z z gz gif jpeg jpg html ppm pnm tiff exe tar $http xbm au txt mpeg mpg basic plain x-xbitmap x-tiff postscript binary shar x-compress x-zip midaswww.font: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1 midaswww.fontSize: Large midaswww.gateway: http://htmlgate.slac.stanford.edu:2784 midaswww.geometry: 700x800 midaswww.headingFont: helvetica midaswww.headingsFont: Helvetica midaswww.home: http://slacvm.slac.stanford.edu:80/FIND/slac.html midaswww.hotList: <title>HotList</title><nocache><h1><img pixmap=flame>HotList</h1>\nClick on the <img pixmap=kill> icon to remove an item from the list, or\n<a href=http://www-midas.slac.stanford.edu:80\ /midasv21/hotlist.html>here</a> for more help.\n<h6><kill><a href=news:comp.infosystems.www>Comp.Infosystems.WWW</a></h6><h6><kill><a href = http://info.cern.ch/hypertext/WWW/TheProject.html > The Wor\ ld Wide Web project </a></h6>\n<h6><kill><a href = http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html > What's New With NCSA Mosaic </a></h6><h6><kill><a href = http://sunsite.unc.edu/ex\ po/ticket_office.html > EXPO Ticket Office </a></h6><h6><kill><a href = http://aka.dcrt.nih.gov > Rob's Multimedia Lab </a></h6><h6><kill><a href = http://www.ncsa.uiuc.edu/demoweb/url-primer.html > A\ Beginner's Guide to URLs </a></h6><h6><kill><a href = http://www.ncsa.uiuc.edu/demoweb/html-primer.html > A Beginner's Guide to HTML </a></h6><h6><kill><a href = http://www-midas.slac.stanford.edu/tonyw\ ww/talk/talk.html > World-Wide Web: An Illustrated Seminar </a></h6><h6><kill><a href = http://pulua.hcc.hawaii.edu/guide/www.guide.html > Entering the World-Wide Web: A Guide to Cyberspace </a></h6> midaswww.mimeencode: x-compress x-zip midaswww.mimetypes: text/plain text/html image/gif image/jpeg image/x-xbitmap image/x-tiff video/mpeg audio/basic application/postscript archive/tar archive/shar application/binary midaswww.printCommandHTML: lpr midaswww.printCommandPS: lpr midaswww.sensitiveColor: blue midaswww.sensitiveFontWeight: bold midaswww.startup: Open Uid midaswww.uid .\nPopup WWWMain\nWWW Init .\nSet value ....WWWHyper naturalWidth 0++(GetValue(..WWWMain,width)-40)\nSet Ingot ..WWWMain PSState 0\nDispatch Queued Commands\nIn\ voke Callback ....Home_Page activateCallback\nSet Ingot Midas_Main NWin 1\nWWW Register . False midaswww.textFont: new century schoolbook midaswww.translations: #override \n <PropertyNotify> URL : SendMidas("Popup ..XmMainWindow ; Set Ingot ..XmMainWindow WWWFileTemp GetProperty(.,URL)") midaswww.underlineHeadings: true midaswww.updateTimeOut: 200 midaswww.version: 2.1 midaswww.visitedColor: #59597171EAEA midaswww.visitedFontWeight: medium midaswww.waitingTimeOut: 2000 �������������������������������������������������������������������������������midaswww-2.1/descrip.mms����������������������������������������������������������������������������100666 � 21345 � 173 � 3732 5554674771 13604� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile to construct the midaswww library # Tony Johnson, Oct, 1992. Some changes for UCX by B.S. Nilsson, Dec. 1992. # For UCX: MMS/MACRO=(UCX=1) .First @ delete == "delete/noconf" .IFDEF UCX CFLAGSX = /DEFINE=UCX OPTION_FILE = MIDASWWW_UCX.OPT .ELSE @ define rpc multinet_root:[multinet.include.rpc] @ define netinet multinet_root:[multinet.include.netinet] @ define sys multinet_root:[multinet.include.sys] CFLAGSX = /include=multinet_root:[multinet.include] OPTION_FILE = MIDASWWW_MULTINET.OPT .ENDIF CFLAGS = $(CFLAGSX)/DEFINE=(VERSION="""2.0""") NAME=midaswww LINK_OPTIONS = /NoTrace LIBRARY = $(NAME).olb LIBMEMS = $(LIBRARY)(- SGMLAnchorText.obj , - SGMLCompositeText.obj , - SGMLFormattedText.obj , - SGMLHyper.obj , - SGMLContainerText.obj , - SGMLListText.obj , - SGMLMarkerText.obj , - SGMLRuleText.obj , - SGMLPlainText.obj , - SGMLText.obj , - Tree.obj , - Ghostview.obj , - GhostviewPlus.obj , - ps.obj , - custom.obj , - midas.obj , - midasclass.obj , - midasconvert.obj , - midasdeclare.obj , - midasevaluate.obj , - midasingot.obj , - midaslist.obj , - midasloadimage.obj , - midaswww.obj , - midasutil.obj , - mwhttp.obj , - mwhttp2.obj , - mwgopher.obj , - mwftp.obj , - xgifload.obj , - strcasecmp.obj ) # Targets all : exe midas.uid midaswww.uid ! done midas.uid : midas.uil UIL/MOTIF $< midaswww.uid : midaswww.uil UIL/MOTIF $< $(NAME).exe : mwmain.obj $(NAME).olb link$(LINK_OPTIONS)/exe=$(NAME) mwmain,$(OPTION_FILE)/opt purge $(NAME).exe exe : @ $(MMS) $(MMSQUALIFIERS)/skip $(NAME).exe test : all midaswww := $sys$disk:[]midaswww.exe midaswww clean : delete/noconfirm *.obj;* help : @echo ' lib: makes $(NAME).olb' @echo ' debug: makes $(NAME)_debug.olb' @echo ' clean: removes all .obj files' @echo ' install: installs libraries and include files' $(LIBRARY) : $(LIBMEMS) ��������������������������������������midaswww-2.1/make.com�������������������������������������������������������������������������������100666 � 21345 � 173 � 4260 5554674771 13047� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$ ! $ ! DCL file to build MidasWWW on an ALPHA or VAX using Multinet or UCX $ ! $ ! Tony Johnson 17 November 1993 $ ! $ set noverify $ $ if f$trnlnm("MULTINET").nes."" $ Then $ TCPIP = "MULTINET" $ Else $ TCPIP = "UCX" $ Endif $ $ if f$getsyi("HW_MODEL").ge.1024 $ Then $ System = "an ALPHA" $ Else $ System = "a VAX" $ Endif $ $ Write sys$output "Building MidasWWW for ''System' using ''TCPIP'" $ $ delete == "delete/noconf" $ if TCPIP.eqs."UCX" $ Then $ Extra = "UCX," $ OPTION_FILE = "MIDASWWW_UCX.OPT" $ if system.eqs."an ALPHA" Then CFLAGSX = "''CFLAGSX'/Stand=VAXC" $ Else $ extra ="" $ define rpc multinet_root:[multinet.include.rpc] $ define netinet multinet_root:[multinet.include.netinet] $ define sys multinet_root:[multinet.include.sys] $ CFLAGSX = "/include=multinet_root:[multinet.include]" $ OPTION_FILE = "MIDASWWW_MULTINET.OPT" $ if system.eqs."an ALPHA" Then CFLAGSX = "''CFLAGSX'/Stand=VAXC/PREFIX=ANSI" $ EndIf $ $ cc := cc'CFLAGSX'/DEFINE=('extra'VERSION="""""""2.1""""""") $ LINK_OPTIONS = "/NoTrace" $! $! For ill understood reasons this routine fails if compiled with OPT $! We have traced this as far as the call to XtGetValues in check_tag where $! the Frame Pointer does not get correctly restored after the call. $! $ cc SGMLHyper/noopt $ $ cc SGMLAnchorText $ cc SGMLCompositeText $ cc SGMLFormattedText $ cc SGMLContainerText $ cc SGMLListText $ cc SGMLMarkerText $ cc SGMLRuleText $ cc SGMLPlainText $ cc SGMLText $ cc SGMLFormText $ cc SGMLInputText $ cc SGMLTableText $ cc SGMLCaptionText $ cc Tree $ cc Ghostview $ cc GhostviewPlus $ cc ps $ cc custom $ cc midas $ cc midasclass $ cc midasconvert $ cc midasdeclare $ cc midasevaluate $ cc midasingot $ cc midaslist $ cc midasloadimage $ cc midaswww $ cc midasutil $ cc mwhttp $ cc mwhttp2 $ cc mwgopher $ cc mwftp $ cc mwfont16 $ cc xgifload $ cc strcasecmp $ $ lib/create midaswww *.obj $ cc mwmain $ link'LINK_OPTIONS'/exe=midaswww mwmain,'OPTION_FILE'/opt $ purge midaswww.exe $ delete *.obj;* $ $ uil/motif midas $ uil/motif midaswww $ $ Write sys$output "Done" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/README_VMS�����������������������������������������������������������������������������100666 � 21345 � 173 � 14604 5554674771 13062� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Obtaining Midas WWW OBTAINING MIDAS WWW There are two ways to go about obtaining Midas WWW: Fetch one of the pre-compiled binaries Build it yourself from the source code We recommend you initially try the pre-compiled binaries, and only resort to building your own version if: The pre-compiled binary does not exist for your machine, or will not run You are curious to see how it works You want to change something If you have already obtained Midas WWW but are having problems, try the troubleshooting guide. Midas WWW pre-compiled binaries for VMS MIDAS WWW PRE-COMPILED BINARIES FOR VMS Currently pre-compiled binaries for VMS are only available for use with MULTINET TCP/IP software. We hope to make UCX binaries available some time in the future. The binary files are available as a compressed backup file, containing both VAX and ALPHA images, and a few auxilliary files needed to run the image. To run the pre-compiled binaries you need to have MULTINET software and DecWindows Motif installed. Obtaining and running the VMS binaries The binaries are available using FTP from freehep.scri.fsu.eduin directory freehep/networking_email_news/midaswww/binaries/vms. The following files are available: midaswww_multinet.bck_Z Compiled under VMS 5.5 and OPEN-VMS 1.5 with Multinet To uncompress the file you must use the LZDCMP program (available in the same directory, as lzdcmp.exe). To obtain and run the pre-compiled binary files follow these instructions: ftp freehep.scri.fsu.edu login as user anonymous cd freehep/networking_email_news/midaswww/binaries/vms binary get midaswww_multinet.bck_Z get lzdcmp.exe quit lzdcmp :== "sys$disk:[]lzdcmp" lzdcmp midaswww_multinet.bck_Z midaswww.bck backup/log midaswww.bck/save [] The following files should now be created: midaswww_alpha.exe The ALPHA executable midaswww_vax.exe The VAX executable midas.uid,midaswww.uid These are Motif User Interface Definition files. They are required in order to run the executable. midaswww.vue$dat,vue$midaswww.com Files that simplify running Midas WWW from a Fileview or Session Manager menu. install.com A simple .com file for installing the above files in system directories. To try out Midas WWW just type run midaswww_vax or run midaswww_alpha as appropriate. The MidasWWW window should now appear. If it doesn't then see thetroubleshooting guide. Installing Midas WWW To install MidasWWW in the appropriate system directories, issue the command: @install You will be asked which directory you wish to install the .exe file in, just hit return if you are happy to install in the default SYS$SYSTEM directory. When the .com file finished it will ask you to add a line to your SYLOGIN.COM file to make a symbol available to users. Once this has been done then Midas WWW can be invoked by issuing the command: midaswww or by selecting the World Wide Web entry from the Applicationsmenu in the Session Manager. MidasWWW VAX Installation Instructions VAX INSTALLATION INSTRUCTIONS These instructions are for the VAX. See README file for UNIX installation instructions. Requirements To install this version of MidasWWW you will need a VAX running VMS 5.4 or greater, with DecWindows/Motif and C installed. Currently MidasWWW has only been run with Multinet TCP/IP software. It should be possible to run it with other versions of TCP/IP for the VAX without too much trouble, if you succeed please feed the changes back to us. Obtaining MidasWWW You can obtain MidasWWW as a compressed backup file via anonymous FTP from FreeHEP.Scri.Fsu.Edu, in directory /freehep/networking_email_news/midaswww NoteYou should use the compress BACKUP file for VMS installation, not the TAR file, as the BACKUP file contains some extra VMS only files. You will need to use the lzdcmputility to decompress the backup file, this is also available as an exe file from FreeHEP.Scri.Fsu.Edu in the directory /freehep/networking_email_news/midaswww/binaries/vms. You can fetch, decompress and unpack the MidasWWW backup file as follows: ftp freehep.scri.fsu.edu login as user anonymous cd /freehep/networking_email_news/midaswww binary get midaswww-2.1.bck_Z midaswww.bck_Z get binaries/vms/lzdcmp.exe quit lzdmp :== "$sys$disk:lzdcmp" lzdcmp midaswww.bck_Z midaswww.bck backup/log midaswww.bck/save [] Building Once you have uncompressed and unpacked the file, you can build the executable by issuing the command: @make The .COM file will build MidasWWW on either a VAX or an ALPHA. Note that at present it has only been tested using Multinet software. Testing To try out MidasWWW first make sure your X windows DISPLAY is set up correctly (use the SET DISPLAY command to set it). Then issue the command: run midaswww The MidasWWW window should now appear. If it doesn't then see thetroubleshooting guide. Installing To install MidasWWW in the appropriate system directories, issue the command: @install You will be asked which directory you wish to install the .exe file in, just hit return if you are happy to install in the default SYS$SYSTEM directory. When the .com file finished it will ask you to add a line to your SYLOGIN.COM file to make a symbol available to users. Once this has been done then Midas WWW can be invoked by issuing the command: midaswww or by selecting the World Wide Web entry from the Applicationsmenu in the Session Manager. ����������������������������������������������������������������������������������������������������������������������������midaswww-2.1/README���������������������������������������������������������������������������������100666 � 21345 � 173 � 14365 5554674772 12342� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Obtaining Midas WWW OBTAINING MIDAS WWW There are two ways to go about obtaining Midas WWW: Fetch one of the pre-compiled binaries Build it yourself from the source code We recommend you initially try the pre-compiled binaries, and only resort to building your own version if: The pre-compiled binary does not exist for your machine, or will not run You are curious to see how it works You want to change something If you have already obtained Midas WWW but are having problems, try the troubleshooting guide. Midas WWW pre-compiled Images MIDAS WWW PRE-COMPILED IMAGES A number of precompiled images are available for popular machines. These are available from freehep.scri.fsu.eduin directory freehep/networking_email_news/midaswww/binaries. The following files are available: midaswww-sgi.exe.Z Compiled under SGI IRIX 4.0.1 midaswww-ibm.exe.Z Compiled under IBM AIX 3.2 midaswww-hpux.exe.Z Compiled under HP-UX 9.01 midaswww-sun4.exe.Z Compiled under SunOS 4.1.2, also runs under Solaris 5.2 midaswww-alpha-osf.exe.Z Compiled under OSF V1.3 vms/midaswww_multinet.bck_Z Compiled under VMS 5.5 and OPEN-VMS 1.5 Note: Most of these binaries are linked against shareable versions of the Motif and X libraries. This keeps the images small and ensures that they run efficiently, however it also means that you must have the appropriate Motif and X libraries already installed on your machine. If you cannot get these pre-compiled binaries to work, but you do have Motif and X libraries available, then you should be able to build your own executable from the source code. Obtaining and running pre-compiled binaries These instructions are for unix, see the VMS instructions for details on installing VMS binaries. To obtain and run a pre-compiled binary follow these instructions (substituting the appropriate machine type for XXX): ftp freehep.scri.fsu.edu login as user anonymous cd freehep/networking_email_news/midaswww/binaries binary get midaswww-XXX.exe.Z <---- replace XXX with apppropriate machine bye uncompress midaswww-XXX.exe.Z <---- replace XXX with apppropriate machine mv midaswww-XXX.exe midaswww <---- replace XXX with apppropriate machine chmod +x midaswww ./midaswww The MidasWWW window should now appear. If it doesn't then see thetroubleshooting guide. Installing pre-compiled binaries To install the MidasWWW executable, just move the midaswww file to an appropriate system directory, such as /usr/local/bin/midaswww. Building Midas WWW from Source Code BUILDING MIDAS WWW FROM SOURCE CODE These instructions are for UNIX. See the README_VMS file for VMS installation instructions. Requirements To build this version of MidasWWW from source you will need a Unix system with X windows (X11R4 or X11R5) and Motif (version 1.1.0 or greater). You must have all of the following libraries available on your system. Xm The Motif Widget set library Mrm The Motif resouce manager library Xt The X-toolkit library X The X library Xmu X miscellaneous utility library. The current version of MidasWWW has been tested on the following systems: SGI - Indigo (4.0.5) RS6000 (AIX 3.2.2) HP-UX (9.0.1) SunOS (4.1.2) (with Motif libraries built from source). MidasWWW should be portable to other unix systems. Please let us know if you port it to other systems, and tell us about any changes you had to make. Obtaining MidasWWW You can obtain MidasWWW as a compressed TAR file via anonymous FTP from freehep.scri.fsu.edu, in directory /freehep/networking_email_news/midaswww. The most recent tar file is midaswww-2.1.tar.Z. After obtaining the TAR file, uncompress it and detar it using the commands: uncompress midaswww-2.1.tar.Z tar -xvf midaswww-2.1.tar cd midaswww-2.1 Building MidasWWW There are two ways to go about creating a Makefile for MidasWWW Use one of the standard makefiles supplied with the MidasWWW distribution. Makefile.hp Makefile for HP-UX Makefile.aix32 Makefile for IBM AIX-3.2 Makefile.sgi Makefile for SGI Use the standard X-windows utility xmkmf to generate a Makefile. The xmkmf facility is in principle better since it is supposed to take into account any machine dependencies, and to correctly link against the correct libraries on your machine. However we have found that xmkmf is often not configured correctly for building Motif programs, so in practice we recommend using the supplied Makefile if one is available for your machine, otherwise try xmkmf, but you will quite possibly have to tweek the resulting Makefile to successfully build Midas WWW. USING SUPPPLIED MAKEFILE To build MidasWWW use the following command (where MMMM is the makefile you chose from the list above: make -f MMMM USING XMKMF Build MidasWWW as follows: xmkmf make Testing To try out MidasWWW first make sure your DISPLAY envirnonment variable is set up correctly. Then issue the command: ./midaswww The MidasWWW window should now appear. If it doesn't then see thetroubleshooting guide. Installation To install the MidasWWW executable, just move the midaswww file to an appropriate system directory, such as /usr/local/bin/midaswww. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midas.uil.cln��������������������������������������������������������������������������100666 � 21345 � 173 � 260376 6003412110 14030� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������module vuitDummy names = case_sensitive version = " 2.1" value !`T^ Midas_Custom_Button_Width: 82; Midas_Cusom_Button_Offset: -35; Midas_Custom_Large_Font: font_table(font('-*-HELVETICA-BOLD-R-*--*-180-*-*-*-*-ISO8859-1')); HandyPakIcon: exported icon(color_table = color_table(background color = ' ', foreground color = '*'), ' ', ' ***************************************', ' * * **', ' * ** * *', ' * * *** * ** * * *', ' * ** *** * ** ** * * *', ' * * ** * ** * *', ' * * * * * * * *', ' * * * * *', ' * **** * ** * **', ' * * * ** * *', ' * * ** * *', ' * ** * *** * *', ' * * * * * * * * * *', ' * * *** * ** * *', ' * * * ** * **', ' * * * * *', ' * * * * *', ' * * * ** * *', ' * * * *', ' * * * * *', ' * * * ** * * * ***', ' * * * * * *', ' * * ** *** * * *** *', ' * * * ** * *** * * *', ' * **** ** * * *** *', ' * * * * *** * *', ' * * * * * * **', ' * * ** *** * * *', ' * *** * * * * *', ' * * * *** *', ' * * * * * *', ' * * *** * *', ' * ** * * **', ' * * *** *', ' * * * *', ' * * * *', ' * * * * *', ' ** * * * * * * * * *', ' ***************************************'); MidasIcon: exported icon(color_table = color_table(background color = ' ', foreground color = '*'), '** ** * **** ', ' *** * * * * ** * ', ' **** * * * * ** * ', ' * ** * * * * ** ** ', ' * ** ** ** * ', ' * * ', ' * ** ', ' * * ', ' * * ', ' * **** ', ' ********************** * ', ' * ****** ', ' * ****** ', ' * *** **** ****** ', ' * * ** * * ****** ', ' * *** * *** ****** ', ' ** * * * * * * ****** ', ' ** *** * *** ****** ', ' * * * ****** ', ' *** * ****** ', ' * * * ****** ', ' *** ** ** * ****** ', ' *** *** *** ****** ', ' ** ** ****** ', ' *** ***** * ', ' *** ** ** ******* ', ' *** ********* ******** ', ' *** ***** * ******* ', ' *** * ********* * ', ' *** * *** ** * * * ** ', ' ****** *** ***** ***** ', ' * ***** *** *********** ', ' * ** **** * * * ***** *** ', ' ** ** ******** **** ***** ', ' ****** *** ******** **** ', ' **** * ** ***** **', '*** ** ** * *** ', ' **** * *** ', ' ** ', ' '); list_offset: 7; Buitton_Bottom_Offset: 4; LabelTextOffset: -5; MidasVersion: exported "2.1"; list Midas_Custom_Label: arguments { XmNtopOffset = 10; XmNleftOffset = 9; XmNfontList = Midas_Custom_Large_Font; }; procedure midas_command_proc(); CustomCreate(integer); CustomDelVerb(); CustomAddVerb(); CustomSelVerb(); CustomAddMenu(); CustomDelMenu(); CustomSelMenu(); CustomVMAddSeparator(); CustomUpdateSensitivity(); CustomVMAddMenu(); CustomVMAddVerb(); CustomVMDel(); CustomVMUp(); CustomVMDown(); CustomSelConfMenu(); CustomVMSel(); CustomSelConfVerb(); CustomVMSelConf(); CustomApply(); CustomOk(); CustomReset(); CustomCancel(); CustomExit(integer); SendMidas(string); object Midas_Main: XmMainWindow { arguments { XmNworkWindow = XmCommand Midas_Command; }; controls { XmCommand Midas_Command; XmMenuBar { callbacks { MrmNcreateCallback = procedures { SendMidas( "Custom Connect CUSTOM \"<main>\" ."); }; }; }; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Custom Create CUSTOM ."); }; }; }; Midas_Command: XmCommand { arguments { }; callbacks { XmNcommandEnteredCallback = procedures { midas_command_proc(); }; MrmNcreateCallback = procedures { SendMidas( "Midas Register Name MidasCommand ."); }; }; }; Midas_Custom: XmFormDialog { arguments { XmNx = 9; XmNy = 499; XmNwidth = 612; XmNheight = 496; XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_NONE; XmNfractionBase = 90; XmNdialogTitle = compound_string("Midas Customize Verbs and Menus"); }; controls { XmForm { arguments { XmNx = 251; XmNy = 7; XmNwidth = 25; XmNheight = 355; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = 0; XmNtopOffset = 0; XmNleftPosition = 60; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmForm Midas_Custom_Buttons; }; controls { XmLabelGadget Midas_Custom_Verb_Menu_Label; XmPushButtonGadget Midas_Custom_Add_Verb; XmPushButtonGadget { arguments { XmNx = 91; XmNy = 252; XmNlabelString = compound_string("Add Menu"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 75; XmNtopOffset = 0; XmNleftOffset = Midas_Cusom_Button_Offset; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Midas_Custom_Add_Verb; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(5); }; XmNactivateCallback = procedures { CustomVMAddMenu(); }; }; }; XmPushButtonGadget Midas_Custom_Separator; XmPushButtonGadget { arguments { XmNx = 94; XmNy = 345; XmNlabelString = compound_string("Remove"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 75; XmNtopOffset = 0; XmNleftOffset = Midas_Cusom_Button_Offset; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Midas_Custom_Separator; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(7); }; XmNactivateCallback = procedures { CustomVMDel(); }; }; }; XmLabelGadget ActiveMenuLabel; XmScrolledList { arguments { XmNwidth = 181; XmNheight = 160; XmNlistSizePolicy = XmCONSTANT; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = list_offset; XmNtopOffset = 0; XmNrightOffset = list_offset; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 1; XmNbottomAttachment = XmATTACH_WIDGET; XmNtopWidget = XmLabelGadget Midas_Custom_Verb_Menu_Label; XmNbottomWidget = XmLabelGadget ActiveMenuLabel; XmNvisibleItemCount = 999; XmNx = 20; XmNy = 5; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(8); }; XmNbrowseSelectionCallback = procedures { CustomVMSel(); }; XmNdefaultActionCallback = procedures { CustomVMSelConf(); }; }; }; XmPushButtonGadget Midas_Custom_Up; XmPushButtonGadget { arguments { XmNx = 134; XmNy = 252; XmNlabelString = compound_string("Down"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 75; XmNtopOffset = 0; XmNleftOffset = Midas_Cusom_Button_Offset; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Midas_Custom_Up; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(3); }; XmNactivateCallback = procedures { CustomVMDown(); }; }; }; }; }; XmForm Midas_Custom_Command; XmForm Midas_Custom_Buttons; XmForm Verb_Form; XmForm { arguments { XmNx = 191; XmNy = 91; XmNwidth = 25; XmNheight = 25; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = 0; XmNtopOffset = 0; XmNleftPosition = 30; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 60; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmForm Verb_Form; XmNdefaultButton = XmPushButtonGadget Menu_Ok_Button; }; controls { XmLabelGadget Menu_Label; XmText Menu_Text; XmScrolledList { arguments { XmNwidth = 181; XmNheight = 160; XmNlistSizePolicy = XmCONSTANT; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = list_offset; XmNtopOffset = 0; XmNrightOffset = list_offset; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = list_offset; XmNbottomAttachment = XmATTACH_WIDGET; XmNtopWidget = XmLabelGadget Menu_Label; XmNbottomWidget = XmText Menu_Text; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(17); }; XmNdefaultActionCallback = procedures { CustomSelConfMenu(); }; XmNbrowseSelectionCallback = procedures { CustomSelMenu(); }; }; }; XmPushButtonGadget Menu_Ok_Button; XmPushButtonGadget { arguments { XmNx = 74; XmNy = 0; XmNlabelString = compound_string("Delete"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNleftPosition = 73; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Menu_Ok_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(20); }; XmNactivateCallback = procedures { CustomDelMenu(); }; }; }; }; }; }; callbacks { XmNhelpCallback = procedures { SendMidas( "Help . \"http://slacvx.slac.stanford.edu/MidasHelp/v09/custom.html\""); }; }; }; Midas_Custom_Buttons: XmForm { arguments { XmNx = 247; XmNy = 178; XmNwidth = 27; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = 0; XmNtopOffset = 0; XmNleftPosition = 60; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_FORM; }; controls { XmPushButtonGadget Midas_Custom_OK_Button; XmPushButtonGadget Midas_Custom_Apply_Button; XmPushButtonGadget { arguments { XmNx = 82; XmNy = 16; XmNlabelString = compound_string("Reset"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNleftPosition = 75; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Midas_Custom_Apply_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(12); }; XmNactivateCallback = procedures { CustomReset(); }; }; }; XmPushButtonGadget CustomHelp; XmPushButtonGadget { arguments { XmNx = 86; XmNy = 40; XmNlabelString = compound_string("Cancel"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNwidth = Midas_Custom_Button_Width; XmNleftPosition = 75; XmNtopWidget = XmPushButtonGadget Midas_Custom_OK_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(11); }; XmNactivateCallback = procedures { CustomCancel(); }; }; }; }; }; Midas_Custom_Apply_Button: XmPushButtonGadget { arguments { XmNx = 77; XmNy = 9; XmNlabelString = compound_string("Apply"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 10; XmNleftPosition = 25; XmNwidth = Midas_Custom_Button_Width; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(10); }; XmNactivateCallback = procedures { CustomApply(); }; }; }; Midas_Custom_OK_Button: XmPushButtonGadget { arguments { XmNx = 18; XmNy = 13; XmNlabelString = compound_string("OK"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = Buitton_Bottom_Offset; XmNleftPosition = 25; XmNwidth = Midas_Custom_Button_Width; XmNtopWidget = XmPushButtonGadget Midas_Custom_Apply_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(9); }; XmNactivateCallback = procedures { CustomOk(); }; }; }; Midas_Custom_Command: XmForm { arguments { XmNx = 36; XmNy = 316; XmNwidth = 25; XmNheight = 126; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 60; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_FORM; XmNresizePolicy = XmRESIZE_GROW; }; controls { XmLabelGadget Midas_Custom_Command_Label; XmText { arguments { XmNx = 14; XmNy = 32; XmNwidth = 25; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 9; XmNtopOffset = 2; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 9; XmNbottomAttachment = XmATTACH_FORM; XmNtopWidget = XmLabelGadget Midas_Custom_Command_Label; XmNeditMode = XmMULTI_LINE_EDIT; XmNrows = 4; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(1); }; XmNvalueChangedCallback = procedures { CustomUpdateSensitivity(); }; }; }; }; }; Midas_Custom_Command_Label: XmLabelGadget { arguments { arguments Midas_Custom_Label; XmNlabelString = compound_string("Command(s) for Selected Verb"); XmNx = 8; XmNtopAttachment = XmATTACH_FORM; }; }; Midas_Custom_Add_Verb: XmPushButtonGadget { arguments { XmNx = 14; XmNy = 252; XmNlabelString = compound_string("Add Verb"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNwidth = Midas_Custom_Button_Width; XmNleftOffset = Midas_Cusom_Button_Offset; XmNleftPosition = 25; XmNtopOffset = 0; XmNbottomOffset = 4; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Midas_Custom_Separator; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(4); }; XmNactivateCallback = procedures { CustomVMAddVerb(); }; }; }; Midas_Custom_Separator: XmPushButtonGadget { arguments { XmNx = 19; XmNy = 279; XmNlabelString = compound_string("......."); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 25; XmNtopOffset = 0; XmNleftOffset = Midas_Cusom_Button_Offset; XmNwidth = Midas_Custom_Button_Width; XmNbottomOffset = Buitton_Bottom_Offset; XmNbottomAttachment = XmATTACH_FORM; XmNheight = 28; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(6); }; XmNactivateCallback = procedures { CustomVMAddSeparator(); }; }; }; Midas_Custom_Up: XmPushButtonGadget { arguments { XmNx = 11; XmNy = 223; XmNlabelString = compound_string("Up"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNwidth = Midas_Custom_Button_Width; XmNleftOffset = Midas_Cusom_Button_Offset; XmNleftPosition = 25; XmNtopOffset = 0; XmNbottomOffset = 5; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Midas_Custom_Add_Verb; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(2); }; XmNactivateCallback = procedures { CustomVMUp(); }; }; }; Midas_Custom_Verb_Menu_Label: XmLabelGadget { arguments { arguments Midas_Custom_Label; XmNlabelString = compound_string("Verbs in Menu"); XmNtopAttachment = XmATTACH_FORM; }; }; Verb_Label: XmLabelGadget { arguments { arguments Midas_Custom_Label; XmNlabelString = compound_string("Verbs"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; }; }; Verb_Enter_Button: XmPushButtonGadget { arguments { XmNx = 13; XmNy = 277; XmNlabelString = compound_string("Enter"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNleftPosition = 23; XmNwidth = Midas_Custom_Button_Width; XmNbottomOffset = Buitton_Bottom_Offset; XmNbottomAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(15); }; XmNactivateCallback = procedures { CustomAddVerb(); }; }; }; Verb_Text: XmText { arguments { XmNx = 18; XmNy = 264; XmNheight = 35; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = list_offset; XmNtopOffset = 0; XmNrightOffset = list_offset; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = list_offset; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Verb_Enter_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(14); }; XmNvalueChangedCallback = procedures { CustomUpdateSensitivity(); }; }; }; Verb_Form: XmForm { arguments { XmNx = 31; XmNy = 61; XmNwidth = 25; XmNheight = 315; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 30; XmNbottomOffset = -1+1; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmForm Midas_Custom_Command; XmNdefaultButton = XmPushButtonGadget Verb_Enter_Button; }; controls { XmLabelGadget Verb_Label; XmText Verb_Text; XmPushButtonGadget Verb_Enter_Button; XmToggleButtonGadget Verb_Is_Toggle; XmPushButtonGadget { arguments { XmNx = 81; XmNy = 279; XmNlabelString = compound_string("Delete"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNtopWidget = XmPushButtonGadget Verb_Enter_Button; XmNleftPosition = 71; XmNwidth = Midas_Custom_Button_Width; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(16); }; XmNactivateCallback = procedures { CustomDelVerb(); }; }; }; XmScrolledList { arguments { XmNwidth = 69; XmNheight = 182; XmNy = 25; XmNx = 77; XmNtopOffset = 0; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmLabelGadget Verb_Label; XmNleftOffset = list_offset; XmNleftAttachment = XmATTACH_FORM; XmNrightOffset = list_offset; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_WIDGET; XmNlistSizePolicy = XmCONSTANT; XmNvisibleItemCount = 999; XmNbottomWidget = XmToggleButtonGadget Verb_Is_Toggle; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(13); }; XmNbrowseSelectionCallback = procedures { CustomSelVerb(); }; XmNdefaultActionCallback = procedures { CustomSelConfVerb(); }; }; }; }; }; Menu_Label: XmLabelGadget { arguments { arguments Midas_Custom_Label; XmNlabelString = compound_string("Menus"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; }; }; Menu_Text: XmText { arguments { XmNx = 15; XmNy = 264; XmNheight = 35; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = list_offset; XmNtopOffset = 0; XmNrightOffset = list_offset; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = list_offset; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Menu_Ok_Button; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(18); }; XmNvalueChangedCallback = procedures { CustomUpdateSensitivity(); }; }; }; Menu_Ok_Button: XmPushButtonGadget { arguments { XmNx = 9; XmNy = 277; XmNlabelString = compound_string("Enter"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = 0; XmNleftPosition = 25; XmNwidth = Midas_Custom_Button_Width; XmNbottomOffset = Buitton_Bottom_Offset; XmNbottomAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(19); }; XmNactivateCallback = procedures { CustomAddMenu(); }; }; }; ActiveMenuLabel: XmLabelGadget { arguments { XmNx = 10; XmNy = 239; XmNlabelString = compound_string("No Menu Selected"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 10; XmNtopOffset = 0; XmNbottomOffset = 5; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Midas_Custom_Up; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(21); }; }; }; MidasCustomExitDialog: XmWarningDialog { arguments { XmNmessageString = compound_string("Customization changes have not been saved.",separate=true) & compound_string("Save changes before exiting?"); XmNx = 34; XmNy = 55; XmNborderWidth = 1; XmNcancelLabelString = compound_string("No"); XmNokLabelString = compound_string("Yes"); XmNhelpLabelString = compound_string("Cancel"); XmNdialogStyle = XmDIALOG_FULL_APPLICATION_MODAL; XmNmessageAlignment = XmALIGNMENT_CENTER; XmNdialogTitle = compound_string("Confirmation Needed..."); }; callbacks { XmNcancelCallback = procedures { CustomExit(0); CustomExit(0); }; XmNhelpCallback = procedures { CustomExit(2); }; XmNokCallback = procedures { CustomExit(1); }; }; }; FileList: XmFormDialog { arguments { XmNx = 59; XmNy = 211; XmNwidth = 340; XmNheight = 211; XmNborderWidth = 1; XmNdialogTitle = compound_string("Midas - File Manager"); XmNresizePolicy = XmRESIZE_NONE; }; controls { XmMenuBar MidasFilesMenu; XmScrolledList { arguments { XmNx = 21; XmNy = 64; XmNwidth = 25; XmNheight = 25; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 0; XmNtopOffset = 0; XmNtopWidget = XmMenuBar MidasFilesMenu; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "midas realize list MidasFiles ."); }; }; }; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "custom create FILELIST ."); }; }; }; MidasFilesMenu: XmMenuBar { arguments { XmNrightOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNx = 10; XmNwidth = 263; XmNleftOffset = 0; XmNleftAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "custom connect FILELIST \"<main>\" ."); }; }; }; MidasFilesSelector: XmFileSelectionDialog { arguments { XmNx = 0; XmNy = 7; XmNborderWidth = 1; XmNdialogTitle = compound_string("Midas - Open File"); XmNpattern = compound_string("*.uid"); }; callbacks { XmNcancelCallback = procedures { SendMidas( "Midas PopDown ."); }; MrmNcreateCallback = procedures { SendMidas( "Midas PopDown ..Help"); }; }; }; MidasCallbackManager: XmFormDialog { arguments { XmNwidth = 377; XmNheight = 455; XmNborderWidth = 1; XmNdialogTitle = compound_string("Midas - Callback Manager"); XmNresizePolicy = XmRESIZE_NONE; XmNautoUnmanage = false; }; controls { XmLabelGadget MidasCallbackManagerLabel; XmPanedWindow { arguments { XmNx = 149; XmNy = 13; XmNwidth = 98; XmNheight = 151; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 4; XmNtopOffset = 54; XmNrightOffset = 6; XmNrightAttachment = XmATTACH_FORM; XmNtopWidget = XmLabelGadget MidasCallbackManagerLabel; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasCallbackManagerCancel; }; controls { XmScrolledList MidasCallbackManagerList; XmForm { arguments { XmNx = 4; XmNy = 134; XmNwidth = 25; XmNheight = 122; XmNborderWidth = 1; }; controls { XmLabelGadget MidasCallbackManagerLabel2; XmScrolledText MidasCallbackManagerText; }; }; }; }; XmPushButtonGadget MidasCallbackManagerCancel; XmPushButtonGadget MidasCallbackManagerApply; XmPushButtonGadget MidasCallbackManagerSave; XmLabelGadget MidasCallbackManagerClassLabel; XmText MidasCallbackManagerClassText; XmText MidasCallbackManagerWidgetText; }; }; MidasCallbackManagerLabel: XmLabelGadget { arguments { XmNx = 15; XmNy = 12; XmNlabelString = compound_string("Widget"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 15; XmNtopOffset = 18; }; }; MidasCallbackManagerList: XmScrolledList { arguments { XmNx = 18; XmNy = 12; XmNwidth = 25; XmNheight = 80; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Realize List CallbackList ."); }; }; }; MidasCallbackManagerText: XmScrolledText { arguments { XmNx = 186; XmNy = 32; XmNwidth = 125; XmNheight = 83; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 1; XmNtopOffset = 2; XmNrightOffset = 4; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; XmNtopWidget = XmLabelGadget MidasCallbackManagerLabel2; XmNeditMode = XmMULTI_LINE_EDIT; }; }; MidasErrorBox: XmErrorDialog { arguments { XmNmessageString = compound_string("Error Dialog Label"); XmNx = 43; XmNy = 62; XmNborderWidth = 1; XmNwidth = 418; XmNheight = 188; XmNdialogStyle = XmDIALOG_FULL_APPLICATION_MODAL; XmNdialogTitle = compound_string("Midas Error Message"); XmNokLabelString = compound_string("Acknowleged"); }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas PopDown ..Help\nMIdas PopDown ..Cancel"); }; }; }; MidasResourceManager: XmFormDialog { arguments { XmNx = 66; XmNy = 115; XmNwidth = 368; XmNheight = 288; XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_NONE; XmNautoUnmanage = false; XmNdialogTitle = compound_string("Midas - Resource Manager"); XmNdefaultButton = XmPushButtonGadget Apply; }; controls { XmLabelGadget Label; XmLabelGadget Class; XmText NameText; XmText ClassText; XmText Text; XmLabelGadget ValueLabel; XmPushButtonGadget Cancel; XmPushButtonGadget Apply; XmScrolledList List; XmPushButtonGadget Save; }; }; List: XmScrolledList { arguments { XmNx = 20; XmNy = 87; XmNwidth = 324; XmNheight = 87; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 20; XmNtopOffset = 8; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNrightOffset = 20; XmNbottomWidget = XmLabelGadget ValueLabel; XmNtopWidget = XmText ClassText; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Realize List ResourceList ."); }; }; }; Label: XmLabelGadget { arguments { XmNx = 18; XmNy = 6; XmNlabelString = compound_string("Widget"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 7; XmNtopOffset = 13; }; }; ValueLabel: XmLabelGadget { arguments { XmNx = 18; XmNy = 203; XmNlabelString = compound_string("Resource Value"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 18; XmNtopOffset = 0; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmText Text; }; }; Text: XmText { arguments { XmNx = 20; XmNy = 216; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 20; XmNtopOffset = 0; XmNrightOffset = 21; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget Apply; }; }; Cancel: XmPushButtonGadget { arguments { XmNx = 242; XmNy = 261; XmNlabelString = compound_string("Dismiss"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNtopWidget = XmPushButtonGadget Apply; XmNrightOffset = 41; XmNrightAttachment = XmATTACH_FORM; }; callbacks { XmNactivateCallback = procedures { SendMidas( "Midas Popdown .^"); }; }; }; Apply: XmPushButtonGadget { arguments { XmNx = 55; XmNy = 260; XmNlabelString = compound_string("Apply"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = 92; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; XmNleftPosition = 16; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Center Horizontal . 50"); }; }; }; MidasIngotManager: XmFormDialog { arguments { XmNx = 98; XmNy = 143; XmNwidth = 359; XmNheight = 478; XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_NONE; XmNdialogTitle = compound_string("Midas - Ingot Manager"); }; controls { XmPanedWindow MidasIngotManagerPanes; XmLabelGadget MidasIngotManagerLabel; XmPushButtonGadget MidasIngotManagerDismiss; XmLabelGadget MidasIngotManagerClassLabel; XmText MidasIngotManagerNameText; XmText MidasIngotManagerClassText; XmPushButtonGadget MidasIngotManagerCreateNew; }; }; MidasCallbackManagerLabel2: XmLabelGadget { arguments { XmNx = 13; XmNy = 8; XmNlabelString = compound_string("Callback Command"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 13; XmNtopOffset = 8; }; }; MidasCallbackManagerCancel: XmPushButtonGadget { arguments { XmNx = 42; XmNy = 361; XmNlabelString = compound_string("Dismiss"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 185; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_NONE; XmNwidth = 73; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Center Horizontal . 75"); }; }; }; MidasCallbackManagerApply: XmPushButtonGadget { arguments { XmNx = 168; XmNy = 360; XmNlabelString = compound_string("Apply"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 27; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Center Horizontal . 50"); }; }; }; MidasCallbackManagerSave: XmPushButtonGadget { arguments { XmNx = 103; XmNy = 358; XmNlabelString = compound_string("Save"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 102; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Center Horizontal . 25"); }; }; }; MidasIngotManagerPanes: XmPanedWindow { arguments { XmNx = 46; XmNy = 78; XmNwidth = 25; XmNheight = 25; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 6; XmNtopOffset = 8; XmNrightOffset = 6; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 3; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasIngotManagerDismiss; XmNtopWidget = XmText MidasIngotManagerClassText; }; controls { XmScrolledList MidasIngotManagerList; XmForm { arguments { XmNx = 13; XmNy = 21; XmNwidth = 25; XmNheight = 33; XmNborderWidth = 1; }; controls { XmLabelGadget MidasIngotManagerValueLabel; XmText MidasIngotManagerValueText; XmPushButtonGadget MidasIngotManagerValueApply; XmText MidasIngotManagerCallbackText; XmLabelGadget MidasIngotManagerCallbackLabel; XmPushButtonGadget MidasIngotManagerCallbackApply; XmPushButtonGadget MidasIngotManagerCallbackSave; XmText MidasIngotValueOwnerText; XmLabelGadget MidasIngotValueOwnerLabel; XmToggleButtonGadget MidasIngotManagerCallbackOption; }; }; }; }; MidasIngotManagerList: XmScrolledList { arguments { XmNx = 37; XmNy = 9; XmNwidth = 16; XmNheight = 74; }; callbacks { MrmNcreateCallback = procedures { SendMidas( "Midas Realize List IngotList ."); }; }; }; MidasIngotManagerDismiss: XmPushButtonGadget { arguments { XmNx = 11; XmNy = 199; XmNlabelString = compound_string("Dismiss"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 11; XmNtopOffset = 0; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_FORM; }; }; MidasIngotManagerLabel: XmLabelGadget { arguments { XmNx = 8; XmNy = 10; XmNlabelString = compound_string("Widget"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 8; XmNtopOffset = 10; }; }; MidasIngotManagerValueLabel: XmLabelGadget { arguments { XmNx = 10; XmNy = 5; XmNlabelString = compound_string("Value"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 10; XmNtopOffset = 6; }; }; MidasIngotManagerValueApply: XmPushButtonGadget { arguments { XmNx = 198; XmNy = 5; XmNlabelString = compound_string("Apply"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 4; XmNrightOffset = 3; XmNrightAttachment = XmATTACH_FORM; }; }; MidasIngotManagerValueText: XmText { arguments { XmNx = 69; XmNy = 6; XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 6; XmNtopOffset = 2; XmNleftWidget = XmLabelGadget MidasIngotManagerValueLabel; XmNrightOffset = 4; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmPushButtonGadget MidasIngotManagerValueApply; }; }; MidasIngotManagerCallbackApply: XmPushButtonGadget { arguments { XmNx = 14; XmNy = 150; XmNlabelString = compound_string("Apply"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 14; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; }; }; MidasIngotManagerCallbackSave: XmPushButtonGadget { arguments { XmNx = 255; XmNy = 145; XmNlabelString = compound_string("Save"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; XmNrightOffset = 19; XmNrightAttachment = XmATTACH_FORM; }; }; MidasIngotManagerCallbackLabel: XmLabelGadget { arguments { XmNx = 11; XmNy = 83; XmNlabelString = compound_string("Callback"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 7; XmNtopOffset = 7; XmNtopWidget = XmText MidasIngotValueOwnerText; }; }; MidasIngotManagerCallbackText: XmText { arguments { XmNx = 6; XmNy = 60; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 3; XmNtopOffset = 1; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmToggleButtonGadget MidasIngotManagerCallbackOption; XmNtopWidget = XmLabelGadget MidasIngotManagerCallbackLabel; XmNeditMode = XmMULTI_LINE_EDIT; }; }; Save: XmPushButtonGadget { arguments { XmNx = 151; XmNy = 247; XmNlabelString = compound_string("Save"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 55; XmNtopOffset = 0; XmNbottomOffset = 2; XmNbottomAttachment = XmATTACH_FORM; }; }; WidgetList: XmMainWindow { arguments { XmNborderWidth = 1; XmNmessageWindow = XmRowColumn WidgetListButtons; XmNscrollingPolicy = XmAUTOMATIC; }; controls { XmMenuBar WidgetListMenu; XmRowColumn WidgetListButtons; }; }; WidgetListMenu: XmMenuBar { }; WidgetListButtons: XmRowColumn { arguments { XmNborderWidth = 1; XmNwidth = 214; XmNheight = 113; XmNy = 97; XmNorientation = XmHORIZONTAL; XmNresizeWidth = false; }; }; MidasExpressionEvaluator: XmFormDialog { arguments { XmNx = 19; XmNy = 116; XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_ANY; XmNdialogTitle = compound_string("Midas: Expression Evaluator"); XmNautoUnmanage = false; XmNdefaultButton = XmPushButtonGadget MidasEvalEvaluateButton; XmNmarginHeight = 10; }; controls { XmLabelGadget MidasEvalExpressionLabel; XmText MidasEvalExpressionText; XmLabelGadget MidasEvalResultLabel; XmText MidasEvalResultText; XmPushButtonGadget MidasEvalDismissButton; XmPushButtonGadget MidasEvalEvaluateButton; XmPushButtonGadget MidasEvalClearButton; XmLabelGadget MidasEvalTypeLabel; XmText MidasEvalTypeText; }; }; MidasEvalExpressionLabel: XmLabelGadget { arguments { XmNx = 13; XmNy = 28; XmNlabelString = compound_string("Expression"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 13; XmNtopOffset = 8; }; }; MidasEvalExpressionText: XmText { arguments { XmNx = 18; XmNy = 46; XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 14; XmNtopOffset = 3; XmNrightOffset = 8; XmNrightAttachment = XmATTACH_WIDGET; XmNtopWidget = XmPushButtonGadget MidasEvalEvaluateButton; XmNrightWidget = XmPushButtonGadget MidasEvalEvaluateButton; XmNrows = 1; }; }; MidasEvalResultText: XmText { arguments { XmNx = 19; XmNy = 113; XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 14; XmNtopOffset = -4; XmNrightOffset = 16; XmNrightAttachment = XmATTACH_FORM; XmNleftWidget = XmLabelGadget MidasEvalResultLabel; XmNtopWidget = XmLabelGadget MidasEvalResultLabel; XmNrows = 1; XmNeditable = false; }; }; MidasEvalResultLabel: XmLabelGadget { arguments { XmNx = 17; XmNy = 80; XmNlabelString = compound_string("Result"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 17; XmNtopOffset = 15; XmNtopWidget = XmText MidasEvalExpressionText; }; }; MidasEvalDismissButton: XmPushButtonGadget { arguments { XmNx = 22; XmNy = 174; XmNlabelString = compound_string("Dismiss"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 22; XmNtopOffset = 5; XmNtopWidget = XmLabelGadget MidasEvalTypeLabel; }; }; MidasEvalEvaluateButton: XmPushButtonGadget { arguments { XmNx = 271; XmNy = 39; XmNlabelString = compound_string("Evaluate"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = -1; XmNrightOffset = 11; XmNrightAttachment = XmATTACH_FORM; XmNtopWidget = XmLabelGadget MidasEvalExpressionLabel; }; }; MidasEvalClearButton: XmPushButtonGadget { arguments { XmNx = 291; XmNy = 137; XmNlabelString = compound_string("Clear"); XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNtopWidget = XmPushButtonGadget MidasEvalDismissButton; XmNrightOffset = 11; XmNrightAttachment = XmATTACH_FORM; }; }; MidasStartup: XmFormDialog { arguments { XmNx = 48; XmNy = 97; XmNwidth = 425; XmNheight = 225; XmNborderWidth = 1; XmNdialogTitle = compound_string("Midas Startup"); XmNautoUnmanage = false; XmNresizePolicy = XmRESIZE_GROW; }; controls { XmLabelGadget MidasStartupLabel; XmText MidasStartupText; XmPushButtonGadget MidasStartupSave; XmPushButtonGadget MidasStartupDismiss; }; }; MidasStartupLabel: XmLabelGadget { arguments { XmNx = 9; XmNy = 19; XmNlabelString = compound_string("Commands to be executed at startup"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 15; XmNtopOffset = 9; }; }; MidasStartupSave: XmPushButtonGadget { arguments { XmNx = 19; XmNy = 189; XmNlabelString = compound_string("Save"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 19; XmNtopOffset = 0; XmNbottomOffset = 7; XmNbottomAttachment = XmATTACH_FORM; }; }; MidasStartupDismiss: XmPushButtonGadget { arguments { XmNx = 235; XmNy = 192; XmNlabelString = compound_string("Dismiss"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 14; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = -1; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasStartupSave; }; }; MidasStartupText: XmText { arguments { XmNx = 13; XmNy = 33; XmNwidth = 269; XmNheight = 142; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 13; XmNtopOffset = 3; XmNrightOffset = 15; XmNrightAttachment = XmATTACH_FORM; XmNtopWidget = XmLabelGadget MidasStartupLabel; XmNbottomOffset = 5; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasStartupSave; XmNeditMode = XmMULTI_LINE_EDIT; }; }; MidasInfo: XmFormDialog { arguments { XmNx = 150; XmNy = 96; XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_ANY; XmNwidth = 336; }; controls { XmLabelGadget MidasInfoLabel; XmText MidasInfoClassText; XmLabelGadget MidasInfoNameLabel; XmLabelGadget MidasInfoClassLabel; XmText MidasInfoNameText; XmRowColumn MidasInfoButtonBox; XmArrowButtonGadget MidasInfoUpButton; }; }; MidasInfoLabel: XmLabelGadget { arguments { XmNx = 13; XmNy = 17; XmNlabelString = compound_string("Selected Widget"); XmNtopAttachment = XmATTACH_FORM; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 13; XmNtopOffset = 6; XmNalignment = XmALIGNMENT_CENTER; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; }; }; MidasInfoNameLabel: XmLabelGadget { arguments { XmNx = 15; XmNy = 45; XmNlabelString = compound_string("Name:"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 15; XmNtopOffset = 6; XmNheight = 27; XmNtopWidget = XmLabelGadget MidasInfoLabel; }; }; MidasInfoClassLabel: XmLabelGadget { arguments { XmNx = 16; XmNy = 98; XmNlabelString = compound_string("Class:"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 16; XmNtopOffset = 0; XmNbottomOffset = 5; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasInfoClassText; XmNheight = 31; }; }; MidasInfoNameText: XmText { arguments { XmNx = 65; XmNy = 26; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 7; XmNtopOffset = 0; XmNleftWidget = XmLabelGadget MidasInfoNameLabel; XmNrightOffset = 2; XmNrightAttachment = XmATTACH_WIDGET; XmNeditable = false; XmNbottomOffset = LabelTextOffset; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmLabelGadget MidasInfoNameLabel; XmNrightWidget = XmArrowButtonGadget MidasInfoUpButton; }; }; MidasInfoClassText: XmText { arguments { XmNx = 65; XmNy = 93; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = -1; XmNtopOffset = 8; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_OPPOSITE_WIDGET; XmNeditable = false; XmNtopWidget = XmText MidasInfoNameText; XmNleftWidget = XmText MidasInfoNameText; XmNrightWidget = XmText MidasInfoNameText; }; }; MidasInfoButtonBox: XmRowColumn { arguments { XmNx = 7; XmNy = 159; XmNborderWidth = 1; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 0; XmNtopOffset = 9; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_FORM; XmNtopWidget = XmText MidasInfoClassText; }; }; MidasCallbackManagerClassLabel: XmLabelGadget { arguments { XmNx = 14; XmNy = 41; XmNlabelString = compound_string("Class"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasCallbackManagerClassText; XmNrightOffset = 4; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmText MidasCallbackManagerClassText; }; }; MidasCallbackManagerWidgetText: XmText { arguments { XmNx = 73; XmNy = 9; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 2; XmNtopOffset = 0; XmNleftWidget = XmLabelGadget MidasCallbackManagerLabel; XmNrightOffset = 5; XmNrightAttachment = XmATTACH_FORM; XmNeditable = false; XmNbottomOffset = -6; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmLabelGadget MidasCallbackManagerLabel; }; }; MidasCallbackManagerClassText: XmText { arguments { XmNx = 66; XmNy = 9; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = 0; XmNtopOffset = 7; XmNrightOffset = 5; XmNrightAttachment = XmATTACH_FORM; XmNeditable = false; XmNtopWidget = XmText MidasCallbackManagerWidgetText; XmNleftWidget = XmText MidasCallbackManagerWidgetText; }; }; Class: XmLabelGadget { arguments { XmNx = 15; XmNy = 38; XmNlabelString = compound_string("Class"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 4; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmText ClassText; XmNbottomOffset = 7; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText ClassText; }; }; NameText: XmText { arguments { XmNx = 85; XmNy = 5; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 5; XmNtopOffset = 0; XmNeditable = false; XmNleftWidget = XmLabelGadget Label; XmNbottomOffset = -7; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmLabelGadget Label; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; }; }; ClassText: XmText { arguments { XmNx = 86; XmNy = 49; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = -1; XmNtopOffset = 5; XmNeditable = false; XmNtopWidget = XmText NameText; XmNleftWidget = XmText NameText; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; }; }; MidasIngotManagerClassLabel: XmLabelGadget { arguments { XmNx = 10; XmNy = 41; XmNlabelString = compound_string("Class"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 8; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmText MidasIngotManagerClassText; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasIngotManagerClassText; }; }; MidasIngotManagerClassText: XmText { arguments { XmNx = 68; XmNy = 55; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 66; XmNtopOffset = 3; XmNrightOffset = 7; XmNrightAttachment = XmATTACH_FORM; XmNeditable = false; XmNtopWidget = XmText MidasIngotManagerNameText; }; }; MidasIngotManagerNameText: XmText { arguments { XmNx = 66; XmNy = 11; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 9; XmNtopOffset = 0; XmNrightOffset = 7; XmNrightAttachment = XmATTACH_FORM; XmNeditable = false; XmNbottomOffset = -8; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmLabelGadget MidasIngotManagerLabel; XmNleftWidget = XmLabelGadget MidasIngotManagerLabel; }; }; MidasIngotValueOwnerText: XmText { arguments { XmNx = 89; XmNy = 51; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = 0; XmNtopOffset = 4; XmNleftWidget = XmText MidasIngotManagerValueText; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_OPPOSITE_WIDGET; XmNrightWidget = XmText MidasIngotManagerValueText; XmNtopWidget = XmText MidasIngotManagerValueText; XmNeditable = false; }; }; MidasIngotValueOwnerLabel: XmLabelGadget { arguments { XmNx = 5; XmNy = 45; XmNlabelString = compound_string("Owner"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNheight = 22; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasIngotValueOwnerText; XmNrightOffset = 5; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmText MidasIngotValueOwnerText; }; }; MidasIngotManagerCreateNew: XmPushButtonGadget { arguments { XmNx = 257; XmNy = 366; XmNlabelString = compound_string("Create New Ingot..."); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNbottomOffset = 6; XmNbottomAttachment = XmATTACH_FORM; XmNrightOffset = 9; XmNrightAttachment = XmATTACH_FORM; }; }; MidasCreateNewIngot: XmFormDialog { arguments { XmNx = 99; XmNy = 665; XmNwidth = 338; XmNheight = 139; XmNborderWidth = 1; XmNautoUnmanage = false; XmNdefaultButton = XmPushButtonGadget MidasCreateIngotOk; }; controls { XmLabelGadget MidasCreateIngotNameLabel; XmLabelGadget MidasCreateIngotOwnerLabel; XmText MidasCreateIngotOwnerText; XmArrowButtonGadget MidasCreateIngotUp; XmText MidasCreateIngotNameText; XmPushButtonGadget MidasCreateIngotOk; XmPushButtonGadget MidasCreateIngotCancel; }; }; MidasCreateIngotNameLabel: XmLabelGadget { arguments { XmNx = 13; XmNy = 18; XmNlabelString = compound_string("Name"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 5; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmText MidasCreateIngotNameText; XmNbottomOffset = 9; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasCreateIngotNameText; }; }; MidasCreateIngotOwnerLabel: XmLabelGadget { arguments { XmNx = 17; XmNy = 154; XmNlabelString = compound_string("Owner"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 6; XmNtopOffset = 0; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_NONE; XmNbottomOffset = 9; XmNbottomAttachment = XmATTACH_WIDGET; XmNheight = 28; XmNbottomWidget = XmPushButtonGadget MidasCreateIngotOk; }; }; MidasCreateIngotUp: XmArrowButtonGadget { arguments { XmNx = 299; XmNy = 76; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNrightOffset = 10; XmNrightAttachment = XmATTACH_FORM; XmNbottomOffset = -1; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmLabelGadget MidasCreateIngotOwnerLabel; }; }; MidasCreateIngotNameText: XmText { arguments { XmNx = 102; XmNy = 11; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = -1; XmNtopOffset = 0; XmNbottomOffset = 7; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmText MidasCreateIngotOwnerText; XmNleftWidget = XmText MidasCreateIngotOwnerText; XmNwidth = 176; XmNrightOffset = 0; XmNrightAttachment = XmATTACH_OPPOSITE_WIDGET; XmNrightWidget = XmText MidasCreateIngotOwnerText; }; }; MidasCreateIngotOwnerText: XmText { arguments { XmNx = 76; XmNy = 100; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 6; XmNtopOffset = 0; XmNbottomOffset = -5; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNrightOffset = 6; XmNrightAttachment = XmATTACH_WIDGET; XmNrightWidget = XmArrowButtonGadget MidasCreateIngotUp; XmNbottomWidget = XmLabelGadget MidasCreateIngotOwnerLabel; XmNleftWidget = XmLabelGadget MidasCreateIngotOwnerLabel; }; }; MidasCreateIngotOk: XmPushButtonGadget { arguments { XmNx = 7; XmNy = 91; XmNlabelString = compound_string("Ok"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 29; XmNtopOffset = 0; XmNbottomOffset = 3; XmNbottomAttachment = XmATTACH_FORM; }; }; MidasCreateIngotCancel: XmPushButtonGadget { arguments { XmNx = 220; XmNy = 94; XmNlabelString = compound_string("Cancel"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasCreateIngotOk; XmNrightOffset = 8; XmNrightAttachment = XmATTACH_FORM; }; }; MidasEvalTypeText: XmText { arguments { XmNx = 155; XmNy = 83; XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = 0; XmNtopOffset = 4; XmNrightOffset = 16; XmNrightAttachment = XmATTACH_FORM; XmNleftWidget = XmText MidasEvalResultText; XmNrows = 1; XmNeditable = false; XmNtopWidget = XmText MidasEvalResultText; }; }; MidasEvalTypeLabel: XmLabelGadget { arguments { XmNx = 17; XmNy = 132; XmNlabelString = compound_string("Result",separate=true) & compound_string("Type"); XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 17; XmNtopOffset = 0; XmNbottomOffset = 0; XmNbottomAttachment = XmATTACH_OPPOSITE_WIDGET; XmNbottomWidget = XmText MidasEvalTypeText; }; }; MidasInfoUpButton: XmArrowButtonGadget { arguments { XmNx = 301; XmNy = 33; XmNtopAttachment = XmATTACH_NONE; XmNleftAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 0; XmNwidth = 34; XmNrightOffset = 1; XmNrightAttachment = XmATTACH_FORM; XmNheight = 29; XmNbottomOffset = -28; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmLabelGadget MidasInfoNameLabel; }; }; MidasIngotManagerCallbackOption: XmToggleButtonGadget { arguments { XmNlabelString = compound_string("Invoke Callback When Parent Created"); XmNleftAttachment = XmATTACH_FORM; XmNtopAttachment = XmATTACH_NONE; XmNleftOffset = 14; XmNtopOffset = 2; XmNy = 176; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmPushButtonGadget MidasIngotManagerCallbackApply; XmNbottomOffset = 1; }; }; MidasHelp: XmMainWindow { arguments { XmNx = 150; XmNy = 104; XmNborderWidth = 1; XmNwidth = 454; XmNheight = 418; XmNmessageWindow = XmForm MidasHelpBulletinBoard; XmNscrollingPolicy = XmAUTOMATIC; }; controls { XmForm MidasHelpBulletinBoard; unmanaged XmPromptDialog MidasHelpSearchDialog; }; }; MidasHelpBulletinBoard: XmForm { arguments { XmNborderWidth = 1; XmNresizePolicy = XmRESIZE_GROW; XmNmarginHeight = 10; }; controls { XmPushButtonGadget MidasHelpGoBack; XmPushButtonGadget MidasHelpSearch; XmPushButtonGadget MidasHelpDismiss; }; }; MidasHelpGoBack: XmPushButtonGadget { arguments { XmNx = 11; XmNy = 2; XmNlabelString = compound_string("Go Back"); XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 11; XmNbottomAttachment = XmATTACH_FORM; XmNbottomOffset = 0; }; }; MidasHelpDismiss: XmPushButtonGadget { arguments { XmNlabelString = compound_string("Dismiss"); XmNleftAttachment = XmATTACH_NONE; XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = 367; XmNtopOffset = 0; XmNx = 367; XmNrightAttachment = XmATTACH_FORM; XmNrightOffset = 12; XmNtopWidget = XmPushButtonGadget MidasHelpGoBack; }; }; MidasHelpSearch: XmPushButtonGadget { arguments { XmNlabelString = compound_string("Search..."); XmNleftAttachment = XmATTACH_WIDGET; XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNleftOffset = 19; XmNtopOffset = 0; XmNtopWidget = XmPushButtonGadget MidasHelpGoBack; XmNleftWidget = XmPushButtonGadget MidasHelpGoBack; }; }; MidasHelpSearchDialog: XmPromptDialog { arguments { XmNborderWidth = 1; }; }; Verb_Is_Toggle: XmToggleButtonGadget { arguments { XmNlabelString = compound_string("Is Toggle Button"); XmNleftAttachment = XmATTACH_OPPOSITE_WIDGET; XmNtopAttachment = XmATTACH_NONE; XmNleftOffset = 0; XmNtopOffset = 246; XmNy = 246; XmNleftWidget = XmText Verb_Text; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmText Verb_Text; XmNbottomOffset = 1; }; callbacks { MrmNcreateCallback = procedures { CustomCreate(22); }; }; }; CustomHelp: XmPushButtonGadget { arguments { XmNx = 86; XmNy = 51; XmNlabelString = compound_string("Help"); XmNtopAttachment = XmATTACH_WIDGET; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = Midas_Cusom_Button_Offset; XmNtopOffset = Buitton_Bottom_Offset; XmNwidth = Midas_Custom_Button_Width; XmNleftPosition = 75; XmNtopWidget = XmPushButtonGadget Midas_Custom_OK_Button; }; callbacks { XmNactivateCallback = procedures { SendMidas( "Help . \"http://slacvx.slac.stanford.edu/MidasHelp/v09/custom.html\""); }; }; }; end module; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midas.uid������������������������������������������������������������������������������100666 � 21345 � 173 � 160000 6003413513 13234� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|or��URM 1.2���Motif Uil Compiler������������V2.0-000��Thu Jul 20 09:43:55 1995 �����vuitDummy��������������������� 2.1��������r�w���c�����~�j������������� ��T�l�ü��$�Ø�l� � ä�ø����� D� à� �T�ˆ�¼�¼�¼ð� Hˆ®������ð����X·�����������MidasHelp�����������������������MidasCreateNewIngot�������������MidasInfo�����������������������MidasStartup�������������������MidasExpressionEvaluator��������WidgetList����������������������MidasIngotManager���������������MidasResourceManager������������MidasErrorBox�������������������MidasCallbackManager������������MidasFilesSelector��������������FileList������������������������MidasCustomExitDialog�����������Midas_Custom��������������������Midas_Main�������������������������� Hˆ®�������ô���� ‰v8��(�(����� ��������,��� ��������������þÿÿÿÿ���Ä���¦@8Â’²CcˆÂ@`„ %�‚‚��Â#À€À‚ €A€B� €Xp€R!€Ò…€‚ À‚�€ �€ Â@�€ �€‚��‚2áÊp„ƒJ`Ž‚âÁ�ŠƒA Á8 (€D8�€B�€á�€‚¡��ÀBà��€"@��€@��€ ��†‘þÿÿÿÿ���� Hˆ®�������(���ξ��������������������������������������� Hˆ®�������ô�� ‰v8��(�(����� ��������,��� ���������`€�x@F<!‚!Èd0  ���@��� €��������À�üÿÿ��ð��ð�rðð�Š ñ�rqð�«¨ð�sqð€ð€ð€‚�ð€Ã,ð€Ãð�ð€�ð€ƒ ð€ã?ø€ƒôÀ�þ À «€‡ï@>Çÿ@{¢¾€í<xÈø�À¶à���¼€��0������������ Hˆ®�������T��2.1����� Hˆ®��� ����Ø`��I÷â�Ø���� � ���t�¨���,��������Midas_Main��fÁh�@��<�X� �d��  ����������������SendMidas����ð��������������-��� sq�ˆ���éð����Midas_Command�ð€�ð�ƒ �����������È ������Midas_Command�€���� Hˆ®��� ����x|��I÷â�x���� � ���������0��������widget-0-159-17�fÁh�<��� �\� �h�� �����������������SendSendMidas�������������� Hˆ®�������!l��Custom Connect CUSTOM "<main>" .���� Hˆ®�������Ìü��I÷â�Ì����� ���x�����0��������Midas_Command�7�fÁh�<��� �\� �h�� �����������������SendSendMidas������������������4��� ���Œ��fÁh�����da�¸� ����d�ð€�ð������������midas_command_proc�a���� Hˆ®�������#4��Midas Register Name MidasCommand .������ Hˆ®���������Custom Create CUSTOM .������ Hˆ®������|T��I÷â|����� ���0�ü������������Midas_Custom��7�� �������.���� ��� �/�������ó�,�������d����da��ð����������������������������Z� ��� ���ì���6��� ���¤��fÁh��������Ð� �Ü��midas_co��������oc�as_CoSendMidas�<x�à�����������������an�����������d������d�������L�������@a������Verb_Form���Midas_Custom_Buttons�r��Midas_Custom_Command�������� Hˆ®������ô„��I÷âô����� ���0������������widget-0-353-17���������.���� ���û�/���������,������������da��c����������(����������������������������)������������������<�"����������!������������Co��������<x������� ���ì���$é������Midas_Custom_Buttons��� d����������Ô������¼������ �������¤������� o������”������� o������„������� Midas_Custom_Up�ActiveMenuLabel�Midas_Custom_Separator�mMidas_Custom_Add_Verb�daMidas_Custom_Verb_Menu_Label�������� Hˆ®�������¤ ��I÷â�¤����� ���@��������������Midas_Custom_Verb_Menu_Label�� ��������)������� �������� ���� c�”������ ��„���(��������������� ������������� Hˆ®�������M $��kms������������ISO8859-1�-*-HELVETICA-BOLD-R-*--*-180-*-*-*-*-ISO8859-1���� Hˆ®�������! à��߀� ISO8859-1 Verbs in Menu��� Hˆ®��� ���Œ D��I÷âŒ���� � ���t�����8��������Midas_Custom_Add_Verb�-1fÁh�-*��-I�d��������� ����������� ���CustomCreate� �� �������.��������/��������ü���� ��|���(�������������������,��������R������ÿÿÿÝ����������)��������������������da������� utT���1��� d��fÁh�����ÔD� ������¼�������������CustomVMAddVerb��&é������Midas_Custom_Separator�„��� ���������� Hˆ®������� |��߀� ISO8859-1Add Verb���� Hˆ®������� ��߀� ISO8859-1Add Menu���� Hˆ®�������T��߀� ISO8859-1.......����� Hˆ®�������ˆ��߀� ISO8859-1Remove����������������������|or�����r¤¤��� 0°��� d,���ˆ ���   0��� $ d��� ¨ L��� ���p ü���dÔ��� l��� È (��� ¼<���0 ��� @0��� À��� ´ ���À 4��� Ü���È ¼��� d ¤��� œ l����è ˆ���, ü���D P���ä œ��� ¨D���ˆÄ��� 0\�����0���ب��� ¸Œ��� x��� ˆà��� X����� Œ��� @ (��� L @��� ,è��� @ œ��� ” „��� Œ l��� ¸ X��� �� ��� „ ���� Ì ¸��� \ ì���Œ Ø���¨$���Øô���TÀ���@ä���0Ô��� ���ðÈ���T|��� ˜��� T0��� ¬X��� �<l��� D��� Œ��� ìô��� D ���  ��� ˆ @��� \ ¨��� �� ���� ” `��� � X��� X ��� 0 ��� 0 t��� L ��� \ Ô��� ˜ <��� è ì��� �� €��� ø ¸��� Ü œ��� Ì È��� ( ä��� ¸ t��� ��Ø��� |ˆ��� Ä��� Äœ��� °��� ̸���`œ���4Œ���„T��� |œ���4Ð�������� è��� ظ���x<���„���l��� $¬���| X���  ��� h D���  8��� �H���Є��� \���Tx��� äl��� È ø���   Ô��� À è��� xä�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������>ClassTable�>ResourceTable��MidasHelpDismiss����MidasHelpSearch�MidasHelpGoBack�MidasHelpBulletinBoard��MidasHelpSearchDialog���MidasHelp���MidasCreateIngotOk��MidasCreateIngotCancel��MidasCreateIngotNameText����MidasCreateIngotUp��MidasCreateIngotOwnerText���MidasCreateIngotOwnerLabel��MidasCreateIngotNameLabel���MidasCreateNewIngot�MidasInfoUpButton���MidasInfoButtonBox��MidasInfoNameText���MidasInfoClassLabel�MidasInfoNameLabel��MidasInfoClassText��MidasInfoLabel��MidasInfo���MidasStartupDismiss�MidasStartupSave����MidasStartupText����MidasStartupLabel���MidasStartup����MidasEvalEvaluateButton�MidasEvalTypeText���MidasEvalTypeLabel��MidasEvalClearButton����MidasEvalDismissButton��MidasEvalResultText�MidasEvalResultLabel����MidasEvalExpressionText�MidasEvalExpressionLabel����MidasExpressionEvaluator����WidgetListButtons���WidgetListMenu��WidgetList��MidasIngotManagerCreateNew��MidasIngotManagerClassText��MidasIngotManagerNameText���MidasIngotManagerClassLabel�MidasIngotManagerDismiss����MidasIngotManagerLabel��MidasIngotManagerCallbackOption�MidasIngotValueOwnerLabel���MidasIngotValueOwnerText����MidasIngotManagerCallbackSave���MidasIngotManagerCallbackApply��MidasIngotManagerCallbackLabel��MidasIngotManagerCallbackText���MidasIngotManagerValueApply�MidasIngotManagerValueText��MidasIngotManagerValueLabel�MidasIngotManagerList���MidasIngotManagerPanes��MidasIngotManager���Apply���Save����List����Cancel��ValueLabel��Text����ClassText���NameText����Class���Label���MidasResourceManager����MidasErrorBox���MidasCallbackManagerWidgetText��MidasCallbackManagerClassText���MidasCallbackManagerClassLabel��MidasCallbackManagerSave����MidasCallbackManagerApply���MidasCallbackManagerCancel��MidasCallbackManagerText����MidasCallbackManagerLabel2��MidasCallbackManagerList����MidasCallbackManagerLabel���MidasCallbackManager����MidasFilesSelector��MidasFilesMenu��FileList����MidasCustomExitDialog���Menu_Ok_Button��Menu_Text���Menu_Label��Verb_Enter_Button���Verb_Is_Toggle��Verb_Text���Verb_Label��Verb_Form���CustomHelp��Midas_Custom_Apply_Button���Midas_Custom_OK_Button��Midas_Custom_Buttons����Midas_Custom_Command_Label��Midas_Custom_Command����Midas_Custom_Up�ActiveMenuLabel�Midas_Custom_Separator��Midas_Custom_Add_Verb���Midas_Custom_Verb_Menu_Label����Midas_Custom����Midas_Command���Midas_Main��MidasVersion����MidasIcon���HandyPakIcon����vuitDummy���|or��� ä”�\ Hˆ®��� ���l����I÷âl���� � ���l�����0��������widget-0-255-25�fÁh�-1��Áh�\�����d��������������������CustomCreate�mCr� �������.��������[�/�������ü���� �ü\���(�������������������������K�)����R��������ÿÝÿÿÿÝ�,�������R�*��� ��4���1��� ��ø��fÁh������$� �����1��� d�������������ÔCustomVMAddMenu��%é������Midas_Custom_Add_Verb�é���da���������� Hˆ®��� ���l����I÷âl���� � ���t�����8��������Midas_Custom_Separator�1fÁh������d��������������������CustomCrCustomCreate����� �������.���������/����������� ��\���(����������������������������)���������������ÿÿÿÝ�,��������R�������������Áh�������� ����1��� d��fÁh�����ÔD� ����AddMenu�������������MidaCustomVMAddSeparator�é���da���������� Hˆ®��� ���h„��I÷âh���� � ���l�����0��������widget-0-284-25�fÁh��1��Áh�\�����d��������������������CustomCreate�mCr� �������.��������^�/������Y���� X���(�������������������������K�)��������������ÿÿÿÝ�,���ÿÝ���R�*��� �R0���1��� ��ø��fÁh������$� �����1��� d�������������ÔCustomVMDel��&é������Midas_Custom_Separator�rator����������� Hˆ®��������I÷â����� ���l�����0��������ActiveMenuLabel�fÁh��1��Áh�\�����d��������������������CustomCreate�mCr� �������.�������� �/�������ï����  ���(�������������������������� �)���������������������ÿÝ������� �R�ì���é�����Midas_Custom_Up������d���������� Hˆ®�������$ˆ��߀ � ISO8859-1No Menu Selected���� Hˆ®������ ¼��I÷â ����� ���l�����0��������widget-0-322-25�fÁh��1��Áh�\�����d��������������������CustomCreate�mCr��������,��������µ�������� ��������(��������������������������)���������"���������!���ÿÝ��������R������������*��� Cuà������ ��À���+�������ç�.���Ô����/���l�����2��� ��ˆ���5��� omL��fÁh��r��orx� ������������������arator�„CustomVMSelConf�fÁh�om��p�´� ����nuLabel���������stom_SepCustomVMSel��éom����ActiveMenuLabel�stom�,éMe����Midas_Custom_Verb_Menu_Label�������� Hˆ®��� ���€ø��I÷â€���� � ���l�����0��������Midas_Custom_Up�fÁh��1��Áh�\�����d��������������������CustomCreate�mCr� �������.�������� �/�������ß���� p���(�������������������,�������R�����ÿÿÿÝ����������)���ÿÝ���������R��������������� CuH���1��� ����fÁh�����ç<� ��������/�����������2��� ��CustomVMUp�m�%éÁh����Midas_Custom_Add_Verb���������„����������� Hˆ®���������߀� ISO8859-1Up������ Hˆ®��� ���d ´��I÷âd���� � ���l�����0��������widget-0-351-25�fÁh��1��Áh�\�����d��������������������CustomCreate�mCr� �������.��������†�/�������ü���� T���(�������������������������K�)��������������ÿÿÿÝ�,���ÿÝ���R�*��� �R4���1��� ��ø��fÁh�Cu����$� ������fÁh��������<� ����CustomVMDown�����é������Midas_Custom_Up������Cu���������� Hˆ®������� ä��߀� ISO8859-1Down���� Hˆ®������0 `��I÷â0����� ���8�ô������������Midas_Custom_Command��1��������.�������$�/�������<�,���st�������Cr���~����������(�����������������������������)����������"����������!���������#��������<�����������������������������������C�������������Midas_Custom_Command_Label�n���� Hˆ®�������¬ ��I÷â�¬����� ���<��������������Midas_Custom_Command_Label����������)����$��� ����<��� ���� ��œ������ �~�Œ���.��������(����������������������������� Hˆ®�������0 Ø��߀,� ISO8859-1Command(s) for Selected Verb���� Hˆ®������˜ œ��I÷â˜����� ���l�����0��������widget-0-647-17�fÁh�ab�����\�����)����$���������<��� CustomCreate�����������.��������/�������� �,��������(����������������������� �)��������"����<��� �!���������������� ���������*��� Cl��� ���������%���da����8��� om(��fÁh��n����T� ��������Mida��������_Up�����CustomUpdateSensitivity��*é����Midas_Custom_Command_Label��´� ������������������������������������������������������������������������������������������������|or��� ´� `� ä� œ�L�¼��Œ�@�ð�À� Ð�´���� ˜� �€�<� � œ�ä� �¨� �ì�¼�Œ��x�8�¨�l��� ˆ� `� 0�ô� ü� � \������¨�Œ�X��à�”�d� 4�,� ô� ´� t� \� t� Ô� è� ”� `� ,� ,� è� ¸� `�  � h� œ� Ð� T� d� ˆ� Œ�  � � $� ¸�  � ø� T� ¨� � T� „� H� `� |� è� ,� ��� |� ¸� ˆ� ä�¤�¨�ä� � 0��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|or��� Ü� Hˆ®������`����I÷â`����� ���8�Ü������������Midas_Custom_Buttons�ab� �������.��������÷�/��������²�,���st�������������(�����������������������������)������������������<�"����������!����������������������������������������H�������,C������������� d������CustomHelp�hMidas_Custom_Apply_Button���Midas_Custom_OK_Button�e���� Hˆ®��� ���t����I÷ât���� � ���t�����8��������Midas_Custom_OK_Button�bfÁh��������d���� �/��������������st���CustomCreate�(��� �������.���������/�������� ���� ��d���(�����������������������ÿÿÿÝ�)������������������,��������R�*��� H8���1��� ,���fÁh�����,� ����d������������omHelp�hCustomOk�tom�)é_B����Midas_Custom_Apply_Button��eSens�y����������� Hˆ®�������x��߀� ISO8859-1OK������ Hˆ®��� ���@��I÷â@���� � ���x�����<��������Midas_Custom_Apply_Button�ÁhfÁh�������h���� ������������������CustCustomCreate� ��� �������.�������M�/���� ��� ���� ��0���(�������������������ÿÝÿÿÿÝ�)������� ���������,����R���R�1��� ���ø��fÁh�����Áh$� ����,� ��������������������CustomApply��om���������� Hˆ®�������4��߀� ISO8859-1Apply��� Hˆ®��� ���lŒ��I÷âl���� � ���l�����0��������widget-0-507-17�fÁh�to��Áh�\���� ����h�����������������CustomCreate�ust� �������.��������R�/����������� � \���(���������������������ÿÿÿÝ�)���ÿÝ������������K�,�������R�*��� �R0���1��� ���ø��fÁh�����Áh$� ����,� ��������������������CustomReset��)éom����Midas_Custom_Apply_Button�_Butto�ns���������� Hˆ®�������¼��߀� ISO8859-1Reset��� Hˆ®��� ���8@��I÷â8���� � ���,��������������CustomHelp�7� �������.���Áh���V�/�������3���� ��(���(���st�������st���������ÿÿÿÝ�)���������,��������R���������K�*��� ������1��� ���¸��fÁh�����ÿÝ�ä� �ð�������K�����������R�*��SendMidas������������ �&é� ����Midas_Custom_OK_Button��Cust�t������� ���� Hˆ®�������p��߀� ISO8859-1Help���� Hˆ®�������CÀ��Help . "http://slacvx.slac.stanford.edu/MidasHelp/v09/custom.html"��@ 'œ Hˆ®��� ���lð��I÷âl���� � ���l�����0��������widget-0-536-17�fÁh�cu��om�\���� �����3��������(���(��CustomCreate�st� �������.���ÿÝ���V�/�������(���� �R\���(����K������������������ÿÿÿÝ�)���ÿÝ�����,�������R���������K�*��� nd4���1��� �ø��fÁh�� ��$� ����Midas_Cu��������Button��CustomCancel�����&é������Midas_Custom_OK_Button�Butto�ns������ ���� Hˆ®�������L��߀� ISO8859-1Cancel������ Hˆ®������È Ð��I÷âÈ����� ���,<������������Verb_Form�36��������.���om����/�������=�,������������st��;����st����(����������������������������)����������"����������!���������#������������������������������� ����� ��� ���ô���!éÁh����Verb_Enter_Button�Cu�����$étt����Midas_Custom_Command�é���������C������¼t������°������œ�������Œ������� o������ Verb_Is_Toggle��Verb_Enter_Button�omVerb_Text�VMVerb_Label�m���� Hˆ®�������œ ��I÷â�œ����� ���,��������������Verb_Label�6��������)���om��� �������� ���� ���Œ������ st�|���(���st���������������������������������� Hˆ®������� ä��߀� ISO8859-1Verbs��� Hˆ®������t ˜��I÷ât����� ���h�����,��������Verb_Text��6fÁh��������X������������������ ���Œ��CustomCreate�(��� �������.���������/��������������#�(���������������������������)����������"���������!������������������������������ ÁhP���8��� nt ��fÁh�Cu����8� ��������Mida��������_CommandCustomUpdateSensitivity��!é������Verb_Enter_Button�����Œ���� Hˆ®������4 È��I÷â4����� ���l�����0��������Verb_Is_Toggle�hfÁh�������\�������������������Œ��CustCustomCreate� ��� ���������� �$����������(����#���������������)�������ö�/�������ö���� ���������������� ��ì�����������é�����Verb_Text���� nt�éÁh����Verb_Text�������������������� Hˆ®�������$T��߀ � ISO8859-1Is Toggle Button������������������������|or���$€�p Hˆ®��� ���h����I÷âh���� � ���l�����0��������widget-0-884-17�fÁh�������\�������������������Œ��CustCustomCreate� ��� �������.�������Q�/��������� �#X���(���������������������ÿÿÿÝ�)����������*��� �4����������G�,�������R�1��� ��ø��fÁh�ex����$� ����éÁh������������t�������CustomDelVerb���!ést����Verb_Enter_Button�é���rb���������� Hˆ®�����������߀� ISO8859-1Delete������ Hˆ®������€��I÷â����� ���l�����0��������widget-0-921-17�fÁh�������\���� ���������������Œ��CustCustomCreate� ����������,�������E�������¶�/����#����.��������M�)���������(��������*��� ��è�������������������"��������!�����������ex����������������������+�������ç���� erÈ���2��� stŒ���5��� ntL��fÁh�����x� ��������������������Œ�CustomSelConfVerb�� fÁh�s_��gg¸� ����_Enter_B��������Verb_TexCustomSelVerb��m�éti����Verb_Is_Toggle�éMe�éda����Verb_Label�enu_L���� Hˆ®��� ���T´��I÷âT���� � ���p�����4��������Verb_Enter_Button�ÁhfÁh������`��������������������CustCustCustomCreate���� �������.����E��� �/����¶������ �D���(����M������������������ÿÿÿÝ�)������������������,�������R�����������������1��� ���fÁh������4� �����+�������������� erÈ��CustomAddVerb���������������� Hˆ®�������Ð��߀� ISO8859-1Enter��� Hˆ®������¬<��I÷â¬����� ���0@������������widget-0-447-17���������.�������¿�/��������[�,������������st�������������(����������������������������)�������������������"����������!���������#��������<����������������������� ��$��� ��� �����éÁh����Menu_Ok_Button������é������Verb_Form�AddVer�������������� �������”��������������„s������Menu_Ok_Button�_Menu_Text���Menu_Label������ Hˆ®�������œl��I÷â�œ����� ���,��������������Menu_Label�7��������)�������� ��������� ���� ���Œ������ ���|���(��������������������������������������� Hˆ®�������0��߀� ISO8859-1Menus��� Hˆ®������pä��I÷âp����� ���h�����,��������Menu_Text��7fÁh��������X������������������� ���Œ��CustomCreate�(��� �������.���������/��������������#�(���������������������������)����������"���������!������������������������������ ��P���8���  ��fÁh�nu��k_8� ����������������Verb_ForCustomUpdateSensitivity��é�����Menu_Ok_Button������ Hˆ®������Ü��I÷âÜ����� ���l�����0��������widget-0-416-25�fÁh�������\��������������������Œ��CustCustomCreate� ����������,�������µ������� �����#����(�������������������������)����������"��������!������������������������*��� ��À������ ��¤���5��� k_d���2��� ��(��fÁh�����rbT� ����omUpdate��������ity��CustomSelMenu�k_fÁh������ ����s������������_Ok_ButtCustomSelConfMenu�nu�é������Menu_Text�stomSe�é�m����Menu_Label�b_Is_���� Hˆ®��� ���d œ��I÷âd���� � ���l�����0��������widget-0-445-25�fÁh�������\��������������������Œ��CustCustomCreate� ��� �������.�������J�/����������� �#T���(���������������������ÿÿÿÝ�)�����������������I�,�������R�*��� �4���1��� ��ø��fÁh�������$� ����¤���5�����������2��� ��CustomDelMenu�rb�é������Menu_Ok_Button����Se���������� Hˆ®������� ��߀� ISO8859-1Delete������ Hˆ®��� ���P ��I÷âP���� � ���l�����0��������Menu_Ok_Button��fÁh�������\��������������������Œ��CustCustomCreate� ��� �������.������� �/��������� �#@���(����������������������ÿÿÿÝ�)������������������,�������R�����������������1��� ����fÁh�������0� ���������2����������omDelMenCustomAddMenu����k_���������� Hˆ®������� @��߀� ISO8859-1Enter��� Hˆ®�������3¨��߀/� ISO8859-1Midas Customize Verbs and Menus����� Hˆ®�������CØ��Help . "http://slacvx.slac.stanford.edu/MidasHelp/v09/custom.html"����������������������������������������������������������������������������������������������������������������������|or����<�´ Hˆ®������ð����I÷âð����� ���8��������������MidasCustomExitDialog�cu� ���������� ��à���.��������"�/���st���7������������� ��Ð������ ��À������ ��°��� ������������������ ��� �� ���3��� ��L���6��� �����7��� ���Ü��fÁh�������������������������fÁhCustomExit� fÁh�������@����omDelMen��������dMenu���CustomExit��fÁh���”�������fÁhˆ������ ��������������������CustomExit�tCustomExit�n��������ex��������m��������b�������Me���������� Hˆ®�������l����߀h� ISO8859-1*Customization changes have not been saved.�� ISO8859-1Save changes before exiting?���� Hˆ®���������߀� ISO8859-1No������ Hˆ®�������Œ��߀� ISO8859-1Yes����� Hˆ®�������¼��߀� ISO8859-1Cancel������ Hˆ®�������*ì��߀&� ISO8859-1Confirmation Needed...������ Hˆ®������ ��I÷â����� ���t�à���,��������FileList�.hafÁh� b��n �X� �d��� ISO��������Save chaSendMidas�e �g?��������������.��������;�/��������Ó�,�������T���������Ó���������� ��� ���Ð�������������������������������������������MidasFilesMenu�x���� Hˆ®��� ����Èd��I÷â�È���� � ���x�����0��������MidasFilesMenu�hfÁh�n ��� �\� �h�� ISO������������ chaSendSendMidas������������������"����;�����!����Ó����.���T��� �,����Ó������������������������ Hˆ®�������#Œ��custom connect FILELIST "<main>" .������ Hˆ®������@l��I÷â@����� ���|�����4��������widget-0-1097-17�fÁhfÁh�� ��� �`� �l������������������SendSendSendMidas���������� � �������.���������/�������@�,���� �����������(�������������������������)���������*��� � ���"���������!���da��������x��������������é�����MidasFilesMenu�nu������� Hˆ®������� ¨��midas realize list MidasFiles .����� Hˆ®�������(���߀$� ISO8859-1Midas - File Manager���� Hˆ®�������8��custom create FILELIST .���� Hˆ®������4x��I÷â4����� ���|�����4��������MidasFilesSelector�hfÁh�� ��� �`� �l������������������SendSendSendMidas����������!��������.����������/������������ ���� ��� $������ �����3��� ��Ì��fÁh������ø� �������*�����������"����SendMidas�da���������"���������#���������$���� Hˆ®�������%¨��߀!� ISO8859-1Midas - Open File��� Hˆ®�������ô��߀� ISO8859-1*.uid��� Hˆ®������� 0��Midas PopDown .����� Hˆ®������� `��Midas PopDown ..Help���� Hˆ®������Ð ˆ��I÷âÐ����� ���8�˜������������MidasCallbackManager�fÁh��������,�������y��������Ç����nd���� ��� �ˆ�������������������������������%�������������´������&�������˜�������|������`�������@������� ��������MidasCallbackManagerWidgetText��MidasCallbackManagerClassText���MidasCallbackManagerClassLabel��MidasCallbackManagerSave����MidasCallbackManagerApply�stMidasCallbackManagerCancel�MidasCallbackManagerLabel������ Hˆ®�������¨ ´��I÷â�¨����� ���<��������������MidasCallbackManagerLabel�����������.���y����/���Ç��� ���� ��˜���(���������������������������)�����������������'���� Hˆ®������� œ��߀� ISO8859-1Widget������ Hˆ®��� ���„ \��I÷â„���� � ���4H������������widget-0-1209-17�ger��������.��������•�/������� �,���� ���b���������—���������(������������������������)��������6�"�������!��������*��� ���������������������� ��ð���*é�����MidasCallbackManagerCancel�getTe�)éda����MidasCallbackManagerLabel�dasCal�ac����e������h�������(MidasCallbackManagerList�Cal���� Hˆ®�������¼ ��I÷â�¼����� ���„�����<��������MidasCallbackManagerList����fÁh������•�h� �t����� �,����������������SendMidas�����������)��������.���������/�������� �,�����������������P���� Hˆ®�������",��Midas Realize List CallbackList .�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|or���,p€ Hˆ®�������Ð����I÷â�Ð����� ���4�x������������widget-0-1207-25�ger��������.���������/��������†�,�����������������z�����������������������´��������˜MidasCallbackManagerText���MidasCallbackManagerLabel2������ Hˆ®�������¨����I÷â�¨����� ���<��������������MidasCallbackManagerLabel2����������.�������� �/������������ ���˜���(�������������������������� �)���������al������*���� Hˆ®�������$�è��߀ � ISO8859-1Callback Command���� Hˆ®������¨��I÷â����� ���<��������������MidasCallbackManagerText�2����������.��������º�/�������� �,��������}���������S�(���������������������������)���al����"���er����!���da�������an�������������*��� ���ì��� ����������*é����MidasCallbackManagerLabel2�cel�g���� Hˆ®��� ���,ä��I÷â,���� � ���„�����<��������MidasCallbackManagerCancel��fÁh��������h� �t���/�������������������}SendMidas��S���������+� �������.��������*�/���al��i���� er���(���da��������an������������¹�)��������������������������"���al�����!���er�����,����g���I�da������,���� Hˆ®���������߀� ISO8859-1Dismiss����� Hˆ®�������X��Midas Center Horizontal . 75���� Hˆ®��� ���Œ��I÷â���� � ���„�����<��������MidasCallbackManagerApply���fÁh��������h� �t���/�������������������}SendMidas��S���������-� �������.��������¨�/���al��h���� er�ø���(���da��������an�������������)��������������������������al������.���� Hˆ®�������À��߀� ISO8859-1Apply��� Hˆ®�������à��Midas Center Horizontal . 50���� Hˆ®��� �����I÷â���� � ���„�����<��������MidasCallbackManagerSave����fÁh��������h� �t���/�������������������}SendMidas��S���������/� �������.��������g�/���al��f���� er�ø���(���da��������an������������f�)��������������������������al������0���� Hˆ®�������D��߀� ISO8859-1Save���� Hˆ®�������d��Midas Center Horizontal . 25���� Hˆ®������T”��I÷âT����� ���@��������������MidasCallbackManagerClassLabel�h� �������.���������/��������)���� �}D���(����S�������������������������)����g��������f���������������� �����"��������!����f����$��� ���ä���-é�����MidasCallbackManagerClassText����,���-é�I����MidasCallbackManagerClassText�bel�da�ac������1���� Hˆ®�������È��߀� ISO8859-1Class��� Hˆ®������, 4��I÷â,����� ���@��������������MidasCallbackManagerClassText��h� �������.��������B�/�������� �(����}��������S��������������)���������"����g����!���f���� ����������*��� ���ü������ ��Ì���.é�f����MidasCallbackManagerWidgetText�llbac�.éer����MidasCallbackManagerWidgetText�llbac���� Hˆ®������< d��I÷â<����� ���@��������������MidasCallbackManagerWidgetText�h� �������.��������I�/�������� �(����}���������S�������������)������������� �g���"���f����!��������� ��������������ÿÿÿú�����f������� al�ä���)éer����MidasCallbackManagerLabel�dasCal�)éan����MidasCallbackManagerLabel�assTex���� Hˆ®�������, ¨��߀(� ISO8859-1Midas - Callback Manager���� Hˆ®������ ü��I÷â����� ���x�����0��������MidasErrorBox�anfÁh�dg��Te�\� �h�������.�����������/�����SendMidas��}���������2� ���������� �� ���.��������+�/��������>����������,�������¢���������¼� ��������� ��� ���ü������ �ì���da������3�er������4�������5���� Hˆ®�������& @��߀"� ISO8859-1Error Dialog Label������ Hˆ®�������' t��߀#� ISO8859-1Midas Error Message����� Hˆ®������� ´��߀� ISO8859-1 Acknowleged����� Hˆ®�������, ô��Midas PopDown ..Help MIdas PopDown ..Cancel�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|or�� �ì� Hˆ®������°����I÷â°����� ���8�Ô������������MidasResourceManager�dg� �������.��������B�/��������s�,���nd��p������ �����2������������������������ ��� ���Ä��� ��� ���¬���é������Apply���������������6� �������������¨������� �������”e������ˆ������€�������ta������lb������db������\a������TSave��hList����Apply�daCancel�cValueLabel�tText�bacClassText�plNameText�CalClass�anLabel�nc_Sep Hˆ®�������”���I÷â�”����� ���(��������������Label�es��������.���dg����/������������ ���„���(���������������������������)�������� ���������7ÿÿÿÝ Hˆ®�������È��߀� ISO8859-1Widget��1�� Hˆ®������tÔI÷â����� ���(��������������Class�es� �������.���dg����/��������&���� �����(������������������������������)����������"���������!���������$��� ���è�������������pl������� �Ì���é�6����ClassText�����¨�é������ClassText�”e�ˆ������8�� Hˆ®�������¨��߀� ISO8859-1Class �R Hˆ®�������ÔÁhI÷â������ ���,��������������NameText� ��� �������.�������U�/����&����(����������������������������)���������� ������������� ��è�������ÿÿÿù������������� ��Ð���"������� �!���������é������Label�����¨�é������Label�ext�”��� Hˆ®�������èI÷â�è����� ���,��������������ClassText���� �������.�������V�/����&���1�(�����������������������ÿÿÿÿ�)��������� ����������*��� ��Ð������ ��¸���"�������� �!��������é�����NameText����é������NameText��¨� �� Hˆ®�������ÌdgI÷â�Ì����� ���(��������������Text�Tex� �������.���������/��������Ø�(����������������������������)����������"���������!������������������������������ ���´���é����Apply�meText�� Hˆ®�������Ð��I÷â�Ð����� ���,��������������ValueLabel��� �������.��������/����Ø���Ë���� ���À���(��������������������������)����������������������������� ��¬���é������Text�����me������9bel� Hˆ®�������"�da߀� ISO8859-1Resource Valueˆ®�� Hˆ®��� ���$è�I÷â$���� � ���(��������������Cancel�b� �������.��������ò�/����������� �����(�����������������������������)����������*��� ���ü���"��������)�!���������1��� �´��fÁh�xt�����à� �ì��������9������������NameSendMidas����������:�ée����Apply�����8��������;���� Hˆ®�������$VM߀� ISO8859-1Dismissm_Add Hˆ®������� `�„Midas Popdown .^�� Hˆ®������X ”�I÷âX����� ���p�����(��������List�l�bfÁh��������T� �`���/�������������� ����SendMidas�����������<��������.���������/��������W�,�������D���������W�(����������xt�������������)������������me������������!���������"���e������� ��<���*��� � ���éa����ClassText�����d�é������ValueLabel�TSave���� Hˆ®�������" ¼CuMidas Realize List ResourceList .�ˆ®�� Hˆ®��� ����¬ ,�I÷â�¬���� � ���(��������������Save�l�b� �������.���� ���—�/��������÷���� ���œ���(���da����������������������7�)������������������������������������=���� Hˆ®������� h��߀� ISO8859-1Save���� Hˆ®�������, ,��߀(� ISO8859-1Midas - Resource Manager���� Hˆ®��� ���� \��I÷â����� � ���p�����(��������Apply�anfÁh��������T� �`���/�������������� ���œ��SendMidas������������>� �������.��������7�/����������� ���ð���(��������������������xt���\�)����������������������me�������������������?� Hˆ®�������  d(߀� ISO8859-1ApplyHˆ® Hˆ®������� ¸÷âMidas Center Horizontal . 50�idg Hˆ®������¸ èabI÷â¸����� ���4� ������������MidasIngotManager�����������.��������b�/���������,���da��g��������Þ�������������������� ��� ��������������@�������������� �������ˆ�������l�������P�������4��������������üMidasIngotManagerCreateNew��MidasIngotManagerClassText�xMidasIngotManagerNameText�abMidasIngotManagerClassLabel�MidasIngotManagerDismiss�bacMidasIngotManagerLabel�lMidasIngotManagerPanes�a��������|or�� �Œ¼�4 Hˆ®��� ���€����I÷â€���� � ���8H������������MidasIngotManagerPanes����������.����b���.�/�������N�,���g�������Þ������������(���������������������������)���������"��� ����!���ˆ�������l�������P������� 4 ���*��� �ô���*é�ü����MidasIngotManagerClassText�asIng�(ége����MidasIngotManagerDismiss�Nam�ex����d������hg������AMidasIngotManagerList�is��� Hˆ®�������¸����I÷â�¸����� ���€�����8��������MidasIngotManagerList���fÁh��������d� �p���/�������������g���SendMidas����������B��������.��������%�/�������� �,������������ ���J��� Hˆ®�������˜HMidas Realize List IngotList .� ���� Hˆ®������$hHeI÷â$����� ���4�x������������widget-0-1610-17�Lis��������.�������� �/���������,������������nd���!�������� ��������������������ì�������Ð�������°������������p������P������4�������������øMidasIngotManagerCallbackOption�MidasIngotValueOwnerLabel�ngMidasIngotValueOwnerText����MidasIngotManagerCallbackSave�ngMidasIngotManagerCallbackApply�gMidasIngotManagerCallbackLabel�eMidasIngotManagerCallbackText��MidasIngotManagerValueApply�MidasIngotManagerValueText�lMidasIngotManagerValueLabel���� Hˆ®�������¨ ��I÷â�¨����� ���<��������������MidasIngotManagerValueLabel���������.�������� �/������������ ���˜���(�������������������������� �)�����������������C��� Hˆ®�������Ü�R߀� ISO8859-1ValuefÁh Hˆ®������œ� I÷â����� ���<��������������MidasIngotManagerValueText��� �������.��������E�/���������(���������������������������)������������ ���è���"���������!���������$��� ���¼���+é������MidasIngotManagerValueApply������+é����MidasIngotManagerValueLabel�kOpt��� Hˆ®��� ����ÀÌ�I÷â�À���� � ���<��������������MidasIngotManagerValueApply�� �������.��������Æ�/������������ ���°���(�����������������������������)���������"���������!�����������������D��� Hˆ®�������ø59߀� ISO8859-1Apply��C Hˆ®������DÐ/sI÷âD����� ���@��������������MidasIngotManagerCallbackText���� �������.����Æ����/�������<�(��������������������������)���������"������� �!����������������������������� �����*��� Ma�ä��� ���Ap�����.é����MidasIngotManagerCallbackLabel��kOpt�/éda����MidasIngotManagerCallbackOption�lueOfÁh Hˆ®�������à�daI÷â�à����� ���@��������������MidasIngotManagerCallbackLabel����������.����Æ��� �/�������S���� ���Ð���(��������������������������)��������*��� ��¨���(é�����MidasIngotValueOwnerText�*�����������E�om Hˆ®������� \��߀� ISO8859-1Callback��� Hˆ®��� ����Ä T��I÷â�Ä���� � ���@��������������MidasIngotManagerCallbackApply��� �������.����Æ����/�������–���� ���´���(���������������������������)�������������������������ng������F���� Hˆ®������� ˆ߀� ISO8859-1Apply��� Hˆ®��� ����Ü drbI÷â�Ü���� � ���@��������������MidasIngotManagerCallbackSave���� �������.����Æ���ÿ�/�������‘���� ���Ì���(�����������������������������)�������������������������"���ng����!���er����������G� Hˆ®������� ”ˆ®ß€� ISO8859-1Save ISO Hˆ®������X ˆˆ®I÷âX����� ���<��������������MidasIngotValueOwnerText�Sav� �������.��������Y�/��������3�(����������������������������)������������ ��,���"����������!���������$��� ������*��� ���Ô��� ��������*é�G����MidasIngotManagerValueText�anage�*éac����MidasIngotManagerValueText�gotMa�*éal����MidasIngotManagerValueText�asIngitiv Hˆ®������L ¸rbI÷âL����� ���<��������������MidasIngotValueOwnerLabel�av��������.���������/��������-���� ��<���(������������������������������)���������������������������������������� �����"�������!����G����$��� ng�ì���(éal����MidasIngotValueOwnerText�Ing�(ége����MidasIngotValueOwnerText�ida�Ma������H���� Hˆ®�������(��߀� ISO8859-1Owner� ISO8859-1Is Toggle Button������������������������|or�� �¨Ü� Hˆ®�������ô����I÷â�ô����� ���@��������������MidasIngotManagerCallbackOption�� ���������� ��ä�������-����(�������������������)���������/��������°������������� ��´�����������.é�����MidasIngotManagerCallbackApply��$�����������I�ø�� Hˆ®�������7����߀3� ISO8859-1#Invoke Callback When Parent Createdb_Ent Hˆ®�������¤ I÷â�¤����� ���8��������������MidasIngotManagerLabel�c��������.���������/�������� ���� ��”���(�������������������������)����°��� ��������J���� Hˆ®�������\Cr߀� ISO8859-1Widget�E��� Hˆ®��� ����À�I÷â�À���� � ���<��������������MidasIngotManagerDismiss���� �������.������� �/���� ���Ç���� ���°���(������������������������ �)���� �����������������������������Kx� Hˆ®�������L��߀� ISO8859-1Dismiss fÁh Hˆ®������H$ntI÷âH����� ���<��������������MidasIngotManagerClassLabel�� �������.������� �/���� ���)���� ��8���(���������������������������)���� �����"���������!���������$���  ������da�������ge������� pp�à���*é����MidasIngotManagerClassText�Owner�*éng����MidasIngotManagerClassText�rText�������L�� Hˆ®�������X��߀� ISO8859-1Class � Hˆ®������0¸� I÷â0����� ���<��������������MidasIngotManagerNameText�l�� �������.�������B�/���� ��� �(������������������������� �)���������"���� ����!��������� �������������ÿÿÿø����da������� ge������ pp�à���&é����MidasIngotManagerLabel�ext�O�&é����MidasIngotManagerLabel�assTe��� Hˆ®�������èè��I÷â�è����� ���<��������������MidasIngotManagerClassText��� �������.�������D�/���� ���7�(������������������������B�)��������"���� ����!��������� ����������*��� �¼���)éda����MidasIngotManagerNameText�é���� Hˆ®��� ����Ø0��I÷â�Ø���� � ���<��������������MidasIngotManagerCreateNew��� �������.�������/���� ��n���� ���È���(���������������������������)���� �����������������������"������ �!���da����ng������M�� Hˆ®�������'0�߀#� ISO8859-1Create New Ingot...����� Hˆ®�������) ��߀%� ISO8859-1Midas - Ingot Manager�� Hˆ®��� ����À`��I÷â�À���� � ���,�|������������WidgetList�a�������������������� ���X���&����������!é������WidgetListButtons��������������������°��������œWidgetListButtons��WidgetListMenu��ity� Hˆ®��� ����0 k_I÷â�0���� � ������������������WidgetListMenu��� �� Hˆ®�������„ xdgI÷â�„����� ���4��������������WidgetListButtons��������������������,��������Ö�������q�/���dg���a����on���� ����������� Hˆ®������ À��I÷â ����� ���<�Ü������������MidasExpressionEvaluator������������.���������/��������t������������������� ��� ���Ì������������ ��� ��¤������dg��� �'éon����MidasEvalEvaluateButton�����������N� ex����������n������ìa������Ô������Àd������¨g������T������x������d�������PMidasEvalTypeText�alMidasEvalTypeLabel�gMidasEvalClearButton�y�gMidasEvalEvaluateButton�MidasEvalDismissButton�eMidasEvalResultText�MidasEvalResultLabel�ly�MidasEvalExpressionText�MidasEvalExpressionLabel�eLa�1�� Hˆ®�������¨ \��I÷â�¨����� ���<��������������MidasEvalExpressionLabel������������.�������� �/������������ ���˜���(������������������������� �)��������dg������O �� Hˆ®������� ”��߀� ISO8859-1 ExpressionÁh��� Hˆ®������ T��I÷â����� ���8��������������MidasEvalExpressionText�� �������.���������/��������.�(���������������������������)���������"���������!�������*��� �O�ì���$��� da�Ä���%���at����'é����MidasEvalEvaluateButton������'én����MidasEvalEvaluateButton���À��� Hˆ®�������Ø Œ59I÷â�Ø����� ���8��������������MidasEvalResultLabel�xt���������.���������/��������P���� ���È���(���������������������������)���������*��� � ���'é�O����MidasEvalExpressionText��'���������P���� Hˆ®�������¸��߀� ISO8859-1Result��������������������������|or�� �Ü� Hˆ®����������I÷â����� ���4��������������MidasEvalResultText�� �������.���������/��������q�(���������������������������)�����ÿÿÿü�"���������!������������ �ð���*��� da�Ì���%���ss���� ��������$é������MidasEvalResultLabel�'�$é������MidasEvalResultLabel��ÀfÁh Hˆ®��� ����Ô��DeI÷â�Ô���� � ���8��������������MidasEvalDismissButton����������.��������/����q���®���� ��Ä���(�������������������ÿü����)��������*��� �� ���"é������MidasEvalTypeLabel�� �����������Q���l Hˆ®�������,59߀� ISO8859-1Dismissave n Hˆ®��� ����ð�I÷â�ð���� � ���8��������������MidasEvalClearButton�n��� �������.������#�/����q���‰���� ��à���(��������������������ÿü�����)���������*��� ��¸���"�������� �!���va����&é�����MidasEvalDismissButton�asEva�tL������Rtion Hˆ®�������Lˆ®ß€� ISO8859-1Clear�� Hˆ®�������èT��I÷â�è����� ���4��������������MidasEvalTypeLabel�n� �������.���������/��������„���� ���Ø���(����������������������������)�������������������������������� ���´���!é����MidasEvalTypeText�ssButt�va������SesMe Hˆ®�������0„�߀,� ISO8859-1Result�� ISO8859-1TypeesMe Hˆ®������„� I÷â����� ���4��������������MidasEvalTypeText��n� �������.��������›�/��������S�(����������������������������)���������"���������!������������ ���ð���%��������� ��������*��� va�Ì���#éss����MidasEvalResultText���R�#é������MidasEvalResultText���À�� Hˆ®�������/Ì��߀+� ISO8859-1Midas: Expression Evaluator����� Hˆ®��� ����ðø�I÷â�ð���� � ���8��������������MidasEvalEvaluateButton�� �������.����›���/����S���'���� ��à���(���������������������������)����ÿÿÿÿ�"������� �!���������*��� ��¸���(é������MidasEvalExpressionLabel�Eva�tT������T���( Hˆ®�������@59߀� ISO8859-1Evaluate Hˆ® Hˆ®������0HstI÷â0����� ���0�¨������������MidasStartup�uat��������.��������0�/������a�,����'��©���������á��������� ��� ���˜����������������ÿÿ����� ������U��������������������v�������ôn�������àMidasStartupDismiss�MidasStartupSave�ResMidasStartupText����MidasStartupLabel�T� Hˆ®������� |��I÷â� ����� ���4��������������MidasStartupLabel�����������.����0��� �/����a������� ©����(����á���������������������)�������� ��������Vs Po Hˆ®�������6Ä�߀2� ISO8859-1"Commands to be executed at startup��I÷â Hˆ®������4 |��I÷â4����� ���4��������������MidasStartupText�art��������.����0��� �/����a���!�,���©�� �����á���Ž�(������������������������� �)��������"���������!���������*��� ��������������ô������� �à�ð��� ���up����� éda����MidasStartupSave�Sta�!éxt����MidasStartupLabel�T����kMan Hˆ®��� ����¸ ÌdaI÷â�¸���� � ���4��������������MidasStartupSave�art� �������.����0����/����a���½���� ©�¨���(����á����������������������)�����������������������������������WLabe Hˆ®������� y߀� ISO8859-1Save�˜�� Hˆ®��� ����ü è��I÷â�ü���� � ���4��������������MidasStartupDismiss�� �������.����0���ë�/����a���À���� ©�ì���(����á������������������������)����������"��������!��������������ÿÿÿÿ����������� �Ì��� é�ô����MidasStartupSave�up�������X��� Hˆ®������� �߀� ISO8859-1Dismiss��� Hˆ®�������! ,��߀� ISO8859-1 Midas Startup* Hˆ®������T `acI÷âT����� ���,�p������������MidasInfo�up��������.��������–�/����ë���`�����À�������������,�������P�������������D�������0����������������������ô��������à��������ÌMidasInfoUpButton�taMidasInfoButtonBox�MidasInfoNameText�upMidasInfoClassLabel�MidasInfoNameLabel�MidasInfoClassText�dMidasInfoLabel�a Hˆ® Hˆ®�������À ˜daI÷â�À����� ���0��������������MidasInfoLabel��� �������.����–��� �/����`������� ��°���(�����������P����������� �)����������������"������� �!���������������Y������������������������|or�� � ˆŒd Hˆ®�������#����߀� ISO8859-1Selected Widgetget-0 Hˆ®������8����I÷â8����� ���4��������������MidasInfoClassText��� �������.���� ���A�/�������]�(���������������������ÿÿÿÿ�)���� ����"���������!�������� ���� �����*��� ������� ���ð���$��� ���Ì���!énf����MidasInfoNameText�uttonB�!éda����MidasInfoNameText�nfoCla�!él�����MidasInfoNameText�dasInf�)�� Hˆ®�������Ø�<��I÷â�Ø����� ���4��������������MidasInfoNameLabel��� �������.���� ����/�������-���� ���È���(�������������������� ����)����������������*��� � �¨���é�����MidasInfoLabel��� ���������Z��� Hˆ®�������Œ�߀� ISO8859-1Name:!�� Hˆ®�������ô|�I÷â�ô����� ���4��������������MidasInfoClassLabel�� �������.���� ����/�������b���� ���ä���(��������������������� ����)��������������������� ������� ��À������nf����"é������MidasInfoClassText�foNam�ut������[�.�� Hˆ®�������¬i߀� ISO8859-1Class:���an Hˆ®������P¸��I÷âP����� ���4��������������MidasInfoNameText�l���������.���� ���A�/��������(��������������������������)���� �������� �,���"��������!���� ���� ������������nfÿÿÿû������������� nf���$��� �f�ä���!éut����MidasInfoUpButton�nfoNam�"énf����MidasInfoNameLabel�foNam�"éda����MidasInfoNameLabel�foLab���� Hˆ®�������Øì��I÷â�Ø����� ���4��������������MidasInfoButtonBox��� �������.���� ����/�������Ÿ����������(�������������������� �����)������� �"���������!���� ����*��� ��´���"énf����MidasInfoClassText�f������ Hˆ®�������üT��I÷â�ü����� ���4��������������MidasInfoUpButton���� �������.���� ��-�/�������!�(����������������������������)���� �����,�������"�"��������!���� ���������������nfÿÿÿä����nf������� �f�Ø���"é�f����MidasInfoNameLabel�foUpBal Hˆ®������ÀD�I÷âÀ����� ���4�´������������MidasCreateNewIngot���������.���� ���c�/������™�,�������R��������‹������������� ����� ��� �����"é�����MidasCreateIngotOk�����������ÿ������¤�������ˆ�������l�������Xa������<p������(a������MidasCreateIngotCancel�fMidasCreateIngotOk�aMidasCreateIngotNameText�EvaMidasCreateIngotUp�aMidasCreateIngotOwnerText�BuMidasCreateIngotOwnerLabel�tMidasCreateIngotNameLabel��e��1 Hˆ®������@X�I÷â@����� ���<��������������MidasCreateIngotNameLabel���� �������.�������� �/������������ ��0���(������������������������������)��������"���da����!���ot����$��� ������������� ������������� ���à���(é������MidasCreateIngotNameText�a�(é����MidasCreateIngotNameText�Cre�ot������\sCal Hˆ®������� 0Te߀� ISO8859-1Name��< Hˆ®������ ˆ��I÷â����� ���<��������������MidasCreateIngotOwnerLabel��� �������.���������/��������š���� �����(����������������������������)��������"���da�����!���ot������������� ���������������������� ���à���"é������MidasCreateIngotOk�eText�������]lbac Hˆ®������� ¸ex߀� ISO8859-1Owner€( Hˆ®������\ ädaI÷â\����� ���<��������������MidasCreateIngotOwnerText���� �������.��������L�/��������d�(����������������������������)�������������ÿÿÿû����da����"���ot����!���������$��� ��8������ �� ������ ���à���*é������MidasCreateIngotOwnerLabel��*é�]����MidasCreateIngotOwnerLabel�ot�"é�\����MidasCreateIngotUp�aMida @�� Hˆ®�������ì I÷â�ì����� ���4��������������MidasCreateIngotUp�e� �������.�������+�/����L���L�(����d������������������������)���������"�������� �!���ÿû��������ÿÿÿÿ������������ ��À���*é������MidasCreateIngotOwnerLabel������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|or��� 0�à Hˆ®������p����I÷âp����� ���<��������������MidasCreateIngotNameText������������.��������f�/�������� �(������������������������ÿÿÿÿ�)������������������������������� ��D������ �����,������°�"���da�����!���ot����$��� ���ì���)ére����MidasCreateIngotOwnerText��]�����)ére����MidasCreateIngotOwnerText��\�����)ére����MidasCreateIngotOwnerText��aMidael�c Hˆ®��� �����acI÷â���� � ���8��������������MidasCreateIngotCancel�t� �������.��������Ü�/��������^���� ���ô���(������������������������������)�������������������������������� ���Ð���"���������!���������"é������MidasCreateIngotOk�ére�da������^et� Hˆ®�������ˆ߀� ISO8859-1Cancel������ Hˆ®��� ����¸¤��I÷â�¸���� � ���4��������������MidasCreateIngotOk�c� �������.���������/��������[���� ���¨���(����������������������������)������������������������������������_� Hˆ®�������Ø”߀� ISO8859-1Ok� Hˆ® Hˆ®��� ����¨I÷â����� � ���,�°������������MidasHelp�eI��������.��������–�/�������h�����[����,�������Æ��������¢���� ��ˆ���&���������&é������MidasHelpBulletinBoard������������������è���������ÐMidasHelpSearchDialog�eIMidasHelpBulletinBoard��é�� Hˆ®��� ����LØI÷â�L���� � ���8��������������MidasHelpSearchDialog������������������Clas Hˆ®�������Äð��I÷â�Ä����� ���8�d������������MidasHelpBulletinBoard����������������������[������������ ��������������´��������¤��������MidasHelpDismiss�etiMidasHelpSearch�MidasHelpGoBack�dg Hˆ®��� ����œT��I÷â�œ���� � ���0��������������MidasHelpGoBack���������.�������� �/����������� ��Œ������� ���������� ������������������da������`�´�� Hˆ®�������0me߀� ISO8859-1Go Back�I÷â Hˆ®��� ����Üä��I÷â�Ü���� � ���0��������������MidasHelpSearch������������ ���Ì�����������(������������ ����)��������*��� ��¬������ ��Œ���éda����MidasHelpGoBack�sHel�éh�����MidasHelpGoBack������da������a8859 Hˆ®�������ˆ®ß€� ISO8859-1 Search...$� Hˆ®��� ����Ø ��I÷â�Ø���� � ���4��������������MidasHelpDismiss���� ���������� ���È������������(��������������o�)����������.�������o�!���������"�������� �*��� oB�¨���é����MidasHelpGoBack�ack��������b���� Hˆ®�������@pl߀� ISO8859-1Dismiss� Hˆ® Hˆ®������µ 0óZ �9�����������ì���ö������ ��-��:��L��Z��f��r��{��„����š��¡��±��½��Ì��×��ä��ï��þ�� ����*��8��F��R��Z��g��s��ƒ������©��®��¾��È��Ö��à��ê��û���� ��������0��H��W��n��„��‘��œ��alignment�autoUnmanage�borderWidth�bottomAttachment�bottomOffset�bottomWidget�cancelLabelString�defaultButton�dialogStyle�dialogTitle�editMode�editable�fontList�fractionBase�height�helpLabelString�labelString�leftAttachment�leftOffset�leftPosition�leftWidget�listSizePolicy�marginHeight�messageAlignment�messageString�messageWindow�okLabelString�orientation�pattern�resizePolicy�resizeWidth�rightAttachment�rightOffset�rightPosition�rightWidget�rows�scrollingPolicy�subMenuId�topAttachment�topOffset�topWidget�visibleItemCount�width�workWindow�x�y�createCallback�activateCallback�browseSelectionCallback�cancelCallback�commandEnteredCallback�defaultActionCallback�helpCallback�okCallback�valueChangedCallback�����.�� Hˆ®������É dóZ ������������X���r���‚���–���²���¿���Ò���æ���ù�� ����2��K��]��r��‡��”��¯��XmCreateArrowButtonGadget�XmCreateCommand�XmCreateErrorDialog�XmCreateFileSelectionDialog�XmCreateForm�XmCreateFormDialog�XmCreateLabelGadget�XmCreateMainWindow�XmCreateMenuBar�XmCreatePanedWindow�XmCreatePromptDialog�XmCreatePushButtonGadget�XmCreateRowColumn�XmCreateScrolledList�XmCreateScrolledText�XmCreateText�XmCreateToggleButtonGadget�XmCreateWarningDialog����������4��������������üMidasIngotManagerCreateNew��MidasIngotManagerClassText�xMidasIngotManagerNameText�abMidasIngotManagerClassLabel�MidasIngotManagerDismiss�bacMidasIngotManagerLabel�lMidasIngotManagerPanes�a��������midaswww-2.1/uid2c����������������������������������������������������������������������������������100777 � 21345 � 173 � 50000 6003417145 12353� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@�������������������Ë���€���À��P�@���@�����ˆ�����Ð������Ð��è��¨�����P�����¸���‚��à������à��p��P�����GW �����(��$����� ���@����@�������È��������€����� 92453-07A���09.74.20����0e����€����� 92453-07A���08.56.05����*v þ���� �����8���2$Header: crt0.s,v 70.8 92/05/19 15:52:46 ssa Exp $�����@À������������ ÿÿÿÿ��������������à��������� ��� ÿÿÿÿ��������������X"���� ���Ù�����Ù������L������������X ���!Ü��Ô��Ü��Ô������t������������X ���&°������°����������„������������X ���&°������°����������������������X ���&°�� è��°�� è������ ������������X 8���0˜��`�� ˜��`������¬������������X H���1ø���(��!ø���(������è������������X I���2 ������" ����������ü������������X X���2 �����" ��������8�����������>(����@�����@������������`�����������>(���@����@����������L�����������>( ���@����@����������`�����������>(���@��H@���H�����x�����������>(���AP���T@�P���T�����„�����������>(���A¨����@�¨���������˜�����������>(���A¨����@�¨���������¨�����������>(&���A¨���P@�¨���P������ �����������>((���Aø���@�ø��������À�����������>(P���������@����������Ð�����������>(R���������@���������à�����������Y ���� ���$�������? ����@���@����� $PRIVATE$������$DLT$������$PLT$������ $SHLIB_DATA$�������$TEXT$����� $SHLIB_INFO$������� $DATA_START$������� $MILLICODE$����$LIT$������ $LITSTATIC$����$CODE$�����$UNWIND_START$�����$UNWIND$MILLICODE$�����$UNWIND$������� $UNWIND_END$�������$RECOVER_START$����$RECOVER$MILLICODE$���� $RECOVER$������ $RECOVER_END$������ $PFA_COUNTER$������$PFA_COUNTER_END$������$DATA$����� $STATICDATA$������� $SHORTDATA$����$SHORTSTATICDATA$������$GLOBAL$������� $SHORTBSS$�����$BSS$���0����������������0�����$���������� �0�����8������� @��0����À�������@�0 ���Ð���������Ë0����Ü������� @��U��ø���������° �����L���������d0 ������������k0 ������������s0 ���$���������{0 ���4��������� ˜0 ���H���������!ø0 ���X���������" 0 ���l���������" 0 ���€�������@��0 ����������@�ü0 ��� �������@�ø0����À������� @�0����Ð������� @�0����ä������� @� �����\������� @� �����p������� @� �����€�������@�¬ �����˜�������@� �����¨�������@� �����¼������� @�P �����Ô�������@�¨ �����ð���������° ��������������°�����ô�������@�0�����������@�  ����������� @�ˆ Q��(���������— P��8���������› ��D���������Ï A��P���������÷ ���\���������C ����h���������  ���x���������c ���„���������ƒ ������������£ ���œ���������à ���¨���������ã ���´���������0 A������������³ ����ä������� @�ÐU��ì�������0��PU��ø������� ��hU�����������€0 @�����������“U�� �������8��˜0 ��,��������� _U��<�������H��0U��H���������HU��T����������xU��d�������(��`U��D�������@�� D 0����ð���������ß 0���� ���������ß 0�������������ï 0����,���������ÿ 0����<��������� 0����L��������� ����è���������4 ����ô���������ü ��������������P 0����\���������K 0����l���������c ���� ���������t 0����|��������� 0����Œ���������§ �������������¼ 0����œ���������× 0����¬���������ï ����$��������� 0����8���������3 ����4���������D ����@���������` 0����¼���������‹ ����P���������œ 0����Ì���������¯ 0����Ü���������à ����\���������Ð 0����ì���������Û 0����ü���������ç ����h���������� 0���� ��������� ����t���������$ 0�������������7 ����€���������„ ����Œ���������8 ����”���������H ���� ���������p ����¨���������| ����°���������ˆ ����¸���������” ����È���������¼ ����Ð���������Ì 0����,���������× 0����<���������ï ����Ø��������� 0����L���������# 0����\���������? ����ä���������H 0����l���������C 0����H���������W �������������x ����˜���������€ 0����(���������“ ����¼��������� 0����0���������" 0����<�������@�0����H�������@�0����P���������" 0����\�������@�0����h�������@�0�������������0���� ����������������T����ÿÿÿÿ�������ø����ÿÿÿÿ��È���������ÿÿÿÿ��°�����H����ÿÿÿÿ�������ø����ÿÿÿÿ��°�����d����ÿÿÿÿ�������ì����ÿÿÿÿ��°����� ����ÿÿÿÿ��°�����D����ÿÿÿÿ��(�����<����ÿÿÿÿ��0 A���������°��;���main������� __text_start������� ___stack_zero������ __data_start������� $START_RTN$���� $str_lit_sym$������ $THIS_DATA$����$THIS_SHORTDATA$������� $THIS_BSS$�����$THIS_SHORTBSS$����$THIS_STATICDATA$������$THIS_SHORTSTATICDATA$����� $THIS_LIT$�����$THIS_LITSTATIC$�������$$stat_0������� __map_dld������error������strlen�����itoa�������__exit�����syserror�������open�������close������read�������write������lseek������mmap�������$global$�������$START$����$ARGV������ _fp_status�����_start�����_mcount����_clear_counters���� _sr4export����� $UNWIND_START������ $UNWIND_END����$RECOVER_START����� $RECOVER_END������� __dld_flags���� __dld_hook����� __dld_list����� __SYSTEM_ID���� _SYSTEM_ID����� $PFA_C_START������� $PFA_C_END�����errno������_etext�����_end������� __dld_loc������ $$dyncall������ $$divI_10������$$remI�����Yuid2c ccom options = -Oq02,al,ag,cn,Lm,sz,Ic,vo,lc,Mf,Po,es,rs,sp,in,Pi,fa,pe,Rr,Fl! -Ac������HPC ������� HP92453-01 �������A.09.77����M$2����printf�����exit�������fopen������ converttoc�����fclose����� getfilename����strcpy�����strcat�����__filbuf�������fprintf����LIBC//Mdiv_const.o�����0HPUX Precision Architecture vers PA2.0 assembler�������92453������A.08.12 (sllic PA1.1)������$neg3������$pos�������$neg�������$neg5������$neg6������ $pos_for_17����$neg10����� $neg_for_17����$neg12�����$neg15�����$neg17�����$u17�������$neg7������$7�����$pos7������$1�����$2�����$8����� $neg7_shift����$3�����$4�����$neg9������$neg14�����$$divide_by_constant�������$$divI_2�������$$divI_4�������$$divI_8������� $$divI_16������$$divI_3�������$$divU_3�������$$divI_5�������$$divU_5�������$$divI_6�������$$divU_6������� $$divU_10������ $$divI_12������ $$divU_12������ $$divI_15������ $$divU_15������ $$divI_17������ $$divU_17������$$divI_7�������$$divU_7�������$$divI_9�������$$divU_9������� $$divI_14������ $$divU_14������ LIBC//MremI.o������t1�����finish�����LIBC//MdyncallU.o������noshlibs�������etext������edata������end����_etext�����_edata�����_end������� __SYSTEM_ID���� _fp_status�����etext������edata������end����_etext�����_edata�����_end������T��´��Ä��Ø����0’����-³yô������p��ˆ��À��Ì����������������������|��ˆ��À��Ì����������������������¤��ˆ��À��Ì����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Nö0�������p�������� ���€������Ì�����l���mÿÿÿÿ������ø��¨������� ��������ÿÿÿÿ����ÿÿÿÿÿÿÿÿ���������������������������ÿÿÿÿÿÿÿÿ����ÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿ���@�����ÿÿÿÿÿÿ���@���U�ÿÿÿÿÿÿ���$@���U�ÿÿÿÿÿÿ���h��8��U�ÿÿ���)�����2�����9�����?�����F�����K�����L�����S�����Z�����a��uid2c�/lib/libc.sl�errno�_SYSTEM_ID�_end�__filbuf�_start�fopen�strcat�exit�fprintf�fclose�strlen�strcpy�main����X€·Z�ëàÀ�Ó]ÁX€·Z�ëàÀ�Ó]¢X€·Z�ëàÀ�Ó]ƒX€·Z�ëàÀ�Ó]d€@"·Z�Ó]> Zšè�—Z�Ó]> Zšè�·Z��Ó]9 Zšè�8 =€@·Y� :Zè�� @·Z�Ó@ ZZè�ˆ·Z��Ó] ZZè��° ¹€@"ÓZÁ·Y� :šè��€�—Z�ÓZÁÓ@= Zšè��øÓZÁ·Z�Ó@= Zšè�� ÓZÁ·Y� :Z�Ó]yÐa: =Ó]ùÐá: =Ó] ùÐ á:ëàÀ� =€@�]ÓZÁ¯Bu ZZ—Z�ÓZÁ ZZÓ]yÐa: =Ó]ùÐá: =Ó] ùÐ á: =ëàÀ�  €@�]ÓZ¢¯BÅ Zš—Z�ÓZ¢èM ZšÓZ¢·Y� :šè}�€@�]¯BeÓ]yèõ—Z�·Z�è5�€@*·Z�Ó@yÐa Aè—Z�Ó@yÐa Aè•·Z��Ó]yÐa Aèµ ¹€@’·Z�Ó@] ZÚÓ]¹Ð¡: =Ó] yÐ a: =�]ÓY(ù«¹�ÓZèëàÀ«YÝÓY8ø—Z�Ó@] ZÚÓ]¹Ð¡: =Ó] yÐ a: =�]ÓY(ù«¹�ÓZèëàÀ�  «YÕÓY8ø·Z��Ó]Y ZÚè½ ¹€@*·Z�Ó@YÐA Aè…—Z�Ó@YÐA Aèí·Z��Ó]YÐA Aè ¹€@ èåÓZÁ—Z�èmÓZÁ³ � @V    @�A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½ !A ½Ë¡ÀF� ! !V�  ëàÀ��@ÇÖÀÖÀJÓ�JÖ��À¡� âÀ��kÂ?ÑKu?QKs?Y ¡� â ��kÂ?Ñ#`(�7{7Þ�×ÀK#��+ÿÿh# ð'y�  ��4¥��Kd?ù¤Eke?ù(à¨43 `'y� �H?��‹ó zG+Á��4>��DEFYXZ#à �çà/(BZYX^kÀ?ù#à �çà-`B� è@À�@è@À�@æÀ �BKÂ?Ñ�@¡� à@��@kÂ?ÙoÃ�kÄ= kÅ=kÆ=kÇ=!kÈ=)kÉ=1kÊ=9kË=AkÌ=IkÍ=QkÎ=Y+ÿÿDCGE4: �Y#à0�çà(ÀBFŸ 04 ?ÿ4ú (4��Y#à0�çà%0B7Ù>I4�ZX#à0�çà)@Bƒˆ *4ú `4��Y#à0�çà%0BGÚ>M4ƒ] BGÓ>I4‚t *4ú �Y�X#à0�çà%0BKÙ>Z�X#à0�çà)ÀB7Ù=é4�`ZX#à0�çà)@B‹ˆ GÖ=í†È *4ú è�Y�X#à0�çà%0BKË=ùKÙ> KÎ>KÊ>)kÆ?™kÙ?‘4� 4 ��Z Y W#à0�çà*�BLŸ 2+ÿÿ4:�4ù 0 X#à0�çà%0BK×>!kÆ?™k×?‘4��ZY4�#à0�çà*�BHŸ 2+ÿÿ4:�4ù @ X#à0�çà%0B…@ ˆ ÈkÉ?™kÀ?‘4�4�,Z Y#à0�çà*�BÜ 2+ÿÿ4ù P4:� X#à0�çà%0BZ N#à0�çà)�BKØ>1Kß> lkÍ=™kÅ=¹kÄ?kÌ=¡kÕ=©  á+ÿÿ4< ð+`��h(�(� �4"��(��4$@+`��kÆ?™4?ÿWkÜ=±XkÂ?‘kÄ?‰4%�kÅ?y7Ù=™kÃ?q#à �çà- BKÂ<ÙKÎ=YKÍ=QKÌ=IKË=AKÊ=9KÉ=1KÈ=)KÇ=!KÆ=KÅ=KÄ= è@À�OÃ=kÂ?ÙoÃ�kÄ? kÅ?kÆ?+ÿÿFDEC49 `4� 4�#à0�çà)€BZ#à0�çà'˜BYX4�#à0�çà)€B„€ JZ#à0�çà'˜BYX4�#à0�çà)€B„  ª+`��H:��7Ù?‰#à0�çà'èB4y p4�4�#à0�çà)€B7Ú?‰#à0�çà'˜B7Ù?‰X4�#à0�çà)€B4y €4�4�#à0�çà)€B+`��H:��#à0�çà(€BKÂ>ÙKÆ?KÅ?KÄ? è@À�OÃ?@ �\è@À��\B7†à B?à?í7œ�è@ÀTS 4�4�Z#à �çà*¨�@7¿�` ´ÿ�Z#à �çà&`�@®¿_•Sè@À ä à4� À"@è�’�@è@À�@ ä à4� À"@è�R�@è@À�@ ä à4� À"@è��@è@À�@ ä à4� À"@è��Ò�@è@À�@ ä à4� À"@è��’�@è@À�@ ä à4�& À"@è��R�@è@À�@ ä à4�Ž À"@è���@è@À�@+`��4!��h<��4?ÿè@À�@è@�à�@KÂ?Ñ�@¡� à@�Ku?¡Ks?© ¡� â ��kÂ?ÑKu?Ks?‰ ¡� â ��kÂ?ÑKu?aKs?i ¡� â ��kÂ?ÑKu?±Ks?¹ ¡� â ��kÂ?ÑkÂ?ÙoÃ�€B hC+ÿÿè_ 4: è_-�Zè���\+ÿÿ4: Èè_ÍHy�Ï‚€hKÂ?Y+ÿÿHz�è_ý49 À‡€?¥kÜ?‘Hy�è@�ðKÚ?‘è_õKÚ?‘�\KÂ?Yè@À�OÃ?Ku?ÑKs?Ù ¡� â ��kÂ?ÑKu?qKs?y ¡� â ��kÂ?ÑKu?‘Ks?™ ¡� â ��kÂ?ÑKu?AKs?I ¡� â ��kÂ?ÑkÂ?ÙoÀkÄ=‰kÅ=‘EkÚ=¡è@XZkÜ=©7Ú=ùè_åYKÙ=©è_Í7Ú>Á+ÿÿ49 øè_Ý7Ú=ù+ÿÿ49è_-7Ú=ùkÅ=9‡€!PkÜ=±KÔ=¡J��C4<?ÿœ€€`ú h–6Ä� dˆBÜ��+ÿÿKÚ=±49@7Ø>Áè_UWH���D7â?ÿ b€Œ@`â h7µ� uˆC¼��‡Ÿ!j4y�kÙ=¹4�(4„�ˆ¤@À+ÿÿKÚ=±49hè_µXè��ÀHs��è_ÅKÚ=¡è +ÿÿ+ÿÿ4:è_E7Ù=ùè_e4�è��èKÂ=Yè_eKÚ=9èè_MKÚ=9è��jKÚ=±49pè_õX�DHs��6z?ÿ@¥ z€K×=¹Jÿ��7ø�ø€Cü��Ÿ>·4„�+ÿÿKÚ=±è_u49€è_ÕKÚ=±KÂ=YKÅ=‘KÄ=‰è@À�OÃ=Ku?ÁKs?É ¡� â ��kÂ?ÑkÂ?Ù7Þ€YkÚ>è_}7Ú>Ñè_•KÚ>7×>É —7Ü>Ñà�KÂ>Yè@À�7Þ>��Ü��PX���������T��ŒH�����������¬���������È��d�������h��l���������p��t���������x�����������”��”� ����0��˜��È�������Ì��ð����������ô��<����������@��\���������`��|���������€��œ��������� ��¼���������À��Ü���������à��ü��������������������� ��4���������°��,�€������� @�€���(�� \�� ”��€�����° ����8 ����P ����0 ���� D ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/lib/dld.sl�ERROR couldn't open dld.sl��ERROR reading dld.sl����ERROR bad magic number/system id for dld.sl�ERROR bad dld.sl hpux aux header���� (text)� (data)� (bss)��crt0: �� errno:� �������uid2c: no file input ��r���uid2c: can't open %s ���.uic����w���uid2c: can't open %s ���char %s[] = { %d��,%d�,%d ���� }; ����$Header: mapdld.c,v 70.3 92/02/05 16:07:02 ssa Exp $����ERROR: mmap failed for dld��������x������°������€������H������h������`������P������˜������ D������0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/midas.uic������������������������������������������������������������������������������100666 � 21345 � 173 � 445436 6003417146 13264� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������char midas[] = { 18,124,111,114,0,1,0,1,85,82,77,32,49,46,50,0,0,0,77,111,116 ,105,102,32,85,105,108,32,67,111,109,112,105,108,101,114,0,0,0,0,0 ,0,0,0,0,0,0,0,86,50,46,48,45,48,48,48,0,0,84,104,117 ,32,74,117,108,32,50,48,32,48,57,58,52,51,58,53,53,32,49,57,57 ,53,10,0,0,0,0,0,118,117,105,116,68,117,109,109,121,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,50,46 ,49,0,0,0,0,0,0,0,2,0,114,0,119,0,1,0,4,0,99,0 ,14,0,14,0,0,0,126,0,106,0,1,0,0,0,0,0,0,0,1,0 ,1,0,0,0,1,0,11,0,1,3,20,0,1,7,84,0,1,5,108,0 ,1,5,252,0,1,7,24,0,6,15,36,0,6,14,216,0,6,5,108,0 ,1,9,24,0,3,9,228,0,3,5,248,0,3,3,8,0,3,0,0,0 ,1,12,68,0,1,11,224,0,1,14,32,0,1,14,84,0,1,14,136,0 ,1,14,188,0,3,5,188,0,21,14,188,14,240,0,13,13,72,136,174,0 ,1,0,3,0,1,0,1,0,0,1,240,0,0,0,0,24,88,27,183,0 ,15,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,72,101,108,112 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,67,114,101,97,116,101,78,101,119,73,110,103 ,111,116,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,73,110,102,111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,83,116,97,114,116,117,112,0 ,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,69,120,112,114,101,115,115,105,111,110,69,118,97,108,117,97 ,116,111,114,0,0,0,0,0,0,0,0,87,105,100,103,101,116,76,105,115 ,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,82,101,115,111,117,114,99,101,77,97,110,97,103,101,114,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,69,114,114,111,114,66,111,120 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,70,105,108,101 ,115,83,101,108,101,99,116,111,114,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,70,105,108,101,76,105,115,116,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,67,117,115,116,111,109,69,120,105,116,68,105,97,108,111,103,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,95,77,97,105,110,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,72,136,174,0 ,1,0,2,0,15,0,1,0,0,0,244,0,0,0,0,9,137,118,56,1 ,0,0,40,0,40,0,0,0,0,0,12,0,0,0,0,0,28,0,0,0 ,44,0,0,0,16,2,2,2,12,0,0,0,0,0,0,0,1,0,0,0 ,0,0,0,0,254,255,255,255,255,2,0,0,0,196,2,0,0,0,166,2 ,64,56,194,146,178,67,99,2,136,2,194,64,96,132,10,37,2,0,130,130 ,2,0,0,129,194,35,192,128,192,130,32,128,65,128,66,0,6,32,128,2 ,88,112,16,128,82,21,33,8,128,210,133,1,4,128,130,4,12,2,192,130 ,8,0,1,128,2,32,129,0,128,10,194,64,0,128,2,1,32,0,128,130 ,0,16,0,129,130,50,8,4,225,2,16,4,4,129,202,112,2,132,131,74 ,96,1,142,130,226,193,0,138,131,2,65,16,14,129,18,32,16,4,193,18 ,24,56,4,129,194,9,40,4,128,2,68,56,0,128,18,66,16,0,128,2 ,225,16,0,128,130,161,0,0,192,66,224,0,0,128,34,64,0,0,128,18 ,64,0,0,128,10,0,16,0,144,134,16,17,17,145,254,255,255,255,255,0 ,0,0,0,13,72,136,174,0,1,0,2,0,19,0,2,0,0,0,40,2 ,8,0,0,0,143,206,190,0,2,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,13,72,136,174,0,1,0,2,0,15,0,1,0 ,0,0,244,3,20,0,0,9,137,118,56,1,0,0,40,0,40,0,0,0 ,0,0,12,0,0,0,0,0,28,0,0,0,44,0,0,0,16,2,2,2 ,12,0,0,0,0,0,0,0,1,0,0,3,96,128,0,120,14,144,64,1 ,70,60,8,33,130,33,200,4,18,100,48,16,3,12,24,16,32,0,0,0 ,8,64,0,0,0,12,128,0,0,0,4,0,1,0,0,2,0,2,0,192 ,3,0,252,255,255,2,0,2,0,240,3,0,2,0,240,3,0,114,240,240 ,3,0,138,9,241,3,0,114,113,240,3,0,171,168,240,3,0,115,113,240 ,3,128,2,1,240,3,128,3,1,240,3,128,130,0,240,3,128,195,44,240 ,3,128,195,29,240,3,0,3,3,240,3,128,3,0,240,5,128,131,13,240 ,7,128,227,63,248,7,128,131,15,244,7,192,5,0,254,11,192,9,7,171 ,6,128,31,135,239,3,64,62,199,255,1,64,123,162,190,3,128,237,31,239 ,3,128,31,135,127,60,120,200,248,0,192,7,182,224,0,0,0,188,128,3 ,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,13,72,136,174,0 ,1,0,2,0,3,0,1,0,0,0,4,3,84,0,0,50,46,49,0,0 ,0,0,0,13,72,136,174,0,1,0,1,0,9,0,2,0,0,0,216,4 ,96,0,0,22,73,247,226,0,216,0,2,0,0,0,9,0,32,0,0,0 ,116,0,168,0,0,0,44,0,0,0,0,0,0,0,0,77,105,100,97,115 ,95,77,97,105,110,0,0,6,102,193,104,0,1,144,64,0,0,60,8,0 ,88,0,12,0,100,0,0,16,3,12,24,16,32,0,0,0,0,0,0,0 ,0,0,0,0,0,0,4,0,1,0,0,83,101,110,100,77,105,100,97,115 ,0,2,0,0,16,2,2,2,3,0,240,0,0,0,0,0,1,0,1,0 ,1,0,0,0,0,0,0,0,45,0,0,0,12,115,113,0,136,0,0,0 ,29,2,1,1,233,240,3,0,0,0,0,77,105,100,97,115,95,67,111,109 ,109,97,110,100,0,240,3,128,3,0,240,0,2,131,13,0,0,0,0,1 ,2,7,1,0,0,0,0,0,0,0,200,1,2,9,2,0,0,0,0,0 ,1,0,2,77,105,100,97,115,95,67,111,109,109,97,110,100,0,128,31,0 ,0,0,0,13,72,136,174,0,1,0,1,0,10,0,2,0,0,0,120,4 ,124,0,0,22,73,247,226,0,120,0,2,0,0,0,10,0,32,0,0,0 ,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,119,105,100,103,101 ,116,45,48,45,49,53,57,45,49,55,0,6,102,193,104,0,1,60,8,0 ,0,0,12,0,92,0,12,0,104,0,0,16,32,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,1,0,0,83,101,110,100,83,101,110,100,77 ,105,100,97,115,0,2,2,0,16,2,2,2,3,0,0,0,0,0,0,0 ,1,0,3,0,0,0,0,13,72,136,174,0,1,0,2,0,3,0,2,0 ,0,0,33,5,108,0,0,67,117,115,116,111,109,32,67,111,110,110,101,99 ,116,32,67,85,83,84,79,77,32,34,60,109,97,105,110,62,34,32,46,0 ,0,0,0,13,72,136,174,0,1,0,1,0,3,0,2,0,0,0,204,5 ,252,0,0,22,73,247,226,0,204,0,2,0,0,0,3,0,32,0,0,0 ,120,0,0,0,0,0,48,0,0,0,0,0,0,0,0,77,105,100,97,115 ,95,67,111,109,109,97,110,100,0,55,0,6,102,193,104,0,1,60,8,0 ,0,0,12,0,92,0,12,0,104,0,0,16,32,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,1,0,0,83,101,110,100,83,101,110,100,77 ,105,100,97,115,0,2,2,0,16,2,2,2,3,0,0,0,0,0,0,0 ,1,0,4,0,1,0,0,0,0,0,0,0,52,0,0,0,9,0,0,0 ,140,0,0,6,102,193,104,0,1,0,0,0,0,100,97,0,184,0,13,0 ,0,0,0,100,0,240,3,128,3,0,240,0,0,0,0,0,0,0,0,1 ,2,7,1,0,0,0,0,109,105,100,97,115,95,99,111,109,109,97,110,100 ,95,112,114,111,99,0,97,0,0,0,0,13,72,136,174,0,1,0,2,0 ,3,0,2,0,0,0,35,6,52,0,0,77,105,100,97,115,32,82,101,103 ,105,115,116,101,114,32,78,97,109,101,32,77,105,100,97,115,67,111,109,109 ,97,110,100,32,46,0,0,0,0,0,0,13,72,136,174,0,1,0,2,0 ,3,0,2,0,0,0,23,7,24,0,0,67,117,115,116,111,109,32,67,114 ,101,97,116,101,32,67,85,83,84,79,77,32,46,0,0,0,0,0,0,13 ,72,136,174,0,1,0,1,0,7,0,2,0,0,1,124,7,84,0,0,22 ,73,247,226,1,124,0,2,0,0,0,7,0,32,0,0,0,48,0,252,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,95,67,117,115 ,116,111,109,0,0,55,0,0,9,0,0,0,0,0,0,0,46,0,0,0 ,1,0,12,0,0,0,9,0,47,0,0,0,1,0,0,0,0,1,243,0 ,44,0,0,0,1,0,0,0,0,2,100,0,16,0,0,0,1,100,97,0 ,0,1,240,0,4,0,0,0,1,0,0,0,0,0,1,0,31,0,0,0 ,1,0,0,0,0,0,0,0,15,0,0,0,1,0,0,0,0,0,90,0 ,11,0,0,0,12,0,0,0,236,0,0,0,54,0,0,0,9,0,0,0 ,164,0,0,6,102,193,104,0,1,0,0,0,0,0,0,0,208,0,12,0 ,220,0,0,109,105,100,97,115,95,99,111,0,0,0,0,0,0,0,0,111 ,99,0,97,115,95,67,111,83,101,110,100,77,105,100,97,115,0,60,120,0 ,16,2,2,2,3,224,0,0,0,0,0,0,1,0,5,0,16,2,2,2 ,5,0,0,0,0,0,0,0,1,0,6,0,5,97,110,0,0,0,0,1 ,2,0,2,0,0,0,0,0,1,0,8,1,2,100,1,0,0,0,0,0 ,0,1,100,1,2,0,1,0,0,0,0,0,0,1,76,1,2,0,1,0 ,0,0,0,0,0,1,64,1,2,97,2,0,0,0,0,0,1,0,7,86 ,101,114,98,95,70,111,114,109,0,0,0,77,105,100,97,115,95,67,117,115 ,116,111,109,95,66,117,116,116,111,110,115,0,114,0,0,77,105,100,97,115 ,95,67,117,115,116,111,109,95,67,111,109,109,97,110,100,0,0,0,0,0 ,0,0,0,13,72,136,174,0,1,0,1,0,6,0,2,0,0,1,244,7 ,132,0,0,22,73,247,226,1,244,0,2,0,0,0,6,0,32,0,0,0 ,48,1,16,0,0,0,0,0,0,0,0,0,0,0,0,119,105,100,103,101 ,116,45,48,45,51,53,51,45,49,55,0,0,15,0,0,0,0,0,0,0 ,46,0,0,0,1,0,12,0,0,0,251,0,47,0,0,0,1,0,0,0 ,0,0,7,0,44,0,0,0,1,0,0,0,0,0,25,0,16,0,0,0 ,1,100,97,0,0,1,99,0,4,0,0,0,1,0,0,0,0,0,1,0 ,40,0,0,0,1,0,0,0,0,0,1,0,19,0,0,0,1,0,0,0 ,0,0,5,0,20,0,0,0,1,0,0,0,0,0,0,0,41,0,0,0 ,1,0,0,0,0,0,0,0,21,0,0,0,1,0,0,0,0,0,60,0 ,34,0,0,0,1,0,0,0,0,0,0,0,33,0,0,0,1,0,0,0 ,0,0,1,0,6,0,0,0,1,67,111,0,0,0,0,0,5,0,0,0 ,1,60,120,0,0,0,3,0,7,0,0,0,12,0,0,0,236,0,0,0 ,36,2,1,1,233,0,0,0,0,0,0,77,105,100,97,115,95,67,117,115 ,116,111,109,95,66,117,116,116,111,110,115,0,1,0,8,0,9,100,1,0 ,0,0,0,1,2,1,1,0,0,0,0,0,0,1,212,1,2,1,1,0 ,0,0,0,0,0,1,188,1,2,1,2,0,0,0,0,0,1,0,12,1 ,2,0,1,0,0,0,0,0,0,1,164,1,2,0,2,0,0,0,0,0 ,1,0,11,1,2,111,1,0,0,0,0,0,0,1,148,1,2,0,2,0 ,0,0,0,0,1,0,10,1,2,111,1,0,0,0,0,0,0,1,132,1 ,2,0,2,0,0,0,0,0,1,0,9,77,105,100,97,115,95,67,117,115 ,116,111,109,95,85,112,0,65,99,116,105,118,101,77,101,110,117,76,97,98 ,101,108,0,77,105,100,97,115,95,67,117,115,116,111,109,95,83,101,112,97 ,114,97,116,111,114,0,109,77,105,100,97,115,95,67,117,115,116,111,109,95 ,65,100,100,95,86,101,114,98,0,100,97,77,105,100,97,115,95,67,117,115 ,116,111,109,95,86,101,114,98,95,77,101,110,117,95,76,97,98,101,108,0 ,0,0,0,0,0,0,0,13,72,136,174,0,1,0,1,0,8,0,2,0 ,0,0,164,9,24,0,0,22,73,247,226,0,164,0,2,0,0,0,8,0 ,32,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,95,67,117,115,116,111,109,95,86,101,114,98,95,77,101,110 ,117,95,76,97,98,101,108,0,1,0,12,0,5,0,0,0,0,0,0,0 ,41,0,0,0,1,0,7,0,0,0,10,0,20,0,0,0,1,0,25,0 ,0,0,9,0,14,0,0,0,12,1,99,0,148,0,0,0,18,0,0,0 ,12,0,1,0,132,0,0,0,40,0,0,0,1,0,1,0,0,0,1,0 ,16,2,2,2,5,0,5,0,0,0,0,0,1,0,13,0,16,2,2,2 ,17,0,0,0,0,0,0,0,1,0,14,0,0,0,0,13,72,136,174,0 ,1,0,2,0,17,0,2,0,0,0,77,11,36,0,0,4,107,109,115,0 ,1,0,0,0,20,0,0,0,30,0,0,0,16,0,0,73,83,79,56,56 ,53,57,45,49,0,45,42,45,72,69,76,86,69,84,73,67,65,45,66,79 ,76,68,45,82,45,42,45,45,42,45,49,56,48,45,42,45,42,45,42,45 ,42,45,73,83,79,56,56,53,57,45,49,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,33,11,224,0,0,223,128,6,29,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,13,86,101,114,98,115 ,32,105,110,32,77,101,110,117,0,0,0,13,72,136,174,0,1,0,1,0 ,13,0,2,0,0,1,140,12,68,0,0,22,73,247,226,1,140,0,2,0 ,0,0,13,0,32,0,0,0,116,0,0,0,0,0,56,0,0,0,0,0 ,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95,65,100,100,95 ,86,101,114,98,0,45,49,6,102,193,104,0,1,45,42,0,0,45,73,0 ,100,0,1,0,0,0,4,0,1,0,7,0,0,0,10,0,0,0,0,0 ,0,0,0,0,0,0,9,0,14,0,0,67,117,115,116,111,109,67,114,101 ,97,116,101,0,12,0,1,0,13,0,0,0,0,0,0,0,46,0,0,0 ,1,0,1,0,0,0,14,0,47,0,0,0,1,0,0,0,0,0,252,0 ,18,0,0,0,12,0,0,1,124,0,0,0,40,0,0,0,1,0,0,0 ,0,0,0,0,19,0,0,0,1,0,0,0,0,0,5,0,44,0,0,0 ,1,0,0,0,0,0,82,0,20,0,0,0,1,0,0,255,255,255,221,0 ,21,0,0,0,1,0,0,0,0,0,25,0,41,0,0,0,1,0,0,0 ,0,0,0,0,6,0,0,0,1,2,1,0,0,0,4,0,5,0,0,0 ,1,100,97,0,0,0,3,0,7,0,0,0,12,117,116,1,84,0,0,0 ,49,0,0,0,9,100,1,1,24,0,0,6,102,193,104,0,1,0,0,0 ,0,1,212,1,68,0,13,0,0,0,0,0,0,1,188,1,2,1,2,0 ,0,0,0,0,0,0,0,1,2,0,1,0,0,0,0,67,117,115,116,111 ,109,86,77,65,100,100,86,101,114,98,0,0,38,2,1,1,233,0,0,0 ,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95,83,101,112,97 ,114,97,116,111,114,0,132,1,2,0,2,0,16,2,2,2,5,0,9,0 ,0,0,0,0,1,0,15,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,28,12,124,0,0,223,128,6,24,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,8,65,100,100,32,86,101,114,98,0 ,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,28,14 ,32,0,0,223,128,6,24,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,8,65,100,100,32,77,101,110,117,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,27,14,84,0,0,223,128,6,23,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,7,46,46,46,46,46 ,46,46,0,0,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0 ,0,0,26,14,136,0,0,223,128,6,22,3,1,0,1,9,73,83,79,56 ,56,53,57,45,49,2,6,82,101,109,111,118,101,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,124,111,114,0 ,2,0,2,0,0,0,114,6,164,3,20,6,164,0,0,0,14,13,48,6 ,176,0,0,0,14,9,100,15,44,0,0,0,3,4,136,12,24,0,0,0 ,9,12,160,12,48,0,0,0,9,8,36,12,100,0,0,0,9,2,168,12 ,76,0,0,0,9,5,28,14,144,0,0,0,5,6,112,13,252,0,0,0 ,7,3,100,15,212,0,0,0,1,2,8,12,108,0,0,0,9,1,200,12 ,40,0,0,0,9,9,188,14,60,0,0,0,6,7,48,14,32,0,0,0 ,6,13,64,14,48,0,0,0,6,8,20,13,192,0,0,0,7,9,180,13 ,24,0,0,0,8,4,192,13,52,0,0,0,8,3,20,12,220,0,0,0 ,8,7,200,12,188,0,0,0,8,9,100,13,164,0,0,0,7,11,156,13 ,108,0,0,0,8,0,232,13,136,0,0,0,7,14,44,12,252,0,0,0 ,8,6,68,13,80,0,0,0,8,1,228,12,156,0,0,0,8,10,168,7 ,68,0,0,0,14,1,136,7,196,0,0,0,13,9,48,7,92,0,0,0 ,14,0,0,7,48,0,0,0,14,2,216,7,168,0,0,0,13,10,184,7 ,140,0,0,0,13,12,20,7,120,0,0,0,13,13,136,7,224,0,0,0 ,13,7,88,14,8,0,0,0,7,0,0,12,140,0,0,0,8,12,64,9 ,40,0,0,0,12,2,76,9,64,0,0,0,12,1,44,8,232,0,0,0 ,12,6,64,9,156,0,0,0,11,12,148,9,132,0,0,0,11,13,140,9 ,108,0,0,0,11,14,184,9,88,0,0,0,12,0,0,9,20,0,0,0 ,12,3,132,9,0,0,0,0,12,4,204,9,184,0,0,0,11,10,92,13 ,236,0,0,0,7,4,140,13,216,0,0,0,7,7,168,7,36,0,0,0 ,14,3,216,6,244,0,0,0,14,5,84,6,192,0,0,0,14,8,64,6 ,228,0,0,0,14,6,48,6,212,0,0,0,14,7,24,7,12,0,0,0 ,14,4,240,15,200,0,0,0,1,3,84,8,124,0,0,0,12,13,152,8 ,8,0,0,0,13,5,84,8,48,0,0,0,13,2,172,8,88,0,0,0 ,13,0,60,8,108,0,0,0,12,15,4,8,68,0,0,0,13,1,140,8 ,28,0,0,0,13,3,236,7,244,0,0,0,13,6,68,12,4,0,0,0 ,9,14,28,11,32,0,0,0,10,10,136,11,64,0,0,0,10,9,92,10 ,168,0,0,0,11,0,0,11,0,0,0,0,10,11,148,11,96,0,0,0 ,10,8,0,10,88,0,0,0,11,3,88,10,32,0,0,0,11,6,48,10 ,4,0,0,0,11,7,48,10,116,0,0,0,11,2,76,10,144,0,0,0 ,11,1,92,11,212,0,0,0,10,1,152,10,60,0,0,0,11,4,232,11 ,236,0,0,0,10,0,0,11,128,0,0,0,10,6,248,11,184,0,0,0 ,10,4,220,11,156,0,0,0,10,5,204,10,200,0,0,0,10,14,40,10 ,228,0,0,0,10,12,184,12,116,0,0,0,9,0,0,8,216,0,0,0 ,12,7,124,8,136,0,0,0,12,12,24,8,196,0,0,0,12,8,196,8 ,156,0,0,0,12,11,24,8,176,0,0,0,12,9,204,15,184,0,0,0 ,1,4,96,15,156,0,0,0,1,6,52,15,140,0,0,0,1,7,132,15 ,84,0,0,0,1,12,124,14,156,0,0,0,5,3,52,14,208,0,0,0 ,5,0,0,15,4,0,0,0,3,11,144,14,232,0,0,0,3,12,216,14 ,184,0,0,0,5,1,120,15,60,0,0,0,3,1,132,15,28,0,0,0 ,3,8,28,15,108,0,0,0,1,11,36,15,172,0,0,0,1,4,124,12 ,88,0,0,0,9,4,4,12,32,0,0,0,9,11,104,12,68,0,0,0 ,9,6,28,12,56,0,0,0,9,7,0,14,72,0,0,0,6,3,208,14 ,132,0,0,0,5,10,4,14,92,0,0,0,5,14,84,14,120,0,0,0 ,5,11,228,14,108,0,0,0,5,12,200,9,248,0,0,0,11,8,160,9 ,212,0,0,0,11,9,192,9,232,0,0,0,11,9,120,15,228,0,0,0 ,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,62,67,108,97,115,115,84,97,98 ,108,101,0,62,82,101,115,111,117,114,99,101,84,97,98,108,101,0,0,77 ,105,100,97,115,72,101,108,112,68,105,115,109,105,115,115,0,0,0,0,77 ,105,100,97,115,72,101,108,112,83,101,97,114,99,104,0,77,105,100,97,115 ,72,101,108,112,71,111,66,97,99,107,0,77,105,100,97,115,72,101,108,112 ,66,117,108,108,101,116,105,110,66,111,97,114,100,0,0,77,105,100,97,115 ,72,101,108,112,83,101,97,114,99,104,68,105,97,108,111,103,0,0,0,77 ,105,100,97,115,72,101,108,112,0,0,0,77,105,100,97,115,67,114,101,97 ,116,101,73,110,103,111,116,79,107,0,0,77,105,100,97,115,67,114,101,97 ,116,101,73,110,103,111,116,67,97,110,99,101,108,0,0,77,105,100,97,115 ,67,114,101,97,116,101,73,110,103,111,116,78,97,109,101,84,101,120,116,0 ,0,0,0,77,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,85 ,112,0,0,77,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,79 ,119,110,101,114,84,101,120,116,0,0,0,77,105,100,97,115,67,114,101,97 ,116,101,73,110,103,111,116,79,119,110,101,114,76,97,98,101,108,0,0,77 ,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,78,97,109,101,76 ,97,98,101,108,0,0,0,77,105,100,97,115,67,114,101,97,116,101,78,101 ,119,73,110,103,111,116,0,77,105,100,97,115,73,110,102,111,85,112,66,117 ,116,116,111,110,0,0,0,77,105,100,97,115,73,110,102,111,66,117,116,116 ,111,110,66,111,120,0,0,77,105,100,97,115,73,110,102,111,78,97,109,101 ,84,101,120,116,0,0,0,77,105,100,97,115,73,110,102,111,67,108,97,115 ,115,76,97,98,101,108,0,77,105,100,97,115,73,110,102,111,78,97,109,101 ,76,97,98,101,108,0,0,77,105,100,97,115,73,110,102,111,67,108,97,115 ,115,84,101,120,116,0,0,77,105,100,97,115,73,110,102,111,76,97,98,101 ,108,0,0,77,105,100,97,115,73,110,102,111,0,0,0,77,105,100,97,115 ,83,116,97,114,116,117,112,68,105,115,109,105,115,115,0,77,105,100,97,115 ,83,116,97,114,116,117,112,83,97,118,101,0,0,0,0,77,105,100,97,115 ,83,116,97,114,116,117,112,84,101,120,116,0,0,0,0,77,105,100,97,115 ,83,116,97,114,116,117,112,76,97,98,101,108,0,0,0,77,105,100,97,115 ,83,116,97,114,116,117,112,0,0,0,0,77,105,100,97,115,69,118,97,108 ,69,118,97,108,117,97,116,101,66,117,116,116,111,110,0,77,105,100,97,115 ,69,118,97,108,84,121,112,101,84,101,120,116,0,0,0,77,105,100,97,115 ,69,118,97,108,84,121,112,101,76,97,98,101,108,0,0,77,105,100,97,115 ,69,118,97,108,67,108,101,97,114,66,117,116,116,111,110,0,0,0,0,77 ,105,100,97,115,69,118,97,108,68,105,115,109,105,115,115,66,117,116,116,111 ,110,0,0,77,105,100,97,115,69,118,97,108,82,101,115,117,108,116,84,101 ,120,116,0,77,105,100,97,115,69,118,97,108,82,101,115,117,108,116,76,97 ,98,101,108,0,0,0,0,77,105,100,97,115,69,118,97,108,69,120,112,114 ,101,115,115,105,111,110,84,101,120,116,0,77,105,100,97,115,69,118,97,108 ,69,120,112,114,101,115,115,105,111,110,76,97,98,101,108,0,0,0,0,77 ,105,100,97,115,69,120,112,114,101,115,115,105,111,110,69,118,97,108,117,97 ,116,111,114,0,0,0,0,87,105,100,103,101,116,76,105,115,116,66,117,116 ,116,111,110,115,0,0,0,87,105,100,103,101,116,76,105,115,116,77,101,110 ,117,0,0,87,105,100,103,101,116,76,105,115,116,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,67,114,101,97,116,101,78,101 ,119,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,67,108,97,115,115,84,101,120,116,0,0,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,78,97,109,101,84,101,120,116,0,0,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,67,108,97,115 ,115,76,97,98,101,108,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,68,105,115,109,105,115,115,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,76,97,98,101,108,0,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,67,97,108,108 ,98,97,99,107,79,112,116,105,111,110,0,77,105,100,97,115,73,110,103,111 ,116,86,97,108,117,101,79,119,110,101,114,76,97,98,101,108,0,0,0,77 ,105,100,97,115,73,110,103,111,116,86,97,108,117,101,79,119,110,101,114,84 ,101,120,116,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,97,108,108,98,97,99,107,83,97,118,101,0,0,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,67,97,108,108 ,98,97,99,107,65,112,112,108,121,0,0,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,67,97,108,108,98,97,99,107,76,97,98,101 ,108,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,67,97,108,108,98,97,99,107,84,101,120,116,0,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,86,97,108,117,101,65,112,112 ,108,121,0,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,86,97,108,117,101,84,101,120,116,0,0,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,86,97,108,117,101,76,97,98,101,108,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,76,105,115,116 ,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,80,97,110,101,115,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,0,0,0,65,112,112,108,121,0,0,0,83,97,118,101,0 ,0,0,0,76,105,115,116,0,0,0,0,67,97,110,99,101,108,0,0,86 ,97,108,117,101,76,97,98,101,108,0,0,84,101,120,116,0,0,0,0,67 ,108,97,115,115,84,101,120,116,0,0,0,78,97,109,101,84,101,120,116,0 ,0,0,0,67,108,97,115,115,0,0,0,76,97,98,101,108,0,0,0,77 ,105,100,97,115,82,101,115,111,117,114,99,101,77,97,110,97,103,101,114,0 ,0,0,0,77,105,100,97,115,69,114,114,111,114,66,111,120,0,0,0,77 ,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,87 ,105,100,103,101,116,84,101,120,116,0,0,77,105,100,97,115,67,97,108,108 ,98,97,99,107,77,97,110,97,103,101,114,67,108,97,115,115,84,101,120,116 ,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97 ,103,101,114,67,108,97,115,115,76,97,98,101,108,0,0,77,105,100,97,115 ,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,83,97,118,101,0 ,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97 ,103,101,114,65,112,112,108,121,0,0,0,77,105,100,97,115,67,97,108,108 ,98,97,99,107,77,97,110,97,103,101,114,67,97,110,99,101,108,0,0,77 ,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,84 ,101,120,116,0,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107 ,77,97,110,97,103,101,114,76,97,98,101,108,50,0,0,77,105,100,97,115 ,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,76,105,115,116,0 ,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97 ,103,101,114,76,97,98,101,108,0,0,0,77,105,100,97,115,67,97,108,108 ,98,97,99,107,77,97,110,97,103,101,114,0,0,0,0,77,105,100,97,115 ,70,105,108,101,115,83,101,108,101,99,116,111,114,0,0,77,105,100,97,115 ,70,105,108,101,115,77,101,110,117,0,0,70,105,108,101,76,105,115,116,0 ,0,0,0,77,105,100,97,115,67,117,115,116,111,109,69,120,105,116,68,105 ,97,108,111,103,0,0,0,77,101,110,117,95,79,107,95,66,117,116,116,111 ,110,0,0,77,101,110,117,95,84,101,120,116,0,0,0,77,101,110,117,95 ,76,97,98,101,108,0,0,86,101,114,98,95,69,110,116,101,114,95,66,117 ,116,116,111,110,0,0,0,86,101,114,98,95,73,115,95,84,111,103,103,108 ,101,0,0,86,101,114,98,95,84,101,120,116,0,0,0,86,101,114,98,95 ,76,97,98,101,108,0,0,86,101,114,98,95,70,111,114,109,0,0,0,67 ,117,115,116,111,109,72,101,108,112,0,0,77,105,100,97,115,95,67,117,115 ,116,111,109,95,65,112,112,108,121,95,66,117,116,116,111,110,0,0,0,77 ,105,100,97,115,95,67,117,115,116,111,109,95,79,75,95,66,117,116,116,111 ,110,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95,66,117,116,116 ,111,110,115,0,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95 ,67,111,109,109,97,110,100,95,76,97,98,101,108,0,0,77,105,100,97,115 ,95,67,117,115,116,111,109,95,67,111,109,109,97,110,100,0,0,0,0,77 ,105,100,97,115,95,67,117,115,116,111,109,95,85,112,0,65,99,116,105,118 ,101,77,101,110,117,76,97,98,101,108,0,77,105,100,97,115,95,67,117,115 ,116,111,109,95,83,101,112,97,114,97,116,111,114,0,0,77,105,100,97,115 ,95,67,117,115,116,111,109,95,65,100,100,95,86,101,114,98,0,0,0,77 ,105,100,97,115,95,67,117,115,116,111,109,95,86,101,114,98,95,77,101,110 ,117,95,76,97,98,101,108,0,0,0,0,77,105,100,97,115,95,67,117,115 ,116,111,109,0,0,0,0,77,105,100,97,115,95,67,111,109,109,97,110,100 ,0,0,0,77,105,100,97,115,95,77,97,105,110,0,0,77,105,100,97,115 ,86,101,114,115,105,111,110,0,0,0,0,77,105,100,97,115,73,99,111,110 ,0,0,0,72,97,110,100,121,80,97,107,73,99,111,110,0,0,0,0,118 ,117,105,116,68,117,109,109,121,0,0,0,18,124,111,114,0,5,0,3,0 ,14,13,228,15,148,0,92,13,72,136,174,0,1,0,1,0,13,0,2,0 ,0,1,108,0,0,0,0,22,73,247,226,1,108,0,2,0,0,0,13,0 ,32,0,0,0,108,0,0,0,0,0,48,0,0,0,0,0,0,0,0,119 ,105,100,103,101,116,45,48,45,50,53,53,45,50,53,0,6,102,193,104,0 ,1,45,49,0,0,193,104,0,92,0,1,0,0,0,5,0,100,0,1,0 ,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67 ,117,115,116,111,109,67,114,101,97,116,101,0,109,67,114,0,11,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,91,0,47,0,0,0 ,1,0,14,0,0,0,252,0,18,0,0,0,12,0,252,1,92,0,0,0 ,40,0,0,0,1,0,0,0,0,0,4,0,19,0,0,0,1,0,0,0 ,0,0,5,0,21,0,0,0,1,0,5,0,0,0,75,0,41,0,0,0 ,1,0,82,0,0,0,0,0,20,0,0,0,1,255,221,255,255,255,221,0 ,44,0,0,0,1,0,25,0,0,0,82,0,42,0,0,0,12,0,0,1 ,52,0,0,0,49,0,0,0,9,0,4,0,248,0,0,6,102,193,104,0 ,1,0,3,0,0,0,0,1,36,0,13,0,0,0,0,0,49,0,0,0 ,9,100,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,212,67 ,117,115,116,111,109,86,77,65,100,100,77,101,110,117,0,0,37,2,1,1 ,233,0,0,0,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95 ,65,100,100,95,86,101,114,98,0,2,1,1,233,0,0,0,16,2,2,2 ,5,100,97,0,0,0,0,0,1,0,16,0,0,0,0,13,72,136,174,0 ,1,0,1,0,13,0,2,0,0,1,108,0,0,0,0,22,73,247,226,1 ,108,0,2,0,0,0,13,0,32,0,0,0,116,0,0,0,0,0,56,0 ,0,0,0,0,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95 ,83,101,112,97,114,97,116,111,114,0,49,6,102,193,104,0,1,0,1,0 ,0,0,5,0,100,0,1,0,0,0,6,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,67,117,115,116,111,109,67,114,67,117,115,116,111 ,109,67,114,101,97,116,101,0,0,0,0,0,13,0,0,0,0,0,0,0 ,46,0,0,0,1,0,0,0,0,0,19,0,47,0,0,0,1,0,0,0 ,0,1,23,0,18,0,0,0,12,0,0,1,92,0,0,0,40,0,0,0 ,1,0,0,0,0,0,0,0,19,0,0,0,1,0,0,0,0,0,5,0 ,21,0,0,0,1,0,0,0,0,0,25,0,41,0,0,0,1,0,0,0 ,0,0,0,0,20,0,0,0,1,0,0,255,255,255,221,0,44,0,0,0 ,1,0,0,0,0,0,82,0,6,0,0,0,1,0,0,0,0,0,4,0 ,5,0,0,0,1,193,104,0,0,0,1,0,16,0,0,0,1,0,13,0 ,0,0,28,0,49,0,0,0,9,100,1,1,24,0,0,6,102,193,104,0 ,1,0,0,0,0,1,212,1,68,0,13,0,0,0,0,65,100,100,77,101 ,110,117,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,67 ,117,115,116,111,109,86,77,65,100,100,83,101,112,97,114,97,116,111,114,0 ,233,0,0,0,16,2,2,2,5,100,97,0,0,0,0,0,1,0,17,0 ,0,0,0,13,72,136,174,0,1,0,1,0,13,0,2,0,0,1,104,1 ,132,0,0,22,73,247,226,1,104,0,2,0,0,0,13,0,32,0,0,0 ,108,0,0,0,0,0,48,0,0,0,0,0,0,0,0,119,105,100,103,101 ,116,45,48,45,50,56,52,45,50,53,0,6,102,193,104,0,1,0,49,0 ,0,193,104,0,92,0,1,0,0,0,7,0,100,0,1,0,0,0,6,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,117,115,116,111 ,109,67,114,101,97,116,101,0,109,67,114,0,11,0,0,0,0,0,0,0 ,46,0,0,0,1,0,0,0,0,0,94,0,47,0,0,0,1,0,19,0 ,0,1,89,0,18,0,0,0,12,1,23,1,88,0,0,0,40,0,0,0 ,1,0,0,0,0,0,4,0,19,0,0,0,1,0,0,0,0,0,5,0 ,21,0,0,0,1,0,5,0,0,0,75,0,41,0,0,0,1,0,25,0 ,0,0,0,0,20,0,0,0,1,0,0,255,255,255,221,0,44,0,0,0 ,1,255,221,0,0,0,82,0,42,0,0,0,12,0,82,1,48,0,0,0 ,49,0,0,0,9,0,4,0,248,0,0,6,102,193,104,0,1,0,1,0 ,0,0,0,1,36,0,13,0,0,0,0,0,49,0,0,0,9,100,1,0 ,0,0,0,0,0,0,0,0,1,0,0,0,0,1,212,67,117,115,116,111 ,109,86,77,68,101,108,0,0,38,2,1,1,233,0,0,0,0,0,0,77 ,105,100,97,115,95,67,117,115,116,111,109,95,83,101,112,97,114,97,116,111 ,114,0,114,97,116,111,114,0,16,2,2,2,5,2,2,0,0,0,0,0 ,1,0,18,0,0,0,0,13,72,136,174,0,1,0,1,0,8,0,2,0 ,0,1,28,3,8,0,0,22,73,247,226,1,28,0,2,0,0,0,8,0 ,32,0,0,0,108,0,0,0,0,0,48,0,0,0,0,0,0,0,0,65 ,99,116,105,118,101,77,101,110,117,76,97,98,101,108,0,6,102,193,104,0 ,1,0,49,0,0,193,104,0,92,0,1,0,0,0,21,0,100,0,1,0 ,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67 ,117,115,116,111,109,67,114,101,97,116,101,0,109,67,114,0,10,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,10,0,47,0,0,0 ,1,0,19,0,0,0,239,0,18,0,0,0,12,1,23,1,12,0,0,0 ,40,0,0,0,1,0,0,0,0,0,0,0,19,0,0,0,1,0,0,0 ,0,0,1,0,20,0,0,0,1,0,5,0,0,0,10,0,41,0,0,0 ,1,0,25,0,0,0,0,0,6,0,0,0,1,0,0,0,0,0,5,0 ,5,0,0,0,1,255,221,0,0,0,3,0,7,0,0,0,12,0,82,0 ,236,0,0,0,31,2,1,1,233,0,4,0,0,0,0,77,105,100,97,115 ,95,67,117,115,116,111,109,95,85,112,0,0,0,0,0,0,16,2,2,2 ,5,100,1,0,0,0,0,0,1,0,19,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,36,4,136,0,0,223,128,6,32,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,16,78,111,32,77,101 ,110,117,32,83,101,108,101,99,116,101,100,0,0,0,0,13,72,136,174,0 ,1,0,1,0,15,0,2,0,0,2,12,5,188,0,0,22,73,247,226,2 ,12,0,2,0,0,0,15,0,32,0,0,0,108,0,0,0,0,0,48,0 ,0,0,0,0,0,0,0,119,105,100,103,101,116,45,48,45,51,50,50,45 ,50,53,0,6,102,193,104,0,1,0,49,0,0,193,104,0,92,0,1,0 ,0,0,8,0,100,0,1,0,0,0,6,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,67,117,115,116,111,109,67,114,101,97,116,101,0 ,109,67,114,0,18,0,0,0,0,0,0,0,44,0,0,0,1,0,0,0 ,0,0,181,0,16,0,0,0,1,0,19,0,0,0,160,0,23,0,0,0 ,1,1,23,0,0,0,1,0,40,0,0,0,1,0,0,0,0,0,3,0 ,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0,1,0,5,0 ,0,0,7,0,41,0,0,0,1,0,25,0,0,0,0,0,34,0,0,0 ,1,0,0,0,0,0,7,0,33,0,0,0,1,255,221,0,0,0,1,0 ,6,0,0,0,1,0,82,0,0,0,1,0,5,0,0,0,1,0,4,0 ,0,0,3,0,42,0,0,0,12,67,117,1,224,0,0,0,7,0,0,0 ,12,0,0,1,192,0,0,0,43,0,0,0,1,0,0,0,0,3,231,0 ,46,0,0,0,1,1,212,0,0,0,20,0,47,0,0,0,1,108,0,0 ,0,0,5,0,50,0,0,0,9,0,0,1,136,0,0,0,53,0,0,0 ,9,111,109,1,76,0,0,6,102,193,104,0,1,0,114,0,0,111,114,1 ,120,0,13,0,0,0,0,0,0,0,0,0,1,0,18,0,0,0,0,0 ,0,0,0,97,114,97,116,111,114,0,132,67,117,115,116,111,109,86,77,83 ,101,108,67,111,110,102,0,6,102,193,104,0,1,111,109,0,0,112,0,1 ,180,0,13,0,0,0,0,110,117,76,97,98,101,108,0,0,0,0,0,0 ,0,0,0,115,116,111,109,95,83,101,112,67,117,115,116,111,109,86,77,83 ,101,108,0,0,31,2,1,1,233,111,109,0,0,0,0,65,99,116,105,118 ,101,77,101,110,117,76,97,98,101,108,0,115,116,111,109,0,44,2,1,1 ,233,77,101,0,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95 ,86,101,114,98,95,77,101,110,117,95,76,97,98,101,108,0,0,0,0,0 ,0,0,0,13,72,136,174,0,1,0,1,0,13,0,2,0,0,1,128,5 ,248,0,0,22,73,247,226,1,128,0,2,0,0,0,13,0,32,0,0,0 ,108,0,0,0,0,0,48,0,0,0,0,0,0,0,0,77,105,100,97,115 ,95,67,117,115,116,111,109,95,85,112,0,6,102,193,104,0,1,0,49,0 ,0,193,104,0,92,0,1,0,0,0,2,0,100,0,1,0,0,0,6,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,117,115,116,111 ,109,67,114,101,97,116,101,0,109,67,114,0,13,0,0,0,0,0,0,0 ,46,0,0,0,1,0,0,0,0,0,11,0,47,0,0,0,1,0,19,0 ,0,0,223,0,18,0,0,0,12,1,23,1,112,0,0,0,40,0,0,0 ,1,0,0,0,0,0,0,0,19,0,0,0,1,0,0,0,0,0,5,0 ,44,0,0,0,1,0,5,0,0,0,82,0,20,0,0,0,1,0,25,255 ,255,255,221,0,21,0,0,0,1,0,0,0,0,0,25,0,41,0,0,0 ,1,255,221,0,0,0,0,0,6,0,0,0,1,0,82,0,0,0,5,0 ,5,0,0,0,1,0,4,0,0,0,3,0,7,0,0,0,12,67,117,1 ,72,0,0,0,49,0,0,0,9,0,0,1,16,0,0,6,102,193,104,0 ,1,0,0,0,0,3,231,1,60,0,13,0,0,0,0,0,0,0,20,0 ,47,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,9,0,0,67 ,117,115,116,111,109,86,77,85,112,0,109,0,37,2,1,1,233,193,104,0 ,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95,65,100,100,95 ,86,101,114,98,0,0,0,0,0,0,0,0,16,2,2,2,5,0,132,0 ,0,0,0,0,4,0,0,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,22,8,28,0,0,223,128,6,18,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,2,85,112,0,0,0,0,0,0,13 ,72,136,174,0,1,0,1,0,13,0,2,0,0,1,100,9,180,0,0,22 ,73,247,226,1,100,0,2,0,0,0,13,0,32,0,0,0,108,0,0,0 ,0,0,48,0,0,0,0,0,0,0,0,119,105,100,103,101,116,45,48,45 ,51,53,49,45,50,53,0,6,102,193,104,0,1,0,49,0,0,193,104,0 ,92,0,1,0,0,0,3,0,100,0,1,0,0,0,6,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,67,117,115,116,111,109,67,114,101 ,97,116,101,0,109,67,114,0,11,0,0,0,0,0,0,0,46,0,0,0 ,1,0,0,0,0,0,134,0,47,0,0,0,1,0,19,0,0,0,252,0 ,18,0,0,0,12,1,23,1,84,0,0,0,40,0,0,0,1,0,0,0 ,0,0,4,0,19,0,0,0,1,0,0,0,0,0,5,0,21,0,0,0 ,1,0,5,0,0,0,75,0,41,0,0,0,1,0,25,0,0,0,0,0 ,20,0,0,0,1,0,0,255,255,255,221,0,44,0,0,0,1,255,221,0 ,0,0,82,0,42,0,0,0,12,0,82,1,52,0,0,0,49,0,0,0 ,9,0,4,0,248,0,0,6,102,193,104,0,1,67,117,0,0,0,0,1 ,36,0,13,0,0,0,0,1,16,0,0,6,102,193,104,0,0,0,0,0 ,0,0,0,1,60,0,13,0,0,0,0,67,117,115,116,111,109,86,77,68 ,111,119,110,0,0,0,0,0,31,2,1,1,233,0,0,0,0,0,0,77 ,105,100,97,115,95,67,117,115,116,111,109,95,85,112,0,0,0,0,0,0 ,16,2,2,2,5,67,117,0,0,0,0,0,4,0,1,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,24,9,228,0,0,223 ,128,6,20,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,4,68 ,111,119,110,0,0,0,0,13,72,136,174,0,1,0,1,0,6,0,2,0 ,0,1,48,11,96,0,0,22,73,247,226,1,48,0,2,0,0,0,6,0 ,32,0,0,0,56,0,244,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,95,67,117,115,116,111,109,95,67,111,109,109,97,110,100,0 ,1,0,49,0,15,0,0,0,0,0,0,0,46,0,0,0,1,0,1,0 ,0,0,36,0,47,0,0,0,1,0,0,0,0,1,60,0,44,0,0,0 ,1,115,116,0,0,0,25,0,16,0,0,0,1,67,114,0,0,0,126,0 ,4,0,0,0,1,0,0,0,0,0,1,0,40,0,0,0,1,0,0,0 ,0,0,0,0,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0 ,1,0,0,0,0,0,0,0,41,0,0,0,1,0,0,0,0,0,0,0 ,34,0,0,0,1,0,0,0,0,0,0,0,33,0,0,0,1,0,0,0 ,0,0,5,0,35,0,0,0,1,0,0,0,0,0,60,0,6,0,0,0 ,1,0,0,0,0,0,0,0,5,0,0,0,1,0,0,0,0,0,1,0 ,31,0,0,0,1,0,0,0,0,0,1,0,2,0,0,0,0,0,0,1 ,2,67,1,0,0,0,0,0,0,1,20,1,2,0,2,0,0,0,0,0 ,4,0,2,77,105,100,97,115,95,67,117,115,116,111,109,95,67,111,109,109 ,97,110,100,95,76,97,98,101,108,0,110,0,0,0,0,13,72,136,174,0 ,1,0,1,0,8,0,2,0,0,0,172,11,144,0,0,22,73,247,226,0 ,172,0,2,0,0,0,8,0,32,0,0,0,60,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95 ,67,111,109,109,97,110,100,95,76,97,98,101,108,0,0,0,6,0,0,0 ,0,0,0,0,41,0,0,0,1,0,36,0,0,0,10,0,20,0,0,0 ,1,1,60,0,0,0,9,0,14,0,0,0,12,0,25,0,156,0,0,0 ,18,0,0,0,12,0,126,0,140,0,0,0,46,0,0,0,1,0,1,0 ,0,0,8,0,40,0,0,0,1,0,0,0,0,0,1,0,16,2,2,2 ,5,0,1,0,0,0,0,0,4,0,3,0,16,2,2,2,17,0,0,0 ,0,0,0,0,1,0,14,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,48,12,216,0,0,223,128,6,44,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,28,67,111,109,109,97,110,100,40,115 ,41,32,102,111,114,32,83,101,108,101,99,116,101,100,32,86,101,114,98,0 ,0,0,0,13,72,136,174,0,1,0,1,0,17,0,2,0,0,1,152,13 ,156,0,0,22,73,247,226,1,152,0,2,0,0,0,17,0,32,0,0,0 ,108,0,0,0,0,0,48,0,0,0,0,0,0,0,0,119,105,100,103,101 ,116,45,48,45,54,52,55,45,49,55,0,6,102,193,104,0,1,97,98,0 ,0,0,0,0,92,0,1,0,0,0,1,0,41,0,0,0,1,0,36,0 ,0,0,0,0,0,0,0,0,1,1,60,0,0,0,9,67,117,115,116,111 ,109,67,114,101,97,116,101,0,18,0,0,0,15,0,0,0,0,0,0,0 ,46,0,0,0,1,0,1,0,0,0,14,0,47,0,0,0,1,0,0,0 ,0,0,32,0,44,0,0,0,1,0,1,0,0,0,25,0,40,0,0,0 ,1,2,2,0,0,0,3,0,19,0,0,0,1,0,14,0,0,0,1,0 ,20,0,0,0,1,0,0,0,0,0,9,0,41,0,0,0,1,0,5,0 ,0,0,2,0,34,0,0,0,1,0,60,0,0,0,9,0,33,0,0,0 ,1,0,0,0,0,0,1,0,6,0,0,0,1,0,1,0,0,0,9,0 ,5,0,0,0,1,0,1,0,0,0,1,0,42,0,0,0,12,67,1,1 ,108,0,0,0,12,0,0,0,1,0,2,0,0,0,0,0,37,0,0,0 ,1,100,97,0,0,0,4,0,56,0,0,0,9,111,109,1,40,0,0,6 ,102,193,104,0,1,0,110,0,0,0,0,1,84,0,13,0,0,0,0,0 ,0,0,0,77,105,100,97,0,0,0,0,0,0,0,0,95,85,112,0,0 ,0,0,0,67,117,115,116,111,109,85,112,100,97,116,101,83,101,110,115,105 ,116,105,118,105,116,121,0,0,42,2,1,1,233,2,2,0,0,0,0,77 ,105,100,97,115,95,67,117,115,116,111,109,95,67,111,109,109,97,110,100,95 ,76,97,98,101,108,0,0,1,180,0,13,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,18,124,111,114,0,4,0,4,0,3,9,180,0 ,3,11,96,0,3,13,228,0,3,13,156,0,5,8,76,0,5,4,188,0 ,5,3,4,0,5,4,140,0,5,6,64,0,5,7,240,0,5,7,192,0 ,5,9,208,0,6,1,180,0,6,0,0,0,5,12,152,0,5,15,160,0 ,6,1,128,0,6,5,60,0,6,11,144,0,6,9,156,0,6,7,228,0 ,6,13,12,0,6,14,168,0,7,3,32,0,7,2,236,0,7,2,188,0 ,7,2,140,0,7,2,8,0,7,7,120,0,7,7,56,0,7,5,168,0 ,7,5,108,0,7,7,0,0,7,9,136,0,7,9,96,0,7,9,48,0 ,7,8,244,0,8,11,252,0,7,12,144,0,7,12,92,0,8,0,0,0 ,7,15,0,0,8,1,168,0,8,4,140,0,8,4,88,0,8,6,16,0 ,8,5,224,0,8,7,148,0,8,7,100,0,8,9,52,0,8,14,44,0 ,8,13,244,0,8,13,180,0,8,13,116,0,9,12,92,0,9,2,116,0 ,9,3,212,0,9,7,232,0,9,9,148,0,9,9,96,0,9,11,44,0 ,9,12,44,0,9,13,232,0,9,13,184,0,11,8,96,0,10,2,160,0 ,10,2,104,0,10,5,156,0,10,7,208,0,10,10,84,0,10,11,100,0 ,10,12,136,0,10,15,140,0,11,1,12,0,11,2,24,0,11,3,36,0 ,11,4,184,0,11,8,32,0,12,5,248,0,11,13,84,0,11,15,168,0 ,12,2,24,0,12,3,84,0,12,4,132,0,12,7,72,0,12,13,96,0 ,12,9,124,0,12,11,232,0,12,13,44,0,13,0,0,0,13,2,124,0 ,13,3,184,0,13,10,136,0,13,11,228,0,14,2,164,0,14,3,168,0 ,14,6,228,0,14,8,12,0,14,9,48,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,18,124,111,114,0,5,0,5,0,18,15,160,15,220,0,20,13 ,72,136,174,0,1,0,1,0,6,0,2,0,0,1,96,0,0,0,0,22 ,73,247,226,1,96,0,2,0,0,0,6,0,32,0,0,0,56,0,220,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,95,67,117,115 ,116,111,109,95,66,117,116,116,111,110,115,0,1,97,98,0,13,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,247,0,47,0,0,0 ,1,0,0,0,0,0,178,0,44,0,0,0,1,115,116,0,0,0,27,0 ,4,0,0,0,1,0,0,0,0,0,1,0,40,0,0,0,1,0,0,0 ,0,0,0,0,19,0,0,0,1,0,0,0,0,0,5,0,20,0,0,0 ,1,0,0,0,0,0,0,0,41,0,0,0,1,0,0,0,0,0,0,0 ,21,0,0,0,1,0,0,0,0,0,60,0,34,0,0,0,1,0,0,0 ,0,0,0,0,33,0,0,0,1,0,0,0,0,0,1,0,6,0,0,0 ,1,0,0,0,0,0,0,0,5,0,0,0,1,0,0,0,0,0,1,0 ,5,0,1,0,0,0,0,1,2,0,1,0,0,0,0,0,0,1,72,1 ,2,0,1,0,0,0,0,0,0,1,44,1,2,67,2,0,0,0,0,0 ,4,0,5,1,2,0,1,0,0,0,0,0,0,1,32,1,2,100,2,0 ,0,0,0,0,4,0,4,67,117,115,116,111,109,72,101,108,112,0,104,77 ,105,100,97,115,95,67,117,115,116,111,109,95,65,112,112,108,121,95,66,117 ,116,116,111,110,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95 ,79,75,95,66,117,116,116,111,110,0,101,0,0,0,0,13,72,136,174,0 ,1,0,1,0,13,0,2,0,0,1,116,0,0,0,0,22,73,247,226,1 ,116,0,2,0,0,0,13,0,32,0,0,0,116,0,0,0,0,0,56,0 ,0,0,0,0,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95 ,79,75,95,66,117,116,116,111,110,0,98,6,102,193,104,0,1,0,0,0 ,0,0,0,0,100,0,1,0,0,0,9,0,47,0,0,0,1,0,0,0 ,0,0,0,0,0,0,0,0,1,115,116,0,0,0,27,67,117,115,116,111 ,109,67,114,101,97,116,101,0,40,0,0,0,11,0,0,0,0,0,0,0 ,46,0,0,0,1,0,0,0,0,0,18,0,47,0,0,0,1,0,0,0 ,0,0,13,0,18,0,0,0,12,0,0,1,100,0,0,0,40,0,0,0 ,1,0,0,0,0,0,3,0,19,0,0,0,1,0,0,0,0,0,5,0 ,20,0,0,0,1,0,0,255,255,255,221,0,41,0,0,0,1,0,0,0 ,0,0,4,0,21,0,0,0,1,0,0,0,0,0,25,0,44,0,0,0 ,1,0,0,0,0,0,82,0,42,0,0,0,12,1,72,1,56,0,0,0 ,49,0,0,0,9,1,44,1,0,0,0,6,102,193,104,0,1,0,5,0 ,0,0,1,1,44,0,13,0,0,0,0,1,2,100,2,0,0,0,0,0 ,0,0,0,0,0,0,0,111,109,72,101,108,112,0,104,67,117,115,116,111 ,109,79,107,0,116,111,109,0,41,2,1,1,233,95,66,0,0,0,0,77 ,105,100,97,115,95,67,117,115,116,111,109,95,65,112,112,108,121,95,66,117 ,116,116,111,110,0,0,101,83,101,110,115,0,16,2,2,2,5,121,0,0 ,0,0,0,0,4,0,6,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,22,1,120,0,0,223,128,6,18,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,2,79,75,0,0,0,0,0,0,13 ,72,136,174,0,1,0,1,0,13,0,2,0,0,1,64,3,4,0,0,22 ,73,247,226,1,64,0,2,0,0,0,13,0,32,0,0,0,120,0,0,0 ,0,0,60,0,0,0,0,0,0,0,0,77,105,100,97,115,95,67,117,115 ,116,111,109,95,65,112,112,108,121,95,66,117,116,116,111,110,0,193,104,6 ,102,193,104,0,1,0,0,0,0,0,1,0,104,0,1,0,0,0,10,0 ,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,67 ,117,115,116,67,117,115,116,111,109,67,114,101,97,116,101,0,11,0,0,0 ,10,0,0,0,0,0,0,0,46,0,0,0,1,0,18,0,0,0,77,0 ,47,0,0,0,1,0,13,0,0,0,9,0,18,0,0,0,12,0,0,1 ,48,0,0,0,40,0,0,0,1,0,3,0,0,0,1,0,19,0,0,0 ,1,0,5,0,0,0,5,0,20,0,0,0,1,255,221,255,255,255,221,0 ,41,0,0,0,1,0,4,0,0,0,10,0,21,0,0,0,1,0,25,0 ,0,0,25,0,44,0,0,0,1,0,82,0,0,0,82,0,49,0,0,0 ,9,0,0,0,248,0,0,6,102,193,104,0,1,0,0,0,0,193,104,1 ,36,0,13,0,0,0,0,1,44,0,13,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,67,117,115,116,111,109,65,112,112 ,108,121,0,0,16,2,2,2,5,111,109,0,0,0,0,0,4,0,7,0 ,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,3 ,52,0,0,223,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,5,65,112,112,108,121,0,0,0,13,72,136,174,0,1,0,1,0 ,13,0,2,0,0,1,108,4,140,0,0,22,73,247,226,1,108,0,2,0 ,0,0,13,0,32,0,0,0,108,0,0,0,0,0,48,0,0,0,0,0 ,0,0,0,119,105,100,103,101,116,45,48,45,53,48,55,45,49,55,0,6 ,102,193,104,0,1,116,111,0,0,193,104,0,92,0,1,0,0,0,12,0 ,0,0,1,0,104,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,67,117,115,116,111,109,67,114,101,97,116,101,0,117,115,116,0 ,11,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,82,0 ,47,0,0,0,1,0,18,0,0,0,16,0,18,0,0,0,12,0,13,1 ,92,0,0,0,40,0,0,0,1,0,0,0,0,0,4,0,19,0,0,0 ,1,0,3,0,0,0,5,0,20,0,0,0,1,0,5,255,255,255,221,0 ,41,0,0,0,1,255,221,0,0,0,0,0,21,0,0,0,1,0,4,0 ,0,0,75,0,44,0,0,0,1,0,25,0,0,0,82,0,42,0,0,0 ,12,0,82,1,48,0,0,0,49,0,0,0,9,0,0,0,248,0,0,6 ,102,193,104,0,1,0,0,0,0,193,104,1,36,0,13,0,0,0,0,1 ,44,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,67,117,115,116,111,109,82,101,115,101,116,0,0,41,2,1,1 ,233,111,109,0,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95 ,65,112,112,108,121,95,66,117,116,116,111,110,0,95,66,117,116,116,111,0 ,16,2,2,2,5,110,115,0,0,0,0,0,4,0,8,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,4,188,0,0,223 ,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,5,82 ,101,115,101,116,0,0,0,13,72,136,174,0,1,0,1,0,13,0,2,0 ,0,1,56,6,64,0,0,22,73,247,226,1,56,0,2,0,0,0,13,0 ,32,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67 ,117,115,116,111,109,72,101,108,112,0,55,0,11,0,0,0,0,0,0,0 ,46,0,0,0,1,193,104,0,0,0,86,0,47,0,0,0,1,0,1,0 ,0,0,51,0,18,0,0,0,12,0,0,1,40,0,0,0,40,0,0,0 ,1,115,116,0,0,0,3,0,19,0,0,0,1,115,116,0,0,0,5,0 ,20,0,0,0,1,0,0,255,255,255,221,0,41,0,0,0,1,0,0,0 ,0,0,4,0,44,0,0,0,1,0,0,0,0,0,82,0,21,0,0,0 ,1,0,0,0,0,0,75,0,42,0,0,0,12,0,0,1,0,0,0,0 ,49,0,0,0,9,0,0,0,184,0,0,6,102,193,104,0,1,0,0,0 ,0,255,221,0,228,0,12,0,240,0,0,0,1,0,4,0,0,0,75,0 ,0,0,0,0,0,0,0,0,0,0,82,0,42,0,0,83,101,110,100,77 ,105,100,97,115,0,0,0,0,16,2,2,2,3,0,0,0,0,0,0,0 ,4,0,9,0,38,2,1,1,233,0,13,0,0,0,0,77,105,100,97,115 ,95,67,117,115,116,111,109,95,79,75,95,66,117,116,116,111,110,0,0,67 ,117,115,116,0,16,2,2,2,5,116,0,0,0,0,0,0,4,0,10,0 ,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,24,6 ,112,0,0,223,128,6,20,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,4,72,101,108,112,0,0,0,0,13,72,136,174,0,1,0,2,0 ,3,0,2,0,0,0,67,7,192,0,0,72,101,108,112,32,46,32,34,104 ,116,116,112,58,47,47,115,108,97,99,118,120,46,115,108,97,99,46,115,116 ,97,110,102,111,114,100,46,101,100,117,47,77,105,100,97,115,72,101,108,112 ,47,118,48,57,47,99,117,115,116,111,109,46,104,116,109,108,34,0,0,64 ,13,39,156,13,72,136,174,0,1,0,1,0,13,0,2,0,0,1,108,7 ,240,0,0,22,73,247,226,1,108,0,2,0,0,0,13,0,32,0,0,0 ,108,0,0,0,0,0,48,0,0,0,0,0,0,0,0,119,105,100,103,101 ,116,45,48,45,53,51,54,45,49,55,0,6,102,193,104,0,1,99,117,0 ,0,111,109,0,92,0,1,0,0,0,11,0,1,0,1,0,0,0,51,0 ,0,0,0,0,0,0,0,1,40,0,0,0,40,0,0,67,117,115,116,111 ,109,67,114,101,97,116,101,0,1,115,116,0,11,0,0,0,0,0,0,0 ,46,0,0,0,1,255,221,0,0,0,86,0,47,0,0,0,1,0,4,0 ,0,0,40,0,18,0,0,0,12,0,82,1,92,0,0,0,40,0,0,0 ,1,0,75,0,0,0,4,0,19,0,0,0,1,0,0,0,0,0,5,0 ,20,0,0,0,1,0,0,255,255,255,221,0,41,0,0,0,1,255,221,0 ,0,0,0,0,44,0,0,0,1,0,4,0,0,0,82,0,21,0,0,0 ,1,0,0,0,0,0,75,0,42,0,0,0,12,110,100,1,52,0,0,0 ,49,0,0,0,9,2,2,0,248,0,0,6,102,193,104,0,1,0,9,0 ,0,2,1,1,36,0,13,0,0,0,0,77,105,100,97,115,95,67,117,0 ,0,0,0,0,0,0,0,66,117,116,116,111,110,0,0,67,117,115,116,111 ,109,67,97,110,99,101,108,0,0,0,0,0,38,2,1,1,233,0,0,0 ,0,0,0,77,105,100,97,115,95,67,117,115,116,111,109,95,79,75,95,66 ,117,116,116,111,110,0,66,117,116,116,111,0,16,2,2,2,5,110,115,0 ,0,0,0,0,4,0,11,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,26,8,76,0,0,223,128,6,22,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,6,67,97,110,99,101,108,0,0,0 ,0,0,0,13,72,136,174,0,1,0,1,0,6,0,2,0,0,1,200,9 ,208,0,0,22,73,247,226,1,200,0,2,0,0,0,6,0,32,0,0,0 ,44,1,60,0,0,0,0,0,0,0,0,0,0,0,0,86,101,114,98,95 ,70,111,114,109,0,51,54,0,16,0,0,0,0,0,0,0,46,0,0,0 ,1,111,109,0,0,0,31,0,47,0,0,0,1,0,1,0,0,0,61,0 ,44,0,0,0,1,0,0,0,0,0,25,0,16,0,0,0,1,115,116,0 ,0,1,59,0,4,0,0,0,1,115,116,0,0,0,1,0,40,0,0,0 ,1,0,0,0,0,0,1,0,19,0,0,0,1,0,0,0,0,0,1,0 ,20,0,0,0,1,0,0,0,0,0,0,0,41,0,0,0,1,0,0,0 ,0,0,0,0,34,0,0,0,1,0,0,0,0,0,0,0,33,0,0,0 ,1,0,0,0,0,0,5,0,35,0,0,0,1,0,0,0,0,0,30,0 ,6,0,0,0,1,0,0,0,0,0,0,0,5,0,0,0,1,0,0,0 ,0,0,3,0,7,0,0,0,12,0,0,1,24,0,0,0,9,0,0,0 ,12,0,0,0,244,0,0,0,33,2,1,1,233,193,104,0,0,0,0,86 ,101,114,98,95,69,110,116,101,114,95,66,117,116,116,111,110,0,67,117,0 ,0,0,0,0,36,2,1,1,233,116,116,0,0,0,0,77,105,100,97,115 ,95,67,117,115,116,111,109,95,67,111,109,109,97,110,100,0,233,0,0,0 ,6,0,0,0,0,0,0,1,2,67,1,0,0,0,0,0,0,1,188,1 ,2,116,1,0,0,0,0,0,0,1,176,1,2,2,1,0,0,0,0,0 ,0,1,156,1,2,0,1,0,0,0,0,0,0,1,140,1,2,0,2,0 ,0,0,0,0,4,0,13,1,2,111,2,0,0,0,0,0,4,0,12,86 ,101,114,98,95,73,115,95,84,111,103,103,108,101,0,0,86,101,114,98,95 ,69,110,116,101,114,95,66,117,116,116,111,110,0,111,109,86,101,114,98,95 ,84,101,120,116,0,86,77,86,101,114,98,95,76,97,98,101,108,0,109,0 ,0,0,0,13,72,136,174,0,1,0,1,0,8,0,2,0,0,0,156,10 ,4,0,0,22,73,247,226,0,156,0,2,0,0,0,8,0,32,0,0,0 ,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,101,114,98,95 ,76,97,98,101,108,0,54,0,6,0,0,0,0,0,0,0,41,0,0,0 ,1,111,109,0,0,0,10,0,20,0,0,0,1,0,1,0,0,0,9,0 ,14,0,0,0,12,0,0,0,140,0,0,0,18,0,0,0,12,115,116,0 ,124,0,0,0,40,0,0,0,1,115,116,0,0,0,1,0,19,0,0,0 ,1,0,0,0,0,0,1,0,16,2,2,2,5,0,0,0,0,0,0,0 ,4,0,14,0,16,2,2,2,17,0,0,0,0,0,0,0,1,0,14,0 ,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,11 ,228,0,0,223,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,5,86,101,114,98,115,0,0,0,13,72,136,174,0,1,0,1,0 ,17,0,2,0,0,1,116,12,152,0,0,22,73,247,226,1,116,0,2,0 ,0,0,17,0,32,0,0,0,104,0,0,0,0,0,44,0,0,0,0,0 ,0,0,0,86,101,114,98,95,84,101,120,116,0,0,54,6,102,193,104,0 ,1,0,0,0,0,0,0,0,88,0,1,0,0,0,14,0,20,0,0,0 ,1,0,1,0,0,0,0,0,0,0,0,0,12,0,0,0,140,0,0,67 ,117,115,116,111,109,67,114,101,97,116,101,0,40,0,0,0,13,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,18,0,47,0,0,0 ,1,0,0,0,0,1,8,0,16,0,0,0,1,2,2,0,0,0,35,0 ,40,0,0,0,1,0,14,0,0,0,0,0,19,0,0,0,1,0,0,0 ,0,0,1,0,20,0,0,0,1,0,0,0,0,0,7,0,41,0,0,0 ,1,0,0,0,0,0,0,0,34,0,0,0,1,0,0,0,0,0,7,0 ,33,0,0,0,1,0,0,0,0,0,1,0,6,0,0,0,1,0,0,0 ,0,0,7,0,5,0,0,0,1,0,0,0,0,0,3,0,7,0,0,0 ,12,193,104,1,80,0,0,0,56,0,0,0,9,110,116,1,12,0,0,6 ,102,193,104,0,1,67,117,0,0,0,0,1,56,0,13,0,0,0,0,0 ,0,0,0,77,105,100,97,0,0,0,0,0,0,0,0,95,67,111,109,109 ,97,110,100,67,117,115,116,111,109,85,112,100,97,116,101,83,101,110,115,105 ,116,105,118,105,116,121,0,0,33,2,1,1,233,0,0,0,0,0,0,86 ,101,114,98,95,69,110,116,101,114,95,66,117,116,116,111,110,0,0,0,0 ,0,1,140,0,0,0,0,13,72,136,174,0,1,0,1,0,18,0,2,0 ,0,1,52,12,200,0,0,22,73,247,226,1,52,0,2,0,0,0,18,0 ,32,0,0,0,108,0,0,0,0,0,48,0,0,0,0,0,0,0,0,86 ,101,114,98,95,73,115,95,84,111,103,103,108,101,0,104,6,102,193,104,0 ,1,0,0,0,0,0,1,0,92,0,1,0,0,0,22,0,1,0,1,0 ,0,0,0,0,0,0,0,0,0,0,0,0,140,0,0,67,117,115,116,67 ,117,115,116,111,109,67,114,101,97,116,101,0,13,0,0,0,10,0,0,0 ,0,0,0,0,18,0,0,0,12,0,18,1,36,0,0,0,19,0,0,0 ,1,1,8,0,0,0,4,0,40,0,0,0,1,0,35,0,0,0,0,0 ,20,0,0,0,1,0,0,0,0,0,0,0,41,0,0,0,1,0,1,0 ,0,0,246,0,47,0,0,0,1,0,7,0,0,0,246,0,22,0,0,0 ,12,0,0,1,8,0,0,0,5,0,0,0,1,0,7,0,0,0,3,0 ,7,0,0,0,12,0,1,0,236,0,0,0,6,0,0,0,1,0,7,0 ,0,0,1,0,25,2,1,1,233,0,3,0,0,0,0,86,101,114,98,95 ,84,101,120,116,0,0,0,0,9,110,116,0,25,2,1,1,233,193,104,0 ,0,0,0,86,101,114,98,95,84,101,120,116,0,0,0,0,0,0,0,0 ,16,2,2,2,5,0,0,0,0,0,0,0,4,0,15,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,36,14,84,0,0,223 ,128,6,32,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,16,73 ,115,32,84,111,103,103,108,101,32,66,117,116,116,111,110,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18 ,124,111,114,0,5,0,6,0,16,15,36,15,128,0,112,13,72,136,174,0 ,1,0,1,0,13,0,2,0,0,1,104,0,0,0,0,22,73,247,226,1 ,104,0,2,0,0,0,13,0,32,0,0,0,108,0,0,0,0,0,48,0 ,0,0,0,0,0,0,0,119,105,100,103,101,116,45,48,45,56,56,52,45 ,49,55,0,6,102,193,104,0,1,0,0,0,0,0,1,0,92,0,1,0 ,0,0,16,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 ,140,0,0,67,117,115,116,67,117,115,116,111,109,67,114,101,97,116,101,0 ,13,0,0,0,11,0,0,0,0,0,0,0,46,0,0,0,1,0,18,0 ,0,0,81,0,47,0,0,0,1,1,8,0,0,1,23,0,18,0,0,0 ,12,0,35,1,88,0,0,0,40,0,0,0,1,0,0,0,0,0,4,0 ,19,0,0,0,1,0,1,0,0,0,5,0,20,0,0,0,1,0,7,255 ,255,255,221,0,41,0,0,0,1,0,0,0,0,0,0,0,42,0,0,0 ,12,0,7,1,52,0,0,0,21,0,0,0,1,0,1,0,0,0,71,0 ,44,0,0,0,1,0,7,0,0,0,82,0,49,0,0,0,9,0,3,0 ,248,0,0,6,102,193,104,0,1,101,120,0,0,0,0,1,36,0,13,0 ,0,0,0,1,233,193,104,0,0,0,0,0,0,0,0,0,0,0,0,116 ,0,0,0,0,0,0,0,67,117,115,116,111,109,68,101,108,86,101,114,98 ,0,0,15,0,33,2,1,1,233,115,116,0,0,0,0,86,101,114,98,95 ,69,110,116,101,114,95,66,117,116,116,111,110,0,2,1,1,233,0,0,0 ,16,2,2,2,5,114,98,0,0,0,0,0,4,0,16,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,26,0,0,0,0,223 ,128,6,22,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,6,68 ,101,108,101,116,101,0,0,0,0,0,0,13,72,136,174,0,1,0,1,0 ,15,0,2,0,0,2,4,1,128,0,0,22,73,247,226,2,4,0,2,0 ,0,0,15,0,32,0,0,0,108,0,0,0,0,0,48,0,0,0,0,0 ,0,0,0,119,105,100,103,101,116,45,48,45,57,50,49,45,49,55,0,6 ,102,193,104,0,1,0,0,0,0,0,1,0,92,0,1,0,0,0,13,0 ,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,140,0,0,67 ,117,115,116,67,117,115,116,111,109,67,114,101,97,116,101,0,13,0,0,0 ,18,0,0,0,0,0,0,0,44,0,0,0,1,0,18,0,0,0,69,0 ,16,0,0,0,1,1,8,0,0,0,182,0,47,0,0,0,1,0,35,0 ,0,0,25,0,46,0,0,0,1,0,0,0,0,0,77,0,41,0,0,0 ,1,0,1,0,0,0,0,0,40,0,0,0,1,0,7,0,0,0,3,0 ,42,0,0,0,12,0,0,1,232,0,0,0,20,0,0,0,1,0,7,0 ,0,0,7,0,19,0,0,0,1,0,1,0,0,0,1,0,34,0,0,0 ,1,0,7,0,0,0,7,0,33,0,0,0,1,0,3,0,0,0,1,0 ,6,0,0,0,1,101,120,0,0,0,2,0,5,0,0,0,1,0,0,0 ,0,0,3,0,23,0,0,0,1,0,0,0,0,0,1,0,43,0,0,0 ,1,0,0,0,0,3,231,0,7,0,0,0,12,101,114,1,200,0,0,0 ,50,0,0,0,9,115,116,1,140,0,0,0,53,0,0,0,9,110,116,1 ,76,0,0,6,102,193,104,0,1,2,1,0,0,0,0,1,120,0,13,0 ,0,0,0,0,0,0,0,0,4,0,16,0,0,0,0,0,0,0,0,0 ,0,1,140,1,2,0,2,67,117,115,116,111,109,83,101,108,67,111,110,102 ,86,101,114,98,0,0,12,6,102,193,104,0,1,115,95,0,0,103,103,1 ,184,0,13,0,0,0,0,95,69,110,116,101,114,95,66,0,0,0,0,0 ,0,0,0,86,101,114,98,95,84,101,120,67,117,115,116,111,109,83,101,108 ,86,101,114,98,0,0,109,0,30,2,1,1,233,116,105,0,0,0,0,86 ,101,114,98,95,73,115,95,84,111,103,103,108,101,0,1,1,233,77,101,0 ,26,2,1,1,233,100,97,0,0,0,0,86,101,114,98,95,76,97,98,101 ,108,0,101,110,117,95,76,0,0,0,0,13,72,136,174,0,1,0,1,0 ,13,0,2,0,0,1,84,1,180,0,0,22,73,247,226,1,84,0,2,0 ,0,0,13,0,32,0,0,0,112,0,0,0,0,0,52,0,0,0,0,0 ,0,0,0,86,101,114,98,95,69,110,116,101,114,95,66,117,116,116,111,110 ,0,193,104,6,102,193,104,0,1,0,1,0,0,0,1,0,96,0,1,0 ,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67 ,117,115,116,67,117,115,116,67,117,115,116,111,109,67,114,101,97,116,101,0 ,18,0,0,0,12,0,0,0,0,0,0,0,46,0,0,0,1,0,69,0 ,0,0,13,0,47,0,0,0,1,0,182,0,0,1,21,0,18,0,0,0 ,12,0,25,1,68,0,0,0,40,0,0,0,1,0,77,0,0,0,0,0 ,19,0,0,0,1,0,0,0,0,0,5,0,20,0,0,0,1,0,3,255 ,255,255,221,0,41,0,0,0,1,0,0,0,0,0,0,0,21,0,0,0 ,1,0,7,0,0,0,23,0,44,0,0,0,1,0,1,0,0,0,82,0 ,6,0,0,0,1,0,7,0,0,0,4,0,5,0,0,0,1,0,1,0 ,0,0,1,0,49,0,0,0,9,0,2,1,8,0,0,6,102,193,104,0 ,1,0,3,0,0,0,0,1,52,0,13,0,0,0,0,0,43,0,0,0 ,1,0,0,0,0,0,0,0,0,0,0,0,12,101,114,1,200,0,0,67 ,117,115,116,111,109,65,100,100,86,101,114,98,0,0,0,0,16,2,2,2 ,5,0,0,0,0,0,0,0,4,0,17,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,25,3,208,0,0,223,128,6,21,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,5,69,110,116,101,114 ,0,0,0,13,72,136,174,0,1,0,1,0,6,0,2,0,0,1,172,5 ,60,0,0,22,73,247,226,1,172,0,2,0,0,0,6,0,32,0,0,0 ,48,1,64,0,0,0,0,0,0,0,0,0,0,0,0,119,105,100,103,101 ,116,45,48,45,52,52,55,45,49,55,0,0,17,0,0,0,0,0,0,0 ,46,0,0,0,1,0,1,0,0,0,191,0,47,0,0,0,1,0,0,0 ,0,0,91,0,44,0,0,0,1,0,0,0,0,0,25,0,16,0,0,0 ,1,115,116,0,0,0,25,0,4,0,0,0,1,0,0,0,0,0,1,0 ,40,0,0,0,1,0,0,0,0,0,1,0,19,0,0,0,1,0,0,0 ,0,0,5,0,20,0,0,0,1,0,0,0,0,0,0,0,41,0,0,0 ,1,0,0,0,0,0,0,0,21,0,0,0,1,0,0,0,0,0,30,0 ,34,0,0,0,1,0,0,0,0,0,0,0,33,0,0,0,1,0,0,0 ,0,0,5,0,35,0,0,0,1,0,0,0,0,0,60,0,6,0,0,0 ,1,0,0,0,0,0,0,0,5,0,0,0,1,0,0,0,0,0,4,0 ,7,0,0,0,12,0,0,1,36,0,0,0,9,0,0,0,12,0,0,1 ,4,0,0,0,30,2,1,1,233,193,104,0,0,0,0,77,101,110,117,95 ,79,107,95,66,117,116,116,111,110,0,0,0,1,0,0,0,25,2,1,1 ,233,0,0,0,0,0,0,86,101,114,98,95,70,111,114,109,0,65,100,100 ,86,101,114,0,5,0,0,0,0,0,0,1,2,0,1,0,0,0,0,0 ,0,1,160,1,2,0,1,0,0,0,0,0,0,1,148,1,2,0,2,0 ,0,0,0,0,4,0,19,1,2,0,1,0,0,0,0,0,0,1,132,1 ,2,115,2,0,0,0,0,0,4,0,18,77,101,110,117,95,79,107,95,66 ,117,116,116,111,110,0,95,77,101,110,117,95,84,101,120,116,0,0,0,77 ,101,110,117,95,76,97,98,101,108,0,0,0,0,0,0,13,72,136,174,0 ,1,0,1,0,8,0,2,0,0,0,156,5,108,0,0,22,73,247,226,0 ,156,0,2,0,0,0,8,0,32,0,0,0,44,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,101,110,117,95,76,97,98,101,108,0,55,0 ,6,0,0,0,0,0,0,0,41,0,0,0,1,0,0,0,0,0,10,0 ,20,0,0,0,1,0,0,0,0,0,9,0,14,0,0,0,12,0,0,0 ,140,0,0,0,18,0,0,0,12,0,0,0,124,0,0,0,40,0,0,0 ,1,0,0,0,0,0,1,0,19,0,0,0,1,0,0,0,0,0,1,0 ,16,2,2,2,5,0,0,0,0,0,0,0,4,0,20,0,16,2,2,2 ,17,0,0,0,0,0,0,0,1,0,14,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,25,7,48,0,0,223,128,6,21,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,5,77,101,110,117,115 ,0,0,0,13,72,136,174,0,1,0,1,0,17,0,2,0,0,1,112,7 ,228,0,0,22,73,247,226,1,112,0,2,0,0,0,17,0,32,0,0,0 ,104,0,0,0,0,0,44,0,0,0,0,0,0,0,0,77,101,110,117,95 ,84,101,120,116,0,0,55,6,102,193,104,0,1,0,0,0,0,0,0,0 ,88,0,1,0,0,0,18,0,20,0,0,0,1,0,0,0,0,0,0,0 ,0,0,0,0,12,0,0,0,140,0,0,67,117,115,116,111,109,67,114,101 ,97,116,101,0,40,0,0,0,13,0,0,0,0,0,0,0,46,0,0,0 ,1,0,0,0,0,0,15,0,47,0,0,0,1,0,0,0,0,1,8,0 ,16,0,0,0,1,2,2,0,0,0,35,0,40,0,0,0,1,0,14,0 ,0,0,0,0,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0 ,1,0,0,0,0,0,7,0,41,0,0,0,1,0,0,0,0,0,0,0 ,34,0,0,0,1,0,0,0,0,0,7,0,33,0,0,0,1,0,0,0 ,0,0,1,0,6,0,0,0,1,0,0,0,0,0,7,0,5,0,0,0 ,1,0,0,0,0,0,3,0,7,0,0,0,12,0,0,1,80,0,0,0 ,56,0,0,0,9,2,1,1,12,0,0,6,102,193,104,0,1,110,117,0 ,0,107,95,1,56,0,13,0,0,0,0,0,1,0,0,0,25,2,1,0 ,0,0,0,0,0,0,0,86,101,114,98,95,70,111,114,67,117,115,116,111 ,109,85,112,100,97,116,101,83,101,110,115,105,116,105,118,105,116,121,0,0 ,30,2,1,1,233,0,1,0,0,0,0,77,101,110,117,95,79,107,95,66 ,117,116,116,111,110,0,19,1,2,0,1,0,0,0,0,13,72,136,174,0 ,1,0,1,0,15,0,2,0,0,1,220,8,20,0,0,22,73,247,226,1 ,220,0,2,0,0,0,15,0,32,0,0,0,108,0,0,0,0,0,48,0 ,0,0,0,0,0,0,0,119,105,100,103,101,116,45,48,45,52,49,54,45 ,50,53,0,6,102,193,104,0,1,0,0,0,0,0,1,0,92,0,1,0 ,0,0,17,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,140,0,0,67,117,115,116,67,117,115,116,111,109,67,114,101,97,116,101,0 ,13,0,0,0,15,0,0,0,0,0,0,0,44,0,0,0,1,0,15,0 ,0,0,181,0,16,0,0,0,1,1,8,0,0,0,160,0,23,0,0,0 ,1,0,35,0,0,0,1,0,40,0,0,0,1,0,0,0,0,0,3,0 ,19,0,0,0,1,0,1,0,0,0,1,0,20,0,0,0,1,0,7,0 ,0,0,7,0,41,0,0,0,1,0,0,0,0,0,0,0,34,0,0,0 ,1,0,7,0,0,0,7,0,33,0,0,0,1,0,1,0,0,0,1,0 ,6,0,0,0,1,0,7,0,0,0,7,0,5,0,0,0,1,0,3,0 ,0,0,3,0,42,0,0,0,12,0,0,1,192,0,0,0,7,0,0,0 ,12,0,0,1,164,0,0,0,53,0,0,0,9,107,95,1,100,0,0,0 ,50,0,0,0,9,0,0,1,40,0,0,6,102,193,104,0,1,0,0,0 ,0,114,98,1,84,0,13,0,0,0,0,111,109,85,112,100,97,116,101,0 ,0,0,0,0,0,0,0,105,116,121,0,0,30,2,1,67,117,115,116,111 ,109,83,101,108,77,101,110,117,0,107,95,6,102,193,104,0,1,0,19,0 ,0,0,1,1,144,0,13,0,0,0,0,1,2,115,2,0,0,0,0,0 ,0,0,0,0,0,0,0,95,79,107,95,66,117,116,116,67,117,115,116,111 ,109,83,101,108,67,111,110,102,77,101,110,117,0,110,117,0,25,2,1,1 ,233,0,0,0,0,0,0,77,101,110,117,95,84,101,120,116,0,115,116,111 ,109,83,101,0,26,2,1,1,233,0,109,0,0,0,0,77,101,110,117,95 ,76,97,98,101,108,0,98,95,73,115,95,0,0,0,0,13,72,136,174,0 ,1,0,1,0,13,0,2,0,0,1,100,9,156,0,0,22,73,247,226,1 ,100,0,2,0,0,0,13,0,32,0,0,0,108,0,0,0,0,0,48,0 ,0,0,0,0,0,0,0,119,105,100,103,101,116,45,48,45,52,52,53,45 ,50,53,0,6,102,193,104,0,1,0,0,0,0,0,1,0,92,0,1,0 ,0,0,20,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,140,0,0,67,117,115,116,67,117,115,116,111,109,67,114,101,97,116,101,0 ,13,0,0,0,11,0,0,0,0,0,0,0,46,0,0,0,1,0,15,0 ,0,0,74,0,47,0,0,0,1,1,8,0,0,0,0,0,18,0,0,0 ,12,0,35,1,84,0,0,0,40,0,0,0,1,0,0,0,0,0,4,0 ,19,0,0,0,1,0,1,0,0,0,5,0,20,0,0,0,1,0,7,255 ,255,255,221,0,41,0,0,0,1,0,0,0,0,0,0,0,21,0,0,0 ,1,0,7,0,0,0,73,0,44,0,0,0,1,0,1,0,0,0,82,0 ,42,0,0,0,12,0,7,1,52,0,0,0,49,0,0,0,9,0,3,0 ,248,0,0,6,102,193,104,0,1,0,0,0,0,0,0,1,36,0,13,0 ,0,0,0,1,164,0,0,0,53,0,0,0,0,0,0,0,0,0,0,0 ,50,0,0,0,9,0,0,67,117,115,116,111,109,68,101,108,77,101,110,117 ,0,114,98,0,30,2,1,1,233,0,0,0,0,0,0,77,101,110,117,95 ,79,107,95,66,117,116,116,111,110,0,0,0,30,2,1,0,16,2,2,2 ,5,83,101,0,0,0,0,0,4,0,21,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,26,11,144,0,0,223,128,6,22,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,6,68,101,108,101,116 ,101,0,0,0,0,0,0,13,72,136,174,0,1,0,1,0,13,0,2,0 ,0,1,80,13,12,0,0,22,73,247,226,1,80,0,2,0,0,0,13,0 ,32,0,0,0,108,0,0,0,0,0,48,0,0,0,0,0,0,0,0,77 ,101,110,117,95,79,107,95,66,117,116,116,111,110,0,0,6,102,193,104,0 ,1,0,0,0,0,0,1,0,92,0,1,0,0,0,19,0,1,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,140,0,0,67,117,115,116,67 ,117,115,116,111,109,67,114,101,97,116,101,0,13,0,0,0,12,0,0,0 ,0,0,0,0,46,0,0,0,1,0,15,0,0,0,9,0,47,0,0,0 ,1,1,8,0,0,1,21,0,18,0,0,0,12,0,35,1,64,0,0,0 ,40,0,0,0,1,0,0,0,0,0,0,0,19,0,0,0,1,0,1,0 ,0,0,5,0,20,0,0,0,1,0,7,255,255,255,221,0,41,0,0,0 ,1,0,0,0,0,0,0,0,21,0,0,0,1,0,7,0,0,0,25,0 ,44,0,0,0,1,0,1,0,0,0,82,0,6,0,0,0,1,0,7,0 ,0,0,4,0,5,0,0,0,1,0,3,0,0,0,1,0,49,0,0,0 ,9,0,0,1,4,0,0,6,102,193,104,0,1,0,0,0,0,0,0,1 ,48,0,13,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0 ,0,0,0,111,109,68,101,108,77,101,110,67,117,115,116,111,109,65,100,100 ,77,101,110,117,0,0,0,0,16,2,2,2,5,107,95,0,0,0,0,0 ,4,0,22,0,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0 ,0,0,25,13,64,0,0,223,128,6,21,3,1,0,1,9,73,83,79,56 ,56,53,57,45,49,2,5,69,110,116,101,114,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,51,14,168,0,0,223,128,6,47,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,31,77,105,100,97,115 ,32,67,117,115,116,111,109,105,122,101,32,86,101,114,98,115,32,97,110,100 ,32,77,101,110,117,115,0,0,0,0,0,13,72,136,174,0,1,0,2,0 ,3,0,2,0,0,0,67,14,216,0,0,72,101,108,112,32,46,32,34,104 ,116,116,112,58,47,47,115,108,97,99,118,120,46,115,108,97,99,46,115,116 ,97,110,102,111,114,100,46,101,100,117,47,77,105,100,97,115,72,101,108,112 ,47,118,48,57,47,99,117,115,116,111,109,46,104,116,109,108,34,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,124,111,114,0 ,5,0,7,0,24,15,0,15,60,0,180,13,72,136,174,0,1,0,1,0 ,19,0,2,0,0,1,240,0,0,0,0,22,73,247,226,1,240,0,2,0 ,0,0,19,0,32,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,67,117,115,116,111,109,69,120,105,116,68,105 ,97,108,111,103,0,99,117,0,13,0,0,0,0,0,0,0,26,0,0,0 ,12,0,0,1,224,0,0,0,46,0,0,0,1,0,0,0,0,0,34,0 ,47,0,0,0,1,115,116,0,0,0,55,0,4,0,0,0,1,0,0,0 ,0,0,1,0,8,0,0,0,12,0,0,1,208,0,0,0,28,0,0,0 ,12,0,0,1,192,0,0,0,17,0,0,0,12,0,0,1,176,0,0,0 ,10,0,0,0,1,0,0,0,0,0,2,0,25,0,0,0,1,0,0,0 ,0,0,1,0,11,0,0,0,12,0,0,1,160,0,0,0,51,0,0,0 ,9,0,0,1,76,0,0,0,54,0,0,0,9,0,0,1,20,0,0,0 ,55,0,0,0,9,0,0,0,220,0,0,6,102,193,104,0,1,0,0,0 ,0,0,7,1,8,0,1,0,0,0,1,0,1,0,3,0,0,0,1,0 ,0,0,0,0,0,0,0,1,4,0,0,6,102,193,104,67,117,115,116,111 ,109,69,120,105,116,0,13,6,102,193,104,0,1,0,0,0,0,0,0,1 ,64,0,1,0,0,0,2,111,109,68,101,108,77,101,110,0,0,0,0,0 ,0,0,0,100,77,101,110,117,0,0,0,67,117,115,116,111,109,69,120,105 ,116,0,0,6,102,193,104,0,2,2,1,0,0,2,2,1,148,0,1,0 ,0,0,0,0,4,0,21,6,102,193,104,1,136,0,1,0,0,0,0,1 ,144,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,67,117,115,116,111,109,69,120,105,116,0,116,67,117,115,116,111 ,109,69,120,105,116,0,110,0,16,2,2,2,5,2,1,0,0,0,0,0 ,4,0,23,0,16,2,2,2,5,101,120,0,0,0,0,0,4,0,24,0 ,16,2,2,2,5,0,109,0,0,0,0,0,4,0,25,0,16,2,2,2 ,5,0,98,0,0,0,0,0,4,0,26,0,16,2,2,2,5,77,101,0 ,0,0,0,0,4,0,27,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,108,0,0,0,0,223,128,6,104,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,42,67,117,115,116,111,109,105,122,97 ,116,105,111,110,32,99,104,97,110,103,101,115,32,104,97,118,101,32,110,111 ,116,32,98,101,101,110,32,115,97,118,101,100,46,4,0,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,28,83,97,118,101,32,99,104,97,110 ,103,101,115,32,98,101,102,111,114,101,32,101,120,105,116,105,110,103,63,0 ,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,22,2 ,8,0,0,223,128,6,18,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,2,78,111,0,0,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,23,2,140,0,0,223,128,6,19,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,3,89,101,115,0,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,26,2,188,0,0,223 ,128,6,22,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,6,67 ,97,110,99,101,108,0,0,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,42,2,236,0,0,223,128,6,38,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,22,67,111,110,102,105,114,109,97,116 ,105,111,110,32,78,101,101,100,101,100,46,46,46,0,0,0,0,0,0,13 ,72,136,174,0,1,0,1,0,7,0,2,0,0,1,16,3,32,0,0,22 ,73,247,226,1,16,0,2,0,0,0,7,0,32,0,0,0,116,0,224,0 ,0,0,44,0,0,0,0,0,0,0,0,70,105,108,101,76,105,115,116,0 ,46,104,97,6,102,193,104,0,1,32,98,0,0,110,32,0,88,0,12,0 ,100,0,0,3,1,0,1,9,73,83,79,0,0,0,0,0,0,0,0,83 ,97,118,101,32,99,104,97,83,101,110,100,77,105,100,97,115,0,101,32,0 ,16,2,2,2,3,103,63,0,0,0,0,0,4,0,28,0,7,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,59,0,47,0,0,0 ,1,0,0,0,0,0,211,0,44,0,0,0,1,0,0,0,0,1,84,0 ,16,0,0,0,1,0,0,0,0,0,211,0,4,0,0,0,1,0,0,0 ,0,0,1,0,11,0,0,0,12,0,0,0,208,0,0,0,31,0,0,0 ,1,0,0,0,0,0,0,0,16,2,2,2,5,0,0,0,0,0,0,0 ,4,0,29,0,2,0,0,0,0,0,0,1,2,0,1,0,0,0,0,0 ,0,1,0,1,2,0,2,0,0,0,0,0,4,0,30,77,105,100,97,115 ,70,105,108,101,115,77,101,110,117,0,120,0,0,0,0,13,72,136,174,0 ,1,0,1,0,10,0,2,0,0,0,200,3,100,0,0,22,73,247,226,0 ,200,0,2,0,0,0,10,0,32,0,0,0,120,0,0,0,0,0,48,0 ,0,0,0,0,0,0,0,77,105,100,97,115,70,105,108,101,115,77,101,110 ,117,0,104,6,102,193,104,0,1,110,32,0,0,0,12,0,92,0,12,0 ,104,0,0,9,73,83,79,0,0,0,0,0,0,0,0,0,0,0,0,32 ,99,104,97,83,101,110,100,83,101,110,100,77,105,100,97,115,0,2,2,0 ,16,2,2,2,3,0,0,0,0,0,0,0,4,0,31,0,6,0,0,0 ,0,0,0,0,34,0,0,0,1,0,59,0,0,0,0,0,33,0,0,0 ,1,0,211,0,0,0,1,0,46,0,0,0,1,1,84,0,0,0,10,0 ,44,0,0,0,1,0,211,0,0,1,7,0,20,0,0,0,1,0,1,0 ,0,0,0,0,19,0,0,0,1,0,0,0,0,0,1,0,0,0,0,13 ,72,136,174,0,1,0,2,0,3,0,2,0,0,0,35,4,140,0,0,99 ,117,115,116,111,109,32,99,111,110,110,101,99,116,32,70,73,76,69,76,73 ,83,84,32,34,60,109,97,105,110,62,34,32,46,0,0,0,0,0,0,13 ,72,136,174,0,1,0,1,0,15,0,2,0,0,1,64,5,108,0,0,22 ,73,247,226,1,64,0,2,0,0,0,15,0,32,0,0,0,124,0,0,0 ,0,0,52,0,0,0,0,0,0,0,0,119,105,100,103,101,116,45,48,45 ,49,48,57,55,45,49,55,0,102,193,104,6,102,193,104,0,1,0,12,0 ,0,0,12,0,96,0,12,0,108,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,83,101,110,100,83,101,110,100,83,101,110,100,77 ,105,100,97,115,0,2,2,0,16,2,2,2,3,0,0,0,0,0,0,0 ,4,0,32,0,13,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,21,0,47,0,0,0,1,0,1,0,0,0,64,0,44,0,0,0 ,1,0,10,0,0,0,25,0,16,0,0,0,1,1,7,0,0,0,25,0 ,40,0,0,0,1,0,0,0,0,0,3,0,19,0,0,0,1,0,1,0 ,0,0,1,0,20,0,0,0,1,2,2,0,0,0,0,0,41,0,0,0 ,1,0,29,0,0,0,0,0,42,0,0,0,12,0,1,1,32,0,0,0 ,34,0,0,0,1,0,2,0,0,0,0,0,33,0,0,0,1,100,97,0 ,0,0,1,0,6,0,0,0,1,0,120,0,0,0,0,0,5,0,0,0 ,1,0,0,0,0,0,1,0,30,2,1,1,233,0,2,0,0,0,0,77 ,105,100,97,115,70,105,108,101,115,77,101,110,117,0,110,117,0,0,0,0 ,0,0,0,13,72,136,174,0,1,0,2,0,3,0,2,0,0,0,32,5 ,168,0,0,109,105,100,97,115,32,114,101,97,108,105,122,101,32,108,105,115 ,116,32,77,105,100,97,115,70,105,108,101,115,32,46,0,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,40,7,0,0,0,223 ,128,6,36,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,20,77 ,105,100,97,115,32,45,32,70,105,108,101,32,77,97,110,97,103,101,114,0 ,0,0,0,13,72,136,174,0,1,0,2,0,3,0,2,0,0,0,25,7 ,56,0,0,99,117,115,116,111,109,32,99,114,101,97,116,101,32,70,73,76 ,69,76,73,83,84,32,46,0,0,0,0,13,72,136,174,0,1,0,1,0 ,5,0,2,0,0,1,52,7,120,0,0,22,73,247,226,1,52,0,2,0 ,0,0,5,0,32,0,0,0,124,0,0,0,0,0,52,0,0,0,0,0 ,0,0,0,77,105,100,97,115,70,105,108,101,115,83,101,108,101,99,116,111 ,114,0,104,6,102,193,104,0,1,0,12,0,0,0,12,0,96,0,12,0 ,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83 ,101,110,100,83,101,110,100,83,101,110,100,77,105,100,97,115,0,2,2,0 ,16,2,2,2,3,0,0,0,0,0,0,0,4,0,33,0,6,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,0,0,47,0,0,0 ,1,0,1,0,0,0,7,0,4,0,0,0,1,0,10,0,0,0,1,0 ,11,0,0,0,12,1,7,1,36,0,0,0,30,0,0,0,12,0,0,1 ,20,0,0,0,51,0,0,0,9,0,1,0,204,0,0,6,102,193,104,0 ,1,2,2,0,0,0,0,0,248,0,12,1,4,0,0,0,0,0,0,0 ,42,0,0,0,0,0,0,0,0,0,0,0,34,0,0,0,1,0,2,83 ,101,110,100,77,105,100,97,115,0,100,97,0,16,2,2,2,3,0,0,0 ,0,0,0,0,4,0,34,0,16,2,2,2,5,0,0,0,0,0,0,0 ,4,0,35,0,16,2,2,2,5,0,0,0,0,0,0,0,4,0,36,0 ,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,37,7 ,168,0,0,223,128,6,33,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,17,77,105,100,97,115,32,45,32,79,112,101,110,32,70,105,108,101 ,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,8 ,244,0,0,223,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,5,42,46,117,105,100,0,0,0,13,72,136,174,0,1,0,2,0 ,3,0,2,0,0,0,16,9,48,0,0,77,105,100,97,115,32,80,111,112 ,68,111,119,110,32,46,0,0,0,0,0,13,72,136,174,0,1,0,2,0 ,3,0,2,0,0,0,21,9,96,0,0,77,105,100,97,115,32,80,111,112 ,68,111,119,110,32,46,46,72,101,108,112,0,0,0,0,13,72,136,174,0 ,1,0,1,0,7,0,2,0,0,1,208,9,136,0,0,22,73,247,226,1 ,208,0,2,0,0,0,7,0,32,0,0,0,56,0,152,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107 ,77,97,110,97,103,101,114,0,102,193,104,0,6,0,0,0,0,0,0,0 ,44,0,0,0,1,0,0,0,0,1,121,0,16,0,0,0,1,0,0,0 ,0,1,199,0,4,0,0,0,1,110,100,0,0,0,1,0,11,0,0,0 ,12,2,2,0,136,0,0,0,31,0,0,0,1,0,0,0,0,0,0,0 ,3,0,0,0,2,0,0,0,0,0,0,0,16,2,2,2,5,0,0,0 ,0,0,0,0,4,0,37,0,8,0,7,0,0,0,0,1,2,0,1,0 ,0,0,0,0,0,1,180,1,2,1,2,0,0,0,0,0,4,0,38,1 ,2,0,1,0,0,0,0,0,0,1,152,1,2,0,1,0,0,0,0,0 ,0,1,124,1,2,2,1,0,0,0,0,0,0,1,96,1,2,0,1,0 ,0,0,0,0,0,1,64,1,2,0,1,0,0,0,0,0,0,1,32,1 ,2,0,1,0,0,0,0,0,0,1,0,77,105,100,97,115,67,97,108,108 ,98,97,99,107,77,97,110,97,103,101,114,87,105,100,103,101,116,84,101,120 ,116,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97 ,103,101,114,67,108,97,115,115,84,101,120,116,0,0,0,77,105,100,97,115 ,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,67,108,97,115,115 ,76,97,98,101,108,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107 ,77,97,110,97,103,101,114,83,97,118,101,0,0,0,0,77,105,100,97,115 ,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,65,112,112,108,121 ,0,115,116,77,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97 ,103,101,114,67,97,110,99,101,108,0,2,77,105,100,97,115,67,97,108,108 ,98,97,99,107,77,97,110,97,103,101,114,76,97,98,101,108,0,0,25,0 ,0,0,0,13,72,136,174,0,1,0,1,0,8,0,2,0,0,0,168,9 ,180,0,0,22,73,247,226,0,168,0,2,0,0,0,8,0,32,0,0,0 ,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,76,97,98,101,108 ,0,0,0,0,7,0,0,0,0,0,0,0,46,0,0,0,1,1,121,0 ,0,0,15,0,47,0,0,0,1,1,199,0,0,0,12,0,18,0,0,0 ,12,0,1,0,152,0,0,0,40,0,0,0,1,0,0,0,0,0,1,0 ,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0 ,0,0,15,0,41,0,0,0,1,0,0,0,0,0,18,0,16,2,2,2 ,5,0,0,0,0,0,0,0,4,0,39,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,26,11,156,0,0,223,128,6,22,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,6,87,105,100,103,101 ,116,0,0,0,0,0,0,13,72,136,174,0,1,0,1,0,11,0,2,0 ,0,1,132,12,92,0,0,22,73,247,226,1,132,0,2,0,0,0,11,0 ,32,0,0,0,52,1,72,0,0,0,0,0,0,0,0,0,0,0,0,119 ,105,100,103,101,116,45,48,45,49,50,48,57,45,49,55,0,103,101,114,0 ,15,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,149,0 ,47,0,0,0,1,0,15,0,0,0,13,0,44,0,0,0,1,0,12,0 ,0,0,98,0,16,0,0,0,1,0,0,0,0,0,151,0,4,0,0,0 ,1,0,1,0,0,0,1,0,40,0,0,0,1,0,1,0,0,0,3,0 ,19,0,0,0,1,0,15,0,0,0,1,0,20,0,0,0,1,0,18,0 ,0,0,4,0,41,0,0,0,1,0,0,0,0,0,54,0,34,0,0,0 ,1,1,2,0,0,0,6,0,33,0,0,0,1,0,1,0,0,0,1,0 ,42,0,0,0,12,0,1,1,28,0,0,0,6,0,0,0,1,2,1,0 ,0,0,6,0,5,0,0,0,1,0,1,0,0,0,3,0,7,0,0,0 ,12,0,1,0,240,0,0,0,42,2,1,1,233,0,1,0,0,0,0,77 ,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,67 ,97,110,99,101,108,0,103,101,116,84,101,0,41,2,1,1,233,100,97,0 ,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97 ,103,101,114,76,97,98,101,108,0,100,97,115,67,97,108,0,2,97,99,0 ,0,0,0,1,2,101,1,0,0,0,0,0,0,1,104,1,2,0,2,0 ,0,0,0,0,4,0,40,77,105,100,97,115,67,97,108,108,98,97,99,107 ,77,97,110,97,103,101,114,76,105,115,116,0,67,97,108,0,0,0,0,13 ,72,136,174,0,1,0,1,0,15,0,2,0,0,0,188,12,144,0,0,22 ,73,247,226,0,188,0,2,0,0,0,15,0,32,0,0,0,132,0,0,0 ,0,0,60,0,0,0,0,0,0,0,0,77,105,100,97,115,67,97,108,108 ,98,97,99,107,77,97,110,97,103,101,114,76,105,115,116,0,0,0,0,6 ,102,193,104,0,1,0,0,0,0,0,149,0,104,0,12,0,116,0,0,0 ,0,0,13,0,44,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0 ,1,0,0,83,101,110,100,77,105,100,97,115,0,0,1,0,16,2,2,2 ,3,0,0,0,0,0,0,0,4,0,41,0,4,0,0,0,0,0,0,0 ,46,0,0,0,1,0,0,0,0,0,18,0,47,0,0,0,1,0,0,0 ,0,0,12,0,44,0,0,0,1,0,0,0,0,0,25,0,16,0,0,0 ,1,0,0,0,0,0,80,0,0,0,0,13,72,136,174,0,1,0,2,0 ,3,0,2,0,0,0,34,14,44,0,0,77,105,100,97,115,32,82,101,97 ,108,105,122,101,32,76,105,115,116,32,67,97,108,108,98,97,99,107,76,105 ,115,116,32,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,18,124,111,114,0,5,0,8,0 ,23,14,44,14,112,1,128,13,72,136,174,0,1,0,1,0,6,0,2,0 ,0,0,208,0,0,0,0,22,73,247,226,0,208,0,2,0,0,0,6,0 ,32,0,0,0,52,0,120,0,0,0,0,0,0,0,0,0,0,0,0,119 ,105,100,103,101,116,45,48,45,49,50,48,55,45,50,53,0,103,101,114,0 ,5,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,4,0 ,47,0,0,0,1,0,0,0,0,0,134,0,44,0,0,0,1,0,0,0 ,0,0,25,0,16,0,0,0,1,0,0,0,0,0,122,0,4,0,0,0 ,1,0,1,0,0,0,1,0,2,0,0,0,0,0,0,1,2,0,1,0 ,0,0,0,0,0,0,180,1,2,0,1,0,0,0,0,0,0,0,152,77 ,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,84 ,101,120,116,0,16,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107 ,77,97,110,97,103,101,114,76,97,98,101,108,50,0,0,0,0,0,0,13 ,72,136,174,0,1,0,1,0,8,0,2,0,0,0,168,0,0,0,0,22 ,73,247,226,0,168,0,2,0,0,0,8,0,32,0,0,0,60,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,67,97,108,108 ,98,97,99,107,77,97,110,97,103,101,114,76,97,98,101,108,50,0,0,0 ,7,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,13,0 ,47,0,0,0,1,0,0,0,0,0,8,0,18,0,0,0,12,0,0,0 ,152,0,0,0,40,0,0,0,1,0,0,0,0,0,1,0,19,0,0,0 ,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0,0,0,13,0 ,41,0,0,0,1,0,0,0,0,0,8,0,16,2,2,2,5,97,108,0 ,0,0,0,0,4,0,42,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,36,0,232,0,0,223,128,6,32,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,16,67,97,108,108,98,97,99,107,32 ,67,111,109,109,97,110,100,0,0,0,0,13,72,136,174,0,1,0,1,0 ,16,0,2,0,0,1,24,1,168,0,0,22,73,247,226,1,24,0,2,0 ,0,0,16,0,32,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97 ,103,101,114,84,101,120,116,0,50,0,0,0,14,0,0,0,0,0,0,0 ,46,0,0,0,1,0,0,0,0,0,186,0,47,0,0,0,1,0,0,0 ,0,0,32,0,44,0,0,0,1,0,0,0,0,0,125,0,16,0,0,0 ,1,0,0,0,0,0,83,0,40,0,0,0,1,0,0,0,0,0,3,0 ,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0 ,0,0,1,0,41,0,0,0,1,97,108,0,0,0,2,0,34,0,0,0 ,1,101,114,0,0,0,4,0,33,0,0,0,1,100,97,0,0,0,1,0 ,6,0,0,0,1,97,110,0,0,0,2,0,5,0,0,0,1,0,0,0 ,0,0,1,0,42,0,0,0,12,0,0,0,236,0,0,0,12,0,0,0 ,1,0,0,0,0,0,0,0,42,2,1,1,233,2,1,0,0,0,0,77 ,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,76 ,97,98,101,108,50,0,99,101,108,0,103,0,0,0,0,13,72,136,174,0 ,1,0,1,0,13,0,2,0,0,1,44,1,228,0,0,22,73,247,226,1 ,44,0,2,0,0,0,13,0,32,0,0,0,132,0,0,0,0,0,60,0 ,0,0,0,0,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107 ,77,97,110,97,103,101,114,67,97,110,99,101,108,0,0,6,102,193,104,0 ,1,0,0,0,0,0,0,0,104,0,12,0,116,0,0,0,47,0,0,0 ,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,125,83 ,101,110,100,77,105,100,97,115,0,0,83,0,16,2,2,2,3,0,0,0 ,0,0,0,0,4,0,43,0,12,0,0,0,0,0,0,0,46,0,0,0 ,1,0,0,0,0,0,42,0,47,0,0,0,1,97,108,0,0,1,105,0 ,18,0,0,0,12,101,114,1,28,0,0,0,40,0,0,0,1,100,97,0 ,0,0,0,0,19,0,0,0,1,97,110,0,0,0,1,0,20,0,0,0 ,1,0,0,0,0,0,185,0,41,0,0,0,1,0,0,0,0,0,0,0 ,6,0,0,0,1,0,0,0,0,0,2,0,5,0,0,0,1,2,1,0 ,0,0,1,0,34,0,0,0,1,97,108,0,0,0,0,0,33,0,0,0 ,1,101,114,0,0,0,0,0,44,0,0,0,1,0,103,0,0,0,73,0 ,16,2,2,2,5,100,97,0,0,0,0,0,4,0,44,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,27,3,20,0,0,223 ,128,6,23,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,7,68 ,105,115,109,105,115,115,0,0,0,0,0,13,72,136,174,0,1,0,2,0 ,3,0,2,0,0,0,29,4,88,0,0,77,105,100,97,115,32,67,101,110 ,116,101,114,32,72,111,114,105,122,111,110,116,97,108,32,46,32,55,53,0 ,0,0,0,13,72,136,174,0,1,0,1,0,13,0,2,0,0,1,8,4 ,140,0,0,22,73,247,226,1,8,0,2,0,0,0,13,0,32,0,0,0 ,132,0,0,0,0,0,60,0,0,0,0,0,0,0,0,77,105,100,97,115 ,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,65,112,112,108,121 ,0,0,0,6,102,193,104,0,1,0,0,0,0,0,0,0,104,0,12,0 ,116,0,0,0,47,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 ,1,0,0,0,0,0,125,83,101,110,100,77,105,100,97,115,0,0,83,0 ,16,2,2,2,3,0,0,0,0,0,0,0,4,0,45,0,9,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,168,0,47,0,0,0 ,1,97,108,0,0,1,104,0,18,0,0,0,12,101,114,0,248,0,0,0 ,40,0,0,0,1,100,97,0,0,0,0,0,19,0,0,0,1,97,110,0 ,0,0,1,0,20,0,0,0,1,0,0,0,0,0,27,0,41,0,0,0 ,1,0,0,0,0,0,0,0,6,0,0,0,1,0,0,0,0,0,2,0 ,5,0,0,0,1,2,1,0,0,0,1,0,16,2,2,2,5,97,108,0 ,0,0,0,0,4,0,46,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,25,4,192,0,0,223,128,6,21,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,5,65,112,112,108,121,0,0,0,13 ,72,136,174,0,1,0,2,0,3,0,2,0,0,0,29,5,224,0,0,77 ,105,100,97,115,32,67,101,110,116,101,114,32,72,111,114,105,122,111,110,116 ,97,108,32,46,32,53,48,0,0,0,0,13,72,136,174,0,1,0,1,0 ,13,0,2,0,0,1,8,6,16,0,0,22,73,247,226,1,8,0,2,0 ,0,0,13,0,32,0,0,0,132,0,0,0,0,0,60,0,0,0,0,0 ,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97 ,103,101,114,83,97,118,101,0,0,0,0,6,102,193,104,0,1,0,0,0 ,0,0,0,0,104,0,12,0,116,0,0,0,47,0,0,0,1,0,0,0 ,0,0,0,0,0,0,0,0,1,0,0,0,0,0,125,83,101,110,100,77 ,105,100,97,115,0,0,83,0,16,2,2,2,3,0,0,0,0,0,0,0 ,4,0,47,0,9,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,103,0,47,0,0,0,1,97,108,0,0,1,102,0,18,0,0,0 ,12,101,114,0,248,0,0,0,40,0,0,0,1,100,97,0,0,0,0,0 ,19,0,0,0,1,97,110,0,0,0,1,0,20,0,0,0,1,0,0,0 ,0,0,102,0,41,0,0,0,1,0,0,0,0,0,0,0,6,0,0,0 ,1,0,0,0,0,0,2,0,5,0,0,0,1,2,1,0,0,0,1,0 ,16,2,2,2,5,97,108,0,0,0,0,0,4,0,48,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,24,6,68,0,0,223 ,128,6,20,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,4,83 ,97,118,101,0,0,0,0,13,72,136,174,0,1,0,2,0,3,0,2,0 ,0,0,29,7,100,0,0,77,105,100,97,115,32,67,101,110,116,101,114,32 ,72,111,114,105,122,111,110,116,97,108,32,46,32,50,53,0,0,0,0,13 ,72,136,174,0,1,0,1,0,8,0,2,0,0,1,84,7,148,0,0,22 ,73,247,226,1,84,0,2,0,0,0,8,0,32,0,0,0,64,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,67,97,108,108 ,98,97,99,107,77,97,110,97,103,101,114,67,108,97,115,115,76,97,98,101 ,108,0,104,0,13,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,14,0,47,0,0,0,1,0,0,0,0,0,41,0,18,0,0,0 ,12,0,125,1,68,0,0,0,40,0,0,0,1,0,83,0,0,0,0,0 ,19,0,0,0,1,0,0,0,0,0,0,0,20,0,0,0,1,0,0,0 ,0,0,0,0,41,0,0,0,1,0,103,0,0,0,0,0,6,0,0,0 ,1,1,102,0,0,0,6,0,5,0,0,0,1,0,0,0,0,0,4,0 ,7,0,0,0,12,0,0,1,20,0,0,0,34,0,0,0,1,0,1,0 ,0,0,4,0,33,0,0,0,1,0,102,0,0,0,3,0,36,0,0,0 ,12,0,0,0,228,0,0,0,45,2,1,1,233,0,2,0,0,0,0,77 ,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,67 ,108,97,115,115,84,101,120,116,0,0,0,0,44,0,0,0,45,2,1,1 ,233,0,73,0,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107 ,77,97,110,97,103,101,114,67,108,97,115,115,84,101,120,116,0,98,101,108 ,0,100,97,0,16,2,2,2,5,97,99,0,0,0,0,0,4,0,49,0 ,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,7 ,200,0,0,223,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,5,67,108,97,115,115,0,0,0,13,72,136,174,0,1,0,1,0 ,17,0,2,0,0,1,44,9,52,0,0,22,73,247,226,1,44,0,2,0 ,0,0,17,0,32,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97 ,103,101,114,67,108,97,115,115,84,101,120,116,0,0,104,0,11,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,66,0,47,0,0,0 ,1,0,0,0,0,0,9,0,40,0,0,0,1,0,125,0,0,0,3,0 ,19,0,0,0,1,0,83,0,0,0,4,0,20,0,0,0,1,0,0,0 ,0,0,0,0,41,0,0,0,1,0,0,0,0,0,7,0,34,0,0,0 ,1,0,103,0,0,0,5,0,33,0,0,0,1,1,102,0,0,0,1,0 ,13,0,0,0,2,0,0,0,0,0,0,0,42,0,0,0,12,0,0,0 ,252,0,0,0,22,0,0,0,12,0,1,0,204,0,0,0,46,2,1,1 ,233,0,102,0,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107 ,77,97,110,97,103,101,114,87,105,100,103,101,116,84,101,120,116,0,108,108 ,98,97,99,0,46,2,1,1,233,101,114,0,0,0,0,77,105,100,97,115 ,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,87,105,100,103,101 ,116,84,101,120,116,0,108,108,98,97,99,0,0,0,0,13,72,136,174,0 ,1,0,1,0,17,0,2,0,0,1,60,9,100,0,0,22,73,247,226,1 ,60,0,2,0,0,0,17,0,32,0,0,0,64,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,67,97,108,108,98,97,99,107 ,77,97,110,97,103,101,114,87,105,100,103,101,116,84,101,120,116,0,104,0 ,13,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,73,0 ,47,0,0,0,1,0,0,0,0,0,9,0,40,0,0,0,1,0,125,0 ,0,0,0,0,19,0,0,0,1,0,83,0,0,0,3,0,20,0,0,0 ,1,0,0,0,0,0,2,0,41,0,0,0,1,0,0,0,0,0,0,0 ,22,0,0,0,12,0,103,1,16,0,0,0,34,0,0,0,1,1,102,0 ,0,0,5,0,33,0,0,0,1,0,0,0,0,0,1,0,13,0,0,0 ,2,0,0,0,0,0,0,0,6,0,0,0,1,0,1,255,255,255,250,0 ,5,0,0,0,1,0,102,0,0,0,4,0,7,0,0,0,12,97,108,0 ,228,0,0,0,41,2,1,1,233,101,114,0,0,0,0,77,105,100,97,115 ,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,76,97,98,101,108 ,0,100,97,115,67,97,108,0,41,2,1,1,233,97,110,0,0,0,0,77 ,105,100,97,115,67,97,108,108,98,97,99,107,77,97,110,97,103,101,114,76 ,97,98,101,108,0,97,115,115,84,101,120,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,44,10,168,0,0,223,128,6,40,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,24,77,105,100,97,115 ,32,45,32,67,97,108,108,98,97,99,107,32,77,97,110,97,103,101,114,0 ,0,0,0,13,72,136,174,0,1,0,1,0,4,0,2,0,0,1,28,11 ,252,0,0,22,73,247,226,1,28,0,2,0,0,0,4,0,32,0,0,0 ,120,0,0,0,0,0,48,0,0,0,0,0,0,0,0,77,105,100,97,115 ,69,114,114,111,114,66,111,120,0,97,110,6,102,193,104,0,1,100,103,0 ,0,84,101,0,92,0,12,0,104,0,0,0,0,0,0,0,46,0,0,0 ,0,0,0,0,0,0,0,0,47,0,0,0,1,0,0,83,101,110,100,77 ,105,100,97,115,0,0,125,0,16,2,2,2,3,0,0,0,0,0,0,0 ,4,0,50,0,9,0,0,0,0,0,0,0,26,0,0,0,12,0,0,1 ,12,0,0,0,46,0,0,0,1,0,0,0,0,0,43,0,47,0,0,0 ,1,0,0,0,0,0,62,0,4,0,0,0,1,0,0,0,0,0,1,0 ,44,0,0,0,1,0,0,0,0,1,162,0,16,0,0,0,1,0,0,0 ,0,0,188,0,10,0,0,0,1,0,0,0,0,0,2,0,11,0,0,0 ,12,0,0,0,252,0,0,0,28,0,0,0,12,2,1,0,236,0,0,0 ,16,2,2,2,5,100,97,0,0,0,0,0,4,0,51,0,16,2,2,2 ,5,101,114,0,0,0,0,0,4,0,52,0,16,2,2,2,5,2,1,0 ,0,0,0,0,4,0,53,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,38,12,64,0,0,223,128,6,34,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,18,69,114,114,111,114,32,68,105,97 ,108,111,103,32,76,97,98,101,108,0,0,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,39,13,116,0,0,223,128,6,35,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,19,77,105,100,97,115 ,32,69,114,114,111,114,32,77,101,115,115,97,103,101,0,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,31,13,180,0,0,223 ,128,6,27,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,11,65 ,99,107,110,111,119,108,101,103,101,100,0,0,0,0,0,13,72,136,174,0 ,1,0,2,0,3,0,2,0,0,0,44,13,244,0,0,77,105,100,97,115 ,32,80,111,112,68,111,119,110,32,46,46,72,101,108,112,10,77,73,100,97 ,115,32,80,111,112,68,111,119,110,32,46,46,67,97,110,99,101,108,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,18,124,111,114,0,5,0,9,0,22,14,28,15 ,236,0,4,13,72,136,174,0,1,0,1,0,7,0,2,0,0,1,176,0 ,0,0,0,22,73,247,226,1,176,0,2,0,0,0,7,0,32,0,0,0 ,56,0,212,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,82,101,115,111,117,114,99,101,77,97,110,97,103,101,114,0,1,100,103,0 ,9,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,66,0 ,47,0,0,0,1,0,0,0,0,0,115,0,44,0,0,0,1,110,100,0 ,0,1,112,0,16,0,0,0,1,2,2,0,0,1,32,0,4,0,0,0 ,1,0,50,0,0,0,1,0,31,0,0,0,1,0,0,0,0,0,0,0 ,3,0,0,0,2,0,0,0,0,0,0,0,11,0,0,0,12,0,0,0 ,196,0,0,0,9,0,0,0,12,0,0,0,172,0,0,0,21,2,1,1 ,233,0,0,0,0,0,0,65,112,112,108,121,0,0,0,0,1,0,0,0 ,16,2,2,2,5,0,0,0,0,0,0,0,4,0,54,0,10,0,0,0 ,0,0,0,1,2,0,1,0,0,0,0,0,0,1,168,1,2,0,1,0 ,0,0,0,0,0,1,160,1,2,0,1,0,0,0,0,0,0,1,148,1 ,2,101,1,0,0,0,0,0,0,1,136,1,2,2,1,0,0,0,0,0 ,0,1,128,1,2,0,1,0,0,0,0,0,0,1,116,1,2,97,1,0 ,0,0,0,0,0,1,108,1,2,98,1,0,0,0,0,0,0,1,100,1 ,2,98,1,0,0,0,0,0,0,1,92,1,2,97,1,0,0,0,0,0 ,0,1,84,83,97,118,101,0,0,1,104,76,105,115,116,0,0,0,0,65 ,112,112,108,121,0,100,97,67,97,110,99,101,108,0,99,86,97,108,117,101 ,76,97,98,101,108,0,116,84,101,120,116,0,98,97,99,67,108,97,115,115 ,84,101,120,116,0,112,108,78,97,109,101,84,101,120,116,0,67,97,108,67 ,108,97,115,115,0,97,110,76,97,98,101,108,0,110,99,95,83,101,112,13 ,72,136,174,0,1,0,1,0,8,0,2,0,0,0,148,0,0,0,5,22 ,73,247,226,0,148,0,2,0,0,0,8,0,32,0,0,0,40,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,76,97,98,101,108,0,101,115,0 ,7,0,0,0,0,0,0,0,46,0,0,0,1,100,103,0,0,0,18,0 ,47,0,0,0,1,0,0,0,0,0,6,0,18,0,0,0,12,0,0,0 ,132,0,0,0,40,0,0,0,1,0,0,0,0,0,1,0,19,0,0,0 ,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0,0,0,7,0 ,41,0,0,0,1,0,0,0,0,0,13,0,16,2,2,2,5,0,0,0 ,0,0,0,0,4,0,55,255,255,255,221,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,26,1,200,0,0,223,128,6,22,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,6,87,105,100,103,101,116,0,28,0 ,49,0,0,13,72,136,174,0,1,0,1,0,8,0,2,0,0,1,20,2 ,116,1,212,22,73,247,226,1,20,0,2,0,0,0,8,0,32,0,0,0 ,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,108,97,115,115 ,0,101,115,0,13,0,0,0,0,0,0,0,46,0,0,0,1,100,103,0 ,0,0,15,0,47,0,0,0,1,0,0,0,0,0,38,0,18,0,0,0 ,12,0,0,1,4,0,0,0,40,0,0,0,1,0,0,0,0,0,0,0 ,19,0,0,0,1,0,0,0,0,0,0,0,20,0,0,0,1,0,0,0 ,0,0,0,0,41,0,0,0,1,0,0,0,0,0,0,0,34,0,0,0 ,1,0,0,0,0,0,4,0,33,0,0,0,1,0,0,0,0,0,3,0 ,36,0,0,0,12,0,0,0,232,0,0,0,6,0,0,0,1,2,1,0 ,0,0,7,0,5,0,0,0,1,112,108,0,0,0,4,0,7,0,0,0 ,12,2,2,0,204,0,0,0,25,2,1,1,233,0,54,0,0,0,0,67 ,108,97,115,115,84,101,120,116,0,0,0,0,0,1,168,0,25,2,1,1 ,233,0,0,0,0,0,0,67,108,97,115,115,84,101,120,116,0,1,148,1 ,2,101,1,0,16,2,2,2,5,1,136,0,0,0,0,0,4,0,56,0 ,1,0,5,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,2 ,168,0,0,223,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,5,67,108,97,115,115,12,0,82,13,72,136,174,0,1,0,1,0 ,17,0,2,0,0,1,0,3,212,193,104,22,73,247,226,1,0,0,2,0 ,0,0,17,0,32,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,78,97,109,101,84,101,120,116,0,13,0,0,0,13,0,0,0 ,0,0,0,0,46,0,0,0,1,0,15,0,0,0,85,0,47,0,0,0 ,1,0,38,0,0,0,5,0,40,0,0,0,1,0,0,0,0,0,0,0 ,19,0,0,0,1,0,0,0,0,0,3,0,20,0,0,0,1,0,0,0 ,0,0,5,0,41,0,0,0,1,0,0,0,0,0,0,0,13,0,0,0 ,2,0,0,0,0,0,0,0,22,0,0,0,12,0,4,0,232,0,0,0 ,6,0,0,0,1,0,3,255,255,255,249,0,5,0,0,0,1,0,0,0 ,0,0,4,0,7,0,0,0,12,0,7,0,208,0,0,0,34,0,0,0 ,1,0,4,0,0,0,9,0,33,0,0,0,1,0,0,0,0,0,1,0 ,21,2,1,1,233,0,0,0,0,0,0,76,97,98,101,108,0,0,0,0 ,0,1,168,0,21,2,1,1,233,0,0,0,0,0,0,76,97,98,101,108 ,0,101,120,116,0,1,148,0,0,0,10,13,72,136,174,0,1,0,1,0 ,17,0,2,0,0,0,232,4,4,1,23,22,73,247,226,0,232,0,2,0 ,0,0,17,0,32,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,67,108,97,115,115,84,101,120,116,0,0,0,0,11,0,0,0 ,0,0,0,0,46,0,0,0,1,0,15,0,0,0,86,0,47,0,0,0 ,1,0,38,0,0,0,49,0,40,0,0,0,1,0,0,0,0,0,3,0 ,19,0,0,0,1,0,0,0,0,0,4,0,20,0,0,0,1,0,0,255 ,255,255,255,0,41,0,0,0,1,0,0,0,0,0,5,0,13,0,0,0 ,2,0,0,0,0,0,0,0,42,0,0,0,12,0,4,0,208,0,0,0 ,22,0,0,0,12,0,3,0,184,0,0,0,34,0,0,0,1,0,0,0 ,0,0,9,0,33,0,0,0,1,0,7,0,0,0,1,0,24,2,1,1 ,233,0,4,0,0,0,0,78,97,109,101,84,101,120,116,0,0,0,1,0 ,24,2,1,1,233,0,0,0,0,0,0,78,97,109,101,84,101,120,116,0 ,0,1,168,0,32,0,0,13,72,136,174,0,1,0,1,0,17,0,2,0 ,0,0,204,5,28,100,103,22,73,247,226,0,204,0,2,0,0,0,17,0 ,32,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84 ,101,120,116,0,84,101,120,0,11,0,0,0,0,0,0,0,46,0,0,0 ,1,0,0,0,0,0,20,0,47,0,0,0,1,0,0,0,0,0,216,0 ,40,0,0,0,1,0,0,0,0,0,0,0,19,0,0,0,1,0,0,0 ,0,0,1,0,20,0,0,0,1,0,0,0,0,0,20,0,41,0,0,0 ,1,0,0,0,0,0,0,0,34,0,0,0,1,0,0,0,0,0,21,0 ,33,0,0,0,1,0,0,0,0,0,1,0,6,0,0,0,1,0,0,0 ,0,0,6,0,5,0,0,0,1,0,0,0,0,0,3,0,7,0,0,0 ,12,0,0,0,180,0,0,0,21,2,1,1,233,2,1,0,0,0,0,65 ,112,112,108,121,0,109,101,84,101,120,116,0,1,0,4,13,72,136,174,0 ,1,0,1,0,8,0,2,0,0,0,208,6,28,0,0,22,73,247,226,0 ,208,0,2,0,0,0,8,0,32,0,0,0,44,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,86,97,108,117,101,76,97,98,101,108,0,0,0 ,10,0,0,0,0,0,0,0,46,0,0,0,1,0,20,0,0,0,18,0 ,47,0,0,0,1,0,216,0,0,0,203,0,18,0,0,0,12,0,0,0 ,192,0,0,0,40,0,0,0,1,0,1,0,0,0,0,0,19,0,0,0 ,1,0,20,0,0,0,1,0,20,0,0,0,1,0,0,0,0,0,18,0 ,41,0,0,0,1,0,21,0,0,0,0,0,6,0,0,0,1,0,1,0 ,0,0,0,0,5,0,0,0,1,0,6,0,0,0,3,0,7,0,0,0 ,12,0,3,0,172,0,0,0,20,2,1,1,233,0,0,0,0,0,0,84 ,101,120,116,0,0,0,0,0,16,2,2,2,5,109,101,0,0,0,0,0 ,4,0,57,98,101,108,0,13,72,136,174,0,1,0,2,0,5,0,2,0 ,0,0,34,7,0,100,97,223,128,6,30,3,1,0,1,9,73,83,79,56 ,56,53,57,45,49,2,14,82,101,115,111,117,114,99,101,32,86,97,108,117 ,101,136,174,0,1,0,1,13,72,136,174,0,1,0,1,0,13,0,2,0 ,0,1,36,7,232,0,2,22,73,247,226,1,36,0,2,0,0,0,13,0 ,32,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67 ,97,110,99,101,108,0,98,0,11,0,0,0,0,0,0,0,46,0,0,0 ,1,0,0,0,0,0,242,0,47,0,0,0,1,0,0,0,0,1,5,0 ,18,0,0,0,12,0,0,1,20,0,0,0,40,0,0,0,1,0,0,0 ,0,0,4,0,19,0,0,0,1,0,0,0,0,0,0,0,20,0,0,0 ,1,0,0,0,0,0,0,0,41,0,0,0,1,0,0,0,0,0,0,0 ,42,0,0,0,12,0,0,0,252,0,0,0,34,0,0,0,1,0,0,0 ,0,0,41,0,33,0,0,0,1,0,0,0,0,0,1,0,49,0,0,0 ,9,2,1,0,180,0,0,6,102,193,104,0,1,120,116,0,0,0,0,0 ,224,0,12,0,236,0,0,0,0,0,0,0,4,0,57,0,0,0,0,0 ,0,0,0,0,0,0,0,78,97,109,101,83,101,110,100,77,105,100,97,115 ,0,2,1,0,16,2,2,2,3,0,0,0,0,0,0,0,4,0,58,0 ,21,2,1,1,233,101,1,0,0,0,0,65,112,112,108,121,0,0,0,0 ,4,0,56,0,16,2,2,2,5,0,1,0,0,0,0,0,4,0,59,0 ,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,27,8 ,36,86,77,223,128,6,23,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,7,68,105,115,109,105,115,115,109,95,65,100,100,13,72,136,174,0 ,1,0,2,0,3,0,2,0,0,0,17,9,96,0,132,77,105,100,97,115 ,32,80,111,112,100,111,119,110,32,46,94,0,1,0,2,13,72,136,174,0 ,1,0,1,0,15,0,2,0,0,1,88,9,148,0,1,22,73,247,226,1 ,88,0,2,0,0,0,15,0,32,0,0,0,112,0,0,0,0,0,40,0 ,0,0,0,0,0,0,0,76,105,115,116,0,108,0,98,6,102,193,104,0 ,1,0,0,0,0,0,0,0,84,0,12,0,96,0,0,0,47,0,0,0 ,1,0,0,0,0,0,0,0,0,0,0,0,12,0,0,1,20,0,0,83 ,101,110,100,77,105,100,97,115,0,0,4,0,16,2,2,2,3,0,0,0 ,0,0,0,0,4,0,60,0,14,0,0,0,0,0,0,0,46,0,0,0 ,1,0,0,0,0,0,20,0,47,0,0,0,1,0,0,0,0,0,87,0 ,44,0,0,0,1,0,0,0,0,1,68,0,16,0,0,0,1,0,0,0 ,0,0,87,0,40,0,0,0,1,2,1,0,0,0,3,0,19,0,0,0 ,1,120,116,0,0,0,1,0,20,0,0,0,1,0,0,0,0,0,20,0 ,41,0,0,0,1,0,0,0,0,0,8,0,5,0,0,0,1,109,101,0 ,0,0,3,0,6,0,0,0,1,2,1,0,0,0,0,0,33,0,0,0 ,1,0,0,0,0,0,1,0,34,0,0,0,1,101,1,0,0,0,20,0 ,7,0,0,0,12,0,0,1,60,0,0,0,42,0,0,0,12,0,1,1 ,32,0,0,0,25,2,1,1,233,97,1,0,0,0,0,67,108,97,115,115 ,84,101,120,116,0,0,0,0,0,1,100,0,26,2,1,1,233,0,0,0 ,0,0,0,86,97,108,117,101,76,97,98,101,108,0,84,83,97,118,101,0 ,0,0,0,13,72,136,174,0,1,0,2,0,3,0,2,0,0,0,34,9 ,188,67,117,77,105,100,97,115,32,82,101,97,108,105,122,101,32,76,105,115 ,116,32,82,101,115,111,117,114,99,101,76,105,115,116,32,46,0,136,174,0 ,1,0,2,13,72,136,174,0,1,0,1,0,13,0,2,0,0,0,172,11 ,44,0,1,22,73,247,226,0,172,0,2,0,0,0,13,0,32,0,0,0 ,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,97,118,101,0 ,108,0,98,0,9,0,0,0,0,0,0,0,46,0,0,0,1,0,12,0 ,0,0,151,0,47,0,0,0,1,0,0,0,0,0,247,0,18,0,0,0 ,12,0,0,0,156,0,0,0,40,0,0,0,1,100,97,0,0,0,0,0 ,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0 ,0,0,55,0,41,0,0,0,1,0,0,0,0,0,0,0,6,0,0,0 ,1,0,0,0,0,0,2,0,5,0,0,0,1,0,0,0,0,0,1,0 ,16,2,2,2,5,0,0,0,0,0,0,0,4,0,61,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,24,11,104,0,0,223 ,128,6,20,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,4,83 ,97,118,101,0,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0 ,0,0,44,12,44,0,0,223,128,6,40,3,1,0,1,9,73,83,79,56 ,56,53,57,45,49,2,24,77,105,100,97,115,32,45,32,82,101,115,111,117 ,114,99,101,32,77,97,110,97,103,101,114,0,0,0,0,13,72,136,174,0 ,1,0,1,0,13,0,2,0,0,1,0,12,92,0,0,22,73,247,226,1 ,0,0,2,0,0,0,13,0,32,0,0,0,112,0,0,0,0,0,40,0 ,0,0,0,0,0,0,0,65,112,112,108,121,0,97,110,6,102,193,104,0 ,1,0,0,0,0,0,0,0,84,0,12,0,96,0,0,0,47,0,0,0 ,1,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,156,0,0,83 ,101,110,100,77,105,100,97,115,0,0,0,0,16,2,2,2,3,0,0,0 ,0,0,0,0,4,0,62,0,10,0,0,0,0,0,0,0,46,0,0,0 ,1,0,0,0,0,0,55,0,47,0,0,0,1,0,0,0,0,1,4,0 ,18,0,0,0,12,0,0,0,240,0,0,0,40,0,0,0,1,0,0,0 ,0,0,0,0,19,0,0,0,1,2,1,0,0,0,5,0,20,0,0,0 ,1,120,116,0,0,0,92,0,41,0,0,0,1,0,0,0,0,0,0,0 ,6,0,0,0,1,0,0,0,0,0,2,0,5,0,0,0,1,109,101,0 ,0,0,1,0,21,0,0,0,1,2,1,0,0,0,16,0,16,2,2,2 ,5,0,0,0,0,0,0,0,4,0,63,3,1,0,1,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,25,12,160,100,40,223,128,6,21,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,5,65,112,112,108,121 ,72,136,174,13,72,136,174,0,1,0,2,0,3,0,2,0,0,0,29,13 ,184,247,226,77,105,100,97,115,32,67,101,110,116,101,114,32,72,111,114,105 ,122,111,110,116,97,108,32,46,32,53,48,0,105,100,103,13,72,136,174,0 ,1,0,1,0,7,0,2,0,0,1,184,13,232,97,98,22,73,247,226,1 ,184,0,2,0,0,0,7,0,32,0,0,0,52,0,160,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,0,0,0,0,7,0,0,0,0,0,0,0,46,0,0,0 ,1,0,0,0,0,0,98,0,47,0,0,0,1,0,0,0,0,0,143,0 ,44,0,0,0,1,100,97,0,0,1,103,0,16,0,0,0,1,0,0,0 ,0,1,222,0,4,0,0,0,1,0,0,0,0,0,1,0,31,0,0,0 ,1,0,0,0,0,0,0,0,11,0,0,0,12,0,0,0,144,0,0,0 ,16,2,2,2,5,0,0,0,0,0,0,0,4,0,64,0,7,0,0,0 ,0,0,0,1,2,0,1,0,0,0,0,0,0,1,160,1,2,0,1,0 ,0,0,0,0,0,1,136,1,2,0,1,0,0,0,0,0,0,1,108,1 ,2,0,1,0,0,0,0,0,0,1,80,1,2,0,1,0,0,0,0,0 ,0,1,52,1,2,0,1,0,0,0,0,0,0,1,24,1,2,2,1,0 ,0,0,0,0,0,0,252,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,114,101,97,116,101,78,101,119,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,67,108,97,115,115,84,101,120 ,116,0,120,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,78,97,109,101,84,101,120,116,0,97,98,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,67,108,97,115,115,76,97,98,101,108,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,68,105,115,109 ,105,115,115,0,98,97,99,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,76,97,98,101,108,0,108,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,80,97,110,101,115,0,97,0,0,0,0,0 ,0,0,0,18,124,111,114,0,5,0,10,0,19,15,140,15,188,0,52,13 ,72,136,174,0,1,0,1,0,11,0,2,0,0,1,128,0,0,0,0,22 ,73,247,226,1,128,0,2,0,0,0,11,0,32,0,0,0,56,1,72,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,80,97,110,101,115,0,0,0,15,0,0,0 ,0,0,0,0,46,0,0,0,1,0,98,0,0,0,46,0,47,0,0,0 ,1,0,143,0,0,0,78,0,44,0,0,0,1,1,103,0,0,0,25,0 ,16,0,0,0,1,1,222,0,0,0,25,0,4,0,0,0,1,0,1,0 ,0,0,1,0,40,0,0,0,1,0,0,0,0,0,3,0,19,0,0,0 ,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0,0,0,6,0 ,41,0,0,0,1,0,0,0,0,0,8,0,34,0,0,0,1,1,160,0 ,0,0,6,0,33,0,0,0,1,1,136,0,0,0,1,0,6,0,0,0 ,1,1,108,0,0,0,3,0,5,0,0,0,1,1,80,0,0,0,3,0 ,7,0,0,0,12,1,52,1,32,0,0,0,42,0,0,0,12,1,24,0 ,244,0,0,0,42,2,1,1,233,0,252,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,67,108,97,115,115,84,101,120 ,116,0,97,115,73,110,103,0,40,2,1,1,233,103,101,0,0,0,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,68,105,115,109 ,105,115,115,0,78,97,109,0,2,101,120,0,0,0,0,1,2,100,1,0 ,0,0,0,0,0,1,104,1,2,103,2,0,0,0,0,0,4,0,65,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,76,105,115,116 ,0,105,115,0,0,0,13,13,72,136,174,0,1,0,1,0,15,0,2,0 ,0,0,184,0,0,0,0,22,73,247,226,0,184,0,2,0,0,0,15,0 ,32,0,0,0,128,0,0,0,0,0,56,0,0,0,0,0,0,0,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,76,105,115,116 ,0,0,0,6,102,193,104,0,1,0,0,0,0,0,0,0,100,0,12,0 ,112,0,0,0,47,0,0,0,1,0,143,0,0,0,0,0,0,0,0,0 ,1,1,103,0,0,0,25,83,101,110,100,77,105,100,97,115,0,0,25,0 ,16,2,2,2,3,0,1,0,0,0,0,0,4,0,66,0,4,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,37,0,47,0,0,0 ,1,0,0,0,0,0,9,0,44,0,0,0,1,0,0,0,0,0,16,0 ,16,0,0,0,1,1,160,0,0,0,74,0,0,0,25,13,72,136,174,0 ,1,0,2,0,3,0,2,0,0,0,31,1,152,1,72,77,105,100,97,115 ,32,82,101,97,108,105,122,101,32,76,105,115,116,32,73,110,103,111,116,76 ,105,115,116,32,46,0,13,0,0,0,0,13,72,136,174,0,1,0,1,0 ,6,0,2,0,0,2,36,2,104,72,101,22,73,247,226,2,36,0,2,0 ,0,0,6,0,32,0,0,0,52,0,120,0,0,0,0,0,0,0,0,0 ,0,0,0,119,105,100,103,101,116,45,48,45,49,54,49,48,45,49,55,0 ,76,105,115,0,5,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,13,0,47,0,0,0,1,0,0,0,0,0,21,0,44,0,0,0 ,1,0,0,0,0,0,25,0,16,0,0,0,1,110,100,0,0,0,33,0 ,4,0,0,0,1,2,2,0,0,0,1,0,10,0,0,0,0,0,0,1 ,2,0,1,0,0,0,0,0,0,2,8,1,2,0,1,0,0,0,0,0 ,0,1,236,1,2,0,1,0,0,0,0,0,0,1,208,1,2,0,1,0 ,0,0,0,0,0,1,176,1,2,1,1,0,0,0,0,0,0,1,144,1 ,2,1,1,0,0,0,0,0,0,1,112,1,2,1,1,0,0,0,0,0 ,0,1,80,1,2,1,1,0,0,0,0,0,0,1,52,1,2,1,1,0 ,0,0,0,0,0,1,24,1,2,1,1,0,0,0,0,0,0,0,248,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,67,97,108,108 ,98,97,99,107,79,112,116,105,111,110,0,77,105,100,97,115,73,110,103,111 ,116,86,97,108,117,101,79,119,110,101,114,76,97,98,101,108,0,110,103,77 ,105,100,97,115,73,110,103,111,116,86,97,108,117,101,79,119,110,101,114,84 ,101,120,116,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,97,108,108,98,97,99,107,83,97,118,101,0,110,103,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,67,97,108,108 ,98,97,99,107,65,112,112,108,121,0,103,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,67,97,108,108,98,97,99,107,76,97,98,101 ,108,0,101,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,67,97,108,108,98,97,99,107,84,101,120,116,0,0,25,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,86,97,108,117,101,65,112,112 ,108,121,0,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,86,97,108,117,101,84,101,120,116,0,108,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,86,97,108,117,101,76,97,98,101,108,0,0 ,0,0,13,13,72,136,174,0,1,0,1,0,8,0,2,0,0,0,168,2 ,160,0,0,22,73,247,226,0,168,0,2,0,0,0,8,0,32,0,0,0 ,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,86,97,108,117,101,76,97,98 ,101,108,0,0,7,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,10,0,47,0,0,0,1,0,0,0,0,0,5,0,18,0,0,0 ,12,0,0,0,152,0,0,0,40,0,0,0,1,0,0,0,0,0,1,0 ,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0 ,0,0,10,0,41,0,0,0,1,0,0,0,0,0,6,0,16,2,2,2 ,5,0,0,0,0,0,0,0,4,0,67,0,21,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,25,4,220,0,82,223,128,6,21,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,5,86,97,108,117,101 ,102,193,104,13,72,136,174,0,1,0,1,0,17,0,2,0,0,1,20,5 ,156,0,13,22,73,247,226,1,20,0,2,0,0,0,17,0,32,0,0,0 ,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,86,97,108,117,101,84,101,120 ,116,0,0,0,10,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,69,0,47,0,0,0,1,0,0,0,0,0,6,0,40,0,0,0 ,1,0,0,0,0,0,1,0,19,0,0,0,1,0,0,0,0,0,3,0 ,20,0,0,0,1,0,0,0,0,0,6,0,41,0,0,0,1,0,0,0 ,0,0,2,0,22,0,0,0,12,0,0,0,232,0,0,0,34,0,0,0 ,1,0,0,0,0,0,4,0,33,0,0,0,1,0,0,0,0,0,3,0 ,36,0,0,0,12,0,0,0,188,0,0,0,43,2,1,1,233,0,0,0 ,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,86,97,108,117,101,65,112,112,108,121,0,0,0,0,0,0,43,2,1,1 ,233,1,1,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,86,97,108,117,101,76,97,98,101,108,0,107,79,112,116,0 ,20,0,0,13,72,136,174,0,1,0,1,0,13,0,2,0,0,0,192,5 ,204,0,4,22,73,247,226,0,192,0,2,0,0,0,13,0,32,0,0,0 ,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,86,97,108,117,101,65,112,112 ,108,121,0,0,9,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,198,0,47,0,0,0,1,0,0,0,0,0,5,0,18,0,0,0 ,12,0,0,0,176,0,0,0,40,0,0,0,1,0,0,0,0,0,1,0 ,19,0,0,0,1,0,0,0,0,0,0,0,20,0,0,0,1,0,0,0 ,0,0,0,0,41,0,0,0,1,0,0,0,0,0,4,0,34,0,0,0 ,1,0,0,0,0,0,3,0,33,0,0,0,1,0,0,0,0,0,1,0 ,16,2,2,2,5,0,0,0,0,0,0,0,4,0,68,0,0,0,24,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,6,248,53,57,223 ,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,5,65 ,112,112,108,121,0,0,67,13,72,136,174,0,1,0,1,0,17,0,2,0 ,0,1,68,7,208,47,115,22,73,247,226,1,68,0,2,0,0,0,17,0 ,32,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,67,97,108,108 ,98,97,99,107,84,101,120,116,0,0,0,0,13,0,0,0,0,0,0,0 ,46,0,0,0,1,0,198,0,0,0,6,0,47,0,0,0,1,0,5,0 ,0,0,60,0,40,0,0,0,1,0,0,0,0,0,3,0,19,0,0,0 ,1,0,1,0,0,0,1,0,20,0,0,0,1,0,0,0,0,0,3,0 ,41,0,0,0,1,0,0,0,0,0,1,0,34,0,0,0,1,0,4,0 ,0,0,9,0,33,0,0,0,1,0,3,0,0,0,1,0,6,0,0,0 ,1,0,1,0,0,0,0,0,5,0,0,0,1,0,0,0,0,0,3,0 ,7,0,0,0,12,0,0,1,20,0,0,0,42,0,0,0,12,77,97,0 ,228,0,0,0,12,0,0,0,1,65,112,0,0,0,0,0,46,2,1,1 ,233,2,1,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,97,108,108,98,97,99,107,76,97,98,101,108,0,0,107 ,79,112,116,0,47,2,1,1,233,100,97,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,67,97,108,108,98,97,99,107 ,79,112,116,105,111,110,0,108,117,101,79,6,102,193,104,13,72,136,174,0 ,1,0,1,0,8,0,2,0,0,0,224,8,0,100,97,22,73,247,226,0 ,224,0,2,0,0,0,8,0,32,0,0,0,64,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,97,108,108,98,97,99,107,76,97,98,101,108,0,0,0 ,8,0,0,0,0,0,0,0,46,0,0,0,1,0,198,0,0,0,11,0 ,47,0,0,0,1,0,5,0,0,0,83,0,18,0,0,0,12,0,0,0 ,208,0,0,0,40,0,0,0,1,0,1,0,0,0,3,0,19,0,0,0 ,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0,0,0,7,0 ,41,0,0,0,1,0,4,0,0,0,7,0,42,0,0,0,12,0,3,0 ,168,0,0,0,40,2,1,1,233,0,1,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,86,97,108,117,101,79,119,110,101,114,84,101,120,116,0 ,42,0,0,0,16,2,2,2,5,0,0,0,0,0,0,0,4,0,69,0 ,1,111,109,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,28,9 ,92,0,0,223,128,6,24,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,8,67,97,108,108,98,97,99,107,0,0,0,1,13,72,136,174,0 ,1,0,1,0,13,0,2,0,0,0,196,10,84,0,0,22,73,247,226,0 ,196,0,2,0,0,0,13,0,32,0,0,0,64,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,97,108,108,98,97,99,107,65,112,112,108,121,0,0,0 ,9,0,0,0,0,0,0,0,46,0,0,0,1,0,198,0,0,0,14,0 ,47,0,0,0,1,0,5,0,0,0,150,0,18,0,0,0,12,0,0,0 ,180,0,0,0,40,0,0,0,1,0,1,0,0,0,0,0,19,0,0,0 ,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0,0,0,14,0 ,41,0,0,0,1,0,4,0,0,0,0,0,6,0,0,0,1,0,3,0 ,0,0,2,0,5,0,0,0,1,0,1,0,0,0,1,0,16,2,2,2 ,5,110,103,0,0,0,0,0,4,0,70,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,25,10,136,2,1,223,128,6,21,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,5,65,112,112,108,121 ,0,0,0,13,72,136,174,0,1,0,1,0,13,0,2,0,0,0,220,11 ,100,114,98,22,73,247,226,0,220,0,2,0,0,0,13,0,32,0,0,0 ,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,67,97,108,108,98,97,99,107 ,83,97,118,101,0,0,0,0,11,0,0,0,0,0,0,0,46,0,0,0 ,1,0,198,0,0,0,255,0,47,0,0,0,1,0,5,0,0,0,145,0 ,18,0,0,0,12,0,0,0,204,0,0,0,40,0,0,0,1,0,1,0 ,0,0,0,0,19,0,0,0,1,0,0,0,0,0,0,0,20,0,0,0 ,1,0,0,0,0,0,0,0,41,0,0,0,1,0,4,0,0,0,0,0 ,6,0,0,0,1,0,3,0,0,0,2,0,5,0,0,0,1,0,1,0 ,0,0,1,0,34,0,0,0,1,110,103,0,0,0,19,0,33,0,0,0 ,1,101,114,0,0,0,1,0,16,2,2,2,5,2,2,0,0,0,0,0 ,4,0,71,0,16,2,2,13,72,136,174,0,1,0,2,0,5,0,2,0 ,0,0,24,11,148,136,174,223,128,6,20,3,1,0,1,9,73,83,79,56 ,56,53,57,45,49,2,4,83,97,118,101,9,73,83,79,13,72,136,174,0 ,1,0,1,0,17,0,2,0,0,1,88,12,136,136,174,22,73,247,226,1 ,88,0,2,0,0,0,17,0,32,0,0,0,60,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,73,110,103,111,116,86,97,108 ,117,101,79,119,110,101,114,84,101,120,116,0,83,97,118,0,12,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,89,0,47,0,0,0 ,1,0,0,0,0,0,51,0,40,0,0,0,1,0,0,0,0,0,3,0 ,19,0,0,0,1,0,0,0,0,0,4,0,20,0,0,0,1,0,0,0 ,0,0,0,0,41,0,0,0,1,0,0,0,0,0,4,0,22,0,0,0 ,12,0,0,1,44,0,0,0,34,0,0,0,1,0,0,0,0,0,0,0 ,33,0,0,0,1,0,0,0,0,0,4,0,36,0,0,0,12,0,0,1 ,0,0,0,0,42,0,0,0,12,0,0,0,212,0,0,0,13,0,0,0 ,2,2,2,0,0,0,0,0,42,2,1,1,233,0,71,0,0,0,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,86,97,108,117 ,101,84,101,120,116,0,97,110,97,103,101,0,42,2,1,1,233,97,99,0 ,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,86,97,108,117,101,84,101,120,116,0,103,111,116,77,97,0,42,2,1,1 ,233,97,108,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,86,97,108,117,101,84,101,120,116,0,97,115,73,110,103,105 ,116,105,118,13,72,136,174,0,1,0,1,0,8,0,2,0,0,1,76,12 ,184,114,98,22,73,247,226,1,76,0,2,0,0,0,8,0,32,0,0,0 ,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,86,97,108,117,101,79,119,110,101,114,76,97,98,101,108 ,0,97,118,0,14,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,5,0,47,0,0,0,1,0,0,0,0,0,45,0,18,0,0,0 ,12,0,0,1,60,0,0,0,40,0,0,0,1,0,0,0,0,0,0,0 ,19,0,0,0,1,0,0,0,0,0,0,0,20,0,0,0,1,0,0,0 ,0,0,0,0,41,0,0,0,1,0,0,0,0,0,0,0,16,0,0,0 ,1,0,0,0,0,0,22,0,6,0,0,0,1,0,0,0,0,0,6,0 ,5,0,0,0,1,0,0,0,0,0,4,0,7,0,0,0,12,0,0,1 ,20,0,0,0,34,0,0,0,1,2,2,0,0,0,5,0,33,0,0,0 ,1,0,71,0,0,0,3,0,36,0,0,0,12,110,103,0,236,0,0,0 ,40,2,1,1,233,97,108,0,0,0,0,77,105,100,97,115,73,110,103,111 ,116,86,97,108,117,101,79,119,110,101,114,84,101,120,116,0,73,110,103,0 ,40,2,1,1,233,103,101,0,0,0,0,77,105,100,97,115,73,110,103,111 ,116,86,97,108,117,101,79,119,110,101,114,84,101,120,116,0,105,100,97,0 ,16,2,2,2,5,77,97,0,0,0,0,0,4,0,72,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,14,40,0,0,223 ,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,5,79 ,119,110,101,114,1,0,1,9,73,83,79,56,56,53,57,45,49,2,16,73 ,115,32,84,111,103,103,108,101,32,66,117,116,116,111,110,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18 ,124,111,114,0,5,0,11,0,22,15,168,15,220,0,20,13,72,136,174,0 ,1,0,1,0,18,0,2,0,0,0,244,0,0,0,0,22,73,247,226,0 ,244,0,2,0,0,0,18,0,32,0,0,0,64,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,97,108,108,98,97,99,107,79,112,116,105,111,110,0,0 ,9,0,0,0,0,0,0,0,18,0,0,0,12,0,5,0,228,0,0,0 ,19,0,0,0,1,0,45,0,0,0,1,0,40,0,0,0,1,0,0,0 ,0,0,0,0,20,0,0,0,1,0,0,0,0,0,14,0,41,0,0,0 ,1,0,0,0,0,0,2,0,47,0,0,0,1,0,0,0,0,0,176,0 ,5,0,0,0,1,0,0,0,0,0,3,0,7,0,0,0,12,0,22,0 ,180,0,0,0,6,0,0,0,1,0,6,0,0,0,1,0,46,2,1,1 ,233,0,4,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,97,108,108,98,97,99,107,65,112,112,108,121,0,3,0 ,36,0,0,0,16,2,2,2,5,0,0,0,0,0,0,0,4,0,73,0 ,248,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,55,0 ,0,0,0,223,128,6,51,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,35,73,110,118,111,107,101,32,67,97,108,108,98,97,99,107,32,87 ,104,101,110,32,80,97,114,101,110,116,32,67,114,101,97,116,101,100,98,95 ,69,110,116,13,72,136,174,0,1,0,1,0,8,0,2,0,0,0,164,1 ,12,2,2,22,73,247,226,0,164,0,2,0,0,0,8,0,32,0,0,0 ,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,76,97,98,101,108,0,99,0 ,7,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,8,0 ,47,0,0,0,1,0,0,0,0,0,10,0,18,0,0,0,12,0,1,0 ,148,0,0,0,40,0,0,0,1,0,0,0,0,0,1,0,19,0,0,0 ,1,0,14,0,0,0,1,0,20,0,0,0,1,0,2,0,0,0,8,0 ,41,0,0,0,1,0,176,0,0,0,10,0,16,2,2,2,5,0,3,0 ,0,0,0,0,4,0,74,0,0,0,0,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,26,1,92,67,114,223,128,6,22,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,6,87,105,100,103,101,116,0,69,0 ,16,0,0,13,72,136,174,0,1,0,1,0,13,0,2,0,0,0,192,2 ,24,0,25,22,73,247,226,0,192,0,2,0,0,0,13,0,32,0,0,0 ,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,68,105,115,109,105,115,115,0 ,7,0,0,0,9,0,0,0,0,0,0,0,46,0,0,0,1,0,8,0 ,0,0,11,0,47,0,0,0,1,0,10,0,0,0,199,0,18,0,0,0 ,12,0,0,0,176,0,0,0,40,0,0,0,1,0,1,0,0,0,0,0 ,19,0,0,0,1,0,1,0,0,0,1,0,20,0,0,0,1,0,8,0 ,0,0,11,0,41,0,0,0,1,0,10,0,0,0,0,0,6,0,0,0 ,1,0,0,0,0,0,6,0,5,0,0,0,1,0,0,0,0,0,1,0 ,16,2,2,2,5,2,1,0,0,0,0,0,4,0,75,1,120,0,13,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,27,2,76,0,0,223 ,128,6,23,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,7,68 ,105,115,109,105,115,115,12,6,102,193,104,13,72,136,174,0,1,0,1,0 ,8,0,2,0,0,1,72,3,36,110,116,22,73,247,226,1,72,0,2,0 ,0,0,8,0,32,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,67,108,97,115,115,76,97,98,101,108,0,0,13,0,0,0,0,0,0,0 ,46,0,0,0,1,0,8,0,0,0,10,0,47,0,0,0,1,0,10,0 ,0,0,41,0,18,0,0,0,12,0,0,1,56,0,0,0,40,0,0,0 ,1,0,1,0,0,0,0,0,19,0,0,0,1,0,1,0,0,0,0,0 ,20,0,0,0,1,0,8,0,0,0,0,0,41,0,0,0,1,0,10,0 ,0,0,0,0,34,0,0,0,1,0,0,0,0,0,8,0,33,0,0,0 ,1,0,0,0,0,0,3,0,36,0,0,0,12,2,1,1,12,0,0,0 ,6,0,0,0,1,100,97,0,0,0,6,0,5,0,0,0,1,103,101,0 ,0,0,4,0,7,0,0,0,12,112,112,0,224,0,0,0,42,2,1,1 ,233,2,2,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,108,97,115,115,84,101,120,116,0,79,119,110,101,114,0 ,42,2,1,1,233,110,103,0,0,0,0,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,67,108,97,115,115,84,101,120,116,0,114,84 ,101,120,116,0,16,2,2,2,5,2,2,0,0,0,0,0,4,0,76,0 ,1,0,7,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,3 ,88,0,0,223,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,5,67,108,97,115,115,9,0,2,13,72,136,174,0,1,0,1,0 ,17,0,2,0,0,1,48,4,184,0,13,22,73,247,226,1,48,0,2,0 ,0,0,17,0,32,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,78,97,109,101,84,101,120,116,0,108,0,0,13,0,0,0,0,0,0,0 ,46,0,0,0,1,0,8,0,0,0,66,0,47,0,0,0,1,0,10,0 ,0,0,11,0,40,0,0,0,1,0,0,0,0,0,0,0,19,0,0,0 ,1,0,1,0,0,0,3,0,20,0,0,0,1,0,1,0,0,0,9,0 ,41,0,0,0,1,0,8,0,0,0,0,0,34,0,0,0,1,0,10,0 ,0,0,7,0,33,0,0,0,1,0,0,0,0,0,1,0,13,0,0,0 ,2,0,0,0,0,0,0,0,6,0,0,0,1,2,1,255,255,255,248,0 ,5,0,0,0,1,100,97,0,0,0,4,0,7,0,0,0,12,103,101,1 ,8,0,0,0,22,0,0,0,12,112,112,0,224,0,0,0,38,2,1,1 ,233,2,2,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,76,97,98,101,108,0,101,120,116,0,79,0,38,2,1,1 ,233,2,1,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,76,97,98,101,108,0,97,115,115,84,101,0,0,0,30,13 ,72,136,174,0,1,0,1,0,17,0,2,0,0,0,232,4,232,0,0,22 ,73,247,226,0,232,0,2,0,0,0,17,0,32,0,0,0,60,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,67,108,97,115,115,84,101,120,116,0,0,0 ,10,0,0,0,0,0,0,0,46,0,0,0,1,0,8,0,0,0,68,0 ,47,0,0,0,1,0,10,0,0,0,55,0,40,0,0,0,1,0,0,0 ,0,0,3,0,19,0,0,0,1,0,1,0,0,0,1,0,20,0,0,0 ,1,0,1,0,0,0,66,0,41,0,0,0,1,0,8,0,0,0,3,0 ,34,0,0,0,1,0,10,0,0,0,7,0,33,0,0,0,1,0,0,0 ,0,0,1,0,13,0,0,0,2,0,0,0,0,0,0,0,42,0,0,0 ,12,2,1,0,188,0,0,0,41,2,1,1,233,100,97,0,0,0,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,78,97,109,101 ,84,101,120,116,0,2,1,1,233,2,2,0,0,0,0,13,72,136,174,0 ,1,0,1,0,13,0,2,0,0,0,216,6,48,0,0,22,73,247,226,0 ,216,0,2,0,0,0,13,0,32,0,0,0,60,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,114,101,97,116,101,78,101,119,0,0,0,11,0,0,0 ,0,0,0,0,46,0,0,0,1,0,8,0,0,1,1,0,47,0,0,0 ,1,0,10,0,0,1,110,0,18,0,0,0,12,0,0,0,200,0,0,0 ,40,0,0,0,1,0,1,0,0,0,0,0,19,0,0,0,1,0,1,0 ,0,0,0,0,20,0,0,0,1,0,8,0,0,0,0,0,41,0,0,0 ,1,0,10,0,0,0,0,0,6,0,0,0,1,0,0,0,0,0,6,0 ,5,0,0,0,1,0,0,0,0,0,1,0,34,0,0,0,1,2,1,0 ,0,0,9,0,33,0,0,0,1,100,97,0,0,0,1,0,16,2,2,2 ,5,110,103,0,0,0,0,0,4,0,77,0,17,0,2,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,39,7,48,0,17,223,128,6,35,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,19,67,114,101,97,116 ,101,32,78,101,119,32,73,110,103,111,116,46,46,46,0,0,0,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,41,8,32,0,0,223 ,128,6,37,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,21,77 ,105,100,97,115,32,45,32,73,110,103,111,116,32,77,97,110,97,103,101,114 ,1,0,0,13,72,136,174,0,1,0,1,0,9,0,2,0,0,0,192,8 ,96,0,0,22,73,247,226,0,192,0,2,0,0,0,9,0,32,0,0,0 ,44,0,124,0,0,0,0,0,0,0,0,0,0,0,0,87,105,100,103,101 ,116,76,105,115,116,0,97,0,3,0,0,0,0,0,0,0,4,0,0,0 ,1,0,0,0,0,0,1,0,27,0,0,0,12,0,0,0,88,0,0,0 ,38,0,0,0,1,0,0,0,0,0,0,0,33,2,1,1,233,0,0,0 ,0,0,0,87,105,100,103,101,116,76,105,115,116,66,117,116,116,111,110,115 ,0,0,0,0,1,0,1,0,2,0,0,0,0,0,0,1,2,0,1,0 ,0,0,0,0,0,0,176,1,2,0,1,0,0,0,0,0,0,0,156,87 ,105,100,103,101,116,76,105,115,116,66,117,116,116,111,110,115,0,0,1,87 ,105,100,103,101,116,76,105,115,116,77,101,110,117,0,0,105,116,121,0,13 ,72,136,174,0,1,0,1,0,10,0,2,0,0,0,48,8,160,107,95,22 ,73,247,226,0,48,0,2,0,0,0,10,0,32,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,87,105,100,103,101,116,76,105,115 ,116,77,101,110,117,0,0,0,32,0,0,13,72,136,174,0,1,0,1,0 ,14,0,2,0,0,0,132,9,120,100,103,22,73,247,226,0,132,0,2,0 ,0,0,14,0,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,87,105,100,103,101,116,76,105,115,116,66,117,116,116,111,110,115 ,0,0,0,0,6,0,0,0,0,0,0,0,4,0,0,0,1,0,0,0 ,0,0,1,0,44,0,0,0,1,0,0,0,0,0,214,0,16,0,0,0 ,1,2,1,0,0,0,113,0,47,0,0,0,1,100,103,0,0,0,97,0 ,29,0,0,0,1,111,110,0,0,0,2,0,32,0,0,0,2,0,0,0 ,0,0,0,0,1,0,1,13,72,136,174,0,1,0,1,0,7,0,2,0 ,0,2,32,9,192,0,0,22,73,247,226,2,32,0,2,0,0,0,7,0 ,32,0,0,0,60,0,220,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,69,120,112,114,101,115,115,105,111,110,69,118,97,108,117,97 ,116,111,114,0,0,0,0,0,8,0,0,0,0,0,0,0,46,0,0,0 ,1,0,0,0,0,0,19,0,47,0,0,0,1,0,0,0,0,0,116,0 ,4,0,0,0,1,0,0,0,0,0,1,0,31,0,0,0,1,0,0,0 ,0,0,2,0,11,0,0,0,12,0,0,0,204,0,0,0,3,0,0,0 ,2,0,1,0,0,0,0,0,9,0,0,0,12,0,1,0,164,0,0,0 ,24,0,0,0,1,100,103,0,0,0,10,0,39,2,1,1,233,111,110,0 ,0,0,0,77,105,100,97,115,69,118,97,108,69,118,97,108,117,97,116,101 ,66,117,116,116,111,110,0,0,16,2,2,0,16,2,2,2,5,0,0,0 ,0,0,0,0,4,0,78,0,9,101,120,0,0,0,0,1,2,2,1,0 ,0,0,0,0,0,2,4,1,2,110,1,0,0,0,0,0,0,1,236,1 ,2,97,1,0,0,0,0,0,0,1,212,1,2,2,1,0,0,0,0,0 ,0,1,192,1,2,100,1,0,0,0,0,0,0,1,168,1,2,103,1,0 ,0,0,0,0,0,1,144,1,2,84,1,0,0,0,0,0,0,1,120,1 ,2,2,1,0,0,0,0,0,0,1,100,1,2,0,1,0,0,0,0,0 ,0,1,80,77,105,100,97,115,69,118,97,108,84,121,112,101,84,101,120,116 ,0,97,108,77,105,100,97,115,69,118,97,108,84,121,112,101,76,97,98,101 ,108,0,103,77,105,100,97,115,69,118,97,108,67,108,101,97,114,66,117,116 ,116,111,110,0,121,0,103,77,105,100,97,115,69,118,97,108,69,118,97,108 ,117,97,116,101,66,117,116,116,111,110,0,77,105,100,97,115,69,118,97,108 ,68,105,115,109,105,115,115,66,117,116,116,111,110,0,101,77,105,100,97,115 ,69,118,97,108,82,101,115,117,108,116,84,101,120,116,0,77,105,100,97,115 ,69,118,97,108,82,101,115,117,108,116,76,97,98,101,108,0,108,121,0,77 ,105,100,97,115,69,118,97,108,69,120,112,114,101,115,115,105,111,110,84,101 ,120,116,0,77,105,100,97,115,69,118,97,108,69,120,112,114,101,115,115,105 ,111,110,76,97,98,101,108,0,101,76,97,0,49,0,0,13,72,136,174,0 ,1,0,1,0,8,0,2,0,0,0,168,10,92,0,0,22,73,247,226,0 ,168,0,2,0,0,0,8,0,32,0,0,0,60,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,69,118,97,108,69,120,112,114 ,101,115,115,105,111,110,76,97,98,101,108,0,0,0,0,0,7,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,13,0,47,0,0,0 ,1,0,0,0,0,0,28,0,18,0,0,0,12,0,0,0,152,0,0,0 ,40,0,0,0,1,0,0,0,0,0,1,0,19,0,0,0,1,0,0,0 ,0,0,1,0,20,0,0,0,1,0,1,0,0,0,13,0,41,0,0,0 ,1,0,1,0,0,0,8,0,16,2,2,2,5,100,103,0,0,0,0,0 ,4,0,79,13,12,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0 ,0,0,30,12,148,0,0,223,128,6,26,3,1,0,1,9,73,83,79,56 ,56,53,57,45,49,2,10,69,120,112,114,101,115,115,105,111,110,193,104,0 ,1,0,0,13,72,136,174,0,1,0,1,0,17,0,2,0,0,1,20,13 ,84,0,0,22,73,247,226,1,20,0,2,0,0,0,17,0,32,0,0,0 ,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,69,118,97,108,69,120,112,114,101,115,115,105,111,110,84,101,120,116,0,0 ,11,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,18,0 ,47,0,0,0,1,0,0,0,0,0,46,0,40,0,0,0,1,0,0,0 ,0,0,4,0,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0 ,1,0,0,0,0,0,14,0,41,0,0,0,1,0,0,0,0,0,3,0 ,34,0,0,0,1,0,0,0,0,0,8,0,33,0,0,0,1,2,2,0 ,0,0,3,0,42,0,0,0,12,0,79,0,236,0,0,0,36,0,0,0 ,12,100,97,0,196,0,0,0,37,0,0,0,1,97,116,0,0,0,1,0 ,39,2,1,1,233,2,2,0,0,0,0,77,105,100,97,115,69,118,97,108 ,69,118,97,108,117,97,116,101,66,117,116,116,111,110,0,0,0,0,0,0 ,39,2,1,1,233,110,1,0,0,0,0,77,105,100,97,115,69,118,97,108 ,69,118,97,108,117,97,116,101,66,117,116,116,111,110,0,0,0,1,192,0 ,0,0,25,13,72,136,174,0,1,0,1,0,8,0,2,0,0,0,216,13 ,140,53,57,22,73,247,226,0,216,0,2,0,0,0,8,0,32,0,0,0 ,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,69,118,97,108,82,101,115,117,108,116,76,97,98,101,108,0,120,116,0,0 ,8,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,17,0 ,47,0,0,0,1,0,0,0,0,0,80,0,18,0,0,0,12,0,0,0 ,200,0,0,0,40,0,0,0,1,0,0,0,0,0,3,0,19,0,0,0 ,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0,0,0,17,0 ,41,0,0,0,1,0,0,0,0,0,15,0,42,0,0,0,12,2,2,0 ,160,0,0,0,39,2,1,1,233,0,79,0,0,0,0,77,105,100,97,115 ,69,118,97,108,69,120,112,114,101,115,115,105,111,110,84,101,120,116,0,0 ,39,2,1,0,16,2,2,2,5,0,0,0,0,0,0,0,4,0,80,0 ,0,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,26,14 ,184,0,0,223,128,6,22,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,6,82,101,115,117,108,116,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,124,111,114,0 ,5,0,12,0,22,15,4,15,220,0,20,13,72,136,174,0,1,0,1,0 ,17,0,2,0,0,1,20,0,0,0,0,22,73,247,226,1,20,0,2,0 ,0,0,17,0,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,69,118,97,108,82,101,115,117,108,116,84,101 ,120,116,0,0,12,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,19,0,47,0,0,0,1,0,0,0,0,0,113,0,40,0,0,0 ,1,0,0,0,0,0,4,0,19,0,0,0,1,0,0,0,0,0,3,0 ,20,0,0,0,1,0,0,0,0,0,14,0,41,0,0,0,1,0,0,255 ,255,255,252,0,34,0,0,0,1,0,0,0,0,0,16,0,33,0,0,0 ,1,0,0,0,0,0,1,0,22,0,0,0,12,2,1,0,240,0,0,0 ,42,0,0,0,12,100,97,0,204,0,0,0,37,0,0,0,1,115,115,0 ,0,0,1,0,13,0,0,0,2,2,1,0,0,0,0,0,36,2,1,1 ,233,0,0,0,0,0,0,77,105,100,97,115,69,118,97,108,82,101,115,117 ,108,116,76,97,98,101,108,0,39,2,1,0,36,2,1,1,233,0,0,0 ,0,0,0,77,105,100,97,115,69,118,97,108,82,101,115,117,108,116,76,97 ,98,101,108,0,0,1,192,6,102,193,104,13,72,136,174,0,1,0,1,0 ,13,0,2,0,0,0,212,0,0,68,101,22,73,247,226,0,212,0,2,0 ,0,0,13,0,32,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,69,118,97,108,68,105,115,109,105,115,115,66 ,117,116,116,111,110,0,0,0,8,0,0,0,0,0,0,0,46,0,0,0 ,1,0,19,0,0,0,22,0,47,0,0,0,1,0,113,0,0,0,174,0 ,18,0,0,0,12,0,4,0,196,0,0,0,40,0,0,0,1,0,3,0 ,0,0,3,0,19,0,0,0,1,0,14,0,0,0,1,0,20,0,0,0 ,1,255,252,0,0,0,22,0,41,0,0,0,1,0,16,0,0,0,5,0 ,42,0,0,0,12,0,1,0,160,0,0,0,34,2,1,1,233,0,0,0 ,0,0,0,77,105,100,97,115,69,118,97,108,84,121,112,101,76,97,98,101 ,108,0,1,0,13,0,0,0,16,2,2,2,5,0,0,0,0,0,0,0 ,4,0,81,0,0,0,108,13,72,136,174,0,1,0,2,0,5,0,2,0 ,0,0,27,1,44,53,57,223,128,6,23,3,1,0,1,9,73,83,79,56 ,56,53,57,45,49,2,7,68,105,115,109,105,115,115,97,118,101,32,110,13 ,72,136,174,0,1,0,1,0,13,0,2,0,0,0,240,2,24,0,1,22 ,73,247,226,0,240,0,2,0,0,0,13,0,32,0,0,0,56,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,69,118,97,108 ,67,108,101,97,114,66,117,116,116,111,110,0,110,0,0,0,10,0,0,0 ,0,0,0,0,46,0,0,0,1,0,19,0,0,1,35,0,47,0,0,0 ,1,0,113,0,0,0,137,0,18,0,0,0,12,0,4,0,224,0,0,0 ,40,0,0,0,1,0,3,0,0,0,4,0,19,0,0,0,1,0,14,0 ,0,0,0,0,20,0,0,0,1,255,252,0,0,0,0,0,41,0,0,0 ,1,0,16,0,0,0,0,0,42,0,0,0,12,0,1,0,184,0,0,0 ,34,0,0,0,1,0,0,0,0,0,11,0,33,0,0,0,1,118,97,0 ,0,0,1,0,38,2,1,1,233,0,1,0,0,0,0,77,105,100,97,115 ,69,118,97,108,68,105,115,109,105,115,115,66,117,116,116,111,110,0,97,115 ,69,118,97,0,16,2,2,2,5,116,76,0,0,0,0,0,4,0,82,116 ,105,111,110,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,2 ,76,136,174,223,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,5,67,108,101,97,114,0,0,7,13,72,136,174,0,1,0,1,0 ,8,0,2,0,0,0,232,3,84,0,0,22,73,247,226,0,232,0,2,0 ,0,0,8,0,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,69,118,97,108,84,121,112,101,76,97,98,101 ,108,0,110,0,10,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,17,0,47,0,0,0,1,0,0,0,0,0,132,0,18,0,0,0 ,12,0,0,0,216,0,0,0,40,0,0,0,1,0,0,0,0,0,0,0 ,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0 ,0,0,17,0,41,0,0,0,1,0,0,0,0,0,0,0,6,0,0,0 ,1,0,0,0,0,0,0,0,5,0,0,0,1,0,0,0,0,0,4,0 ,7,0,0,0,12,0,0,0,180,0,0,0,33,2,1,1,233,2,1,0 ,0,0,0,77,105,100,97,115,69,118,97,108,84,121,112,101,84,101,120,116 ,0,115,115,66,117,116,116,0,16,2,2,2,5,118,97,0,0,0,0,0 ,4,0,83,101,115,77,101,13,72,136,174,0,1,0,2,0,5,0,2,0 ,0,0,48,3,132,0,2,223,128,6,44,3,1,0,1,9,73,83,79,56 ,56,53,57,45,49,2,6,82,101,115,117,108,116,4,0,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,4,84,121,112,101,101,115,77,101,13 ,72,136,174,0,1,0,1,0,17,0,2,0,0,1,20,4,132,0,12,22 ,73,247,226,1,20,0,2,0,0,0,17,0,32,0,0,0,52,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,69,118,97,108 ,84,121,112,101,84,101,120,116,0,0,110,0,12,0,0,0,0,0,0,0 ,46,0,0,0,1,0,0,0,0,0,155,0,47,0,0,0,1,0,0,0 ,0,0,83,0,40,0,0,0,1,0,0,0,0,0,3,0,19,0,0,0 ,1,0,0,0,0,0,4,0,20,0,0,0,1,0,0,0,0,0,0,0 ,41,0,0,0,1,0,0,0,0,0,4,0,34,0,0,0,1,0,0,0 ,0,0,16,0,33,0,0,0,1,0,0,0,0,0,1,0,22,0,0,0 ,12,0,0,0,240,0,0,0,37,0,0,0,1,0,0,0,0,0,1,0 ,13,0,0,0,2,2,1,0,0,0,0,0,42,0,0,0,12,118,97,0 ,204,0,0,0,35,2,1,1,233,115,115,0,0,0,0,77,105,100,97,115 ,69,118,97,108,82,101,115,117,108,116,84,101,120,116,0,0,4,0,82,0 ,35,2,1,1,233,0,0,0,0,0,0,77,105,100,97,115,69,118,97,108 ,82,101,115,117,108,116,84,101,120,116,0,0,0,1,192,0,1,0,12,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,47,4,204,0,0,223 ,128,6,43,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,27,77 ,105,100,97,115,58,32,69,120,112,114,101,115,115,105,111,110,32,69,118,97 ,108,117,97,116,111,114,0,0,0,0,0,13,72,136,174,0,1,0,1,0 ,13,0,2,0,0,0,240,5,248,0,1,22,73,247,226,0,240,0,2,0 ,0,0,13,0,32,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,69,118,97,108,69,118,97,108,117,97,116,101 ,66,117,116,116,111,110,0,0,10,0,0,0,0,0,0,0,46,0,0,0 ,1,0,155,0,0,1,15,0,47,0,0,0,1,0,83,0,0,0,39,0 ,18,0,0,0,12,0,3,0,224,0,0,0,40,0,0,0,1,0,4,0 ,0,0,3,0,19,0,0,0,1,0,0,0,0,0,0,0,20,0,0,0 ,1,0,4,0,0,0,0,0,41,0,0,0,1,0,16,255,255,255,255,0 ,34,0,0,0,1,0,1,0,0,0,11,0,33,0,0,0,1,0,0,0 ,0,0,1,0,42,0,0,0,12,0,1,0,184,0,0,0,40,2,1,1 ,233,0,0,0,0,0,0,77,105,100,97,115,69,118,97,108,69,120,112,114 ,101,115,115,105,111,110,76,97,98,101,108,0,69,118,97,0,16,2,2,2 ,5,116,84,0,0,0,0,0,4,0,84,0,0,0,40,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,28,6,64,53,57,223,128,6,24,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,8,69,118,97,108,117 ,97,116,101,13,72,136,174,13,72,136,174,0,1,0,1,0,7,0,2,0 ,0,1,48,7,72,115,116,22,73,247,226,1,48,0,2,0,0,0,7,0 ,32,0,0,0,48,0,168,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,83,116,97,114,116,117,112,0,117,97,116,0,8,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,48,0,47,0,0,0 ,1,1,15,0,0,0,97,0,44,0,0,0,1,0,39,0,0,1,169,0 ,16,0,0,0,1,0,0,0,0,0,225,0,4,0,0,0,1,0,3,0 ,0,0,1,0,11,0,0,0,12,0,0,0,152,0,0,0,3,0,0,0 ,2,0,0,0,0,0,0,0,31,0,0,0,1,255,255,0,0,0,1,0 ,16,2,2,2,5,0,11,0,0,0,0,0,4,0,85,0,4,0,1,0 ,0,0,0,1,2,0,1,0,0,0,0,0,0,1,28,1,2,0,1,0 ,0,0,0,0,0,1,8,1,2,118,1,0,0,0,0,0,0,0,244,1 ,2,110,1,0,0,0,0,0,0,0,224,77,105,100,97,115,83,116,97,114 ,116,117,112,68,105,115,109,105,115,115,0,77,105,100,97,115,83,116,97,114 ,116,117,112,83,97,118,101,0,82,101,115,77,105,100,97,115,83,116,97,114 ,116,117,112,84,101,120,116,0,0,0,0,77,105,100,97,115,83,116,97,114 ,116,117,112,76,97,98,101,108,0,84,1,0,16,2,2,13,72,136,174,0 ,1,0,1,0,8,0,2,0,0,0,160,7,124,0,0,22,73,247,226,0 ,160,0,2,0,0,0,8,0,32,0,0,0,52,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,83,116,97,114,116,117,112,76 ,97,98,101,108,0,0,0,0,7,0,0,0,0,0,0,0,46,0,0,0 ,1,0,48,0,0,0,9,0,47,0,0,0,1,0,97,0,0,0,19,0 ,18,0,0,0,12,1,169,0,144,0,0,0,40,0,0,0,1,0,225,0 ,0,0,1,0,19,0,0,0,1,0,1,0,0,0,1,0,20,0,0,0 ,1,0,0,0,0,0,15,0,41,0,0,0,1,0,0,0,0,0,9,0 ,16,2,2,2,5,0,1,0,0,0,0,0,4,0,86,115,32,80,111,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,54,8,196,0,2,223 ,128,6,50,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,34,67 ,111,109,109,97,110,100,115,32,116,111,32,98,101,32,101,120,101,99,117,116 ,101,100,32,97,116,32,115,116,97,114,116,117,112,0,0,22,73,247,226,13 ,72,136,174,0,1,0,1,0,17,0,2,0,0,1,52,9,124,0,0,22 ,73,247,226,1,52,0,2,0,0,0,17,0,32,0,0,0,52,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,83,116,97,114 ,116,117,112,84,101,120,116,0,97,114,116,0,15,0,0,0,0,0,0,0 ,46,0,0,0,1,0,48,0,0,0,13,0,47,0,0,0,1,0,97,0 ,0,0,33,0,44,0,0,0,1,1,169,0,0,1,13,0,16,0,0,0 ,1,0,225,0,0,0,142,0,40,0,0,0,1,0,1,0,0,0,3,0 ,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0 ,0,0,13,0,41,0,0,0,1,0,1,0,0,0,3,0,34,0,0,0 ,1,0,0,0,0,0,15,0,33,0,0,0,1,0,0,0,0,0,1,0 ,42,0,0,0,12,1,28,1,16,0,0,0,6,0,0,0,1,1,8,0 ,0,0,5,0,5,0,0,0,1,0,244,0,0,0,3,0,7,0,0,0 ,12,0,224,0,240,0,0,0,12,0,0,0,1,117,112,0,0,0,0,0 ,32,2,1,1,233,100,97,0,0,0,0,77,105,100,97,115,83,116,97,114 ,116,117,112,83,97,118,101,0,83,116,97,0,33,2,1,1,233,120,116,0 ,0,0,0,77,105,100,97,115,83,116,97,114,116,117,112,76,97,98,101,108 ,0,84,1,0,0,0,0,107,77,97,110,13,72,136,174,0,1,0,1,0 ,13,0,2,0,0,0,184,9,204,100,97,22,73,247,226,0,184,0,2,0 ,0,0,13,0,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,83,116,97,114,116,117,112,83,97,118,101,0 ,97,114,116,0,9,0,0,0,0,0,0,0,46,0,0,0,1,0,48,0 ,0,0,19,0,47,0,0,0,1,0,97,0,0,0,189,0,18,0,0,0 ,12,1,169,0,168,0,0,0,40,0,0,0,1,0,225,0,0,0,0,0 ,19,0,0,0,1,0,1,0,0,0,1,0,20,0,0,0,1,0,0,0 ,0,0,19,0,41,0,0,0,1,0,0,0,0,0,0,0,6,0,0,0 ,1,0,1,0,0,0,7,0,5,0,0,0,1,0,0,0,0,0,1,0 ,16,2,2,2,5,0,0,0,0,0,0,0,4,0,87,76,97,98,101,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,24,11,24,1,121,223 ,128,6,20,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,4,83 ,97,118,101,0,152,0,0,13,72,136,174,0,1,0,1,0,13,0,2,0 ,0,0,252,11,232,0,0,22,73,247,226,0,252,0,2,0,0,0,13,0 ,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,83,116,97,114,116,117,112,68,105,115,109,105,115,115,0,0 ,12,0,0,0,0,0,0,0,46,0,0,0,1,0,48,0,0,0,235,0 ,47,0,0,0,1,0,97,0,0,0,192,0,18,0,0,0,12,1,169,0 ,236,0,0,0,40,0,0,0,1,0,225,0,0,0,0,0,19,0,0,0 ,1,0,1,0,0,0,0,0,20,0,0,0,1,0,0,0,0,0,0,0 ,41,0,0,0,1,0,0,0,0,0,0,0,34,0,0,0,1,0,1,0 ,0,0,14,0,33,0,0,0,1,0,0,0,0,0,1,0,6,0,0,0 ,1,0,0,255,255,255,255,0,5,0,0,0,1,1,28,0,0,0,4,0 ,7,0,0,0,12,1,8,0,204,0,0,0,32,2,1,1,233,0,244,0 ,0,0,0,77,105,100,97,115,83,116,97,114,116,117,112,83,97,118,101,0 ,1,117,112,0,16,2,2,2,5,2,1,0,0,0,0,0,4,0,88,0 ,19,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,27,12 ,24,0,4,223,128,6,23,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,7,68,105,115,109,105,115,115,0,0,1,0,1,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,33,13,44,0,0,223,128,6,29,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,13,77,105,100,97,115 ,32,83,116,97,114,116,117,112,42,2,1,13,72,136,174,0,1,0,1,0 ,7,0,2,0,0,1,84,13,96,97,99,22,73,247,226,1,84,0,2,0 ,0,0,7,0,32,0,0,0,44,0,112,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,73,110,102,111,0,117,112,0,5,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,150,0,47,0,0,0 ,1,0,235,0,0,0,96,0,4,0,0,0,1,0,192,0,0,0,1,0 ,31,0,0,0,1,0,0,0,0,0,2,0,44,0,0,0,1,0,0,0 ,0,1,80,0,7,0,1,0,0,0,0,1,2,0,1,0,0,0,0,0 ,0,1,68,1,2,0,1,0,0,0,0,0,0,1,48,1,2,0,1,0 ,0,0,0,0,0,1,28,1,2,0,1,0,0,0,0,0,0,1,8,1 ,2,0,1,0,0,0,0,0,0,0,244,1,2,0,1,0,0,0,0,0 ,0,0,224,1,2,0,1,0,0,0,0,0,0,0,204,77,105,100,97,115 ,73,110,102,111,85,112,66,117,116,116,111,110,0,116,97,77,105,100,97,115 ,73,110,102,111,66,117,116,116,111,110,66,111,120,0,1,77,105,100,97,115 ,73,110,102,111,78,97,109,101,84,101,120,116,0,117,112,77,105,100,97,115 ,73,110,102,111,67,108,97,115,115,76,97,98,101,108,0,77,105,100,97,115 ,73,110,102,111,78,97,109,101,76,97,98,101,108,0,1,77,105,100,97,115 ,73,110,102,111,67,108,97,115,115,84,101,120,116,0,100,77,105,100,97,115 ,73,110,102,111,76,97,98,101,108,0,97,13,72,136,174,13,72,136,174,0 ,1,0,1,0,8,0,2,0,0,0,192,13,152,100,97,22,73,247,226,0 ,192,0,2,0,0,0,8,0,32,0,0,0,48,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,73,110,102,111,76,97,98,101 ,108,0,0,0,10,0,0,0,0,0,0,0,46,0,0,0,1,0,150,0 ,0,0,13,0,47,0,0,0,1,0,96,0,0,0,17,0,18,0,0,0 ,12,0,1,0,176,0,0,0,40,0,0,0,1,0,2,0,0,0,1,0 ,19,0,0,0,1,1,80,0,0,0,1,0,20,0,0,0,1,0,1,0 ,0,0,13,0,41,0,0,0,1,0,1,0,0,0,6,0,2,0,0,0 ,1,0,1,0,0,0,1,0,34,0,0,0,1,0,1,0,0,0,9,0 ,33,0,0,0,1,0,1,0,0,0,1,0,16,2,2,2,5,0,1,0 ,0,0,0,0,4,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,18,124,111,114,0,5,0,13,0 ,16,13,136,14,140,1,100,13,72,136,174,0,1,0,2,0,5,0,2,0 ,0,0,35,0,0,0,0,223,128,6,31,3,1,0,1,9,73,83,79,56 ,56,53,57,45,49,2,15,83,101,108,101,99,116,101,100,32,87,105,100,103 ,101,116,103,101,116,45,48,13,72,136,174,0,1,0,1,0,17,0,2,0 ,0,1,56,0,0,0,0,22,73,247,226,1,56,0,2,0,0,0,17,0 ,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,73,110,102,111,67,108,97,115,115,84,101,120,116,0,0,0 ,12,0,0,0,0,0,0,0,46,0,0,0,1,0,13,0,0,0,65,0 ,47,0,0,0,1,0,17,0,0,0,93,0,40,0,0,0,1,0,0,0 ,0,0,3,0,19,0,0,0,1,0,1,0,0,0,4,0,20,0,0,0 ,1,0,1,255,255,255,255,0,41,0,0,0,1,0,13,0,0,0,8,0 ,34,0,0,0,1,0,6,0,0,0,0,0,33,0,0,0,1,0,1,0 ,0,0,4,0,13,0,0,0,2,0,9,0,0,0,0,0,42,0,0,0 ,12,0,1,1,20,0,0,0,22,0,0,0,12,0,0,0,240,0,0,0 ,36,0,0,0,12,0,0,0,204,0,0,0,33,2,1,1,233,110,102,0 ,0,0,0,77,105,100,97,115,73,110,102,111,78,97,109,101,84,101,120,116 ,0,117,116,116,111,110,66,0,33,2,1,1,233,100,97,0,0,0,0,77 ,105,100,97,115,73,110,102,111,78,97,109,101,84,101,120,116,0,110,102,111 ,67,108,97,0,33,2,1,1,233,108,0,0,0,0,0,77,105,100,97,115 ,73,110,102,111,78,97,109,101,84,101,120,116,0,100,97,115,73,110,102,0 ,41,0,0,13,72,136,174,0,1,0,1,0,8,0,2,0,0,0,216,0 ,60,0,0,22,73,247,226,0,216,0,2,0,0,0,8,0,32,0,0,0 ,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,73,110,102,111,78,97,109,101,76,97,98,101,108,0,0,0,9,0,0,0 ,0,0,0,0,46,0,0,0,1,0,13,0,0,0,15,0,47,0,0,0 ,1,0,17,0,0,0,45,0,18,0,0,0,12,0,0,0,200,0,0,0 ,40,0,0,0,1,0,1,0,0,0,3,0,19,0,0,0,1,0,1,0 ,0,0,1,0,20,0,0,0,1,0,13,0,0,0,15,0,41,0,0,0 ,1,0,6,0,0,0,6,0,16,0,0,0,1,0,1,0,0,0,27,0 ,42,0,0,0,12,0,9,0,168,0,0,0,30,2,1,1,233,0,1,0 ,0,0,0,77,105,100,97,115,73,110,102,111,76,97,98,101,108,0,0,0 ,12,0,0,0,16,2,2,2,5,2,1,0,0,0,0,0,4,0,90,0 ,19,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,25,1 ,140,0,1,223,128,6,21,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,5,78,97,109,101,58,33,0,0,13,72,136,174,0,1,0,1,0 ,8,0,2,0,0,0,244,2,124,0,2,22,73,247,226,0,244,0,2,0 ,0,0,8,0,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,73,110,102,111,67,108,97,115,115,76,97,98 ,101,108,0,0,11,0,0,0,0,0,0,0,46,0,0,0,1,0,13,0 ,0,0,16,0,47,0,0,0,1,0,17,0,0,0,98,0,18,0,0,0 ,12,0,0,0,228,0,0,0,40,0,0,0,1,0,1,0,0,0,0,0 ,19,0,0,0,1,0,1,0,0,0,1,0,20,0,0,0,1,0,13,0 ,0,0,16,0,41,0,0,0,1,0,6,0,0,0,0,0,6,0,0,0 ,1,0,1,0,0,0,5,0,5,0,0,0,1,0,9,0,0,0,4,0 ,7,0,0,0,12,0,1,0,192,0,0,0,16,0,0,0,1,110,102,0 ,0,0,31,0,34,2,1,1,233,0,0,0,0,0,0,77,105,100,97,115 ,73,110,102,111,67,108,97,115,115,84,101,120,116,0,102,111,78,97,109,0 ,16,2,2,2,5,117,116,0,0,0,0,0,4,0,91,0,46,0,0,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,26,2,172,1,105,223 ,128,6,22,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,6,67 ,108,97,115,115,58,0,0,0,1,97,110,13,72,136,174,0,1,0,1,0 ,17,0,2,0,0,1,80,3,184,0,0,22,73,247,226,1,80,0,2,0 ,0,0,17,0,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,73,110,102,111,78,97,109,101,84,101,120,116 ,0,108,0,0,14,0,0,0,0,0,0,0,46,0,0,0,1,0,13,0 ,0,0,65,0,47,0,0,0,1,0,17,0,0,0,26,0,40,0,0,0 ,1,0,0,0,0,0,0,0,19,0,0,0,1,0,1,0,0,0,3,0 ,20,0,0,0,1,0,1,0,0,0,7,0,41,0,0,0,1,0,13,0 ,0,0,0,0,22,0,0,0,12,0,6,1,44,0,0,0,34,0,0,0 ,1,0,1,0,0,0,2,0,33,0,0,0,1,0,9,0,0,0,3,0 ,13,0,0,0,2,0,1,0,0,0,0,0,6,0,0,0,1,110,102,255 ,255,255,251,0,5,0,0,0,1,0,0,0,0,0,4,0,7,0,0,0 ,12,110,102,1,8,0,0,0,36,0,0,0,12,0,102,0,228,0,0,0 ,33,2,1,1,233,117,116,0,0,0,0,77,105,100,97,115,73,110,102,111 ,85,112,66,117,116,116,111,110,0,110,102,111,78,97,109,0,34,2,1,1 ,233,110,102,0,0,0,0,77,105,100,97,115,73,110,102,111,78,97,109,101 ,76,97,98,101,108,0,102,111,78,97,109,0,34,2,1,1,233,100,97,0 ,0,0,0,77,105,100,97,115,73,110,102,111,78,97,109,101,76,97,98,101 ,108,0,102,111,76,97,98,0,0,0,0,13,72,136,174,0,1,0,1,0 ,14,0,2,0,0,0,216,3,236,0,0,22,73,247,226,0,216,0,2,0 ,0,0,14,0,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,73,110,102,111,66,117,116,116,111,110,66,111 ,120,0,0,0,10,0,0,0,0,0,0,0,46,0,0,0,1,0,13,0 ,0,0,7,0,47,0,0,0,1,0,17,0,0,0,159,0,4,0,0,0 ,1,0,0,0,0,0,1,0,40,0,0,0,1,0,1,0,0,0,3,0 ,19,0,0,0,1,0,1,0,0,0,1,0,20,0,0,0,1,0,13,0 ,0,0,0,0,41,0,0,0,1,0,6,0,0,0,9,0,34,0,0,0 ,1,0,1,0,0,0,0,0,33,0,0,0,1,0,9,0,0,0,1,0 ,42,0,0,0,12,0,1,0,180,0,0,0,34,2,1,1,233,110,102,0 ,0,0,0,77,105,100,97,115,73,110,102,111,67,108,97,115,115,84,101,120 ,116,0,102,1,8,0,0,0,0,0,0,13,72,136,174,0,1,0,1,0 ,2,0,2,0,0,0,252,5,84,0,0,22,73,247,226,0,252,0,2,0 ,0,0,2,0,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,73,110,102,111,85,112,66,117,116,116,111,110 ,0,0,0,0,13,0,0,0,0,0,0,0,46,0,0,0,1,0,13,0 ,0,1,45,0,47,0,0,0,1,0,17,0,0,0,33,0,40,0,0,0 ,1,0,0,0,0,0,0,0,19,0,0,0,1,0,1,0,0,0,0,0 ,20,0,0,0,1,0,1,0,0,0,0,0,41,0,0,0,1,0,13,0 ,0,0,0,0,44,0,0,0,1,0,6,0,0,0,34,0,34,0,0,0 ,1,0,1,0,0,0,1,0,33,0,0,0,1,0,9,0,0,0,1,0 ,16,0,0,0,1,0,1,0,0,0,29,0,6,0,0,0,1,110,102,255 ,255,255,228,0,5,0,0,0,1,110,102,0,0,0,3,0,7,0,0,0 ,12,0,102,0,216,0,0,0,34,2,1,1,233,0,102,0,0,0,0,77 ,105,100,97,115,73,110,102,111,78,97,109,101,76,97,98,101,108,0,102,111 ,85,112,66,2,5,97,108,13,72,136,174,0,1,0,1,0,7,0,2,0 ,0,1,192,6,68,0,2,22,73,247,226,1,192,0,2,0,0,0,7,0 ,32,0,0,0,52,0,180,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,67,114,101,97,116,101,78,101,119,73,110,103,111,116,0,0 ,7,0,0,0,0,0,0,0,46,0,0,0,1,0,13,0,0,0,99,0 ,47,0,0,0,1,0,17,0,0,2,153,0,44,0,0,0,1,0,0,0 ,0,1,82,0,16,0,0,0,1,0,1,0,0,0,139,0,4,0,0,0 ,1,0,1,0,0,0,1,0,3,0,0,0,2,0,13,0,0,0,0,0 ,9,0,0,0,12,0,6,0,144,0,0,0,34,2,1,1,233,0,1,0 ,0,0,0,77,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,79 ,107,0,1,0,0,0,29,0,7,0,0,0,0,0,0,1,2,255,1,0 ,0,0,0,0,0,1,164,1,2,0,1,0,0,0,0,0,0,1,136,1 ,2,0,1,0,0,0,0,0,0,1,108,1,2,0,1,0,0,0,0,0 ,0,1,88,1,2,97,1,0,0,0,0,0,0,1,60,1,2,112,1,0 ,0,0,0,0,0,1,40,1,2,97,1,0,0,0,0,0,0,1,16,77 ,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,67,97,110,99,101 ,108,0,102,77,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,79 ,107,0,97,77,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,78 ,97,109,101,84,101,120,116,0,69,118,97,77,105,100,97,115,67,114,101,97 ,116,101,73,110,103,111,116,85,112,0,97,77,105,100,97,115,67,114,101,97 ,116,101,73,110,103,111,116,79,119,110,101,114,84,101,120,116,0,66,117,77 ,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,79,119,110,101,114 ,76,97,98,101,108,0,116,77,105,100,97,115,67,114,101,97,116,101,73,110 ,103,111,116,78,97,109,101,76,97,98,101,108,0,0,101,0,4,0,49,13 ,72,136,174,0,1,0,1,0,8,0,2,0,0,1,64,7,88,0,25,22 ,73,247,226,1,64,0,2,0,0,0,8,0,32,0,0,0,60,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,67,114,101,97 ,116,101,73,110,103,111,116,78,97,109,101,76,97,98,101,108,0,0,0,0 ,13,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,13,0 ,47,0,0,0,1,0,0,0,0,0,18,0,18,0,0,0,12,0,0,1 ,48,0,0,0,40,0,0,0,1,0,0,0,0,0,0,0,19,0,0,0 ,1,0,0,0,0,0,0,0,20,0,0,0,1,0,0,0,0,0,0,0 ,41,0,0,0,1,2,1,0,0,0,0,0,34,0,0,0,1,100,97,0 ,0,0,5,0,33,0,0,0,1,111,116,0,0,0,3,0,36,0,0,0 ,12,0,0,1,8,0,0,0,6,0,0,0,1,0,0,0,0,0,9,0 ,5,0,0,0,1,0,0,0,0,0,4,0,7,0,0,0,12,0,0,0 ,224,0,0,0,40,2,1,1,233,0,0,0,0,0,0,77,105,100,97,115 ,67,114,101,97,116,101,73,110,103,111,116,78,97,109,101,84,101,120,116,0 ,2,97,1,0,40,2,1,1,233,1,16,0,0,0,0,77,105,100,97,115 ,67,114,101,97,116,101,73,110,103,111,116,78,97,109,101,84,101,120,116,0 ,67,114,101,0,16,2,2,2,5,111,116,0,0,0,0,0,4,0,92,115 ,67,97,108,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,24,9 ,48,84,101,223,128,6,20,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,4,78,97,109,101,0,0,1,60,13,72,136,174,0,1,0,1,0 ,8,0,2,0,0,1,20,10,136,0,0,22,73,247,226,1,20,0,2,0 ,0,0,8,0,32,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,79 ,119,110,101,114,76,97,98,101,108,0,0,0,13,0,0,0,0,0,0,0 ,46,0,0,0,1,0,0,0,0,0,17,0,47,0,0,0,1,0,0,0 ,0,0,154,0,18,0,0,0,12,0,0,1,4,0,0,0,40,0,0,0 ,1,0,0,0,0,0,0,0,19,0,0,0,1,0,0,0,0,0,1,0 ,20,0,0,0,1,0,0,0,0,0,6,0,41,0,0,0,1,2,1,0 ,0,0,0,0,34,0,0,0,1,100,97,0,0,0,0,0,33,0,0,0 ,1,111,116,0,0,0,0,0,6,0,0,0,1,0,0,0,0,0,9,0 ,5,0,0,0,1,0,0,0,0,0,3,0,16,0,0,0,1,0,0,0 ,0,0,28,0,7,0,0,0,12,0,0,0,224,0,0,0,34,2,1,1 ,233,0,0,0,0,0,0,77,105,100,97,115,67,114,101,97,116,101,73,110 ,103,111,116,79,107,0,101,84,101,120,116,0,16,2,2,2,5,2,1,0 ,0,0,0,0,4,0,93,108,98,97,99,13,72,136,174,0,1,0,2,0 ,5,0,2,0,0,0,25,10,184,101,120,223,128,6,21,3,1,0,1,9 ,73,83,79,56,56,53,57,45,49,2,5,79,119,110,101,114,128,6,40,13 ,72,136,174,0,1,0,1,0,17,0,2,0,0,1,92,11,228,100,97,22 ,73,247,226,1,92,0,2,0,0,0,17,0,32,0,0,0,60,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,67,114,101,97 ,116,101,73,110,103,111,116,79,119,110,101,114,84,101,120,116,0,0,0,0 ,13,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0,0,0,76,0 ,47,0,0,0,1,0,0,0,0,0,100,0,40,0,0,0,1,0,0,0 ,0,0,0,0,19,0,0,0,1,0,0,0,0,0,3,0,20,0,0,0 ,1,0,0,0,0,0,6,0,41,0,0,0,1,0,0,0,0,0,0,0 ,6,0,0,0,1,2,1,255,255,255,251,0,5,0,0,0,1,100,97,0 ,0,0,4,0,34,0,0,0,1,111,116,0,0,0,6,0,33,0,0,0 ,1,0,0,0,0,0,3,0,36,0,0,0,12,0,0,1,56,0,0,0 ,7,0,0,0,12,0,0,1,12,0,0,0,22,0,0,0,12,0,0,0 ,224,0,0,0,42,2,1,1,233,0,0,0,0,0,0,77,105,100,97,115 ,67,114,101,97,116,101,73,110,103,111,116,79,119,110,101,114,76,97,98,101 ,108,0,2,2,5,2,1,0,42,2,1,1,233,0,93,0,0,0,0,77 ,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,79,119,110,101,114 ,76,97,98,101,108,0,2,2,5,111,116,0,34,2,1,1,233,0,92,0 ,0,0,0,77,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,85 ,112,0,97,77,105,100,97,12,64,0,0,13,72,136,174,0,1,0,1,0 ,2,0,2,0,0,0,236,12,20,2,18,22,73,247,226,0,236,0,2,0 ,0,0,2,0,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,85 ,112,0,101,0,11,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,1,43,0,47,0,0,0,1,0,76,0,0,0,76,0,40,0,0,0 ,1,0,100,0,0,0,0,0,19,0,0,0,1,0,0,0,0,0,0,0 ,20,0,0,0,1,0,3,0,0,0,0,0,41,0,0,0,1,0,6,0 ,0,0,0,0,34,0,0,0,1,0,0,0,0,0,10,0,33,0,0,0 ,1,255,251,0,0,0,1,0,6,0,0,0,1,0,4,255,255,255,255,0 ,5,0,0,0,1,0,6,0,0,0,4,0,7,0,0,0,12,0,3,0 ,192,0,0,0,42,2,1,1,233,0,0,0,0,0,0,77,105,100,97,115 ,67,114,101,97,116,101,73,110,103,111,116,79,119,110,101,114,76,97,98,101 ,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,18,124,111,114,0,5,0,14,0,16,13,48,15 ,16,0,224,13,72,136,174,0,1,0,1,0,17,0,2,0,0,1,112,0 ,0,0,0,22,73,247,226,1,112,0,2,0,0,0,17,0,32,0,0,0 ,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115 ,67,114,101,97,116,101,73,110,103,111,116,78,97,109,101,84,101,120,116,0 ,0,0,0,0,14,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,102,0,47,0,0,0,1,0,0,0,0,0,11,0,40,0,0,0 ,1,0,0,0,0,0,0,0,19,0,0,0,1,0,0,0,0,0,4,0 ,20,0,0,0,1,0,0,255,255,255,255,0,41,0,0,0,1,0,0,0 ,0,0,0,0,6,0,0,0,1,0,0,0,0,0,7,0,5,0,0,0 ,1,0,0,0,0,0,3,0,7,0,0,0,12,0,0,1,68,0,0,0 ,22,0,0,0,12,0,0,1,24,0,0,0,44,0,0,0,1,2,1,0 ,0,0,176,0,34,0,0,0,1,100,97,0,0,0,0,0,33,0,0,0 ,1,111,116,0,0,0,4,0,36,0,0,0,12,0,0,0,236,0,0,0 ,41,2,1,1,233,114,101,0,0,0,0,77,105,100,97,115,67,114,101,97 ,116,101,73,110,103,111,116,79,119,110,101,114,84,101,120,116,0,0,93,0 ,0,0,0,0,41,2,1,1,233,114,101,0,0,0,0,77,105,100,97,115 ,67,114,101,97,116,101,73,110,103,111,116,79,119,110,101,114,84,101,120,116 ,0,0,92,0,0,0,0,0,41,2,1,1,233,114,101,0,0,0,0,77 ,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,79,119,110,101,114 ,84,101,120,116,0,0,97,77,105,100,97,101,108,0,99,13,72,136,174,0 ,1,0,1,0,13,0,2,0,0,1,4,0,0,97,99,22,73,247,226,1 ,4,0,2,0,0,0,13,0,32,0,0,0,56,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,67,114,101,97,116,101,73,110 ,103,111,116,67,97,110,99,101,108,0,116,0,12,0,0,0,0,0,0,0 ,46,0,0,0,1,0,0,0,0,0,220,0,47,0,0,0,1,0,0,0 ,0,0,94,0,18,0,0,0,12,0,0,0,244,0,0,0,40,0,0,0 ,1,0,0,0,0,0,0,0,19,0,0,0,1,0,0,0,0,0,0,0 ,20,0,0,0,1,0,0,0,0,0,0,0,41,0,0,0,1,0,0,0 ,0,0,0,0,6,0,0,0,1,0,0,0,0,0,0,0,5,0,0,0 ,1,0,0,0,0,0,4,0,7,0,0,0,12,0,0,0,208,0,0,0 ,34,0,0,0,1,0,0,0,0,0,8,0,33,0,0,0,1,0,0,0 ,0,0,1,0,34,2,1,1,233,0,0,0,0,0,0,77,105,100,97,115 ,67,114,101,97,116,101,73,110,103,111,116,79,107,0,1,1,233,114,101,0 ,16,2,2,2,5,100,97,0,0,0,0,0,4,0,94,101,116,0,28,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,26,1,136,1,20,223 ,128,6,22,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,6,67 ,97,110,99,101,108,0,0,0,0,0,0,13,72,136,174,0,1,0,1,0 ,13,0,2,0,0,0,184,2,164,0,0,22,73,247,226,0,184,0,2,0 ,0,0,13,0,32,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,77,105,100,97,115,67,114,101,97,116,101,73,110,103,111,116,79 ,107,0,99,0,9,0,0,0,0,0,0,0,46,0,0,0,1,0,0,0 ,0,0,7,0,47,0,0,0,1,0,0,0,0,0,91,0,18,0,0,0 ,12,0,0,0,168,0,0,0,40,0,0,0,1,0,0,0,0,0,0,0 ,19,0,0,0,1,0,0,0,0,0,1,0,20,0,0,0,1,0,0,0 ,0,0,29,0,41,0,0,0,1,0,0,0,0,0,0,0,6,0,0,0 ,1,0,0,0,0,0,3,0,5,0,0,0,1,0,0,0,0,0,1,0 ,16,2,2,2,5,0,0,0,0,0,0,0,4,0,95,0,25,2,1,13 ,72,136,174,0,1,0,2,0,5,0,2,0,0,0,22,2,216,1,148,223 ,128,6,18,3,1,0,1,9,73,83,79,56,56,53,57,45,49,2,2,79 ,107,0,5,13,72,136,174,13,72,136,174,0,1,0,1,0,9,0,2,0 ,0,1,0,3,168,6,21,22,73,247,226,1,0,0,2,0,0,0,9,0 ,32,0,0,0,44,0,176,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,72,101,108,112,0,101,73,0,7,0,0,0,0,0,0,0 ,46,0,0,0,1,0,0,0,0,0,150,0,47,0,0,0,1,0,7,0 ,0,0,104,0,4,0,0,0,1,0,91,0,0,0,1,0,44,0,0,0 ,1,0,0,0,0,1,198,0,16,0,0,0,1,0,0,0,0,1,162,0 ,27,0,0,0,12,0,1,0,136,0,0,0,38,0,0,0,1,0,29,0 ,0,0,0,0,38,2,1,1,233,0,0,0,0,0,0,77,105,100,97,115 ,72,101,108,112,66,117,108,108,101,116,105,110,66,111,97,114,100,0,2,2 ,5,0,0,0,2,0,0,0,0,0,0,1,2,0,1,0,0,0,0,0 ,0,0,232,0,2,0,1,0,0,0,0,0,0,0,208,77,105,100,97,115 ,72,101,108,112,83,101,97,114,99,104,68,105,97,108,111,103,0,101,73,77 ,105,100,97,115,72,101,108,112,66,117,108,108,101,116,105,110,66,111,97,114 ,100,0,0,1,233,0,0,13,72,136,174,0,1,0,1,0,12,0,2,0 ,0,0,76,3,216,2,1,22,73,247,226,0,76,0,2,0,0,0,12,0 ,32,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,72,101,108,112,83,101,97,114,99,104,68,105,97,108,111,103 ,0,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,1,0,7,0 ,0,0,1,67,108,97,115,13,72,136,174,0,1,0,1,0,6,0,2,0 ,0,0,196,4,240,0,0,22,73,247,226,0,196,0,2,0,0,0,6,0 ,32,0,0,0,56,0,100,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,72,101,108,112,66,117,108,108,101,116,105,110,66,111,97,114 ,100,0,0,0,3,0,0,0,0,0,0,0,4,0,0,0,1,0,7,0 ,0,0,1,0,31,0,0,0,1,0,91,0,0,0,1,0,24,0,0,0 ,1,0,0,0,0,0,10,0,3,0,0,0,0,0,0,1,2,1,1,0 ,0,0,0,0,0,0,180,1,2,0,1,0,0,0,0,0,0,0,164,1 ,2,0,1,0,0,0,0,0,0,0,144,77,105,100,97,115,72,101,108,112 ,68,105,115,109,105,115,115,0,101,116,105,77,105,100,97,115,72,101,108,112 ,83,101,97,114,99,104,0,77,105,100,97,115,72,101,108,112,71,111,66,97 ,99,107,0,5,28,100,103,13,72,136,174,0,1,0,1,0,13,0,2,0 ,0,0,156,5,84,0,0,22,73,247,226,0,156,0,2,0,0,0,13,0 ,32,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77 ,105,100,97,115,72,101,108,112,71,111,66,97,99,107,0,0,7,0,0,0 ,0,0,0,0,46,0,0,0,1,0,0,0,0,0,11,0,47,0,0,0 ,1,0,1,0,0,0,2,0,18,0,0,0,12,0,1,0,140,0,0,0 ,19,0,0,0,1,0,10,0,0,0,1,0,20,0,0,0,1,1,1,0 ,0,0,11,0,5,0,0,0,1,0,1,0,0,0,1,0,6,0,0,0 ,1,0,1,0,0,0,0,0,16,2,2,2,5,100,97,0,0,0,0,0 ,4,0,96,0,180,0,0,13,72,136,174,0,1,0,2,0,5,0,2,0 ,0,0,27,6,48,109,101,223,128,6,23,3,1,0,1,9,73,83,79,56 ,56,53,57,45,49,2,7,71,111,32,66,97,99,107,0,22,73,247,226,13 ,72,136,174,0,1,0,1,0,13,0,2,0,0,0,220,6,228,0,0,22 ,73,247,226,0,220,0,2,0,0,0,13,0,32,0,0,0,48,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,77,105,100,97,115,72,101,108,112 ,83,101,97,114,99,104,0,0,7,0,0,0,0,0,0,0,18,0,0,0 ,12,0,0,0,204,0,0,0,19,0,0,0,1,0,1,0,0,0,3,0 ,40,0,0,0,1,0,1,0,0,0,4,0,20,0,0,0,1,0,10,0 ,0,0,19,0,41,0,0,0,1,1,1,0,0,0,0,0,42,0,0,0 ,12,0,1,0,172,0,0,0,22,0,0,0,12,0,1,0,140,0,0,0 ,31,2,1,1,233,100,97,0,0,0,0,77,105,100,97,115,72,101,108,112 ,71,111,66,97,99,107,0,115,72,101,108,0,31,2,1,1,233,104,0,0 ,0,0,0,77,105,100,97,115,72,101,108,112,71,111,66,97,99,107,0,0 ,0,0,0,0,16,2,2,2,5,100,97,0,0,0,0,0,4,0,97,56 ,56,53,57,13,72,136,174,0,1,0,2,0,5,0,2,0,0,0,29,7 ,24,136,174,223,128,6,25,3,1,0,1,9,73,83,79,56,56,53,57,45 ,49,2,9,83,101,97,114,99,104,46,46,46,36,0,2,13,72,136,174,0 ,1,0,1,0,13,0,2,0,0,0,216,8,12,0,0,22,73,247,226,0 ,216,0,2,0,0,0,13,0,32,0,0,0,52,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,77,105,100,97,115,72,101,108,112,68,105,115,109 ,105,115,115,0,7,0,0,0,9,0,0,0,0,0,0,0,18,0,0,0 ,12,0,0,0,200,0,0,0,19,0,0,0,1,0,3,0,0,0,0,0 ,40,0,0,0,1,0,4,0,0,0,4,0,20,0,0,0,1,0,19,0 ,0,1,111,0,41,0,0,0,1,0,0,0,0,0,0,0,46,0,0,0 ,1,0,0,0,0,1,111,0,33,0,0,0,1,0,0,0,0,0,1,0 ,34,0,0,0,1,0,0,0,0,0,12,0,42,0,0,0,12,111,66,0 ,168,0,0,0,31,2,1,1,233,2,1,0,0,0,0,77,105,100,97,115 ,72,101,108,112,71,111,66,97,99,107,0,97,99,107,0,0,16,2,2,2 ,5,2,2,0,0,0,0,0,4,0,98,0,0,0,0,13,72,136,174,0 ,1,0,2,0,5,0,2,0,0,0,27,8,64,112,108,223,128,6,23,3 ,1,0,1,9,73,83,79,56,56,53,57,45,49,2,7,68,105,115,109,105 ,115,115,0,13,72,136,174,13,72,136,174,0,1,0,2,0,3,0,1,0 ,0,3,181,9,48,6,23,18,243,90,160,0,57,0,0,0,0,0,0,0 ,0,0,0,0,236,0,0,0,246,0,0,1,3,0,0,1,15,0,0,1 ,32,0,0,1,45,0,0,1,58,0,0,1,76,0,0,1,90,0,0,1 ,102,0,0,1,114,0,0,1,123,0,0,1,132,0,0,1,141,0,0,1 ,154,0,0,1,161,0,0,1,177,0,0,1,189,0,0,1,204,0,0,1 ,215,0,0,1,228,0,0,1,239,0,0,1,254,0,0,2,11,0,0,2 ,28,0,0,2,42,0,0,2,56,0,0,2,70,0,0,2,82,0,0,2 ,90,0,0,2,103,0,0,2,115,0,0,2,131,0,0,2,143,0,0,2 ,157,0,0,2,169,0,0,2,174,0,0,2,190,0,0,2,200,0,0,2 ,214,0,0,2,224,0,0,2,234,0,0,2,251,0,0,3,1,0,0,3 ,12,0,0,3,14,0,0,3,16,0,0,3,31,0,0,3,48,0,0,3 ,72,0,0,3,87,0,0,3,110,0,0,3,132,0,0,3,145,0,0,3 ,156,0,0,97,108,105,103,110,109,101,110,116,0,97,117,116,111,85,110,109 ,97,110,97,103,101,0,98,111,114,100,101,114,87,105,100,116,104,0,98,111 ,116,116,111,109,65,116,116,97,99,104,109,101,110,116,0,98,111,116,116,111 ,109,79,102,102,115,101,116,0,98,111,116,116,111,109,87,105,100,103,101,116 ,0,99,97,110,99,101,108,76,97,98,101,108,83,116,114,105,110,103,0,100 ,101,102,97,117,108,116,66,117,116,116,111,110,0,100,105,97,108,111,103,83 ,116,121,108,101,0,100,105,97,108,111,103,84,105,116,108,101,0,101,100,105 ,116,77,111,100,101,0,101,100,105,116,97,98,108,101,0,102,111,110,116,76 ,105,115,116,0,102,114,97,99,116,105,111,110,66,97,115,101,0,104,101,105 ,103,104,116,0,104,101,108,112,76,97,98,101,108,83,116,114,105,110,103,0 ,108,97,98,101,108,83,116,114,105,110,103,0,108,101,102,116,65,116,116,97 ,99,104,109,101,110,116,0,108,101,102,116,79,102,102,115,101,116,0,108,101 ,102,116,80,111,115,105,116,105,111,110,0,108,101,102,116,87,105,100,103,101 ,116,0,108,105,115,116,83,105,122,101,80,111,108,105,99,121,0,109,97,114 ,103,105,110,72,101,105,103,104,116,0,109,101,115,115,97,103,101,65,108,105 ,103,110,109,101,110,116,0,109,101,115,115,97,103,101,83,116,114,105,110,103 ,0,109,101,115,115,97,103,101,87,105,110,100,111,119,0,111,107,76,97,98 ,101,108,83,116,114,105,110,103,0,111,114,105,101,110,116,97,116,105,111,110 ,0,112,97,116,116,101,114,110,0,114,101,115,105,122,101,80,111,108,105,99 ,121,0,114,101,115,105,122,101,87,105,100,116,104,0,114,105,103,104,116,65 ,116,116,97,99,104,109,101,110,116,0,114,105,103,104,116,79,102,102,115,101 ,116,0,114,105,103,104,116,80,111,115,105,116,105,111,110,0,114,105,103,104 ,116,87,105,100,103,101,116,0,114,111,119,115,0,115,99,114,111,108,108,105 ,110,103,80,111,108,105,99,121,0,115,117,98,77,101,110,117,73,100,0,116 ,111,112,65,116,116,97,99,104,109,101,110,116,0,116,111,112,79,102,102,115 ,101,116,0,116,111,112,87,105,100,103,101,116,0,118,105,115,105,98,108,101 ,73,116,101,109,67,111,117,110,116,0,119,105,100,116,104,0,119,111,114,107 ,87,105,110,100,111,119,0,120,0,121,0,99,114,101,97,116,101,67,97,108 ,108,98,97,99,107,0,97,99,116,105,118,97,116,101,67,97,108,108,98,97 ,99,107,0,98,114,111,119,115,101,83,101,108,101,99,116,105,111,110,67,97 ,108,108,98,97,99,107,0,99,97,110,99,101,108,67,97,108,108,98,97,99 ,107,0,99,111,109,109,97,110,100,69,110,116,101,114,101,100,67,97,108,108 ,98,97,99,107,0,100,101,102,97,117,108,116,65,99,116,105,111,110,67,97 ,108,108,98,97,99,107,0,104,101,108,112,67,97,108,108,98,97,99,107,0 ,111,107,67,97,108,108,98,97,99,107,0,118,97,108,117,101,67,104,97,110 ,103,101,100,67,97,108,108,98,97,99,107,0,0,0,0,0,46,0,0,13 ,72,136,174,0,1,0,2,0,3,0,1,0,0,1,201,9,100,1,4,18 ,243,90,160,0,20,0,0,0,0,0,0,0,0,0,0,0,88,0,0,0 ,114,0,0,0,130,0,0,0,150,0,0,0,178,0,0,0,191,0,0,0 ,210,0,0,0,230,0,0,0,249,0,0,1,9,0,0,1,29,0,0,1 ,50,0,0,1,75,0,0,1,93,0,0,1,114,0,0,1,135,0,0,1 ,148,0,0,1,175,0,0,88,109,67,114,101,97,116,101,65,114,114,111,119 ,66,117,116,116,111,110,71,97,100,103,101,116,0,88,109,67,114,101,97,116 ,101,67,111,109,109,97,110,100,0,88,109,67,114,101,97,116,101,69,114,114 ,111,114,68,105,97,108,111,103,0,88,109,67,114,101,97,116,101,70,105,108 ,101,83,101,108,101,99,116,105,111,110,68,105,97,108,111,103,0,88,109,67 ,114,101,97,116,101,70,111,114,109,0,88,109,67,114,101,97,116,101,70,111 ,114,109,68,105,97,108,111,103,0,88,109,67,114,101,97,116,101,76,97,98 ,101,108,71,97,100,103,101,116,0,88,109,67,114,101,97,116,101,77,97,105 ,110,87,105,110,100,111,119,0,88,109,67,114,101,97,116,101,77,101,110,117 ,66,97,114,0,88,109,67,114,101,97,116,101,80,97,110,101,100,87,105,110 ,100,111,119,0,88,109,67,114,101,97,116,101,80,114,111,109,112,116,68,105 ,97,108,111,103,0,88,109,67,114,101,97,116,101,80,117,115,104,66,117,116 ,116,111,110,71,97,100,103,101,116,0,88,109,67,114,101,97,116,101,82,111 ,119,67,111,108,117,109,110,0,88,109,67,114,101,97,116,101,83,99,114,111 ,108,108,101,100,76,105,115,116,0,88,109,67,114,101,97,116,101,83,99,114 ,111,108,108,101,100,84,101,120,116,0,88,109,67,114,101,97,116,101,84,101 ,120,116,0,88,109,67,114,101,97,116,101,84,111,103,103,108,101,66,117,116 ,116,111,110,71,97,100,103,101,116,0,88,109,67,114,101,97,116,101,87,97 ,114,110,105,110,103,68,105,97,108,111,103,0,0,0,0,0,0,0,0,0 ,0,1,52,1,2,0,1,0,0,0,0,0,0,1,24,1,2,2,1,0 ,0,0,0,0,0,0,252,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,67,114,101,97,116,101,78,101,119,0,0,77,105,100,97,115 ,73,110,103,111,116,77,97,110,97,103,101,114,67,108,97,115,115,84,101,120 ,116,0,120,77,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114 ,78,97,109,101,84,101,120,116,0,97,98,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,67,108,97,115,115,76,97,98,101,108,0,77 ,105,100,97,115,73,110,103,111,116,77,97,110,97,103,101,114,68,105,115,109 ,105,115,115,0,98,97,99,77,105,100,97,115,73,110,103,111,116,77,97,110 ,97,103,101,114,76,97,98,101,108,0,108,77,105,100,97,115,73,110,103,111 ,116,77,97,110,97,103,101,114,80,97,110,101,115,0,97,0,0,0,0,0 ,0,0,0 }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Midaswww_color.ad����������������������������������������������������������������������100666 � 21345 � 173 � 227131 6003413532 14754� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CUSTOM.WWW.Menu.10: Headings =>@-12#Paragraphs =>@-20 CUSTOM.WWW.Menu.11: GopherSpace Overview@36#Veronica Interface@115#......@0#Original UMN Gopher@73#UIUC Weather Machine@106 CUSTOM.WWW.Menu.12: Helvetica (Headings)@41#New Century (Headings)@59#Times (Headings)@102 CUSTOM.WWW.Menu.13: Overview@74#On Version@68#On WWW@69#On Help@66#......@0#On HTML@65#On URL's@67#......@0#On Context@64 CUSTOM.WWW.Menu.14: On Window@70#On Context@64 CUSTOM.WWW.Menu.15: -5@5#-4@4#-3@3#-2@2#-1@1#0@6#1@7#2@8#3@9#4@10#5@11 CUSTOM.WWW.Menu.16: SunOS 4.1.1 Man Pages@99#HP-UX 8.0.7 Man Pages@38#Ultrix 4.2a Man Pages@108#IRIX 4.0 Man Pages@47#Pyramid OSx Man Pages@84#......@0#VMS Help System@113#X11R5 Man Pages@126#GNU manu\ als@33 CUSTOM.WWW.Menu.17: Visited Documents@116#Visited Documents...@117#......@0#Home Page@43#Go Back@34#Next@61#Previous@79#......@0#Hotlist@44#Add Document to Hotlist@14 CUSTOM.WWW.Menu.18: Document...@29#Gopher Document...@35#FTP Document...@30#Local Document...@52 CUSTOM.WWW.Menu.19: Portrait@76#Landscape@50#Seascape@96#Upside Down@111 CUSTOM.WWW.Menu.1: Go Back@34#Previous@79#Next@61#......@0#Save...@93#Search...@94#......@0#Clone @19#Close Window@21 CUSTOM.WWW.Menu.20: Helvetica (Text)@42#New Century (Text)@60#Times (Text)@103 CUSTOM.WWW.Menu.21: First Page@32#Next Page@62#Previous Page@80#Index@48#......@0#MagStep =>@-15#Orientation =>@-19 CUSTOM.WWW.Menu.22: Document Title@27#Document URL@28#......@0#Unrecognized Markup@109 CUSTOM.WWW.Menu.23: Headings (Underline)@40 CUSTOM.WWW.Menu.2: HTML@39#Text@101#Postscript@78 CUSTOM.WWW.Menu.3: File (History) =>@-8#Help (History) =>@-14 CUSTOM.WWW.Menu.4: File =>@-7#Postscript =>@-21#Navigate =>@-17#Customize =>@-5#Documents =>@-6#Manuals =>@-16#Help =>@-13 CUSTOM.WWW.Menu.5: Options...@72#Print Options...@82#Show =>@-22#......@0#Fonts =>@-10#Font Size =>@-9#Underline =>@-23 CUSTOM.WWW.Menu.6: MidasWWW Welcome Page@56#......@0#Web Overview@120#Web Project@121#Web Servers@122#Information by Subject@49#Data Sources by Service@23#W3 Catalog@118#......@0#What's New@123#......\ @0#Wais Interface@119#Gopher Interface =>@-11#Usenet Interface@112#Finger Interface@31#HyTelnet Interface@45#Techinfo Interface@100#Archie Interface@15#X.500 Interface@125#Hyper-G Interface@46#......@\ 0#HEP Overview@37#......@0#CERN Home Page@16#SLAC Home Page@90#SSC Home Page@91#Ohio State Home Page@63 CUSTOM.WWW.Menu.7: Reread Document@86#Document Info...@25#Document Source...@26#......@0#Open Selected@71#Open =>@-18#......@0#Save...@93#Mail...@53#Print...@83#Search...@94#......@0#Clone@19#......@0\ #Close Window@21#Quit@85 CUSTOM.WWW.Menu.8: Update@110#Search... (History)@95#Close@20 CUSTOM.WWW.Menu.9: Small@97#Medium@54#Large@51 CUSTOM.WWW.Menus: <buttons>#<format>#<history_menu>#<main_menu>#Customize#Documents#File#File (History)#Font Size#Fonts#Gopher Interface#Headings#Help#Help (History)#MagStep#Manuals#Navigate#Open#Orie\ ntation#Paragraphs#Postscript#Show#Underline CUSTOM.WWW.Verb.100: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch:8004/" CUSTOM.WWW.Verb.101: Set Ingot .^^^XmDiialogShell Format TEXT CUSTOM.WWW.Verb.102: #Set Ingot .^^^WWWMain HeadingFont "times"\nStore App Resource .^^^midaswww headingFont "times" CUSTOM.WWW.Verb.103: #Set Ingot .^^^WWWMain TextFont "times"\nStore App Resource .^^^midaswww textFont "times" CUSTOM.WWW.Verb.104: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.uiuc.edu:70/1" CUSTOM.WWW.Verb.105: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.uiuc.edu:70/1" CUSTOM.WWW.Verb.106: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://wx.atmos.uiuc.edu:70/1" CUSTOM.WWW.Verb.107: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://bigcheese.math.scarolina.edu:70/1" CUSTOM.WWW.Verb.108: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/ultrix.top.html" CUSTOM.WWW.Verb.109: #Set Ingot .^^^XmMainWindow ShowUnrecognizedMarkup GetValue(.,set)\nStore App Resource .^^^midaswww "ShowUnrecognizedMarkup" ShowUnrecognizedMarkup\nFor All .^^^XmMainWindow...hid\ den Set Value . managed ShowUnrecognizedMarkup CUSTOM.WWW.Verb.10: #Set Value PSState magstep 4 CUSTOM.WWW.Verb.110: Invoke Callback .^^^XmForm unmapCallback\nInvoke Callback .^^^XmForm mapCallback CUSTOM.WWW.Verb.111: #Set Value PSState orientation "upside-down" CUSTOM.WWW.Verb.112: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/News/Groups/Overview.html" CUSTOM.WWW.Verb.113: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/HELP" CUSTOM.WWW.Verb.114: Custom Popup WWW CUSTOM.WWW.Verb.115: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.tc.umn.edu:70/11/Other Gopher and Information Servers/Veronica" CUSTOM.WWW.Verb.116: Set Ingot .^^^XmMainWindow WWWFileTemp "history:" CUSTOM.WWW.Verb.117: Popup .^^^XmMainWindow###WWWHistory CUSTOM.WWW.Verb.118: Set Ingot .^^^XmMainWindow WWWFileTemp "http://cui_www.unige.ch/w3catalog" CUSTOM.WWW.Verb.119: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/WAIS/ByHost.html" CUSTOM.WWW.Verb.11: #Set Value PSState magstep 5 CUSTOM.WWW.Verb.120: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/WWW/LineMode/Defaults/default.html" CUSTOM.WWW.Verb.121: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/WWW/TheProject.html" CUSTOM.WWW.Verb.122: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/WWW/Servers.html" CUSTOM.WWW.Verb.123: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html" CUSTOM.WWW.Verb.124: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.tc.umn.edu:70/11/Phone Books/WHOIS Searches" CUSTOM.WWW.Verb.125: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://umich.edu:7777/" CUSTOM.WWW.Verb.126: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/x11.top.html" CUSTOM.WWW.Verb.12: Set Ingot .^^^XmMainWindow WWWFileTemp "http://hoohoo.ncsa.uiuc.edu:1235/man/index" CUSTOM.WWW.Verb.13: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/bySubject/Overview.html" CUSTOM.WWW.Verb.14: Set Ingot .^^^XmMainWindow HotList HotList++"<h6><kill><a href = %WWWParent(WWWFile) > %WWWTitle </a></h6>" \nStore App Resource .^^^midaswww hotList HotList \n CUSTOM.WWW.Verb.15: Set Ingot .^^^XmMainWindow WWWFileTemp "http://web.nexor.co.uk/archie.html" CUSTOM.WWW.Verb.16: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/" CUSTOM.WWW.Verb.17: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.tc.cornell.edu:70/1" CUSTOM.WWW.Verb.18: WWW Reset CUSTOM.WWW.Verb.19: Set Ingot WWWMain WWWFileNew WWWFile CUSTOM.WWW.Verb.1: #Set Value PSState magstep -1 CUSTOM.WWW.Verb.20: For All .^^^XmForm.XmDialogShell. PopDown .\nPopDown .^^^XmForm CUSTOM.WWW.Verb.21: Quit Shell . CUSTOM.WWW.Verb.22: Set Ingot .^^^XmMainWindow WWWFileTemp "http://fatty.law.cornell.edu.:80/usr2/wwwtext/lii.table.html" CUSTOM.WWW.Verb.23: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/ByAccess.html" CUSTOM.WWW.Verb.24: Popup .^^^XmMainWindow###WWWDisplayOptions CUSTOM.WWW.Verb.25: Popup .^^^XmMainWindow###WWWDocInfo\nSet Ingot .^^^XmMainWindow###WWWDocInfo ShowSource False CUSTOM.WWW.Verb.26: Popup .^^^XmMainWindow###WWWDocInfo\nSet Ingot .^^^XmMainWindow###WWWDocInfo ShowSource True CUSTOM.WWW.Verb.27: #Set Ingot .^^^XmMainWindow ShowTitle GetValue(.,set)\nStore App Resource .^^^midaswww "ShowTitle" ShowTitle\nKick .^^^XmMainWindow CUSTOM.WWW.Verb.28: #Set Ingot .^^^XmMainWindow ShowURL GetValue(.,set)\nStore App Resource .^^^midaswww "ShowURL" ShowURL\nkick .^^^XmMainWindow CUSTOM.WWW.Verb.29: Popup .^^^XmMainWindow###WWWDocOpen CUSTOM.WWW.Verb.2: #Set Value PSState magstep -2 CUSTOM.WWW.Verb.30: Popup .^^^XmMainWindow###WWWOpenFTP CUSTOM.WWW.Verb.31: Set Ingot .^^^XmMainWindow WWWFileTemp "http://cs.indiana.edu/finger/gateway" CUSTOM.WWW.Verb.32: WWW First Page PSState\nSet Sensitive .^.Next_Page True\nSet Sensitive . False CUSTOM.WWW.Verb.33: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:85/info/dir" CUSTOM.WWW.Verb.34: Set Ingot . Temp WWWBack(HistoryList)\nWWW Delete History HistoryList\nWWW Link\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(Temp,"WWWFile") CUSTOM.WWW.Verb.35: Popup .^^^XmMainWindow###WWWOpenGopher CUSTOM.WWW.Verb.36: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.micro.umn.edu:70/11/Other Gopher and Information Servers" CUSTOM.WWW.Verb.37: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/bySubject/Physics/HEP.html" CUSTOM.WWW.Verb.38: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/hpux.top.html" CUSTOM.WWW.Verb.39: Set Ingot .^^^XmDialogShell Format HTML CUSTOM.WWW.Verb.3: #Set Value PSState magstep -3 CUSTOM.WWW.Verb.40: #Set Ingot .^^^WWWMain UnderlineHeadings GetValue(.,set)\nStore App Resource .^^^midaswww underlineHeadings UnderlineHeadings CUSTOM.WWW.Verb.41: #Set Ingot .^^^WWWMain HeadingFont helvetica\nStore App Resource .^^^midaswww headingFont helvetica CUSTOM.WWW.Verb.42: #Set Ingot .^^^WWWMain TextFont helvetica\nStore App Resource .^^^midaswww textFont helvetica CUSTOM.WWW.Verb.43: Set Ingot .^^^XmMainWindow WWWFileTemp WWW_Home CUSTOM.WWW.Verb.44: Set Ingot .^^^XmMainWindow WWWFileTemp "ingot:HotList" CUSTOM.WWW.Verb.45: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu/misc/hytelnet.html" CUSTOM.WWW.Verb.46: Set Ingot .^^^XmMainWindow WWWFileTemp "http://iicm.tu-graz.ac.at:80/ROOT" CUSTOM.WWW.Verb.47: Set Ingot .^^^XmMainWindow WWWFileTemp "http://z0.slac.stanford.edu:1234/man/index" CUSTOM.WWW.Verb.48: Set Ingot . Temp WWWBack(HistoryList)\nWWW Delete History HistoryList\nWWW Link\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(Temp,"WWWFile") CUSTOM.WWW.Verb.49: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/bySubject/Overview.html" CUSTOM.WWW.Verb.4: #Set Value PSState magstep -4 CUSTOM.WWW.Verb.50: #Set Value PSState orientation landscape CUSTOM.WWW.Verb.51: #Set Ingot .^^^WWWMain FontSize Large\nStore App Resource .^^^midaswww "fontSize" Large CUSTOM.WWW.Verb.52: Popup .^^^XmMainWindow###WWWOpenLocal CUSTOM.WWW.Verb.53: Popup .^^^XmMainWindow###WWWMail CUSTOM.WWW.Verb.54: #Set Ingot .^^^WWWMain FontSize Medium\nStore App Resource .^^^midaswww "fontSize" Medium\n CUSTOM.WWW.Verb.55: Popup Midas_Main CUSTOM.WWW.Verb.56: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/welcome.html" CUSTOM.WWW.Verb.57: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.ncsa.uiuc.edu:70/1" CUSTOM.WWW.Verb.58: Set Ingot .^^^XmMainWindow WWWFileTemp "http://hoohoo.ncsa.uiuc.edu/welcome.html" CUSTOM.WWW.Verb.59: #Set Ingot .^^^WWWMain HeadingFont "new century schoolbook"\nStore App Resource .^^^midaswww headingFont "new century schoolbook" CUSTOM.WWW.Verb.5: #Set Value PSState magstep -5 CUSTOM.WWW.Verb.60: #Set Ingot .^^^WWWMain TextFont "new century schoolbook"\nStore App Resource .^^^midaswww textFont "new century schoolbook" CUSTOM.WWW.Verb.61: Set Ingot . Temp WWWNext(WWWBack(HistoryList))\nWWW Delete History HistoryList\nWWW Link Temp \nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),"WWWFile") CUSTOM.WWW.Verb.62: If GetValue(PSState,"pages")>0 Invoke Callback .^^^WWWMain...Next activateCallback\nElse WWW Next Page PSState\nElse Set Sensitive .^.First_Page True CUSTOM.WWW.Verb.63: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/hypertext/information/information.html" CUSTOM.WWW.Verb.64: Help On Context . CUSTOM.WWW.Verb.65: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ncsa.uiuc.edu/demoweb/html-primer.html" CUSTOM.WWW.Verb.66: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/help.html" CUSTOM.WWW.Verb.67: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ncsa.uiuc.edu/demoweb/url-primer.html" CUSTOM.WWW.Verb.68: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/about.html" CUSTOM.WWW.Verb.69: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/WWW/TheProject.html" CUSTOM.WWW.Verb.6: #Set Value PSState magstep 0 CUSTOM.WWW.Verb.70: Invoke Callback .^^^XmForm helpCallback CUSTOM.WWW.Verb.71: If GetSelection(.,"PRIMARY","STRING")!="" Set Ingot .^^^XmMainWindow WWWFileTemp GetSelection(.,"PRIMARY","STRING") \nElse Popup .^^^XmMainWindow###WWWDocOpen CUSTOM.WWW.Verb.72: Popup .^^^XmMainWindow###WWWParameters CUSTOM.WWW.Verb.73: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.micro.umn.edu:70/1" CUSTOM.WWW.Verb.74: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/overview.html" CUSTOM.WWW.Verb.75: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://pscuxb.psc.edu:1563/1" CUSTOM.WWW.Verb.76: #Set Value PSState orientation portrait CUSTOM.WWW.Verb.77: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://una.hh.lib.umich.edu:70/11/journals/pmc" CUSTOM.WWW.Verb.78: Set Ingot .^^^XmDialogShell Format Postscript CUSTOM.WWW.Verb.79: Set Ingot . Temp WWWPrev(WWWBack(HistoryList))\nWWW Delete History HistoryList\nWWW Link Temp \nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),"WWWFile") CUSTOM.WWW.Verb.7: #Set Value PSState magstep 1 CUSTOM.WWW.Verb.80: Set Ingot . Temp WWWPrev(WWWBack(HistoryList))\nWWW Delete History HistoryList\nWWW Link Temp \nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),"WWWFile") CUSTOM.WWW.Verb.81: Invoke Callback .^^^XmMainWindow###WWWPrint...WWWPrintOk activateCallback CUSTOM.WWW.Verb.82: Popup .^^^XmMainWindow###WWWPrintOptions CUSTOM.WWW.Verb.83: Popup .^^^XmMainWindow###WWWPrint CUSTOM.WWW.Verb.84: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/pyramid.top.html" CUSTOM.WWW.Verb.85: Quit Application . CUSTOM.WWW.Verb.86: WWW Zap .^^^XmMainWindow...WWWHyper WWWFile\nWWW Link\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWFile,"WWWNode") CUSTOM.WWW.Verb.87: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.sdsc.edu:70/1" CUSTOM.WWW.Verb.88: Set Ingot .^^^XmMainWindow WWWFileTemp "http://iicm.tu-graz.ac.at:80/CSIGGRAPHbib" CUSTOM.WWW.Verb.89: Set Ingot .^^^XmMainWindow WWWFileTemp "http://slacvm.slac.stanford.edu:5080/FIND/SLAC.HTML" CUSTOM.WWW.Verb.8: #Set Value PSState magstep 2 CUSTOM.WWW.Verb.90: Set Ingot .^^^XmMainWindow WWWFileTemp "http://slacvm.slac.stanford.edu./FIND/SLAC.HTML" CUSTOM.WWW.Verb.91: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ssc.gov/SSC.html" CUSTOM.WWW.Verb.92: Custom Write WWW\nSave Stored Resources . CUSTOM.WWW.Verb.93: Popup .^^^XmMainWindow###WWWSave CUSTOM.WWW.Verb.94: Popup .^^^XmMainWindow###WWWSearch CUSTOM.WWW.Verb.95: Popup .^^^WWWHistory###WWWSearch CUSTOM.WWW.Verb.96: #Set Value PSState orientation seascape CUSTOM.WWW.Verb.97: #Set Ingot .^^^WWWMain FontSize Small\nStore App Resource .^^^midaswww "fontSize" Small\n CUSTOM.WWW.Verb.98: Popup WWWStartup CUSTOM.WWW.Verb.99: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/sunos.top.html" CUSTOM.WWW.Verb.9: #Set Value PSState magstep 3 CUSTOM.WWW.Verbs: -1#-2#-3#-4#-5#0#1#2#3#4#5#AIX 3.2 Man Pages#Academic Information#Add Document to Hotlist#Archie Interface#CERN Home Page#CTC Gopher#Clear Visited Documents#Clone#Close#Close Window#\ Cornell Law School#Data Sources by Service#Display...#Document Info...#Document Source...#Document Title#Document URL#Document...#FTP Document...#Finger Interface#First Page#GNU manuals#Go Back#Gopher\ Document...#GopherSpace Overview#HEP Overview#HP-UX 8.0.7 Man Pages#HTML#Headings (Underline)#Helvetica (Headings)#Helvetica (Text)#Home Page#Hotlist#HyTelnet Interface#Hyper-G Interface#IRIX 4.0 Man\ Pages#Index#Information by Subject#Landscape#Large#Local Document...#Mail...#Medium#Midas...#MidasWWW Welcome Page#NCSA Gopher#NCSA Home Page#New Century (Headings)#New Century (Text)#Next#Next Page#\ Ohio State Home Page#On Context#On HTML#On Help#On URL's#On Version#On WWW#On Window#Open Selected#Options...#Original UMN Gopher#Overview#PSC Gopher#Portrait#PostModern Culture#Postscript#Previous#Pr\ evious Page#Print#Print Options...#Print...#Pyramid OSx Man Pages#Quit#Reread Document#SDSC Gopher#SIGGRAPH Bibliography#SLAC#SLAC Home Page#SSC Home Page#Save Current Settings#Save...#Search...#Searc\ h... (History)#Seascape#Small#Startup...#SunOS 4.1.1 Man Pages#Techinfo Interface#Text#Times (Headings)#Times (Text)#UIUC Gopher#UIUC Gopher#UIUC Weather Machine#USC Math Gopher#Ultrix 4.2a Man Pages\ #Unrecognized Markup#Update#Upside Down#Usenet Interface#VMS Help System#Verbs and Menus...#Veronica Interface#Visited Documents#Visited Documents...#W3 Catalog#Wais Interface#Web Overview#Web Project\ #Web Servers#What's New#Whois Interface#X.500 Interface#X11R5 Man Pages midaswww*Clone.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/clone.html" midaswww*Close_Window.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/quit.html" midaswww*ConfirmExit.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave Fa\ lse midaswww*Customize.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Customize" midaswww*Document_Source___.DocFormat: Set Sensitive . DocFormat=="HTML" midaswww*Document_Source___.DocFormatExecuteWhenCreated: False midaswww*Document_Source___.midasIngots: DocFormat midaswww*Document_Title.midasCreateCallback: Set Value . set ShowTitle midaswww*Document_URL.midasCreateCallback: set value . set ShowURL midaswww*Documents.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Documents" midaswww*EnableHTTP2.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave Fa\ lse midaswww*File.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#File" midaswww*First_Page.WWWFile: Set Sensitive . False midaswww*First_Page.midasIngots: WWWFile midaswww*FontList: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1 midaswww*Font_Size.radioBehavior: true midaswww*GhostscriptErrorCancel.activateCallback: PopDown .^^ midaswww*GhostviewErrorsHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*Go_Back.WWWFile: Set Sensitive . WWWBack(HistoryList)!=0 midaswww*Go_Back.WWWFileExecuteWhenCreated: True midaswww*Go_Back.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#GoBack" midaswww*Go_Back.midasIngots: WWWFile midaswww*HTML.DocFormat: Set Sensitive . DocFormat=="HTML"\nIf DocFormat=="HTML" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\nIf DocFormat=="HTML" Invoke Callback . activateCallback midaswww*HTML.DocFormatExecuteWhenCreated: True midaswww*HTML.midasIngots: DocFormat midaswww*Headings.radioBehavior: true midaswww*Headings_(Underline).midasCreateCallback: Set Value . set UnderlineHeadings midaswww*Helvetica_(Headings).midasCreateCallback: Set Value . set HeadingFont=="helvetica" midaswww*Helvetica_(Text).midasCreateCallback: Set Value . set TextFont=="helvetica" midaswww*Index.WWWFile: Set Sensitive . PSState!=0&&GetValue(PSState,"pages")>1 midaswww*Index.midasIngots: WWWFile midaswww*Large.midasCreateCallback: Set Value . set FontSize=="Large" midaswww*MagStep.XmToggleButtonGadget.PSState: If PSState!=0 Set Value . set GetValue(PSState,magstep)==GetValue(.,labelString) midaswww*MagStep.XmToggleButtonGadget.midasIngots: PSState midaswww*MagStep.radioBehavior: true midaswww*Mail___.DocFormat: Set Sensitive . DocFormat!="GIF Image" midaswww*Mail___.DocFormatExecuteWhenCreated: False midaswww*Mail___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/slac_library.html#Mail" midaswww*Mail___.midasIngots: DocFormat midaswww*Manuals.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#manuals" midaswww*Medium.midasCreateCallback: Set Value . set FontSize=="Medium" midaswww*Navigate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Navigate" midaswww*New_Century_(Headings).midasCreateCallback: Set Value . set HeadingFont=="new century schoolbook" midaswww*New_Century_(Text).midasCreateCallback: Set Value . set TextFont=="new century schoolbook" midaswww*Next.WWWFile: Set Sensitive . WWWDest(WWWNext(WWWBack(HistoryList)))!=0 midaswww*Next.WWWFileExecuteWhenCreated: True midaswww*Next.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#NextPrevious" midaswww*Next.midasIngots: WWWFile midaswww*Next_Page.WWWFile: Set Sensitive . WWWDest(WWWNext(WWWBack(HistoryList)))!=0&&PSState!=0&&GetValue(PSState,"pages")!=1 midaswww*Next_Page.midasIngots: WWWFile midaswww*Orientation.XmToggleButtonGadget.PSState: If PSState!=0 Set Value . set GetValueRaw(PSState,orientation)==GetValue(.,labelString) midaswww*Orientation.XmToggleButtonGadget.midasIngots: PSState midaswww*Orientation.radioBehavior: true midaswww*PSF.activateCallback: WWW Next Page PSState midaswww*Paragraphs.radioBehavior: true midaswww*Postscript.DocFormat: Set Sensitive . DocFormat=="Postscript" midaswww*Postscript.DocFormatExecuteWhenCreated: True midaswww*Postscript.midasIngots: DocFormat midaswww*Previous.WWWFile: Set Sensitive . WWWDest(WWWPrev(WWWBack(HistoryList)))!=0 midaswww*Previous.WWWFileExecuteWhenCreated: True midaswww*Previous.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#NextPrevious" midaswww*Previous.midasIngots: WWWFile midaswww*Previous_Page.WWWFile: Set Sensitive . WWWDest(WWWPrev(WWWBack(HistoryList)))!=0&&PSState!=0&&GetValue(PSState,"pages")>1 midaswww*Previous_Page.midasIngots: WWWFile midaswww*Print.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/slac_library.html#Print" midaswww*Print___.DocFormat: Set Sensitive . DocFormat!="GIF Image" midaswww*Print___.DocFormatExecuteWhenCreated: False midaswww*Print___.midasIngots: DocFormat midaswww*Quit.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/quit.html" midaswww*SGMLHyper.midasCreateCallback: WWW CopyB . .^ midaswww*SGMLMarkerText.bombPixmap: bomb midaswww*Save___.DocFormat: Set Sensitive . DocFormat!="GIF Image" midaswww*Save___.DocFormatExecuteWhenCreated: False midaswww*Save___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/save.html" midaswww*Save___.midasIngots: DocFormat midaswww*Search___.DocFormat: Set Sensitive . DocFormat=="HTML" midaswww*Search___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/search_window.html" midaswww*Search___.midasIngots: DocFormat midaswww*ShowDocumentSource.DocFormat: Set Sensitive . DocFormat=="HTML" midaswww*ShowDocumentSource.DocFormatExecuteWhenCreated: True midaswww*ShowDocumentSource.ShowSource: Set Value . set ShowSource midaswww*ShowDocumentSource.ShowSourceExecuteWhenCreated: True midaswww*ShowDocumentSource.midasIngots: ShowSource DocFormat midaswww*ShowDocumentSource.valueChangedCallback: Set Ingot .^^^WWWDocInfo ShowSource GetValue(.,set) midaswww*Small.midasCreateCallback: Set Value . set FontSize=="Small" midaswww*SourceTextSW.ShowSource: If ShowSource Then PopUp .\nElse PopDown .\nIf ShowSource Set Value .^^ height 600\nElse Set Value .^^ height GetValue(.,y)\nIf ShowSource WWW Put ....WWWSource WWWSo\ urce(.^^^XmMainWindow...WWWHyper) midaswww*SourceTextSW.ShowSourceExecuteWhenCreated: False midaswww*SourceTextSW.midasCreateCallback: Create Widget . SGMLHyper WWWSource midaswww*SourceTextSW.midasIngots: ShowSource midaswww*Times_(Headings).midasCreateCallback: Set Value . set HeadingFont=="times" midaswww*Times_(Text).midasCreateCallback: Set Value . set TextFont=="times" midaswww*Unrecognized_Markup.midasCreateCallback: set value . set ShowUnrecognizedMarkup midaswww*WWWButtons.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Buttons" midaswww*WWWButtons.midasCreateCallback: Custom Connect WWW "<buttons>" . midaswww*WWWButtons.orientation: XMHORIZONTAL midaswww*WWWCommand.KeywordVisible: Set Sensitive . KeywordVisible midaswww*WWWCommand.KeywordVisibleExecuteWhenCreated: False midaswww*WWWCommand.midasIngots: KeywordVisible midaswww*WWWCommand.sensitive: false midaswww*WWWCommandText.KeywordVisible: If KeywordVisible Grab Focus . midaswww*WWWCommandText.KeywordVisibleExecuteWhenCreated: False midaswww*WWWCommandText.commandEnteredCallback: If GetCommand()!="" Set Ingot . temp WWWCreateNodeFromKeyword(GetIngot(.^^^WWWMain...WWWHyper,WWWFileBase),WWWFile,WWWEncode(GetCommand()),"get")\n\ If GetCommand()!="" WWW Link temp\nIf GetCommand()!="" S\ et Ingot .^^^XmMainWindow WWWFileRequest WWWDest(temp) midaswww*WWWCommandText.marginHeight: 0 midaswww*WWWCommandText.marginWidth: 2 midaswww*WWWCommandText.midasCreateCallback: PopDown ..XmScrolledWindow\nPopDown ..Selection midaswww*WWWCommandText.midasIngots: KeywordVisible midaswww*WWWDocInfo*WWWSearch.ShowSource: If ShowSource==False PopDown . midaswww*WWWDocInfo*WWWSearch.ShowSourceExecuteWhenCreated: False midaswww*WWWDocInfo*WWWSearch.dialogTitle: Search Source midaswww*WWWDocInfo*WWWSearch.midasIngots: ShowSource midaswww*WWWDocInfo.DocFormat: If DocFormat!="HTML" Set Ingot . ShowSource False midaswww*WWWDocInfo.DocFormatExecuteWhenCreated: False midaswww*WWWDocInfo.ShowSourceExecuteWhenCreated: True midaswww*WWWDocInfo.dialogTitle: Document Info. midaswww*WWWDocInfo.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/docinfo.html" midaswww*WWWDocInfo.mapCallback: Set Value ....SourceTextSW height 600\nSet Value ....SourceTextSW width 600 midaswww*WWWDocInfo.midasCreateCallback: Set Ingot . ShowSource False midaswww*WWWDocInfo.midasIngots: ShowSource DocFormat midaswww*WWWDocInfoCancel.activateCallback: PopDown .^^ midaswww*WWWDocInfoDismiss.activateCallback: For All .^^.XmDialogShell. PopDown .\nPopDown .^^ midaswww*WWWDocInfoDocFormatText.DocFormat: Set Value . value DocFormat midaswww*WWWDocInfoDocFormatText.DocFormatExecuteWhenCreated: True midaswww*WWWDocInfoDocFormatText.editable: false midaswww*WWWDocInfoDocFormatText.midasIngots: DocFormat midaswww*WWWDocInfoDocTitleText.WWWTitle: Set Value . value WWWTitle midaswww*WWWDocInfoDocTitleText.WWWTitleExecuteWhenCreated: True midaswww*WWWDocInfoDocTitleText.midasIngots: WWWTitle midaswww*WWWDocInfoHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWDocInfoIndexToggle.IsIndexExecuteWhenCreated: True midaswww*WWWDocInfoIndexToggle.KeywordVisible: set Value . set KeywordVisible midaswww*WWWDocInfoIndexToggle.midasIngots: KeywordVisible midaswww*WWWDocInfoSearch.ShowSource: Set Sensitive . ShowSource midaswww*WWWDocInfoSearch.activateCallback: Popup .^^^WWWDocInfo###WWWSearch midaswww*WWWDocInfoSearch.midasIngots: ShowSource midaswww*WWWDocOpen.autoUnmanage: false midaswww*WWWDocOpen.dialogTitle: Open Document midaswww*WWWDocOpen.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/opendoc.html" midaswww*WWWDocOpenOk.activateCallback: PopDown .^^ \nSet Ingot .^^^XmMainWindow WWWFileRequest GetValue(.^^...WWWDocOpenText,value) midaswww*WWWGhostviewErrors.dialogTitle: Ghostscript Errors midaswww*WWWGhostviewErrors.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/gs_error.html" midaswww*WWWGhostviewErrors.unmapCallback: Set Value ....XmText value "" midaswww*WWWHeader.ShowTitle: If ShowTitle||ShowURL PopUp .\nElse PopDown . midaswww*WWWHeader.ShowTitleExecuteWhenCreated: True midaswww*WWWHeader.ShowURL: If ShowTitle||ShowURL PopUp .\nElse PopDown . midaswww*WWWHeader.ShowURLExecuteWhenCreated: True midaswww*WWWHeader.midasIngots: ShowURL ShowTitle midaswww*WWWHeaderDocumentLabel.ShowURL: If ShowURL PopUp .\nElse PopDown . midaswww*WWWHeaderDocumentLabel.ShowURLExecuteWhenCreated: True midaswww*WWWHeaderDocumentLabel.midasIngots: ShowURL midaswww*WWWHeaderDocumentText.ShowURL: If ShowURL PopUp .\nElse Popdown . midaswww*WWWHeaderDocumentText.ShowURLExecuteWhenCreated: True midaswww*WWWHeaderDocumentText.WWWFile: Set Value . value WWWParent(WWWFile) midaswww*WWWHeaderDocumentText.WWWFileExecuteWhenCreated: True midaswww*WWWHeaderDocumentText.editable: false midaswww*WWWHeaderDocumentText.midasIngots: WWWFile ShowURL midaswww*WWWHeaderTitleLabel.ShowTitle: If ShowTitle Then Popup .\nElse PopDown . midaswww*WWWHeaderTitleLabel.ShowTitleExecuteWhenCreated: True midaswww*WWWHeaderTitleLabel.midasIngots: ShowTitle midaswww*WWWHeaderTitleText.ShowTitle: If ShowTitle PopUp .\nElse PopDown . midaswww*WWWHeaderTitleText.ShowTitleExecuteWhenCreated: True midaswww*WWWHeaderTitleText.WWWTitle: Set Value . value WWWTitle midaswww*WWWHeaderTitleText.WWWTitleExecuteWhenCreated: False midaswww*WWWHeaderTitleText.editable: false midaswww*WWWHeaderTitleText.midasIngots: WWWTitle ShowTitle midaswww*WWWHistory*Search___.midasIngots: midaswww*WWWHistory*WWWHyper*a*activateCallback: WWW Link\nSet Ingot .^^^WWWMain WWWFileTemp Convert(WWWDest(WWWNode(.^^^a)),"WWWFile") midaswww*WWWHistory*WWWHyper*a.createCallback: WWW Anchor . "history:"\nSet Value . sensitive GetValue(.,href)!="" midaswww*WWWHistory*WWWHyper*title.createCallback: midaswww*WWWHistory*WWWHyper*title.mapCallback: midaswww*WWWHistory*WWWHyper.midasIngots: midaswww*WWWHistory*WWWSearch.dialogTitle: Search History midaswww*WWWHistory*WWWSearch.midasIngots: midaswww*WWWHistory.dialogTitle: Visited Documents midaswww*WWWHistory.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/visited_documents_window.html" midaswww*WWWHistory.mapCallback: set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)\nWWW Link\nWWW Get ....WWWHyper "history:" IncludeList "" midaswww*WWWHistory.unmapCallback: WWW Zap ....WWWHyper "history:"\n midaswww*WWWHistoryButton.activateCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "history:" midaswww*WWWHistoryButton.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#history" midaswww*WWWHistoryMenu*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*WWWHistoryMenu.midasCreateCallback: Custom Connect WWW "<history_menu>" .\n midaswww*WWWHistorySW.midasCreateCallback: Create Widget . SGMLHyper WWWHyper midaswww*WWWHistorySW.scrollingPolicy: XMAUTOMATIC midaswww*WWWHistorySW.translations: #override \n:<ConfigureNotify> : SendMidas("set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)") midaswww*WWWHome.activateCallback: Set Ingot .^^^XmMainWindow WWWFileRequest WWW_Home midaswww*WWWHome.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/home.html" midaswww*WWWHotList.activateCallback: Invoke Callback .^^^WWWMain...Hotlist activateCallback midaswww*WWWHotList.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest " http://www-midas.slac.stanford.edu:80/midasv21/hotlist.html" midaswww*WWWHotListDeleteConfirm.dialogTitle: Delete Item? midaswww*WWWHotListDeleteConfirm.helpCallback: PopDown .\nSet Ingot .^^^WWWMain WWWFileNew "http://www-midas.slac.stanford.edu:80/midasv21/hotlist.html" midaswww*WWWHotListDeleteConfirm.mapCallback: Set Ingot . result false midaswww*WWWHotListDeleteConfirm.okCallback: Set Ingot . result true midaswww*WWWHyper*SGMLPlainText.tabs: 8 midaswww*WWWHyper*a*activateCallback: WWW Link WWWNode(.^^^a)\nSet Ingot .^^^WWWMain NewTitle GetValue(.^^^a,"title")\n\ if WWWIsMap(.)!="" Set Ingot .^^^WWWMain WWWFileTemp WWWDest(WWWCreateNodeFromKeyword(WWWFileBase,WWWDest(WWWNode(.^^^a)),WWWIsMap(.),"get"))\nelse Set Ingot .^^^WWWMain WWWFileTemp Convert(WWWDest(WWWNode(.^^^a)),"WWWFile") midaswww*WWWHyper*a*img.outline: true midaswww*WWWHyper*a*img.underlineHeight: 2 midaswww*WWWHyper*a.createCallback: WWW Anchor . WWWFileBase\nSet Value . sensitive GetValue(.,href)!=""\nIf WWWParam(.,"redirect")!="" WWW Redirect WWWFileRequest WWWDest(WWWNode(.)) midaswww*WWWHyper*a.tagList: * SGMLAnchorText: -a midaswww*WWWHyper*address.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*address.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*address.fontSlant: i midaswww*WWWHyper*address.spaceAfter: 10 midaswww*WWWHyper*address.spaceBefore: 10 midaswww*WWWHyper*b.fontWeight: bold midaswww*WWWHyper*base.createCallback: Set Ingot .^^^WWWHyper WWWFileBase WWWParse(WWWParam(.,"href"),WWWFileBase) midaswww*WWWHyper*blockquote.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*blockquote.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*blockquote.leftIndent: 20 midaswww*WWWHyper*blockquote.rightIndent: 20 midaswww*WWWHyper*blockquote.spaceAfter: 10 midaswww*WWWHyper*blockquote.spaceBefore: 10 midaswww*WWWHyper*br.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*cite.fontSlant: i midaswww*WWWHyper*code.fontFamily: courier midaswww*WWWHyper*code.fontSpacing: m midaswww*WWWHyper*dd.position: 0 midaswww*WWWHyper*default.FontRegistry: iso8859 midaswww*WWWHyper*default.color: Black midaswww*WWWHyper*default.exactTerminator: True midaswww*WWWHyper*default.fontSlant: r midaswww*WWWHyper*default.fontSpacing: p midaswww*WWWHyper*default.fontWeight: medium midaswww*WWWHyper*default.hideIllegalTags: True midaswww*WWWHyper*default.leftIndent: 20 midaswww*WWWHyper*default.supportsEntities: True midaswww*WWWHyper*default.tagList: SGMLMarkerText: %tryagain %!-- %img %p %br %isindex %base %nextid %kill %nocache SGMLFormText: form SGMLCompositeText: html body head header address dl dlc dl_compact h1 h2 h3 h4 h5 h6 dir menu pre b\ i tt u em strong code samp kbd var dfn cite blockquote xmp listing plaintext SGMLAnchorText: a SGMLListText: ul ol SGMLText: comment title SGMLRuleText: %hr SGMLTableText: table midaswww*WWWHyper*dfn.fontWeight: bold midaswww*WWWHyper*dir.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dir.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dir.li.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*dir.li.columnAlign: 125 midaswww*WWWHyper*dir.spaceAfter: 6 midaswww*WWWHyper*dir.spaceBefore: 6 midaswww*WWWHyper*dir.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*dl.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl.dd.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl.dt.position: -50 midaswww*WWWHyper*dl.leftIndent: 50 midaswww*WWWHyper*dl.spaceAfter: 6 midaswww*WWWHyper*dl.spaceBefore: 6 midaswww*WWWHyper*dl.tagList: * SGMLMarkerText: +%dt +%dd midaswww*WWWHyper*dl_compact.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl_compact.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl_compact.dt.position: -150 midaswww*WWWHyper*dl_compact.leftIndent: 150 midaswww*WWWHyper*dl_compact.spaceAfter: 6 midaswww*WWWHyper*dl_compact.spaceBefore: 6 midaswww*WWWHyper*dl_compact.tagList: * SGMLMarkerText: +%dt +%dd midaswww*WWWHyper*dlc.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dlc.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dlc.dt.position: -150 midaswww*WWWHyper*dlc.leftIndent: 150 midaswww*WWWHyper*dlc.spaceAfter: 6 midaswww*WWWHyper*dlc.spaceBefore: 6 midaswww*WWWHyper*dlc.tagList: * SGMLMarkerText: +%dt +%dd midaswww*WWWHyper*dt.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dt.spaceBefore: 6 midaswww*WWWHyper*em.fontSlant: i midaswww*WWWHyper*form.tagList: * SGMLInputText: +%input +textarea SGMLCompositeText: +select -form midaswww*WWWHyper*form.activateCallback: Set Ingot . temp WWWCreateNodeFromKeyword(WWWFileBase,WWWParse(GetValue(.,action),WWWFileBase),GetValue(.,result),GetValue(.,method))\nWWW Link temp\nSet Ingot .^^^XmMainWindow WWWFileRequest WWWDest(temp) midaswww*WWWHyper*h1.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h1.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h1.fontWeight: bold midaswww*WWWHyper*h1.leftIndent: -20 midaswww*WWWHyper*h1.spaceAfter: 20 midaswww*WWWHyper*h1.spaceBefore: 40 midaswww*WWWHyper*h1.underlineHeight: 3 midaswww*WWWHyper*h1.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h2.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h2.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h2.fontWeight: bold midaswww*WWWHyper*h2.leftIndent: -20 midaswww*WWWHyper*h2.spaceAfter: 10 midaswww*WWWHyper*h2.spaceBefore: 20 midaswww*WWWHyper*h2.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h3.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h3.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h3.fontWeight: bold midaswww*WWWHyper*h3.spaceAfter: 6 midaswww*WWWHyper*h3.spaceBefore: 12 midaswww*WWWHyper*h3.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h4.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h4.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h4.fontWeight: bold midaswww*WWWHyper*h4.spaceBefore: 8 midaswww*WWWHyper*h4.underline: 1 midaswww*WWWHyper*h4.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h5.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h5.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h5.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h6.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h6.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h6.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*head.tagList: * SGMLCompositeText: -body -head -header midaswww*WWWHyper*header.tagList: * SGMLCompositeText: -body -head -header midaswww*WWWHyper*hidden.color: red midaswww*WWWHyper*hidden.createCallback: Set Value . managed ShowUnrecognizedMarkup midaswww*WWWHyper*hidden.fontWeight: bold midaswww*WWWHyper*hidden.sensitiveColor: red midaswww*WWWHyper*hr.leftIndent: 30 midaswww*WWWHyper*hr.rightIndent: 30 midaswww*WWWHyper*hr.spaceAfter: 12 midaswww*WWWHyper*hr.spaceBefore: 12 midaswww*WWWHyper*i.fontSlant: i midaswww*WWWHyper*image.mapCallback: Set Ingot .^^^WWWMain IsGIF true midaswww*WWWHyper*img.createCallback: if WWWParam(.,"src")!="" WWW Include IncludeList . WWWParse(WWWParam(.,"src"),WWWFileBase) midaswww*WWWHyper*img.pixmap: bomb midaswww*WWWHyper*input.bombPixmap: bomb midaswww*WWWHyper*input.createCallback: if WWWParam(.,"src")!="" WWW Include IncludeList . WWWParse(WWWParam(.,"src"),WWWFileBase) midaswww*WWWHyper*isindex.mapCallback: Set Ingot .^^^XmMainWindow IsIndex True midaswww*WWWHyper*kbd.color: dark green midaswww*WWWHyper*kbd.fontFamily: courier midaswww*WWWHyper*kbd.fontSpacing: m midaswww*WWWHyper*kill.activateCallback: if QueryUser(.^^^XmMainWindow###WWWHotListDeleteConfirm) Destroy .^\nSet Ingot .^^^XmMainWindow HotList WWWSource(.^^^XmMainWindow...WWWHyper)\nStore App Resou\ rce .^^^midaswww hotList HotList midaswww*WWWHyper*kill.outline: true midaswww*WWWHyper*kill.pixmap: kill midaswww*WWWHyper*kill.sensitive: true midaswww*WWWHyper*kill.underlineHeight: 3 midaswww*WWWHyper*li.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*li.spaceBefore: 6 midaswww*WWWHyper*listing.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*listing.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*listing.defaultClass: SGMLPlainText midaswww*WWWHyper*listing.exactTerminator: True midaswww*WWWHyper*listing.fontFamily: courier midaswww*WWWHyper*listing.fontSize: 12 midaswww*WWWHyper*listing.fontSpacing: m midaswww*WWWHyper*listing.hideIllegalTags: False midaswww*WWWHyper*listing.supportsEntities: False midaswww*WWWHyper*listing.tagList: midaswww*WWWHyper*menu.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*menu.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*menu.spaceAfter: 4 midaswww*WWWHyper*menu.spaceBefore: 4 midaswww*WWWHyper*menu.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*nocache.unmapCallback: Destroy .^^^default midaswww*WWWHyper*ol.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*ol.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*ol.bulletMarker: li midaswww*WWWHyper*ol.bulletType: ordered midaswww*WWWHyper*ol.leftIndent: 20 midaswww*WWWHyper*ol.spaceAfter: 6 midaswww*WWWHyper*ol.spaceBefore: 6 midaswww*WWWHyper*select*option.type: option midaswww*WWWHyper*ol.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*p.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*p.spaceBefore: 6 midaswww*WWWHyper*plaintext.defaultClass: SGMLPlainText midaswww*WWWHyper*plaintext.exactTerminator: True midaswww*WWWHyper*plaintext.fontFamily: courier midaswww*WWWHyper*plaintext.fontSpacing: m midaswww*WWWHyper*plaintext.hideIllegalTags: False midaswww*WWWHyper*plaintext.supportsEntities: False midaswww*WWWHyper*plaintext.tagList: midaswww*WWWHyper*pre*h1.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h1.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h1.fontFamlily: courier midaswww*WWWHyper*pre*h2.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h2.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h2.fontFamlily: courier midaswww*WWWHyper*pre*h3.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h3.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h3.fontFamlily: courier midaswww*WWWHyper*pre*h4.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h4.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h4.fontFamlily: courier midaswww*WWWHyper*pre*h5.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h5.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h5.fontFamlily: courier midaswww*WWWHyper*pre*h6.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h6.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h6.fontFamlily: courier midaswww*WWWHyper*pre*p.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*SGMLInputText.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre.FontSpacing: m midaswww*WWWHyper*pre.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*pre.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*pre.defaultClass: SGMLPlainText midaswww*WWWHyper*pre.fontFamily: courier midaswww*WWWHyper*samp.fontFamily: courier midaswww*WWWHyper*samp.fontSpacing: m midaswww*WWWHyper*strong.fontWeight: bold midaswww*WWWHyper*table.tagList: * SGMLMarkerText: +tr +%th +%td SGMLCompositeText: +caption midaswww*WWWHyper*table.spaceBefore: 20 midaswww*WWWHyper*table.spaceAfter: 20 midaswww*WWWHyper*table.caption.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*table.caption.spaceAfter: 10 midaswww*WWWHyper*table.caption.fontWeight: bold midaswww*WWWHyper*table.caption.createCallback: Set Ingot .^ caption . midaswww*WWWHyper*title.mapCallback: Set Ingot .^^^WWWMain NewTitle HyperGetText() midaswww*WWWHyper*textarea.type: textarea midaswww*WWWHyper*select.tagList: SGMLInputText: %option midaswww*WWWHyper*select.defaultClass: SGMLInputText midaswww*WWWHyper*select*SGMLInputText.type: select midaswww*WWWHyper*tryagain.activateCallback: Invoke Callback .^^^WWWMain...Reread_Document activateCallback midaswww*WWWHyper*tryagain.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*tryagain.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*tryagain.outline: true midaswww*WWWHyper*tryagain.pixmap: tryagain midaswww*WWWHyper*tryagain.sensitive: true midaswww*WWWHyper*tryagain.spaceAfter: 20 midaswww*WWWHyper*tryagain.spaceBefore: 20 midaswww*WWWHyper*tryagain.underlineHeight: 2 midaswww*WWWHyper*tt.fontFamily: courier midaswww*WWWHyper*tt.fontSpacing: m midaswww*WWWHyper*u.underline: 1 midaswww*WWWHyper*ul.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*ul.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*ul.bulletMarker: li midaswww*WWWHyper*ul.bulletType: unordered midaswww*WWWHyper*ul.leftIndent: 20 midaswww*WWWHyper*ul.spaceAfter: 6 midaswww*WWWHyper*ul.spaceBefore: 6 midaswww*WWWHyper*ul.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*var.fontFamily: courier midaswww*WWWHyper*var.fontSpacing: m midaswww*WWWHyper*var.fontWeight: bold midaswww*WWWHyper*xmp.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*xmp.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*xmp.defaultClass: SGMLPlainText midaswww*WWWHyper*xmp.exactTerminator: True midaswww*WWWHyper*xmp.fontFamily: courier midaswww*WWWHyper*xmp.fontSpacing: m midaswww*WWWHyper*xmp.hideIllegalTags: False midaswww*WWWHyper*xmp.supportsEntities: False midaswww*WWWHyper*xmp.tagList: midaswww*WWWHyper.WWWFileRequest: Set Cursor .^^^midaswww watch\nSet Cursor . ""\nSet Ingot .^^^XmMainWindow IsIndex False\nSet Ingot .^^^XmMainWindow IsGIF False\nSet Ingot . WWWFileBase WWWFileRequest\n\ WWW Get . WWWFileRequest IncludeList NewTitle\nSet Ingot .^^^XmMainWindow WWWFile WWWRedirect(WWWFileRequest) midaswww*WWWHyper.WWWFile: If NewTitle=="" Set Ingot .^^^WWWMain NewTitle "Untitled ("++WWWParent(WWWFile)++")"\nWWW Set Title WWWFile NewTitle\nWWW Add History HistoryList NewTitle\nif IsIndex!=KeywordVisible Set Ingot .^^^XmMain\ Window KeywordVisible IsIndex\nif IsPS!=PSState Set Ingot .^^^XmMainWindow PSState IsPS\nif IsPS!=0 Set Ingot .^^^XmMainWindow DocFormat "Postscript"\nelse if IsGIF Set Ingot .^^^XmMainWindow DocForma\ t "GIF Image"\nelse Set Ingot .^^^XmMainWindow DocFormat "HTML"\nSet Ingot .^^^XmMainWindow WWWTitle NewTitle\nSet Ingot .^^^WWWMain NewTitle ""\nSet Cursor .^^^midaswww "" midaswww*WWWHyper.WWWFileExecuteWhenCreated: False midaswww*WWWHyper.WWWFileRequestExecuteWhenCreated: False midaswww*WWWHyper.borderWidth: 0 midaswww*WWWHyper.cacheSize: 10 midaswww*WWWHyper.midasIngots: WWWFileRequest WWWFileBase WWWFile midaswww*WWWKey.translations: #override \n Shift <Btn1Down> : SendMidas("Custom Popup WWW") midaswww*WWWMail.dialogTitle: WWW Mail midaswww*WWWMail.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/mail_window.html" midaswww*WWWMail.mapCallback: Set Sensitive ....WWWMailOk GetValue(....WWWMailToText,value)!="" midaswww*WWWMailDismiss.activateCallback: PopDown .^^ midaswww*WWWMailFormatMenu.midasCreateCallback: Custom Connect WWW "<format>" . midaswww*WWWMailHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWMailOk.activateCallback: Set Ingot . Tempfile WWWTempFile()\nIf Format=="Postscript" Set Ingot .^^^WWWMail FileSpec GetValue(IsPS,file)\nIf Format=="HTML" WWW Dump .^^^XmMainWindow...WWWHy\ per Tempfile\nIf Format=="HTML" Set Ingot .^^^WWWMail FileSpec Tempfile\nif uname()=="VMS" system "MAIL/NOEDIT %FileSpec %GetValue(.^^^WWWMail...WWWMailToText,value)"\nelse system "mail %GetValue(.^^^\ WWWMail...WWWMailToText,value) < %FileSpec"\nIf Format=="HTML" system "%delete %Tempfile "\nPopDown .^^ midaswww*WWWMailToText.valueChangedCallback: Invoke Callback .^^^WWWMail mapCallback midaswww*WWWMain.ConfirmPrint: midaswww*WWWMain.ConfirmPrintExecuteWhenCreated: True midaswww*WWWMain.FontSize: If FontSize=="Small" For All ....WWWHyper...default Set Value . fontSize 12\nElse If FontSize=="Medium" For All ....WWWHyper...default Set Value . fontSize 14\nElse If FontS\ ize=="Large" For All ....WWWHyper...default Set Value . fontSize 17\nIf FontSize=="Small" For All ....WWWHyper...h2 Set Value . fontSize 14\nElse If FontSize=="Medium" For All ....WWWHyper...h2 Set Va\ lue . fontSize 17\nElse If FontSize=="Large" For All ....WWWHyper...h2 Set Value . fontSize 20\nIf FontSize=="Small" For All ....WWWHyper...h1 Set Value . fontSize 17\nElse If FontSize=="Medium" For A\ ll ....WWWHyper...h1 Set Value . fontSize 20\nElse If FontSize=="Large" For All ....WWWHyper...h1 Set Value . fontSize 24\nIf FontSize=="Small" Update Named Resource . "midaswww*WWWHyper*default.fontS\ ize" 12\nElse If FontSize=="Medium" Update Named Resource . "midaswww*WWWHyper*default.fontSize" 14\nElse If FontSize=="Large" Update Named Resource . "midaswww*WWWHyper*default.fontSize" 17\nIf FontS\ ize=="Small" Update Named Resource . "midaswww*WWWHyper*h2.fontSize" 14\nElse If FontSize=="Medium" Update Named Resource . "midaswww*WWWHyper*h2.fontSize" 17\nElse If FontSize=="Large" Update Named R\ esource . "midaswww*WWWHyper*h2.fontSize" 20\nIf FontSize=="Small" Update Named Resource . "midaswww*WWWHyper*h1.fontSize" 17\nElse If FontSize=="Medium" Update Named Resource . "midaswww*WWWHyper*h1.\ fontSize" 20\nElse If FontSize=="Large" Update Named Resource . "midaswww*WWWHyper*h1.fontSize" 24\n midaswww*WWWMain.FontSizeExecuteWhenCreated: False midaswww*WWWMain.HeadingFont: For All ....WWWHyper...h1 Set Value . fontFamily HeadingFont \nFor All ....WWWHyper...h2 Set Value . fontFamily HeadingFont\nFor All ....WWWHyper...h3 Set Value . fontFam\ ily HeadingFont \nFor All ....WWWHyper...h4 Set Value . fontFamily HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h1.fontFamily" HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h2.fon\ tFamily" HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h3.fontFamily" HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h4.fontFamily" HeadingFont midaswww*WWWMain.HeadingFontExecuteWhenCreated: False midaswww*WWWMain.IsIndexExecuteWhenCreated: True midaswww*WWWMain.PrintCommandHTML: midaswww*WWWMain.PrintCommandHTMLExecuteWhenCreated: True midaswww*WWWMain.PrintCommandPS: midaswww*WWWMain.PrintCommandPSExecuteWhenCreated: True midaswww*WWWMain.ShowUnrecognizedMarkupExecuteWhenCreated: False midaswww*WWWMain.TextFont: For All ....WWWHyper...default Set Value . fontFamily TextFont\nUpdate Named Resource . "midaswww*WWWHyper*default.fontFamily" TextFont midaswww*WWWMain.TextFontExecuteWhenCreated: False midaswww*WWWMain.UnderlineHeadings: If UnderlineHeadings For All ....WWWHyper...h1 Set Value . underline 2\nElse For All ....WWWHyper...h1 Set Value . underline 0\nIf UnderlineHeadings For All ....WWW\ Hyper...h2 Set Value . underline 1\nElse For All ....WWWHyper...h2 Set Value . underline 0\nIf UnderlineHeadings For All ....WWWHyper...h3 Set Value . underline 1\nElse For All ....WWWHyper...h3 Set V\ alue . underline 0\nIf UnderlineHeadings Update Named Resource . "midaswww*WWWHyper*h1.underline" 2\nElse Update Named Resource . "midaswww*WWWHyper*h1.underline" 0\nIf UnderlineHeadings Update Named \ Resource . "midaswww*WWWHyper*h2.underline" 1\nElse Update Named Resource . "midaswww*WWWHyper*h2.underline" 0\nIf UnderlineHeadings Update Named Resource . "midaswww*WWWHyper*h3.underline" 1\nElse Up\ date Named Resource . "midaswww*WWWHyper*h3.underline" 0 midaswww*WWWMain.UnderlineHeadingsExecuteWhenCreated: False midaswww*WWWMain.WWWFileExecuteWhenCreated: False midaswww*WWWMain.WWWFileNew: Set Cursor .^^^midaswww watch\nSet Cursor ....WWWHyper ""\nUpdate Named Resource . midaswww.iconic false\nCreate Shell midaswww\nSet Value midaswww x GetValue(.^^^midaswww\ ,x)+40\nSet Value midaswww y GetValue(.^^^midaswww,y)+40\nFetch WWWMain:parent=midaswww\nPopup WWWMain\nSet value WWWMain...WWWHyper naturalWidth 0++(GetValue(WWWMain,width)-40)\nSet Ingot WWWMain PSS\ tate 0\nDispatch Queued Commands\nSet Ingot WWWMain WWWFileRequest WWWFileNew\nSet Cursor .^^^midaswww ""\nWWW Register midaswww False midaswww*WWWMain.WWWFileNewExecuteWhenCreated: False midaswww*WWWMain.WWWFileTemp: if Modifier("shift") Set Ingot . WWWFileNew WWWFileTemp\nelse Set Ingot . WWWFileRequest WWWFileTemp midaswww*WWWMain.WWWFileTempExecuteWhenCreated: False midaswww*WWWMain.WWWTitle: Set Value .^ title WWWTitle midaswww*WWWMain.WWWTitleExecuteWhenCreated: False midaswww*WWWMain.WWW_Gateway: WWW Set Gateway WWW_Gateway midaswww*WWWMain.WWW_GatewayExecuteWhenCreated: False midaswww*WWWMain.WWW_Home: midaswww*WWWMain.WWW_HomeExecuteWhenCreated: True midaswww*WWWMain.helpCallback: Set Ingot . WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/overview.html" midaswww*WWWMain.mainWindowMarginWidth: 2 midaswww*WWWMain.midasCreateCallback: Set Value .^ iconPixmap MidasWWWIcon\nCustom Create WWW .\nFetch WWWSearch .\nCreate Widget . SGMLHyper WWWHyper\nSet Ingot . IncludeList CreateList("IncludeList"\ )\nSet Ingot . HistoryList CreateList(HistoryList)\nSet Ingot . IsPS 0\nSet Ingot .^ Popup Convert(0,"Int")\nif argc>1 Set ingot . WWW_Home argv[1]\nelse if getenv(WWW_HOME)!="" Set ingot . WWW_Home g\ etenv(WWW_HOME)\nelse Set ingot . WWW_Home GetAppResource(.^,home)\nSet Confirm Exit . GetAppResource(.^,confirmExit)\nSet ingot . ShowTitle GetAppResource(.^,"ShowTitle")\nSet ingot . ShowURL GetAppR\ esource(.^,"ShowURL")\nSet ingot . WWW_Gateway GetAppResource(.^,gateway)\nSet ingot . HotList GetAppResource(.^,hotList)\nSet ingot . PrintCommandHTML GetAppResource(.^,printCommandHTML)\nSet ingot .\ PrintCommandPS GetAppResource(.^,printCommandPS)\nSet ingot . ConfirmPrint GetAppResource(.^,confirmPrint)\nSet ingot . ShowUnrecognizedMarkup GetAppResource(.^,"ShowUnrecognizedMarkup")\nSet Ingot .\ FontSize GetAppResource(.^,"fontSize")\nSet Ingot . HeadingFont GetAppResource(.^,"headingFont")\nSet Ingot . TextFont GetAppResource(.^,"textFont")\nSet Ingot . UnderlineHeadings GetAppResource(.^,"\ underlineHeadings")\nif uname()=="VMS" Set Ingot . delete "delete/noconfirm"\nelse Set Ingot . delete "rm -f"\nif uname()=="VMS" Set Ingot . copy "copy"\nelse Set Ingot . copy "cp" midaswww*WWWMain.midasIngots: WWWFile WWWFileNew WWWFileTemp WWWFileRequest IsIndex IsPS IsGIF KeywordVisible PSState WWWTitle WWW_Home WWW_Gateway DocFormat ShowUnrecognizedMarkup ShowTitle ShowURL PrintCommandPS F\ ontSize HeadingFont TextFont UnderlineHeadings midaswww*WWWMain.scrollingPolicy: XMAUTOMATIC midaswww*WWWMain.translations: #override \n:<ConfigureNotify> : SendMidas("set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)") midaswww*WWWMenu*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*WWWMenu*XmToggleButtonGadget.visibleWhenOff: True midaswww*WWWMenu.midasCreateCallback: Custom Connect WWW "<main_menu>" . midaswww*WWWOpenFTP.dialogTitle: Open FTP Document midaswww*WWWOpenFTP.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/open_ftp_doc.html" midaswww*WWWOpenFTPApply.activateCallback: Set Ingot .^^^WWWMain WWWFileRequest "ftp://"++GetValue(.^^...WWWOpenFTPHost,value)++":"++GetValue(.^^...WWWOpenFTPPort,value)++GetValue(.^^...WWWOpenFTPPath,value) midaswww*WWWOpenFTPDismiss.activateCallback: PopDown .^^ midaswww*WWWOpenFTPHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWOpenFTPHost.value: info.cern.ch midaswww*WWWOpenFTPOk.activateCallback: Popdown .^^\nInvoke Callback .^.WWWOpenFTPApply activateCallback midaswww*WWWOpenFTPPassword.value: %u@%h midaswww*WWWOpenFTPPath.value: / midaswww*WWWOpenFTPPort.value: 21 midaswww*WWWOpenFTPUserid.value: anonymous midaswww*WWWOpenGopher.dialogTitle: Open Gopher Document midaswww*WWWOpenGopher.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest Temp "http://www-midas.slac.stanford.edu:80/midasv21/open_gopher_doc.html" midaswww*WWWOpenGopherApply.activateCallback: Set Ingot .^^^WWWMain WWWFileRequest "gopher://"++GetValue(.^^...WWWOpenGopherHost,value)++":"++GetValue(.^^...WWWOpenGopherPort,value)++"/"++GetValue(.^^...WWWO\ penGopherType,value)++GetValue(.^^...WWWOpenGopherPath,value) midaswww*WWWOpenGopherDismiss.activateCallback: PopDown .^^ midaswww*WWWOpenGopherHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWOpenGopherHost.value: gopher.micro.umn.edu midaswww*WWWOpenGopherName.value: Home of Gopher midaswww*WWWOpenGopherOk.activateCallback: PopDown .^^\nInvoke Callback .^.WWWOpenGopherApply activateCallback midaswww*WWWOpenGopherPath.value: / midaswww*WWWOpenGopherPort.value: 70 midaswww*WWWOpenGopherType.value: 1 midaswww*WWWOpenHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWOpenLocal.applyCallback: midaswww*WWWOpenLocal.cancelCallback: Popdown . midaswww*WWWOpenLocal.dialogTitle: Open Local Document midaswww*WWWOpenLocal.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/open_local_doc.html" midaswww*WWWOpenLocal.okCallback: PopDown . \nSet Ingot .^^^WWWMain WWWFileRequest "local:"++GetValue(.,dirSpec) midaswww*WWWOptionShowProgress.valueChangedCallback: Set Sensitive .^.WWWOptionShowProgressTime GetValue(.,set)\nSet Sensitive .^.WWWShowProgressUpdateTime GetValue(.,set)\nSet Sensitive .^^^WWWParame\ ters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave False midaswww*WWWOptionShowProgressTime.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...W\ WWParamSave False\n midaswww*WWWPS.PSState: Set Sensitive . PSState!=0 midaswww*WWWPS.PSStateExecuteWhenCreated: False midaswww*WWWPS.midasIngots: PSState midaswww*WWWParamApply.activateCallback: If GetValue(.^^^...WWWParamCacheEnable,set) Set Value .^^^XmMainWindow...WWWHyper cacheSize GetValue(.^^^...WWWParamCacheSize,value)\nElse Set Value .^^^XmMain\ Window...WWWHyper cacheSize 0\nSet Ingot .^^^XmMainWindow WWW_Home GetValue(.^^^...WWWParamHome,value)\nSet Ingot .^^^XmMainWindow WWW_Gateway GetValue(.^^^...WWWParamGate,value)\nSet Confirm Exit . G\ etValue( .^^^...ConfirmExit,set)\nif GetValue(.^^^...WWWOptionShowProgress,set) WWW Set Waiting Time GetValue(.^^^...WWWOptionShowProgressTime,value)*100\nelse WWW Set Waiting Time -1\nif GetValue(.^^\ ^...EnableHTTP2,set) WWW Set HTTP Level 1.0\nelse WWW Set HTTP Level 0.9\nWWW Set Update Time GetValue(.^^^...WWWShowProgressUpdateTime,value)*100\nInvoke Callback .^^^^WWWParameters mapCallback midaswww*WWWParamApply.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Apply" midaswww*WWWParamCache.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Caching" midaswww*WWWParamCacheEnable.valueChangedCallback: Set Sensitive .^.WWWParamCacheSize GetValue(.,set)\nSet Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamR\ eset True\nSet Sensitive .^^^WWWParameters...WWWParamSave False midaswww*WWWParamCacheSize.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamS\ ave False midaswww*WWWParamDismiss.activateCallback: PopDown .^^^WWWParameters midaswww*WWWParamDismiss.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Dismiss" midaswww*WWWParamGate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Gateway" midaswww*WWWParamGate.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave F\ alse midaswww*WWWParamHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWParamHome.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Home" midaswww*WWWParamHome.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave F\ alse midaswww*WWWParamOk.activateCallback: If GetValue(.^.WWWParamApply,sensitive) Invoke Callback .^.WWWParamApply activateCallback\nPopDown .^^^WWWParameters midaswww*WWWParamOk.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Ok" midaswww*WWWParamReset.activateCallback: Invoke Callback .^^^WWWParameters mapCallback midaswww*WWWParamReset.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Reset" midaswww*WWWParamSave.activateCallback: Store App Resource .^^^midaswww confirmExit GetConfirmExit(.)\nStore App Resource .^^^midaswww home WWW_Home\nStore App Resource .^^^midaswww gateway WWW_Gatewa\ y\nStore App Resource .^^^midaswww waitingTimeOut WWWWaitingTime()\nStore App Resource .^^^midaswww updateTimeOut WWWUpdateTime()\nStore App Resource .^^^midaswww defaultHTTPProtocol WWWHTTPLevel()\nS\ tore Resource .^^^XmMainWindow...WWWHyper cacheSize midaswww*WWWParamSave.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Save" midaswww*WWWParameters.dialogTitle: WWW Options midaswww*WWWParameters.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html" midaswww*WWWParameters.mapCallback: Set Value ....WWWParamHome value WWW_Home\nSet Value ....WWWParamGate value WWW_Gateway\nSet Ingot . N GetValue(.^^^XmMainWindow...WWWHyper,cacheSize)\nif N>0 Set V\ alue ....WWWParamCacheSize value N\nelse Set Value ....WWWParamCacheSize value 2\nSet Value ....WWWParamCacheEnable set N>0\nSet Value ....ConfirmExit set GetConfirmExit(.)\nSet Value ....WWWOptionSho\ wProgress set WWWWaitingTime()>=0\nif WWWWaitingTime()>=0 Set Value ....WWWOptionShowProgressTime value WWWWaitingTime()/100\nSet Value ....WWWShowProgressUpdateTime value WWWUpdateTime()/100\nSet Val\ ue ....EnableHTTP2 set WWWHTTPLevel()=="1.0"\nSet Sensitive ....WWWOptionShowProgressTime WWWWaitingTime()>=0\nSet Sensitive ....WWWShowProgressUpdateTime WWWWaitingTime()>=0\nSet Sensitive ....WWWPar\ amCacheSize N>0\nSet Sensitive ....WWWParamApply False\nSet Sensitive ....WWWParamReset False\nSet Sensitive ....WWWParamSave True midaswww*WWWPrint.dialogTitle: WWW Print ... midaswww*WWWPrint.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/print_window.html" midaswww*WWWPrintCancel.activateCallback: PopDown .^^ midaswww*WWWPrintConfirm.dialogTitle: WWW Print Confirm midaswww*WWWPrintConfirm.midasCreateCallback: PopDown ..Cancel midaswww*WWWPrintFormatMenu.midasCreateCallback: Custom Connect WWW "<format>" . midaswww*WWWPrintHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWPrintOk.activateCallback: If Format=="Postscript" Set Ingot . Tempfile GetValue(IsPS,file)\nIf Format=="HTML" Set Ingot . Tempfile WWWTempFile()\nIf Format=="HTML" WWW Dump .^^^XmMainWindo\ w...WWWHyper Tempfile\nSet Ingot . PrintCommand GetValue(.^^^...WWWPrintCommandText,value)\nsystem PrintCommand++" "++Tempfile\nIf Format=="HTML" system "%delete %Tempfile"\nIf ConfirmPrint Set Value \ .^^^XmMainWindow###WWWPrintConfirm messageString "Document '"++WWWTitle++"' printed (Command: "++PrintCommand++")"\nIf ConfirmPrint Popup .^^^XmMainWindow...WWWPrintConfirm\nPopDown .^^ midaswww*WWWPrintOptions.dialogTitle: Print Options midaswww*WWWPrintOptions.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/print_options.html" midaswww*WWWPrintOptions.mapCallback: Set Value ....WWWPrintOptionsHTMLText value PrintCommandHTML\nSet Value ....WWWPrintOptionsPostscriptText value PrintCommandPS\nSet Value ....WWWPrintOptionsCon\ firm set ConfirmPrint\nSet Sensitive ....WWWPrintOptionsReset False\nSet Sensitive ....WWWPrintOptionsApply False midaswww*WWWPrintOptionsApply.activateCallback: Set Ingot .^^^XmMainWindow PrintCommandHTML GetValue(.^^^...WWWPrintOptionsHTMLText,value)\nSet Ingot .^^^XmMainWindow PrintCommandPS GetValue(.^^^...\ WWWPrintOptionsPostscriptText,value)\nSet Ingot .^^^XmMainWindow ConfirmPrint GetValue(.^^^...WWWPrintOptionsConfirm,set)\nStore App Resource .^^^midaswww "confirmPrint" ConfirmPrint\nStore App Resour\ ce .^^^midaswww "printCommandHTML" PrintCommandHTML\nStore App Resource .^^^midaswww "printCommandPS" PrintCommandPS\nSet Sensitive .^^^...WWWPrintOptionsApply False\nSet Sensitive .^^^...WWWPrintOpti\ onsReset False\n midaswww*WWWPrintOptionsCancel.activateCallback: PopDown .^^ midaswww*WWWPrintOptionsConfirm.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\nSet Sensitive .^^^...WWWPrintOptionsReset True midaswww*WWWPrintOptionsHTMLText.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\nSet Sensitive .^^^...WWWPrintOptionsReset True\n midaswww*WWWPrintOptionsHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWPrintOptionsOk.activateCallback: Invoke Callback .^.WWWPrintOptionsApply activateCallback\nInvoke Callback .^.WWWPrintOptionsCancel activateCallback midaswww*WWWPrintOptionsPostscriptText.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\nSet Sensitive .^^^...WWWPrintOptionsReset True\n midaswww*WWWPrintOptionsReset.activateCallback: Invoke Callback .^^^WWWPrintOptions mapCallback midaswww*WWWPrint_popup.Format: If Format=="Postscript" Set Value ....WWWPrintCommandText value PrintCommandPS\nIf Format=="HTML" Set Value ....WWWPrintCommandText value PrintCommandHTML midaswww*WWWPrint_popup.FormatExecuteWhenCreated: True midaswww*WWWPrint_popup.PrintCommandHTML: If Format=="HTML" Set Value ....WWWPrintCommandText value PrintCommandHTML midaswww*WWWPrint_popup.PrintCommandHTMLExecuteWhenCreated: False midaswww*WWWPrint_popup.PrintCommandPS: If Format=="Postscript" Set Value ....WWWPrintCommandText value PrintCommandPS midaswww*WWWPrint_popup.PrintCommandPSExecuteWhenCreated: False midaswww*WWWPrint_popup.midasIngots: Format PrintCommandHTML midaswww*WWWSave.DocFormat: midaswww*WWWSave.DocFormatExecuteWhenCreated: True midaswww*WWWSave.SaveAs: midaswww*WWWSave.SaveAsExecuteWhenCreated: True midaswww*WWWSave.activateCallback: If IsPs!=0 System "%copy %GetValue(IsPS,file) %GetValue(.^...XmTextField,value)"\nElse WWW Dump .^^^XmMainWindow...WWWHyper GetValue(.^...XmTextField,value)\nPopDown\ .^ midaswww*WWWSave.cancelCallback: Popdown . midaswww*WWWSave.dialogTitle: Save Document midaswww*WWWSave.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/save.html" midaswww*WWWSave.midasIngots: DocFormat SaveAs midaswww*WWWSave.okCallback: Set Ingot . SaveAs GetValue(.,dirSpec)\nIf Format=="Postscript" Set Ingot . PSFile GetValue(IsPS,file) \nIf Format=="HTML" WWW Dump .^^^XmMainWindow...WWWHyper SaveAs\nEls\ e If Format=="Postscript" System "%copy %PSFile %SaveAs"\nPopDown . midaswww*WWWSave.selectionLabelString: Save As midaswww*WWWSaveFileAs.cancelCallback: PopDown . midaswww*WWWSaveFileAs.dialogTitle: Save File As... midaswww*WWWSaveFileAs.mapCallback: Set Ingot . result ""\nSet Value ....WWWSaveFileAsText value WWWParent(WWWFile)\nSet Value . dirSpec GetValue(.,directory)++file midaswww*WWWSaveFileAs.okCallback: Set Ingot . result GetValue(.,"dirSpec")\nPopDown . midaswww*WWWSaveFileAs.selectionLabelString: Save As midaswww*WWWSaveFileAsText.editable: false midaswww*WWWSaveFormatMenu.midasCreateCallback: Custom Connect WWW "<format>" . midaswww*WWWSaveHelp.activateCallback: Invoke Callback .^ helpCallback midaswww*WWWSearch.DocFormat: If DocFormat!="HTML" PopDown . midaswww*WWWSearch.dialogTitle: Search Document midaswww*WWWSearch.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/search_window.html" midaswww*WWWSearch.midasIngots: DocFormat midaswww*WWWSearchCancel.activateCallback: Popdown .^^WWWSearch midaswww*WWWSearchFind.activateCallback: WWW Search .^^^...SGMLHyper GetValue(.^^WWWSearch...WWWSearchText,value) GetValue(.^^WWWSearch...WWWSearchCaseSensitive,set) GetValue(.^^WWWSearch...WWWSearchC\ ontinue,set) midaswww*WWWSearchHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWShowProgressUpdateTime.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...W\ WWParamSave False\n midaswww*WWWSource*default.color: Black midaswww*WWWSource*default.defaultClass: SGMLPlainText midaswww*WWWSource*default.fontFamily: courier midaswww*WWWSource*default.fontSpacing: m midaswww*WWWSource.BorderWidth: 0 midaswww*WWWSource.WWWFile: If ShowSource WWW Put . WWWSource(.^^^XmMainWindow...WWWHyper) midaswww*WWWSource.WWWFileExecuteWhenCreated: False midaswww*WWWSource.midasIngots: WWWFile midaswww*WWWTruncate.dialogTitle: Truncated... midaswww*WWWTruncate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/truncate.html" midaswww*WWWWDocInfoDocNameText.WWWFile: Set Value . value WWWParent(WWWFile) midaswww*WWWWDocInfoDocNameText.WWWFileExecuteWhenCreated: True midaswww*WWWWDocInfoDocNameText.midasIngots: WWWFile midaswww*WWWWaiting.dialogStyle: XmDIALOG_MODELESS midaswww*WWWWaiting.dialogTitle: Waiting... midaswww*WWWWaiting_popup.overrideRedirect: true midaswww*XmCascaseButtonGadget: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*XmDialogShell*Postscript.DocFormat: Set Sensitive . DocFormat=="Postscript"\nIf DocFormat=="Postscript" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\nIf DocFormat=="Postscript" Invoke\ Callback . activateCallback midaswww*XmMenuShell*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*XmRowColumn.Text.DocFormat: Set Sensitive . DocFormat=="Text"\nIf DocFormat=="Text" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\nIf DocFormat=="Text" Invoke Callback . activateCallba\ ck midaswww*XmRowColumn.Text.DocFormatExecuteWhenCreated: True midaswww*XmRowColumn.Text.midasIngots: DocFormat midaswww*XmScrollBar.foreground: #d3d3d3d3d3d3 XXmidaswww*XmText.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1 XXmidaswww*XmTextField.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1 midaswww*confirmPrint: False midaswww*gv_manager.container.mapCallback: Set Ingot .^^^XmMainWindow IsPS GetValueRaw(.,child) midaswww*gv_manager.container.unmapCallback: Set Ingot .^^^XmMainWindow IsPS 0 midaswww*gv_manager.managementPolicy: ManageOne midaswww*printCommandHTML: lpr midaswww*printCommandPS: lpr midaswww*pulldownmenu*fontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*rc2.orientation: XmHORIZONTAL midaswww.ShowTitle: true midaswww.ShowURL: true midaswww.ShowUnrecognizedMarkup: false midaswww.WWWMain*XmRowColumn.Help.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Help" midaswww.confirmExit: True midaswww.confirmPrint: true midaswww.defaultHTTPProtocol: 1.0 midaswww.filetype_$http_destination: html midaswww.filetype_Z_binary: true midaswww.filetype_Z_command: uncompress -c midaswww.filetype_Z_filter: true midaswww.filetype_au_destination: file midaswww.filetype_au_icon: music midaswww.filetype_basic_destination: file midaswww.filetype_basic_icon: music midaswww.filetype_binary_destination: xbm midaswww.filetype_eps_destination: ps midaswww.filetype_eps_icon: ps midaswww.filetype_exe_binary: true midaswww.filetype_exe_destination: file midaswww.filetype_exe_icon: floppy midaswww.filetype_gif_binary: true midaswww.filetype_gif_destination: gif midaswww.filetype_gif_icon: graphics midaswww.filetype_gz_binary: true midaswww.filetype_gz_command: gzip -dc midaswww.filetype_gz_filter: true midaswww.filetype_html_destination: html midaswww.filetype_html_icon: web midaswww.filetype_jpeg_binary: true midaswww.filetype_jpeg_command: djpeg -colors 256 -gif midaswww.filetype_jpeg_destination: gif midaswww.filetype_jpeg_icon: graphics midaswww.filetype_jpg_binary: true midaswww.filetype_jpg_command: djpeg -colors 256 -gif midaswww.filetype_jpg_destination: gif midaswww.filetype_jpg_icon: graphics midaswww.filetype_mpeg_binary: true midaswww.filetype_mpeg_command: mpeg_play -quiet midaswww.filetype_mpeg_destination: multimedia midaswww.filetype_mpeg_icon: movie_icon midaswww.filetype_mpeg_shellflag: false midaswww.filetype_mpeg_tempfile: true midaswww.filetype_mpg_binary: true midaswww.filetype_mpg_command: mpeg_play -quiet midaswww.filetype_mpg_destination: multimedia midaswww.filetype_mpg_icon: movie_icon midaswww.filetype_mpg_shellflag: false midaswww.filetype_mpg_tempfile: true midaswww.filetype_plain_destination: text midaswww.filetype_pnm_binary: true midaswww.filetype_pnm_command: ppmquant 256 | ppmtogif midaswww.filetype_pnm_destination: gif midaswww.filetype_pnm_icon: graphics midaswww.filetype_postscript_destination: ps midaswww.filetype_postscript_icon: ps midaswww.filetype_ppm_binary: true midaswww.filetype_ppm_command: ppmquant 256 | ppmtogif midaswww.filetype_ppm_destination: gif midaswww.filetype_ppm_icon: graphics midaswww.filetype_ps_destination: ps midaswww.filetype_ps_icon: ps midaswww.filetype_shar_binary: true midaswww.filetype_shar_destination: file midaswww.filetype_shar_icon: floppy midaswww.filetype_tar_binary: true midaswww.filetype_tar_destination: file midaswww.filetype_tar_icon: floppy midaswww.filetype_tiff_binary: true midaswww.filetype_tiff_command: tifftopnm | ppmtogif midaswww.filetype_tiff_destination: gif midaswww.filetype_tiff_icon: graphics midaswww.filetype_tiff_tempfile: true midaswww.filetype_txt_destination: text midaswww.filetype_x-compress_binary: true midaswww.filetype_x-compress_command: uncompress -c midaswww.filetype_x-compress_filter: true midaswww.filetype_x-tiff_binary: true midaswww.filetype_x-tiff_command: tifftopnm | ppmtogif midaswww.filetype_x-tiff_destination: gif midaswww.filetype_x-tiff_icon: graphics midaswww.filetype_x-tiff_tempfile: true midaswww.filetype_x-xbitmap_destination: xbm midaswww.filetype_x-xbitmap_icon: floppy midaswww.filetype_x-zip_binary: true midaswww.filetype_x-zip_command: gzip -dc midaswww.filetype_x-zip_filter: true midaswww.filetype_x-zip_icon: floppy midaswww.filetype_xbm_destination: xbm midaswww.filetype_xbm_icon: floppy midaswww.filetype_z_binary: true midaswww.filetype_z_command: gzip -dc midaswww.filetype_z_filter: true midaswww.filetypes: ps eps Z z gz gif jpeg jpg html ppm pnm tiff exe tar $http xbm au txt mpeg mpg basic plain x-xbitmap x-tiff postscript binary shar x-compress x-zip midaswww.font: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1 midaswww.fontSize: Large midaswww.gateway: http://htmlgate.slac.stanford.edu:2784 midaswww.geometry: 700x800 midaswww.headingFont: helvetica midaswww.headingsFont: Helvetica midaswww.home: http://slacvm.slac.stanford.edu:80/FIND/slac.html midaswww.hotList: <title>HotList</title><nocache><h1><img pixmap=flame>HotList</h1>\nClick on the <img pixmap=kill> icon to remove an item from the list, or\n<a href=http://www-midas.slac.stanford.edu:80\ /midasv21/hotlist.html>here</a> for more help.\n<h6><kill><a href=news:comp.infosystems.www>Comp.Infosystems.WWW</a></h6><h6><kill><a href = http://info.cern.ch/hypertext/WWW/TheProject.html > The Wor\ ld Wide Web project </a></h6>\n<h6><kill><a href = http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html > What's New With NCSA Mosaic </a></h6><h6><kill><a href = http://sunsite.unc.edu/ex\ po/ticket_office.html > EXPO Ticket Office </a></h6><h6><kill><a href = http://aka.dcrt.nih.gov > Rob's Multimedia Lab </a></h6><h6><kill><a href = http://www.ncsa.uiuc.edu/demoweb/url-primer.html > A\ Beginner's Guide to URLs </a></h6><h6><kill><a href = http://www.ncsa.uiuc.edu/demoweb/html-primer.html > A Beginner's Guide to HTML </a></h6><h6><kill><a href = http://www-midas.slac.stanford.edu/tonyw\ ww/talk/talk.html > World-Wide Web: An Illustrated Seminar </a></h6><h6><kill><a href = http://pulua.hcc.hawaii.edu/guide/www.guide.html > Entering the World-Wide Web: A Guide to Cyberspace </a></h6> midaswww.mimeencode: x-compress x-zip midaswww.mimetypes: text/plain text/html image/gif image/jpeg image/x-xbitmap image/x-tiff video/mpeg audio/basic application/postscript archive/tar archive/shar application/binary midaswww.printCommandHTML: lpr midaswww.printCommandPS: lpr midaswww.sensitiveColor: blue midaswww.sensitiveFontWeight: bold midaswww.startup: Open Uid midaswww.uid .\nPopup WWWMain\nWWW Init .\nSet value ....WWWHyper naturalWidth 0++(GetValue(..WWWMain,width)-40)\nSet Ingot ..WWWMain PSState 0\nDispatch Queued Commands\nIn\ voke Callback ....Home_Page activateCallback\nSet Ingot Midas_Main NWin 1\nWWW Register . False midaswww.textFont: new century schoolbook midaswww.translations: #override \n <PropertyNotify> URL : SendMidas("Popup ..XmMainWindow ; Set Ingot ..XmMainWindow WWWFileTemp GetProperty(.,URL)") midaswww.underlineHeadings: true midaswww.updateTimeOut: 200 midaswww.version: 2.1 midaswww.visitedColor: #59597171EAEA midaswww.visitedFontWeight: medium midaswww.waitingTimeOut: 2000 ! ! Color preferences ! midaswww*Background: #d3d3d3d3d3d3 midaswww*Foreground: #000000000000 midaswww*SelectColor: #ffffffff0000 midaswww*HighlightColor: orange midaswww*TopShadowColor: #ffffffffffff midaswww*BottomShadowColor: #a1a1a1a1a1a1 midaswww*WWWMenu*Background: #8d8dd1d1d2d2 midaswww*WWWMenu*TopShadowColor: #d6d6efefefef midaswww*WWWMenu*BottomShadowColor: #4646b1b1b3b3 midaswww*WWWHistoryMenu*Background: #8d8dd1d1d2d2 midaswww*WWWHistoryMenu*TopShadowColor: #d6d6efefefef midaswww*WWWHistoryMenu*BottomShadowColor: #4646b1b1b3b3 midaswww*XmTextField*Background: #b2b2b2b2b2b2 midaswww*XmLabel*Foreground: #1d1d15155b5b midaswww*XmText*Background: #b2b2b2b2b2b2 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Midaswww_mono.ad�����������������������������������������������������������������������100666 � 21345 � 173 � 226163 6003413532 14612� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CUSTOM.WWW.Menu.10: Headings =>@-12#Paragraphs =>@-20 CUSTOM.WWW.Menu.11: GopherSpace Overview@36#Veronica Interface@115#......@0#Original UMN Gopher@73#UIUC Weather Machine@106 CUSTOM.WWW.Menu.12: Helvetica (Headings)@41#New Century (Headings)@59#Times (Headings)@102 CUSTOM.WWW.Menu.13: Overview@74#On Version@68#On WWW@69#On Help@66#......@0#On HTML@65#On URL's@67#......@0#On Context@64 CUSTOM.WWW.Menu.14: On Window@70#On Context@64 CUSTOM.WWW.Menu.15: -5@5#-4@4#-3@3#-2@2#-1@1#0@6#1@7#2@8#3@9#4@10#5@11 CUSTOM.WWW.Menu.16: SunOS 4.1.1 Man Pages@99#HP-UX 8.0.7 Man Pages@38#Ultrix 4.2a Man Pages@108#IRIX 4.0 Man Pages@47#Pyramid OSx Man Pages@84#......@0#VMS Help System@113#X11R5 Man Pages@126#GNU manu\ als@33 CUSTOM.WWW.Menu.17: Visited Documents@116#Visited Documents...@117#......@0#Home Page@43#Go Back@34#Next@61#Previous@79#......@0#Hotlist@44#Add Document to Hotlist@14 CUSTOM.WWW.Menu.18: Document...@29#Gopher Document...@35#FTP Document...@30#Local Document...@52 CUSTOM.WWW.Menu.19: Portrait@76#Landscape@50#Seascape@96#Upside Down@111 CUSTOM.WWW.Menu.1: Go Back@34#Previous@79#Next@61#......@0#Save...@93#Search...@94#......@0#Clone @19#Close Window@21 CUSTOM.WWW.Menu.20: Helvetica (Text)@42#New Century (Text)@60#Times (Text)@103 CUSTOM.WWW.Menu.21: First Page@32#Next Page@62#Previous Page@80#Index@48#......@0#MagStep =>@-15#Orientation =>@-19 CUSTOM.WWW.Menu.22: Document Title@27#Document URL@28#......@0#Unrecognized Markup@109 CUSTOM.WWW.Menu.23: Headings (Underline)@40 CUSTOM.WWW.Menu.2: HTML@39#Text@101#Postscript@78 CUSTOM.WWW.Menu.3: File (History) =>@-8#Help (History) =>@-14 CUSTOM.WWW.Menu.4: File =>@-7#Postscript =>@-21#Navigate =>@-17#Customize =>@-5#Documents =>@-6#Manuals =>@-16#Help =>@-13 CUSTOM.WWW.Menu.5: Options...@72#Print Options...@82#Show =>@-22#......@0#Fonts =>@-10#Font Size =>@-9#Underline =>@-23 CUSTOM.WWW.Menu.6: MidasWWW Welcome Page@56#......@0#Web Overview@120#Web Project@121#Web Servers@122#Information by Subject@49#Data Sources by Service@23#W3 Catalog@118#......@0#What's New@123#......\ @0#Wais Interface@119#Gopher Interface =>@-11#Usenet Interface@112#Finger Interface@31#HyTelnet Interface@45#Techinfo Interface@100#Archie Interface@15#X.500 Interface@125#Hyper-G Interface@46#......@\ 0#HEP Overview@37#......@0#CERN Home Page@16#SLAC Home Page@90#SSC Home Page@91#Ohio State Home Page@63 CUSTOM.WWW.Menu.7: Reread Document@86#Document Info...@25#Document Source...@26#......@0#Open Selected@71#Open =>@-18#......@0#Save...@93#Mail...@53#Print...@83#Search...@94#......@0#Clone@19#......@0\ #Close Window@21#Quit@85 CUSTOM.WWW.Menu.8: Update@110#Search... (History)@95#Close@20 CUSTOM.WWW.Menu.9: Small@97#Medium@54#Large@51 CUSTOM.WWW.Menus: <buttons>#<format>#<history_menu>#<main_menu>#Customize#Documents#File#File (History)#Font Size#Fonts#Gopher Interface#Headings#Help#Help (History)#MagStep#Manuals#Navigate#Open#Orie\ ntation#Paragraphs#Postscript#Show#Underline CUSTOM.WWW.Verb.100: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch:8004/" CUSTOM.WWW.Verb.101: Set Ingot .^^^XmDiialogShell Format TEXT CUSTOM.WWW.Verb.102: #Set Ingot .^^^WWWMain HeadingFont "times"\nStore App Resource .^^^midaswww headingFont "times" CUSTOM.WWW.Verb.103: #Set Ingot .^^^WWWMain TextFont "times"\nStore App Resource .^^^midaswww textFont "times" CUSTOM.WWW.Verb.104: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.uiuc.edu:70/1" CUSTOM.WWW.Verb.105: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.uiuc.edu:70/1" CUSTOM.WWW.Verb.106: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://wx.atmos.uiuc.edu:70/1" CUSTOM.WWW.Verb.107: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://bigcheese.math.scarolina.edu:70/1" CUSTOM.WWW.Verb.108: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/ultrix.top.html" CUSTOM.WWW.Verb.109: #Set Ingot .^^^XmMainWindow ShowUnrecognizedMarkup GetValue(.,set)\nStore App Resource .^^^midaswww "ShowUnrecognizedMarkup" ShowUnrecognizedMarkup\nFor All .^^^XmMainWindow...hid\ den Set Value . managed ShowUnrecognizedMarkup CUSTOM.WWW.Verb.10: #Set Value PSState magstep 4 CUSTOM.WWW.Verb.110: Invoke Callback .^^^XmForm unmapCallback\nInvoke Callback .^^^XmForm mapCallback CUSTOM.WWW.Verb.111: #Set Value PSState orientation "upside-down" CUSTOM.WWW.Verb.112: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/News/Groups/Overview.html" CUSTOM.WWW.Verb.113: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/HELP" CUSTOM.WWW.Verb.114: Custom Popup WWW CUSTOM.WWW.Verb.115: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.tc.umn.edu:70/11/Other Gopher and Information Servers/Veronica" CUSTOM.WWW.Verb.116: Set Ingot .^^^XmMainWindow WWWFileTemp "history:" CUSTOM.WWW.Verb.117: Popup .^^^XmMainWindow###WWWHistory CUSTOM.WWW.Verb.118: Set Ingot .^^^XmMainWindow WWWFileTemp "http://cui_www.unige.ch/w3catalog" CUSTOM.WWW.Verb.119: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/WAIS/ByHost.html" CUSTOM.WWW.Verb.11: #Set Value PSState magstep 5 CUSTOM.WWW.Verb.120: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/WWW/LineMode/Defaults/default.html" CUSTOM.WWW.Verb.121: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/WWW/TheProject.html" CUSTOM.WWW.Verb.122: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/WWW/Servers.html" CUSTOM.WWW.Verb.123: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html" CUSTOM.WWW.Verb.124: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.tc.umn.edu:70/11/Phone Books/WHOIS Searches" CUSTOM.WWW.Verb.125: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://umich.edu:7777/" CUSTOM.WWW.Verb.126: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/x11.top.html" CUSTOM.WWW.Verb.12: Set Ingot .^^^XmMainWindow WWWFileTemp "http://hoohoo.ncsa.uiuc.edu:1235/man/index" CUSTOM.WWW.Verb.13: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/bySubject/Overview.html" CUSTOM.WWW.Verb.14: Set Ingot .^^^XmMainWindow HotList HotList++"<h6><kill><a href = %WWWParent(WWWFile) > %WWWTitle </a></h6>" \nStore App Resource .^^^midaswww hotList HotList \n CUSTOM.WWW.Verb.15: Set Ingot .^^^XmMainWindow WWWFileTemp "http://web.nexor.co.uk/archie.html" CUSTOM.WWW.Verb.16: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/" CUSTOM.WWW.Verb.17: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.tc.cornell.edu:70/1" CUSTOM.WWW.Verb.18: WWW Reset CUSTOM.WWW.Verb.19: Set Ingot WWWMain WWWFileNew WWWFile CUSTOM.WWW.Verb.1: #Set Value PSState magstep -1 CUSTOM.WWW.Verb.20: For All .^^^XmForm.XmDialogShell. PopDown .\nPopDown .^^^XmForm CUSTOM.WWW.Verb.21: Quit Shell . CUSTOM.WWW.Verb.22: Set Ingot .^^^XmMainWindow WWWFileTemp "http://fatty.law.cornell.edu.:80/usr2/wwwtext/lii.table.html" CUSTOM.WWW.Verb.23: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/ByAccess.html" CUSTOM.WWW.Verb.24: Popup .^^^XmMainWindow###WWWDisplayOptions CUSTOM.WWW.Verb.25: Popup .^^^XmMainWindow###WWWDocInfo\nSet Ingot .^^^XmMainWindow###WWWDocInfo ShowSource False CUSTOM.WWW.Verb.26: Popup .^^^XmMainWindow###WWWDocInfo\nSet Ingot .^^^XmMainWindow###WWWDocInfo ShowSource True CUSTOM.WWW.Verb.27: #Set Ingot .^^^XmMainWindow ShowTitle GetValue(.,set)\nStore App Resource .^^^midaswww "ShowTitle" ShowTitle\nKick .^^^XmMainWindow CUSTOM.WWW.Verb.28: #Set Ingot .^^^XmMainWindow ShowURL GetValue(.,set)\nStore App Resource .^^^midaswww "ShowURL" ShowURL\nkick .^^^XmMainWindow CUSTOM.WWW.Verb.29: Popup .^^^XmMainWindow###WWWDocOpen CUSTOM.WWW.Verb.2: #Set Value PSState magstep -2 CUSTOM.WWW.Verb.30: Popup .^^^XmMainWindow###WWWOpenFTP CUSTOM.WWW.Verb.31: Set Ingot .^^^XmMainWindow WWWFileTemp "http://cs.indiana.edu/finger/gateway" CUSTOM.WWW.Verb.32: WWW First Page PSState\nSet Sensitive .^.Next_Page True\nSet Sensitive . False CUSTOM.WWW.Verb.33: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:85/info/dir" CUSTOM.WWW.Verb.34: Set Ingot . Temp WWWBack(HistoryList)\nWWW Delete History HistoryList\nWWW Link\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(Temp,"WWWFile") CUSTOM.WWW.Verb.35: Popup .^^^XmMainWindow###WWWOpenGopher CUSTOM.WWW.Verb.36: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.micro.umn.edu:70/11/Other Gopher and Information Servers" CUSTOM.WWW.Verb.37: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/bySubject/Physics/HEP.html" CUSTOM.WWW.Verb.38: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/hpux.top.html" CUSTOM.WWW.Verb.39: Set Ingot .^^^XmDialogShell Format HTML CUSTOM.WWW.Verb.3: #Set Value PSState magstep -3 CUSTOM.WWW.Verb.40: #Set Ingot .^^^WWWMain UnderlineHeadings GetValue(.,set)\nStore App Resource .^^^midaswww underlineHeadings UnderlineHeadings CUSTOM.WWW.Verb.41: #Set Ingot .^^^WWWMain HeadingFont helvetica\nStore App Resource .^^^midaswww headingFont helvetica CUSTOM.WWW.Verb.42: #Set Ingot .^^^WWWMain TextFont helvetica\nStore App Resource .^^^midaswww textFont helvetica CUSTOM.WWW.Verb.43: Set Ingot .^^^XmMainWindow WWWFileTemp WWW_Home CUSTOM.WWW.Verb.44: Set Ingot .^^^XmMainWindow WWWFileTemp "ingot:HotList" CUSTOM.WWW.Verb.45: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu/misc/hytelnet.html" CUSTOM.WWW.Verb.46: Set Ingot .^^^XmMainWindow WWWFileTemp "http://iicm.tu-graz.ac.at:80/ROOT" CUSTOM.WWW.Verb.47: Set Ingot .^^^XmMainWindow WWWFileTemp "http://z0.slac.stanford.edu:1234/man/index" CUSTOM.WWW.Verb.48: Set Ingot . Temp WWWBack(HistoryList)\nWWW Delete History HistoryList\nWWW Link\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(Temp,"WWWFile") CUSTOM.WWW.Verb.49: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/DataSources/bySubject/Overview.html" CUSTOM.WWW.Verb.4: #Set Value PSState magstep -4 CUSTOM.WWW.Verb.50: #Set Value PSState orientation landscape CUSTOM.WWW.Verb.51: #Set Ingot .^^^WWWMain FontSize Large\nStore App Resource .^^^midaswww "fontSize" Large CUSTOM.WWW.Verb.52: Popup .^^^XmMainWindow###WWWOpenLocal CUSTOM.WWW.Verb.53: Popup .^^^XmMainWindow###WWWMail CUSTOM.WWW.Verb.54: #Set Ingot .^^^WWWMain FontSize Medium\nStore App Resource .^^^midaswww "fontSize" Medium\n CUSTOM.WWW.Verb.55: Popup Midas_Main CUSTOM.WWW.Verb.56: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/welcome.html" CUSTOM.WWW.Verb.57: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.ncsa.uiuc.edu:70/1" CUSTOM.WWW.Verb.58: Set Ingot .^^^XmMainWindow WWWFileTemp "http://hoohoo.ncsa.uiuc.edu/welcome.html" CUSTOM.WWW.Verb.59: #Set Ingot .^^^WWWMain HeadingFont "new century schoolbook"\nStore App Resource .^^^midaswww headingFont "new century schoolbook" CUSTOM.WWW.Verb.5: #Set Value PSState magstep -5 CUSTOM.WWW.Verb.60: #Set Ingot .^^^WWWMain TextFont "new century schoolbook"\nStore App Resource .^^^midaswww textFont "new century schoolbook" CUSTOM.WWW.Verb.61: Set Ingot . Temp WWWNext(WWWBack(HistoryList))\nWWW Delete History HistoryList\nWWW Link Temp \nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),"WWWFile") CUSTOM.WWW.Verb.62: If GetValue(PSState,"pages")>0 Invoke Callback .^^^WWWMain...Next activateCallback\nElse WWW Next Page PSState\nElse Set Sensitive .^.First_Page True CUSTOM.WWW.Verb.63: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/hypertext/information/information.html" CUSTOM.WWW.Verb.64: Help On Context . CUSTOM.WWW.Verb.65: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ncsa.uiuc.edu/demoweb/html-primer.html" CUSTOM.WWW.Verb.66: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/help.html" CUSTOM.WWW.Verb.67: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ncsa.uiuc.edu/demoweb/url-primer.html" CUSTOM.WWW.Verb.68: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/about.html" CUSTOM.WWW.Verb.69: Set Ingot .^^^XmMainWindow WWWFileTemp "http://info.cern.ch/hypertext/WWW/TheProject.html" CUSTOM.WWW.Verb.6: #Set Value PSState magstep 0 CUSTOM.WWW.Verb.70: Invoke Callback .^^^XmForm helpCallback CUSTOM.WWW.Verb.71: If GetSelection(.,"PRIMARY","STRING")!="" Set Ingot .^^^XmMainWindow WWWFileTemp GetSelection(.,"PRIMARY","STRING") \nElse Popup .^^^XmMainWindow###WWWDocOpen CUSTOM.WWW.Verb.72: Popup .^^^XmMainWindow###WWWParameters CUSTOM.WWW.Verb.73: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.micro.umn.edu:70/1" CUSTOM.WWW.Verb.74: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/overview.html" CUSTOM.WWW.Verb.75: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://pscuxb.psc.edu:1563/1" CUSTOM.WWW.Verb.76: #Set Value PSState orientation portrait CUSTOM.WWW.Verb.77: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://una.hh.lib.umich.edu:70/11/journals/pmc" CUSTOM.WWW.Verb.78: Set Ingot .^^^XmDialogShell Format Postscript CUSTOM.WWW.Verb.79: Set Ingot . Temp WWWPrev(WWWBack(HistoryList))\nWWW Delete History HistoryList\nWWW Link Temp \nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),"WWWFile") CUSTOM.WWW.Verb.7: #Set Value PSState magstep 1 CUSTOM.WWW.Verb.80: Set Ingot . Temp WWWPrev(WWWBack(HistoryList))\nWWW Delete History HistoryList\nWWW Link Temp \nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWDest(Temp),"WWWFile") CUSTOM.WWW.Verb.81: Invoke Callback .^^^XmMainWindow###WWWPrint...WWWPrintOk activateCallback CUSTOM.WWW.Verb.82: Popup .^^^XmMainWindow###WWWPrintOptions CUSTOM.WWW.Verb.83: Popup .^^^XmMainWindow###WWWPrint CUSTOM.WWW.Verb.84: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/pyramid.top.html" CUSTOM.WWW.Verb.85: Quit Application . CUSTOM.WWW.Verb.86: WWW Zap .^^^XmMainWindow...WWWHyper WWWFile\nWWW Link\nSet Ingot .^^^XmMainWindow WWWFileTemp Convert(WWWFile,"WWWNode") CUSTOM.WWW.Verb.87: Set Ingot .^^^XmMainWindow WWWFileTemp "gopher://gopher.sdsc.edu:70/1" CUSTOM.WWW.Verb.88: Set Ingot .^^^XmMainWindow WWWFileTemp "http://iicm.tu-graz.ac.at:80/CSIGGRAPHbib" CUSTOM.WWW.Verb.89: Set Ingot .^^^XmMainWindow WWWFileTemp "http://slacvm.slac.stanford.edu:5080/FIND/SLAC.HTML" CUSTOM.WWW.Verb.8: #Set Value PSState magstep 2 CUSTOM.WWW.Verb.90: Set Ingot .^^^XmMainWindow WWWFileTemp "http://slacvm.slac.stanford.edu./FIND/SLAC.HTML" CUSTOM.WWW.Verb.91: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.ssc.gov/SSC.html" CUSTOM.WWW.Verb.92: Custom Write WWW\nSave Stored Resources . CUSTOM.WWW.Verb.93: Popup .^^^XmMainWindow###WWWSave CUSTOM.WWW.Verb.94: Popup .^^^XmMainWindow###WWWSearch CUSTOM.WWW.Verb.95: Popup .^^^WWWHistory###WWWSearch CUSTOM.WWW.Verb.96: #Set Value PSState orientation seascape CUSTOM.WWW.Verb.97: #Set Ingot .^^^WWWMain FontSize Small\nStore App Resource .^^^midaswww "fontSize" Small\n CUSTOM.WWW.Verb.98: Popup WWWStartup CUSTOM.WWW.Verb.99: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www.cis.ohio-state.edu:80/man/sunos.top.html" CUSTOM.WWW.Verb.9: #Set Value PSState magstep 3 CUSTOM.WWW.Verbs: -1#-2#-3#-4#-5#0#1#2#3#4#5#AIX 3.2 Man Pages#Academic Information#Add Document to Hotlist#Archie Interface#CERN Home Page#CTC Gopher#Clear Visited Documents#Clone#Close#Close Window#\ Cornell Law School#Data Sources by Service#Display...#Document Info...#Document Source...#Document Title#Document URL#Document...#FTP Document...#Finger Interface#First Page#GNU manuals#Go Back#Gopher\ Document...#GopherSpace Overview#HEP Overview#HP-UX 8.0.7 Man Pages#HTML#Headings (Underline)#Helvetica (Headings)#Helvetica (Text)#Home Page#Hotlist#HyTelnet Interface#Hyper-G Interface#IRIX 4.0 Man\ Pages#Index#Information by Subject#Landscape#Large#Local Document...#Mail...#Medium#Midas...#MidasWWW Welcome Page#NCSA Gopher#NCSA Home Page#New Century (Headings)#New Century (Text)#Next#Next Page#\ Ohio State Home Page#On Context#On HTML#On Help#On URL's#On Version#On WWW#On Window#Open Selected#Options...#Original UMN Gopher#Overview#PSC Gopher#Portrait#PostModern Culture#Postscript#Previous#Pr\ evious Page#Print#Print Options...#Print...#Pyramid OSx Man Pages#Quit#Reread Document#SDSC Gopher#SIGGRAPH Bibliography#SLAC#SLAC Home Page#SSC Home Page#Save Current Settings#Save...#Search...#Searc\ h... (History)#Seascape#Small#Startup...#SunOS 4.1.1 Man Pages#Techinfo Interface#Text#Times (Headings)#Times (Text)#UIUC Gopher#UIUC Gopher#UIUC Weather Machine#USC Math Gopher#Ultrix 4.2a Man Pages\ #Unrecognized Markup#Update#Upside Down#Usenet Interface#VMS Help System#Verbs and Menus...#Veronica Interface#Visited Documents#Visited Documents...#W3 Catalog#Wais Interface#Web Overview#Web Project\ #Web Servers#What's New#Whois Interface#X.500 Interface#X11R5 Man Pages midaswww*Clone.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/clone.html" midaswww*Close_Window.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/quit.html" midaswww*ConfirmExit.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave Fa\ lse midaswww*Customize.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Customize" midaswww*Document_Source___.DocFormat: Set Sensitive . DocFormat=="HTML" midaswww*Document_Source___.DocFormatExecuteWhenCreated: False midaswww*Document_Source___.midasIngots: DocFormat midaswww*Document_Title.midasCreateCallback: Set Value . set ShowTitle midaswww*Document_URL.midasCreateCallback: set value . set ShowURL midaswww*Documents.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Documents" midaswww*EnableHTTP2.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave Fa\ lse midaswww*File.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#File" midaswww*First_Page.WWWFile: Set Sensitive . False midaswww*First_Page.midasIngots: WWWFile midaswww*FontList: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1 midaswww*Font_Size.radioBehavior: true midaswww*GhostscriptErrorCancel.activateCallback: PopDown .^^ midaswww*GhostviewErrorsHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*Go_Back.WWWFile: Set Sensitive . WWWBack(HistoryList)!=0 midaswww*Go_Back.WWWFileExecuteWhenCreated: True midaswww*Go_Back.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#GoBack" midaswww*Go_Back.midasIngots: WWWFile midaswww*HTML.DocFormat: Set Sensitive . DocFormat=="HTML"\nIf DocFormat=="HTML" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\nIf DocFormat=="HTML" Invoke Callback . activateCallback midaswww*HTML.DocFormatExecuteWhenCreated: True midaswww*HTML.midasIngots: DocFormat midaswww*Headings.radioBehavior: true midaswww*Headings_(Underline).midasCreateCallback: Set Value . set UnderlineHeadings midaswww*Helvetica_(Headings).midasCreateCallback: Set Value . set HeadingFont=="helvetica" midaswww*Helvetica_(Text).midasCreateCallback: Set Value . set TextFont=="helvetica" midaswww*Index.WWWFile: Set Sensitive . PSState!=0&&GetValue(PSState,"pages")>1 midaswww*Index.midasIngots: WWWFile midaswww*Large.midasCreateCallback: Set Value . set FontSize=="Large" midaswww*MagStep.XmToggleButtonGadget.PSState: If PSState!=0 Set Value . set GetValue(PSState,magstep)==GetValue(.,labelString) midaswww*MagStep.XmToggleButtonGadget.midasIngots: PSState midaswww*MagStep.radioBehavior: true midaswww*Mail___.DocFormat: Set Sensitive . DocFormat!="GIF Image" midaswww*Mail___.DocFormatExecuteWhenCreated: False midaswww*Mail___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/slac_library.html#Mail" midaswww*Mail___.midasIngots: DocFormat midaswww*Manuals.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#manuals" midaswww*Medium.midasCreateCallback: Set Value . set FontSize=="Medium" midaswww*Navigate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Navigate" midaswww*New_Century_(Headings).midasCreateCallback: Set Value . set HeadingFont=="new century schoolbook" midaswww*New_Century_(Text).midasCreateCallback: Set Value . set TextFont=="new century schoolbook" midaswww*Next.WWWFile: Set Sensitive . WWWDest(WWWNext(WWWBack(HistoryList)))!=0 midaswww*Next.WWWFileExecuteWhenCreated: True midaswww*Next.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#NextPrevious" midaswww*Next.midasIngots: WWWFile midaswww*Next_Page.WWWFile: Set Sensitive . WWWDest(WWWNext(WWWBack(HistoryList)))!=0&&PSState!=0&&GetValue(PSState,"pages")!=1 midaswww*Next_Page.midasIngots: WWWFile midaswww*Orientation.XmToggleButtonGadget.PSState: If PSState!=0 Set Value . set GetValueRaw(PSState,orientation)==GetValue(.,labelString) midaswww*Orientation.XmToggleButtonGadget.midasIngots: PSState midaswww*Orientation.radioBehavior: true midaswww*PSF.activateCallback: WWW Next Page PSState midaswww*Paragraphs.radioBehavior: true midaswww*Postscript.DocFormat: Set Sensitive . DocFormat=="Postscript" midaswww*Postscript.DocFormatExecuteWhenCreated: True midaswww*Postscript.midasIngots: DocFormat midaswww*Previous.WWWFile: Set Sensitive . WWWDest(WWWPrev(WWWBack(HistoryList)))!=0 midaswww*Previous.WWWFileExecuteWhenCreated: True midaswww*Previous.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#NextPrevious" midaswww*Previous.midasIngots: WWWFile midaswww*Previous_Page.WWWFile: Set Sensitive . WWWDest(WWWPrev(WWWBack(HistoryList)))!=0&&PSState!=0&&GetValue(PSState,"pages")>1 midaswww*Previous_Page.midasIngots: WWWFile midaswww*Print.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/slac_library.html#Print" midaswww*Print___.DocFormat: Set Sensitive . DocFormat!="GIF Image" midaswww*Print___.DocFormatExecuteWhenCreated: False midaswww*Print___.midasIngots: DocFormat midaswww*Quit.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/quit.html" midaswww*SGMLHyper.midasCreateCallback: WWW CopyB . .^ midaswww*SGMLMarkerText.bombPixmap: bomb midaswww*Save___.DocFormat: Set Sensitive . DocFormat!="GIF Image" midaswww*Save___.DocFormatExecuteWhenCreated: False midaswww*Save___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/save.html" midaswww*Save___.midasIngots: DocFormat midaswww*Search___.DocFormat: Set Sensitive . DocFormat=="HTML" midaswww*Search___.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/search_window.html" midaswww*Search___.midasIngots: DocFormat midaswww*ShowDocumentSource.DocFormat: Set Sensitive . DocFormat=="HTML" midaswww*ShowDocumentSource.DocFormatExecuteWhenCreated: True midaswww*ShowDocumentSource.ShowSource: Set Value . set ShowSource midaswww*ShowDocumentSource.ShowSourceExecuteWhenCreated: True midaswww*ShowDocumentSource.midasIngots: ShowSource DocFormat midaswww*ShowDocumentSource.valueChangedCallback: Set Ingot .^^^WWWDocInfo ShowSource GetValue(.,set) midaswww*Small.midasCreateCallback: Set Value . set FontSize=="Small" midaswww*SourceTextSW.ShowSource: If ShowSource Then PopUp .\nElse PopDown .\nIf ShowSource Set Value .^^ height 600\nElse Set Value .^^ height GetValue(.,y)\nIf ShowSource WWW Put ....WWWSource WWWSo\ urce(.^^^XmMainWindow...WWWHyper) midaswww*SourceTextSW.ShowSourceExecuteWhenCreated: False midaswww*SourceTextSW.midasCreateCallback: Create Widget . SGMLHyper WWWSource midaswww*SourceTextSW.midasIngots: ShowSource midaswww*Times_(Headings).midasCreateCallback: Set Value . set HeadingFont=="times" midaswww*Times_(Text).midasCreateCallback: Set Value . set TextFont=="times" midaswww*Unrecognized_Markup.midasCreateCallback: set value . set ShowUnrecognizedMarkup midaswww*WWWButtons.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Buttons" midaswww*WWWButtons.midasCreateCallback: Custom Connect WWW "<buttons>" . midaswww*WWWButtons.orientation: XMHORIZONTAL midaswww*WWWCommand.KeywordVisible: Set Sensitive . KeywordVisible midaswww*WWWCommand.KeywordVisibleExecuteWhenCreated: False midaswww*WWWCommand.midasIngots: KeywordVisible midaswww*WWWCommand.sensitive: false midaswww*WWWCommandText.KeywordVisible: If KeywordVisible Grab Focus . midaswww*WWWCommandText.KeywordVisibleExecuteWhenCreated: False midaswww*WWWCommandText.commandEnteredCallback: If GetCommand()!="" Set Ingot . temp WWWCreateNodeFromKeyword(GetIngot(.^^^WWWMain...WWWHyper,WWWFileBase),WWWFile,WWWEncode(GetCommand()),"get")\n\ If GetCommand()!="" WWW Link temp\nIf GetCommand()!="" S\ et Ingot .^^^XmMainWindow WWWFileRequest WWWDest(temp) midaswww*WWWCommandText.marginHeight: 0 midaswww*WWWCommandText.marginWidth: 2 midaswww*WWWCommandText.midasCreateCallback: PopDown ..XmScrolledWindow\nPopDown ..Selection midaswww*WWWCommandText.midasIngots: KeywordVisible midaswww*WWWDocInfo*WWWSearch.ShowSource: If ShowSource==False PopDown . midaswww*WWWDocInfo*WWWSearch.ShowSourceExecuteWhenCreated: False midaswww*WWWDocInfo*WWWSearch.dialogTitle: Search Source midaswww*WWWDocInfo*WWWSearch.midasIngots: ShowSource midaswww*WWWDocInfo.DocFormat: If DocFormat!="HTML" Set Ingot . ShowSource False midaswww*WWWDocInfo.DocFormatExecuteWhenCreated: False midaswww*WWWDocInfo.ShowSourceExecuteWhenCreated: True midaswww*WWWDocInfo.dialogTitle: Document Info. midaswww*WWWDocInfo.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/docinfo.html" midaswww*WWWDocInfo.mapCallback: Set Value ....SourceTextSW height 600\nSet Value ....SourceTextSW width 600 midaswww*WWWDocInfo.midasCreateCallback: Set Ingot . ShowSource False midaswww*WWWDocInfo.midasIngots: ShowSource DocFormat midaswww*WWWDocInfoCancel.activateCallback: PopDown .^^ midaswww*WWWDocInfoDismiss.activateCallback: For All .^^.XmDialogShell. PopDown .\nPopDown .^^ midaswww*WWWDocInfoDocFormatText.DocFormat: Set Value . value DocFormat midaswww*WWWDocInfoDocFormatText.DocFormatExecuteWhenCreated: True midaswww*WWWDocInfoDocFormatText.editable: false midaswww*WWWDocInfoDocFormatText.midasIngots: DocFormat midaswww*WWWDocInfoDocTitleText.WWWTitle: Set Value . value WWWTitle midaswww*WWWDocInfoDocTitleText.WWWTitleExecuteWhenCreated: True midaswww*WWWDocInfoDocTitleText.midasIngots: WWWTitle midaswww*WWWDocInfoHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWDocInfoIndexToggle.IsIndexExecuteWhenCreated: True midaswww*WWWDocInfoIndexToggle.KeywordVisible: set Value . set KeywordVisible midaswww*WWWDocInfoIndexToggle.midasIngots: KeywordVisible midaswww*WWWDocInfoSearch.ShowSource: Set Sensitive . ShowSource midaswww*WWWDocInfoSearch.activateCallback: Popup .^^^WWWDocInfo###WWWSearch midaswww*WWWDocInfoSearch.midasIngots: ShowSource midaswww*WWWDocOpen.autoUnmanage: false midaswww*WWWDocOpen.dialogTitle: Open Document midaswww*WWWDocOpen.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/opendoc.html" midaswww*WWWDocOpenOk.activateCallback: PopDown .^^ \nSet Ingot .^^^XmMainWindow WWWFileRequest GetValue(.^^...WWWDocOpenText,value) midaswww*WWWGhostviewErrors.dialogTitle: Ghostscript Errors midaswww*WWWGhostviewErrors.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/gs_error.html" midaswww*WWWGhostviewErrors.unmapCallback: Set Value ....XmText value "" midaswww*WWWHeader.ShowTitle: If ShowTitle||ShowURL PopUp .\nElse PopDown . midaswww*WWWHeader.ShowTitleExecuteWhenCreated: True midaswww*WWWHeader.ShowURL: If ShowTitle||ShowURL PopUp .\nElse PopDown . midaswww*WWWHeader.ShowURLExecuteWhenCreated: True midaswww*WWWHeader.midasIngots: ShowURL ShowTitle midaswww*WWWHeaderDocumentLabel.ShowURL: If ShowURL PopUp .\nElse PopDown . midaswww*WWWHeaderDocumentLabel.ShowURLExecuteWhenCreated: True midaswww*WWWHeaderDocumentLabel.midasIngots: ShowURL midaswww*WWWHeaderDocumentText.ShowURL: If ShowURL PopUp .\nElse Popdown . midaswww*WWWHeaderDocumentText.ShowURLExecuteWhenCreated: True midaswww*WWWHeaderDocumentText.WWWFile: Set Value . value WWWParent(WWWFile) midaswww*WWWHeaderDocumentText.WWWFileExecuteWhenCreated: True midaswww*WWWHeaderDocumentText.editable: false midaswww*WWWHeaderDocumentText.midasIngots: WWWFile ShowURL midaswww*WWWHeaderTitleLabel.ShowTitle: If ShowTitle Then Popup .\nElse PopDown . midaswww*WWWHeaderTitleLabel.ShowTitleExecuteWhenCreated: True midaswww*WWWHeaderTitleLabel.midasIngots: ShowTitle midaswww*WWWHeaderTitleText.ShowTitle: If ShowTitle PopUp .\nElse PopDown . midaswww*WWWHeaderTitleText.ShowTitleExecuteWhenCreated: True midaswww*WWWHeaderTitleText.WWWTitle: Set Value . value WWWTitle midaswww*WWWHeaderTitleText.WWWTitleExecuteWhenCreated: False midaswww*WWWHeaderTitleText.editable: false midaswww*WWWHeaderTitleText.midasIngots: WWWTitle ShowTitle midaswww*WWWHistory*Search___.midasIngots: midaswww*WWWHistory*WWWHyper*a*activateCallback: WWW Link\nSet Ingot .^^^WWWMain WWWFileTemp Convert(WWWDest(WWWNode(.^^^a)),"WWWFile") midaswww*WWWHistory*WWWHyper*a.createCallback: WWW Anchor . "history:"\nSet Value . sensitive GetValue(.,href)!="" midaswww*WWWHistory*WWWHyper*title.createCallback: midaswww*WWWHistory*WWWHyper*title.mapCallback: midaswww*WWWHistory*WWWHyper.midasIngots: midaswww*WWWHistory*WWWSearch.dialogTitle: Search History midaswww*WWWHistory*WWWSearch.midasIngots: midaswww*WWWHistory.dialogTitle: Visited Documents midaswww*WWWHistory.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/visited_documents_window.html" midaswww*WWWHistory.mapCallback: set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)\nWWW Link\nWWW Get ....WWWHyper "history:" IncludeList "" midaswww*WWWHistory.unmapCallback: WWW Zap ....WWWHyper "history:"\n midaswww*WWWHistoryButton.activateCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "history:" midaswww*WWWHistoryButton.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/navigate.html#history" midaswww*WWWHistoryMenu*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*WWWHistoryMenu.midasCreateCallback: Custom Connect WWW "<history_menu>" .\n midaswww*WWWHistorySW.midasCreateCallback: Create Widget . SGMLHyper WWWHyper midaswww*WWWHistorySW.scrollingPolicy: XMAUTOMATIC midaswww*WWWHistorySW.translations: #override \n:<ConfigureNotify> : SendMidas("set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)") midaswww*WWWHome.activateCallback: Set Ingot .^^^XmMainWindow WWWFileRequest WWW_Home midaswww*WWWHome.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/home.html" midaswww*WWWHotList.activateCallback: Invoke Callback .^^^WWWMain...Hotlist activateCallback midaswww*WWWHotList.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest " http://www-midas.slac.stanford.edu:80/midasv21/hotlist.html" midaswww*WWWHotListDeleteConfirm.dialogTitle: Delete Item? midaswww*WWWHotListDeleteConfirm.helpCallback: PopDown .\nSet Ingot .^^^WWWMain WWWFileNew "http://www-midas.slac.stanford.edu:80/midasv21/hotlist.html" midaswww*WWWHotListDeleteConfirm.mapCallback: Set Ingot . result false midaswww*WWWHotListDeleteConfirm.okCallback: Set Ingot . result true midaswww*WWWHyper*SGMLPlainText.tabs: 8 midaswww*WWWHyper*a*activateCallback: WWW Link WWWNode(.^^^a)\nSet Ingot .^^^WWWMain NewTitle GetValue(.^^^a,"title")\n\ if WWWIsMap(.)!="" Set Ingot .^^^WWWMain WWWFileTemp WWWDest(WWWCreateNodeFromKeyword(WWWFileBase,WWWDest(WWWNode(.^^^a)),WWWIsMap(.),"get"))\nelse Set Ingot .^^^WWWMain WWWFileTemp Convert(WWWDest(WWWNode(.^^^a)),"WWWFile") midaswww*WWWHyper*a*img.outline: true midaswww*WWWHyper*a*img.underlineHeight: 2 midaswww*WWWHyper*a.createCallback: WWW Anchor . WWWFileBase\nSet Value . sensitive GetValue(.,href)!=""\nIf WWWParam(.,"redirect")!="" WWW Redirect WWWFileRequest WWWDest(WWWNode(.)) midaswww*WWWHyper*a.tagList: * SGMLAnchorText: -a midaswww*WWWHyper*address.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*address.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*address.fontSlant: i midaswww*WWWHyper*address.spaceAfter: 10 midaswww*WWWHyper*address.spaceBefore: 10 midaswww*WWWHyper*b.fontWeight: bold midaswww*WWWHyper*base.createCallback: Set Ingot .^^^WWWHyper WWWFileBase WWWParse(WWWParam(.,"href"),WWWFileBase) midaswww*WWWHyper*blockquote.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*blockquote.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*blockquote.leftIndent: 20 midaswww*WWWHyper*blockquote.rightIndent: 20 midaswww*WWWHyper*blockquote.spaceAfter: 10 midaswww*WWWHyper*blockquote.spaceBefore: 10 midaswww*WWWHyper*br.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*cite.fontSlant: i midaswww*WWWHyper*code.fontFamily: courier midaswww*WWWHyper*code.fontSpacing: m midaswww*WWWHyper*dd.position: 0 midaswww*WWWHyper*default.FontRegistry: iso8859 midaswww*WWWHyper*default.color: Black midaswww*WWWHyper*default.exactTerminator: True midaswww*WWWHyper*default.fontSlant: r midaswww*WWWHyper*default.fontSpacing: p midaswww*WWWHyper*default.fontWeight: medium midaswww*WWWHyper*default.hideIllegalTags: True midaswww*WWWHyper*default.leftIndent: 20 midaswww*WWWHyper*default.supportsEntities: True midaswww*WWWHyper*default.tagList: SGMLMarkerText: %tryagain %!-- %img %p %br %isindex %base %nextid %kill %nocache SGMLFormText: form SGMLCompositeText: html body head header address dl dlc dl_compact h1 h2 h3 h4 h5 h6 dir menu pre b\ i tt u em strong code samp kbd var dfn cite blockquote xmp listing plaintext SGMLAnchorText: a SGMLListText: ul ol SGMLText: comment title SGMLRuleText: %hr SGMLTableText: table midaswww*WWWHyper*dfn.fontWeight: bold midaswww*WWWHyper*dir.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dir.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dir.li.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*dir.li.columnAlign: 125 midaswww*WWWHyper*dir.spaceAfter: 6 midaswww*WWWHyper*dir.spaceBefore: 6 midaswww*WWWHyper*dir.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*dl.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl.dd.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl.dt.position: -50 midaswww*WWWHyper*dl.leftIndent: 50 midaswww*WWWHyper*dl.spaceAfter: 6 midaswww*WWWHyper*dl.spaceBefore: 6 midaswww*WWWHyper*dl.tagList: * SGMLMarkerText: +%dt +%dd midaswww*WWWHyper*dl_compact.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl_compact.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dl_compact.dt.position: -150 midaswww*WWWHyper*dl_compact.leftIndent: 150 midaswww*WWWHyper*dl_compact.spaceAfter: 6 midaswww*WWWHyper*dl_compact.spaceBefore: 6 midaswww*WWWHyper*dl_compact.tagList: * SGMLMarkerText: +%dt +%dd midaswww*WWWHyper*dlc.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*dlc.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dlc.dt.position: -150 midaswww*WWWHyper*dlc.leftIndent: 150 midaswww*WWWHyper*dlc.spaceAfter: 6 midaswww*WWWHyper*dlc.spaceBefore: 6 midaswww*WWWHyper*dlc.tagList: * SGMLMarkerText: +%dt +%dd midaswww*WWWHyper*dt.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*dt.spaceBefore: 6 midaswww*WWWHyper*em.fontSlant: i midaswww*WWWHyper*form.tagList: * SGMLInputText: +%input +textarea SGMLCompositeText: +select -form midaswww*WWWHyper*form.activateCallback: Set Ingot . temp WWWCreateNodeFromKeyword(WWWFileBase,WWWParse(GetValue(.,action),WWWFileBase),GetValue(.,result),GetValue(.,method))\nWWW Link temp\nSet Ingot .^^^XmMainWindow WWWFileRequest WWWDest(temp) midaswww*WWWHyper*h1.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h1.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h1.fontWeight: bold midaswww*WWWHyper*h1.leftIndent: -20 midaswww*WWWHyper*h1.spaceAfter: 20 midaswww*WWWHyper*h1.spaceBefore: 40 midaswww*WWWHyper*h1.underlineHeight: 3 midaswww*WWWHyper*h1.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h2.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h2.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h2.fontWeight: bold midaswww*WWWHyper*h2.leftIndent: -20 midaswww*WWWHyper*h2.spaceAfter: 10 midaswww*WWWHyper*h2.spaceBefore: 20 midaswww*WWWHyper*h2.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h3.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h3.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h3.fontWeight: bold midaswww*WWWHyper*h3.spaceAfter: 6 midaswww*WWWHyper*h3.spaceBefore: 12 midaswww*WWWHyper*h3.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h4.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h4.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h4.fontWeight: bold midaswww*WWWHyper*h4.spaceBefore: 8 midaswww*WWWHyper*h4.underline: 1 midaswww*WWWHyper*h4.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h5.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h5.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h5.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*h6.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*h6.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*h6.tagList: * SGMLCompositeText: -h1 -h2 -h3 -h4 -h5 -h6 midaswww*WWWHyper*head.tagList: * SGMLCompositeText: -body -head -header midaswww*WWWHyper*header.tagList: * SGMLCompositeText: -body -head -header midaswww*WWWHyper*hidden.color: red midaswww*WWWHyper*hidden.createCallback: Set Value . managed ShowUnrecognizedMarkup midaswww*WWWHyper*hidden.fontWeight: bold midaswww*WWWHyper*hidden.sensitiveColor: red midaswww*WWWHyper*hr.leftIndent: 30 midaswww*WWWHyper*hr.rightIndent: 30 midaswww*WWWHyper*hr.spaceAfter: 12 midaswww*WWWHyper*hr.spaceBefore: 12 midaswww*WWWHyper*i.fontSlant: i midaswww*WWWHyper*image.mapCallback: Set Ingot .^^^WWWMain IsGIF true midaswww*WWWHyper*img.createCallback: if WWWParam(.,"src")!="" WWW Include IncludeList . WWWParse(WWWParam(.,"src"),WWWFileBase) midaswww*WWWHyper*img.pixmap: bomb midaswww*WWWHyper*input.bombPixmap: bomb midaswww*WWWHyper*input.createCallback: if WWWParam(.,"src")!="" WWW Include IncludeList . WWWParse(WWWParam(.,"src"),WWWFileBase) midaswww*WWWHyper*isindex.mapCallback: Set Ingot .^^^XmMainWindow IsIndex True midaswww*WWWHyper*kbd.color: dark green midaswww*WWWHyper*kbd.fontFamily: courier midaswww*WWWHyper*kbd.fontSpacing: m midaswww*WWWHyper*kill.activateCallback: if QueryUser(.^^^XmMainWindow###WWWHotListDeleteConfirm) Destroy .^\nSet Ingot .^^^XmMainWindow HotList WWWSource(.^^^XmMainWindow...WWWHyper)\nStore App Resou\ rce .^^^midaswww hotList HotList midaswww*WWWHyper*kill.outline: true midaswww*WWWHyper*kill.pixmap: kill midaswww*WWWHyper*kill.sensitive: true midaswww*WWWHyper*kill.underlineHeight: 3 midaswww*WWWHyper*li.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*li.spaceBefore: 6 midaswww*WWWHyper*listing.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*listing.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*listing.defaultClass: SGMLPlainText midaswww*WWWHyper*listing.exactTerminator: True midaswww*WWWHyper*listing.fontFamily: courier midaswww*WWWHyper*listing.fontSize: 12 midaswww*WWWHyper*listing.fontSpacing: m midaswww*WWWHyper*listing.hideIllegalTags: False midaswww*WWWHyper*listing.supportsEntities: False midaswww*WWWHyper*listing.tagList: midaswww*WWWHyper*menu.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*menu.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*menu.spaceAfter: 4 midaswww*WWWHyper*menu.spaceBefore: 4 midaswww*WWWHyper*menu.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*nocache.unmapCallback: Destroy .^^^default midaswww*WWWHyper*ol.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*ol.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*ol.bulletMarker: li midaswww*WWWHyper*ol.bulletType: ordered midaswww*WWWHyper*ol.leftIndent: 20 midaswww*WWWHyper*ol.spaceAfter: 6 midaswww*WWWHyper*ol.spaceBefore: 6 midaswww*WWWHyper*select*option.type: option midaswww*WWWHyper*ol.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*p.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*p.spaceBefore: 6 midaswww*WWWHyper*plaintext.defaultClass: SGMLPlainText midaswww*WWWHyper*plaintext.exactTerminator: True midaswww*WWWHyper*plaintext.fontFamily: courier midaswww*WWWHyper*plaintext.fontSpacing: m midaswww*WWWHyper*plaintext.hideIllegalTags: False midaswww*WWWHyper*plaintext.supportsEntities: False midaswww*WWWHyper*plaintext.tagList: midaswww*WWWHyper*pre*h1.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h1.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h1.fontFamlily: courier midaswww*WWWHyper*pre*h2.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h2.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h2.fontFamlily: courier midaswww*WWWHyper*pre*h3.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h3.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h3.fontFamlily: courier midaswww*WWWHyper*pre*h4.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h4.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h4.fontFamlily: courier midaswww*WWWHyper*pre*h5.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h5.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h5.fontFamlily: courier midaswww*WWWHyper*pre*h6.breakAfter: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h6.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*h6.fontFamlily: courier midaswww*WWWHyper*pre*p.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre*SGMLInputText.breakBefore: SGMLBREAK_NEVER midaswww*WWWHyper*pre.FontSpacing: m midaswww*WWWHyper*pre.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*pre.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*pre.defaultClass: SGMLPlainText midaswww*WWWHyper*pre.fontFamily: courier midaswww*WWWHyper*samp.fontFamily: courier midaswww*WWWHyper*samp.fontSpacing: m midaswww*WWWHyper*strong.fontWeight: bold midaswww*WWWHyper*table.tagList: * SGMLMarkerText: +tr +%th +%td SGMLCompositeText: +caption midaswww*WWWHyper*table.spaceBefore: 20 midaswww*WWWHyper*table.spaceAfter: 20 midaswww*WWWHyper*table.caption.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*table.caption.spaceAfter: 10 midaswww*WWWHyper*table.caption.fontWeight: bold midaswww*WWWHyper*table.caption.createCallback: Set Ingot .^ caption . midaswww*WWWHyper*title.mapCallback: Set Ingot .^^^WWWMain NewTitle HyperGetText() midaswww*WWWHyper*textarea.type: textarea midaswww*WWWHyper*select.tagList: SGMLInputText: %option midaswww*WWWHyper*select.defaultClass: SGMLInputText midaswww*WWWHyper*select*SGMLInputText.type: select midaswww*WWWHyper*tryagain.activateCallback: Invoke Callback .^^^WWWMain...Reread_Document activateCallback midaswww*WWWHyper*tryagain.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*tryagain.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*tryagain.outline: true midaswww*WWWHyper*tryagain.pixmap: tryagain midaswww*WWWHyper*tryagain.sensitive: true midaswww*WWWHyper*tryagain.spaceAfter: 20 midaswww*WWWHyper*tryagain.spaceBefore: 20 midaswww*WWWHyper*tryagain.underlineHeight: 2 midaswww*WWWHyper*tt.fontFamily: courier midaswww*WWWHyper*tt.fontSpacing: m midaswww*WWWHyper*u.underline: 1 midaswww*WWWHyper*ul.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*ul.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*ul.bulletMarker: li midaswww*WWWHyper*ul.bulletType: unordered midaswww*WWWHyper*ul.leftIndent: 20 midaswww*WWWHyper*ul.spaceAfter: 6 midaswww*WWWHyper*ul.spaceBefore: 6 midaswww*WWWHyper*ul.tagList: * SGMLMarkerText: +%li midaswww*WWWHyper*var.fontFamily: courier midaswww*WWWHyper*var.fontSpacing: m midaswww*WWWHyper*var.fontWeight: bold midaswww*WWWHyper*xmp.breakAfter: SGMLBREAK_ALWAYS midaswww*WWWHyper*xmp.breakBefore: SGMLBREAK_ALWAYS midaswww*WWWHyper*xmp.defaultClass: SGMLPlainText midaswww*WWWHyper*xmp.exactTerminator: True midaswww*WWWHyper*xmp.fontFamily: courier midaswww*WWWHyper*xmp.fontSpacing: m midaswww*WWWHyper*xmp.hideIllegalTags: False midaswww*WWWHyper*xmp.supportsEntities: False midaswww*WWWHyper*xmp.tagList: midaswww*WWWHyper.WWWFileRequest: Set Cursor .^^^midaswww watch\nSet Cursor . ""\nSet Ingot .^^^XmMainWindow IsIndex False\nSet Ingot .^^^XmMainWindow IsGIF False\nSet Ingot . WWWFileBase WWWFileRequest\n\ WWW Get . WWWFileRequest IncludeList NewTitle\nSet Ingot .^^^XmMainWindow WWWFile WWWRedirect(WWWFileRequest) midaswww*WWWHyper.WWWFile: If NewTitle=="" Set Ingot .^^^WWWMain NewTitle "Untitled ("++WWWParent(WWWFile)++")"\nWWW Set Title WWWFile NewTitle\nWWW Add History HistoryList NewTitle\nif IsIndex!=KeywordVisible Set Ingot .^^^XmMain\ Window KeywordVisible IsIndex\nif IsPS!=PSState Set Ingot .^^^XmMainWindow PSState IsPS\nif IsPS!=0 Set Ingot .^^^XmMainWindow DocFormat "Postscript"\nelse if IsGIF Set Ingot .^^^XmMainWindow DocForma\ t "GIF Image"\nelse Set Ingot .^^^XmMainWindow DocFormat "HTML"\nSet Ingot .^^^XmMainWindow WWWTitle NewTitle\nSet Ingot .^^^WWWMain NewTitle ""\nSet Cursor .^^^midaswww "" midaswww*WWWHyper.WWWFileExecuteWhenCreated: False midaswww*WWWHyper.WWWFileRequestExecuteWhenCreated: False midaswww*WWWHyper.borderWidth: 0 midaswww*WWWHyper.cacheSize: 10 midaswww*WWWHyper.midasIngots: WWWFileRequest WWWFileBase WWWFile midaswww*WWWKey.translations: #override \n Shift <Btn1Down> : SendMidas("Custom Popup WWW") midaswww*WWWMail.dialogTitle: WWW Mail midaswww*WWWMail.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/mail_window.html" midaswww*WWWMail.mapCallback: Set Sensitive ....WWWMailOk GetValue(....WWWMailToText,value)!="" midaswww*WWWMailDismiss.activateCallback: PopDown .^^ midaswww*WWWMailFormatMenu.midasCreateCallback: Custom Connect WWW "<format>" . midaswww*WWWMailHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWMailOk.activateCallback: Set Ingot . Tempfile WWWTempFile()\nIf Format=="Postscript" Set Ingot .^^^WWWMail FileSpec GetValue(IsPS,file)\nIf Format=="HTML" WWW Dump .^^^XmMainWindow...WWWHy\ per Tempfile\nIf Format=="HTML" Set Ingot .^^^WWWMail FileSpec Tempfile\nif uname()=="VMS" system "MAIL/NOEDIT %FileSpec %GetValue(.^^^WWWMail...WWWMailToText,value)"\nelse system "mail %GetValue(.^^^\ WWWMail...WWWMailToText,value) < %FileSpec"\nIf Format=="HTML" system "%delete %Tempfile "\nPopDown .^^ midaswww*WWWMailToText.valueChangedCallback: Invoke Callback .^^^WWWMail mapCallback midaswww*WWWMain.ConfirmPrint: midaswww*WWWMain.ConfirmPrintExecuteWhenCreated: True midaswww*WWWMain.FontSize: If FontSize=="Small" For All ....WWWHyper...default Set Value . fontSize 12\nElse If FontSize=="Medium" For All ....WWWHyper...default Set Value . fontSize 14\nElse If FontS\ ize=="Large" For All ....WWWHyper...default Set Value . fontSize 17\nIf FontSize=="Small" For All ....WWWHyper...h2 Set Value . fontSize 14\nElse If FontSize=="Medium" For All ....WWWHyper...h2 Set Va\ lue . fontSize 17\nElse If FontSize=="Large" For All ....WWWHyper...h2 Set Value . fontSize 20\nIf FontSize=="Small" For All ....WWWHyper...h1 Set Value . fontSize 17\nElse If FontSize=="Medium" For A\ ll ....WWWHyper...h1 Set Value . fontSize 20\nElse If FontSize=="Large" For All ....WWWHyper...h1 Set Value . fontSize 24\nIf FontSize=="Small" Update Named Resource . "midaswww*WWWHyper*default.fontS\ ize" 12\nElse If FontSize=="Medium" Update Named Resource . "midaswww*WWWHyper*default.fontSize" 14\nElse If FontSize=="Large" Update Named Resource . "midaswww*WWWHyper*default.fontSize" 17\nIf FontS\ ize=="Small" Update Named Resource . "midaswww*WWWHyper*h2.fontSize" 14\nElse If FontSize=="Medium" Update Named Resource . "midaswww*WWWHyper*h2.fontSize" 17\nElse If FontSize=="Large" Update Named R\ esource . "midaswww*WWWHyper*h2.fontSize" 20\nIf FontSize=="Small" Update Named Resource . "midaswww*WWWHyper*h1.fontSize" 17\nElse If FontSize=="Medium" Update Named Resource . "midaswww*WWWHyper*h1.\ fontSize" 20\nElse If FontSize=="Large" Update Named Resource . "midaswww*WWWHyper*h1.fontSize" 24\n midaswww*WWWMain.FontSizeExecuteWhenCreated: False midaswww*WWWMain.HeadingFont: For All ....WWWHyper...h1 Set Value . fontFamily HeadingFont \nFor All ....WWWHyper...h2 Set Value . fontFamily HeadingFont\nFor All ....WWWHyper...h3 Set Value . fontFam\ ily HeadingFont \nFor All ....WWWHyper...h4 Set Value . fontFamily HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h1.fontFamily" HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h2.fon\ tFamily" HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h3.fontFamily" HeadingFont\nUpdate Named Resource . "midaswww*WWWHyper*h4.fontFamily" HeadingFont midaswww*WWWMain.HeadingFontExecuteWhenCreated: False midaswww*WWWMain.IsIndexExecuteWhenCreated: True midaswww*WWWMain.PrintCommandHTML: midaswww*WWWMain.PrintCommandHTMLExecuteWhenCreated: True midaswww*WWWMain.PrintCommandPS: midaswww*WWWMain.PrintCommandPSExecuteWhenCreated: True midaswww*WWWMain.ShowUnrecognizedMarkupExecuteWhenCreated: False midaswww*WWWMain.TextFont: For All ....WWWHyper...default Set Value . fontFamily TextFont\nUpdate Named Resource . "midaswww*WWWHyper*default.fontFamily" TextFont midaswww*WWWMain.TextFontExecuteWhenCreated: False midaswww*WWWMain.UnderlineHeadings: If UnderlineHeadings For All ....WWWHyper...h1 Set Value . underline 2\nElse For All ....WWWHyper...h1 Set Value . underline 0\nIf UnderlineHeadings For All ....WWW\ Hyper...h2 Set Value . underline 1\nElse For All ....WWWHyper...h2 Set Value . underline 0\nIf UnderlineHeadings For All ....WWWHyper...h3 Set Value . underline 1\nElse For All ....WWWHyper...h3 Set V\ alue . underline 0\nIf UnderlineHeadings Update Named Resource . "midaswww*WWWHyper*h1.underline" 2\nElse Update Named Resource . "midaswww*WWWHyper*h1.underline" 0\nIf UnderlineHeadings Update Named \ Resource . "midaswww*WWWHyper*h2.underline" 1\nElse Update Named Resource . "midaswww*WWWHyper*h2.underline" 0\nIf UnderlineHeadings Update Named Resource . "midaswww*WWWHyper*h3.underline" 1\nElse Up\ date Named Resource . "midaswww*WWWHyper*h3.underline" 0 midaswww*WWWMain.UnderlineHeadingsExecuteWhenCreated: False midaswww*WWWMain.WWWFileExecuteWhenCreated: False midaswww*WWWMain.WWWFileNew: Set Cursor .^^^midaswww watch\nSet Cursor ....WWWHyper ""\nUpdate Named Resource . midaswww.iconic false\nCreate Shell midaswww\nSet Value midaswww x GetValue(.^^^midaswww\ ,x)+40\nSet Value midaswww y GetValue(.^^^midaswww,y)+40\nFetch WWWMain:parent=midaswww\nPopup WWWMain\nSet value WWWMain...WWWHyper naturalWidth 0++(GetValue(WWWMain,width)-40)\nSet Ingot WWWMain PSS\ tate 0\nDispatch Queued Commands\nSet Ingot WWWMain WWWFileRequest WWWFileNew\nSet Cursor .^^^midaswww ""\nWWW Register midaswww False midaswww*WWWMain.WWWFileNewExecuteWhenCreated: False midaswww*WWWMain.WWWFileTemp: if Modifier("shift") Set Ingot . WWWFileNew WWWFileTemp\nelse Set Ingot . WWWFileRequest WWWFileTemp midaswww*WWWMain.WWWFileTempExecuteWhenCreated: False midaswww*WWWMain.WWWTitle: Set Value .^ title WWWTitle midaswww*WWWMain.WWWTitleExecuteWhenCreated: False midaswww*WWWMain.WWW_Gateway: WWW Set Gateway WWW_Gateway midaswww*WWWMain.WWW_GatewayExecuteWhenCreated: False midaswww*WWWMain.WWW_Home: midaswww*WWWMain.WWW_HomeExecuteWhenCreated: True midaswww*WWWMain.helpCallback: Set Ingot . WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/overview.html" midaswww*WWWMain.mainWindowMarginWidth: 2 midaswww*WWWMain.midasCreateCallback: Set Value .^ iconPixmap MidasWWWIcon\nCustom Create WWW .\nFetch WWWSearch .\nCreate Widget . SGMLHyper WWWHyper\nSet Ingot . IncludeList CreateList("IncludeList"\ )\nSet Ingot . HistoryList CreateList(HistoryList)\nSet Ingot . IsPS 0\nSet Ingot .^ Popup Convert(0,"Int")\nif argc>1 Set ingot . WWW_Home argv[1]\nelse if getenv(WWW_HOME)!="" Set ingot . WWW_Home g\ etenv(WWW_HOME)\nelse Set ingot . WWW_Home GetAppResource(.^,home)\nSet Confirm Exit . GetAppResource(.^,confirmExit)\nSet ingot . ShowTitle GetAppResource(.^,"ShowTitle")\nSet ingot . ShowURL GetAppR\ esource(.^,"ShowURL")\nSet ingot . WWW_Gateway GetAppResource(.^,gateway)\nSet ingot . HotList GetAppResource(.^,hotList)\nSet ingot . PrintCommandHTML GetAppResource(.^,printCommandHTML)\nSet ingot .\ PrintCommandPS GetAppResource(.^,printCommandPS)\nSet ingot . ConfirmPrint GetAppResource(.^,confirmPrint)\nSet ingot . ShowUnrecognizedMarkup GetAppResource(.^,"ShowUnrecognizedMarkup")\nSet Ingot .\ FontSize GetAppResource(.^,"fontSize")\nSet Ingot . HeadingFont GetAppResource(.^,"headingFont")\nSet Ingot . TextFont GetAppResource(.^,"textFont")\nSet Ingot . UnderlineHeadings GetAppResource(.^,"\ underlineHeadings")\nif uname()=="VMS" Set Ingot . delete "delete/noconfirm"\nelse Set Ingot . delete "rm -f"\nif uname()=="VMS" Set Ingot . copy "copy"\nelse Set Ingot . copy "cp" midaswww*WWWMain.midasIngots: WWWFile WWWFileNew WWWFileTemp WWWFileRequest IsIndex IsPS IsGIF KeywordVisible PSState WWWTitle WWW_Home WWW_Gateway DocFormat ShowUnrecognizedMarkup ShowTitle ShowURL PrintCommandPS F\ ontSize HeadingFont TextFont UnderlineHeadings midaswww*WWWMain.scrollingPolicy: XMAUTOMATIC midaswww*WWWMain.translations: #override \n:<ConfigureNotify> : SendMidas("set value ....WWWHyper naturalWidth 0++(GetValue(.,width)-35)") midaswww*WWWMenu*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*WWWMenu*XmToggleButtonGadget.visibleWhenOff: True midaswww*WWWMenu.midasCreateCallback: Custom Connect WWW "<main_menu>" . midaswww*WWWOpenFTP.dialogTitle: Open FTP Document midaswww*WWWOpenFTP.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/open_ftp_doc.html" midaswww*WWWOpenFTPApply.activateCallback: Set Ingot .^^^WWWMain WWWFileRequest "ftp://"++GetValue(.^^...WWWOpenFTPHost,value)++":"++GetValue(.^^...WWWOpenFTPPort,value)++GetValue(.^^...WWWOpenFTPPath,value) midaswww*WWWOpenFTPDismiss.activateCallback: PopDown .^^ midaswww*WWWOpenFTPHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWOpenFTPHost.value: info.cern.ch midaswww*WWWOpenFTPOk.activateCallback: Popdown .^^\nInvoke Callback .^.WWWOpenFTPApply activateCallback midaswww*WWWOpenFTPPassword.value: %u@%h midaswww*WWWOpenFTPPath.value: / midaswww*WWWOpenFTPPort.value: 21 midaswww*WWWOpenFTPUserid.value: anonymous midaswww*WWWOpenGopher.dialogTitle: Open Gopher Document midaswww*WWWOpenGopher.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest Temp "http://www-midas.slac.stanford.edu:80/midasv21/open_gopher_doc.html" midaswww*WWWOpenGopherApply.activateCallback: Set Ingot .^^^WWWMain WWWFileRequest "gopher://"++GetValue(.^^...WWWOpenGopherHost,value)++":"++GetValue(.^^...WWWOpenGopherPort,value)++"/"++GetValue(.^^...WWWO\ penGopherType,value)++GetValue(.^^...WWWOpenGopherPath,value) midaswww*WWWOpenGopherDismiss.activateCallback: PopDown .^^ midaswww*WWWOpenGopherHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWOpenGopherHost.value: gopher.micro.umn.edu midaswww*WWWOpenGopherName.value: Home of Gopher midaswww*WWWOpenGopherOk.activateCallback: PopDown .^^\nInvoke Callback .^.WWWOpenGopherApply activateCallback midaswww*WWWOpenGopherPath.value: / midaswww*WWWOpenGopherPort.value: 70 midaswww*WWWOpenGopherType.value: 1 midaswww*WWWOpenHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWOpenLocal.applyCallback: midaswww*WWWOpenLocal.cancelCallback: Popdown . midaswww*WWWOpenLocal.dialogTitle: Open Local Document midaswww*WWWOpenLocal.helpCallback: Set Ingot .^^^XmMainWindow WWWFileTemp "http://www-midas.slac.stanford.edu:80/midasv21/open_local_doc.html" midaswww*WWWOpenLocal.okCallback: PopDown . \nSet Ingot .^^^WWWMain WWWFileRequest "local:"++GetValue(.,dirSpec) midaswww*WWWOptionShowProgress.valueChangedCallback: Set Sensitive .^.WWWOptionShowProgressTime GetValue(.,set)\nSet Sensitive .^.WWWShowProgressUpdateTime GetValue(.,set)\nSet Sensitive .^^^WWWParame\ ters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave False midaswww*WWWOptionShowProgressTime.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...W\ WWParamSave False\n midaswww*WWWPS.PSState: Set Sensitive . PSState!=0 midaswww*WWWPS.PSStateExecuteWhenCreated: False midaswww*WWWPS.midasIngots: PSState midaswww*WWWParamApply.activateCallback: If GetValue(.^^^...WWWParamCacheEnable,set) Set Value .^^^XmMainWindow...WWWHyper cacheSize GetValue(.^^^...WWWParamCacheSize,value)\nElse Set Value .^^^XmMain\ Window...WWWHyper cacheSize 0\nSet Ingot .^^^XmMainWindow WWW_Home GetValue(.^^^...WWWParamHome,value)\nSet Ingot .^^^XmMainWindow WWW_Gateway GetValue(.^^^...WWWParamGate,value)\nSet Confirm Exit . G\ etValue( .^^^...ConfirmExit,set)\nif GetValue(.^^^...WWWOptionShowProgress,set) WWW Set Waiting Time GetValue(.^^^...WWWOptionShowProgressTime,value)*100\nelse WWW Set Waiting Time -1\nif GetValue(.^^\ ^...EnableHTTP2,set) WWW Set HTTP Level 1.0\nelse WWW Set HTTP Level 0.9\nWWW Set Update Time GetValue(.^^^...WWWShowProgressUpdateTime,value)*100\nInvoke Callback .^^^^WWWParameters mapCallback midaswww*WWWParamApply.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Apply" midaswww*WWWParamCache.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Caching" midaswww*WWWParamCacheEnable.valueChangedCallback: Set Sensitive .^.WWWParamCacheSize GetValue(.,set)\nSet Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamR\ eset True\nSet Sensitive .^^^WWWParameters...WWWParamSave False midaswww*WWWParamCacheSize.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamS\ ave False midaswww*WWWParamDismiss.activateCallback: PopDown .^^^WWWParameters midaswww*WWWParamDismiss.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Dismiss" midaswww*WWWParamGate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Gateway" midaswww*WWWParamGate.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave F\ alse midaswww*WWWParamHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWParamHome.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Home" midaswww*WWWParamHome.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...WWWParamSave F\ alse midaswww*WWWParamOk.activateCallback: If GetValue(.^.WWWParamApply,sensitive) Invoke Callback .^.WWWParamApply activateCallback\nPopDown .^^^WWWParameters midaswww*WWWParamOk.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Ok" midaswww*WWWParamReset.activateCallback: Invoke Callback .^^^WWWParameters mapCallback midaswww*WWWParamReset.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Reset" midaswww*WWWParamSave.activateCallback: Store App Resource .^^^midaswww confirmExit GetConfirmExit(.)\nStore App Resource .^^^midaswww home WWW_Home\nStore App Resource .^^^midaswww gateway WWW_Gatewa\ y\nStore App Resource .^^^midaswww waitingTimeOut WWWWaitingTime()\nStore App Resource .^^^midaswww updateTimeOut WWWUpdateTime()\nStore App Resource .^^^midaswww defaultHTTPProtocol WWWHTTPLevel()\nS\ tore Resource .^^^XmMainWindow...WWWHyper cacheSize midaswww*WWWParamSave.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html#Save" midaswww*WWWParameters.dialogTitle: WWW Options midaswww*WWWParameters.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/options.html" midaswww*WWWParameters.mapCallback: Set Value ....WWWParamHome value WWW_Home\nSet Value ....WWWParamGate value WWW_Gateway\nSet Ingot . N GetValue(.^^^XmMainWindow...WWWHyper,cacheSize)\nif N>0 Set V\ alue ....WWWParamCacheSize value N\nelse Set Value ....WWWParamCacheSize value 2\nSet Value ....WWWParamCacheEnable set N>0\nSet Value ....ConfirmExit set GetConfirmExit(.)\nSet Value ....WWWOptionSho\ wProgress set WWWWaitingTime()>=0\nif WWWWaitingTime()>=0 Set Value ....WWWOptionShowProgressTime value WWWWaitingTime()/100\nSet Value ....WWWShowProgressUpdateTime value WWWUpdateTime()/100\nSet Val\ ue ....EnableHTTP2 set WWWHTTPLevel()=="1.0"\nSet Sensitive ....WWWOptionShowProgressTime WWWWaitingTime()>=0\nSet Sensitive ....WWWShowProgressUpdateTime WWWWaitingTime()>=0\nSet Sensitive ....WWWPar\ amCacheSize N>0\nSet Sensitive ....WWWParamApply False\nSet Sensitive ....WWWParamReset False\nSet Sensitive ....WWWParamSave True midaswww*WWWPrint.dialogTitle: WWW Print ... midaswww*WWWPrint.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/print_window.html" midaswww*WWWPrintCancel.activateCallback: PopDown .^^ midaswww*WWWPrintConfirm.dialogTitle: WWW Print Confirm midaswww*WWWPrintConfirm.midasCreateCallback: PopDown ..Cancel midaswww*WWWPrintFormatMenu.midasCreateCallback: Custom Connect WWW "<format>" . midaswww*WWWPrintHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWPrintOk.activateCallback: If Format=="Postscript" Set Ingot . Tempfile GetValue(IsPS,file)\nIf Format=="HTML" Set Ingot . Tempfile WWWTempFile()\nIf Format=="HTML" WWW Dump .^^^XmMainWindo\ w...WWWHyper Tempfile\nSet Ingot . PrintCommand GetValue(.^^^...WWWPrintCommandText,value)\nsystem PrintCommand++" "++Tempfile\nIf Format=="HTML" system "%delete %Tempfile"\nIf ConfirmPrint Set Value \ .^^^XmMainWindow###WWWPrintConfirm messageString "Document '"++WWWTitle++"' printed (Command: "++PrintCommand++")"\nIf ConfirmPrint Popup .^^^XmMainWindow...WWWPrintConfirm\nPopDown .^^ midaswww*WWWPrintOptions.dialogTitle: Print Options midaswww*WWWPrintOptions.helpCallback: Set Ingot .^^^WWWMain WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/print_options.html" midaswww*WWWPrintOptions.mapCallback: Set Value ....WWWPrintOptionsHTMLText value PrintCommandHTML\nSet Value ....WWWPrintOptionsPostscriptText value PrintCommandPS\nSet Value ....WWWPrintOptionsCon\ firm set ConfirmPrint\nSet Sensitive ....WWWPrintOptionsReset False\nSet Sensitive ....WWWPrintOptionsApply False midaswww*WWWPrintOptionsApply.activateCallback: Set Ingot .^^^XmMainWindow PrintCommandHTML GetValue(.^^^...WWWPrintOptionsHTMLText,value)\nSet Ingot .^^^XmMainWindow PrintCommandPS GetValue(.^^^...\ WWWPrintOptionsPostscriptText,value)\nSet Ingot .^^^XmMainWindow ConfirmPrint GetValue(.^^^...WWWPrintOptionsConfirm,set)\nStore App Resource .^^^midaswww "confirmPrint" ConfirmPrint\nStore App Resour\ ce .^^^midaswww "printCommandHTML" PrintCommandHTML\nStore App Resource .^^^midaswww "printCommandPS" PrintCommandPS\nSet Sensitive .^^^...WWWPrintOptionsApply False\nSet Sensitive .^^^...WWWPrintOpti\ onsReset False\n midaswww*WWWPrintOptionsCancel.activateCallback: PopDown .^^ midaswww*WWWPrintOptionsConfirm.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\nSet Sensitive .^^^...WWWPrintOptionsReset True midaswww*WWWPrintOptionsHTMLText.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\nSet Sensitive .^^^...WWWPrintOptionsReset True\n midaswww*WWWPrintOptionsHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWPrintOptionsOk.activateCallback: Invoke Callback .^.WWWPrintOptionsApply activateCallback\nInvoke Callback .^.WWWPrintOptionsCancel activateCallback midaswww*WWWPrintOptionsPostscriptText.valueChangedCallback: Set Sensitive .^^^...WWWPrintOptionsApply True\nSet Sensitive .^^^...WWWPrintOptionsReset True\n midaswww*WWWPrintOptionsReset.activateCallback: Invoke Callback .^^^WWWPrintOptions mapCallback midaswww*WWWPrint_popup.Format: If Format=="Postscript" Set Value ....WWWPrintCommandText value PrintCommandPS\nIf Format=="HTML" Set Value ....WWWPrintCommandText value PrintCommandHTML midaswww*WWWPrint_popup.FormatExecuteWhenCreated: True midaswww*WWWPrint_popup.PrintCommandHTML: If Format=="HTML" Set Value ....WWWPrintCommandText value PrintCommandHTML midaswww*WWWPrint_popup.PrintCommandHTMLExecuteWhenCreated: False midaswww*WWWPrint_popup.PrintCommandPS: If Format=="Postscript" Set Value ....WWWPrintCommandText value PrintCommandPS midaswww*WWWPrint_popup.PrintCommandPSExecuteWhenCreated: False midaswww*WWWPrint_popup.midasIngots: Format PrintCommandHTML midaswww*WWWSave.DocFormat: midaswww*WWWSave.DocFormatExecuteWhenCreated: True midaswww*WWWSave.SaveAs: midaswww*WWWSave.SaveAsExecuteWhenCreated: True midaswww*WWWSave.activateCallback: If IsPs!=0 System "%copy %GetValue(IsPS,file) %GetValue(.^...XmTextField,value)"\nElse WWW Dump .^^^XmMainWindow...WWWHyper GetValue(.^...XmTextField,value)\nPopDown\ .^ midaswww*WWWSave.cancelCallback: Popdown . midaswww*WWWSave.dialogTitle: Save Document midaswww*WWWSave.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/save.html" midaswww*WWWSave.midasIngots: DocFormat SaveAs midaswww*WWWSave.okCallback: Set Ingot . SaveAs GetValue(.,dirSpec)\nIf Format=="Postscript" Set Ingot . PSFile GetValue(IsPS,file) \nIf Format=="HTML" WWW Dump .^^^XmMainWindow...WWWHyper SaveAs\nEls\ e If Format=="Postscript" System "%copy %PSFile %SaveAs"\nPopDown . midaswww*WWWSave.selectionLabelString: Save As midaswww*WWWSaveFileAs.cancelCallback: PopDown . midaswww*WWWSaveFileAs.dialogTitle: Save File As... midaswww*WWWSaveFileAs.mapCallback: Set Ingot . result ""\nSet Value ....WWWSaveFileAsText value WWWParent(WWWFile)\nSet Value . dirSpec GetValue(.,directory)++file midaswww*WWWSaveFileAs.okCallback: Set Ingot . result GetValue(.,"dirSpec")\nPopDown . midaswww*WWWSaveFileAs.selectionLabelString: Save As midaswww*WWWSaveFileAsText.editable: false midaswww*WWWSaveFormatMenu.midasCreateCallback: Custom Connect WWW "<format>" . midaswww*WWWSaveHelp.activateCallback: Invoke Callback .^ helpCallback midaswww*WWWSearch.DocFormat: If DocFormat!="HTML" PopDown . midaswww*WWWSearch.dialogTitle: Search Document midaswww*WWWSearch.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/search_window.html" midaswww*WWWSearch.midasIngots: DocFormat midaswww*WWWSearchCancel.activateCallback: Popdown .^^WWWSearch midaswww*WWWSearchFind.activateCallback: WWW Search .^^^...SGMLHyper GetValue(.^^WWWSearch...WWWSearchText,value) GetValue(.^^WWWSearch...WWWSearchCaseSensitive,set) GetValue(.^^WWWSearch...WWWSearchC\ ontinue,set) midaswww*WWWSearchHelp.activateCallback: Invoke Callback .^^ helpCallback midaswww*WWWShowProgressUpdateTime.valueChangedCallback: Set Sensitive .^^^WWWParameters...WWWParamApply True\nSet Sensitive .^^^WWWParameters...WWWParamReset True\nSet Sensitive .^^^WWWParameters...W\ WWParamSave False\n midaswww*WWWSource*default.color: Black midaswww*WWWSource*default.defaultClass: SGMLPlainText midaswww*WWWSource*default.fontFamily: courier midaswww*WWWSource*default.fontSpacing: m midaswww*WWWSource.BorderWidth: 0 midaswww*WWWSource.WWWFile: If ShowSource WWW Put . WWWSource(.^^^XmMainWindow...WWWHyper) midaswww*WWWSource.WWWFileExecuteWhenCreated: False midaswww*WWWSource.midasIngots: WWWFile midaswww*WWWTruncate.dialogTitle: Truncated... midaswww*WWWTruncate.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/truncate.html" midaswww*WWWWDocInfoDocNameText.WWWFile: Set Value . value WWWParent(WWWFile) midaswww*WWWWDocInfoDocNameText.WWWFileExecuteWhenCreated: True midaswww*WWWWDocInfoDocNameText.midasIngots: WWWFile midaswww*WWWWaiting.dialogStyle: XmDIALOG_MODELESS midaswww*WWWWaiting.dialogTitle: Waiting... midaswww*WWWWaiting_popup.overrideRedirect: true midaswww*XmCascaseButtonGadget: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*XmDialogShell*Postscript.DocFormat: Set Sensitive . DocFormat=="Postscript"\nIf DocFormat=="Postscript" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\nIf DocFormat=="Postscript" Invoke\ Callback . activateCallback midaswww*XmMenuShell*FontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*XmRowColumn.Text.DocFormat: Set Sensitive . DocFormat=="Text"\nIf DocFormat=="Text" Set Value .^^^XmMenuShell^.XmRowColumn menuHistory .\nIf DocFormat=="Text" Invoke Callback . activateCallba\ ck midaswww*XmRowColumn.Text.DocFormatExecuteWhenCreated: True midaswww*XmRowColumn.Text.midasIngots: DocFormat midaswww*XmScrollBar.foreground: #d3d3d3d3d3d3 XXmidaswww*XmText.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1 XXmidaswww*XmTextField.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1 midaswww*confirmPrint: False midaswww*gv_manager.container.mapCallback: Set Ingot .^^^XmMainWindow IsPS GetValueRaw(.,child) midaswww*gv_manager.container.unmapCallback: Set Ingot .^^^XmMainWindow IsPS 0 midaswww*gv_manager.managementPolicy: ManageOne midaswww*printCommandHTML: lpr midaswww*printCommandPS: lpr midaswww*pulldownmenu*fontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1 midaswww*rc2.orientation: XmHORIZONTAL midaswww.ShowTitle: true midaswww.ShowURL: true midaswww.ShowUnrecognizedMarkup: false midaswww.WWWMain*XmRowColumn.Help.helpCallback: Set Ingot .^^^XmMainWindow WWWFileRequest "http://www-midas.slac.stanford.edu:80/midasv21/menus.html#Help" midaswww.confirmExit: True midaswww.confirmPrint: true midaswww.defaultHTTPProtocol: 1.0 midaswww.filetype_$http_destination: html midaswww.filetype_Z_binary: true midaswww.filetype_Z_command: uncompress -c midaswww.filetype_Z_filter: true midaswww.filetype_au_destination: file midaswww.filetype_au_icon: music midaswww.filetype_basic_destination: file midaswww.filetype_basic_icon: music midaswww.filetype_binary_destination: xbm midaswww.filetype_eps_destination: ps midaswww.filetype_eps_icon: ps midaswww.filetype_exe_binary: true midaswww.filetype_exe_destination: file midaswww.filetype_exe_icon: floppy midaswww.filetype_gif_binary: true midaswww.filetype_gif_destination: gif midaswww.filetype_gif_icon: graphics midaswww.filetype_gz_binary: true midaswww.filetype_gz_command: gzip -dc midaswww.filetype_gz_filter: true midaswww.filetype_html_destination: html midaswww.filetype_html_icon: web midaswww.filetype_jpeg_binary: true midaswww.filetype_jpeg_command: djpeg -colors 256 -gif midaswww.filetype_jpeg_destination: gif midaswww.filetype_jpeg_icon: graphics midaswww.filetype_jpg_binary: true midaswww.filetype_jpg_command: djpeg -colors 256 -gif midaswww.filetype_jpg_destination: gif midaswww.filetype_jpg_icon: graphics midaswww.filetype_mpeg_binary: true midaswww.filetype_mpeg_command: mpeg_play -quiet midaswww.filetype_mpeg_destination: multimedia midaswww.filetype_mpeg_icon: movie_icon midaswww.filetype_mpeg_shellflag: false midaswww.filetype_mpeg_tempfile: true midaswww.filetype_mpg_binary: true midaswww.filetype_mpg_command: mpeg_play -quiet midaswww.filetype_mpg_destination: multimedia midaswww.filetype_mpg_icon: movie_icon midaswww.filetype_mpg_shellflag: false midaswww.filetype_mpg_tempfile: true midaswww.filetype_plain_destination: text midaswww.filetype_pnm_binary: true midaswww.filetype_pnm_command: ppmquant 256 | ppmtogif midaswww.filetype_pnm_destination: gif midaswww.filetype_pnm_icon: graphics midaswww.filetype_postscript_destination: ps midaswww.filetype_postscript_icon: ps midaswww.filetype_ppm_binary: true midaswww.filetype_ppm_command: ppmquant 256 | ppmtogif midaswww.filetype_ppm_destination: gif midaswww.filetype_ppm_icon: graphics midaswww.filetype_ps_destination: ps midaswww.filetype_ps_icon: ps midaswww.filetype_shar_binary: true midaswww.filetype_shar_destination: file midaswww.filetype_shar_icon: floppy midaswww.filetype_tar_binary: true midaswww.filetype_tar_destination: file midaswww.filetype_tar_icon: floppy midaswww.filetype_tiff_binary: true midaswww.filetype_tiff_command: tifftopnm | ppmtogif midaswww.filetype_tiff_destination: gif midaswww.filetype_tiff_icon: graphics midaswww.filetype_tiff_tempfile: true midaswww.filetype_txt_destination: text midaswww.filetype_x-compress_binary: true midaswww.filetype_x-compress_command: uncompress -c midaswww.filetype_x-compress_filter: true midaswww.filetype_x-tiff_binary: true midaswww.filetype_x-tiff_command: tifftopnm | ppmtogif midaswww.filetype_x-tiff_destination: gif midaswww.filetype_x-tiff_icon: graphics midaswww.filetype_x-tiff_tempfile: true midaswww.filetype_x-xbitmap_destination: xbm midaswww.filetype_x-xbitmap_icon: floppy midaswww.filetype_x-zip_binary: true midaswww.filetype_x-zip_command: gzip -dc midaswww.filetype_x-zip_filter: true midaswww.filetype_x-zip_icon: floppy midaswww.filetype_xbm_destination: xbm midaswww.filetype_xbm_icon: floppy midaswww.filetype_z_binary: true midaswww.filetype_z_command: gzip -dc midaswww.filetype_z_filter: true midaswww.filetypes: ps eps Z z gz gif jpeg jpg html ppm pnm tiff exe tar $http xbm au txt mpeg mpg basic plain x-xbitmap x-tiff postscript binary shar x-compress x-zip midaswww.font: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1 midaswww.fontSize: Large midaswww.gateway: http://htmlgate.slac.stanford.edu:2784 midaswww.geometry: 700x800 midaswww.headingFont: helvetica midaswww.headingsFont: Helvetica midaswww.home: http://slacvm.slac.stanford.edu:80/FIND/slac.html midaswww.hotList: <title>HotList</title><nocache><h1><img pixmap=flame>HotList</h1>\nClick on the <img pixmap=kill> icon to remove an item from the list, or\n<a href=http://www-midas.slac.stanford.edu:80\ /midasv21/hotlist.html>here</a> for more help.\n<h6><kill><a href=news:comp.infosystems.www>Comp.Infosystems.WWW</a></h6><h6><kill><a href = http://info.cern.ch/hypertext/WWW/TheProject.html > The Wor\ ld Wide Web project </a></h6>\n<h6><kill><a href = http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html > What's New With NCSA Mosaic </a></h6><h6><kill><a href = http://sunsite.unc.edu/ex\ po/ticket_office.html > EXPO Ticket Office </a></h6><h6><kill><a href = http://aka.dcrt.nih.gov > Rob's Multimedia Lab </a></h6><h6><kill><a href = http://www.ncsa.uiuc.edu/demoweb/url-primer.html > A\ Beginner's Guide to URLs </a></h6><h6><kill><a href = http://www.ncsa.uiuc.edu/demoweb/html-primer.html > A Beginner's Guide to HTML </a></h6><h6><kill><a href = http://www-midas.slac.stanford.edu/tonyw\ ww/talk/talk.html > World-Wide Web: An Illustrated Seminar </a></h6><h6><kill><a href = http://pulua.hcc.hawaii.edu/guide/www.guide.html > Entering the World-Wide Web: A Guide to Cyberspace </a></h6> midaswww.mimeencode: x-compress x-zip midaswww.mimetypes: text/plain text/html image/gif image/jpeg image/x-xbitmap image/x-tiff video/mpeg audio/basic application/postscript archive/tar archive/shar application/binary midaswww.printCommandHTML: lpr midaswww.printCommandPS: lpr midaswww.sensitiveColor: blue midaswww.sensitiveFontWeight: bold midaswww.startup: Open Uid midaswww.uid .\nPopup WWWMain\nWWW Init .\nSet value ....WWWHyper naturalWidth 0++(GetValue(..WWWMain,width)-40)\nSet Ingot ..WWWMain PSState 0\nDispatch Queued Commands\nIn\ voke Callback ....Home_Page activateCallback\nSet Ingot Midas_Main NWin 1\nWWW Register . False midaswww.textFont: new century schoolbook midaswww.translations: #override \n <PropertyNotify> URL : SendMidas("Popup ..XmMainWindow ; Set Ingot ..XmMainWindow WWWFileTemp GetProperty(.,URL)") midaswww.underlineHeadings: true midaswww.updateTimeOut: 200 midaswww.version: 2.1 midaswww.visitedColor: #59597171EAEA midaswww.visitedFontWeight: medium midaswww.waitingTimeOut: 2000 ! ! Color preferences ! midaswww.sensitiveUnderline: 1 midaswww.sensitiveUnderlineStyle: SGMLLINE_STYLE_DASHED midaswww.visitedUnderline: 1 midaswww.visitedUnderlineStyle: SGMLLINE_STYLE_DOTTED �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/HPUX.Install���������������������������������������������������������������������������100666 � 21345 � 173 � 2276 6003421741 13524� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Changes: *** In Midas.uil Make died on the UIL Pixmap Declarations. These were massaged slightly: **From this Icon declaration: HandyPakIcon: exported icon(color_table = color_table(background color = ' ', foreground color = '*'), '....lines of Icon data' ); MidasIcon: exported icon(color_table = color_table(background color = ' ', foreground color = '*'), '....lines of Icon data' ); **To this declaration with a separate color definition table: coltab: color_table(background color = ' ', foreground color = '*'); HandyPakIcon: exported icon(color_table = coltab, '....lines of Icon data' ); MidasIcon: exported icon(color_table = coltab, '....lines of Icon data' ); ***In Makefile.hp Set the libs and include macros to use Motif 1.2 and X11R5 To Build: "make -f Makefile.hp" should do the trick. Hint: If you want to customize any of the defaults i.e. colours, URL's of interest the .ad (app defaults) files seem to be the place to start. If I am reading CommonMakfile correctly the ting to do then would be to make world, in this case that would mean... "make -f Makefile.hp world" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������midaswww-2.1/Authors.html���������������������������������������������������������������������������100644 � 21345 � 173 � 1236 6003426326 13716� 0����������������������������������������������������������������������������������������������������ustar �steff���������������������������csc�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� <title>Midas WWW Authors</title> <address> Mail Stop 71<p> Stanford Linear Accelerator Center<p> PO Box 4349<p> Stanford<p> CA 94309 USA</address> <hr> <h1>Authors</h1> The Midas WWW browser is written by<p> <img src="http://pubweb.parc.xerox.com:80/hypertext/people/med/Tony_Johnson.gif"><b>Tony Johnson</b> and<p> <img src="http://slacvx.slac.stanford.edu:80/chuynhwww/chung.gif"><b>Chung Huynh</b>.<p> It is of course provided with absolutely no waranty of any kind. We will attempt to fix bugs that are reported to us, so feel free to send bug reports to the e-mail address below. <p> <hr> <i>Tel:</i> (415) 926 2278, <i>E-mail:</i> MidasWWW@Slac.Stanford.Edu ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������