aboutsummaryrefslogtreecommitdiff
path: root/history.f90
diff options
context:
space:
mode:
Diffstat (limited to 'history.f90')
-rw-r--r--history.f9084
1 files changed, 84 insertions, 0 deletions
diff --git a/history.f90 b/history.f90
new file mode 100644
index 0000000..d8193f8
--- /dev/null
+++ b/history.f90
@@ -0,0 +1,84 @@
+module history
+implicit none
+
+ type :: location
+ character(1024)::url
+ type(location), pointer::next
+ end type
+
+contains
+
+ function last_location(first_location)
+ implicit none
+
+ type(location), pointer::first_location
+ type(location), pointer::last_location
+
+ if(.not. associated(first_location)) then
+ last_location => null()
+ else
+ last_location => first_location
+ do while(associated(last_location%next))
+ last_location => last_location%next
+ end do
+ end if
+
+ end function last_location
+
+ function add_location(first_location, url) result(head)
+ implicit none
+
+ type(location), pointer::first_location
+ type(location), pointer::head
+ character(*), intent(in)::url
+
+ type(location), pointer::last
+
+ ! Check if it is our first location
+ if(.not. associated(first_location)) then
+
+ allocate(first_location)
+ first_location%next => null()
+ first_location%url = url
+
+ else
+
+ last => last_location(first_location)
+ allocate(last%next)
+ last => last%next
+ last%next => null()
+ last%url = url
+
+ end if
+
+ head => first_location
+
+ end function add_location
+
+ subroutine back_location(first_location, url)
+ implicit none
+
+ type(location), pointer::first_location
+ character(*), intent(out)::url
+
+ type(location), pointer::last, new_last
+
+ url = " "
+
+ last => last_location(first_location)
+ if(associated(last)) then
+ url = last%url
+
+ if(.not. associated(last, first_location)) then
+ new_last => first_location
+ do while(.not. associated(new_last%next, last))
+ new_last => new_last%next
+ end do
+ new_last%next => null()
+ deallocate(last)
+ end if
+ end if
+
+ end subroutine back_location
+
+end module history \ No newline at end of file