ImHex icon indicating copy to clipboard operation
ImHex copied to clipboard

[Feature] Set default value for `in` variables in patterns

Open Alex-Addy opened this issue 1 year ago • 0 comments

What feature would you like to see?

It would be nice to have some way to set a non-zero default value for an in variable.

An example:

u32 max_data_size in = 1024 * 1024;

Alternatively it might be better to have an attribute or the like to set the value instead.

How will this feature be useful to you and others?

I have a use case where I would like to avoid parsing some data depending on the size to keep the pattern fast. However it would be good to have a way for the user to increase or decrease the values depending on their usage.

I believe that this would make variables useful in situations where having a zero value in the variable isn't very useful or may even cause errors.

Request Type

  • [ ] I can provide a PoC for this feature or am willing to work on it myself and submit a PR

Additional context?

I have this pattern for afs files (archive files used by sega, see [https://github.com/fuzziqersoftware/gctools/blob/master/src/afsdump.cc] for some code that pulls out the data):

#pragma magic [41 46 53 00] @ 0x00

u32 max_data_size = 1024 * 1024;

struct file {
  le u32 offset;
  le u32 size;
  if (size < max_data_size) {
    u8 data[size] @ offset;
  }
};

struct afs {
  le u32 magic;
  le u32 num_files;
  file files[num_files];
};

afs afs @ 0x00;

I would like to have max_data_size be an in variable, but can't do that without it being zero by default.

Alex-Addy avatar Sep 26 '24 01:09 Alex-Addy