module fubar
  (/*AUTOARG*/
  // Outputs
  ThisIsAnotherLongName, THIS_IS_ANOTHER_LONG_NAME_OUT,
  // Inputs
  MY_ADDR_IN
  );

  input [1:0] MY_ADDR_IN;
  output      THIS_IS_ANOTHER_LONG_NAME_OUT;

  //------------------------------------------------------------------


  /*AUTOREGINPUT*/

  /*AUTOREG*/

  /*AUTOWIRE*/
  // Beginning of automatic wires (for undeclared instantiated-module outputs)
  wire                  Ack;                    // From foo of foo.v
  wire                  Req;                    // From bar of bar.v
  wire                  ThisIsLongerName;       // From foo of foo.v
  wire                  ThisNameLonger;         // From bar of bar.v
  // End of automatics

  //
  // inputs sort of work
  //

  /*AUTOUNUSED*/

  /*AUTOINPUT*/

  wire                  MyAddr;
  assign                MyAddr = MY_ADDR_IN;

  //
  // outputs dont work
  //

  /*AUTOOUTPUT*/
  // Beginning of automatic outputs (from unused autoinst outputs)
  output                ThisIsAnotherLongName;  // From foo of foo.v
  // End of automatics

  wire                  THIS_IS_ANOTHER_LONG_NAME_OUT;
  assign                THIS_IS_ANOTHER_LONG_NAME_OUT = ThisIsAnotherLongName;

  //------------------------------------------------------------------

  /*AUTO_LISP(defun underscore_to_camelcase (s)
               "Convert NAMES_LIKE_THIS to NamesLikeThis"
               (setq r "")
               (setq l (split-string s "_"))
               (while l
                 (setq r (concat r (upcase-initials (downcase (car l)))))
                 (setq l (cdr l)))
               r)*/

  /* foo AUTO_TEMPLATE (
   .\(.+\)_\(IN\|OUT\) (@"(underscore_to_camelcase \\"\1\\")"),
   ); */

  foo foo
    (/*AUTOINST*/
     // Outputs
     .ACK_OUT                           (Ack),                   // Templated
     .THIS_IS_LONGER_NAME_OUT           (ThisIsLongerName),      // Templated
     .THIS_IS_ANOTHER_LONG_NAME_OUT     (ThisIsAnotherLongName), // Templated
     // Inputs
     .MY_ADDR_IN                        (MyAddr),                // Templated
     .REQ_IN                            (Req),                   // Templated
     .THIS_NAME_LONGER_IN               (ThisNameLonger));        // Templated

  /* bar AUTO_TEMPLATE (
   .\(.+\)_\(IN\|OUT\) (@"(underscore_to_camelcase \\"\1\\")"),
   ); */

  bar bar
    (/*AUTOINST*/
     // Outputs
     .REQ_OUT                           (Req),                   // Templated
     .THIS_NAME_LONGER_OUT              (ThisNameLonger),        // Templated
     // Inputs
     .MY_ADDR_IN                        (MyAddr),                // Templated
     .ACK_IN                            (Ack),                   // Templated
     .THIS_IS_LONGER_NAME_IN            (ThisIsLongerName));      // Templated

  //------------------------------------------------------------------

endmodule
