diff --git a/app/dmbackup.f90 b/app/dmbackup.f90 index ab1d647..49d4bd6 100644 --- a/app/dmbackup.f90 +++ b/app/dmbackup.f90 @@ -48,7 +48,7 @@ integer function backup(app) result(rc) rc = dm_db_open(db, app%database) if (dm_is_error(rc)) then - call dm_error_out(rc, 'failed to open database') + call dm_error_out(rc, 'failed to open database ' // app%database) return end if diff --git a/app/dmbot.f90 b/app/dmbot.f90 index 41721af..edef59d 100644 --- a/app/dmbot.f90 +++ b/app/dmbot.f90 @@ -709,7 +709,7 @@ function message_callback(connection, stanza, user_data) bind(c) type = xmpp_stanza_get_type(stanza) if (type == IM_STANZA_TYPE_ERROR) then - call logger%warning('received error message', error=E_IO) + call logger%warning('received error stanza', error=E_IO) return end if diff --git a/app/dmdb.f90 b/app/dmdb.f90 index df9f1e8..4fad611 100644 --- a/app/dmdb.f90 +++ b/app/dmdb.f90 @@ -47,12 +47,12 @@ program dmdb ! Initialise logger. logger => dm_logger_get_default() - call logger%configure(name = app%logger, & - node_id = app%node_id, & - source = app%name, & - debug = app%debug, & - ipc = (len_trim(app%logger) > 0), & - verbose = app%verbose) + call logger%configure(name = app%logger, & ! Name of logger process. + node_id = app%node_id, & ! Node id. + source = app%name, & ! Log source. + debug = app%debug, & ! Forward debug messages via IPC. + ipc = (len_trim(app%logger) > 0), & ! Enable IPC. + verbose = app%verbose) ! Print logs to standard error. init_block: block ! Open SQLite database. @@ -64,10 +64,10 @@ program dmdb end if ! Open observation message queue for reading. - rc = dm_mqueue_open(mqueue = mqueue, & - type = TYPE_OBSERV, & - name = app%name, & - access = MQUEUE_RDONLY) + rc = dm_mqueue_open(mqueue = mqueue, & ! Message queue type. + type = TYPE_OBSERV, & ! Observation type. + name = app%name, & ! Name of message queue. + access = MQUEUE_RDONLY) ! Read-only access. if (dm_is_error(rc)) then call logger%error('failed to open mqueue /' // trim(app%name) // ': ' // & diff --git a/app/dmfs.f90 b/app/dmfs.f90 index 55e9c51..d2cb80d 100644 --- a/app/dmfs.f90 +++ b/app/dmfs.f90 @@ -49,12 +49,12 @@ program dmfs ! Initialise logger. logger => dm_logger_get_default() - call logger%configure(name = app%logger, & - node_id = app%node_id, & - source = app%name, & - debug = app%debug, & - ipc = (len_trim(app%logger) > 0), & - verbose = app%verbose) + call logger%configure(name = app%logger, & ! Name of logger process. + node_id = app%node_id, & ! Node id. + source = app%name, & ! Log source. + debug = app%debug, & ! Forward debug messages via IPC. + ipc = (len_trim(app%logger) > 0), & ! Enable IPC. + verbose = app%verbose) ! Print logs to standard error. ! Run main loop. call dm_signal_register(signal_callback) diff --git a/app/dmgrc.f90 b/app/dmgrc.f90 index 68c1e02..4e82400 100644 --- a/app/dmgrc.f90 +++ b/app/dmgrc.f90 @@ -48,19 +48,19 @@ program dmgrc ! Initialise logger. logger => dm_logger_get_default() - call logger%configure(name = app%logger, & - node_id = app%node_id, & - source = app%name, & - debug = app%debug, & - ipc = (len_trim(app%logger) > 0), & - verbose = app%verbose) + call logger%configure(name = app%logger, & ! Name of logger process. + node_id = app%node_id, & ! Node id. + source = app%name, & ! Log source. + debug = app%debug, & ! Forward debug messages via IPC. + ipc = (len_trim(app%logger) > 0), & ! Enable IPC. + verbose = app%verbose) ! Print logs to standard error. init_block: block ! Open observation message queue for reading. - rc = dm_mqueue_open(mqueue = mqueue, & - type = TYPE_OBSERV, & - name = app%name, & - access = MQUEUE_RDONLY) + rc = dm_mqueue_open(mqueue = mqueue, & ! Message queue type. + type = TYPE_OBSERV, & ! Observation type. + name = app%name, & ! Name of message queue. + access = MQUEUE_RDONLY) ! Read-only access. if (dm_is_error(rc)) then call dm_error_out(rc, 'failed to open mqueue /' // trim(app%name) // ': ' // dm_system_error_message()) diff --git a/app/dmimport.f90 b/app/dmimport.f90 index ed29753..f528528 100644 --- a/app/dmimport.f90 +++ b/app/dmimport.f90 @@ -90,16 +90,11 @@ integer function import(app) result(rc) ! Check for appropriate database table. select case (app%type) - case (TYPE_NODE) - has = dm_db_has_table(db, SQL_TABLE_NODES) - case (TYPE_SENSOR) - has = dm_db_has_table(db, SQL_TABLE_SENSORS) - case (TYPE_TARGET) - has = dm_db_has_table(db, SQL_TABLE_TARGETS) - case (TYPE_OBSERV) - has = dm_db_has_table(db, SQL_TABLE_OBSERVS) - case (TYPE_LOG) - has = dm_db_has_table(db, SQL_TABLE_LOGS) + case (TYPE_NODE); has = dm_db_has_table(db, SQL_TABLE_NODES) + case (TYPE_SENSOR); has = dm_db_has_table(db, SQL_TABLE_SENSORS) + case (TYPE_TARGET); has = dm_db_has_table(db, SQL_TABLE_TARGETS) + case (TYPE_OBSERV); has = dm_db_has_table(db, SQL_TABLE_OBSERVS) + case (TYPE_LOG); has = dm_db_has_table(db, SQL_TABLE_LOGS) end select if (.not. has) then @@ -131,16 +126,11 @@ integer function import(app) result(rc) ! Read record from file. select case (app%type) - case (TYPE_NODE) - rc = dm_csv_read(node, unit, app%separator, app%quote) - case (TYPE_SENSOR) - rc = dm_csv_read(sensor, unit, app%separator, app%quote) - case (TYPE_TARGET) - rc = dm_csv_read(target, unit, app%separator, app%quote) - case (TYPE_OBSERV) - rc = dm_csv_read(observ, unit, app%separator, app%quote) - case (TYPE_LOG) - rc = dm_csv_read(log, unit, app%separator, app%quote) + case (TYPE_NODE); rc = dm_csv_read(node, unit, app%separator, app%quote) + case (TYPE_SENSOR); rc = dm_csv_read(sensor, unit, app%separator, app%quote) + case (TYPE_TARGET); rc = dm_csv_read(target, unit, app%separator, app%quote) + case (TYPE_OBSERV); rc = dm_csv_read(observ, unit, app%separator, app%quote) + case (TYPE_LOG); rc = dm_csv_read(log, unit, app%separator, app%quote) end select ! Ignore comments and empty rows. @@ -161,16 +151,11 @@ integer function import(app) result(rc) ! Validate record but skip database insert on dry run. if (app%dry) then select case (app%type) - case (TYPE_NODE) - valid = dm_node_is_valid(node) - case (TYPE_SENSOR) - valid = dm_sensor_is_valid(sensor) - case (TYPE_TARGET) - valid = dm_target_is_valid(target) - case (TYPE_OBSERV) - valid = dm_observ_is_valid(observ) - case (TYPE_LOG) - valid = dm_log_is_valid(log) + case (TYPE_NODE); valid = dm_node_is_valid(node) + case (TYPE_SENSOR); valid = dm_sensor_is_valid(sensor) + case (TYPE_TARGET); valid = dm_target_is_valid(target) + case (TYPE_OBSERV); valid = dm_observ_is_valid(observ) + case (TYPE_LOG); valid = dm_log_is_valid(log) end select if (.not. valid) then @@ -184,16 +169,11 @@ integer function import(app) result(rc) ! Validate and insert record. select case (app%type) - case (TYPE_NODE) - rc = dm_db_insert(db, node) - case (TYPE_SENSOR) - rc = dm_db_insert(db, sensor) - case (TYPE_TARGET) - rc = dm_db_insert(db, target) - case (TYPE_OBSERV) - rc = dm_db_insert(db, observ) - case (TYPE_LOG) - rc = dm_db_insert(db, log) + case (TYPE_NODE); rc = dm_db_insert(db, node) + case (TYPE_SENSOR); rc = dm_db_insert(db, sensor) + case (TYPE_TARGET); rc = dm_db_insert(db, target) + case (TYPE_OBSERV); rc = dm_db_insert(db, observ) + case (TYPE_LOG); rc = dm_db_insert(db, log) end select ! Handle database result. diff --git a/app/dmlog.f90 b/app/dmlog.f90 index 3ce44f3..d2678e7 100644 --- a/app/dmlog.f90 +++ b/app/dmlog.f90 @@ -58,7 +58,7 @@ integer function read_args(app, log) result(rc) arg_type('target', short='T', type=ARG_TYPE_ID), & ! -T, --target arg_type('observ', short='O', type=ARG_TYPE_UUID), & ! -O, --observ arg_type('source', short='Z', type=ARG_TYPE_ID, max_len=LOG_SOURCE_LEN), & ! -Z, --source - arg_type('message', short='m', type=ARG_TYPE_STRING, max_len=LOG_MESSAGE_LEN, required=.true.) & ! -m, --message + arg_type('message', short='m', type=ARG_TYPE_STRING, max_len=LOG_MESSAGE_LEN, required=.true.) & ! -m, --message ] ! Read all command-line arguments. diff --git a/app/dmlogger.f90 b/app/dmlogger.f90 index 1fcf64a..b2c7788 100644 --- a/app/dmlogger.f90 +++ b/app/dmlogger.f90 @@ -11,20 +11,20 @@ program dmlogger character(len=*), parameter :: APP_NAME = 'dmlogger' integer, parameter :: APP_MAJOR = 0 integer, parameter :: APP_MINOR = 9 - integer, parameter :: APP_PATCH = 2 + integer, parameter :: APP_PATCH = 3 integer, parameter :: APP_DB_NSTEPS = 500 !! Number of steps before database is optimised. integer, parameter :: APP_DB_TIMEOUT = DB_TIMEOUT_DEFAULT !! SQLite 3 busy timeout in mseconds. type :: app_type !! Application settings. - character(len=ID_LEN) :: name = APP_NAME !! Name of logger instance and POSIX semaphore. - character(len=FILE_PATH_LEN) :: config = ' ' !! Path to configuration file. - character(len=FILE_PATH_LEN) :: database = ' ' !! Path to SQLite database file. - character(len=NODE_ID_LEN) :: node_id = ' ' !! Node id. - integer :: minlevel = LL_WARNING !! Minimum level for a log to be stored in the database. - logical :: ipc = .false. !! Use POSIX semaphore for process synchronisation. - logical :: verbose = .false. !! Print debug messages to stderr. + character(len=ID_LEN) :: name = APP_NAME !! Name of logger instance and POSIX semaphore. + character(len=FILE_PATH_LEN) :: config = ' ' !! Path to configuration file. + character(len=FILE_PATH_LEN) :: database = ' ' !! Path to SQLite database file. + character(len=NODE_ID_LEN) :: node_id = ' ' !! Node id. + integer :: min_level = LL_INFO !! Minimum level for a log to be stored in the database. + logical :: ipc = .false. !! Use POSIX semaphore for process synchronisation. + logical :: verbose = .false. !! Print debug messages to stderr. end type app_type class(logger_class), pointer :: logger ! Logger object. @@ -45,10 +45,10 @@ program dmlogger init_block: block ! Initialise logger. logger => dm_logger_get_default() - call logger%configure(name = app%name, & ! Name of global logger. + call logger%configure(name = app%name, & ! Name of global logger. node_id = app%node_id, & ! Sensor node id. - source = app%name, & ! Application name. - ipc = .false., & ! Don't send logs via IPC. + source = app%name, & ! Application name. + ipc = .false., & ! Don't send logs via IPC. verbose = app%verbose) ! Prints logs to terminal. ! Open SQLite database. @@ -60,10 +60,10 @@ program dmlogger end if ! Open log message queue for reading. - rc = dm_mqueue_open(mqueue = mqueue, & - type = TYPE_LOG, & - name = app%name, & - access = MQUEUE_RDONLY) + rc = dm_mqueue_open(mqueue = mqueue, & ! Message queue type. + type = TYPE_LOG, & ! Log type. + name = app%name, & ! Name of message queue. + access = MQUEUE_RDONLY) ! Read-only access. if (dm_is_error(rc)) then call logger%error('failed to open mqueue /' // trim(app%name) // ': ' // & @@ -121,7 +121,7 @@ integer function read_args(app) result(rc) ! Overwrite settings. call dm_arg_get(args(3), app%database) call dm_arg_get(args(4), app%node_id) - call dm_arg_get(args(5), app%minlevel) + call dm_arg_get(args(5), app%min_level) call dm_arg_get(args(6), app%ipc) call dm_arg_get(args(7), app%verbose) @@ -146,7 +146,7 @@ integer function read_args(app) result(rc) return end if - if (.not. dm_log_level_is_valid(app%minlevel)) then + if (.not. dm_log_level_is_valid(app%min_level)) then call dm_error_out(rc, 'invalid log level') return end if @@ -167,7 +167,7 @@ integer function read_config(app) result(rc) if (dm_is_ok(rc)) then call dm_config_get(config, 'database', app%database) call dm_config_get(config, 'node', app%node_id) - call dm_config_get(config, 'minlevel', app%minlevel) + call dm_config_get(config, 'minlevel', app%min_level) call dm_config_get(config, 'ipc', app%ipc) call dm_config_get(config, 'verbose', app%verbose) end if @@ -211,7 +211,7 @@ subroutine run(app, db, mqueue, sem) call logger%info('started ' // APP_NAME) call logger%debug('waiting for log on mqueue /' // trim(app%name) // ' (minimum log level is ' // & - trim(LOG_LEVEL_NAMES(app%minlevel)) // ')') + trim(LOG_LEVEL_NAMES(app%min_level)) // ')') ipc_loop: do ! Blocking read from POSIX message queue. rc = dm_mqueue_read(mqueue, log) @@ -229,7 +229,7 @@ subroutine run(app, db, mqueue, sem) if (app%verbose) call logger%out(log) ! Skip if log level is lower than minimum level. - if (log%level < app%minlevel) cycle ipc_loop + if (log%level < app%min_level) cycle ipc_loop ! Skip if log already exists. if (dm_db_has_log(db, log%id)) then diff --git a/app/dmlua.f90 b/app/dmlua.f90 index 37745b0..8a49ac1 100644 --- a/app/dmlua.f90 +++ b/app/dmlua.f90 @@ -45,12 +45,12 @@ program dmlua ! Initialise logger. logger => dm_logger_get_default() - call logger%configure(name = app%logger, & - node_id = app%node_id, & - source = app%name, & - debug = app%debug, & - ipc = (len_trim(app%logger) > 0), & - verbose = app%verbose) + call logger%configure(name = app%logger, & ! Name of logger process. + node_id = app%node_id, & ! Node id. + source = app%name, & ! Log source. + debug = app%debug, & ! Forward debug messages via IPC. + ipc = (len_trim(app%logger) > 0), & ! Enable IPC. + verbose = app%verbose) ! Print logs to standard error. init_block: block ! Initialise Lua interpreter. @@ -81,15 +81,15 @@ program dmlua rc = dm_lua_open(lua, app%script, eval=.true.) if (dm_is_error(rc)) then - call logger%error('failed to load Lua script', error=rc) + call logger%error('failed to load Lua script ' // app%script, error=rc) exit init_block end if ! Open observation message queue for reading. - rc = dm_mqueue_open(mqueue = mqueue, & - type = TYPE_OBSERV, & - name = app%name, & - access = MQUEUE_RDONLY) + rc = dm_mqueue_open(mqueue = mqueue, & ! Message queue type. + type = TYPE_OBSERV, & ! Observation type. + name = app%name, & ! Name of message queue. + access = MQUEUE_RDONLY) ! Read-only access. if (dm_is_error(rc)) then call logger%error('failed to open mqueue /' // trim(app%name) // ': ' // & diff --git a/app/dmpipe.f90 b/app/dmpipe.f90 index 76b3a68..b549c90 100644 --- a/app/dmpipe.f90 +++ b/app/dmpipe.f90 @@ -52,12 +52,12 @@ program dmpipe ! Initialise logger. logger => dm_logger_get_default() - call logger%configure(name = app%logger, & - node_id = app%node_id, & - source = app%name, & - debug = app%debug, & - ipc = (len_trim(app%logger) > 0), & - verbose = app%verbose) + call logger%configure(name = app%logger, & ! Name of logger process. + node_id = app%node_id, & ! Node id. + source = app%name, & ! Log source. + debug = app%debug, & ! Forward debug messages via IPC. + ipc = (len_trim(app%logger) > 0), & ! Enable IPC. + verbose = app%verbose) ! Print logs to standard error. ! Run main loop. call dm_signal_register(signal_callback) diff --git a/app/dmrecv.f90 b/app/dmrecv.f90 index 32bf24c..ac9308c 100644 --- a/app/dmrecv.f90 +++ b/app/dmrecv.f90 @@ -62,19 +62,19 @@ program dmrecv ! Initialise logger. logger => dm_logger_get_default() - call logger%configure(name = app%logger, & - node_id = app%node_id, & - source = app%name, & - debug = app%debug, & - ipc = (len_trim(app%logger) > 0), & - verbose = app%verbose) + call logger%configure(name = app%logger, & ! Name of logger process. + node_id = app%node_id, & ! Node id. + source = app%name, & ! Log source. + debug = app%debug, & ! Forward debug messages via IPC. + ipc = (len_trim(app%logger) > 0), & ! Enable IPC. + verbose = app%verbose) ! Print logs to standard error. init_block: block ! Open log message queue for reading. - rc = dm_mqueue_open(mqueue = mqueue, & - type = app%type, & - name = app%name, & - access = MQUEUE_RDONLY) + rc = dm_mqueue_open(mqueue = mqueue, & ! Message queue type. + type = app%type, & ! Observation or log type. + name = app%name, & ! Name of message queue. + access = MQUEUE_RDONLY) ! Read-only access. if (dm_is_error(rc)) then call logger%error('failed to open mqueue /' // app%name, error=rc) diff --git a/app/dmsend.f90 b/app/dmsend.f90 index e5d394d..c82aa04 100644 --- a/app/dmsend.f90 +++ b/app/dmsend.f90 @@ -46,12 +46,12 @@ program dmsend ! Initialise logger. logger => dm_logger_get_default() - call logger%configure(name = app%logger, & - node_id = app%node_id, & - source = app%name, & - debug = app%debug, & - ipc = (len_trim(app%logger) > 0), & - verbose = app%verbose) + call logger%configure(name = app%logger, & ! Name of logger process. + node_id = app%node_id, & ! Node id. + source = app%name, & ! Log source. + debug = app%debug, & ! Forward debug messages via IPC. + ipc = (len_trim(app%logger) > 0), & ! Enable IPC. + verbose = app%verbose) ! Print logs to standard error. ! Read and send data. rc = run(app) @@ -192,10 +192,10 @@ integer function run(app) result(rc) ! Open message queue of receiver for writing. if (.not. app%forward) then call logger%debug('opening mqueue /' // app%receiver) - rc = dm_mqueue_open(mqueue = mqueue, & - type = app%type, & - name = app%receiver, & - access = MQUEUE_WRONLY, & + rc = dm_mqueue_open(mqueue = mqueue, & ! Message queue type. + type = app%type, & ! Observation or log type. + name = app%receiver, & ! Name of message queue. + access = MQUEUE_WRONLY, & ! Write-only access. blocking = .true.) if (dm_is_error(rc)) then diff --git a/src/dm_camera.f90 b/src/dm_camera.f90 index abe0120..f927a4c 100644 --- a/src/dm_camera.f90 +++ b/src/dm_camera.f90 @@ -69,7 +69,7 @@ module dm_camera type, public :: camera_type !! Camera settings type. - character(len=FILE_PATH_LEN) :: input = ' ' !! Input device path (`/dev/video0` or `rtsp://10.0.0.1`). + character(len=FILE_PATH_LEN) :: input = ' ' !! Input device path (`/dev/video0` or `rtsp://10.0.0.1/`). integer :: device = CAMERA_DEVICE_NONE !! Input device. integer :: width = 0 !! Camera stream width in pixels (optional). integer :: height = 0 !! Camera stream height in pixels (optional). @@ -109,8 +109,11 @@ integer function dm_camera_capture(camera, output, command) result(rc) if (len_trim(camera%input) == 0 .or. len_trim(output) == 0) exit io_block rc = E_INVALID - if (.not. dm_camera_device_is_valid(camera%device)) return - if (camera%device == CAMERA_DEVICE_RTSP .and. .not. dm_string_starts_with(camera%input, 'rtsp://')) exit io_block + if (.not. dm_camera_device_is_valid(camera%device)) exit io_block + + if (camera%device == CAMERA_DEVICE_RTSP) then + if (.not. dm_string_starts_with(camera%input, 'rtsp://')) exit io_block + end if rc = E_IO call camera_prepare_capture(command_, camera, output) diff --git a/src/dm_gm.f90 b/src/dm_gm.f90 index c5c0275..77907f2 100644 --- a/src/dm_gm.f90 +++ b/src/dm_gm.f90 @@ -105,17 +105,11 @@ module dm_gm character(len=*), parameter, public :: GM_COLOR_GHOST_WHITE = 'ghostwhite' character(len=*), parameter, public :: GM_COLOR_GOLD = 'gold' character(len=*), parameter, public :: GM_COLOR_GOLDE_NROD = 'goldenrod' + character(len=*), parameter, public :: GM_COLOR_GRAY = 'gray' character(len=*), parameter, public :: GM_COLOR_GRAY0 = 'gray0' character(len=*), parameter, public :: GM_COLOR_GRAY1 = 'gray1' - character(len=*), parameter, public :: GM_COLOR_GRAY2 = 'gray2' - character(len=*), parameter, public :: GM_COLOR_GRAY3 = 'gray3' - character(len=*), parameter, public :: GM_COLOR_GRAY4 = 'gray4' - character(len=*), parameter, public :: GM_COLOR_GRAY5 = 'gray5' - character(len=*), parameter, public :: GM_COLOR_GRAY6 = 'gray6' - character(len=*), parameter, public :: GM_COLOR_GRAY7 = 'gray7' - character(len=*), parameter, public :: GM_COLOR_GRAY8 = 'gray8' - character(len=*), parameter, public :: GM_COLOR_GRAY9 = 'gray9' character(len=*), parameter, public :: GM_COLOR_GRAY10 = 'gray10' + character(len=*), parameter, public :: GM_COLOR_GRAY100 = 'gray100' character(len=*), parameter, public :: GM_COLOR_GRAY11 = 'gray11' character(len=*), parameter, public :: GM_COLOR_GRAY12 = 'gray12' character(len=*), parameter, public :: GM_COLOR_GRAY13 = 'gray13' @@ -125,6 +119,7 @@ module dm_gm character(len=*), parameter, public :: GM_COLOR_GRAY17 = 'gray17' character(len=*), parameter, public :: GM_COLOR_GRAY18 = 'gray18' character(len=*), parameter, public :: GM_COLOR_GRAY19 = 'gray19' + character(len=*), parameter, public :: GM_COLOR_GRAY2 = 'gray2' character(len=*), parameter, public :: GM_COLOR_GRAY20 = 'gray20' character(len=*), parameter, public :: GM_COLOR_GRAY21 = 'gray21' character(len=*), parameter, public :: GM_COLOR_GRAY22 = 'gray22' @@ -135,6 +130,7 @@ module dm_gm character(len=*), parameter, public :: GM_COLOR_GRAY27 = 'gray27' character(len=*), parameter, public :: GM_COLOR_GRAY28 = 'gray28' character(len=*), parameter, public :: GM_COLOR_GRAY29 = 'gray29' + character(len=*), parameter, public :: GM_COLOR_GRAY3 = 'gray3' character(len=*), parameter, public :: GM_COLOR_GRAY30 = 'gray30' character(len=*), parameter, public :: GM_COLOR_GRAY31 = 'gray31' character(len=*), parameter, public :: GM_COLOR_GRAY32 = 'gray32' @@ -145,6 +141,7 @@ module dm_gm character(len=*), parameter, public :: GM_COLOR_GRAY37 = 'gray37' character(len=*), parameter, public :: GM_COLOR_GRAY38 = 'gray38' character(len=*), parameter, public :: GM_COLOR_GRAY39 = 'gray39' + character(len=*), parameter, public :: GM_COLOR_GRAY4 = 'gray4' character(len=*), parameter, public :: GM_COLOR_GRAY40 = 'gray40' character(len=*), parameter, public :: GM_COLOR_GRAY41 = 'gray41' character(len=*), parameter, public :: GM_COLOR_GRAY42 = 'gray42' @@ -155,6 +152,7 @@ module dm_gm character(len=*), parameter, public :: GM_COLOR_GRAY47 = 'gray47' character(len=*), parameter, public :: GM_COLOR_GRAY48 = 'gray48' character(len=*), parameter, public :: GM_COLOR_GRAY49 = 'gray49' + character(len=*), parameter, public :: GM_COLOR_GRAY5 = 'gray5' character(len=*), parameter, public :: GM_COLOR_GRAY50 = 'gray50' character(len=*), parameter, public :: GM_COLOR_GRAY51 = 'gray51' character(len=*), parameter, public :: GM_COLOR_GRAY52 = 'gray52' @@ -165,6 +163,7 @@ module dm_gm character(len=*), parameter, public :: GM_COLOR_GRAY57 = 'gray57' character(len=*), parameter, public :: GM_COLOR_GRAY58 = 'gray58' character(len=*), parameter, public :: GM_COLOR_GRAY59 = 'gray59' + character(len=*), parameter, public :: GM_COLOR_GRAY6 = 'gray6' character(len=*), parameter, public :: GM_COLOR_GRAY60 = 'gray60' character(len=*), parameter, public :: GM_COLOR_GRAY61 = 'gray61' character(len=*), parameter, public :: GM_COLOR_GRAY62 = 'gray62' @@ -175,6 +174,7 @@ module dm_gm character(len=*), parameter, public :: GM_COLOR_GRAY67 = 'gray67' character(len=*), parameter, public :: GM_COLOR_GRAY68 = 'gray68' character(len=*), parameter, public :: GM_COLOR_GRAY69 = 'gray69' + character(len=*), parameter, public :: GM_COLOR_GRAY7 = 'gray7' character(len=*), parameter, public :: GM_COLOR_GRAY70 = 'gray70' character(len=*), parameter, public :: GM_COLOR_GRAY71 = 'gray71' character(len=*), parameter, public :: GM_COLOR_GRAY72 = 'gray72' @@ -185,6 +185,7 @@ module dm_gm character(len=*), parameter, public :: GM_COLOR_GRAY77 = 'gray77' character(len=*), parameter, public :: GM_COLOR_GRAY78 = 'gray78' character(len=*), parameter, public :: GM_COLOR_GRAY79 = 'gray79' + character(len=*), parameter, public :: GM_COLOR_GRAY8 = 'gray8' character(len=*), parameter, public :: GM_COLOR_GRAY80 = 'gray80' character(len=*), parameter, public :: GM_COLOR_GRAY81 = 'gray81' character(len=*), parameter, public :: GM_COLOR_GRAY82 = 'gray82' @@ -195,6 +196,7 @@ module dm_gm character(len=*), parameter, public :: GM_COLOR_GRAY87 = 'gray87' character(len=*), parameter, public :: GM_COLOR_GRAY88 = 'gray88' character(len=*), parameter, public :: GM_COLOR_GRAY89 = 'gray89' + character(len=*), parameter, public :: GM_COLOR_GRAY9 = 'gray9' character(len=*), parameter, public :: GM_COLOR_GRAY90 = 'gray90' character(len=*), parameter, public :: GM_COLOR_GRAY91 = 'gray91' character(len=*), parameter, public :: GM_COLOR_GRAY92 = 'gray92' @@ -205,8 +207,6 @@ module dm_gm character(len=*), parameter, public :: GM_COLOR_GRAY97 = 'gray97' character(len=*), parameter, public :: GM_COLOR_GRAY98 = 'gray98' character(len=*), parameter, public :: GM_COLOR_GRAY99 = 'gray99' - character(len=*), parameter, public :: GM_COLOR_GRAY100 = 'gray100' - character(len=*), parameter, public :: GM_COLOR_GRAY = 'gray' character(len=*), parameter, public :: GM_COLOR_GREEN = 'green' character(len=*), parameter, public :: GM_COLOR_GREEN_YELLOW = 'greenyellow' character(len=*), parameter, public :: GM_COLOR_GREY = 'grey' @@ -574,7 +574,7 @@ subroutine gm_prepare_add_text_box(command, path, text, text_box) character(len=*), intent(in) :: text !! Text to add. type(gm_text_box_type), intent(in), optional :: text_box !! Image text box type. - character(len=32) :: point_size + character(len=32) :: point_size type(gm_text_box_type) :: box if (present(text_box)) box = text_box