private MonitorExtendedErrorInfo skipAndReadExtended(
     boolean hasExtended, int skipBytes, SignalInputStream in) throws IOException {
   if (hasExtended) {
     in.skipBytes(skipBytes);
     MonitorExtendedErrorInfo extended = new MonitorExtendedErrorInfo();
     extended.read(in);
     return extended;
   }
   return null;
 }
 protected void write(SignalOutputStream out) throws IOException {
   super.write(out);
   out.writeS32(from);
   out.writeBoolean(exec);
   out.writeS32(error);
   out.writeS32(extra);
   out.writeS32(lineNumber);
   out.writeS32(0); // U32 fileNameOffset
   out.writeS16(euId);
   out.writeS16((short) 0); // Unused U16 reserved0
   reserved1 = 0;
   if (monitorExtendedErrorInfo != null) {
     reserved1 = fileName.length() + 1;
   }
   out.writeS32(reserved1); // reserved1
   out.writeString((fileName != null) ? fileName : "");
   if (reserved1 > 0) {
     monitorExtendedErrorInfo.write(out);
   }
 }