Author Topic: WeiDU ziploading patch  (Read 2209 times)

Offline Blaze

  • Planewalker
  • *****
  • Posts: 10
WeiDU ziploading patch
« on: April 20, 2016, 10:35:53 AM »
I've pushed a branch to https://github.com/ScottBrooks/weidu/tree/zipload that is my initial work on adding zip loading support to WeiDU.

I'm certain that there is a lot more work to be done, but I wanted to get some feedback on my progress so far so I can hopefully do things the WeiDU way.
I've got some Erlang experience, but my Ocaml is certainly quite weak, so I've certainly done some things the wrong way.

Here is the description of my approach so far.

WeiDU ziploading support:

The goal of this patch is to add the ability to load from zip files to WeiDU.

There are three main changes to enable this:

The first is to add a base_offset parameter to the file IO functions.

This base_offset is then added to the existing uses of Unix.lseek so we can use
the fd of the zip file, and then adjust the base_offset to point to where the
biff itself starts in the zip.

The second is to allow WeiDU to use names with a "zip:" prefix.

So when WeiDU goes to open "zip:examples/zipload/dlc/zipload.zip:data/files.bif"
It strips off the zip: part, opens the examples/zipload/dlc/zipload.zip file,
and finds the base_offset for data/files.bif.

The third part is when the key is loaded.

Before WeiDU returns the key, it first runs it through the merge_key function
which loads mod.key file from all the zips in the dlc folder.  merge_key creates
new entries based off the mod.key.  It appends to the biffs array, and updates
existing resources to point to new versions in the mod.zip.

With this patch, the following command line properly extracts the file INBIF.2da out of examples/zipload/dlc/zipload.zip
./weidu.asm.exe --game examples/zipload/ examples/zipload/zipload.tp2 --yes --log output.log


TODO:
Cache the zip file end of central directory data so we don't have to re-parse this for every file we try to read.
Better error reporting.
Test some more situations.  I'm pretty sure there will be issues with tis files.

Offline Argent77

  • Planewalker
  • *****
  • Posts: 187
Re: WeiDU ziploading patch
« Reply #1 on: April 20, 2016, 04:02:29 PM »
I've tested the new code on Windows 7.

It worked on the provided sample data, calling from within the sample directory "weidu.exe zipload.tp2 --yes --log output.log" with the following log:
Code: [Select]
WeiDU v 23900 Log

 weidu.exe zipload.tp2 --yes --log output.log
[.\chitin.key] loaded, 24 bytes
[.\chitin.key] 0 BIFFs, 0 resources
[zip:.\dlc\zipload.zip:mod.key] loaded, 857 bytes
[.\dlc\zipload.zip:mod.key] 1 BIFFs, 1 resources
[.\dialog.tlk] loaded, 85 bytes
[.\dialog.tlk] 2 string entries
[.\dialog.tlk] claims to be writeable.
[.\dialog.tlk] claims to be a regular file.

Installing [zipload]
Copying 1 file ...
BIFF may be in hard-drive CD-path [.\cache\zip:.\dlc\zipload.zip:DATA\FILES.BIF]
[zip:.\dlc\zipload.zip:DATA/FILES.BIF] 0 bytes, 1 files, 0 tilesets
Copied [INBIF.2da] to [INBIF.2DA]


Saving This Log:
ZIPLOAD.TP2  0  0 Installed ~zipload~

SUCCESSFULLY INSTALLED      zipload


It didn't work correctly on a real BG:EE installation (containing dlc/sod-dlc.zip) though.

I've used the following sod-dlc.tp2:
Code: [Select]
BACKUP ~A7TestB/backup~
AUTHOR ~Myself~
VERSION ~1.0~

BEGIN ~Zipload test~
NO_LOG_RECORD

COPY_EXISTING ~CAMPAIGN.2da~ ~CAMPAIGN.2DA~

which resulted in the log:
Code: [Select]
WeiDU v 23900 Log

 weidu.exe sod-dlc.tp2 --yes --log output.log
[.\chitin.key] loaded, 517180 bytes
[.\chitin.key] 79 BIFFs, 36778 resources
[.\weidu.conf] loaded, 17 bytes
[.\lang\en_us\dialog.tlk] loaded, 4715912 bytes
[.\lang\en_us\dialog.tlk] 34000 string entries
[.\lang\cs_cz\dialog.tlk] claims to be writeable.
[.\lang\cs_cz\dialog.tlk] claims to be a regular file.
[.\lang\de_de\dialog.tlk] claims to be writeable.
[.\lang\de_de\dialog.tlk] claims to be a regular file.
[.\lang\de_de\dialogF.tlk] claims to be writeable.
[.\lang\de_de\dialogF.tlk] claims to be a regular file.
[.\lang\en_us\dialog.tlk] claims to be writeable.
[.\lang\en_us\dialog.tlk] claims to be a regular file.
[.\lang\es_es\dialog.tlk] claims to be writeable.
[.\lang\es_es\dialog.tlk] claims to be a regular file.
[.\lang\es_es\dialogF.tlk] claims to be writeable.
[.\lang\es_es\dialogF.tlk] claims to be a regular file.
[.\lang\fr_fr\dialog.tlk] claims to be writeable.
[.\lang\fr_fr\dialog.tlk] claims to be a regular file.
[.\lang\fr_fr\dialogF.tlk] claims to be writeable.
[.\lang\fr_fr\dialogF.tlk] claims to be a regular file.
[.\lang\it_it\dialog.tlk] claims to be writeable.
[.\lang\it_it\dialog.tlk] claims to be a regular file.
[.\lang\it_it\dialogF.tlk] claims to be writeable.
[.\lang\it_it\dialogF.tlk] claims to be a regular file.
[.\lang\ja_jp\dialog.tlk] claims to be writeable.
[.\lang\ja_jp\dialog.tlk] claims to be a regular file.
[.\lang\ja_jp\dialogF.tlk] claims to be writeable.
[.\lang\ja_jp\dialogF.tlk] claims to be a regular file.
[.\lang\ko_kr\dialog.tlk] claims to be writeable.
[.\lang\ko_kr\dialog.tlk] claims to be a regular file.
[.\lang\pl_pl\dialog.tlk] claims to be writeable.
[.\lang\pl_pl\dialog.tlk] claims to be a regular file.
[.\lang\pl_pl\dialogF.tlk] claims to be writeable.
[.\lang\pl_pl\dialogF.tlk] claims to be a regular file.
[.\lang\pt_br\dialog.tlk] claims to be writeable.
[.\lang\pt_br\dialog.tlk] claims to be a regular file.
[.\lang\pt_br\dialogF.tlk] claims to be writeable.
[.\lang\pt_br\dialogF.tlk] claims to be a regular file.
[.\lang\ru_ru\dialog.tlk] claims to be writeable.
[.\lang\ru_ru\dialog.tlk] claims to be a regular file.
[.\lang\tr_tr\dialog.tlk] claims to be writeable.
[.\lang\tr_tr\dialog.tlk] claims to be a regular file.
[.\lang\tr_tr\dialogF.tlk] claims to be writeable.
[.\lang\tr_tr\dialogF.tlk] claims to be a regular file.
[.\lang\uk_ua\dialog.tlk] claims to be writeable.
[.\lang\uk_ua\dialog.tlk] claims to be a regular file.
[.\lang\zh_cn\dialog.tlk] claims to be writeable.
[.\lang\zh_cn\dialog.tlk] claims to be a regular file.

Using .\lang\en_us\dialog.tlk

Installing [Zipload test] [1.0]
Copying 1 file ...
BIFF may be in hard-drive CD-path [.\lang\en_us\DATA\PATCH20.BIF]
BIFF may be in hard-drive CD-path [.\cache\DATA\PATCH20.BIF]
[.\DATA\PATCH20.BIF] 46331960 bytes, 1091 files, 31 tilesets
Copied [CAMPAIGN.2da] to [CAMPAIGN.2DA]


Saving This Log:

SUCCESSFULLY INSTALLED      Zipload test

It returned the CAMPAIGN.2DA from the main game (without SOD entry).


Testing with a SoD-only file (bd0010.are) resulted in an error:
Code: [Select]
WeiDU v 23900 Log

 weidu.exe sod-dlc.tp2 --yes --log output.log
[.\chitin.key] loaded, 517180 bytes
[.\chitin.key] 79 BIFFs, 36778 resources
[.\weidu.conf] loaded, 17 bytes
[.\lang\en_us\dialog.tlk] loaded, 4715912 bytes
[.\lang\en_us\dialog.tlk] 34000 string entries
[.\lang\cs_cz\dialog.tlk] claims to be writeable.
[.\lang\cs_cz\dialog.tlk] claims to be a regular file.
[.\lang\de_de\dialog.tlk] claims to be writeable.
[.\lang\de_de\dialog.tlk] claims to be a regular file.
[.\lang\de_de\dialogF.tlk] claims to be writeable.
[.\lang\de_de\dialogF.tlk] claims to be a regular file.
[.\lang\en_us\dialog.tlk] claims to be writeable.
[.\lang\en_us\dialog.tlk] claims to be a regular file.
[.\lang\es_es\dialog.tlk] claims to be writeable.
[.\lang\es_es\dialog.tlk] claims to be a regular file.
[.\lang\es_es\dialogF.tlk] claims to be writeable.
[.\lang\es_es\dialogF.tlk] claims to be a regular file.
[.\lang\fr_fr\dialog.tlk] claims to be writeable.
[.\lang\fr_fr\dialog.tlk] claims to be a regular file.
[.\lang\fr_fr\dialogF.tlk] claims to be writeable.
[.\lang\fr_fr\dialogF.tlk] claims to be a regular file.
[.\lang\it_it\dialog.tlk] claims to be writeable.
[.\lang\it_it\dialog.tlk] claims to be a regular file.
[.\lang\it_it\dialogF.tlk] claims to be writeable.
[.\lang\it_it\dialogF.tlk] claims to be a regular file.
[.\lang\ja_jp\dialog.tlk] claims to be writeable.
[.\lang\ja_jp\dialog.tlk] claims to be a regular file.
[.\lang\ja_jp\dialogF.tlk] claims to be writeable.
[.\lang\ja_jp\dialogF.tlk] claims to be a regular file.
[.\lang\ko_kr\dialog.tlk] claims to be writeable.
[.\lang\ko_kr\dialog.tlk] claims to be a regular file.
[.\lang\pl_pl\dialog.tlk] claims to be writeable.
[.\lang\pl_pl\dialog.tlk] claims to be a regular file.
[.\lang\pl_pl\dialogF.tlk] claims to be writeable.
[.\lang\pl_pl\dialogF.tlk] claims to be a regular file.
[.\lang\pt_br\dialog.tlk] claims to be writeable.
[.\lang\pt_br\dialog.tlk] claims to be a regular file.
[.\lang\pt_br\dialogF.tlk] claims to be writeable.
[.\lang\pt_br\dialogF.tlk] claims to be a regular file.
[.\lang\ru_ru\dialog.tlk] claims to be writeable.
[.\lang\ru_ru\dialog.tlk] claims to be a regular file.
[.\lang\tr_tr\dialog.tlk] claims to be writeable.
[.\lang\tr_tr\dialog.tlk] claims to be a regular file.
[.\lang\tr_tr\dialogF.tlk] claims to be writeable.
[.\lang\tr_tr\dialogF.tlk] claims to be a regular file.
[.\lang\uk_ua\dialog.tlk] claims to be writeable.
[.\lang\uk_ua\dialog.tlk] claims to be a regular file.
[.\lang\zh_cn\dialog.tlk] claims to be writeable.
[.\lang\zh_cn\dialog.tlk] claims to be a regular file.

Using .\lang\en_us\dialog.tlk

Installing [Zipload test] [1.0]
Copying 1 file ...

ERROR locating resource for 'COPY'
Resource [BD0010.are] not found in KEY file:
[./chitin.key]
Stopping installation because of error.

ERROR Installing [Zipload test], rolling back to previous state
Unable to Unlink [A7TestB/backup/0/OTHER.0]: Unix.Unix_error(1, "unlink", "A7TestB/backup/0/OTHER.0")
[A7TestB/backup/0/UNSETSTR.0] SET_STRING uninstall info not found
Will uninstall   0 files for [sod-dlc.tp2] component 0.
Uninstalled      0 files for [sod-dlc.tp2] component 0.
Unable to Unlink [A7TestB/backup/0/READLN.0]: Unix.Unix_error(20, "unlink", "A7TestB/backup/0/READLN.0")
Unable to Unlink [A7TestB/backup/0/READLN.0.TEXT]: Unix.Unix_error(20, "unlink", "A7TestB/backup/0/READLN.0.TEXT")
ERROR: Failure("resource [BD0010.are] not found for 'COPY'")
PLEASE email the file output.log to Myself
Automatically Skipping [Zipload test] because of error.
Saving This Log:

NOT INSTALLED DUE TO ERRORS Zipload test

Offline Blaze

  • Planewalker
  • *****
  • Posts: 10
Re: WeiDU ziploading patch
« Reply #2 on: April 20, 2016, 10:14:52 PM »
I've pushed a fix that hopefully fixes that.  I read a 64k(or smaller) block at the end of the zip to track down the end of central directory header, but since my test zip was under 64k, I didn't notice that I wasn't actually seeking to filesize - 64k to read in that data.

After that change, I was able to copy the campaign.2da out of the zip.

Code: [Select]
~/Work/weidu/weidu.asm.exe ~/Work/weidu/examples/zipload/sod-dlc.tp2 --yes --log output.log
[/Users/scott/Work/weidu/weidu.asm.exe] WeiDU version 23900

Installing [zipload test] [1.0]
Copying 1 file ...
Copying 1 file ...



SUCCESSFULLY INSTALLED      zipload test

Code: [Select]
cat CAMPAIGN.2DA
2DA V1.0
*
           WORLDSCRIPT DESCRIPTION ICON       INTERDIA   LOADHINT   MASTAREA   MUSIC      NAME       NPCLEVEL   TBPPARTY   PDIALOG    SAVE_DIR   STARTARE   STRTGOLD   STARTPOS   STWEAPON   25STWEAP   XPCAP      XPLIST     WORLDMAP   WORLDSCRIPT MAP_DROPSHADOW MAP_FONTCOLOR KEEP_POWERS INTRO_MOVIE IMPORT     INTERACT   YEARS REPUTATION   CLASTEXT   RACETEXT
SOD        BDBALDUR   44686      1          BDBANTER   *          SODMAREA   74         44685      NPCLVLDS   *          BDDIALOG   sodsave    SODSTRTA   STRTGOLD   sodstpos   SODWEAP    BDSTWEAP   *          *          BGMAP      BDBALDUR   1          0xFFFFFFFF 1          SODCIN01   PARTY      SODINTER   SODYEARS   SODREPUTATI   SODCLTXT   SODRACE

Offline Argent77

  • Planewalker
  • *****
  • Posts: 187
Re: WeiDU ziploading patch
« Reply #3 on: April 21, 2016, 06:56:18 AM »
The new fix doesn't work correctly on my Windows 7 BG:EE/SoD installation.

Using the following script
Code: [Select]
BACKUP ~A7TestB/backup~
AUTHOR ~Myself~
VERSION ~1.0~

BEGIN ~Zipload test~
NO_LOG_RECORD

COPY_EXISTING ~campaign.2da~ ~campaign.2da~
COPY_EXISTING ~bd0010.are~ ~bd0010.are~

WeiDU copies the "campaign.2da" from the main game to the current folder and triggers an error for "bd0010.are".

The output.log:
Code: [Select]
Using .\lang\en_us\dialog.tlk

Installing [Zipload test] [1.0]
Copying 1 file ...
BIFF may be in hard-drive CD-path [.\lang\en_us\DATA\PATCH20.BIF]
BIFF may be in hard-drive CD-path [.\cache\DATA\PATCH20.BIF]
[.\DATA\PATCH20.BIF] 46331960 bytes, 1091 files, 31 tilesets
Copied [campaign.2da] to [campaign.2da]
Copying 1 file ...

ERROR locating resource for 'COPY'
Resource [bd0010.are] not found in KEY file:
[./chitin.key]
Stopping installation because of error.

ERROR Installing [Zipload test], rolling back to previous state
Unable to Unlink [A7TestB/backup/0/OTHER.0]: Unix.Unix_error(1, "unlink", "A7TestB/backup/0/OTHER.0")
[A7TestB/backup/0/UNSETSTR.0] SET_STRING uninstall info not found
Will uninstall   1 files for [sod-dlc.tp2] component 0.
Uninstalled      1 files for [sod-dlc.tp2] component 0.
Unable to Unlink [A7TestB/backup/0/READLN.0]: Unix.Unix_error(20, "unlink", "A7TestB/backup/0/READLN.0")
Unable to Unlink [A7TestB/backup/0/READLN.0.TEXT]: Unix.Unix_error(20, "unlink", "A7TestB/backup/0/READLN.0.TEXT")
ERROR: Failure("resource [bd0010.are] not found for 'COPY'")
PLEASE email the file output.log to Myself
Automatically Skipping [Zipload test] because of error.
Saving This Log:

NOT INSTALLED DUE TO ERRORS Zipload test

It looks like the zip archive isn't detected by WeiDU.


The same script worked correctly with a tolowered game installation on my Linux VM though. The output.log:
Code: [Select]
Installing [Zipload test] [1.0]
Copying 1 file ...
BIFF may be in hard-drive CD-path [./CD1/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.BIF]
BIFF may be in hard-drive CD-path [./CD2/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.BIF]
BIFF may be in hard-drive CD-path [./CD3/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.BIF]
BIFF may be in hard-drive CD-path [./CD4/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.BIF]
BIFF may be in hard-drive CD-path [./CD5/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.BIF]
BIFF may be in hard-drive CD-path [./CD6/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.BIF]
BIFF may be in hard-drive CD-path [./cache/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.BIF]
BIFF may be in hard-drive CD-path [./CD1/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.cbf]
BIFF may be in hard-drive CD-path [./CD2/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.cbf]
BIFF may be in hard-drive CD-path [./CD3/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.cbf]
BIFF may be in hard-drive CD-path [./CD4/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.cbf]
BIFF may be in hard-drive CD-path [./CD5/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.cbf]
BIFF may be in hard-drive CD-path [./CD6/zip:./dlc/sod-dlc.zip:DATA/DEFAULT.cbf]
[zip:./dlc/sod-dlc.zip:DATA/DEFAULT.BIF] 0 bytes, 142 files, 0 tilesets
Copied [CAMPAIGN.2da] to [campaign.2da]
Copying 1 file ...
BIFF may be in hard-drive CD-path [./CD1/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.BIF]
BIFF may be in hard-drive CD-path [./CD2/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.BIF]
BIFF may be in hard-drive CD-path [./CD3/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.BIF]
BIFF may be in hard-drive CD-path [./CD4/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.BIF]
BIFF may be in hard-drive CD-path [./CD5/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.BIF]
BIFF may be in hard-drive CD-path [./CD6/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.BIF]
BIFF may be in hard-drive CD-path [./cache/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.BIF]
BIFF may be in hard-drive CD-path [./CD1/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.cbf]
BIFF may be in hard-drive CD-path [./CD2/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.cbf]
BIFF may be in hard-drive CD-path [./CD3/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.cbf]
BIFF may be in hard-drive CD-path [./CD4/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.cbf]
BIFF may be in hard-drive CD-path [./CD5/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.cbf]
BIFF may be in hard-drive CD-path [./CD6/zip:./dlc/sod-dlc.zip:DATA/SODAREAS.cbf]
[zip:./dlc/sod-dlc.zip:DATA/SODAREAS.BIF] 0 bytes, 76 files, 0 tilesets
Copied [bd0010.are] to [bd0010.are]


Saving This Log:

SUCCESSFULLY INSTALLED      Zipload test

Both files were retrieved correctly from the game's sod-dlc.zip.


I couldn't test it on my Mac OS X VM because of the following compiler error:
Code: [Select]
Compiling src/util.ml to native code
File "src/util.ml", line 514, characters 6-75:
Warning 10: this expression should have type unit.
File "src/util.ml", line 529, characters 4-54:
Warning 10: this expression should have type unit.
File "src/util.ml", line 532, characters 20-30:
Error: Unbound module Bytes
cp: src/util.cmi: No such file or directory
cp: src/util.o: No such file or directory
make: *** [obj/x86_LINUX/util.cmx] Error 1

The devel branch compiled fine though.

Offline Argent77

  • Planewalker
  • *****
  • Posts: 187
Re: WeiDU ziploading patch
« Reply #4 on: April 21, 2016, 12:23:53 PM »
Quick update: The sources based on commit 753515f compiled correctly on Mac OS X. The resulting weidu binary worked fine and retrieved the correct files, just like the Linux version.

Offline Blaze

  • Planewalker
  • *****
  • Posts: 10
Re: WeiDU ziploading patch
« Reply #5 on: April 21, 2016, 05:42:48 PM »
Ok, I found out two issues on windows.

One is Ocaml uses 31 bit ints, and since they are signed on windows max_int;; returns 1073741823
sod-dlc.zip is close to the 2 gig mark, so I was getting a really strange error.

I'm part way through changing all the Unix.lseek to Unix.LargeFile.lseek which seems to show some promise.

I've also got a bug on windows with using the zip: prefix since I totally forgot about the drive letter potentially being on file names.

Offline Blaze

  • Planewalker
  • *****
  • Posts: 10
Re: WeiDU ziploading patch
« Reply #6 on: April 21, 2016, 09:14:11 PM »
Ok, There is a series of commits that I just pushed that I'm hoping takes care of things.

It addresses loading files greater then one GB(sod-dlc.zip), and should also take care of if you specify --game full_path_to_game.  Both were broken on 32 builds(for sure win32, not sure about a 32 bit build on osx/linux).

Offline Argent77

  • Planewalker
  • *****
  • Posts: 187
Re: WeiDU ziploading patch
« Reply #7 on: April 22, 2016, 06:08:26 AM »
Retrieving files from the zip archive via COPY_EXISTING or COPY_EXISTING_REGEXP works fine now on Windows. TIS files were also extracted correctly (with header). Using "--game absolute/path" works fine as well.

However, getting files from zipped extra directories doesn't appear to be supported yet (e.g. movies/sodcin02.wbm). I tried "COPY ~movies/sodcin02.wbm~ ~sodcin02.wbm~" and "COPY ~zip:movies/sodcin02.wbm~ ~sodcin02.wbm~" without much success.

Offline Blaze

  • Planewalker
  • *****
  • Posts: 10
Re: WeiDU ziploading patch
« Reply #8 on: April 22, 2016, 09:38:10 AM »
Ok, that's good to know.  Extracting files from the zip other then resources is not implemented yet(same with the talk table), but at least we seem to have a good base to work from.  I'll see about adding support for that.

Offline Wisp

  • Moderator
  • Planewalker
  • *****
  • Posts: 1176
Re: WeiDU ziploading patch
« Reply #9 on: April 24, 2016, 11:31:45 AM »
Let me know when you think it's ready and I'll have a closer look (I don't have SoD anyway). But I don't like commit 1bfb09. Leave Util.file_exists alone and use Sys.file_exists directly in the few places it's necessary.

Conceptually, what happens when different files with the same name are biffed in a zip and in a non-zipped archive? Which takes precedence when there are two key files?
« Last Edit: April 24, 2016, 11:56:47 AM by Wisp »

Offline Blaze

  • Planewalker
  • *****
  • Posts: 10
Re: WeiDU ziploading patch
« Reply #10 on: April 28, 2016, 04:55:38 PM »
Ok, thanks for the feedback.  I left 1bfb09 off on it's own since I wasn't sure about that.  I'll see what it would take to remove that.

Offline Blaze

  • Planewalker
  • *****
  • Posts: 10
Re: WeiDU ziploading patch
« Reply #11 on: May 09, 2016, 10:17:28 PM »
 Baby #2 arrived so I've been away from work, I'm still planning on spending some more time getting this completed.

 

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:
What color is grass?:
What is the seventh word in this sentence?:
What is five minus two (use the full word)?: