Form Show_textlib_form /* Demo of text scrolling and access via Procedural Escape to a text library Updated for V1.1 COPYRIGHT (c) 1989 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED. THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. */ /* This form shows scrolling an array of text lines filled from a text library via a procedural escape By default, the form uses Sys$help:Forms$FDE_Help.hlb. You may change this on the panel to use a different library. The form calls a procedural escape called "Textlib". Information on this is contained in the file forms$demo_textlib.cob The V1.0 version used scroll by page. The V1.1 version uses scroll by line and allows the user to scroll by page. The page increment/descrement is done by calling a PEU which is contained in FORMS$DEMO_SHOW_TEXTLIB.COB The V1.1 version also optimizes on data transfer by using a DESTINATION clause on the text group. */ Form Data FORM_VERSION Character(10) Value "1.01-03 " REST_POSITION Character(1) TEXTLIB_NAME Character(30) Value "Sys$Help:Forms$FDE_Help.hlb " TEXTLIB_STATUS Longword Integer TEXTLIB_ACTION Character(1) Value "1" KEY_NAME Character(30) Value "MAIN_HELP " ONE_LINE Longword Integer Value 1 CURRENT_TXT_LINE Longword Integer NEXT_FIRST_TXT_LINE Longword Integer FIRST_TXT_LINE Longword Integer Group TXT_GRP Occurs 125 Current CURRENT_TXT_LINE TXT_LINE Character(65) End Group TXT_GRP_MAX Longword Integer TXT_GRP_DISPLAYS Longword Integer Value 10 TXT_GRP_BASE Longword Integer Value 1 TXT_GRP_MAX_FIRST Longword Integer TXT_GRP_MAX_FIRST_BY_PAGE Longword Integer /* txt_grp_max_first gets the value that FIRST will be when the last element is displayed on the last line of the display ie (max - (displays - 1)) txt_grp_max_first_by_page gets the value that FIRST will be when the last element is displayed on the last page when using SCROLL BY PAGE syntax ie (max - (rem - 1)) where rem = max/displays These values are calculated by the PEU. */ TXT_GRP_UP_MARKER character(1) TXT_GRP_DOWN_MARKER character(1) End Data Form Data FDE_ROW Word Integer FDE_COL Word Integer Group FDE_HELP_KEYS Occurs 6 Current FDE_ROW Group FDE_HELP_KEY_LINE Occurs 3 Current FDE_COL FDE_HELP_KEY Character(24) End Group End Group End Data Form Record PE_TEXT_GROUP /* We do not pass the group data out to the PEU and we just pass back up to the last line used. */ TXT_GRP_MAX Longword Integer Group TXT_GRP Occurs 125 TXT_LINE Character(65) End Group Transfer TXT_GRP_MAX Destination TXT_GRP_MAX Transfer TXT_GRP.TXT_LINE Destination TXT_GRP(1:TXT_GRP_MAX).TXT_LINE End Record Layout CHARACTER_CELL_TERMINALS Device Terminal Type %VT100 End Device Units Characters Size 24 Lines by 80 Columns Viewport TEXT_SCROLL_VP Lines 1 Through 18 Columns 1 Through 80 End Viewport Viewport FDE_KEYS_VP Lines 5 Through 13 Columns 1 Through 80 End Viewport Viewport INFO_VP Lines 19 Through 21 Columns 1 Through 80 End Viewport Viewport HELP_VP Lines 19 Through 21 Columns 1 Through 80 End Viewport Viewport MESSAGE_VP Lines 22 Through 24 Columns 1 Through 80 End Viewport Function LEFT_ARROW Is %LEFT End Function Function RIGHT_ARROW Is %RIGHT End Function Function UP_ARROW Is %UP End Function Function DOWN_ARROW Is %DOWN End Function Function NEW_TEXT Is %DO End Function Function TOP_OF_GROUP Is (%PF1 %PREV_SCREEN) End Function Function END_OF_GROUP Is (%PF1 %NEXT_SCREEN) End Function Function MENU_SELECT Is %SELECT End Function Function SHOW_NUMBERS Is %F17 End Function Function CLEAR_MESSAGES Is %F20 End Function Internal Response INIT_KEYS Let FDE_HELP_KEYS(1).FDE_HELP_KEY_LINE(1).FDE_HELP_KEY = "FORM_DEFINITION" Let FDE_HELP_KEYS(1).FDE_HELP_KEY_LINE(2).FDE_HELP_KEY = "GS_MAIN_FMS_OP" Let FDE_HELP_KEYS(1).FDE_HELP_KEY_LINE(3).FDE_HELP_KEY = "GS_MAIN_FMS_OP_ALT" Let FDE_HELP_KEYS(2).FDE_HELP_KEY_LINE(1).FDE_HELP_KEY = "GS_STRUCT_DATA_OP" Let FDE_HELP_KEYS(2).FDE_HELP_KEY_LINE(2).FDE_HELP_KEY = "GS_STRUCT_FIELDS_OP" Let FDE_HELP_KEYS(2).FDE_HELP_KEY_LINE(3).FDE_HELP_KEY = "GS_STRUCT_FORM_OP" Let FDE_HELP_KEYS(3).FDE_HELP_KEY_LINE(1).FDE_HELP_KEY = "GS_STRUCT_GROUPS_OP" Let FDE_HELP_KEYS(3).FDE_HELP_KEY_LINE(2).FDE_HELP_KEY = "GS_STRUCT_ICONS_OP" Let FDE_HELP_KEYS(3).FDE_HELP_KEY_LINE(3).FDE_HELP_KEY = "GS_STRUCT_LAYOUTS_OP" Let FDE_HELP_KEYS(4).FDE_HELP_KEY_LINE(1).FDE_HELP_KEY = "GS_STRUCT_LITERALS_OP" Let FDE_HELP_KEYS(4).FDE_HELP_KEY_LINE(2).FDE_HELP_KEY = "GS_STRUCT_PANELS_OP" Let FDE_HELP_KEYS(4).FDE_HELP_KEY_LINE(3).FDE_HELP_KEY = "GS_STRUCT_RECORDS_OP" Let FDE_HELP_KEYS(5).FDE_HELP_KEY_LINE(1).FDE_HELP_KEY = "GS_STRUCT_VIEWPORTS_OP" Let FDE_HELP_KEYS(5).FDE_HELP_KEY_LINE(2).FDE_HELP_KEY = "LAYOUT_DEFINITION" Let FDE_HELP_KEYS(5).FDE_HELP_KEY_LINE(3).FDE_HELP_KEY = "MAIN_HELP" Let FDE_HELP_KEYS(6).FDE_HELP_KEY_LINE(1).FDE_HELP_KEY = "MENU_1" Let FDE_HELP_KEYS(6).FDE_HELP_KEY_LINE(2).FDE_HELP_KEY = "PANEL_DEFINITION" /* Note that field (6,3) is deactivated when the panel is brought up. This is so that a blank key name cannot be selected. */ End Response Internal Response MOVE_UP If (FIRST_TXT_LINE = 1 ) Then Message "no more up there" Else Call "FORMS$DEMO_SUBTRACT_LONGWORD" Using By Reference FIRST_TXT_LINE By Reference ONE_LINE By Reference FIRST_TXT_LINE End If End Response Internal Response MOVE_DOWN If (FIRST_TXT_LINE >= TXT_GRP_MAX_FIRST) Then Message "no more down there" Else Call "FORMS$DEMO_ADD_LONGWORD" Using By Reference FIRST_TXT_LINE By Reference ONE_LINE By Reference FIRST_TXT_LINE End If End Response Internal Response MOVE_UP_BY_PAGE If (FIRST_TXT_LINE = 1) Then Message "no more up there" Else If (FIRST_TXT_LINE < TXT_GRP_DISPLAYS) Then Let FIRST_TXT_LINE = 1 Else Call "FORMS$DEMO_SUBTRACT_LONGWORD" Using By Reference FIRST_TXT_LINE By Reference TXT_GRP_DISPLAYS By Reference FIRST_TXT_LINE End If End If End Response Internal Response MOVE_DOWN_BY_PAGE If (FIRST_TXT_LINE >= TXT_GRP_MAX_FIRST) Then Message "no more down there" Else Call "FORMS$DEMO_ADD_LONGWORD" Using By Reference FIRST_TXT_LINE By Reference TXT_GRP_DISPLAYS By Reference NEXT_FIRST_TXT_LINE If (NEXT_FIRST_TXT_LINE > TXT_GRP_MAX_FIRST ) Then Let FIRST_TXT_LINE = TXT_GRP_MAX_FIRST Else Let FIRST_TXT_LINE = NEXT_FIRST_TXT_LINE End If End If End Response Enable Response Include INIT_KEYS Display DATA_HELP_PANEL Activate Field TEXTLIB_NAME on TEXT_SCROLL_PANEL Activate Field KEY_NAME on TEXT_SCROLL_PANEL End Response Disable Response Remove all End Response Function Response SHOW_NUMBERS Remove HELP_VP Display INFO_PANEL End Response Function Response CLEAR_MESSAGES Message "" Message "" Message "" End Response Function Response NEW_TEXT Position To Field KEY_NAME On TEXT_SCROLL_PANEL End Response Panel TEXT_SCROLL_PANEL Viewport TEXT_SCROLL_VP Entry Response Position To Field KEY_NAME On TEXT_SCROLL_PANEL End Response Apply Field Default Of Replace Leading " " End Default Literal Text Line 1 Column 6 Value "DECforms demonstration of scrolling text extracted "- "from a VMS Library" End Literal Literal Text Next Line Column 60 Value "Version: " End Literal Field FORM_VERSION Same Line Next Column Output Picture X(10) Protected End Field Literal Text Line 3 Column 7 Value "Library Name: " End Literal Field TEXTLIB_NAME Same Line Next Column Input Picture X(30) End Field Literal Text Line 4 Column 11 Value "Key Name: " End Literal Field KEY_NAME Same Line Next Column Entry Response Reset TXT_GRP(1:10) let first_txt_line = 1 Remove INFO_VP Display DATA_HELP_PANEL End Response Function Response NEXT HELP Activate Group FDE_HELP_KEYS on FDE_KEYS Deactivate field FDE_HELP_KEYS(6).FDE_HELP_KEY_LINE(3).FDE_HELP_KEY on FDE_KEYS Position To Next Item End Response Function Response NEXT ITEM Remove FDE_KEYS_VP Remove INFO_VP Message "getting text, please wait ..." Let TEXTLIB_ACTION = "1" Call "FORMS$DEMO_TEXTLIB" Using By Reference TEXTLIB_ACTION By Reference TEXTLIB_NAME By Reference KEY_NAME By Reference PE_TEXT_GROUP By Reference TXT_GRP_BASE By Reference TXT_GRP_DISPLAYS By Reference TXT_GRP_MAX_FIRST By Reference TXT_GRP_MAX_FIRST_BY_PAGE By Reference TEXTLIB_STATUS If (TEXTLIB_STATUS <> 1) Then Signal Message "error number " TEXTLIB_STATUS " returned from access to text library" TEXTLIB_NAME " using key " KEY_NAME Else Message "" Message "" Message "" Activate Field REST_POSITION on TEXT_SCROLL_PANEL Position To Field REST_POSITION On TEXT_SCROLL_PANEL Display SCROLL_HELP_PANEL End If End Response Input Picture X(30) End Field Field TXT_GRP_UP_MARKER Next Line +1 Column 76 Display Character Set Private_Rule Output Picture X Output ":" When (FIRST_TXT_LINE > 1) Output "k" When (FIRST_TXT_LINE <= 1) Protected /* Signal if there's more UP */ End Field Group TXT_GRP Vertical Displays 10 First FIRST_TXT_LINE /* 10 is same as TXT_GRP_DISPLAYS */ Literal Text Next Line Column 1 Value "" End Literal Field TXT_LINE Same Line Column 9 End Field Literal Text Same Line Column 76 Value "x" Display Character Set Private_Rule End Literal Literal Text Same Line Column 80 Value "" End Literal End Group Field TXT_GRP_DOWN_MARKER Next Line Column 76 Display Character Set Private_Rule Output Picture X Output ":" When (FIRST_TXT_LINE < TXT_GRP_MAX_FIRST) Output "j" When (FIRST_TXT_LINE >= TXT_GRP_MAX_FIRST) Protected /* Signal if there's more DOWN */ End Field Field REST_POSITION Same Line Column 78 No Data Input Message "You may only view this text. You cannot change it" Function Response NEXT HELP Remove INFO_VP Display SCROLL_HELP_PANEL End Response Function Response DOWN ITEM Include MOVE_DOWN End Response Function Response NEXT ITEM Include MOVE_DOWN End Response Function Response DOWN_ARROW Include MOVE_DOWN End Response Function Response NEXT PANEL Include MOVE_DOWN_BY_PAGE End Response Function Response UP ITEM Include MOVE_UP End Response Function Response PREVIOUS ITEM Include MOVE_UP End Response Function Response UP_ARROW Include MOVE_UP End Response Function Response PREVIOUS PANEL Include MOVE_UP_BY_PAGE End Response Function Response top_of_group Let FIRST_TXT_LINE = 1 End Response Function Response end_of_group Let FIRST_TXT_LINE = TXT_GRP_MAX_FIRST End Response End Field Literal Polyline Line 18 Column 1 Line 18 Column 80 End Literal End Panel Message Panel MESSAGE_PANEL Viewport MESSAGE_VP End Panel Panel INFO_PANEL Viewport INFO_VP Literal Text Line 1 Column 5 Value "Lines read were" End Literal Field TXT_GRP_MAX Same Line Next Column +1 Output Picture 99R9 Protected End Field Literal Text Same Line Column 25 Value "Current line is " End Literal Field CURRENT_TXT_LINE Same Line Next Column Output Picture 99R9 Protected End Field Literal Text Same Line Column 46 Value "Max first is " End Literal Field TXT_GRP_MAX_FIRST Same Line Next Column Output Picture 99R9 Protected End Field Literal Text Next Line -1 Column 64 Value "Displays is ." End Literal Field TXT_GRP_DISPLAYS Same Line Next Column +1 Output Picture R9(2) Protected End Field Literal Text Same Line +1 Column 25 Value "First line is ." End Literal Field FIRST_TXT_LINE Same Line Next Column +1 Output Picture 99R9 Protected End Field Literal Text Same Line Column 46 Value "by page is . " End Literal Field TXT_GRP_MAX_FIRST_BY_PAGE Same Line Next Column Output Picture 99R9 Protected End Field Literal Text Same Line Column 64 Value "Base is ....." End Literal Field TXT_GRP_BASE Same Line Next Column +1 Output Picture 9R9 Protected End Field Literal Polyline Line 3 Column 1 Line 3 Column 80 End Literal End Panel Panel DATA_HELP_PANEL Viewport HELP_VP Literal Text Line 1 Column 1 Value "Press Return to see the named text. Press Help for a "- "list of keys." End Literal /* Do not advertise this because if someone changes to a real, tree-structured, help library then strange things may happen when the lower level keys are returned. Literal Text Next Line Column 1 Value "You may change the name of the Text Library by using "- "the Library Name field." End Literal */ Literal Polyline Line 3 Column 1 Line 3 Column 80 End Literal End Panel Panel SCROLL_HELP_PANEL Viewport HELP_VP Literal Text Line 1 Column 1 Value "Scroll the text using Prev/Next Screen or arrow keys." End Literal Literal Text Next Line Column 1 Value "Press DO to get back to the key name field." End Literal Literal Polyline Line 3 Column 1 Line 3 Column 80 End Literal End Panel Panel FDE_KEYS Viewport FDE_KEYS_VP Entry Response remove help_vp End Response Exit Response display data_help_panel End Response Function Response LEFT_ARROW Position To Left Occurrence End Response Function Response RIGHT_ARROW Position To Right Occurrence End Response Function Response UP_ARROW Position To Up Occurrence End Response Function Response DOWN_ARROW Position To Down Occurrence End Response Function Response EXIT GROUP PREVIOUS End Response Literal Rectangle Line 1 Column 1 Line 8 Column 80 End Literal Literal Text Line 1 Column 2 Value " Keys available in library Sys$Help:Forms$FDE_Help.hlb "- " " Display Reverse End Literal Group FDE_HELP_KEYS Vertical Group FDE_HELP_KEY_LINE Horizontal Field FDE_HELP_KEY Line 2 Column 4 Function Response MENU_SELECT Let KEY_NAME = FDE_HELP_KEYS(FDE_ROW).FDE_HELP_KEY_LINE(FDE_COL).FDE_HELP_KEY Deactivate Group FDE_HELP_KEYS on FDE_KEYS Remove FDE_KEYS_VP Position To Previous Item End Response Active Highlight Reverse No Data Input End Field End Group End Group Literal Text Next Line Column 2 Value " Use arrow keys to move between key names. Press "- "Select to choose a key. " Display Reverse End Literal End Panel End Layout End Form