issue-#196 StdCoder Separator

Merged to the master branch
luowy
Posts: 234
Joined: Mon Oct 20, 2014 12:52 pm

issue-#196 StdCoder Separator

Post by luowy »

I don't know if this error has been fixed in the center copy. In my copy it has been fixed:
StdCoder

Code: Select all

	....
		Separator = "/";
		Separator2="\";(*add*)
StdCoder.GetFile

Code: Select all

	PROCEDURE GetFile(VAR path: ARRAY OF CHAR; VAR loc: Files.Locator; VAR name: Files.Name);
		VAR i, j: INTEGER; ch: CHAR;
	BEGIN
		i := 0; ch := path[0]; loc := Files.dir.This(""); name := "";
		WHILE (ch # 0X) & (loc.res = 0) DO
			j := 0;
			WHILE (ch # 0X) & (ch # Separator)&(ch # Separator2) DO name[j] := ch; INC(j); INC(i); ch := path[i] END;
			name[j] := 0X;
			IF (ch = Separator) OR (ch = Separator2) THEN loc := loc.This(name); INC(i); ch := path[i] END;
		END;
		IF loc.res # 0 THEN loc := NIL END;
		path[i] := 0X
	END GetFile;
the test file is here https://blackbox.obertone.ru/download/Flash.txt

luowy
User avatar
Josef Templ
Posts: 2047
Joined: Tue Sep 17, 2013 6:50 am

Re: StdCoder Separator

Post by Josef Templ »

As far as I know this has not been reported and it certainly has not been fixed.

- Josef
User avatar
Josef Templ
Posts: 2047
Joined: Tue Sep 17, 2013 6:50 am

Re: StdCoder Separator

Post by Josef Templ »

The docu of StdCoder.EncodeFileList says that "/" should be used as separator.
It does not mention "\". Using "\" as separator makes implicit use of
the fact that under Windows (HostFiles) "\" can be used as a file separator.

Supporting "\" in StdCoder.EncodeFileList is tempting but has the disadvantage of
making StdCoder dependent on a particular HostFiles implementation without
showing this dependency in the import list.

- Josef
luowy
Posts: 234
Joined: Mon Oct 20, 2014 12:52 pm

Re: StdCoder Separator

Post by luowy »

that means it's not a bug...
But how was the example file created? Under which release?
Can our center distribution create such a file?
Maybe Ivan can get the answer form its author.
User avatar
Josef Templ
Posts: 2047
Joined: Tue Sep 17, 2013 6:50 am

Re: StdCoder Separator

Post by Josef Templ »

The center version can create such a file and the center version can even decode such a file
but only if all directories already exist. It fails when creation of a directory is required because
it skips the separator that marks the directory name needed for creating a new directory.
Creating a file and creating a directory are separated under Windows and are also separated
in the BlackBox Files module.

- Josef
Zinn
Posts: 476
Joined: Tue Mar 25, 2014 5:56 pm
Location: Frankfurt am Main
Contact:

Re: StdCoder Separator

Post by Zinn »

Josef Templ wrote:The center version can create such a file and the center version can even decode such a file
but only if all directories already exist.
But with Luowy's patches the directory is created during decode automatically.
- Helmut
User avatar
Josef Templ
Posts: 2047
Joined: Tue Sep 17, 2013 6:50 am

Re: StdCoder Separator

Post by Josef Templ »

Well, there are other modules as well that use "\" as alternative separator, for example StdApi.
It seems that this violation of abstraction is unavoidable unless there is some
additional (Files) function that checks for valid file names.

Given that observation I tend to agree with luowy's proposal.

- Josef
User avatar
Robert
Posts: 1024
Joined: Sat Sep 28, 2013 11:04 am
Location: Edinburgh, Scotland

Re: StdCoder Separator

Post by Robert »

I have just looked at HostFiles.Diff & HostFiles.NewLocator, both chosen rather at random.
In each case there is explicit code to allow either "/" or "\" as the separator.

So it seems to be the case that BlackBox generally allows the choice, and to be consistent we should also allow it in StdCoder (and update the documentation to reflect this change).

This change also makes things a little more convenient for the user.
User avatar
Josef Templ
Posts: 2047
Joined: Tue Sep 17, 2013 6:50 am

Re: StdCoder Separator

Post by Josef Templ »

It is clear that the separators are hard-coded in HostFiles.
This is where they belong to. Hard coding them outside HostFiles is not very clean
but as I mentioned before, it seems to be unavoidable and it should be done in
StdCoder as luowy pointed out.

- Josef
User avatar
Josef Templ
Posts: 2047
Joined: Tue Sep 17, 2013 6:50 am

Re: StdCoder Separator

Post by Josef Templ »

I have created a branch for that and put luowy's proposal into it.

For the changes see https://redmine.blackboxframework.org/p ... 7b90/diff/.

- Josef
Post Reply