docs: boolean processFile(String name) {
  
          File    f         = new File(name);
          File    fnew      = new File(name + ".new");
          int     state     = 0;    // 0=normal 1=inside_if 2=inside_else
          boolean switchoff = false;
          boolean working   = false;
  
          try {
              Vector v  = getFileLines(f);
              Vector v1 = new Vector(v.size());
  
              for (int i = 0; i < v.size(); i++) {
                  v1.addElement(v.elementAt(i));
              }
  
              for (int i = 0; i < v.size(); i++) {
                  String line = (String) v.elementAt(i);
  
                  if (line == null) {
                      break;
                  }
  
                  if (working) {
                      if (line.equals("/*") || line.equals("*/")) {
                          v.removeElementAt(i--);
  
                          continue;
                      }
                  }
  
                  if (line.startsWith("//#")) {
                      if (line.startsWith("//#ifdef ")) {
                          if (state != 0) {
                              printError("'#ifdef' not allowed inside '#ifdef'");
  
                              return false;
                          }
  
                          state = 1;
  
                          String s = line.substring(9);
  
                          if (vSwitchOn.indexOf(s) != -1) {
                              working   = true;
                              switchoff = false;
                          } else if (vSwitchOff.indexOf(s) != -1) {
                              working = true;
  
                              v.insertElementAt("/*", ++i);
  
                              switchoff = true;
                          }
  
                          if (vSwitches.indexOf(s) == -1) {
                              vSwitches.addElement(s);
                          }
                      } else if (line.startsWith("//#else")) {
                          if (state != 1) {
                              printError("'#else' without '#ifdef'");
  
                              return false;
                          }
  
                          state = 2;
  
                          if (!working) {}
                          else if (switchoff) {
                              if (v.elementAt(i - 1).equals("")) {
                                  v.insertElementAt("*/", i - 1);
  
                                  i++;
                              } else {
                                  v.insertElementAt("*/", i++);
                              }
  
                              switchoff = false;
                          } else {
                              v.insertElementAt("/*", ++i);
  
                              switchoff = true;
                          }
                      } else if (line.startsWith("//#endif")) {
                          if (state == 0) {
                              printError("'#endif' without '#ifdef'");
  
                              return false;
                          }
  
                          state = 0;
  
                          if (working && switchoff) {
                              if (v.elementAt(i - 1).equals("")) {
                                  v.insertElementAt("*/", i - 1);
  
                                  i++;
                              } else {
                                  v.insertElementAt("*/", i++);
                              }
                          }
  
                          working = false;
                      } else {}
                  }
              }
  
              if (state != 0) {
                  printError("'#endif' missing");
  
                  return false;
              }
  
              boolean filechanged = false;
  
              for (int i = 0; i < v.size(); i++) {
                  if (!v1.elementAt(i).equals(v.elementAt(i))) {
                      filechanged = true;
  
                      break;
                  }
              }
  
              if (!filechanged) {
                  return true;
              }
  
              writeFileLines(v, fnew);
  
              File fbak = new File(name + ".bak");
  
              fbak.delete();
              f.renameTo(fbak);
  
              File fcopy = new File(name);
  
              fnew.renameTo(fcopy);
              fbak.delete();
  
              return true;
          } catch (Exception e) {
              printError(e.toString());
  
              return false;
          }
      }