[COLOR=#a020f0]module[/color] glob_vars
[COLOR=#0000ff]! declaration of global variables[/color]
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]integer[/b][/color] :: nr_records, [COLOR=#804040][b]&[/b][/color]
[COLOR=#0000ff]! file record fields[/color]
date, time, temp, point, [COLOR=#804040][b]&[/b][/color]
[COLOR=#0000ff]! save fields[/color]
date_save, time_save, temp_save, point_save, [COLOR=#804040][b]&[/b][/color]
[COLOR=#0000ff]! daily result fields[/color]
min_time, min_temp, min_point, [COLOR=#804040][b]&[/b][/color]
max_time, max_temp, max_point, [COLOR=#804040][b]&[/b][/color]
[COLOR=#0000ff]! total result fields[/color]
tmin_date, tmin_time, tmin_temp, tmin_point, [COLOR=#804040][b]&[/b][/color]
tmax_date, tmax_time, tmax_temp, tmax_point
[COLOR=#a020f0]end module[/color] glob_vars
[COLOR=#a020f0]program[/color] temperatures
[COLOR=#0000ff]! Single-Level Control Break Processing[/color]
[COLOR=#a020f0]use[/color] glob_vars
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]integer[/b][/color] :: stat [COLOR=#0000ff]! file status[/color]
[COLOR=#0000ff]! open file[/color]
[COLOR=#804040][b]open[/b][/color] ([COLOR=#ff00ff]1[/color], [COLOR=#804040][b]file[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'temperatures.dat'[/color], [COLOR=#804040][b]status[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'old'[/color], [COLOR=#804040][b]iostat[/b][/color][COLOR=#804040][b]=[/b][/color]stat)
[COLOR=#804040][b]if[/b][/color] (stat [COLOR=#804040][b].ne.[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'File cannot be opened !'[/color]
[COLOR=#804040][b]go to[/b][/color] [COLOR=#ff00ff]99[/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]'(80A)'[/color]) [COLOR=#ff00ff]'*******************************************************'[/color]
[COLOR=#0000ff]! process file[/color]
nr_records [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
date_save [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
[COLOR=#804040][b]do[/b][/color] [COLOR=#804040][b]while[/b][/color] ([COLOR=#ff00ff].true.[/color])
[COLOR=#0000ff]! read record[/color]
[COLOR=#804040][b]read[/b][/color]([COLOR=#ff00ff]1[/color], [COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]end[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#804040][b]99[/b][/color]) date, time, temp, point
nr_records [COLOR=#804040][b]=[/b][/color] nr_records [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]1[/color]
[COLOR=#008080]call[/color] process_record
[COLOR=#008080]call[/color] save_keys
[COLOR=#804040][b]enddo[/b][/color]
[COLOR=#804040][b] 99 continue[/b][/color]
[COLOR=#0000ff]! at end print totals[/color]
[COLOR=#008080]call[/color] print_daily_summary
[COLOR=#008080]call[/color] print_total_summary
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]10[/color]) nr_records
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]'(80A)'[/color]) [COLOR=#ff00ff]'*******************************************************'[/color]
[COLOR=#0000ff]! close file[/color]
[COLOR=#804040][b]close[/b][/color]([COLOR=#ff00ff]1[/color])
[COLOR=#6a5acd]10[/color] [COLOR=#804040][b]format[/b][/color]([COLOR=#ff00ff]'Processing of'[/color],[COLOR=#008080]1X[/color], I0, [COLOR=#008080]1X[/color], [COLOR=#ff00ff]'lines finished.'[/color])
[COLOR=#a020f0]end program[/color] temperatures
[COLOR=#a020f0]subroutine[/color] process_record
[COLOR=#a020f0]use[/color] glob_vars
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#0000ff]! on 1.record initialize min and max values[/color]
[COLOR=#804040][b]if[/b][/color] (nr_records [COLOR=#804040][b].eq.[/b][/color] [COLOR=#ff00ff]1[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! daily values[/color]
min_time [COLOR=#804040][b]=[/b][/color] time
min_temp [COLOR=#804040][b]=[/b][/color] temp
min_point [COLOR=#804040][b]=[/b][/color] point
max_time [COLOR=#804040][b]=[/b][/color] time
max_temp [COLOR=#804040][b]=[/b][/color] temp
max_point [COLOR=#804040][b]=[/b][/color] point
[COLOR=#0000ff]! total values[/color]
tmin_date [COLOR=#804040][b]=[/b][/color] date
tmin_time [COLOR=#804040][b]=[/b][/color] time
tmin_temp [COLOR=#804040][b]=[/b][/color] temp
tmin_point [COLOR=#804040][b]=[/b][/color] point
tmax_date [COLOR=#804040][b]=[/b][/color] date
tmax_time [COLOR=#804040][b]=[/b][/color] time
tmax_temp [COLOR=#804040][b]=[/b][/color] temp
tmax_point [COLOR=#804040][b]=[/b][/color] point
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#0000ff]! if not on 1.record[/color]
[COLOR=#804040][b]if[/b][/color] (date_save [COLOR=#804040][b].ne.[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! process control break[/color]
[COLOR=#008080]call[/color] process_control_break
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#0000ff]! print line[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]10[/color]) nr_records, date, time, temp, point
[COLOR=#0000ff]! compute minimum[/color]
[COLOR=#804040][b]if[/b][/color] (temp [COLOR=#804040][b].lt.[/b][/color] min_temp) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! daily values[/color]
min_time [COLOR=#804040][b]=[/b][/color] time
min_temp [COLOR=#804040][b]=[/b][/color] temp
min_point [COLOR=#804040][b]=[/b][/color] point
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#804040][b]if[/b][/color] (temp [COLOR=#804040][b].lt.[/b][/color] tmin_temp) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! total values[/color]
tmin_date [COLOR=#804040][b]=[/b][/color] date
tmin_time [COLOR=#804040][b]=[/b][/color] time
tmin_temp [COLOR=#804040][b]=[/b][/color] temp
tmin_point [COLOR=#804040][b]=[/b][/color] point
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#0000ff]! compute maximum[/color]
[COLOR=#804040][b]if[/b][/color] (temp [COLOR=#804040][b].gt.[/b][/color] max_temp) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! daily values[/color]
max_time [COLOR=#804040][b]=[/b][/color] time
max_temp [COLOR=#804040][b]=[/b][/color] temp
max_point [COLOR=#804040][b]=[/b][/color] point
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#804040][b]if[/b][/color] (temp [COLOR=#804040][b].gt.[/b][/color] tmax_temp) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! total values[/color]
tmax_date [COLOR=#804040][b]=[/b][/color] date
tmax_time [COLOR=#804040][b]=[/b][/color] time
tmax_temp [COLOR=#804040][b]=[/b][/color] temp
tmax_point [COLOR=#804040][b]=[/b][/color] point
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#6a5acd]10[/color] [COLOR=#804040][b]format[/b][/color]([COLOR=#008080]5X[/color], i3, [COLOR=#008080]1x[/color], i7, [COLOR=#008080]1X[/color], i5, [COLOR=#008080]1x[/color], i2, [COLOR=#008080]1x[/color], i2)
[COLOR=#a020f0]end subroutine[/color] process_record
[COLOR=#a020f0]subroutine[/color] process_control_break
[COLOR=#a020f0]use[/color] glob_vars
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#0000ff]![/color]
[COLOR=#804040][b]if[/b][/color] (date [COLOR=#804040][b].ne.[/b][/color] date_save) [COLOR=#804040][b]then[/b][/color]
[COLOR=#008080]call[/color] print_daily_summary
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#a020f0]end subroutine[/color] process_control_break
[COLOR=#a020f0]subroutine[/color] print_daily_summary
[COLOR=#a020f0]use[/color] glob_vars
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#0000ff]![/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color])
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]10[/color]) date_save
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]20[/color]) [COLOR=#ff00ff]'* min:'[/color], min_time, min_temp, min_point
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]20[/color]) [COLOR=#ff00ff]'* max:'[/color], max_time, max_temp, max_point
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color])
[COLOR=#6a5acd]10[/color] [COLOR=#804040][b]format[/b][/color]([COLOR=#ff00ff]'* Summary for date'[/color],[COLOR=#008080]1x[/color],i7,[COLOR=#ff00ff]':'[/color])
[COLOR=#6a5acd]20[/color] [COLOR=#804040][b]format[/b][/color](a7, [COLOR=#008080]10x[/color], i5, [COLOR=#008080]1x[/color], i2, [COLOR=#008080]1x[/color], i2)
[COLOR=#0000ff]! initialize gloabal variables[/color]
min_time [COLOR=#804040][b]=[/b][/color] time
min_temp [COLOR=#804040][b]=[/b][/color] temp
min_point [COLOR=#804040][b]=[/b][/color] point
max_time [COLOR=#804040][b]=[/b][/color] time
max_temp [COLOR=#804040][b]=[/b][/color] temp
max_point [COLOR=#804040][b]=[/b][/color] point
[COLOR=#a020f0]end subroutine[/color] print_daily_summary
[COLOR=#a020f0]subroutine[/color] print_total_summary
[COLOR=#a020f0]use[/color] glob_vars
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#0000ff]![/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color])
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]10[/color])
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]20[/color]) [COLOR=#ff00ff]'** min:'[/color], tmin_date, tmin_time, tmin_temp, tmin_point
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]20[/color]) [COLOR=#ff00ff]'** max:'[/color], tmax_date, tmax_time, tmax_temp, tmax_point
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color])
[COLOR=#6a5acd]10[/color] [COLOR=#804040][b]format[/b][/color]([COLOR=#ff00ff]'** Summary for all dates:'[/color])
[COLOR=#6a5acd]20[/color] [COLOR=#804040][b]format[/b][/color](a7, [COLOR=#008080]2x[/color], i7, [COLOR=#008080]1x[/color], i5, [COLOR=#008080]1x[/color], i2, [COLOR=#008080]1x[/color], i2)
[COLOR=#a020f0]end subroutine[/color] print_total_summary
[COLOR=#a020f0]subroutine[/color] save_keys
[COLOR=#a020f0]use[/color] glob_vars
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#0000ff]![/color]
date_save [COLOR=#804040][b]=[/b][/color] date
[COLOR=#a020f0]end subroutine[/color] save_keys