commit:     c44da656596b377a77bf62dbd2514484c726e22c
Author:     NHOrus <jy6x2b32pie9 <AT> yahoo <DOT> com>
AuthorDate: Sun Apr 28 13:43:36 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu May  9 00:55:02 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c44da656

sci-electronics/irsim: Partially port to C99

Would have been easier if make stopped on error
I was unable to clean that up. Sadly.
But it now builds without error on Clang-Musl with GCC-14 errors

Closes: https://bugs.gentoo.org/882283
Signed-off-by: NHOrus <jy6x2b32pie9 <AT> yahoo.com>
Closes: https://github.com/gentoo/gentoo/pull/36469
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../irsim/files/irsim-9.7.93-C99-port.patch        | 1048 ++++++++++++++++++++
 .../irsim/files/irsim-9.7.93-clean-makefile.patch  |   69 ++
 sci-electronics/irsim/irsim-9.7.93-r1.ebuild       |   44 +
 3 files changed, 1161 insertions(+)

diff --git a/sci-electronics/irsim/files/irsim-9.7.93-C99-port.patch 
b/sci-electronics/irsim/files/irsim-9.7.93-C99-port.patch
new file mode 100644
index 000000000000..1bcbfba8b009
--- /dev/null
+++ b/sci-electronics/irsim/files/irsim-9.7.93-C99-port.patch
@@ -0,0 +1,1048 @@
+--- a/base/sched.c     2024-04-28 12:20:10.022918999 +0000
++++ b/base/sched.c     2024-04-28 12:23:58.386463448 +0000
+@@ -49,9 +49,7 @@ private      evhdr  ev_array[TSIZE];     /* u
+  * events are found;
+  */
+ 
+-public Ulong pending_events( delta, list, end_of_list )
+-  Ulong   delta;
+-  evptr  *list, *end_of_list;
++public Ulong pending_events( Ulong delta, evptr *list, evptr *end_of_list )
+   {
+     evhdr           *hdr;
+     register evptr  ev;
+@@ -112,8 +110,7 @@ public Ulong pending_events( delta, list
+  * the list of events to be processed at this time, removing it first
+  * from the time wheel.
+  */
+-public evptr get_next_event( stop_time )
+-  Ulong  stop_time;
++public evptr get_next_event( Ulong stop_time )
+   {
+     register evptr  event;
+     Ulong i, time, limit;
+@@ -206,8 +203,7 @@ public
+ /*
+  * remove event from all structures it belongs to and return it to free pool
+  */
+-public void free_event( event )
+-  register evptr  event;
++public void free_event( register evptr event )
+   {
+       /* unhook from doubly-linked event list */
+     event->blink->flink = event->flink;
+@@ -236,9 +232,7 @@ public void free_event( event )
+  * Add an event to event list, specifying transition delay and new value.
+  * 0 delay transitions are converted into unit delay transitions (0.01 ns).
+  */
+-public void enqueue_event( n, newvalue, delta, rtime )
+-  register nptr  n;
+-  long           delta, rtime;
++public void enqueue_event( register nptr n, int newvalue, long delta, long 
rtime )
+   {
+     register evptr  marker, new;
+     Ulong   etime;
+@@ -309,8 +303,7 @@ public void enqueue_event( n, newvalue,
+ 
+ 
+ /* same as enqueue_event, but assumes 0 delay and rise/fall time */
+-public void enqueue_input( n, newvalue )
+-  register nptr  n;
++public void enqueue_input( register nptr n, int newvalue )
+   {
+     register evptr  marker, new;
+     register Ulong  etime;
+@@ -361,9 +354,7 @@ public void init_event()
+   }
+ 
+ 
+-public void PuntEvent( node, ev )
+-  nptr   node;
+-  evptr  ev;
++public void PuntEvent( nptr node, evptr ev )
+   {
+     if( node->nflags & WATCHED )
+       lprintf( stdout,
+@@ -383,9 +374,7 @@ public void PuntEvent( node, ev )
+   }
+ 
+ 
+-public void requeue_events( evlist, thread )
+-  evptr  evlist;
+-  int    thread;
++public void requeue_events( evptr evlist, int thread )
+   {
+     register Ulong   etime;
+     register evptr  ev, next, target;
+@@ -441,9 +430,7 @@ public void requeue_events( evlist, thre
+  * and re-enqueue them according to their creation-time (ntime - delay).
+  */
+ 
+-public evptr back_sim_time( btime, is_inc )
+-  Ulong  btime;
+-  int   is_inc;
++public evptr back_sim_time( Ulong btime, int is_inc )
+   {
+     evptr           tmplist;
+     register int    nevents;
+@@ -530,10 +517,7 @@ public evptr back_sim_time( btime, is_in
+  * of every node.  Return FALSE if this history entry is the sentinel
+  * (last_hist), otherwise return TRUE.
+  */
+-public int EnqueueHist( nd, hist, type )
+-  nptr  nd;
+-  hptr  hist;
+-  int   type;
++public int EnqueueHist( nptr nd, hptr hist, int type )
+   {
+     register evptr  marker, new;
+     register Ulong   etime;
+@@ -608,8 +592,7 @@ public int EnqueueHist( nd, hist, type )
+  * Find a scheduled event in the event queue and return a pointer to it.
+  */
+ 
+-public evptr FindScheduled(idx)
+-   short idx;
++public evptr FindScheduled(short idx)
+ {
+     register evptr  ev, next;
+     register evhdr  *hdr, *endhdr;
+@@ -632,8 +615,7 @@ public evptr FindScheduled(idx)
+  * Remove a scheduled event from the event queue
+  */
+ 
+-public void DequeueScheduled(idx)
+-   short idx;
++public void DequeueScheduled(short idx)
+ {
+     register evptr  ev;
+ 
+@@ -646,8 +628,7 @@ public void DequeueScheduled(idx)
+  * that generated it.
+  */
+ 
+-public void DequeueEvent( nd )
+-  register nptr nd;
++public void DequeueEvent( register nptr nd )
+   {
+     register evptr  ev;
+ 
+@@ -662,9 +643,7 @@ public void DequeueEvent( nd )
+   }
+ 
+ 
+-public void DelayEvent( ev, delay )
+-  evptr  ev;
+-  long   delay;
++public void DelayEvent( evptr ev, long delay )
+   {
+     register evptr  marker, new;
+     register nptr   nd;
+@@ -716,9 +695,7 @@ public void DelayEvent( ev, delay )
+   }
+ 
+ 
+-public evptr EnqueueOther( type, time )
+-  int   type;
+-  Ulong  time;
++public evptr EnqueueOther( int type, Ulong time )
+   {
+     register evptr  marker, new;
+     Ulong   etime;
+@@ -751,8 +728,7 @@ public evptr EnqueueOther( type, time )
+ /*
+  * Remove any events that may be left from the incremental simulation.
+  */
+-public void rm_inc_events( all )
+-  int  all;
++public void rm_inc_events( int all )
+   {
+     register int    nevents;
+     register evptr  ev, next;
+--- a/analyzer/base.c  2024-04-28 12:26:45.143401236 +0000
++++ b/analyzer/base.c  2024-04-28 12:32:53.397098626 +0000
+@@ -12,6 +12,7 @@
+  *     *********************************************************************
+  */
+ 
++#include <ctype.h>
+ #include "ana.h"
+ #include "ana_glob.h"
+ #include "graphics.h"
+--- a/usersubckt/subckt.c      2024-04-28 12:26:45.163401111 +0000
++++ b/usersubckt/subckt.c      2024-04-28 12:33:41.413798388 +0000
+@@ -1,6 +1,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <math.h>
++#include <string.h>
+ 
+ #ifdef TCL_IRSIM
+ #include <tk.h>
+--- a/base/eval.c      2024-04-28 12:34:37.043450548 +0000
++++ b/base/eval.c      2024-04-28 12:37:04.703527262 +0000
+@@ -12,6 +12,7 @@
+  *     ********************************************************************* 
+  */
+ 
++#include <stdlib.h>
+ #include <stdio.h>
+ 
+ #ifdef TCL_IRSIM
+@@ -87,8 +88,7 @@ public void ReInit()
+ /*
+  * Print decay event.
+  */
+-private void pr_decay( e )
+-  evptr  e;
++private void pr_decay( evptr e )
+   {
+     nptr  n = e->enode;
+ 
+@@ -100,9 +100,7 @@ private void pr_decay( e )
+ /*
+  * Print watched node event.
+  */
+-private void pr_watched( e, n )
+-  evptr  e;
+-  nptr   n;
++private void pr_watched( evptr e, nptr n )
+   {
+     int   tmp;
+ 
+@@ -136,9 +134,7 @@ private void pr_watched( e, n )
+ /*
+  * Print capwatched node event.
+  */
+-private void pr_capwatched( e, n )
+-  evptr  e;
+-  nptr   n;
++private void pr_capwatched( evptr e, nptr n )
+   {
+     if ( caplogfile == NULL ) 
+       return;
+@@ -164,8 +160,7 @@ private void pr_capwatched( e, n )
+ /*
+  * Tally cap * trans for giving stepwise power display
+  */
+-private void acc_step_power( n )
+-  nptr   n;
++private void acc_step_power( nptr n )
+   {
+      if ( not (n->nflags & INPUT) )
+        step_cap_x_trans += n->ncap;
+@@ -362,8 +357,7 @@ private void MarkNodes( evlist )
+   }
+ 
+ 
+-private long EvalNodes( evlist )
+-  evptr  evlist;
++private long EvalNodes( evptr evlist )
+   {
+     register tptr   t;
+     register lptr   l;
+@@ -439,9 +433,7 @@ private long EvalNodes( evlist )
+  * Change the state of the nodes in the given input list to their new value,
+  * setting their INPUT flag and enqueueing the event.
+  */
+-private void SetInputs( listp, val )
+-  register iptr  *listp;
+-  register int   val;
++private void SetInputs( iptr *listp, int val )
+   {
+     register nptr  n;
+     iptr           ip, last;
+@@ -507,8 +499,7 @@ private void EvalNOinputs()
+   }
+ 
+ 
+-public int step( stop_time )
+-  Ulong  stop_time;
++public int step( Ulong stop_time )
+   {
+     evptr  evlist;
+     long   brk_flag;
+@@ -594,8 +585,7 @@ public
+       switch_state[ BASETYPE( (TRANS)->ttype ) ][ (TRANS)->gate->npot ] )
+ 
+ 
+-public int ComputeTransState( t )
+-  register tptr  t;
++public int ComputeTransState( tptr t )
+   {
+     register nptr  n;
+     register tptr  l;
+--- a/analyzer/defaults.c      2024-04-28 12:34:37.034450604 +0000
++++ b/analyzer/defaults.c      2024-04-28 12:37:56.488203464 +0000
+@@ -68,8 +68,7 @@ private      Assoc assoc[] =
+ 
+ private       char  *irsim = "irsim";
+ 
+-public char *GetXDefault( key )
+-  int  key;
++public char *GetXDefault( int key )
+   {
+     char         *val;
+ 
+@@ -78,9 +77,7 @@ public char *GetXDefault( key )
+   }
+ 
+ 
+-public int IsDefault( key, val )
+-  int   key;
+-  char  *val;
++public int IsDefault( int key, char *val )
+   {
+     if( assoc[ key ].defl == val )
+       return( TRUE );
+@@ -88,7 +85,7 @@ public int IsDefault( key, val )
+   }
+ 
+ 
+-public char *ProgDefault( key )
++public char *ProgDefault( int key )
+   {
+     return( assoc[ key ].defl );
+   }
+--- a/irsim/genspktbl.c        2024-04-28 12:34:37.038450579 +0000
++++ b/irsim/genspktbl.c        2024-04-28 12:41:02.530040185 +0000
+@@ -49,9 +49,7 @@ double       delaytab[ SPIKETBLSIZE + 1 ][ SPI
+ FILE  *F;
+ 
+ 
+-main( argc, argv )
+-  int   argc;
+-  char  *argv[];
++int main( int argc, char *argv[] )
+   {
+     char  *fname;
+     char  *size = "SPIKETBLSIZE";
+@@ -95,9 +93,7 @@ main( argc, argv )
+   }
+ 
+ 
+-void PrintTable( tab, fmt )
+-  double  tab[ SPIKETBLSIZE+1 ][ SPIKETBLSIZE+1 ];
+-  char    *fmt;
++void PrintTable( double tab[ SPIKETBLSIZE+1 ][ SPIKETBLSIZE+1 ], char *fmt )
+   {
+     register  int  alpha, beta;
+ 
+@@ -204,8 +200,7 @@ void rk4_error( which, alpha, beta, h )
+  *         i) h == .001; .04 < alpha < .96; .04 < beta < .96
+  *      ii) h == .01;  .1  < alpha < .9;  .1  < beta < .9
+  */
+-double nldl_rk4( alpha, beta, h )
+-  double alpha, beta, h;
++double nldl_rk4( double alpha, double beta, double h )
+   {   
+     double        k11, k12, k21, k22, k31, k32, k41, k42;
+     double        v1old, v1new, v2old, v2new;
+@@ -247,8 +242,7 @@ double nldl_rk4( alpha, beta, h )
+  * This routine computes the parameter vector for Runge-Kutta method.
+  * Customized for 2-transistors-2-capacitors network driven by Gnd.
+  */
+-void nldl_vector( alpha, beta, h, v1, v2, k1, k2 )
+-  double alpha, beta, h, v1, v2, *k1, *k2;
++void nldl_vector( double alpha, double beta, double h, double v1, double v2, 
double *k1, double *k2 )
+   {   
+     double  u1, u2;
+     
+@@ -276,8 +270,7 @@ void nldl_vector( alpha, beta, h, v1, v2
+  *         i) h == .001; .04 < alpha < .96; .04 < beta < .96
+  *      ii) h == .01;  .1  < alpha < .9;  .1  < beta < .9
+  */
+-double nldh_rk4( alpha, beta, h )
+-  double alpha, beta, h;
++double nldh_rk4( double alpha, double beta, double h )
+   {   
+     double        k11, k12, k21, k22, k31, k32, k41, k42;
+     double        v1old, v1new, v2old, v2new;
+@@ -319,8 +312,7 @@ double nldh_rk4( alpha, beta, h )
+  * This routine computes the parameter vector for Runge-Kutta method.
+  * Customized for 2-transistors-2-capacitors network driven by Vdd.
+  */
+-void nldh_vector( alpha, beta, h, v1, v2, k1, k2 )
+-  double alpha, beta, h, v1, v2, *k1, *k2;
++void nldh_vector( double alpha, double beta, double h, double v1, double v2, 
double *k1, double *k2 )
+   {   
+     double  u1, u2;
+     
+@@ -336,8 +328,7 @@ void nldh_vector( alpha, beta, h, v1, v2
+  * Compute spike fluctuation and delay using an rc linear model.
+  * Use equations for driven by Gnd case
+  */
+-void linear_spike( alpha, beta, delay, peak )
+-  double  alpha, beta, *delay, *peak;
++void linear_spike( double alpha, double beta, double *delay, double *peak )
+   {
+     double  N, b, a, x, tmp;
+ 
+--- a/base/network.c   2024-04-28 12:41:53.555721132 +0000
++++ b/base/network.c   2024-04-28 12:42:11.689607745 +0000
+@@ -14,6 +14,7 @@
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <string.h>
+ 
+ #include "defs.h"
+ #include "net.h"
+--- a/analyzer/graphics.c      2024-04-28 12:41:53.545721195 +0000
++++ b/analyzer/graphics.c      2024-04-28 12:43:47.122011027 +0000
+@@ -51,10 +51,7 @@ private     char   bots_bits[3][2] = { 0x7,
+ #define       SAME_COLOR( A, B )      \
+     ( (A).red == (B).red and (A).green == (B).green and (A).blue == (B).blue )
+ 
+-private int GetColor( key, colors, ndefined )
+-  int     key;
+-  XColor  colors[];
+-  int     ndefined;
++private int GetColor( int key, XColor colors[], int ndefined )
+   {
+     char      *s;
+     XColor    *color;
+@@ -222,10 +219,7 @@ private void InitBitmaps()
+   }
+ 
+ 
+-private Cursor MakeCursor( fg, bg, curs, mask, w, h, x, y )
+-  XColor  *fg, *bg;
+-  char    *curs, *mask;
+-  int     w, h;
++private Cursor MakeCursor( XColor *fg, XColor *bg, char *curs, char *mask, 
int w, int h, int x, int y )
+   {
+     Pixmap  pcurs, pmask;
+     Cursor  cu;
+@@ -269,8 +263,7 @@ private void InitCursors()
+   }
+ 
+ 
+-public void InitGraphics(font)
+-  Font  font;
++public void InitGraphics(Font font)
+   {
+     XGCValues      gcv;
+     unsigned long  mask;
+--- a/base/globals.h   2024-04-28 12:46:58.066915955 +0000
++++ b/base/globals.h   2024-04-28 12:47:08.011858981 +0000
+@@ -307,8 +307,8 @@ extern evptr back_sim_time( /*  btime, i
+ extern int EnqueueHist( /*  nd, hist, type */ );
+ extern void DequeueEvent( /*  nd */ );
+ extern void DelayEvent( /*  ev, delay */ );
+-extern evptr FindScheduled( /* idx */ );
+-extern void DequeueScheduled( /* idx */ );
++extern evptr FindScheduled( short /* idx */ );
++extern void DequeueScheduled( short /* idx */ );
+ extern evptr EnqueueOther( /*  type, time */ );
+ extern void rm_inc_events( /*  all */ );
+ 
+--- a/analyzer/thread.c        2024-04-28 12:46:58.057916007 +0000
++++ b/analyzer/thread.c        2024-04-28 12:50:55.220557323 +0000
+@@ -21,6 +21,11 @@ extern Display *display;
+ extern Window  window;
+ extern Func FGetEvent;
+ 
++extern void HandleButton( XButtonEvent *ev );
++extern void HandleKey( XKeyEvent *ev );
++extern void WindowExposed( XExposeEvent *event );
++extern void WindowResize( XConfigureEvent *ev );
++
+ pthread_t xloop_thread = 0;
+ Func EventHandlerPtr = NULL;
+ 
+--- a/analyzer/event.c 2024-04-28 12:46:58.056916012 +0000
++++ b/analyzer/event.c 2024-04-28 12:51:03.429510295 +0000
+@@ -61,8 +61,7 @@ private      int     x_server = 0;
+ private       int     x_helper = 0;           /* process id of helper process 
*/
+ public        Func    FGetEvent = NULL;       /* used also in thread.c */
+ 
+-public void WindowResize( ev )
+-  XConfigureEvent  *ev;
++public void WindowResize( XConfigureEvent *ev )
+   {
+     int  ret;
+ 
+@@ -75,8 +74,7 @@ public void WindowResize( ev )
+   }
+ 
+ 
+-public void WindowExposed( event )
+-  XExposeEvent  *event;
++public void WindowExposed( XExposeEvent *event )
+   {
+     BBox  box;
+ 
+@@ -88,8 +86,7 @@ public void WindowExposed( event )
+   }
+ 
+ 
+-public void HandleButton( ev )
+-  XButtonEvent  *ev;
++public void HandleButton( XButtonEvent *ev )
+   {
+     if( WITHINY( ev->y, scrollBox ) )
+       DoScrollBar( ev );
+@@ -123,8 +120,7 @@ public void HandleButton( ev )
+   }
+ 
+ 
+-public void HandleKey( ev )
+-  XKeyEvent  *ev;
++public void HandleKey( XKeyEvent *ev )
+   {
+     char  buff[ 40 ];
+     int   nChars, i;
+@@ -312,8 +308,7 @@ private void DisabledEventHandler()
+ 
+ #ifdef NEED_HELPER
+ 
+-private int StartHelper( fd )
+-  int  fd;
++private int StartHelper( int fd )
+   {
+     extern char  *cad_bin, *getenv();
+     static char  helper_name[] = "anXhelper";
+@@ -355,8 +350,7 @@ private int StartHelper( fd )
+ 
+ #endif /* NEED_HELPER */
+ 
+-public int InitHandler( fd )
+-  int fd;
++public int InitHandler( int fd )
+   {
+     int   flags;
+     char  *senv;
+--- a/base/rsim.c      2024-04-28 12:52:49.085904998 +0000
++++ b/base/rsim.c      2024-04-28 12:54:47.655225725 +0000
+@@ -95,6 +95,10 @@ public  float   step_cap_x_trans = 0;       /*
+ private int undefseq( /* p, list, lmax */ );
+ private int clockit( /* n */ );
+ 
++extern void EnableInput( /* */ );
++extern void DisableInput( /* */ );
++extern void alias( int targc, char *targv[] );
++
+ #ifdef TCL_IRSIM
+ extern Tcl_Interp *irsiminterp;
+ extern int check_interrupt();
+--- a/base/sim.c       2024-04-28 13:06:59.729744120 +0000
++++ b/base/sim.c       2024-04-28 13:08:52.060038672 +0000
+@@ -22,7 +22,7 @@
+  *  2. static power calculations not performed (only useful for nmos anyhow).
+  */
+ 
+-
++#include <math.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -88,9 +88,7 @@ private      char    bad_argc_msg[] = "Wrong
+   }                                                   \
+ 
+ 
+-private void PrArgs( argc, argv )
+-  int   argc;
+-  char  *argv[];
++private void PrArgs( int argc, char *argv[] )
+   {
+     while( argc-- != 0 )
+       (void) fprintf( stderr, "%s ", *argv++ );
+@@ -98,7 +96,7 @@ private void PrArgs( argc, argv )
+   }
+ 
+ 
+-private void CheckErrs( n )
++private void CheckErrs( int n )
+   {
+     nerrs += n;
+     if( nerrs > MAX_ERRS )
+@@ -181,9 +179,7 @@ private nptr connect_txtors()
+ /*
+  * node area and perimeter info (N sim command).
+  */
+-private void node_info( targc, targv )
+-  int   targc;
+-  char  *targv[];
++private void node_info( int targc, char *targv[] )
+   {
+     register nptr  n;
+ 
+@@ -202,9 +198,7 @@ private void node_info( targc, targv )
+ /*
+  * new format node area and perimeter info (M sim command).
+  */
+-private void nnode_info( targc, targv )
+-  int   targc;
+-  char  *targv[];
++private void nnode_info( int targc, char *targv[] )
+   {
+     register nptr  n;
+ 
+@@ -233,9 +227,7 @@ private    int    AP_error = FALSE;
+ /* lambda^2 and lambda, respectively.                 */
+ /*------------------------------------------------------*/
+ 
+-private int parseAttr(str, a, p)
+-char *str;
+-int *a, *p;
++private int parseAttr(char *str, int *a, int *p)
+ {
+    int l;
+    char *s;
+@@ -260,8 +252,7 @@ int *a, *p;
+ /* Default (unspecified) values are treated as ohms.          */
+ /*--------------------------------------------------------------*/
+ 
+-private float rconvert( resstring )
+-  char *resstring;
++private float rconvert( char *resstring )
+ {
+    /* Convert string to floating-point, and stop at the       */
+    /* first non-numeric character.                    */
+@@ -298,8 +289,7 @@ private float rconvert( resstring )
+ /* converted to centimicrons using the LAMBDACM factor.               */
+ /*--------------------------------------------------------------*/
+ 
+-private float lconvert( lstring )
+-  char *lstring;
++private float lconvert( char *lstring )
+ {
+    /* Convert string to floating-point, and stop at the       */
+    /* first non-numeric character.                    */
+@@ -331,10 +321,7 @@ private float lconvert( lstring )
+  * new transistor.  Implant specifies type.
+  * AreaPos specifies the argument number that contains the area (if any).
+  */
+-private void newtrans( implant, targc, targv )
+-  int   implant;
+-  int   targc;
+-  char  *targv[];
++private void newtrans( int implant, int targc, char *targv[] )
+   {
+     nptr           gate, src, drn;
+     long           x, y;
+@@ -469,9 +456,7 @@ printf("LAMBDA=%f CDA=%f CDP=%f asrc=%d
+ /*
+  * accept a bunch of aliases for a node (= sim command).
+  */
+-public void alias( targc, targv )
+-  int   targc;
+-  char  *targv[];
++public void alias( int targc, char *targv[] )
+   {
+     register nptr  n, m;
+     register int   i;
+@@ -510,9 +495,7 @@ public void alias( targc, targv )
+ /*
+  * node threshold voltages (t sim command).
+  */
+-private void nthresh( targc, targv )
+-  int   targc;
+-  char  *targv[];
++private void nthresh( int targc, char *targv[] )
+   {
+     register nptr  n;
+ 
+@@ -528,9 +511,7 @@ private void nthresh( targc, targv )
+ /*
+  * User delay for a node (D sim command).
+  */
+-private void ndelay( targc, targv )
+-  int   targc;
+-  char  *targv[];
++private void ndelay( int targc, char *targv[] )
+   {
+     register nptr  n;
+ 
+@@ -543,8 +524,7 @@ private void ndelay( targc, targv )
+     n->tphl = ns2d( atof( targv[3] ) );
+   }
+ 
+-private float cconvert( capstring )
+-  char *capstring;
++private float cconvert( char *capstring )
+ {
+    /* Convert string to floating-point, and stop at the       */
+    /* first non-numeric character.                    */
+@@ -577,9 +557,7 @@ private float cconvert( capstring )
+ /*
+  * add capacitance to a node (c sim command).
+  */
+-private void ncap( targc, targv )
+-  int   targc;
+-  char  *targv[];
++private void ncap( int targc, char *targv[] )
+   {
+     register nptr n, m;
+     float         cap;
+@@ -610,9 +588,7 @@ private void ncap( targc, targv )
+ /*
+  * parse input line into tokens, filling up carg and setting targc
+  */
+-private int parse_line( line, carg )
+-  register char  *line;
+-  register char  **carg;
++private int parse_line( register char *line, register char **carg )
+   {
+     register char  ch;
+     register int   targc;
+@@ -637,9 +613,7 @@ private int parse_line( line, carg )
+ private       int    R_error = FALSE;
+ private       int    A_error = FALSE;
+ 
+-private int input_sim (simfile, has_param_file)
+-  char  *simfile;
+-  int   has_param_file;
++private int input_sim (char *simfile, int has_param_file)
+ {
+     FILE  *fin;
+     char  line[LSIZE];
+@@ -699,7 +673,7 @@ private int input_sim (simfile, has_para
+               offset = ftell(fin);
+               olineno = lineno;
+               (void) fclose(fin);
+-              (void) input_sim(targv[1]);
++              (void) input_sim(targv[1], 0);
+               if ((fin = fopen(simfile, "r")) == NULL)
+               {
+                   rsimerror(simfname, lineno, "can't re-open sim file '%s'\n",
+@@ -872,10 +846,7 @@ private void init_counts()
+ }
+ 
+ 
+-public int rd_network( simfile, prefix, has_param_file )
+-  char  *simfile;
+-  char  *prefix;
+-  int   has_param_file;
++public int rd_network( char *simfile, char *prefix, int has_param_file )
+   {
+     static int      firstcall = 1;
+ 
+--- a/analyzer/window.c        2024-04-28 13:06:59.720744176 +0000
++++ b/analyzer/window.c        2024-04-28 13:16:43.176080004 +0000
+@@ -18,6 +18,7 @@
+  */
+ #include <stdio.h>
+ #include <string.h>   /* for strlen() */
++#include <stdlib.h>
+ #include "ana.h"
+ #include <X11/Xutil.h>
+ #include "graphics.h"
+@@ -45,12 +46,13 @@ public     int         bannerLen;
+ private       void    DrawSignal(), DrawVector(), DrawCursor();
+ private       void    MoveCursorToPos(), EraseCursor();
+ 
++extern int xloop_create();
++
+ /*
+  * Convert a time to its corresponding x position.
+  */
+ 
+-public Coord TimeToX(t)
+-    TimeType t;
++public Coord TimeToX(TimeType t)
+ {
+     Coord xval;
+ 
+@@ -68,8 +70,7 @@ public Coord TimeToX(t)
+  * Return (MAX_TIME) if the point lies outside the traces window.
+  */
+ 
+-public TimeType XToTime(x)
+-    Coord  x;
++public TimeType XToTime(Coord x)
+ {
+     float  tmp;
+     int denom;
+@@ -140,9 +141,7 @@ public int SetFont()
+  * Initialize the windows and various other metrics.
+  */
+ 
+-public int InitDisplay( fname, display_unit )
+-  char  *fname;
+-  char  *display_unit;
++public int InitDisplay( char *fname, char *display_unit )
+   {
+ #ifdef HAVE_PTHREADS
+     XInitThreads();
+@@ -180,11 +179,7 @@ public int InitDisplay( fname, display_u
+   }
+ 
+ 
+-public int InitWindow( firstTime, state, x, y, w, h, ix, iy )
+-  int    firstTime;
+-  int    state;
+-  Coord  x, y, w, h;
+-  Coord  ix, iy;
++public int InitWindow( int firstTime, int state, Coord x, Coord y, Coord w, 
Coord h, Coord ix, Coord iy )
+   {
+     int                   spec, u_spec;
+     static int            b;
+@@ -283,9 +278,7 @@ public
+  * shown on the screen.  Default width is DEF_STEPS (simulation) steps.
+  */
+ 
+-public void InitTimes(firstT, stepsize, lastT, reInit)
+-  TimeType  firstT, stepsize, lastT;
+-  int reInit;
++public void InitTimes(TimeType firstT, TimeType stepsize, TimeType lastT, int 
reInit)
+ {
+     tims.first = firstT;
+     tims.last = lastT;
+@@ -324,8 +317,7 @@ public void InitTimes(firstT, stepsize,
+ /*
+  * Redraw any region that overlaps the redraw-box.
+  */
+-public void RedrawWindow( box )
+-  BBox  box;
++public void RedrawWindow( BBox box )
+   {
+ 
+ #ifndef TCL_IRSIM
+@@ -392,8 +384,7 @@ public void RedrawBanner()
+   }
+ 
+ 
+-public void WindowCrossed( selected )
+-  int  selected;
++public void WindowCrossed( int selected )
+   {
+     GC  color;
+ 
+@@ -463,8 +454,7 @@ public void RedrawTimes()
+   }
+ 
+ 
+-public void UpdateTimes( start, end )
+-  TimeType  start, end;
++public void UpdateTimes( TimeType start, TimeType end )
+   {
+     static TimeType  ostart, oend;
+     static int       slen, elen;
+@@ -503,8 +493,7 @@ public void UpdateTimes( start, end )
+ /*
+  * Redraw signal names.
+  */
+-public void RedrawNames( rb )
+-  BBox  rb;
++public void RedrawNames( BBox rb )
+   {
+     Coord  x, y;
+     Trptr  t;
+@@ -540,8 +529,7 @@ public void RedrawNames( rb )
+  * This will redraw the missing parts of the traces.  Used to selectivelly
+  * repaint traces or during Exposure events.
+  */
+-public void RedrawTraces( box )
+-  BBox  *box;
++public void RedrawTraces( BBox *box )
+   {
+     TimeType        t1, t2, tc;
+     BBox            bg;
+@@ -603,8 +591,7 @@ public void RedrawTraces( box )
+  * Update the cache (begining of window and cursor) for traces that just
+  * became visible ( or were just added ).
+  */
+-public void UpdateTraceCache( first_trace )
+-  int  first_trace;
++public void UpdateTraceCache( int first_trace )
+   {
+     register Trptr     t;
+     register hptr      h,p;
+@@ -710,8 +697,7 @@ public void FlushTraceCache()
+ /*
+  * Draw the traces horizontally from time1 to time2.
+  */
+-public void DrawTraces( t1, t2 )
+-  TimeType  t1, t2;
++public void DrawTraces( TimeType t1, TimeType t2 )
+   {
+     TimeType         endT;
+     register Trptr   t;
+@@ -779,9 +765,7 @@ public void DrawTraces( t1, t2 )
+ /*
+  * Draw a 1 bit trace.
+  */
+-private void DrawSignal( t, t1, t2 )
+-  Trptr              t;
+-  register TimeType  t1, t2;
++private void DrawSignal( Trptr t, register TimeType t1, register TimeType t2 )
+   {
+     register hptr  h;
+     register int   val, change;
+@@ -847,10 +831,7 @@ public    hptr    tmpHBuff[ 400 ];
+ /*
+  * Draw bus trace.
+  */
+-private void DrawVector( t, t1, t2, clr_bg )
+-  register Trptr     t;
+-  register TimeType  t1, t2;
+-  int                clr_bg;
++private void DrawVector( register Trptr t, register TimeType t1, register 
TimeType t2, int clr_bg )
+   {
+     hptr      *start, *changes;
+     TimeType  firstChange;
+@@ -997,8 +978,7 @@ private void DrawVector( t, t1, t2, clr_
+ 
+ 
+ 
+-private void UpdateTraces( start, end )
+-  TimeType  start, end;
++private void UpdateTraces( TimeType start, TimeType end )
+   {
+     if( not (windowState.iconified or windowState.tooSmall) )
+       {
+@@ -1009,8 +989,7 @@ private void UpdateTraces( start, end )
+   }
+ 
+ 
+-private void ScrollTraces( endT )
+-  TimeType  endT;
++private void ScrollTraces( TimeType endT )
+   {
+     tims.start = endT - tims.steps / 2;
+     tims.end = tims.start + tims.steps;
+@@ -1023,8 +1002,7 @@ private void ScrollTraces( endT )
+  * window, simply draw the missing parts.  Otherwise scroll the traces,
+  * centered around endT.
+  */
+-public void UpdateWindow( endT )
+-  TimeType  endT;
++public void UpdateWindow( TimeType endT )
+   {
+     TimeType  lastT;
+ 
+@@ -1108,9 +1086,7 @@ private void  DrawCursor()
+   }
+ 
+ 
+-public void SetCursor( t, time )
+-  Trptr t;
+-  TimeType time;
++public void SetCursor( Trptr t, TimeType time )
+ {
+     register hptr  h, p;
+     register int   n;
+@@ -1150,8 +1126,7 @@ public void SetCursor( t, time )
+     PRINTF( "%s, input=%s", val, inp );
+ }
+ 
+-void DoCursor( ev )
+-  XButtonEvent  *ev;
++void DoCursor( XButtonEvent *ev )
+   {
+     Trptr     t;
+     TimeType  time;
+@@ -1249,8 +1224,7 @@ public void MoveCursorToTime(TimeType ti
+     DrawCursVal( cursorBox );
+   }
+ 
+-private void MoveCursorToPos( x )
+-  Coord  x;
++private void MoveCursorToPos( Coord x )
+ {
+     register TimeType  time;
+ 
+@@ -1264,8 +1238,7 @@ private  char  *StrMap[] = { "0", "X", ""
+ /*
+  * Display signal values under cursor.
+  */
+-public void DrawCursVal( rb )
+-  BBox  rb;
++public void DrawCursVal( BBox rb )
+   {
+     Coord        y;
+     Trptr        t;
+@@ -1301,8 +1274,7 @@ public void DrawCursVal( rb )
+   }
+ 
+ 
+-public void ExpandCursVal( t )
+-  Trptr  t;
++public void ExpandCursVal( Trptr t )
+   {
+     char          *val;
+     int           nbits;
+--- a/irsim/irsim.c    2024-04-28 13:17:14.664882250 +0000
++++ b/irsim/irsim.c    2024-04-28 13:22:11.241001493 +0000
+@@ -24,8 +24,11 @@
+ #include "../usersubckt/subckt.h"
+ #endif
+ 
++extern void InitCmdPath();
++extern public void init_commands();
++extern int finput( char *name);
++
+ /* VARARGS1 */
+-public void Usage( msg, s1 )
+-  char  *msg, *s1;
++public void Usage( char *msg, char *s1 )
+   {
+     (void) fprintf( stderr, msg, s1 );
+@@ -39,8 +43,7 @@ public void Usage( msg, s1 )
+ 
+ /* Main routine for irsim */
+ 
+-public main( argc, argv )
+-   char *argv[];
++public int main( int argc, char *argv[] )
+   {
+     int  i, arg1, has_param_file;
+ 
+--- a/irsim/gentbl.c   2024-04-28 13:24:29.662121434 +0000
++++ b/irsim/gentbl.c   2024-04-28 13:25:36.970693497 +0000
+@@ -35,7 +35,7 @@ FILE  *out;
+ 
+ 
+ /* name of interval */
+-char *pinterval( high, low )
++char *pinterval( int high, int low )
+   {
+     static char  temp[100];
+ 
+@@ -48,8 +48,7 @@ char *pinterval( high, low )
+ 
+ 
+ /* return strength of value */
+-int strength( i )
+-  register int  i;
++int strength( register int i )
+   {
+     if( (i -= NVALUES) < 0 )
+       i = -i;
+@@ -60,14 +59,14 @@ int strength( i )
+ #define max( A, B )                   ( ((A) > (B)) ? (A) : (B) )
+ 
+ /* find the enclosing interval */
+-char *span( ihigh, ilow, jhigh, jlow )
++char *span( int ihigh,int ilow,int jhigh, int jlow )
+   {
+     return( pinterval( min( ihigh, jhigh ), max( ilow, jlow ) ) );
+   }
+ 
+ 
+ /* merge two intervals using least-upper bound operation */
+-char *merge( ihigh, ilow, jhigh, jlow )
++char *merge( int ihigh, int ilow, int jhigh, int jlow )
+   {
+     register int  ahigh, alow;
+ 
+@@ -94,7 +93,7 @@ char *merge( ihigh, ilow, jhigh, jlow )
+ 
+ 
+ /* convert interval to use weak values */
+-char *weak( i, j )
++char *weak( int i, int j )
+   {
+     if( i == 0 )
+       i = 1;
+@@ -108,7 +107,7 @@ char *weak( i, j )
+   }
+ 
+ 
+-main()
++int main(void)
+   {
+     register int  i, j, k, ii, jj, interval2;
+ 

diff --git a/sci-electronics/irsim/files/irsim-9.7.93-clean-makefile.patch 
b/sci-electronics/irsim/files/irsim-9.7.93-clean-makefile.patch
new file mode 100644
index 000000000000..6e563ecbb916
--- /dev/null
+++ b/sci-electronics/irsim/files/irsim-9.7.93-clean-makefile.patch
@@ -0,0 +1,69 @@
+--- a/Makefile 2024-04-28 12:09:30.171997301 +0000
++++ b/Makefile 2024-04-28 12:12:42.709770097 +0000
+@@ -33,26 +33,26 @@ config:
+ tcllibrary: modules
+       @echo --- making Tcl shared-object libraries
+       for dir in ${PROGRAMS}; do \
+-              (cd $$dir && ${MAKE} tcl-main); done
++              ${MAKE} -C $$dir tcl-main; done
+ 
+ mains: modules
+       @echo --- making main programs
+       for dir in ${PROGRAMS}; do \
+-              (cd $$dir && ${MAKE} main); done
++              ${MAKE} -C $$dir main; done
+ 
+ modules:
+       @echo --- making modules
+       for dir in ${MODULES}; do \
+-              (cd $$dir && ${MAKE} module); done
++              ${MAKE} -C $$dir module; done
+ 
+ libs:
+       @echo --- making libraries
+       for dir in ${LIBRARIES}; do \
+-              (cd $$dir && ${MAKE} lib); done
++              ${MAKE} -C $$dir lib; done
+ 
+ depend:
+       for dir in ${MODULES} ${PROGRAMS}; do \
+-              (cd $$dir && ${MAKE} depend); done
++              ${MAKE} -C $$dir depend; done
+ 
+ install: $(INSTALL_TARGET)
+ 
+@@ -63,9 +63,9 @@ install-irsim:
+ 
+ install-real: install-dirs
+       for dir in ${INSTALL_CAD_DIRS}; do \
+-              (cd $$dir && ${MAKE} install); done
++              ${MAKE} -C $$dir install; done
+       for dir in ${PROGRAMS}; do \
+-              (cd $$dir && ${MAKE} install); done
++              ${MAKE} -C $$dir install; done
+ 
+ install-tcl-dirs:
+       ${IRSIMDIR}/scripts/mkdirs $(DESTDIR)${BINDIR} $(DESTDIR)${MANDIR} \
+@@ -82,11 +82,11 @@ install-tcl:
+ 
+ install-tcl-real: install-tcl-dirs
+       for dir in ${INSTALL_CAD_DIRS} ${PROGRAMS}; do \
+-              (cd $$dir && ${MAKE} install-tcl); done
++              ${MAKE} -C $$dir install-tcl; done
+ 
+ clean:
+       for dir in ${MODULES} ${PROGRAMS} ${UNUSED_MODULES}; do \
+-              (cd $$dir && ${MAKE} clean); done
++              ${MAKE} -C $$dir clean; done
+       ${RM} *.log
+ 
+ distclean:
+@@ -109,7 +109,7 @@ dist:
+ 
+ clean-mains:
+       for dir in ${PROGRAMS}; do \
+-              (cd $$dir && ${RM} $$dir}; done
++              (cd $$dir && ${RM} $$dir); done
+ 
+ tags:
+       ${RM} tags

diff --git a/sci-electronics/irsim/irsim-9.7.93-r1.ebuild 
b/sci-electronics/irsim/irsim-9.7.93-r1.ebuild
new file mode 100644
index 000000000000..55018f2c0ccd
--- /dev/null
+++ b/sci-electronics/irsim/irsim-9.7.93-r1.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="IRSIM is a \"switch-level\" simulator"
+HOMEPAGE="http://opencircuitdesign.com/irsim/";
+SRC_URI="http://opencircuitdesign.com/irsim/archive/${P}.tgz";
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+       dev-lang/tcl:=
+       dev-lang/tk:=
+"
+DEPEND="${RDEPEND}"
+BDEPEND="app-shells/tcsh"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-9.7.72-ldflags.patch
+       "${FILESDIR}"/${PN}-9.7.79-datadir.patch
+       "${FILESDIR}"/${PN}-9.7.93-clean-makefile.patch
+       "${FILESDIR}"/${PN}-9.7.93-C99-port.patch
+)
+
+src_configure() {
+       # Short-circuit top-level configure script to retain CFLAGS
+       cd scripts || die
+       econf
+}
+
+pkg_postinst() {
+       einfo
+       einfo "You will probably need to add to your ~/.Xdefaults"
+       einfo "the following line:"
+       einfo "irsim.background: black"
+       einfo
+       einfo "This is needed because Gentoo from default sets a"
+       einfo "grey background which makes impossible to see the"
+       einfo "simulation (white line on light gray background)."
+       einfo
+}


Reply via email to