Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/fs/bcachefs/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 15 kB image not shown  

Quelle  sb-errors_format.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _BCACHEFS_SB_ERRORS_FORMAT_H
#define _BCACHEFS_SB_ERRORS_FORMAT_H

enum bch_fsck_flags {
 FSCK_CAN_FIX  = BIT(0),
 FSCK_CAN_IGNORE  = BIT(1),
 FSCK_AUTOFIX  = BIT(2),
 FSCK_ERR_NO_LOG  = BIT(3),
};

#define BCH_SB_ERRS()         \
 x(clean_but_journal_not_empty,      0, 0)  \
 x(dirty_but_no_journal_entries,      1, 0)  \
 x(dirty_but_no_journal_entries_post_drop_nonflushes,   2, 0)  \
 x(sb_clean_journal_seq_mismatch,     3, 0)  \
 x(sb_clean_btree_root_mismatch,      4, 0)  \
 x(sb_clean_missing,       5, 0)  \
 x(jset_unsupported_version,      6, 0)  \
 x(jset_unknown_csum,       7, 0)  \
 x(jset_last_seq_newer_than_seq,      8, 0)  \
 x(jset_past_bucket_end,       9, 0)  \
 x(jset_seq_blacklisted,      10, 0)  \
 x(journal_entries_missing,     11, 0)  \
 x(journal_entry_replicas_not_marked,    12, FSCK_AUTOFIX) \
 x(journal_entry_past_jset_end,     13, 0)  \
 x(journal_entry_replicas_data_mismatch,    14, 0)  \
 x(journal_entry_bkey_u64s_0,     15, 0)  \
 x(journal_entry_bkey_past_end,     16, 0)  \
 x(journal_entry_bkey_bad_format,    17, 0)  \
 x(journal_entry_bkey_invalid,     18, 0)  \
 x(journal_entry_btree_root_bad_size,    19, 0)  \
 x(journal_entry_blacklist_bad_size,    20, 0)  \
 x(journal_entry_blacklist_v2_bad_size,    21, 0)  \
 x(journal_entry_blacklist_v2_start_past_end,   22, 0)  \
 x(journal_entry_usage_bad_size,     23, 0)  \
 x(journal_entry_data_usage_bad_size,    24, 0)  \
 x(journal_entry_clock_bad_size,     25, 0)  \
 x(journal_entry_clock_bad_rw,     26, 0)  \
 x(journal_entry_dev_usage_bad_size,    27, 0)  \
 x(journal_entry_dev_usage_bad_dev,    28, 0)  \
 x(journal_entry_dev_usage_bad_pad,    29, 0)  \
 x(btree_node_unreadable,     30, 0)  \
 x(btree_node_fault_injected,     31, 0)  \
 x(btree_node_bad_magic,      32, 0)  \
 x(btree_node_bad_seq,      33, 0)  \
 x(btree_node_unsupported_version,    34, 0)  \
 x(btree_node_bset_older_than_sb_min,    35, 0)  \
 x(btree_node_bset_newer_than_sb,    36, 0)  \
 x(btree_node_data_missing,     37, FSCK_AUTOFIX) \
 x(btree_node_bset_after_end,     38, 0)  \
 x(btree_node_replicas_sectors_written_mismatch,   39, 0)  \
 x(btree_node_replicas_data_mismatch,    40, 0)  \
 x(bset_unknown_csum,      41, 0)  \
 x(bset_bad_csum,      42, 0)  \
 x(bset_past_end_of_btree_node,     43, 0)  \
 x(bset_wrong_sector_offset,     44, 0)  \
 x(bset_empty,       45, 0)  \
 x(bset_bad_seq,       46, 0)  \
 x(bset_blacklisted_journal_seq,     47, FSCK_AUTOFIX) \
 x(first_bset_blacklisted_journal_seq,    48, FSCK_AUTOFIX) \
 x(btree_node_bad_btree,      49, 0)  \
 x(btree_node_bad_level,      50, 0)  \
 x(btree_node_bad_min_key,     51, 0)  \
 x(btree_node_bad_max_key,     52, 0)  \
 x(btree_node_bad_format,     53, 0)  \
 x(btree_node_bkey_past_bset_end,    54, 0)  \
 x(btree_node_bkey_bad_format,     55, 0)  \
 x(btree_node_bad_bkey,      56, 0)  \
 x(btree_node_bkey_out_of_order,     57, FSCK_AUTOFIX) \
 x(btree_root_bkey_invalid,     58, FSCK_AUTOFIX) \
 x(btree_root_read_error,     59, FSCK_AUTOFIX) \
 x(btree_root_bad_min_key,     60, 0)  \
 x(btree_root_bad_max_key,     61, 0)  \
 x(btree_node_read_error,     62, FSCK_AUTOFIX) \
 x(btree_node_topology_bad_min_key,    63, FSCK_AUTOFIX) \
 x(btree_node_topology_bad_max_key,    64, FSCK_AUTOFIX) \
 x(btree_node_topology_overwritten_by_prev_node,   65, FSCK_AUTOFIX) \
 x(btree_node_topology_overwritten_by_next_node,   66, FSCK_AUTOFIX) \
 x(btree_node_topology_interior_node_empty,   67, FSCK_AUTOFIX) \
 x(fs_usage_hidden_wrong,     68, FSCK_AUTOFIX) \
 x(fs_usage_btree_wrong,      69, FSCK_AUTOFIX) \
 x(fs_usage_data_wrong,      70, FSCK_AUTOFIX) \
 x(fs_usage_cached_wrong,     71, FSCK_AUTOFIX) \
 x(fs_usage_reserved_wrong,     72, FSCK_AUTOFIX) \
 x(fs_usage_persistent_reserved_wrong,    73, FSCK_AUTOFIX) \
 x(fs_usage_nr_inodes_wrong,     74, FSCK_AUTOFIX) \
 x(fs_usage_replicas_wrong,     75, FSCK_AUTOFIX) \
 x(dev_usage_buckets_wrong,     76, FSCK_AUTOFIX) \
 x(dev_usage_sectors_wrong,     77, FSCK_AUTOFIX) \
 x(dev_usage_fragmented_wrong,     78, FSCK_AUTOFIX) \
 x(dev_usage_buckets_ec_wrong,     79, FSCK_AUTOFIX) \
 x(bkey_version_in_future,     80, 0)  \
 x(bkey_u64s_too_small,      81, 0)  \
 x(bkey_invalid_type_for_btree,     82, 0)  \
 x(bkey_extent_size_zero,     83, 0)  \
 x(bkey_extent_size_greater_than_offset,    84, 0)  \
 x(bkey_size_nonzero,      85, 0)  \
 x(bkey_snapshot_nonzero,     86, 0)  \
 x(bkey_snapshot_zero,      87, 0)  \
 x(bkey_at_pos_max,      88, 0)  \
 x(bkey_before_start_of_btree_node,    89, 0)  \
 x(bkey_after_end_of_btree_node,     90, 0)  \
 x(bkey_val_size_nonzero,     91, 0)  \
 x(bkey_val_size_too_small,     92, 0)  \
 x(alloc_v1_val_size_bad,     93, 0)  \
 x(alloc_v2_unpack_error,     94, 0)  \
 x(alloc_v3_unpack_error,     95, 0)  \
 x(alloc_v4_val_size_bad,     96, 0)  \
 x(alloc_v4_backpointers_start_bad,    97, 0)  \
 x(alloc_key_data_type_bad,     98, 0)  \
 x(alloc_key_empty_but_have_data,    99, 0)  \
 x(alloc_key_dirty_sectors_0,    100, 0)  \
 x(alloc_key_data_type_inconsistency,   101, 0)  \
 x(alloc_key_to_missing_dev_bucket,   102, 0)  \
 x(alloc_key_cached_inconsistency,   103, 0)  \
 x(alloc_key_cached_but_read_time_zero,   104, FSCK_AUTOFIX) \
 x(alloc_key_to_missing_lru_entry,   105, FSCK_AUTOFIX) \
 x(alloc_key_data_type_wrong,    106, FSCK_AUTOFIX) \
 x(alloc_key_gen_wrong,     107, FSCK_AUTOFIX) \
 x(alloc_key_dirty_sectors_wrong,   108, FSCK_AUTOFIX) \
 x(alloc_key_cached_sectors_wrong,   109, FSCK_AUTOFIX) \
 x(alloc_key_stripe_wrong,    110, FSCK_AUTOFIX) \
 x(alloc_key_stripe_redundancy_wrong,   111, FSCK_AUTOFIX) \
 x(alloc_key_journal_seq_in_future,   298, FSCK_AUTOFIX) \
 x(bucket_sector_count_overflow,    112, 0)  \
 x(bucket_metadata_type_mismatch,   113, 0)  \
 x(need_discard_key_wrong,    114, FSCK_AUTOFIX) \
 x(freespace_key_wrong,     115, FSCK_AUTOFIX) \
 x(freespace_hole_missing,    116, FSCK_AUTOFIX) \
 x(bucket_gens_val_size_bad,    117, 0)  \
 x(bucket_gens_key_wrong,    118, FSCK_AUTOFIX) \
 x(bucket_gens_hole_wrong,    119, FSCK_AUTOFIX) \
 x(bucket_gens_to_invalid_dev,    120, FSCK_AUTOFIX) \
 x(bucket_gens_to_invalid_buckets,   121, FSCK_AUTOFIX) \
 x(bucket_gens_nonzero_for_invalid_buckets,  122, FSCK_AUTOFIX) \
 x(need_discard_freespace_key_to_invalid_dev_bucket, 123, 0)  \
 x(need_discard_freespace_key_bad,   124, FSCK_AUTOFIX) \
 x(discarding_bucket_not_in_need_discard_btree,  291, 0)  \
 x(backpointer_bucket_offset_wrong,   125, 0)  \
 x(backpointer_level_bad,    294, 0)  \
 x(backpointer_dev_bad,     297, 0)  \
 x(backpointer_to_missing_device,   126, FSCK_AUTOFIX) \
 x(backpointer_to_missing_alloc,    127, FSCK_AUTOFIX) \
 x(backpointer_to_missing_ptr,    128, FSCK_AUTOFIX) \
 x(lru_entry_at_time_0,     129, FSCK_AUTOFIX) \
 x(lru_entry_to_invalid_bucket,    130, FSCK_AUTOFIX) \
 x(lru_entry_bad,     131, FSCK_AUTOFIX) \
 x(btree_ptr_val_too_big,    132, 0)  \
 x(btree_ptr_v2_val_too_big,    133, 0)  \
 x(btree_ptr_has_non_ptr,    134, 0)  \
 x(extent_ptrs_invalid_entry,    135, 0)  \
 x(extent_ptrs_no_ptrs,     136, 0)  \
 x(extent_ptrs_too_many_ptrs,    137, 0)  \
 x(extent_ptrs_redundant_crc,    138, 0)  \
 x(extent_ptrs_redundant_stripe,    139, 0)  \
 x(extent_ptrs_unwritten,    140, 0)  \
 x(extent_ptrs_written_and_unwritten,   141, 0)  \
 x(ptr_to_invalid_device,    142, 0)  \
 x(ptr_to_duplicate_device,    143, 0)  \
 x(ptr_after_last_bucket,    144, 0)  \
 x(ptr_before_first_bucket,    145, 0)  \
 x(ptr_spans_multiple_buckets,    146, 0)  \
 x(ptr_to_missing_backpointer,    147, FSCK_AUTOFIX) \
 x(ptr_to_missing_alloc_key,    148, FSCK_AUTOFIX) \
 x(ptr_to_missing_replicas_entry,   149, FSCK_AUTOFIX) \
 x(ptr_to_missing_stripe,    150, 0)  \
 x(ptr_to_incorrect_stripe,    151, 0)  \
 x(ptr_gen_newer_than_bucket_gen,   152, FSCK_AUTOFIX)  \
 x(ptr_too_stale,     153, 0)  \
 x(stale_dirty_ptr,     154, FSCK_AUTOFIX) \
 x(ptr_bucket_data_type_mismatch,   155, 0)  \
 x(ptr_cached_and_erasure_coded,    156, 0)  \
 x(ptr_crc_uncompressed_size_too_small,   157, 0)  \
 x(ptr_crc_uncompressed_size_too_big,   161, 0)  \
 x(ptr_crc_uncompressed_size_mismatch,   300, 0)  \
 x(ptr_crc_csum_type_unknown,    158, 0)  \
 x(ptr_crc_compression_type_unknown,   159, 0)  \
 x(ptr_crc_redundant,     160, 0)  \
 x(ptr_crc_nonce_mismatch,    162, 0)  \
 x(ptr_stripe_redundant,     163, 0)  \
 x(extent_flags_not_at_start,    306, 0)  \
 x(reservation_key_nr_replicas_invalid,   164, 0)  \
 x(reflink_v_refcount_wrong,    165, FSCK_AUTOFIX) \
 x(reflink_v_pos_bad,     292, 0)  \
 x(reflink_p_to_missing_reflink_v,   166, FSCK_AUTOFIX) \
 x(reflink_refcount_underflow,    293, 0)  \
 x(stripe_pos_bad,     167, 0)  \
 x(stripe_val_size_bad,     168, 0)  \
 x(stripe_csum_granularity_bad,    290, 0)  \
 x(stripe_sector_count_wrong,    169, 0)  \
 x(snapshot_tree_pos_bad,    170, 0)  \
 x(snapshot_tree_to_missing_snapshot,   171, 0)  \
 x(snapshot_tree_to_missing_subvol,   172, 0)  \
 x(snapshot_tree_to_wrong_subvol,   173, 0)  \
 x(snapshot_tree_to_snapshot_subvol,   174, 0)  \
 x(snapshot_pos_bad,     175, 0)  \
 x(snapshot_parent_bad,     176, 0)  \
 x(snapshot_children_not_normalized,   177, 0)  \
 x(snapshot_child_duplicate,    178, 0)  \
 x(snapshot_child_bad,     179, 0)  \
 x(snapshot_skiplist_not_normalized,   180, 0)  \
 x(snapshot_skiplist_bad,    181, 0)  \
 x(snapshot_should_not_have_subvol,   182, 0)  \
 x(snapshot_to_bad_snapshot_tree,   183, FSCK_AUTOFIX) \
 x(snapshot_bad_depth,     184, 0)  \
 x(snapshot_bad_skiplist,    185, 0)  \
 x(subvol_pos_bad,     186, 0)  \
 x(subvol_not_master_and_not_snapshot,   187, FSCK_AUTOFIX) \
 x(subvol_to_missing_root,    188, 0)  \
 x(subvol_root_wrong_bi_subvol,    189, FSCK_AUTOFIX) \
 x(bkey_in_missing_snapshot,    190, 0)  \
 x(bkey_in_deleted_snapshot,    315, FSCK_AUTOFIX) \
 x(inode_pos_inode_nonzero,    191, 0)  \
 x(inode_pos_blockdev_range,    192, 0)  \
 x(inode_alloc_cursor_inode_bad,    301, 0)  \
 x(inode_unpack_error,     193, 0)  \
 x(inode_str_hash_invalid,    194, 0)  \
 x(inode_v3_fields_start_bad,    195, 0)  \
 x(inode_snapshot_mismatch,    196, 0)  \
 x(snapshot_key_missing_inode_snapshot,   314, FSCK_AUTOFIX) \
 x(inode_unlinked_but_clean,    197, 0)  \
 x(inode_unlinked_but_nlink_nonzero,   198, 0)  \
 x(inode_unlinked_and_not_open,    281, 0)  \
 x(inode_unlinked_but_has_dirent,   285, 0)  \
 x(inode_checksum_type_invalid,    199, 0)  \
 x(inode_compression_type_invalid,   200, 0)  \
 x(inode_subvol_root_but_not_dir,   201, 0)  \
 x(inode_i_size_dirty_but_clean,    202, FSCK_AUTOFIX) \
 x(inode_i_sectors_dirty_but_clean,   203, FSCK_AUTOFIX) \
 x(inode_i_sectors_wrong,    204, FSCK_AUTOFIX) \
 x(inode_dir_wrong_nlink,    205, FSCK_AUTOFIX) \
 x(inode_dir_multiple_links,    206, FSCK_AUTOFIX) \
 x(inode_dir_missing_backpointer,   284, FSCK_AUTOFIX) \
 x(inode_dir_unlinked_but_not_empty,   286, FSCK_AUTOFIX) \
 x(inode_dir_has_nonzero_i_size,    319, FSCK_AUTOFIX) \
 x(inode_multiple_links_but_nlink_0,   207, FSCK_AUTOFIX) \
 x(inode_wrong_backpointer,    208, FSCK_AUTOFIX) \
 x(inode_wrong_nlink,     209, FSCK_AUTOFIX) \
 x(inode_has_child_snapshots_wrong,   287, FSCK_AUTOFIX) \
 x(inode_unreachable,     210, FSCK_AUTOFIX) \
 x(inode_journal_seq_in_future,    299, FSCK_AUTOFIX) \
 x(inode_i_sectors_underflow,    312, FSCK_AUTOFIX) \
 x(inode_has_case_insensitive_not_set,   316, FSCK_AUTOFIX) \
 x(inode_parent_has_case_insensitive_not_set,  317, FSCK_AUTOFIX) \
 x(vfs_inode_i_blocks_underflow,    311, FSCK_AUTOFIX) \
 x(vfs_inode_i_blocks_not_zero_at_truncate,  313, FSCK_AUTOFIX) \
 x(vfs_bad_inode_rm,     320, 0)  \
 x(deleted_inode_but_clean,    211, FSCK_AUTOFIX) \
 x(deleted_inode_missing,    212, FSCK_AUTOFIX) \
 x(deleted_inode_is_dir,     213, FSCK_AUTOFIX) \
 x(deleted_inode_not_unlinked,    214, FSCK_AUTOFIX) \
 x(deleted_inode_has_child_snapshots,   288, FSCK_AUTOFIX) \
 x(extent_overlapping,     215, 0)  \
 x(key_in_missing_inode,     216, FSCK_AUTOFIX) \
 x(key_in_wrong_inode_type,    217, 0)  \
 x(extent_past_end_of_inode,    218, FSCK_AUTOFIX) \
 x(dirent_empty_name,     219, 0)  \
 x(dirent_val_too_big,     220, 0)  \
 x(dirent_name_too_long,     221, 0)  \
 x(dirent_name_embedded_nul,    222, 0)  \
 x(dirent_name_dot_or_dotdot,    223, 0)  \
 x(dirent_name_has_slash,    224, 0)  \
 x(dirent_d_type_wrong,     225, FSCK_AUTOFIX) \
 x(inode_bi_parent_wrong,    226, 0)  \
 x(dirent_in_missing_dir_inode,    227, 0)  \
 x(dirent_in_non_dir_inode,    228, 0)  \
 x(dirent_to_missing_inode,    229, FSCK_AUTOFIX) \
 x(dirent_to_overwritten_inode,    302, 0)  \
 x(dirent_to_missing_subvol,    230, 0)  \
 x(dirent_to_itself,     231, 0)  \
 x(dirent_casefold_mismatch,    318, FSCK_AUTOFIX) \
 x(quota_type_invalid,     232, 0)  \
 x(xattr_val_size_too_small,    233, 0)  \
 x(xattr_val_size_too_big,    234, 0)  \
 x(xattr_invalid_type,     235, 0)  \
 x(xattr_name_invalid_chars,    236, 0)  \
 x(xattr_in_missing_inode,    237, 0)  \
 x(root_subvol_missing,     238, 0)  \
 x(root_dir_missing,     239, 0)  \
 x(root_inode_not_dir,     240, 0)  \
 x(dir_loop,      241, 0)  \
 x(hash_table_key_duplicate,    242, FSCK_AUTOFIX) \
 x(hash_table_key_wrong_offset,    243, FSCK_AUTOFIX) \
 x(unlinked_inode_not_on_deleted_list,   244, FSCK_AUTOFIX) \
 x(reflink_p_front_pad_bad,    245, 0)  \
 x(journal_entry_dup_same_device,   246, 0)  \
 x(inode_bi_subvol_missing,    247, 0)  \
 x(inode_bi_subvol_wrong,    248, 0)  \
 x(inode_points_to_missing_dirent,   249, FSCK_AUTOFIX) \
 x(inode_points_to_wrong_dirent,    250, FSCK_AUTOFIX) \
 x(inode_bi_parent_nonzero,    251, 0)  \
 x(dirent_to_missing_parent_subvol,   252, 0)  \
 x(dirent_not_visible_in_parent_subvol,   253, 0)  \
 x(subvol_fs_path_parent_wrong,    254, 0)  \
 x(subvol_root_fs_path_parent_nonzero,   255, 0)  \
 x(subvol_children_not_set,    256, 0)  \
 x(subvol_children_bad,     257, 0)  \
 x(subvol_loop,      258, 0)  \
 x(subvol_unreachable,     259, FSCK_AUTOFIX) \
 x(btree_node_bkey_bad_u64s,    260, 0)  \
 x(btree_node_topology_empty_interior_node,  261, 0)  \
 x(btree_ptr_v2_min_key_bad,    262, 0)  \
 x(btree_root_unreadable_and_scan_found_nothing,  263, 0)  \
 x(snapshot_node_missing,    264, FSCK_AUTOFIX) \
 x(dup_backpointer_to_bad_csum_extent,   265, 0)  \
 x(btree_bitmap_not_marked,    266, FSCK_AUTOFIX) \
 x(sb_clean_entry_overrun,    267, 0)  \
 x(btree_ptr_v2_written_0,    268, 0)  \
 x(subvol_snapshot_bad,     269, 0)  \
 x(subvol_inode_bad,     270, 0)  \
 x(subvol_missing,     308, FSCK_AUTOFIX) \
 x(alloc_key_stripe_sectors_wrong,   271, FSCK_AUTOFIX) \
 x(accounting_mismatch,     272, FSCK_AUTOFIX) \
 x(accounting_replicas_not_marked,   273, 0)  \
 x(accounting_to_invalid_device,    289, 0)  \
 x(invalid_btree_id,     274, FSCK_AUTOFIX)  \
 x(alloc_key_io_time_bad,    275, 0)  \
 x(alloc_key_fragmentation_lru_wrong,   276, FSCK_AUTOFIX) \
 x(accounting_key_junk_at_end,    277, FSCK_AUTOFIX) \
 x(accounting_key_replicas_nr_devs_0,   278, FSCK_AUTOFIX) \
 x(accounting_key_replicas_nr_required_bad,  279, FSCK_AUTOFIX) \
 x(accounting_key_replicas_devs_unsorted,  280, FSCK_AUTOFIX) \
 x(accounting_key_version_0,    282, FSCK_AUTOFIX) \
 x(accounting_key_nr_counters_wrong,   307, FSCK_AUTOFIX) \
 x(logged_op_but_clean,     283, FSCK_AUTOFIX) \
 x(compression_opt_not_marked_in_sb,   295, FSCK_AUTOFIX) \
 x(compression_type_not_marked_in_sb,   296, FSCK_AUTOFIX) \
 x(directory_size_mismatch,    303, FSCK_AUTOFIX) \
 x(dirent_cf_name_too_big,    304, 0)  \
 x(dirent_stray_data_after_cf_name,   305, 0)  \
 x(rebalance_work_incorrectly_set,   309, FSCK_AUTOFIX) \
 x(rebalance_work_incorrectly_unset,   310, FSCK_AUTOFIX) \
 x(MAX,       321, 0)

enum bch_sb_error_id {
#define x(t, n, ...) BCH_FSCK_ERR_##t = n,
 BCH_SB_ERRS()
#undef x
};

struct bch_sb_field_errors {
 struct bch_sb_field field;
 struct bch_sb_field_error_entry {
  __le64  v;
  __le64  last_error_time;
 }   entries[];
};

LE64_BITMASK(BCH_SB_ERROR_ENTRY_ID, struct bch_sb_field_error_entry, v,  0, 16);
LE64_BITMASK(BCH_SB_ERROR_ENTRY_NR, struct bch_sb_field_error_entry, v, 16, 64);

#endif /* _BCACHEFS_SB_ERRORS_FORMAT_H */

Messung V0.5
C=100 H=100 G=100

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.