Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
c99807d
Reduce calls to get/release vscrn mutex on scroll
davidrg Mar 26, 2026
79b7354
New way of tracking vscrn dirtyness
davidrg Mar 27, 2026
dea10a7
Use Critical Sections instead of Mutexes
davidrg Mar 27, 2026
c9a8861
Check if LE buffer has data before checking how much
davidrg Mar 27, 2026
55c7027
Bump zlib
davidrg Mar 28, 2026
3dc44f5
Merge branch 'master' into performance
davidrg Jul 5, 2026
d0a7801
Add new \v(ntime_ms) variable that provides time since midnight in mi…
davidrg Jul 5, 2026
2fe2896
Remove parameter from CreateVscrnMutex as it was only ever passed FALSE
davidrg Jul 5, 2026
839069b
Use Critical Sections instead of a Mutex for the Vscrn
davidrg Jul 5, 2026
dd04052
No reason to use /Ox over /O2
davidrg Jul 5, 2026
62dd778
Use critical sections to guard the SSH ring buffer
davidrg Jul 6, 2026
5e42f32
Don't call debses or learning functions unless these features are ena…
davidrg Jul 6, 2026
fa1bed5
Call VscrnGetPageLineFromTop instead of VscrnGetLineFromTop
davidrg Jul 6, 2026
a621125
Call VscrnGetCurPosEx directly rather than VscrnGetCurPos which just …
davidrg Jul 6, 2026
f3871df
Get cursor information up front to reduce the time the Vscrn lock is …
davidrg Jul 6, 2026
c8c7687
Change the default screen update interval from 100ms (10fps) to 20ms …
davidrg Jul 6, 2026
b3c4115
Fix SSH DLL build error
davidrg Jul 6, 2026
d0fb3b9
Use CriticalSections for NetCmd too
davidrg Jul 6, 2026
c3e420a
Replace the NetCmd input thread with a new implementation.
davidrg Jul 6, 2026
1ec69ec
Fix stray include of ckorbf.h, and update makefile dependencies
davidrg Jul 6, 2026
6f2f3d6
Provide a way for the ring buffer to tell if it is being compiled for…
davidrg Jul 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions doc/changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,8 +202,11 @@ as part of K95 at this time, the default terminal remains VT220 for now.
- The linux console terminal emulation now uses the UTF-8 character set by
default as most linux distributions moved to UTF-8 long ago now.
- Upgrade OpenSSL to 3.5.7
- Improved terminal throughput for SSH connections by around seven times, which
helps when you accidentally cat a large log file.
- Drastic improvements in terminal throughput which helps when you accidentally
cat a large file:
- SSH connections are around 33x faster
- Telnet and other IP connections are around 8x faster
- Pipe and PTY connections are around 87x faster
- Doubled maximum terminal lines to 256 in K95G on modern systems
- Added a new function, `\fterminalchecksum`, which produces a checksum of the
terminal screen using the same algorithm as DECRQCRA. Parameters allow you
Expand Down Expand Up @@ -236,12 +239,16 @@ as part of K95 at this time, the default terminal remains VT220 for now.
- Lucida Console
- Courier
- Terminal
- System
- Improved throughput for pipe connections on Windows
- System
- Upgraded to zlib 1.3.2
- The Secondary DA response when the terminal type is set to VT220 or VT220PC
now reports the VT220 identification code, rather than the code for VT320.
- DECCARA supports changing color attributes the K95 terminal type
- Added a new \v(ntime_ms) variable which provides the current time since
midnight in milliseconds.
- The default screen update interval is now 20 milliseconds giving a frame rate
of 50 frames per second. The old default was 100 milliseconds (10fps), but
overridden by the default k95custom.ini.

### New terminal control sequences
> [!NOTE]
Expand Down
4 changes: 2 additions & 2 deletions kermit/k95/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ OBJS = $(OUTDIR)/ckcmai$(O) $(OUTDIR)/ckcfns$(O) $(OUTDIR)/ckcfn2$(O) \
$(OUTDIR)/cknnbi$(O) $(OUTDIR)/ckop$(O) $(OUTDIR)/p_callbk$(O) \
$(OUTDIR)/p_global$(O) $(OUTDIR)/p_omalloc$(O) $(OUTDIR)/p_error$(O) \
$(OUTDIR)/p_common$(O) $(OUTDIR)/p_tl$(O) $(OUTDIR)/p_dir$(O) \
$(OUTDIR)/ckoads$(O) $(OUTDIR)/ckosnd$(O)
$(OUTDIR)/ckoads$(O) $(OUTDIR)/ckosnd$(O) $(OUTDIR)/ckorbf$(O)

# For SSH-enabled builds
#OBJS = $(OBJS) ckossh$(O) ckolssh$(O) ckorbf$(O) ckolsshs$(O)
Expand Down Expand Up @@ -393,7 +393,7 @@ $(OUTDIR)/ckomou$(O): ckomou.c ckocon.h ckcdeb.h ckoker.h ckclib.h ckokey.h \
$(OUTDIR)/ckoreg$(O): ckoreg.c ckcdeb.h ckoker.h ckclib.h ckcker.h
$(OUTDIR)/ckonet$(O): ckonet.c ckcker.h ckcdeb.h ckoker.h ckclib.h ckoker.h \
ckcnet.h ckctel.h ckonet.h ckotcp.h ckonbi.h ckuusr.h ckcsig.h cknwin.h \
ckowin.h ckuath.h ck_ssl.h ckossh.h ckossl.h ckosslc.h
ckowin.h ckuath.h ck_ssl.h ckossh.h ckossl.h ckosslc.h ckorbf.h
$(OUTDIR)/ckoslp$(O): ckoslp.c ckoslp.h ckcdeb.h ckoker.h ckclib.h
$(OUTDIR)/ckosyn$(O): ckosyn.c ckcdeb.h ckoker.h ckclib.h ckcker.h ckocon.h \
ckuusr.h ckntap.h
Expand Down
7 changes: 6 additions & 1 deletion kermit/k95/ckcnet.c
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,7 @@ extern char ttname[];
#ifdef CK_AUTHENTICATION
#include "ckuusr.h"
#endif /* CK_AUTHENTICATION */
int le_hasdata();
#endif /* OS2 */

#ifdef NT
Expand Down Expand Up @@ -6449,7 +6450,11 @@ netinc(timo) int timo;
}

#ifdef LEBUF
if (le_inbuf() > 0) { /* If data was inserted into the */
if (
#ifdef OS2
le_hasdata() &&
#endif /* OS2 */
le_inbuf() > 0) { /* If data was inserted into the */
if (le_getchar((CHAR *)&c) > 0) {/* Local Echo buffer while the */
#ifdef OS2 /* was taking place do not mix */
ReleaseTCPIPMutex(); /* the le data with the net data */
Expand Down
58 changes: 25 additions & 33 deletions kermit/k95/ckoco2.c
Original file line number Diff line number Diff line change
Expand Up @@ -1780,6 +1780,14 @@ VscrnIsDirty( int vmode )
extern int k95stdout;
if ( k95stdout )
return 0;
#ifdef KUIDIRTY
/* Just having a number that constantly changes is a bit cheaper than
* semaphores. KUI is on a different thread, so it just needs to check if the
* number has changed since last it checked to know if its dirty. KUI never
* waited on the semaphore, so there wasn't much value in the extra overhead
* it has. */
vscrn[vmode].dirty++;
#else /* KUIDIRTY */
#ifdef OLDDIRTY
RequestVscrnDirtyMutex( vmode, SEM_INDEFINITE_WAIT );
if ( !isdirty[vmode] )
Expand All @@ -1790,11 +1798,13 @@ VscrnIsDirty( int vmode )
ReleaseVscrnDirtyMutex(vmode);
#else
rc = PostVscrnDirtySem(vmode) ;
#endif
#endif
#endif /* KUIDIRTY */
return rc ;
}


#ifndef KUIDIRTY
APIRET
IsVscrnDirty( int vmode )
{
Expand Down Expand Up @@ -1824,9 +1834,11 @@ VscrnClean( int vmode )
#else
rc = IsVscrnDirty(vmode);
ResetVscrnDirtySem(vmode);
#endif
#endif
return rc ;
}
#endif /* KUIDIRTY */

/*----------------------------------------------------------+----------------*/
/* VscrnScrollLf | Page: Cursor */
/*----------------------------------------------------------+----------------*/
Expand Down Expand Up @@ -2071,7 +2083,8 @@ VscrnWrtCell( BYTE vmode, viocell Cell, vtattrib att, USHORT Row, USHORT Col )
if ( vmode == VTERM && decsasd == SASD_STATUS )
vmode = VSTATUS ;

line = VscrnGetLineFromTop( vmode, Row, FALSE ) ;
line = VscrnGetPageLineFromTop( vmode, Row,
vscrn_current_page_number(vmode, FALSE) ) ;

if (line->width == 0) {
line->width = VscrnGetWidth(vmode) ;
Expand Down Expand Up @@ -2569,7 +2582,8 @@ VscrnGetLineVtAttr( BYTE vmode, SHORT y ) /* zero based */
if ( vmode == VTERM && decsasd == SASD_STATUS )
vmode = VSTATUS ;

return VscrnGetLineFromTop(vmode,y,FALSE)->vt_line_attr ;
return VscrnGetPageLineFromTop(
vmode, y, vscrn_current_page_number(vmode, FALSE))->vt_line_attr;
}

/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -2997,17 +3011,17 @@ VscrnGetEnd( BYTE vmode, BOOL orStatusLine, BOOL view_page )
/* VscrnSetPageTop | Page: Specified*/
/*----------------------------------------------------------+----------------*/
LONG
VscrnSetPageTop( BYTE vmode, LONG y, BOOL orStatusLine, int page )
VscrnSetPageTop( BYTE vmode, LONG y, BOOL orStatusLine, int page, BOOL haveMutex )
{
if ( vmode == VTERM && decsasd == SASD_STATUS && orStatusLine )
vmode = VSTATUS ;

while ( y < 0 )
y += vscrn[vmode].pages[page].linecount ;

RequestVscrnMutex( vmode, SEM_INDEFINITE_WAIT ) ;
if (!haveMutex) RequestVscrnMutex( vmode, SEM_INDEFINITE_WAIT ) ;
vscrn[vmode].pages[page].top = y%vscrn[vmode].pages[page].linecount ;
ReleaseVscrnMutex( vmode );
if (!haveMutex) ReleaseVscrnMutex( vmode );
return vscrn[vmode].pages[page].top ;
}

Expand All @@ -3018,7 +3032,7 @@ LONG
VscrnSetTop( BYTE vmode, LONG y, BOOL orStatusLine, BOOL view )
{
return VscrnSetPageTop(vmode, y, orStatusLine,
vscrn_current_page_number(vmode, view));
vscrn_current_page_number(vmode, view), FALSE);
}


Expand Down Expand Up @@ -3066,6 +3080,7 @@ VscrnSetScrollHorz( BYTE vmode, LONG h )
/*----------------------------------------------------------+----------------*/
/* VscrnSetPageBegin | Page: Specified*/
/*----------------------------------------------------------+----------------*/
/* You must acquire the Vscrn mutex before calling! */
LONG
VscrnSetPageBegin( BYTE vmode, LONG y, int page )
{
Expand All @@ -3076,25 +3091,14 @@ VscrnSetPageBegin( BYTE vmode, LONG y, int page )
while ( y < 0 )
y += vscrn[vmode].pages[page].linecount ;

RequestVscrnMutex( vmode, SEM_INDEFINITE_WAIT ) ;
vscrn[vmode].pages[page].beg = y%vscrn[vmode].pages[page].linecount ;
ReleaseVscrnMutex( vmode );
return vscrn[vmode].pages[page].beg ;
}

/*----------------------------------------------------------+----------------*/
/* VscrnSetBegin | Page: Specified*/
/*----------------------------------------------------------+----------------*/
LONG
VscrnSetBegin( BYTE vmode, LONG y, BOOL view )
{
return VscrnSetPageBegin(
vmode, y, vscrn_current_page_number(vmode, view));
}

/*----------------------------------------------------------+----------------*/
/* VscrnSetPageEnd | Page: Specified*/
/*----------------------------------------------------------+----------------*/
/* You must acquire the Vscrn mutex before calling! */
LONG
VscrnSetPageEnd( BYTE vmode, LONG y, int page )
{
Expand All @@ -3104,22 +3108,10 @@ VscrnSetPageEnd( BYTE vmode, LONG y, int page )
while ( y < 0 )
y += vscrn[vmode].pages[page].linecount ;

RequestVscrnMutex( vmode, SEM_INDEFINITE_WAIT ) ;
vscrn[vmode].pages[page].end = y%vscrn[vmode].pages[page].linecount ;
ReleaseVscrnMutex( vmode );
return vscrn[vmode].pages[page].end ;
}

/*----------------------------------------------------------+----------------*/
/* VscrnSetEnd | Page: Specified*/
/*----------------------------------------------------------+----------------*/
LONG
VscrnSetEnd( BYTE vmode, LONG y, BOOL view )
{
return VscrnSetPageEnd(
vmode, y, vscrn_current_page_number(vmode, view));
}

/*----------------------------------------------------------+----------------*/
/* VscrnGetPageBufferSize | Page: Specified*/
/*----------------------------------------------------------+----------------*/
Expand Down Expand Up @@ -3808,7 +3800,7 @@ VscrnScrollPage(BYTE vmode, int updown, int topmargin, int bottommargin,
#endif /* KUI */
}

VscrnSetPageTop( vmode,ntop, TRUE, page ) ;
VscrnSetPageTop( vmode,ntop, TRUE, page, TRUE ) ;
if ( bottommargin != VscrnGetHeight(vmode)
-(tt_status[vmode]?2:1) )
VscrnScrollPage(vmode,DOWNWARD, bottommargin, VscrnGetHeight(vmode)
Expand Down
8 changes: 5 additions & 3 deletions kermit/k95/ckoco3.c
Original file line number Diff line number Diff line change
Expand Up @@ -17982,10 +17982,12 @@ cwrite(unsigned short ch) { /* Used by ckcnet.c for */
New code supporting auto-download for Zmodem and Kermit protocols.
*/

debugses( ch ) ; /* Session debugging */
if (debses)
debugses( ch ) ; /* Session debugging */

#ifdef CKLEARN
learnnet(ch);
if (learning)
learnnet(ch);
#endif /* CKLEARN */

#ifndef NOXFER
Expand Down Expand Up @@ -19262,7 +19264,7 @@ lgotoxy(BYTE vmode, int x, int y) {
wrapit = FALSE;

if ( markmodeflag[vmode] == notmarking )
VscrnSetCurPos( vmode, x - 1, y - 1 ) ;
VscrnSetCurPosEx( vmode, x - 1, y - 1, TRUE ) ;
#ifdef COMMENT
debug(F111,"lgotoxy","vmode",vmode);
debug(F111,"lgotoxy","x",x);
Expand Down
7 changes: 4 additions & 3 deletions kermit/k95/ckocon.h
Original file line number Diff line number Diff line change
Expand Up @@ -1371,6 +1371,9 @@ typedef struct vscrn_struct {
int display_height;
BOOL page_cursor_coupling;
BOOL allow_alt_buf; /* Allow switching to alternate buffer? */
#ifdef KUIDIRTY
int dirty;
#endif /* KUI */
} vscrn_t;


Expand Down Expand Up @@ -1657,14 +1660,12 @@ _PROTOTYP( ULONG VscrnGetPageBegin, ( BYTE, BOOL, int ) ) ;
_PROTOTYP( ULONG VscrnGetBegin, ( BYTE, BOOL, BOOL ) ) ;
_PROTOTYP( ULONG VscrnGetPageEnd, ( BYTE, BOOL, int ) ) ;
_PROTOTYP( ULONG VscrnGetEnd, ( BYTE, BOOL, BOOL ) ) ;
_PROTOTYP( LONG VscrnSetPageTop, ( BYTE, LONG, BOOL, int ) ) ;
_PROTOTYP( LONG VscrnSetPageTop, ( BYTE, LONG, BOOL, int, BOOL ) ) ;
_PROTOTYP( LONG VscrnSetTop, ( BYTE, LONG, BOOL, BOOL ) ) ;
_PROTOTYP( LONG VscrnSetScrollTop, ( BYTE, LONG ) ) ;
/*_PROTOTYP( LONG VscrnSetScrollHorz, ( BYTE, LONG ) ) ;*/
_PROTOTYP( LONG VscrnSetPageBegin, ( BYTE, LONG, int ) ) ;
_PROTOTYP( LONG VscrnSetBegin, ( BYTE, LONG, BOOL ) ) ;
_PROTOTYP( LONG VscrnSetPageEnd, ( BYTE, LONG, int ) ) ;
_PROTOTYP( LONG VscrnSetEnd, ( BYTE, LONG, BOOL ) ) ;
_PROTOTYP( ULONG VscrnGetPageBufferSize, ( BYTE, BOOL, int ) ) ;
_PROTOTYP( ULONG VscrnGetBufferSize, ( BYTE, BOOL, BOOL ) ) ;
_PROTOTYP( VOID VscrnSetWidth, ( BYTE, int ) ) ;
Expand Down
25 changes: 15 additions & 10 deletions kermit/k95/ckoker.mak
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,7 @@ COMMON_CFLAGS = /MD
# Visual C++ 2002 and newer
COMMON_CFLAGS = $(COMMON_CFLAGS) /RTCsu
!else
# Enable most speed optimizations
COMMON_OPTS = /Ox
COMMON_OPTS = /O2
!endif

# These are:
Expand Down Expand Up @@ -494,7 +493,7 @@ msvc-sshdll:
OPT="$(COMMON_OPTS)" \
DEBUG="-DNDEBUG" \
DLL="" \
CFLAGS=" $(COMMON_CFLAGS) $(CFLAG_GF) /J /DWIN32=1 /D_WIN32 /D_WIN32_WINNT=$(WIN32_VERSION) /D_CONSOLE /D__32BIT__ /W2 /Fm /F65536" \
CFLAGS=" $(COMMON_CFLAGS) $(CFLAG_GF) /J /DWIN32=1 /D_WIN32 /D_WIN32_WINNT=$(WIN32_VERSION) /D_CONSOLE /D__32BIT__ /W2 /Fm /F65536 /DCK_SSH_DLL" \
LDFLAGS="" \
PLATFORM="NT" \
NOLINK="/c" \
Expand All @@ -507,7 +506,7 @@ msvc-sshdlld:
OPT="$(COMMON_OPTS)" \
DEBUG="$(DEBUG_COPT)" \
DLL="" \
CFLAGS=" $(COMMON_CFLAGS) $(CFLAG_GF) /J /DWIN32=1 /D_WIN32 /D_WIN32_WINNT=$(WIN32_VERSION) /D_CONSOLE /D__32BIT__ /W2 /Fm /F65536" \
CFLAGS=" $(COMMON_CFLAGS) $(CFLAG_GF) /J /DWIN32=1 /D_WIN32 /D_WIN32_WINNT=$(WIN32_VERSION) /D_CONSOLE /D__32BIT__ /W2 /Fm /F65536 /DCK_SSH_DLL" \
LDFLAGS="" \
PLATFORM="NT" \
NOLINK="/c" \
Expand Down Expand Up @@ -633,7 +632,7 @@ k95gd:
OPT="" \
DEBUG="$(DEBUG_COPT) /Odi" \
DLL="" \
CFLAGS=" $(COMMON_CFLAGS) /J /DKUI /DK95G /DCK_WIN /DWIN32 /D_WIN32_WINNT=$(WIN32_VERSION) /D_CONSOLE /D__32BIT__ /W2 -I." \
CFLAGS=" $(COMMON_CFLAGS) /J /DKUI /DKUIDIRTY /DK95G /DCK_WIN /DWIN32 /D_WIN32_WINNT=$(WIN32_VERSION) /D_CONSOLE /D__32BIT__ /W2 -I." \
LDFLAGS="" \
PLATFORM="NT" \
NOLINK="-c" \
Expand All @@ -648,7 +647,7 @@ k95g:
OPT="$(COMMON_OPTS)" \
DEBUG="-DNDEBUG" \
DLL="" \
CFLAGS=" $(COMMON_CFLAGS) /J /DKUI /DK95G /DCK_WIN /DWIN32 /D_WIN32_WINNT=$(WIN32_VERSION) /D_CONSOLE /D__32BIT__ /W2 /I." \
CFLAGS=" $(COMMON_CFLAGS) /J /DKUI /DKUIDIRTY /DK95G /DCK_WIN /DWIN32 /D_WIN32_WINNT=$(WIN32_VERSION) /D_CONSOLE /D__32BIT__ /W2 /I." \
LDFLAGS="" \
PLATFORM="NT" \
NOLINK="-c" \
Expand Down Expand Up @@ -1053,6 +1052,7 @@ OBJS = ckcmai$(O) ckcfns$(O) ckcfn2$(O) ckcfn3$(O) ckcnet$(O) ckcpro$(O) \
ckuusy$(O) ckuxla$(O) ckclib$(O) ckctel$(O) ckcuni$(O) ckcftp$(O) \
!if "$(PLATFORM)" == "NT"
cknsig$(O) cknalm$(O) ckntap$(O) cknwin$(O) cknprt$(O) cknpty$(O) \
ckorbf$(O) \
!else
ckusig$(O) \
!endif
Expand All @@ -1064,7 +1064,7 @@ OBJS = ckcmai$(O) ckcfns$(O) ckcfn2$(O) ckcfn3$(O) ckcnet$(O) ckcpro$(O) \
!if ("$(CKF_SSH)" == "yes")
ckossh$(O) \
!if ("$(CKF_DYNAMIC_SSH)" != "yes")
ckolssh$(O) ckorbf$(O) ckolsshs$(O) \
ckolssh$(O) ckolsshs$(O) \
!endif
!endif
ckocon$(O) ckoco2$(O) ckoco3$(O) ckoco4$(O) ckoco5$(O) \
Expand Down Expand Up @@ -1427,9 +1427,9 @@ nullssh.dll: ckonssh.obj ckoker.mak
!endif
!endif

k95ssh.dll: ckolssh.obj ckolsshs.obj ckorbf.obj k95ssh.res ckoker.mak
k95ssh.dll: ckolssh.obj ckolsshs.obj ckorbfd.obj k95ssh.res ckoker.mak
link /dll /debug /def:k95ssh.def /out:$@ ckolssh.obj ckolsshs.obj \
ckorbf.obj k95ssh.res $(SSH_LIB) ws2_32.lib
ckorbfd.obj k95ssh.res $(SSH_LIB) ws2_32.lib

k2crypt.dll: ck_crp.obj ck_des.obj ckclib.obj k2crypt.def ckoker.mak
ilink /nologo /noi /exepack:1 /align:16 /base:0x10000 k2crypt.def \
Expand Down Expand Up @@ -1627,7 +1627,7 @@ ckctel$(O): ckctel.c ckcker.h ckcdeb.h ckoker.h ckclib.h ckctel.h ckcnet.h ckoco
ckossl.h ckosslc.h
ckonet$(O): ckonet.c ckcker.h ckcdeb.h ckoker.h ckclib.h ckoker.h ckcnet.h ckctel.h ckonet.h \
ckotcp.h ckonbi.h ckuusr.h ckcsig.h cknwin.h ckowin.h ckuath.h ckossh.h \
ck_ssl.h ckossl.h ckosslc.h
ck_ssl.h ckossl.h ckosslc.h ckorbf.h
!if "$(PLATFORM)" == "NT"
cknnbi$(O): cknnbi.c ckonbi.h ckcdeb.h ckoker.h ckclib.h
!else
Expand Down Expand Up @@ -1673,6 +1673,11 @@ ckolssh$(O): ckolsshs.h ckolsshs.h ckorbf.h ckcdeb.h ckoker.h ckclib.h ckossl
ckolsshs$(O): ckolsshs.c ckolsshs.h ckorbf.h ckcdeb.h ckcker.h ckocon.h
ckorbf$(O): ckorbf.c ckorbf.h ckcdeb.h

# A variant of the ring buffer for use in DLLs. This comes with its own msleep
# implementatino and a few other things.
ckorbfd$(O): ckorbf.c ckorbf.h ckcdeb.h
$(CC) $(CC2) $(CFLAGS) /DCK_SSH_DLL $(DEBUG) $(OPT) $(DEFINES) $(NOLINK) /Fockorbfd$(O) -c ckorbf.c

ckossh$(O): ckossh.c ckossh.h ckcdeb.h ckuusr.h ckcker.h ckocon.h ckoreg.h

ckonssh$(O): ckonssh.c ckossh.h ckcdeb.h
Expand Down
Loading
Loading