PRC8/nwn/nwnprc/DocGen/trunk/prc/utils/Blank2daRows.java
Jaysyn904 5914ed2ab5 Updated Release Archive
Updated Release Archive.  Fixed Mage-killer prereqs.  Removed old LETO & ConvoCC related files.  Added organized spell scroll store.  Fixed Gloura spellbook. Various TLK fixes.  Reorganized Repo.  Removed invalid user folders. Added DocGen back in.
2023-08-22 10:00:21 -04:00

117 lines
4.4 KiB
Java

package prc.utils;
import prc.autodoc.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* A tool for blanking ranges of 2da rows.
*
* @author Ornedan
*/
public class Blank2daRows {
/**
* Ye olde maine methode.
*
* @param args The program arguments, as usual.
* @throws Exception
*/
public static void main(String[] args) throws Exception {
if (args.length == 0) readMe();
String targetPath = null;
List<int[]> ranges = new ArrayList<int[]>();
for (String param : args) {//target B-E ... | [--help]
// Parameter parseage
if (param.startsWith("-")) {
if (param.equals("--help")) readMe();
else {
for (char c : param.substring(1).toCharArray()) {
switch (c) {
default:
System.err.println("Unknown parameter: " + c);
readMe();
}
}
}
} else
// If the target file hasn't been specified, assume this is it
if (targetPath == null)
targetPath = param;
else {
try {
if (!param.contains("-")) throw new Exception(); // Missing -
String[] rawNums = param.split("-");
if (rawNums.length != 2) throw new Exception(); // More than two numbers(?) in the string
int[] range = new int[]{Integer.parseInt(rawNums[0]), Integer.parseInt(rawNums[1])};
ranges.add(range);
} catch (Exception e) {
System.err.println("Malformed number pair:" + param);
System.exit(1);
}
}
}
// Load the 2da
Data_2da target = Data_2da.load2da(targetPath);
// Bounds checks
for (int[] range : ranges) {
if (range[0] > range[1]) { // Lower bound > upper bound
System.err.println("Lower bound > upper bound in pair: " + range[0] + "-" + range[1]);
System.exit(1);
}
if (range[0] < 0 || range[1] < 0 ||
range[0] >= target.getEntryCount() ||
range[1] >= target.getEntryCount()) { // Bound out of range
System.err.println("Bound out of range in pair: " + range[0] + "-" + range[1]);
System.exit(1);
}
}
// Do blanking
for (int[] range : ranges)
blankRows(target, range[0], range[1]);
// Save 2da back out
target.save2da(new File(targetPath).getParent(), true, true);
}
/**
* Does the row blanking - replaces the contents of each column in the affected row range with whatever
* is the default value in this 2da.
*
* @param target Data_2da to perform the operation on
* @param begin Beginning of the range to blank, inclusive
* @param end End of the range to blank, inclusive
*/
private static void blankRows(Data_2da target, int begin, int end) {
for (int i = begin; i <= end; i++) {
for (String label : target.getLabels())
target.setEntry(label, i, null);
}
}
private static void readMe() {
// 0 1 2 3 4 5 6 7 8
// 12345678901234567890123456789012345678901234567890123456789012345678901234567890
System.out.println("Usage:\n" +
" target B-E ... | [--help]\n" +
"\n" +
" This tool blanks rows in a 2da file, replacing the contents of given rows with\n" +
" either **** or the 2da-specific default value if such is specified.\n" +
"\n" +
" target Path to the 2da file to apply the blanking operation to\n" +
" B-E Row number pair, specifying which rows in the file to blank. Inclusive,\n" +
" for example 1000-1002 would blank rows 1000, 1001 and 1002. Multiple\n" +
" ranges may be specified.\n" +
"\n" +
" --help prints this text\n"
);
System.exit(0);
}
}