program fancy use, intrinsic :: iso_fortran_env, only : stderr=>ERROR_UNIT,stdin=>INPUT_UNIT,stdout=>OUTPUT_UNIT use M_attr, only : attr, attr_update, attr_mode implicit none integer :: i character(len=256),parameter :: help_list_nodash(*)=[character(len=256) :: & !'<clear>', & '<E><w><b><bo>F</bo>ortran <bo>P</bo>ackage <bo>M</bo>anager:</b>', & '<E><w> ', & '<E><w><bo>USAGE: <r><un>fpm</un></r><w> [ <r><un>SUBCOMMAND</un></r> <w>[<m>SUBCOMMAND_OPTIONS</m><w>] ]|& &<bo>[<g>--list</g><w>|<g>--help</g><w>|<g>--version</g><w>]', & '<E><w> ', & '<E><w> where <r><un><bo>SUBCOMMAND</bo></un></r> <w>is commonly one of & &<bo><g>new</g><w>|<g>build</g><w>|<g>run</g><w>|<g>test</g></bo> <w>but may be any of', & '<E><w> ', & '<E><w> <bo><g>build</g></bo> <w>Compile the package placing results in the "build" directory', & '<E><w> <bo><g>help</g></bo> <w>Display help ', & '<E><w> <bo><g>list</g></bo> <w>Display this list of subcommand descriptions ', & '<E><w> <bo><g>new</g></bo> <w>Create a new Fortran package directory with sample files ', & '<E><w> <bo><g>run</g></bo> <w>Run the local package application programs ', & '<E><w> <bo><g>test</g></bo> <w>Run the test programs ', & '<E><w> <bo><g>update</g></bo> <w>Update and manage project dependencies ', & '<E><w> <bo><g>install</g></bo> <w>Install project ', & '<E><w> ', & '<E><w> <bo>Enter "<r><un>fpm</un></r> <g>--list</g><w></bo>" for a brief list of subcommand options. Enter', & '<E><w> "<bo><r><un>fpm</un></r> <g>--help</g></bo><w>" or & &"<bo><r><un>fpm</un> <un>SUBCOMMAND</un></r> <g>--help</g><w></bo>" for detailed descriptions.', & '<E><w> ', & '<E><w> <bo>Note:</bo> color mode is controlled by the environment variable FPM_COLOR. The', & '<E><w> set of allowable values is {<g><bo>always,never,auto</bo></g><w>}. The default is "<g><bo>auto</bo></g><w>". ', & '<E><w> '] character(len=256),parameter :: help_list_dash(*) = [character(len=256) :: & !'<clear>', & '<E><w><b><bo>F</bo>ortran </bo>P</bo>ackage <bo>M</bo>anager:</b>', & '<E><w> ', & '<E><w> <bo><g>build</g><w> [<g>--compiler</g> <m>COMPILER_NAME</m><w>] & &[<g>--profile</g> <m>PROF</m><w>] [<g>--flag</g> <m>FFLAGS</m><w>] [<g>--list</g><w>]', & '<E><w> ', & '<E><w> <bo><g>help</g><w> [<r><un>NAME(s)</un></r><w>] ', & '<E><w> ', & '<E><w> <bo><g>new</g><w> <r><un>NAME</un></r><w> [[<g>--lib</g><w>|<g>--src</g><w>] [<g>--app</g><w>] & &[<g>--test</g><w>] [<g>--example</g><w>]]|', & '<E><w> <bo> [<g>--full</g><w>|<g>--bare</g><w>][<g>--backfill</g><w>]', & '<E><w> ', & '<E><w> <bo><g>update</g><w> <w>[<r><un>NAME(s)</un></r><w>] [<g>--fetch-only</g><w>] [<g>--clean</g><w>] [<g>--verbose</g><w>]', & '<E><w> ', & '<E><w> <bo><g>list</g><w> [<g>--list</g><w>]', & '<E><w> ', & '<E><w> <bo><g>run</g><w> [[<g>--target</g><w>] <r><un>NAME(s)</un></r> <w>[<g>--example</g><w>]& &[<g>--profile</g><w> <m>PROF</m><w>] [<g>--flag</g><w> <m>FFLAGS</m><w>] [<g>--all</g><w>]', & '<E><w> <bo> [<g>--runner</g><w> <m>"CMD"</m><w>] [<g>--compiler</g><w> <m>COMPILER_NAME</m><w>] & &[<g>--list</g><w>] [-- <m>ARGS</m><w>]', & '<E><w> ', & '<E><w> <bo><g>test</g><w> [[<g>--target</g><w>] <r><un>NAME(s)</un></r><w>] [<g>--profile</g><w> <m>PROF</m><w>] & &[<g>--flag</g><w> <m>FFLAGS</m><w>] [<g>--runner</g><w> <m>"CMD"</m><w>]', & '<E><w> <bo> [<g>--list</g><w>] [<g>--compiler</g><w> <m>COMPILER_NAME</m><w>] [-- <m>ARGS</m><w>]', & '<E><w> ', & '<E><w> <bo><g>install</g><w> [<g>--profile</g><w> <m>PROF</m>] [<g>--flag</g><w> <m>FFLAGS</m>] & &[<g>--no-rebuild</g><w>] [<g>--prefix</g><w> <m>PATH</m><w>] ', & '<E><w> <bo> <w>[<m>OPTIONS</m><w>]', & '<E><w> '] ! shows a limitation if periods are replaced with spaces the CHAR= option does not ! count the colored blanks so if no text after the blanks too much padding is appended to the line ! need to count last character with a background attribute or something different !nvfortran bug!character(len=*),parameter :: text(*)= [character(len=132) :: & character(len=*),parameter :: text(22)= [character(len=132) :: & '<E><e> ',& '<E><w><bo> <C> </C><E></bo>',& '<E><w><bo> <C> LLL </C><bo><B><w> F</bo>ortran </B><C> </bo><W> <e></C><E>',& '<E><w><bo> <C> LL LL </C><bo><B><w> P</bo>ackage </B><C> </bo><W> <e></C><E>',& '<E><w><bo> <C> LL </C><bo><B><w> M</bo>anager </B><C> </bo><W> <e></C><E>',& '<E><w><bo> <C> LLLLLL <W> <E></bo>',& '<E><w><bo> <C> LL <W> <E></bo>',& '<E><w><bo> <C> LL LLLLL LLL <W> <E></bo>',& '<E><w><bo> <C> LL LLLLLL LL L LL <W> <E></bo>',& '<E><w><bo> <C> LL LL L LL L LL <W> <E></bo>',& '<E><w><bo> <C> LL LL L LL L LL <W> <E></bo>',& '<E><w><bo> <C> LL LLLLLLL LL L LL <W> <E></bo>',& '<E><w><bo> <C> LL <W> <E></bo>',& '<E><w><bo> <C> LL <W> <E></bo>',& '<E><w><bo> <C> LL <W> <E></bo>',& '<E><w><bo> <C> <W> <E></bo>',& '<E><w><bo> <W> <E></bo><e> ',& '<E><bo><b>Program:</b><w> fpm(1) ',& '<E><bo><b>Description:</b><w> package manager and build system for Fortran',& '<E><bo><b>Version:</b><w> 0.3.0, alpha ',& '<E><bo><b>License:</b><w> MIT ',& '<E><bo><b>Home Page:</b><w> https://github.com/fortran-lang/fpm '] call attr_mode(manner='color') write(*,'(a)')(attr(trim(help_list_nodash(i)),chars=80),i=1,size(help_list_nodash)) call paws() write(*,'(a)')(attr(trim(help_list_dash(i)),chars=80),i=1,size(help_list_dash)) call paws() ! add custom keywords call attr_mode(manner='plain') write(*,'(a)')(attr(trim(text(i)),chars=80),i=1,size(text)) call paws() call attr_mode(manner='color') write(*,'(a)')(attr(trim(text(i)),chars=80),i=1,size(text)) call paws() contains subroutine paws() character(len=1) :: letter integer :: ios write(stdout,'(a)',advance='no',iostat=ios)'Enter [RETURN] to continue ...' read(*,'(a)',iostat=ios)letter write(stdout,'(a)')attr('<clear>') flush(unit=stdout,iostat=ios) end subroutine paws end program fancy