zu@ethz.UUCP (Urs Zurbuchen) (09/09/87)
Hello Netlanders,
some kind soul recently posted a new version of swing to which I added
some new features.
- in a pulldown menu (e.g. the option menu) you can use the first
letter of a command to invoke it
- in the FILER you can use the following keys:
t - go to first file (top)
b - go to last file (bottom)
prev.screen - scroll backward one screen of files
forw.screen - scroll forward one screen of files
For VT100s which don't have prev.screen and forw.screen,
respectively, you can use ^B and ^F instead.
- the file SWING.LIS now gets printed directly with the same command
as to print a file and is deleted afterwards.
- in pulldown mode, if you work with the cursor keys, you now have
wrap-around (go from last to first entry and vice versa).
I also corrected a error which occured when you chose the Option command
and then hit the cursor right or cursor left key while not being in pull-
down mode (activated by ^P).
This is my first exposure to fortran. So any hints and tips about programming
in fortran are welcome. Flames should be directed to /dev/nul (or sys$scratch).
I will not support these changes since I have my last day at this office
today. And it doesn't seem that I will have access to another VMS Vax in
the near future.
Have a nice day,
...urs
UUCP: ...!seismo!mcvax!cernvax!ethz!zu
(this is my favourite unix site).
....................... 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 IB1_EXT
$! on Wednesday 9-SEP-1987 08:19:59.21
$!
$! It contains the following 4 files:
$! 2.DIF 3.DIF 4.DIF 5.DIF
$!==============================================================================
$ 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="2.DIF"
$ Check_Sum_is=1246046390
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]2.ORG;1
X 275 . choice, code, do_bar )
X 276 end if
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]2.FOR;5
X 275 . choice, .false., code, do_bar )
X 276 end if
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]2.ORG;1
X 552 sub_choices(7).choice(2) = 'Display Directory'
X 553 sub_choices(7).code(2) = 72
X 554 sub_choices(7).choice(3) = 'Filer'
X 555 sub_choices(7).code(3) = 73
X 556
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]2.FOR;5
X 559 sub_choices(7).key(1) = 68
X 560 sub_choices(7).choice(2) = 'Filer'
X 561 sub_choices(7).code(2) = 73
X 562 sub_choices(7).key(2) = 70
X 563 sub_choices(7).choice(3) = 'Show Directory Name'
X 564 sub_choices(7).code(3) = 72
X 565 sub_choices(7).key(3) = 83
X 566
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]2.ORG;1
X 562 sub_choices(9).choice(2) = 'cancel'
X 563 sub_choices(9).code(2) = 92
X 564
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]2.FOR;5
X 572 sub_choices(9).key(1) = 79
X 573 sub_choices(9).choice(2) = 'cancel'
X 574 sub_choices(9).code(2) = 92
X 575 sub_choices(9).key(2) = 67
X 576
X************
$ GoSub Convert_File
$ File_is="3.DIF"
$ Check_Sum_is=676077234
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]3.ORG;1
X 245 . choice, code, do_bar )
X 246 end if
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]3.FOR;8
X 258 . choice, .false., code, do_bar )
X 259 end if
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]3.ORG;1
X 385
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]3.FOR;8
X 398 include '($ssdef)'
X 399 include '($clidef)'
X 400
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]3.ORG;1
X 390
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]3.FOR;8
X 405 character logical_name*50, string*255
X 406 integer istat, len_string
X 407 integer*4 translate_logical
X 408
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]3.ORG;1
X 467 return
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]3.FOR;8
X 485 logical_name = 'SWING$PRINT' !Check for user's printer
X 486 istat = translate_logical( logical_name, string )
X 487 if ( istat .eq. ss$_normal ) then
X 488 call str$trim( string, string, len_string )
X 489 call lib$spawn( string(1:len_string)
X 490 . //'/noidentify/nonotify/delete '
X 491 . //'swing.lis',,,cli$m_nowait)
X 492 else
X 493 call lib$spawn( '$print/noidentify/nonotify/delete '
X 494 . //'swing.lis',,,cli$m_nowait)
X 495 end if
X 496
X 497 call print_message( 'Sent file to printer.', 0 )
X 498
X 499 return
X************
$ GoSub Convert_File
$ File_is="4.DIF"
$ Check_Sum_is=457795157
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]4.ORG;1
X 429 if ( pos .gt. 1 ) new_pos = pos - 1
X 430 else if ( key .eq. smg$k_trm_right ) then
X 431 if ( pos .lt. pd_num_choices ) new_pos = pos + 1
X 432 else if ( key .eq. smg$k_trm_down ) then
X 433 if ( pd_choices.ptr(pos) .ne. 0 ) down = .true.
X 434 else if ( key .eq. smg$k_trm_ctrlz ) then
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]4.FOR;16
X 429 if ( pos .gt. 1 ) then
X 430 new_pos = pos - 1
X 431 else
X 432 new_pos = pd_num_choices
X 433 end if
X 434
X 435 else if ( key .eq. smg$k_trm_right ) then
X 436 if ( pos .lt. pd_num_choices ) then
X 437 new_pos = pos + 1
X 438 else
X 439 new_pos = 1
X 440 end if
X 441
X 442 else if ( key .eq. smg$k_trm_down ) then
X 443 if ( pd_choices.ptr(pos) .ne. 0 ) down = .true.
X 444
X 445 else if ( key .eq. smg$k_trm_ctrlz ) then
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]4.ORG;1
X 536 . choice, code, do_bar )
X 537 end do
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]4.FOR;16
X 547 . choice, .true., code, do_bar )
X 548 end do
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]4.ORG;1
X 564 . pd_choices, choice, code, do_bar)
X 565
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]4.FOR;16
X 575 . pd_choices, choice, pullmode,
X 576 . code, do_bar)
X 577
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]4.ORG;1
X 568 include 'pulldown.cmn'
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]4.FOR;16
X 580 include '($ssdef)'
X 581 include 'pulldown.cmn'
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]4.ORG;1
X 576 logical exit, do_bar
X 577 character choice*(PD_MAX_CHOICE_LEN)
X 578
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]4.FOR;16
X 589 logical exit, do_bar, direct, pullmode
X 590 character choice*(PD_MAX_CHOICE_LEN), key_upcase
X 591
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]4.ORG;1
X 624 key = 0
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]4.FOR;16
X 637 direct = .false.
X 638 key = 0
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]4.ORG;1
X 633 . key .ne. smg$k_trm_cr .and. .not. exit )
X 634
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]4.FOR;16
X 647 . key .ne. smg$k_trm_cr .and.
X 648 . .not. exit .and. .not. direct )
X 649
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]4.ORG;1
X 646 else if ( key .eq. smg$k_trm_down ) then
X 647 if ( pos .lt. ii ) new_pos = pos + 1
X 648 else if ( key .eq. smg$k_trm_left ) then
X 649 if ( num_choice .gt. 1 ) num_choice = num_choice - 1
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]4.FOR;16
X 661 else if ( key .eq. smg$k_trm_down ) then
X 662 if ( pos .lt. ii ) then
X 663 new_pos = pos + 1
X 664 else
X 665 new_pos = 1
X 666 end if
X 667
X 668 else if ( key .eq. smg$k_trm_left .and.
X 669 . pullmode .eq. .true. ) then
X 670 if ( num_choice .gt. 1 ) num_choice = num_choice - 1
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]4.ORG;1
X 652 else if ( key .eq. smg$k_trm_right ) then
X 653 if ( num_choice .lt. pd_num_choices )
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]4.FOR;16
X 673
X 674 else if ( key .eq. smg$k_trm_right .and.
X 675 . pullmode .eq. .true. ) then
X 676 if ( num_choice .lt. pd_num_choices )
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]4.ORG;1
X 657 else if ( key .eq. smg$k_trm_ctrlz ) then
X 658 exit = .true.
X 659 end if
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]4.FOR;16
X 680
X 681 else if ( key .eq. smg$k_trm_ctrlz ) then
X 682 exit = .true.
X 683
X 684 else
X 685 ii = 1
X 686 do while ( ii .le. pd_choices.number )
X 687 if ( key .eq. pd_choices.key(ii) .or.
X 688 . key .eq. pd_choices.key(ii) + 32 ) then
X 689 direct = .true.
X 690 new_pos = ii
X 691 end if
X 692 ii = ii + 1
X 693 end do
X 694 end if
X************
$ GoSub Convert_File
$ File_is="5.DIF"
$ Check_Sum_is=292134951
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]5.ORG;1
X 225 sub_choices(8).number = 2
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]5.FOR;20
X 225 sub_choices(4).key(1) = 68
X 226 sub_choices(8).number = 2
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]5.ORG;1
X 228 sub_choices(8).choice(2) = 'Cancel'
X 229 sub_choices(8).code(2) = 182
X 230
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]5.FOR;20
X 229 sub_choices(8).key(1) = 79
X 230 sub_choices(8).choice(2) = 'Cancel'
X 231 sub_choices(8).code(2) = 182
X 232 sub_choices(8).key(2) = 67
X 233
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]5.ORG;1
X 625
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]5.FOR;20
X 631 else if ( ikey .eq. smg$k_trm_prev_screen .or.
X 632 . ikey .eq. smg$k_trm_ctrlb ) then
X 633 jj = file_num - 11
X 634 if ( jj .lt. 1 ) jj = 1
X 635 file_num = jj
X 636 call update_file_window
X 637
X 638 else if ( ikey .eq. smg$k_trm_next_screen .or.
X 639 . ikey .eq. smg$k_trm_ctrlf ) then
X 640 jj = file_num + 11
X 641 if ( jj .gt. num_files ) jj = num_files
X 642 file_num = jj
X 643 call update_file_window
X 644
X 645 else if ( ikey .eq. smg$k_trm_lowercase_t .or.
X 646 . ikey .eq. smg$k_trm_uppercase_t ) then
X 647 file_num = 1
X 648 call update_file_window
X 649
X 650 else if ( ikey .eq. smg$k_trm_lowercase_b .or.
X 651 . ikey .eq. smg$k_trm_uppercase_b ) then
X 652 file_num = num_files
X 653 call update_file_window
X 654
X 655
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]5.ORG;1
X 775 call pd_get_choice( board_id, keyboard, width,
X 776 . pull_choices, choice, code )
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]5.FOR;20
X 834 call pd_get_choice( board_id, keyboard, width,
X 835 . pull_choices, choice, code )
X************
X************
XFile IB1$ROOT:[EXT.ZU.DL.ORIGINAL]5.ORG;1
V 961 if ( file_num .gt. bottom_file_line ) then !If cursor at b
Xottom
X 962 top_file_line = top_file_line + 6 !Scroll up
X 963 bottom_file_line = bottom_file_line + 6
X 964
V 965 else if ( file_num .lt. top_file_line ) then !If cursor at t
Xop
X 966 top_file_line = top_file_line - 6 !Scroll down
X 967 bottom_file_line = bottom_file_line - 6
X 968 end if
X 969
X******
XFile IB1$ROOT:[EXT.ZU.DL.SWING]5.FOR;20
V 1023 if ( file_num .eq. bottom_file_line +1 ) then !If cursor at
Xbottom
X 1024 top_file_line = top_file_line + 6 !Scroll up
X 1025 bottom_file_line = bottom_file_line + 6
X 1026
V 1027 else if ( file_num .eq. top_file_line -1 ) then !If cursor at
Xtop
X 1028 top_file_line = top_file_line - 6 !Scroll down
X 1029 bottom_file_line = bottom_file_line - 6
X 1030
X 1031 else if ( file_num .gt. bottom_file_line ) then
X 1032 top_file_line = file_num
X 1033 bottom_file_line = top_file_line + 11
X 1034
X 1035 else if ( file_num .lt. top_file_line ) then
X 1036 top_file_line = file_num
X 1037 bottom_file_line = top_file_line + 11
X 1038 end if
X 1039
X 1040 if ( bottom_file_line .gt. num_files ) then
X 1041 top_file_line = num_files -11
X 1042 end if
X 1043
X 1044 if ( top_file_line .lt. 1 ) then
X 1045 top_file_line = 1
X 1046 bottom_file_line = 12
X 1047 end if
X 1048
X 1049 if ( bottom_file_line .gt. top_file_line + 11 )
X 1050 . bottom_file_line = top_file_line + 11
X 1051
X************
$ GoSub Convert_File
$ Exit