!* -*- TECO -*- Library created and maintained by KMP@MC ! !* ** The funny name comes from fact that ! !* ** there is more than one TIME library ! !~Filename~:! !Timely macros for EMACS ! KMPTIME !& Setup KMPTIME Library:! !S Setup for using our winning macros! 0fo..QOld_FS_Clk_Macro"e !* Maybe remember old value ! fsclkmacrom.vOld_FS_Clk_Macro' 13*5fs q vectorf([5) M.VMonths !* get ourselves a Q-vector ! :i*Jan u:5(1) !* Jan ! :i*Feb u:5(2) !* Feb ! :i*Mar u:5(3) !* Mar ! :i*Apr u:5(4) !* Apr ! :i*May u:5(5) !* May ! :i*Jun u:5(6) !* Jun ! :i*Jul u:5(7) !* Jul ! :i*Aug u:5(8) !* Aug ! :i*Sep u:5(9) !* Sep ! :i*Oct u:5(10) !* Oct ! :i*Nov u:5(11) !* Nov ! :i*Dec u:5(12) !* Dec ! !& Kill KMPTIME Library:! !& Clean up on exit ! qOld_FS_Clk_Macrofsclkmacro !* Reset clock interrupt thing ! 0fsclkint !* Turn off interrupts !  !* Return ! !& Get Current Time:! !S Gets string form of time Time in 7 chars + + Date in 9 chars If qTime Only is nonzero, the just return time in 7 chars.! !* q0 = String to put in mode line ! !* q1 = full time (scrap) ! !* q5 = date ! [0[1[2[3[4[5[6 :i5 !* Initialize q5 to null string ! 0fo..Q Time_Only u6 !* Get time only? ! fsdate+1"e !* If system doesn't know the time ! q6"n :i*No_Time ' !* Then say so ! "# :i*No_Time_&_No_Date  '' !* ! fsdate :fsfdconvertu1 !* Save date/time as string in q1 ! q6"n oSkipDate ' 3,5:g1 u2 !* Get day in q2 ! 0,2:g1 u3 !* Get month # in q3 ! 6,8:g1 u4 !* Get year in q4 ! Q:Months(3) u3 !* Get month string in q3 ! 0:g2-48"e !* Leading zero in Day? ! 0:F2_' !* Change to a space ! :i5_2_3_4 !* q5: _Day_Month_Yr ! !SkipDate! !* Come here if no date wanted ! 12,14:g1 u2 !* Save minutes in q2 ! 9,11:g1 u3 !* Save hour in q3 ! 0fo..QTime_Zone_Adjustmentf"n+3u3!* If time zone adjustment to do ! q3"l !* If negative ! q3+24u3 !* Correct the time ! q6"e 1,fq5:g5u5 :i5<5 !>! '' !* Maybe invalidate date ! q3-23"g !* If bigger than 23 ! q3-24u3 !* Correct the time ! q6"e 1,fq5:g5u5 !5 '' !* Invalidate date ! q3:\u3 fq3-1"e :i303' 'w !* Correct format of q3 to string ! F=200"e !* If its on the hour ... ! F=300"e :i*Midnite5 ' !* Hour = 0 means midnite ! F=312"e :i*12_Noon5 '' !* Hour = 12 means noon ! 3/12"e !* If before noon, ... ! :i4am' !* Then Use am ! "# (3-12):\u3 !* Else put (Hour - 12) in q3 ! fq3-1"e :i3_3' !* If only one digit, slide over ! :i4pm' !* Use pm ! F=3_0"e :i312' !* If Hour = _0, change to 12 ! "# F=300"e :i312'' !* (Else) If Hour = 00, change to 12! 0:g3-48"e !* If Hour begins with a 0, ... ! 0:F3_' !* Make it into a blank ! :i*3:245 !* Return time and maybe date ! !& Start Realtime Modeline Clock:! !S Get the realtime clock interrupts going Postcomma arg is the number of seconds to wait between updates (Default 60). Precomma arg is time will only f^E the mode line when that macro is in fsmodemacro! ff&1"n ' "# 60' *30 fsClkInt  m.v Modeline_Safe_Macro !* Precomma arg (default 0) is safe to f^E! 0 m.v Modeline_Full_Update_Time M.M &_Insert_Correct_Time_in_Mode_Linefs CLK Macro 0 !& Enable MODLIN AutoSave:! !& Set up to run AutoSave every 5 clock updates ! 0m.vAutoSaveFlag [0[1 :i* fo..QMM_&_Periodic_Actionu0 @:i1| %AutoSaveFlag-9"g 0uAutoSaveFlagw m(m.m&_Real-time_Interrupt)'| :i*01m.vMM_&_Periodic_Action  !& Insert Correct Time In Mode Line:! !S Updates modline display of time! 1,M.M &_Periodic_Action"n M(M.M &_Periodic_Action)' qModeline_Full_Update_Time"e 1 uModeline_Full_Update_Time 0' "# 0 uModeline_Full_Update_Time' f[inslen !* Bind insert length info ! qEditor_Name[0 !* Put Editor name in q0 ! f~..J0-1-FQ0"N oSet' !* If ..J is unknown, Set mode line ! FQ..J-(FQ0+18)"l oSet' !* If ..J is short, same thing ! qModeline_Safe_Macrof"n[0 !* If a mode safe macro was named ! q0-(]0w fsmodemacro)"n oSet'' !* do the f^E only if a match ! :i0..J !* Copy ..J into q0 ! M(M.M &_Get_Current_Time)[1 !* Get current time in q1 ! FQEditor_Name+1:F01 !* Rplac time into mode line ! F=0..J"e 0' !* Exit if no change to make ! q0 u..J !* Put new mode line in ..J ! FR !* Redisplay the mode line ! 0 !* Return ! !Set! fs mode macrof"n[0 m0fr ]0' !* If a ModeMacro in effect, call it! 0 !* And return !