Program SBTIME !++ ! FACILITY: Silver_Bullet - Simple process monitor ! ! ABSTRACT: ! This auxilliary program will inform the user how ! much connect time they have remaining, iff SB is ! running. ! ! ! ENVIRONMENT: VMS 4.x ! ! ! AUTHOR: Joe Celia CREATION DATE: May 1985 ! ! MODIFIED BY: ! 4-Jun-85 Rand P. Hall Added support for SB on/off and special users. ! ! VERSION ! 01 - original ! 01.1 - [rph] added SB on/off support and special users !-- Implicit None Include '($Jpidef)' Include '($Lnmdef)' Structure /Itmlist/ Union Map Integer*2 Bufferlen Integer*2 Itemcode Integer*4 Bufferaddr Integer*4 Lengthaddr End Map Map Integer*4 Endlist End Map End Union End Structure Record /Itmlist/ Item_List(4) Real*8 Login_Time,Current_Time Integer Usernam_L,Logint_L,T,A Integer*4 Time_Buff(2),Logintim(2),Status,Grp Integer*4 Sys$Getjpiw,Sys$Gettim,Lib$Stop Character Usernam*12,Minute*7,Minutes*7 Data Minute,Minutes /'minute ','minutes'/ Parameter Pagrp=237 Parameter Facgrp=192 Parameter Sysgrp=8 Integer*4 Sys$Trnlnm,Return_Str_Len Character*1 Return_Str Integer*2 Itmlst(7) ! Set Up The Item List For Trnlnm Call Itmlst(1)= 1 Itmlst(2)= Lnm$_String Itmlst(3)= %Loc(Return_Str) Itmlst(5)= %Loc(Return_Str_Len) Itmlst(7)= 0 ! Check To See If Siver_Bullet Is Running ! Silver_Bullet Is Running If Sb$Status = T. Status=Sys$Trnlnm(,%Descr ('LNM$SYSTEM_TABLE'), 1 %Descr ('SB$STATUS'),,%Ref(Itmlst)) If (Return_Str.Eq.'T') Then ! ! By Using Getjpi We Abstract The Username And Login Time. ! Item_List(1).Bufferlen = 12 Item_List(1).Itemcode = Jpi$_Username Item_List(1).Bufferaddr = %Loc(Usernam) Item_List(1).Lengthaddr = %Loc(Usernam_L) Item_List(2).Bufferlen = 8 Item_List(2).Itemcode = Jpi$_Logintim Item_List(2).Bufferaddr = %Loc(Logintim) Item_List(2).Lengthaddr = %Loc(Logint_L) Item_List(3).Bufferlen = 4 Item_List(3).Itemcode = Jpi$_Grp Item_List(3).Bufferaddr = %Loc(Grp) Item_List(4).Endlist = Jpi$C_Listend Status=Sys$Getjpiw(,,,Item_List,,,) If (.Not.Status) Call Lib$Stop(%Val(Status)) ! Calling Up System Time With Sys$Gettim If ((Grp.Gt.Sysgrp).And.(Grp.Lt.Facgrp).And. 1 (Grp.Ne.Pagrp)) Then Status=Sys$Gettim(Time_Buff) If (.Not.Status) Call Lib$Stop(%Val(Status)) Call Double(Time_Buff,Current_Time) Call Double(Logintim,Login_Time) ! Calculate The Time Logged In A =((Current_Time - Login_Time)/600000000.0d0) T = 60 - A If (T.Lt.1) T=1 ! Write Output Including Username And Time Left Before Logout ! By Silver-Bullet If(T.Eq.1)Then Write(*,24)Usernam,T,Minute Else Write(*,24)Usernam,T,Minutes Endif 24 Format(4x,A12,'You Have ',I2,1x,A7,' Left Before Logout 1by Silver Bullet.') Else Type *,'You Are Immune To Silver Bullet Prime-Time.' Endif Else !Sb Off Type *,'Silver Bullet Prime-Time Is Not In Effect.' Endif End !++ ! Double ! Convert Integer To Double Precision Real. ! !-- Subroutine Double(Time_In,Time_Out) Real*8 Time_Out Integer*4 Time_In(2),Ti1 Time_Out = 2.D0**32*Time_In(2) Ti1 = Ishft(Time_In(1),-1) Time_Out = Time_Out + Ti1*2.D0 Return End