From aa6707d3e3b6e449eb6b2299091cfaefe52ae849 Mon Sep 17 00:00:00 2001 From: Jeffrey Armstrong Date: Wed, 6 May 2020 08:34:27 -0400 Subject: Fixed silly Fortran mistakes regarding functions returning allocated strings. Added an unused history system. Fixed URL handling. --- history.f90 | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 history.f90 (limited to 'history.f90') 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 -- cgit v1.2.3