game_data.pl 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. use strict;
  2. use warnings;
  3. my $WS = " \n";
  4. sub read_file {
  5. my $filename = shift;
  6. #printf("reading file: $filename\n");
  7. my $game_data = [];
  8. my $arrays = [];
  9. my $current_array;
  10. push @$arrays, $game_data;
  11. $current_array = $arrays->[@$arrays-1];
  12. open(my $in, "<", $filename) or die("$filename: $!\n");
  13. #printf("contents:\n");
  14. while (<$in>) {
  15. #printf("$_");
  16. while (length > 0) {
  17. s/^[$WS]*//;
  18. if (/^-?[0-9]+\.?[0-9]*/) {
  19. s/^(-?[0-9]+\.?[0-9]*)//;
  20. #printf("found number: $1\n");
  21. push @$current_array, ["\$", $1];
  22. }
  23. elsif (/^[a-zA-Z~]+/) {
  24. s/^([a-zA-Z]+)//;
  25. #printf("found string: $1\n");
  26. push @$current_array, ["^", $1];
  27. }
  28. elsif (/^\[/) {
  29. s/^\[//;
  30. #printf("found new array\n");
  31. my $new_array = [];
  32. push @$arrays, $new_array;
  33. push @$current_array, $new_array;
  34. $current_array = $new_array;
  35. }
  36. elsif (/^\]/) {
  37. s/^\]//;
  38. #printf("closing array\n");
  39. pop @$arrays;
  40. $current_array = $arrays->[@$arrays-1];
  41. }
  42. # remove comments
  43. elsif (/^#/) {
  44. s/^(#.*$)//;
  45. #printf("found comment: $1\n");
  46. }
  47. elsif (length > 0) {
  48. my $sub_name = (caller(0))[3];
  49. printf("$0 > $sub_name > error reading '$filename' > found element that can't be parsed\n");
  50. printf("remainter: $_\n");
  51. return 0;
  52. }
  53. }
  54. }
  55. #printf("done parsing\n");
  56. #printf("returning: $game_data\n");
  57. return $game_data;
  58. } # read file
  59. return 1;