sherman%v70nl.DECnet@NUSC.ARPA ("V70NL::SHERMAN") (09/03/87)
The following program interfaces with Datatrieve's "Terminal Server", giving you a definable keypad, 20 recallable command lines, and a few other little goodies to boot. I don't know if all this is old hat or not, but I thought I'd throw in my 2 cents worth. Bill, Sherman@nusc.arpa ....................... Cut between dotted lines and save ...................... $!.............................................................................. $! VAX/VMS archive file created by VMS_SHAR V-4.03 05-Aug-1987 $! which was written by Michael Bednarek (U3369429@ucsvc.dn.mu.oz.au) $! To unpack, simply save and execute (@) this file. $! $! This archive was created by SHERMAN $! on Thursday 3-SEP-1987 13:48:00.34 $! $! It contains the following 4 files: $! AAAREADME.DOC BUILD.COM DTR.KEYPAD RDTR.FOR $!============================================================================== $ Set Symbol/Scope=(NoLocal,NoGlobal) $ Version=F$GetSYI("VERSION") ! See what VMS version we have here: $ If Version.ges."V4.4" then goto Version_OK $ Write SYS$Output "Sorry, you are running VMS ",Version, - ", but this procedure requires V4.4 or higher." $ Exit 44 $Version_OK: CR[0,8]=13 $ Pass_or_Failed="failed!,passed." $ Goto Start $Convert_File: $ Read/Time_Out=0/Error=No_Error1/Prompt="creating ''File_is'" SYS$Command ddd $No_Error1: Define/User_Mode SYS$Output NL: $ Edit/TPU/NoSection/NoDisplay/Command=SYS$Input/Output='File_is' - VMS_SHAR_DUMMY.DUMMY f:=Get_Info(Command_Line,"File_Name");b:=Create_Buffer("",f); o:=Get_Info(Command_Line,"Output_File");Set (Output_File,b,o); Position (Beginning_of(b));Loop x:=Erase_Character(1); Loop ExitIf x<>"V"; Move_Vertical(1);x:=Erase_Character(1);Append_Line;Move_Horizontal (-Current_Offset);EndLoop;Move_Vertical(1);ExitIf Mark(None)=End_of(b) EndLoop;Exit; $ Delete VMS_SHAR_DUMMY.DUMMY;* $ Checksum 'File_is $ Success=F$Element(Check_Sum_is.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)+CR $ Read/Time_Out=0/Error=No_Error2/Prompt=" CHECKSUM ''Success'" SYS$Command ddd $No_Error2: Return $Start: $ File_is="AAAREADME.DOC" $ Check_Sum_is=2087325187 $ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY X Recallable Datatrieve Version 1.1 X XCongratulations, you are now the proud owner of recallable datatrieve. XYes, now you won't drive yourself crazy while wishing that you could Xretrieve a command you used only two lines ago - just like DCL lets you. X XThis package includes: X aaareadme.doc if you can see this file, you're too close X build.com command procedure to build rdtr.exe X rdtr.for the source to recallable datatrieve X dtr.keypad a sample key definition file X XThere are some other nice features that this program provided you with: X X1) Logical name DTR_NOCONTROL_Z X X If defined, recallable datatrieve will ignore ^Z, instead of processing X a ^Z as exit. X X2) Logical name DTR_KEYPAD X X If defined, recallable datatrieve will read key definitions from the X file to which this logical name points. Each line of this file should X contain valid DEFINE/KEY commands. X X3) SHOW KEYPAD, UP, DOWN, and ACROSS commands X X The SHOW KEYPAD command will show the currently defined keypad keys X and their equivalence strings. X X The UP, DOWN, and ACROSS commands simplify movement within the CDD, X X Command Expansion X -------- ----------------------------------- X UP SET DICTIONARY -; SHOW DICTIONARY; X DOWN x SET DICTIONARY .x; SHOW DICTIONARY; X ACROSS x SET DICTIONARY -.x; SHOW DICTIONARY; X X NOTE: These commands are only processed interactively, and so will not X be available within procedures. X X Good luck, X enjoy, X Bill. X X+------------------------------------------------------------------------------+ X| ARPANET: sherman@nusc.arpa USPS: Bill Sherman | X| AT&T: (203) 440-6210 Naval Underwater Systems Center | X| MIS/OA/WP Group, Code 334 | X| Building 28, Room 200 | X| New London, CT 06320 | X+------------------------------------------------------------------------------+ $ GoSub Convert_File $ File_is="BUILD.COM" $ Check_Sum_is=1060403558 $ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY X$! X$! Precursory stuff X$ set symbol/scope=noglobal X$ wo = "write sys$output" X$! X$! Build it X$ wo "Compiling" X$ fortran/nolist/optimize/nodebug/nocheck rdtr X$ wo "Linking (takes a little while)" X$ link/nomap/nodebug/notrace/contiguous rdtr,sys$input/opt Xsys$share:dtrshr/share, - X!sys$share:dtrshrfm/share, - Xdtr$library:termserve/library/include=(adt,edt,gui,hlp) Xid="RDTR011" X$! X$! Cleanup X$ delete rdtr.obj;* X$ purge rdtr.exe X$! X$! Niceness X$ wo "Defining logical DTR_KEYPAD to point to file DTR.KEYPAD" X$ define/nolog dtr_keypad dtr.keypad X$ wo "Ok, just run RDTR and have fun!" $ GoSub Convert_File $ File_is="DTR.KEYPAD" $ Check_Sum_is=192595749 $ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY X! state toggle keys X X def/key pf1/set=gold "" X X! state DEFAULT X X def/key help "help;"/term X def/key pf2 "help;"/term X def/key kp1 "show all;"/term X def/key kp2 "show dictionary;"/term X def/key kp3 "show ready;"/term X X def/key kp4 "fn$show_timer;"/term X def/key kp7 "fn$width(132); set columns_page=132;"/noecho/term X def/key kp8 "fn$spawn;"/term X X! state GOLD X X def/key/if=gold help "show keypad"/term X def/key/if=gold pf2 "show keypad"/term X def/key/if=gold kp1 "show domains;"/term X def/key/if=gold kp2 "show dictionaries;"/term X def/key/if=gold kp3 "show procedures;"/term X X def/key/if=gold kp4 "fn$init_timer;"/term X def/key/if=gold kp7 "fn$width(80); set columns_page=80;"/noecho/term $ GoSub Convert_File $ File_is="RDTR.FOR" $ Check_Sum_is=201354475 $ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY Xc Xc RECALLABLE_DTR Xc Xc Written by: Xc Xc ??? Xc Xc Description: Xc Xc This programs provides a screen-management interface to Datatrieve Xc so that the up and down arrows can access the recall buffer. Xc Xc Modification History: Xc Xc 03-AUG-1987, Bill Sherman Xc Added code to handle SHOW KEYPAD command, as well as UP, Xc DOWN, and ACROSS dictionary movement commands. Xc Xc 02-AUG-1987, Bill Sherman Xc Added code to check for the logical name DTR_NOCONTROL_Z. Xc If this logical name exists, then ^Z will not EXIT from Xc Datatrieve, but will simply be ignored. Xc Xc Also added code to handle personalized key definitions. Xc The appropriate DEFINE/KEY command should be in the file Xc pointed to by the logical name DTR_KEYPAD. Xc X program recallable_dtr X implicit none Xc X include '($smgdef)' X include 'dtr$library:dab.for' Xc X integer*4 status, sys$trnlnm, dtr$dtr, process_line X integer*4 finis, keyboard, table, options, term, len X character line*255, long_msg_buff*132, long_aux_buff*132 Xc X external DTR$_EXIT, SS$_NORMAL Xc Xc Check whether we should ignore ^Z, or treat it as an EXIT. Xc X status = sys$trnlnm( , 'LNM$DCL_LOGICAL', 'DTR_NOCONTROL_Z',, ) X if (status .eq. %loc(SS$_NORMAL)) then X finis = SMG$K_TRM_CTRLY ! something impossible... X else X finis = SMG$K_TRM_CTRLZ X end if Xc Xc Prepare screen management to handle our keyboard. Xc X call smg$create_virtual_keyboard( keyboard ) X call smg$create_key_table( table ) X call smg$load_key_defs( table, 'DTR_KEYPAD',, 1) Xc Xc Start up the Datatrieve server. Xc X call dtr$init( dab, 100, long_msg_buff, X & long_aux_buff, DTR$K_SEMI_COLON_OPT ) X options = DTR$M_OPT_CONTROL_C + DTR$M_OPT_STARTUP + X & DTR$M_OPT_FOREIGN + DTR$M_OPT_BANNER + X & DTR$M_OPT_CMD X status = dtr$dtr( dab, options ) Xc Xc Loop getting and doing of commands. Xc X term = SMG$K_TRM_CR Xc X do while (status .ne. %loc(DTR$_EXIT) .and. term .ne. finis) X call smg$read_composed_line( keyboard, table, line, X & long_msg_buff(1:DAB$W_MSG_LEN), X & len,,,,,,, term ) X status = process_line( dab, line, len, table, options ) X end do Xc Xc Close the Datatrieve server. Xc X call dtr$finish( dab ) Xc X end X X subroutine list_key_defs(table) X implicit none Xc X integer*4 table Xc X integer*4 status, smg$list_key_defs X integer*4 context X character key_name*6, if_state*10, equiv*40, state*10 Xc X external SS$_NORMAL Xc X print 1 X1 format(1x, 'State', t13, 'Key', t20, 'Set-state', t31, 'Equivalence') X print 2 X2 format(1x, 10('-'), t13, 6('-'), t20, 10('-'), t31, 40('-')) Xc X status = smg$list_key_defs( table, context, key_name, if_state,, X & equiv, state ) X do while (status .eq. %loc(SS$_NORMAL)) X print 3, if_state, key_name, state, equiv X3 format(1x, a, t13, a, t20, a, t31, a) X status = smg$list_key_defs( table, context, key_name, X & if_state,, equiv, state ) X end do Xc X return X end X X integer*4 function process_line(dab, line, len, table, options) X implicit none Xc X integer*4 dab, len, table, options X character line*(*) Xc X integer*4 dtr$dtr X integer*4 l X character verb*10, rest*80 X character show*18/'; SHOW DICTIONARY;'/, set*15/'SET DICTIONARY '/ Xc X external SS$_NORMAL Xc X l = index(line, ' ') X verb = line(1:l-1) X call str$upcase(verb, verb) X rest = line(l+1:) X call str$upcase(rest, rest) X l = len - l Xc X if (verb .eq. 'SHOW' .and. rest .eq. 'KEYPAD') then X call list_key_defs( table ) X process_line = %loc(SS$_NORMAL) X else X if (verb .eq. 'UP') then X call dtr$command( dab, set//'-'//show) X else if (verb .eq. 'DOWN') then X call dtr$command( dab, set//rest(1:l)//show) X else if (verb .eq. 'ACROSS' .or. verb .eq. 'ACR') then X call dtr$command( dab, set//'-.'//rest(1:l)//show) X else X call dtr$command( dab, line(1:len) ) X end if X process_line = dtr$dtr( dab, options ) X end if Xc X return X end $ GoSub Convert_File $ Exit ------