$CPU 8086 ' Make compatible with XT systems $LIB ALL OFF ' Turn off all PowerBASIC libraries $ERROR ALL OFF ' Turn off all PowerBASIC error checking $OPTIMIZE SIZE ' Optimize for smaller code $COMPILE UNIT ' Compile to a UNIT (.PBU) '$COMPILE EXE ' Compile to a UNIT (.PBU) 'include floating point in UNIT (makes it smaller) '/*------------------------------------------------------------------*/ $CODE SEG "MLIB11" '/*------------------------------------------------------------------*/ '/* TSPLIT - Split a time passed in a string to its Hour, Minute, and '/* Second components. '/* Note: All other time routines call this routine to get the '/* component parts. '/* TempTime = Time string in U.S. format (HH:MM:SS, HH:MM, HH:MMx) '/* Hour = Returns the hour (in military time) '/* Minute = Returns the minute '/* Second = Returns the second SUB TSPLIT(BYVAL InTime AS STRING, Hour AS INTEGER, Minute AS INTEGER, Second AS INTEGER) PUBLIC IF LEN(InTime) = 0 THEN InTime$ = TIME$ END IF Hour = VAL(InTime) Minute = VAL(MID$(InTime,4,2)) IF LEN(InTime) > 6 THEN Second = VAL(MID$(InTime,7)) ELSE Second = 0 END IF IF INSTR(LEFT$(InTime,2), ANY "pP") THEN IF Hour < 12 THEN INCR Hour, 12 END IF ELSEIF INSTR(LEFT$(InTime,2), ANY "aA") THEN IF Hour = 12 THEN Hour = 0 END IF END IF END SUB '/*-----------------------------------------------------------------*/ '/* MKTIMESTR12 - Combine the component parts of a time into a displayable '/* string in 12 hour U.S. format. '/* Hour = '/* Minute = FUNCTION MKTIMESTR12(BYVAL Hour AS INTEGER, BYVAL Minute AS INTEGER) PUBLIC AS STRING DIM Pm AS INTEGER DIM H AS STRING DIM M AS STRING DIM T AS STRING IF Hour > 12 THEN DECR Hour,12 Pm = -1 END IF H$ = RIGHT$(STR$(Hour),2) M$ = RIGHT$(STR$(Minute),2) IF Pm THEN M$ = M$ + "pm" ELSE M$ = M$ + "am" END IF T = H + ":" + M REPLACE " " WITH "0" IN T FUNCTION = T END FUNCTION '/*-----------------------------------------------------------------*/ '/* MKTIMESTR - Combine the component parts of a time into a displayable '/* string in 24 hour U.S. format. '/* Note: All other time routines call this routine to combine '/* the component parts. '/* Hour = '/* Minute = '/* Second = FUNCTION MKTIMESTR(BYVAL Hour AS INTEGER, BYVAL Minute AS INTEGER, BYVAL Second AS INTEGER) PUBLIC AS STRING DIM H AS STRING DIM M AS STRING DIM S AS STRING DIM T AS STRING H = RIGHT$(STR$(Hour),2) M = RIGHT$(STR$(Minute),2) S = RIGHT$(STR$(Second),2) T = H + ":" + M + ":" + S REPLACE " " WITH "0" IN T FUNCTION = T END FUNCTION '/*-----------------------------------------------------------------*/ '/* TIME2SEC - Returns the number of seconds since midnight for a given '/* time string. '/* InTime = Time to convert into seconds FUNCTION TIME2SEC(BYVAL InTime AS STRING) PUBLIC AS LONG DIM Hour AS INTEGER DIM Minute AS INTEGER DIM Second AS INTEGER TSPLIT InTime, Hour, Minute, Second FUNCTION = (Hour * 3600) + (Minute * 60) + Second END FUNCTION '/*------------------------------------------------------------------*/ '/* SEC2TIME$ - Return a time string for a given number of seconds since '/* midnight. '/* Secs = seconds to convert into a time string FUNCTION SEC2TIME(BYVAL Secs AS SINGLE) PUBLIC AS STRING TS!= Secs H! = FIX(TS!/3600) TS!= TS!- (H!*3600) M! = FIX(TS!/60) S! = TS! - (M!*60) T$ = RIGHT$(STR$(H!),2)+":"+RIGHT$(STR$(M!),2)+":"+RIGHT$(STR$(S!),2) FUNCTION = MKTIMESTR(H!, M!, S!) END FUNCTION '/*-----------------------------------------------------------------*/ '/* NSECONDS - Return the number of seconds NSECONDS between two time strings. '/* If the second time is earlier than the first, a midnight rollover '/* is assumed. '/* Time1 = start time '/* Time2 = end time FUNCTION NSECONDS(BYVAL Time1 AS STRING, BYVAL Time2 AS STRING) PUBLIC AS LONG DIM Temp1 AS LONG DIM Temp2 AS LONG Temp1 = TIME2SEC(Time1) Temp2 = TIME2SEC(Time2) IF Temp2 < Temp1 THEN 'account for midnight rollover INCR Temp2, 86400 END IF FUNCTION = Temp2 - Temp1 END FUNCTION '/*-----------------------------------------------------------------*/ FUNCTION TIME(BYVAL OPT AS STRING) PUBLIC AS STRING OPT = UCASE$(OPT) IF OPT = "" THEN OPT = "N" TM$ = TIME$ TIME = XTIME(OPT,TM$) END FUNCTION '/*-----------------------------------------------------------------*/ FUNCTION TFORMAT(BYVAL TM AS STRING, BYVAL OPT AS STRING) PUBLIC AS STRING FUNCTION = XTIME(OPT,TM) END FUNCTION '/*-----------------------------------------------------------------*/ FUNCTION XTIME(BYVAL OPT AS STRING, BYVAL TM AS STRING) PUBLIC AS STRING OPT = UCASE$(OPT) TA$ = TM DIM Hour as INTEGER DIM Minute as INTEGER DIM Second as INTEGER TSPLIT TA$, Hour, Minute, Second '/* --- Civil time ---*/ IF OPT = "C" THEN XRET$ = MKTIMESTR12(Hour, Minute) '/* --- Elapsed Time ---*/ IF OPT = "E" OR OPT = "R" THEN XRET$ = STR$(MTIMER) END IF '/* --- Reset Elapsed Timer ---*/ IF OPT = "R" THEN MTIMER END IF '/* --- Normal Time ---*/ IF OPT = "N" THEN XRET$ = TA$ '/* --- Seconds Since Midnight ---*/ IF OPT = "S" THEN XRET$ = LTRIM$(STR$(TIME2SEC(TA$))) '/* --- Minutes Since Midnight ---*/ IF OPT = "M" THEN X = TIME2SEC(TA$)/60 X = FIX(X) XRET$ = LTRIM$(STR$(X)) END IF '/* --- Hours Since Midnight ---*/ IF OPT = "H" THEN XRET$ = LEFT$(TA$,2) FUNCTION = XRET$ END FUNCTION '/*-----------------------------------------------------------------*/ FUNCTION TMATH(BYVAL T1 AS STRING, BYVAL T2 AS STRING, BYVAL OPT AS STRING)PUBLIC AS STRING IF OPT = "-" THEN XRET$ = SEC2TIME(TIME2SEC(T1)-TIME2SEC(T2)) IF OPT = "+" THEN XRET$ = SEC2TIME(TIME2SEC(T1)+TIME2SEC(T2)) FUNCTION = XRET$ END FUNCTION '/*-----------------------------------------------------------------*/ ' CLS ' OT$ = TIME$ ' PRINT "Elapsed Timer = "TIME("E") ' PRINT "Reset Elapsed Timer = "TIME("R") ' PRINT "Elapsed Timer = "TIME("E") ' PRINT OT$" AS Civil = "XTIME("C",OT$) ' PRINT "Current Time = "TIME("") ' PRINT "Current Time = "TIME("N") ' PRINT "Seconds Since Midnight = "TIME("S") ' PRINT "Minutes Since Midnight = "TIME("M") ' PRINT "Hours Since Midnight = "TIME("H") ' PRINT "17:00:00 = Seconds > "TIME2SEC("17:00:00") ' PRINT "07:30:00 = Seconds > "TIME2SEC("07:30:00") ' PRINT TMATH("17:00:32","07:30:00","-") ' PRINT TMATH("17:00:32","24:00:00","+") ' INPUT Z