FASTLINK user Kurt Hornik has succeeded in porting most of the
LINKAGE auxiliary programs to Linux. He started with the Sun distribution
of LINKAGE and made a few changes to the source code.


Here is the file by file diff  relative to the Sun distribution of
LINKAGE from Utah (corona.med.utah.edu).

******* snip snip snip ********************************************

diff -rc linkage/uip.orig/lcp/src/unxh.c linkage/uip/lcp/src/unxh.c
*** linkage/uip.orig/lcp/src/unxh.c	Mon Jan  7 19:22:10 1991
--- linkage/uip/lcp/src/unxh.c	Mon Jan  7 19:22:10 1991
***************
*** 2,24 ****
  
  /**
   **
!  **	unxh.c - UNIX (ULTRIX/BSD) host routines module.
   **
   **/
  
  
  #include <stdio.h>
  #include <signal.h>
! #include <sgtty.h>
  #include <sys/ioctl.h>
  #include "lnk.h"
  #include "lcp.h"
  
  
! struct sgttyb  otty, ntty;
! struct tchars  osch, nsch;
! struct ltchars olch, nlch;
! struct winsize window;
  
  typedef struct   csidef scirec;
  
--- 2,22 ----
  
  /**
   **
!  **	unxh.c - UNIX (System V) host routines module.
   **
   **/
  
  
  #include <stdio.h>
  #include <signal.h>
! #include <termio.h>
  #include <sys/ioctl.h>
  #include "lnk.h"
  #include "lcp.h"
  
  
! struct  termio otty, ntty;
! struct  winsize window;
  
  typedef struct   csidef scirec;
  
***************
*** 86,129 ****
  
  /*    p1 = getenv ("TERM");*/
  
!     if (ioctl (0,TIOCGETP,&otty) < 0)
        lnk_error_ (LNK_FATAL,"Internal Error",prg,"osh_init",1);
  
      ntty = otty;
!     ntty.sg_flags &= ~ECHO;
!     ntty.sg_flags |= CBREAK;
  
!     if (ioctl (0,TIOCSETP,&ntty) < 0)
        lnk_error_ (LNK_FATAL,"Internal Error",prg,"osh_init",2);
- 
- 
-     if (ioctl (0,TIOCGETC,&osch) < 0)
-       lnk_error_ (LNK_FATAL,"Internal Error",prg,"osh_init",3);
- 
-     nsch = osch;
-     nsch.t_intrc  = -1;
-     nsch.t_quitc  = -1;
-     nsch.t_startc = -1;
-     nsch.t_stopc  = -1;
-     nsch.t_eofc   = -1;
-     nsch.t_brkc   = -1;
- 
-     if (ioctl (0,TIOCSETC,&nsch) < 0)
-       lnk_error_ (LNK_FATAL,"Internal Error",prg,"osh_init",4);
- 
-     if (ioctl (0,TIOCGLTC,&olch) < 0)
-       lnk_error_ (LNK_FATAL,"Internal Error",prg,"osh_init",5);
- 
-     nlch = olch;
-     nlch.t_suspc  = -1;
-     nlch.t_dsuspc = -1;
-     nlch.t_rprntc = -1;
-     nlch.t_flushc = -1;
-     nlch.t_werasc = -1;
-     nlch.t_lnextc = -1;
- 
-     if (ioctl (0,TIOCSLTC,&nlch) < 0)
-       lnk_error_ (LNK_FATAL,"Internal Error",prg,"osh_init",6);
    }
  
  
--- 84,101 ----
  
  /*    p1 = getenv ("TERM");*/
  
!     if (ioctl (0, TCGETA, &otty) < 0)
        lnk_error_ (LNK_FATAL,"Internal Error",prg,"osh_init",1);
  
      ntty = otty;
!     ntty.c_iflag     &= ~(ICRNL|IXON|ISTRIP);
! /*  ntty.c_oflag     &= ~OPOST;*/
!     ntty.c_lflag     &= ~(ISIG|ICANON|ECHO);
!     ntty.c_cc [VMIN]  = 1;
!     ntty.c_cc [VTIME] = 0;
  
!     if (ioctl (0,TCSETA,&ntty) < 0)
        lnk_error_ (LNK_FATAL,"Internal Error",prg,"osh_init",2);
    }
  
  
***************
*** 257,265 ****
  	(void) chmod (cmd_name,0755);
        }
  
!     (void) ioctl (0,TIOCSETP,&otty);
!     (void) ioctl (0,TIOCSETC,&osch);
!     (void) ioctl (0,TIOCSLTC,&olch);
    }
  
  
--- 229,235 ----
  	(void) chmod (cmd_name,0755);
        }
  
!     (void) ioctl (0,TCSETA,&otty);
    }
  
  
***************
*** 283,291 ****
  	(void) unlink (cmd_name);
        }
  
!     (void) ioctl (0,TIOCSETP,&otty);
!     (void) ioctl (0,TIOCSETC,&osch);
!     (void) ioctl (0,TIOCSLTC,&olch);
    }
  
  
--- 253,259 ----
  	(void) unlink (cmd_name);
        }
  
!     (void) ioctl (0,TCSETA,&otty);
    }
  
  
***************
*** 319,327 ****
  
      (void) printf (string_exit);
  
!     (void) ioctl (0,TIOCSETP,&otty);
!     (void) ioctl (0,TIOCSETC,&osch);
!     (void) ioctl (0,TIOCSLTC,&olch);
  
      (void) printf ("\nProgram Exception : Signal = %d.\n",sig);
  
--- 287,293 ----
  
      (void) printf (string_exit);
  
!     (void) ioctl (0,TCSETA,&otty);
  
      (void) printf ("\nProgram Exception : Signal = %d.\n",sig);
  
diff -rc linkage/uip.orig/ldp/src/makeped.c linkage/uip/ldp/src/makeped.c
*** linkage/uip.orig/ldp/src/makeped.c	Tue Jan 15 20:43:32 1991
--- linkage/uip/ldp/src/makeped.c	Wed Aug 17 09:35:23 1994
***************
*** 38,44 ****
    #include <alloc.h>
  #endif
  
- 
  #define	FALSE			0
  #define	TRUE			1
  
--- 38,43 ----
***************
*** 2052,2055 ****
--- 2051,2055 ----
    fclose(pedfile);
    fclose(pedout);
  
+   exit(0);
  }
diff -rc linkage/uip.orig/llb/lsm/src/unxh.c linkage/uip/llb/lsm/src/unxh.c
*** linkage/uip.orig/llb/lsm/src/unxh.c	Mon Jan  7 18:54:03 1991
--- linkage/uip/llb/lsm/src/unxh.c	Wed Aug 17 08:39:16 1994
***************
*** 9,26 ****
  
  #include <stdio.h>
  #include <signal.h>
! #include <sgtty.h>
  #include <sys/ioctl.h>
  #include "lnk.h"
  #include "lsm.h"
  #include "gdef.h"
  
  
- struct sgttyb  otty, ntty;
- struct tchars  osch, nsch;
- struct ltchars olch, nlch;
- struct winsize window;
- 
  typedef struct   csidef scirec;
  
  struct csidef
--- 9,23 ----
  
  #include <stdio.h>
  #include <signal.h>
! #include <termio.h>
  #include <sys/ioctl.h>
  #include "lnk.h"
  #include "lsm.h"
  #include "gdef.h"
  
+ struct	termio otty, ntty;
+ struct  winsize window;
  
  typedef struct   csidef scirec;
  
  struct csidef
***************
*** 87,131 ****
  
  /*    p1 = getenv ("TERM");*/
  
!     if (ioctl (0,TIOCGETP,&otty) < 0)
        lnk_error_ (LNK_FATAL,"Internal error",lsm_program,"lsm_hini",1);
  
!     ntty = otty;
!     ntty.sg_flags &= ~ECHO;
!     ntty.sg_flags |= CBREAK;
  
!     if (ioctl (0,TIOCSETP,&ntty) < 0)
        lnk_error_ (LNK_FATAL,"Internal error",lsm_program,"lsm_hini",2);
  
- 
-     if (ioctl (0,TIOCGETC,&osch) < 0)
-       lnk_error_ (LNK_FATAL,"Internal error",lsm_program,"lsm_hini",3);
- 
-     nsch = osch;
-     nsch.t_intrc  = -1;
-     nsch.t_quitc  = -1;
-     nsch.t_startc = -1;
-     nsch.t_stopc  = -1;
-     nsch.t_eofc   = -1;
-     nsch.t_brkc   = -1;
- 
-     if (ioctl (0,TIOCSETC,&nsch) < 0)
-       lnk_error_ (LNK_FATAL,"Internal error",lsm_program,"lsm_hini",4);
- 
- 
-     if (ioctl (0,TIOCGLTC,&olch) < 0)
-       lnk_error_ (LNK_FATAL,"Internal error",lsm_program,"lsm_hini",5);
- 
-     nlch = olch;
-     nlch.t_suspc  = -1;
-     nlch.t_dsuspc = -1;
-     nlch.t_rprntc = -1;
-     nlch.t_flushc = -1;
-     nlch.t_werasc = -1;
-     nlch.t_lnextc = -1;
- 
-     if (ioctl (0,TIOCSLTC,&nlch) < 0)
-       lnk_error_ (LNK_FATAL,"Internal error",lsm_program,"lsm_hini",6);
    }
  
  
--- 84,101 ----
  
  /*    p1 = getenv ("TERM");*/
  
!     if (ioctl (0, TCGETA, &otty) < 0)
        lnk_error_ (LNK_FATAL,"Internal error",lsm_program,"lsm_hini",1);
  
!      ntty.c_iflag     &= ~(ICRNL|IXON|ISTRIP);
!  /*  ntty.c_oflag     &= ~OPOST;*/
!      ntty.c_lflag     &= ~(ISIG|ICANON|ECHO);
!      ntty.c_cc [VMIN]  = 1;
!      ntty.c_cc [VTIME] = 0;
  
!     if (ioctl (0,TCSETA,&ntty) < 0)
        lnk_error_ (LNK_FATAL,"Internal error",lsm_program,"lsm_hini",2);
  
    }
  
  
***************
*** 223,232 ****
    {
      extern   int     ioctl ();
  
! 
!     (void) ioctl (0,TIOCSETP,&otty);
!     (void) ioctl (0,TIOCSETC,&osch);
!     (void) ioctl (0,TIOCSLTC,&olch);
    }
  
  
--- 193,199 ----
    {
      extern   int     ioctl ();
  
!     (void) ioctl (0,TCSETA,&otty);
    }
  
  
***************
*** 236,245 ****
    {
      extern   int     ioctl ();
  
! 
!     (void) ioctl (0,TIOCSETP,&otty);
!     (void) ioctl (0,TIOCSETC,&osch);
!     (void) ioctl (0,TIOCSLTC,&olch);
    }
  
  
--- 203,209 ----
    {
      extern   int     ioctl ();
  
!     (void) ioctl (0,TCSETA,&otty);
    }
  
  
***************
*** 259,267 ****
  
      (void) printf (lsm_exit_str);
  
!     (void) ioctl (0,TIOCSETP,&otty);
!     (void) ioctl (0,TIOCSETC,&osch);
!     (void) ioctl (0,TIOCSLTC,&olch);
  
      (void) printf ("\nProgram Exception : Signal = %d.\n",sig);
  
--- 223,229 ----
  
      (void) printf (lsm_exit_str);
  
!     (void) ioctl (0,TCSETA,&otty);
  
      (void) printf ("\nProgram Exception : Signal = %d.\n",sig);
  
******** snip snip snip ********************************************


