! Copyright (c) 2022 Approximatrix, LLC ! ! Permission is hereby granted, free of charge, to any person obtaining a copy ! of this software and associated documentation files (the "Software"), to deal ! in the Software without restriction, including without limitation the rights ! to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ! copies of the Software, and to permit persons to whom the Software is ! furnished to do so, subject to the following conditions: ! ! The above copyright notice and this permission notice shall be included in ! all copies or substantial portions of the Software. ! ! The Software shall be used for Good, not Evil. ! ! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ! AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ! OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ! SOFTWARE. program driver use fpoint_pptxzip implicit none type(pptxtracted)::presentation !character(len=*), parameter::filename = "Welcome to PowerPoint.pptx" !"samplepptx.pptx" logical::verbose logical::notes integer::i, j character(len=:), pointer::filename, arg if(command_argument_count() < 1) then call usage() call exit(0) end if verbose = .false. notes = .false. filename => null() do i = 1, command_argument_count() call get_command_argument(i, length=j) allocate(character(len=j)::arg) call get_command_argument(i, value=arg) if(arg == "-n") then notes = .true. else if(arg == "-v") then verbose = .true. else filename => arg arg => null() end if if(associated(arg)) then deallocate(arg) arg => null() end if end do if(verbose) then call title() end if call maybe_print(verbose, "Loading "//filename) if(presentation%open(filename)) then call maybe_print(verbose, "File opened at "//trim(presentation%directory)) call presentation%parse() write(*, '(A)') presentation%to_text() call presentation%close() else call maybe_print(verbose, "Failed on "//filename) call exit(1) end if call exit(0) contains subroutine title() implicit none Print *, "FPoint - PowerPoint to Text Converter" Print *, "Copyright 2022 Approximatrix, LLC" end subroutine title subroutine usage() implicit none character(512)::prg call get_command_argument(0, prg) call title() Print *, " " Print *, "Usage: "//trim(prg)//" [options] " Print *, " " Print *, "Options:" Print *, " " Print *, " -n Extract notes instead of slide contents" Print *, " -v Be somewhat verbose, probably not enough to be interesting" Print *, " " Print *, "Output is printed to standard out" Print *, " " end subroutine usage subroutine maybe_print(v, str) implicit none logical, intent(in)::v character(len=*), intent(in)::str if(v) then Print *, str end if end subroutine maybe_print end program driver