This commit is contained in:
chombier 2001-05-17 10:17:21 +00:00
parent 362ca11c13
commit 031544d54e
16 changed files with 999 additions and 1247 deletions

View File

@ -100,12 +100,14 @@ typedef struct {
realbold,
oldScrollback,
jumpScroll,
realBlink;
realBlink,
vt7bits;
short
padding[100]; // So I'm generous....
padding[99]; // So I'm generous....
} TerminalPrefs;
#define TERMINALPREFS_RESTYPE 'TeR2'
#define TERMINALPREFS_APPID 1991 // The "<Default>" terminal seed copy
#define JPTERMINALPREFS_APPID 1992 // The "<Default>" terminal seed for japan
// Name of each instance is the resource name. Resource type SeSn
typedef struct {
@ -212,6 +214,7 @@ typedef struct {
} SessionPrefs;
#define SESSIONPREFS_RESTYPE 'SeSn'
#define SESSIONPREFS_APPID 1991 // The "<Default>" session seed copy
#define JPSESSIONPREFS_APPID 1992 // The "<Default>" session seed for japan
// Only one instance of this resource type. Resource type PrEf

View File

@ -76,12 +76,15 @@ unsigned short VSIkpnums[] = // RAB BetterTelnet 2.0b5 - macro numbers
0, 80, 81, 83, 82, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71,
70, 72, 73, 50, 51, 52, 53 };
*/
unsigned short VSIkpnums[] = // RAB BetterTelnet 2.0b5 - macro numbers
{ 24, 25, 26, 22, 27, 28, 0, 40, 0, 42, 0,
43, 0, 29, 0, 41, 0, 44, 58, 56, 54, 59,
23, 57, 21, 55, 20, 27, 0, 0, 0, 0, 0,
90, 91, 93, 92, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 81, 80, 82, 83, 50, 51, 52, 53 };
// macro numbers
unsigned short VSIkpnums[] = {
24, 25, 26, 22, 27, 28, 0, 40, 0, 42, 0,
43, 0, 29, 0, 41, 0, 44, 58, 56, 54, 59,
23, 57, 21, 55, 20, 27, 0, 0, 0, 0, 0,
90, 91, 93, 92, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 81, 80, 82, 83, 50, 51, 52, 53
};
extern TelInfoRec *TelInfo;
extern WindRec *screens;
@ -89,32 +92,32 @@ extern long TempItemsDirID;
extern short TempItemsVRefNum;
extern short RSa;
short
/* Internal variables for use in managing windows */
VSmax = 0, /* max nr screens allowed */
VSinuse = 0; /* nr screens actually in existence */
VSscrndata *VSscreens;
extern void syslog( int priority, const char *format, ...);
/* Internal variables for use in managing windows */
short VSmax = 0; /* max nr screens allowed */
short VSinuse = 0; /* nr screens actually in existence */
VSscrndata *VSscreens;
short VSinit
(
short max /* max nr screens to allow */
)
/* initializes virtual screen and window handling. */
{
{
short i;
RSinitall(max);
VSmax = max;
VSIwn = 0;
if ((VSscreens = (VSscrndata *) myNewPtr(max * sizeof(VSscrndata))) == 0L)
return(-2);
for (i = 0; i < max; i++)
{
return -2;
for (i = 0; i < max; i++) {
VSscreens[i].loc = 0L;
VSscreens[i].stat = 0;
} /* for */
} /* for */
return(0);
} /* VSinit */
} /* VSinit */
short VSiscapturing(short w) { /* BYU 2.4.18 */
@ -215,6 +218,11 @@ short VSisprinting(short w)
return ((VSscreens[w].loc)->prredirect);
}
Boolean VSisvt7bit(short w)
{
return !(VSscreens[w].loc)->vteightbits;
}
void ClosePrintingFile(short w)
{
OSErr sts;
@ -297,26 +305,24 @@ short VSnewscreen
short screensave, /* whether to have a scrollback buffer */
short numLines, //numLines initially on screen (CCP 2.7)
short maxwid, /* number of columns on screen */
short forcesave, /* NCSA 2.5: force lines to be saved */
short ignoreBeeps,
short oldScrollback,
short jump,
short realBlink
unsigned long flags
)
/* creates a new virtual screen, and returns its number. */
{
if (maxlines < VSDEFLINES)
maxlines = VSDEFLINES;
if (VSinuse >= VSmax)
/* too many screens in existence */
return(-1);
if ( VSinuse >= VSmax ) {
// too many screens in existence
return -1;
}
VSIwn = 0;
while ((VSIwn < VSmax) && (VSscreens[VSIwn].stat == 1))
while ( VSIwn < VSmax && VSscreens[VSIwn].stat == 1 )
VSIwn++;
if (VSIwn >= VSmax)
/* shouldn't occur? */
return(-1);
if ( VSIwn >= VSmax ) {
// shouldn't occur?
return -1;
}
numLines -= 1; //correct for internal use
/*
@ -344,12 +350,14 @@ short VSnewscreen
/* All memory allocation for this function is done at once, to help damage control in
low memory situations */
if ((VSscreens[VSIwn].loc = VSIw = (VSscrn *) myNewPtr(sizeof(VSscrn))) == 0L)
if ((VSscreens[VSIwn].loc = VSIw = (VSscrn *) myNewPtr(sizeof(VSscrn))) == 0L) {
return(-2);
}
VSIw->vtemulation = vtemulation;
VSIw->vteightbits = !(flags & RSWvt7bit);
VSIw->oldScrollback = oldScrollback;
VSIw->oldScrollback = flags & RSWoldscrollback;
VSIw->lines = numLines;
//VSIw->lines = 23; CCP 2.7 set this from the start
@ -447,14 +455,14 @@ short VSnewscreen
VSIw->disableCursor = 0; // cursor may be visible (RAB BetterTelnet 2.0b4)
VSIw->linesjumped = 0; // reset the jump scrolling (RAB BetterTelnet 2.0b3)
VSIw->jumpScroll = jump;
VSIw->jumpScroll = flags & RSWjumpscroll;
VSIw->maxlines = maxlines;
VSIw->numlines = 0;
VSscreens[VSIwn].captureRN = 0; /* BYU 2.4.18 - capture file's RefNum */
VSIw->id = 'VSCR';
VSIw->maxwidth = maxwid - 1;
VSIw->savelines = screensave;
VSIw->forcesave = forcesave; /* NCSA 2.5 */
VSIw->forcesave = flags & RSWforcesave; /* NCSA 2.5 */
VSIw->attrib = 0;
VSIw->Pattrib = 0xffffffff; /* initially no saved attribute */
VSIw->x = 0;
@ -482,11 +490,11 @@ short VSnewscreen
VSIw->ESscroll = 1;
VSIw->prredirect = 0; /* LU */
VSIw->qprint = 0;
VSIw->ignoreBeeps = ignoreBeeps;
VSIw->ignoreBeeps = flags & RSWignoreBeeps;
VSIw->prbuf = 0; /* LU */
VSIw->refNum = -1; /* LU */
VSIw->possibleForce = 0;
VSIw->realBlink = realBlink;
VSIw->realBlink = flags & RSWrealBlink;
VSIclrbuf();
VSItabinit();
VSscreens[VSIwn].stat = 1;
@ -612,7 +620,6 @@ short VSredraw
short sx2;
Boolean cursOff;
if (VSvalids(w) != 0)
return(-3);
@ -638,139 +645,75 @@ short VSredraw
ty1 = y1;
ty2 = y2;
tn = -1; // so we include more than 1 line
// if (VSIclip(&tx1, &ty1, &tx2, &ty2, &tn, &offset)!=0) return 0; // test clip region
cursOff = 0;
if ( VSIcursorenabled() && RScursison(w) ) {
cursOff = 1;
VSIcuroff(w); // temporarily hide cursor
}
if (!VSIclip(&tx1, &ty1, &tx2, &ty2, &tn, &offset)) {
// draw visible part of scrollback buffer
if (y1 < 0) {
tx1 = x1; // Set up to clip redraw area to visible area of scrollback buffer
tx2 = x2;
ty1 = y1;
ty2 = (y2>=0) ? -1 : y2;
tn = -1;
if (!VSIclip(&tx1, &ty1, &tx2, &ty2, &tn, &offset)) {
sx1 = tx1;
sx2 = tx2;
ypt = VSIw->vistop;
for(y=VSIw->Rtop; y<y1; y++)
ypt = ypt->next; // Get pointer to top line we need
for (y=ty1; y<=ty2; y++) {
char *pt;
VSAttrib *pa;
VSAttrib lasta;
short x, lastx;
short chw;
pt = ypt->text + VSIw->Rleft;
pa = ypt->attr + VSIw->Rleft;
// if double size, we must shift width
if (VSisdecdwh(ypt->lattr)) {
tx1 >>= 1;
tx2 >>= 1;
chw = 2;
} else
chw = 1;
// multi-byte
if ( tx1 > 0 && (pa[tx1-1] & kVSansi2b) )
--tx1;
if ( tx2 < VSIw->maxwidth && (pa[tx2] & kVSansi2b) )
++tx2;
lastx = tx1;
lasta = pa[tx1] & ~kVSansi2b;
for(x = tx1+1; x <= tx2; x++) {
if ( (pa[x] & ~kVSansi2b) != lasta ) {
RSdraw(w, lastx, y, ypt->lattr, lasta, x-lastx, pt + lastx);
lastx = x;
lasta = pa[x] & ~kVSansi2b;
}
}
if (lastx<=tx2)
RSdraw(w, lastx, y, ypt->lattr, lasta, tx2-lastx+1, pt + lastx);
tx1 = sx1;
tx2 = sx2;
ypt = ypt->next;
}
cursOff = 0;
if ( VSIcursorenabled() && RScursison(w) ) {
cursOff = 1;
VSIcuroff(w); // temporarily hide cursor
}
y1 = 0; // continue with on-screen buffer, if any
}
// draw visible part of on-screen buffer, taking account of attributes
if (y2 >= 0) {
tx1 = x1; // Set up to clip redraw area to visible area of on-screen buffer
tx2 = x2;
ty1 = y1;
ty2 = y2;
tn = -1;
sx1 = tx1;
sx2 = tx2;
if (!VSIclip(&tx1, &ty1, &tx2, &ty2, &tn, &offset)) {
ypt = VSIGetLineStart(w, y1);
sx1 = tx1;
sx2 = tx2;
for ( y = ty1; y <= ty2; y++ ) {
char *pt;
VSAttrib *pa;
VSAttrib lasta;
short x, lastx;
short chw;
ypt = VSIw->linest[VSIw->Rtop+ty1];
for (y=ty1; y<=ty2; y++) {
char *pt;
VSAttrib *pa;
VSAttrib lasta;
short x, lastx;
short chw;
pt = ypt->text + VSIw->Rleft;
pa = ypt->attr + VSIw->Rleft;
// if double size, we must shift width
if (VSisdecdwh(ypt->lattr)) {
tx1 >>= 1;
tx2 >>= 1;
chw = 2;
} else
chw = 1;
// multi-byte
if ( tx1 > 0 && (pa[tx1-1] & kVSansi2b) )
--tx1;
if ( tx2 < VSIw->maxwidth && (pa[tx2] & kVSansi2b) )
++tx2;
lastx = tx1;
lasta = pa[tx1] & ~kVSansi2b;
for(x = tx1+1; x <= tx2; x++) {
if ( (pa[x] & ~kVSansi2b) != lasta ) {
RSdraw(w, lastx, y, ypt->lattr, lasta, x-lastx, pt + lastx);
lastx = x;
lasta = pa[x] & ~kVSansi2b;
}
}
if (lastx<=tx2)
RSdraw(w, lastx, y, ypt->lattr, lasta, tx2-lastx+1, pt + lastx);
tx1 = sx1;
tx2 = sx2;
ypt = ypt->next;
if ( VSIw->Rtop + y == 0 ) {
// on-screen buffer
ypt = *VSIw->linest;
}
}
}
if (VSIcursorenabled() && cursOff)
VSIcurson(w, VSIw->x, VSIw->y, 0); /* restore cursor at original position */
return(0);
pt = ypt->text + VSIw->Rleft;
pa = ypt->attr + VSIw->Rleft;
// if double size, we must shift width
if (VSisdecdwh(ypt->lattr)) {
tx1 >>= 1;
tx2 >>= 1;
chw = 2;
} else
chw = 1;
// multi-byte
if ( tx1 > 0 && (pa[tx1-1] & kVSansi2b) )
--tx1;
if ( tx2 < VSIw->maxwidth && (pa[tx2] & kVSansi2b) )
++tx2;
lastx = tx1;
lasta = pa[tx1] & ~kVSansi2b;
for (x = tx1+1; x <= tx2; x++) {
if ( (pa[x] & ~kVSansi2b) != lasta ) {
RSdraw(w, lastx, y, ypt->lattr, lasta, x-lastx, pt + lastx);
lastx = x;
lasta = pa[x] & ~kVSansi2b;
}
}
if (lastx <= tx2)
RSdraw(w, lastx, y, ypt->lattr, lasta, tx2-lastx+1, pt + lastx);
tx1 = sx1;
tx2 = sx2;
ypt = ypt->next;
}
if ( cursOff ) {
VSIcurson(w, VSIw->x, VSIw->y, 0); /* restore cursor at original position */
} else {
// just calcutate the new coordinates
VScursset(w, VSIw->x, VSIw->y);
}
}
return 0;
} /* VSredraw */
@ -816,8 +759,6 @@ short VSOredraw
ty1 = y1;
ty2 = y2;
tn = -1; // so we include more than 1 line
// if (VSIclip(&tx1, &ty1, &tx2, &ty2, &tn, &offset)!=0) return 0; // test clip region
cursOff = 0;
if ( VSIcursorenabled() && RScursison(w) ) {
@ -825,8 +766,6 @@ short VSOredraw
VSIcuroff(w); // temporarily hide cursor
}
// RSerase(w, tx1, ty1, tx2, ty2); // Erase the offending area
// draw visible part of scrollback buffer
if (y1 < 0) {
@ -930,9 +869,12 @@ short VSOredraw
}
}
if (VSIcursorenabled() && cursOff)
if ( cursOff ) {
VSIcurson(w, VSIw->x, VSIw->y, 0); /* restore cursor at original position */
} else {
// just calcutate the new coordinates
VScursset(w, VSIw->x, VSIw->y);
}
return(0);
} /* VSOredraw */
@ -953,7 +895,7 @@ short VSwrite
if (VSvalids(w) != 0)
return(-3);
cursOff = 0;
if ( VSIcursorenabled() ) {
if ( VSIcursorenabled() && RScursison(w) ) {
cursOff = 1;
VSIcuroff(w); // hide cursor momentarily
}
@ -961,8 +903,12 @@ short VSwrite
VSem((unsigned char *) ptr, len); /* BYU LSC - interpret the character stream */
VSIflush(); // RAB BetterTelnet 2.0b3
VSIcursenable();
if ( VSIcursorenabled() && cursOff )
if ( cursOff ) {
VSIcurson(w, VSIw->x, VSIw->y, 1); /* restore cursor, force it to be visible. */
} else {
// just calcutate the new coordinates
VScursset(w, VSIw->x, VSIw->y);
}
// _profile = 0;
return(0);
} /* VSwrite */
@ -1693,14 +1639,13 @@ char *VSIstrcopy(char *src, short len, char *dest, short table, short noClip)
trailing blanks. If table is nonzero, then this number (or more) of
consecutive embedded blanks will be replaced with a tab. Returns a pointer
to the position one past the last character copied to the *dest buffer. */
{
{
char *p, *tempp;
short tblck;
p = src + len - 1;
/* skip trailing blanks, but only if !noClip */
if (!noClip && (table || gApplicationPrefs->clipTrailingSpaces))
// RAB BetterTelnet 1.0fc7, 1.1
/* skip trailing blanks, but only if !noClip */
if (!noClip)
while ((*p == ' ') && (p >= src))
p--;
if (p < src)
@ -1732,7 +1677,7 @@ char *VSIstrcopy(char *src, short len, char *dest, short table, short noClip)
} /* if */
} /* while */
return(dest);
} /* VSIstrcopy */
} /* VSIstrcopy */
long VSOgettext(short w, short x1, short y1, short x2, short y2, char *charp, long max, char *EOLS, short table)
@ -1851,9 +1796,9 @@ long VSgettext(short w, short x1, short y1, short x2, short y2,
short outlen;
short i;
VSlinePtr ypt;
VSattrlinePtr ypa;
char *pt;
VSAttrib *pa;
char *tp;
// VSAttrib *pa;
if (VSvalids(w) != 0)
return(-3);
@ -1890,7 +1835,7 @@ long VSgettext(short w, short x1, short y1, short x2, short y2,
origcp = charp;
elen = strlen(EOLS);
/* Order the lower and upper bounds */
// Order the lower and upper bounds
ux = x1;
lx = x2;
uy = y1;
@ -1900,6 +1845,8 @@ long VSgettext(short w, short x1, short y1, short x2, short y2,
ux = x2;
lx = x1;
}
// single line
clipspaces = clipspaces && gApplicationPrefs->clipTrailingSpaces;
} else if (y1 > y2) {
uy = y2;
ly = y1;
@ -1908,55 +1855,29 @@ long VSgettext(short w, short x1, short y1, short x2, short y2,
}
x1 = ux + 1;
// get text from scrollback buffer
if (uy < 0) {
x2 = mw;
y2 = (ly >= 0) ? -1 : ly;
ypt = VSIGetLineStart(w, uy);
for ( y1 = uy; y1 <= y2 && max >= elen; y1++, x1 = 0, x2 = mw, ypt = ypt->next ) {
pt = ypt->text;
// pa = ypt->attr;
if (y1 == ly)
x2 = lx; // end last line
outlen = x2 - x1 + 1;
if (outlen > max) {
outlen = max;
}
charp = VSIstrcopy(pt + x1, outlen, pt = charp, table, !clipspaces);
max -= charp - pt;
if (max >= elen && !VSiswrap(ypt->lattr) && y1 != ly) {
strcpy(charp, EOLS);
charp += elen;
max -= elen;
}
x2 = mw;
ypt = VSIGetLineStart(w, uy);
for ( y1 = uy; y1 <= ly && max >= elen; y1++, x1 = 0, x2 = mw, ypt = ypt->next ) {
if ( y1 == 0 ) {
// get text from on-screen buffer
ypt = *VSIw->linest;
}
uy = 0; // continue with on-screen buffer, if any
}
// get text from on-screen buffer
if (ly >= 0) {
x2 = mw;
ypt = VSIw->linest[uy];
for ( y1 = uy; y1 <= ly && max >= elen; y1++, x1 = 0, x2 = mw, ypt = ypt->next ) {
pt = ypt->text;
// pa = ypt->attr;
if (y1 == ly)
x2 = lx;
outlen = x2 - x1 + 1;
if (outlen > max) {
outlen = max;
}
charp = VSIstrcopy(pt + x1, outlen, pt = charp, table, !clipspaces);
max -= charp - pt;
if (max >= elen && !VSiswrap(ypt->lattr) && y1 != ly) {
strcpy(charp, EOLS);
charp += elen;
max -= elen;
}
pt = ypt->text;
// pa = ypt->attr;
if (y1 == ly)
x2 = lx; // end last line
outlen = x2 - x1 + 1;
if (outlen > max) {
outlen = max;
}
charp = VSIstrcopy(pt + x1, outlen, tp = charp, table, !clipspaces);
max -= charp - tp;
if (max >= elen && !VSiswrap(ypt->lattr) && y1 != ly) {
strcpy(charp, EOLS);
charp += elen;
max -= elen;
}
}
return charp - origcp;
}
@ -2025,45 +1946,24 @@ long VSgetattr(short w, short x1, short y1, short x2, short y2,
}
x1 = ux + 1;
// get attributes from scrollback buffer
if (uy < 0) {
x2 = mw;
y2 = (ly >= 0) ? -1 : ly;
ypt = VSIGetLineStart(w, uy);
for ( y1 = uy; y1 <= y2 && max >= sizeof(VSAttrib); y1++, x1 = 0, x2 = mw, ypt = ypt->next ) {
pa = ypt->attr;
if (y1 == ly)
x2 = lx; // end last line
outlen = (x2 - x1 + 1) * sizeof(VSAttrib);
if (outlen > max / sizeof(VSAttrib)) {
outlen = max / sizeof(VSAttrib);
}
memcpy(attrp, pa + x1, outlen * sizeof(VSAttrib));
attrp += outlen;
max -= outlen * sizeof(VSAttrib);
x2 = mw;
ypt = VSIGetLineStart(w, uy);
for ( y1 = uy; y1 <= ly && max >= sizeof(VSAttrib); y1++, x1 = 0, x2 = mw, ypt = ypt->next ) {
if (y1 == 0) {
// get text from on-screen buffer
ypt = *VSIw->linest;
}
uy = 0; // continue with on-screen buffer, if any
}
// get attributes from on-screen buffer
if (ly >= 0) {
x2 = mw;
ypt = VSIw->linest[uy];
for ( y1 = uy; y1 <= ly && max >= sizeof(VSAttrib); y1++, x1 = 0, x2 = mw, ypt = ypt->next ) {
pa = ypt->attr;
if (y1 == ly)
x2 = lx;
outlen = (x2 - x1 + 1) * sizeof(VSAttrib);
if (outlen > max / sizeof(VSAttrib)) {
outlen = max / sizeof(VSAttrib);
}
memcpy(attrp, pa + x1, outlen * sizeof(VSAttrib));
attrp += outlen;
max -= outlen * sizeof(VSAttrib);
pa = ypt->attr;
if (y1 == ly)
x2 = lx; // end last line
outlen = (x2 - x1 + 1) * sizeof(VSAttrib);
if (outlen > max / sizeof(VSAttrib)) {
outlen = max / sizeof(VSAttrib);
}
memcpy(attrp, pa + x1, outlen * sizeof(VSAttrib));
attrp += outlen;
max -= outlen * sizeof(VSAttrib);
}
return attrp - origap;
}

View File

@ -3,6 +3,7 @@
short VSinit(short max);
short VSiscapturing(short w);
short VSisprinting(short w);
Boolean VSisvt7bit(short w);
void ClosePrintingFile(short w);
Boolean VSopencapture(short scrn_num, short w);
void VSclosecapture(short w);
@ -11,7 +12,7 @@ short VSvalids(short w);
VSscrn *VSwhereis(short i);
void VSIclrbuf(void);
short VSnewscreen(short vtemulation, short maxlines, short screensave, short numLines,
short maxwid, short forcesave, short ignoreBeeps, short oldScrollback, short jump, short blink);
short maxwid, unsigned long flags);
short VSdestroy(short w);
short VSredraw(short w, short x1, short y1, short x2, short y2);
short VSOredraw(short, short, short, short, short);

View File

@ -43,7 +43,7 @@
#define ScrollbackQuantum 100
//#define VSIclrattrib 0
#define VSIclrattrib (VSIw->attrib & 0x0003ffff)
//#define VSIclrattrib (VSIw->attrib & 0x0003ffff)
#include "vsintern.proto.h"
@ -151,18 +151,36 @@ short VSIcinslines(short w, short top, short bottom, short n, short scrolled) /*
return 0;
} /* VSIcinslines */
void VSIcurson
(
short w,
short x,
short y,
short ForceMove
)
/* displays the text cursor at the specified position. If
ForceMove is true, I am to do any appropriate scrolling of
the display to ensure the cursor is within the visible region.
Assumes cursor isn't currently being shown. */
{
void VScursset( short w, short x, short y )
{
short x2;
short y2;
short n = 1;
short offset;
short lattr;
if (VSvalids(w) != 0)
return;
lattr = VSIw->linest[y]->lattr;
if (!VSIclip(&x, &y, &x2, &y2, &n, &offset)) {
/* cursor already lies within visible region */
RScursset(w, lattr, x, y);
}
}
/*
* VSIcurson
*
* displays the text cursor at the specified position. If
* ForceMove is true, I am to do any appropriate scrolling of
* the display to ensure the cursor is within the visible region.
* Assumes cursor isn't currently being shown.
*/
void VSIcurson( short w, short x, short y, short ForceMove )
{
short
x2,
y2,
@ -170,6 +188,9 @@ void VSIcurson
offset;
short lattr;
if (VSvalids(w) != 0)
return;
if (!VSIw->DECCM) return; // Bri 970610
if (VSIw->disableCursor) return; // RAB BetterTelnet 2.0b4
@ -200,26 +221,35 @@ void VSIcurson
} /* if */
} /* VSIcurson */
void VSIcuroff
(
short w
)
/* hides the cursor for the specified screen. Assumes it
is currently being shown (or that it's on an invisible
part of the screen). */
{
/*
* VSIcuroff
*
* hides the cursor for the specified screen. Assumes it
* is currently being shown (or that it's on an invisible
* part of the screen).
*/
void VSIcuroff( short w )
{
short
x = VSIw->x,
y = VSIw->y,
x,
y,
x2,
y2,
n = 1,
offset;
if (VSvalids(w) != 0)
return;
x = VSIw->x;
y = VSIw->y;
if (!VSIclip(&x, &y, &x2, &y2, &n, &offset) || !VSIw->DECCM) // Bri 970610
/* cursor is on visible part of screen */
RScursoff(w);
} /* VSIcuroff */
} /* VSIcuroff */
void VSIcursdisable() // RAB BetterTelnet 2.0b4
{
@ -697,6 +727,7 @@ void VSIelo
Doesn't do anything to the display. */
{
char *tt;
VSAttrib attrib;
VSAttrib *ta;
short i;
@ -710,9 +741,16 @@ void VSIelo
ta = &VSIw->linest[s]->attr[0];
}
tt = &VSIw->linest[s]->text[0];
if (VSIw->vtemulation == 3)
attrib = VSIw->attrib;
else
// all off, keep multi-byte / graphic
attrib = VSIw->attrib & (kVSansi2b | kVSgrph);
for (i = 0; i <= VSIw->allwidth; i++)
{
*ta++ = VSIclrattrib;
*ta++ = attrib;
*tt++ = ' ';
} /* for */
} /* VSIelo */
@ -852,6 +890,7 @@ void VSIdellines
{
short i, j;
char *tt;
VSAttrib attrib;
VSAttrib *ta;
VSlinePtr ts, TD, BD, TI, BI, itt;
@ -892,6 +931,12 @@ void VSIdellines
their new position */
VSIlistmove(TD, BD, TI, BI);
if (VSIw->vtemulation == 3)
attrib = VSIw->attrib;
else
// all off, keep multi-byte / graphic
attrib = VSIw->attrib & (kVSansi2b | kVSgrph);
for (i = 0; i < n; i++)
{
itt->lattr = 0;
@ -900,7 +945,7 @@ void VSIdellines
for (j = 0; j <= VSIw->allwidth; j++)
{
*tt++ = ' ';
*ta++ = VSIclrattrib;
*ta++ = attrib;
} /* for */
itt = itt->next;
} /* for */
@ -929,6 +974,7 @@ void VSOdellines
VSAttrib *ta;
VSlinePtr as, ts, TD, BD, TI, BI, itt;
VSattrlinePtr ita;
VSAttrib attrib;
if (s < 0)
s = VSIw->y;
@ -974,6 +1020,12 @@ void VSOdellines
their new position */
VSIlistmove(TD, BD, TI, BI);
if (VSIw->vtemulation == 3)
attrib = VSIw->attrib;
else
// all off, keep multi-byte / graphic
attrib = VSIw->attrib & (kVSansi2b | kVSgrph);
/* blank out the newly-created replacement lines */
ita = (VSattrlinePtr)TD; /* start of attribute lines to be blanked out */
for (i = 0; i < n; i++)
@ -984,7 +1036,7 @@ void VSOdellines
for (j = 0; j <= VSIw->allwidth; j++)
{
*tt++ = ' ';
*ta++ = VSIclrattrib;
*ta++ = attrib;
} /* for */
ita = ita->next;
itt = itt->next;
@ -1014,6 +1066,7 @@ void VSIinslines
char *tt;
VSAttrib *ta;
VSlinePtr ts, TD, BD, TI, BI, itt;
VSAttrib attrib;
VSIflush(); // RAB BetterTelnet 2.0b3
@ -1052,6 +1105,12 @@ void VSIinslines
to its new position */
VSIlistmove(TD, BD, TI, BI);
if (VSIw->vtemulation == 3)
attrib = VSIw->attrib;
else
// all off, keep multi-byte / graphic
attrib = VSIw->attrib & (kVSansi2b | kVSgrph);
/* blank out the newly-inserted lines */
for (i = 0; i < n; i++)
{
@ -1060,7 +1119,7 @@ void VSIinslines
for (j = 0; j <= VSIw->allwidth; j++)
{
*tt++ = ' ';
*ta++ = VSIclrattrib;
*ta++ = attrib;
}
itt = itt->next;
} /* for */
@ -1088,7 +1147,8 @@ void VSOinslines
char *tt;
VSAttrib *ta;
VSlinePtr ts, TD, BD, TI, BI, itt;
VSattrlinePtr as, aTD, aBD, aTI, aBI, ita;
VSattrlinePtr as, aTD, aBD, aTI, aBI, ita;
VSAttrib attrib;
if (s < 0)
s = VSIw->y;
@ -1132,6 +1192,12 @@ void VSOinslines
to its new position */
VSIlistmove((VSlinePtr)aTD, (VSlinePtr)aBD, (VSlinePtr)aTI, (VSlinePtr)aBI);
if (VSIw->vtemulation == 3)
attrib = VSIw->attrib;
else
// all off, keep multi-byte / graphic
attrib = VSIw->attrib & (kVSansi2b | kVSgrph);
/* blank out the newly-inserted lines */
ita = aTD; /* start of attribute lines to be blanked out */
for (i = 0; i < n; i++)
@ -1142,7 +1208,7 @@ void VSOinslines
for (j = 0; j <= VSIw->allwidth; j++)
{
*tt++ = ' ';
*ta++ = VSIclrattrib;
*ta++ = attrib;
}
itt = itt->next;
ita = ita->next;
@ -1202,32 +1268,27 @@ void VSIscroll
tmp->prev = VSIw->linest[VSIw->lines];
VSIw->numlines++; /* use one of the newly-allocated scrollback lines */
RSbufinfo(VSIwn, VSIw->numlines, VSIw->Rtop, VSIw->Rbottom); /* update vertical scroll bar accordingly */
}
else
{
} else {
/* not enough memory to extend scrollback buffer--reuse
oldest line and give up on future extensions */
VSIw->linest[VSIw->lines]->next = VSIw->buftop; /* Make it circular */
VSIw->buftop->prev = VSIw->linest[VSIw->lines];
VSIw->buftop = VSIw->buftop->next; /* step one forward */
} /* if */
}
else
{
/* either there's allocated, but not yet used, space at
} /* if */
} else {
/* either there's allocated, but not yet used, space at
VSIw->linest[VSIw->lines]->next, or the text line list
is circular. Either way, don't do any new scrollback
allocation. */
if (VSIw->linest[VSIw->lines]->next == VSIw->buftop)
/* scrollback buffer is at full size--reuse oldest line */
if (VSIw->linest[VSIw->lines]->next == VSIw->buftop) {
/* scrollback buffer is at full size--reuse oldest line */
VSIw->buftop = VSIw->buftop->next;
else
{
} else {
/* haven't used up all the space I allocated last time */
VSIw->numlines++; /* count another line */
RSbufinfo(VSIwn, VSIw->numlines, VSIw->Rtop, VSIw->Rbottom); /* update vertical scroll bar accordingly */
} /* if */
} /* if */
} /* if */
} /* if */
VSIw->scrntop = VSIw->scrntop->next; /* scroll the screen buffer */
VSIlistndx(VSIw->scrntop); /* update screen arrays */
@ -1259,14 +1320,16 @@ void VSIscroll
}
else
VSIw->vistop = VSIw->vistop->next; /* consistent with changed display */
/* blank out newly-revealed bottom line */
/* clear line attribute */
VSIw->linest[VSIw->lines]->lattr = 0;
/* blank out newly-revealed bottom line */
tempa = VSIw->linest[VSIw->lines]->attr;
temp = VSIw->linest[VSIw->lines]->text;
for (i = 0; i <= VSIw->allwidth; i++)
{
for (i = 0; i <= VSIw->allwidth; i++) {
*temp++ = ' ';
*tempa++ = 0;
} /* for */
} /* for */
// RAB BetterTelnet 1.2.1 - another bug fix for NCSA's insanity!
@ -1515,6 +1578,7 @@ void VSIeeol
offset;
short
i;
VSAttrib attrib;
// RAB BetterTelnet 2.0b1 - Fix for forcesave bug
@ -1560,6 +1624,12 @@ void VSIeeol
DisposePtr((Ptr) savedTextBlock); // VSIfreelinelist adds un-needed overhead here
}
if (VSIw->vtemulation == 3)
attrib = VSIw->attrib;
else
// all off, keep multi-byte / graphic
attrib = VSIw->attrib & (kVSansi2b | kVSgrph);
VSIwrapnow(&x1, &y1);
y2 = y1;
/* clear out screen line */
@ -1572,7 +1642,7 @@ void VSIeeol
tt = &VSIw->linest[y1]->text[x1];
for (i = VSIw->allwidth - x1 + 1; i > 0; i--)
{
*ta++ = VSIclrattrib;
*ta++ = attrib;
*tt++ = ' ';
}
/* update display */
@ -1604,6 +1674,7 @@ void VSIdelchars
*tempa;
short
lattr;
VSAttrib attrib;
VSIwrapnow(&x1, &y1);
y2 = y1;
@ -1617,6 +1688,13 @@ void VSIdelchars
tempa = VSIw->linest[y1]->attr;
}
temp = VSIw->linest[y1]->text;
if (VSIw->vtemulation == 3)
attrib = VSIw->attrib;
else
// all off, keep multi-byte / graphic
attrib = VSIw->attrib & (kVSansi2b | kVSgrph);
for (i = x1; i <= VSIw->maxwidth - x; i++)
{
/* move remainder of line to the left */
@ -1627,7 +1705,7 @@ void VSIdelchars
{
/* insert blank characters after end of line */
temp[i] = ' ';
tempa[i] = VSIclrattrib;
tempa[i] = attrib;
}
/* update display */
if (!VSIclip(&x1, &y1, &x2, &y2, &n, &offset))
@ -1712,6 +1790,7 @@ void VSIebol
offset;
short
i;
VSAttrib attrib;
VSIwrapnow(&x2, &y1);
y2 = y1;
@ -1722,10 +1801,17 @@ void VSIebol
} else {
ta = &VSIw->linest[y1]->attr[0];
}
if (VSIw->vtemulation == 3)
attrib = VSIw->attrib;
else
// all off, keep multi-byte / graphic
attrib = VSIw->attrib & (kVSansi2b | kVSgrph);
tt = &VSIw->linest[y1]->text[0];
for (i = 0; i <= x2; i++)
{
*ta++ = VSIclrattrib;
*ta++ = attrib;
*tt++ = ' ';
}
/* update display */
@ -1743,6 +1829,7 @@ void VSIel
VSAttrib *ta;
short x1 = 0, y1 = s, x2 = VSIw->maxwidth, y2 = s, n = -1, offset;
short i;
VSAttrib attrib;
if (s < 0)
{
@ -1757,10 +1844,17 @@ void VSIel
} else {
ta = &VSIw->linest[s]->attr[0];
}
if (VSIw->vtemulation == 3)
attrib = VSIw->attrib;
else
// all off, keep multi-byte / graphic
attrib = VSIw->attrib & (kVSansi2b | kVSgrph);
tt = &VSIw->linest[s]->text[0];
for(i = 0; i <= VSIw->allwidth; i++)
{
*ta++ = VSIclrattrib;
*ta++ = attrib;
*tt++ = ' ';
}
/* update display */
@ -2109,6 +2203,8 @@ void VSIinschar
short i, j;
char *temp;
VSAttrib *tempa;
VSAttrib attrib;
VSIwrapnow(&i, &j);
if (VSIw->oldScrollback)
@ -2122,10 +2218,17 @@ void VSIinschar
tempa[x + i] = tempa[i];
}
if ( clear ) {
if (VSIw->vtemulation == 3)
attrib = VSIw->attrib & (kVSansi2b | kVSgrph);
else
// all off, keep multi-byte / graphic
attrib = VSIw->attrib;
for (i = VSIw->x; i < VSIw->x + x; i++) {
/* insert appropriate number of blanks */
temp[i] = ' ';
tempa[i] = VSIclrattrib;
tempa[i] = attrib;
}
}
} /* VSIinschar */

View File

@ -5,6 +5,7 @@
short VSIclip(short *x1, short *y1, short *x2, short *y2, short *n, short *offset);
short VSIcdellines(short w, short top, short bottom, short n, short scrolled);
short VSIcinslines(short w, short top, short bottom, short n, short scrolled);
void VScursset( short w, short x, short y );
void VSIcurson(short w, short x, short y, short ForceMove);
void VSIcuroff(short w);
short VSIcursorenabled( void );

File diff suppressed because it is too large Load Diff

View File

@ -29,7 +29,6 @@ extern short scrn;
extern Boolean gPresentOpenConnectionDialog;
extern unsigned long gPresentOpenConnectionTicks;
static void ProcessURLEscapeCodes (char *url, char **end);
void AEunload(void) { }
@ -85,7 +84,7 @@ pascal OSErr MyHandleODoc (AppleEvent *theAppleEvent, AppleEvent* reply, long
AEKeyword keywd;
DescType returnedType;
FInfo fileInfo;
if ((err = AEGetParamDesc (theAppleEvent, keyDirectObject, typeAEList, &docList)) != noErr)
return err;

View File

@ -62,7 +62,7 @@ static Boolean InNumOnly(short item);
static Str255 configPassword;
static Str255 configPassword2;
static ConstStringPtr gDefaultName = "\p<Default>";
ConstStringPtr gDefaultName = "\p<Default>";
static LinkedListNode *currentHead;
static ListHandle currentList;
@ -1045,11 +1045,22 @@ pascal short ColorBoxModalProc( DialogPtr dptr, EventRecord *evt, short *item)
return CallStdFilterProc(dptr, evt, item);
}
popup TPopup[] = {{TermFontPopup, (MenuHandle) 0, 1},
{41, (MenuHandle) 0, 1},
{0, (MenuHandle) 0, 0}};
SIMPLE_UPP(TerminalModalProc, ModalFilter);
pascal short TerminalModalProc( DialogPtr dptr, EventRecord *evt, short *item)
{
if (evt->what == mouseDown) return(PopupMousedown(dptr, evt, item));
if ( evt->what == mouseDown ) {
short oldChoice = TPopup[0].choice;
short result = PopupMousedown(dptr, evt, item);
if ( result && *item == TPopup[0].item ) {
TPopup[1].choice = TPopup[0].choice;
DrawPopUp(dptr, TPopup[1].item);
}
return result;
}
return(ColorBoxModalProc(dptr, evt, item));
}
@ -1201,10 +1212,12 @@ void ShowTermPanel(DialogPtr dptr, short panel)
ShowDialogItemRange(dptr, 22, 23);
ShowDialogItemRange(dptr, 25, 26);
ShowDialogItemRange(dptr, 29, 30);
//ShowDialogItemRange(dptr, 32, 33);
ShowDialogItem(dptr, 32);
ShowDialogItemRange(dptr, 45, 46);
// ShowDialogItem(dptr, TermANSIE);
if ( GetCntlVal(dptr, TermType) != 1 ) {
ShowDialogItem(dptr, 48);
}
//ShowDialogItem(dptr, 48);
break;
case 2:
@ -1237,10 +1250,9 @@ void HideTermPanel(DialogPtr dptr, short panel)
HideDialogItemRange(dptr, 22, 23);
HideDialogItemRange(dptr, 25, 26);
HideDialogItemRange(dptr, 29, 30);
//HideDialogItemRange(dptr, 32, 33);
HideDialogItem(dptr, 32);
HideDialogItemRange(dptr, 45, 46);
// HideDialogItem(dptr, TermANSIE);
HideDialogItem(dptr, 48);
break;
case 2:
@ -1278,9 +1290,7 @@ Boolean EditTerminal(StringPtr PrefRecordNamePtr)
RGBColor scratchRGBcolor;
Point ColorBoxPoint;
MenuHandle WeNeedAFontMenuHandle, WeNeedAnotherFontMenuHandle;
popup TPopup[] = {{TermFontPopup, (MenuHandle) 0, 1},
{41, (MenuHandle) 0, 1},
{0, (MenuHandle) 0, 0}};
short editField;
SetUpMovableModalMenus();
dptr = GetNewMySmallStrangeDialog(TermDLOG, NULL, kInFront, (void *)ThirdCenterDialog);
@ -1330,8 +1340,6 @@ Boolean EditTerminal(StringPtr PrefRecordNamePtr)
HideTermPanel(dptr, 3);
HideTermPanel(dptr, 4);
ShowTermPanel(dptr, currentPanel);
if (PrefRecordNamePtr[0] != 0) {
IsNewPrefRecord = FALSE;
UseResFile(TelInfo->SettingsFile);
@ -1371,6 +1379,7 @@ Boolean EditTerminal(StringPtr PrefRecordNamePtr)
SetCntrl(dptr, TermRemapKeypad, TermPrefsPtr->remapKeypad);
SetCntrl(dptr, 47, TermPrefsPtr->realBlink);
SetCntrl(dptr, 48, TermPrefsPtr->vt7bits);
scratchlong = (long)(TermPrefsPtr->vtwidth);
NumToString(scratchlong, scratchPstring);
SetTEText(dptr, TermWidth, scratchPstring);
@ -1389,13 +1398,13 @@ Boolean EditTerminal(StringPtr PrefRecordNamePtr)
GetMenuItemText(TPopup[0].h, scratchshort, scratchPstring);
if (EqualString(scratchPstring, (TermPrefsPtr->DisplayFont), TRUE, FALSE))
TPopup[0].choice = scratchshort;
}
}
for(scratchshort = CountMItems(TPopup[1].h); scratchshort; scratchshort--) {
GetMenuItemText(TPopup[1].h, scratchshort, scratchPstring);
if (EqualString(scratchPstring, (TermPrefsPtr->BoldFont), TRUE, FALSE))
TPopup[1].choice = scratchshort;
}
}
ZeroNumOnly();
NumOnly[0] = TermSafeItem;
@ -1422,7 +1431,12 @@ Boolean EditTerminal(StringPtr PrefRecordNamePtr)
ColorBoxPoint.h = 0; // Have the color picker center the box on the main
ColorBoxPoint.v = 0; // screen
SelectDialogItemText(dptr, TermName, 0, 32767);
ShowTermPanel(dptr, currentPanel);
if ( ((DialogPeek)dptr)->editField >= 0 ) {
SelectDialogItemText(dptr, ((DialogPeek)dptr)->editField + 1, 0, 255);
}
ShowWindow(dptr);
wasInAliasText = FALSE;
while (ditem > 2)
@ -1480,6 +1494,7 @@ Boolean EditTerminal(StringPtr PrefRecordNamePtr)
case 45:
case 46:
case 47:
case 48:
case Termvtwrap:
case Termarrow:
case TermMAT:
@ -1493,21 +1508,25 @@ Boolean EditTerminal(StringPtr PrefRecordNamePtr)
switch (GetCntlVal(dptr, ditem)) {
case 1:
SetTEText(dptr, TermAnswerback, "\pvt100");
HideDialogItem(dptr, 48);
//HideDialogItem(dptr,TermRemapKeypad);
//HideDialogItem(dptr,TermMAT);
break;
case 2:
SetTEText(dptr, TermAnswerback, "\pvt220");
ShowDialogItem(dptr, 48);
//ShowDialogItem(dptr,TermRemapKeypad);
//ShowDialogItem(dptr,TermMAT);
break;
case 3:
SetTEText(dptr, TermAnswerback, "\pansi");
ShowDialogItem(dptr, 48);
//ShowDialogItem(dptr,TermRemapKeypad);
//ShowDialogItem(dptr,TermMAT);
break;
case 4:
SetTEText(dptr, TermAnswerback, "\plinux");
ShowDialogItem(dptr, 48);
//ShowDialogItem(dptr,TermRemapKeypad);
//ShowDialogItem(dptr,TermMAT);
break;
@ -1543,13 +1562,17 @@ Boolean EditTerminal(StringPtr PrefRecordNamePtr)
}
break;
case 43: // switch tabs
newPanel = GetCntlVal(dptr, ditem);
if (newPanel == currentPanel) break;
if (newPanel == currentPanel)
break;
editField = ((DialogPeek)dptr)->editField + 1;
HideTermPanel(dptr, currentPanel);
ShowTermPanel(dptr, newPanel);
currentPanel = newPanel;
if (editField != ((DialogPeek)dptr)->editField + 1
&& ((DialogPeek)dptr)->editField >= 0) {
SelectDialogItemText(dptr, ((DialogPeek)dptr)->editField + 1, 0, 255);
}
break;
case TermName:
@ -1599,6 +1622,7 @@ Boolean EditTerminal(StringPtr PrefRecordNamePtr)
TermPrefsPtr->jumpScroll = GetCntlVal(dptr, 46);
TermPrefsPtr->boldFontStyle = GetCntlVal(dptr, 42);
TermPrefsPtr->realBlink = GetCntlVal(dptr, 47);
TermPrefsPtr->vt7bits = GetCntlVal(dptr, 48);
TermPrefsPtr->vtwrap = GetCntlVal(dptr, Termvtwrap);
if (GetCntlVal(dptr, TermMetaIsCmdCntrol))
@ -1819,6 +1843,7 @@ Boolean EditSession(StringPtr PrefRecordNamePtr)
popup SPopup[] = {{SessTermPopup, (MenuHandle) 0, 1},
{SessTransTablePopup, (MenuHandle) 0, 1},
{0, (MenuHandle) 0, 0}};
short editField;
SetUpMovableModalMenus();
dptr = GetNewMySmallStrangeDialog(SessionConfigDLOG, NULL, kInFront, (void *)ThirdCenterDialog);
@ -1973,25 +1998,25 @@ Boolean EditSession(StringPtr PrefRecordNamePtr)
if (SessPrefsPtr->ckey != -1) {
scratchPstring[2] = SessPrefsPtr->ckey ^ 64;
SetTEText(dptr, SessInterrupt, scratchPstring);
}
}
if (SessPrefsPtr->skey != -1) {
scratchPstring[2] = SessPrefsPtr->skey ^ 64;
SetTEText(dptr, SessSuspend, scratchPstring);
}
}
if (SessPrefsPtr->qkey != -1) {
scratchPstring[2] = SessPrefsPtr->qkey ^ 64;
SetTEText(dptr, SessResume, scratchPstring);
}
}
for(scratchshort = CountMItems(SPopup[0].h); scratchshort; scratchshort--) {
GetMenuItemText(SPopup[0].h, scratchshort, scratchPstring);
if (EqualString(scratchPstring, (SessPrefsPtr->TerminalEmulation), TRUE, FALSE))
SPopup[0].choice = scratchshort;
}
}
for(scratchshort = CountMItems(SPopup[1].h); scratchshort; scratchshort--) {
GetMenuItemText(SPopup[1].h, scratchshort, scratchPstring);
if (EqualString(scratchPstring, (SessPrefsPtr->TranslationTable), TRUE, FALSE))
SPopup[1].choice = scratchshort;
}
}
NumberOfColorBoxes = 0;
ZeroNumOnly();
@ -2004,7 +2029,10 @@ Boolean EditSession(StringPtr PrefRecordNamePtr)
HideSessPanel(dptr, i);
ShowSessPanel(dptr, currentPanel);
SelectDialogItemText(dptr, SessAlias, 0, 32767);
if ( ((DialogPeek)dptr)->editField >= 0 ) {
SelectDialogItemText(dptr, ((DialogPeek)dptr)->editField + 1, 0, 255);
}
ShowWindow(dptr);
wasInAliasText = FALSE;
while ((ditem > 2) || (ditem == 0)) {
@ -2187,12 +2215,17 @@ Boolean EditSession(StringPtr PrefRecordNamePtr)
case 45: // tab control
newPanel = GetCntlVal(dptr, 45);
if (newPanel == currentPanel) break;
if (newPanel == currentPanel)
break;
editField = ((DialogPeek)dptr)->editField + 1;
HideSessPanel(dptr, currentPanel);
ShowSessPanel(dptr, newPanel);
SelectDialogItemText(dptr,((DialogPeek)dptr)->editField + 1,0,32767);
currentPanel = newPanel;
if (editField != ((DialogPeek)dptr)->editField + 1
&& ((DialogPeek)dptr)->editField >= 0) {
SelectDialogItemText(dptr, ((DialogPeek)dptr)->editField + 1, 0, 255);
}
break;
case 40: // Save as Set...
@ -2551,6 +2584,9 @@ short AnsiPrompt(short allowDefaultBoldSelect, short *defaultBoldColor)
DialogPtr dptr;
Boolean UserLikesNewColor;
RGBColorPtr scratchRGB;
short itemType;
Handle itemHandle;
Rect itemRect;
SetUpMovableModalMenus();
scratchRGB = (RGBColorPtr) myNewPtr(sizeof(RGBColor));
@ -2605,14 +2641,17 @@ short AnsiPrompt(short allowDefaultBoldSelect, short *defaultBoldColor)
case ANSIBoldMagenta:
case ANSIBoldCyan:
case ANSIBoldWhite:
if (TelInfo->haveColorQuickDraw)
{
if (TelInfo->haveColorQuickDraw) {
Str255 askColorString;
GetIndString(askColorString,MISC_STRINGS,PICK_NEW_COLOR_STRING);
UserLikesNewColor = GetColor(ColorBoxPoint,askColorString,
&BoxColorData[ditem-ANSIBlack], scratchRGB);
if (UserLikesNewColor)
if (UserLikesNewColor) {
BoxColorData[ditem-ANSIBlack] = *scratchRGB;
// force refresh
GetDialogItem(dptr, ditem, &itemType, &itemHandle, &itemRect);
InvalRect(&itemRect);
}
}
break;
case ANSIBlackRadio:

View File

@ -37,7 +37,7 @@ void InitDebug(void)
// SetRect(&pRect, 50, 150, 700, 350); // Need to make this a resource!
SetRect(&pRect, 50, 150, 0, 0);
flags = RSWwrapon | RSWgoaway | RSWignoreBeeps | RSWsavelines;
flags = RSWwrapon | RSWgoaway | RSWignoreBeeps | RSWoldscrollback;
if (TelInfo->debug)
flags |= RSWshowit;

View File

@ -497,7 +497,7 @@ short sendmacro(struct WindRec *tw, short n) /* send macro number n */
plabel = s;
} else {
*s = 0;
if (plabel && SSH2PasswordDialog(plabel, password)) {
if (plabel && SSH2PasswordDialog(plabel, password, NULL)) {
SendStringAsIfTyped(tw, (char *)first, p-first);
// better wait for echo off...
startTicks = TickCount();

View File

@ -64,6 +64,15 @@ extern Boolean encryptOK;
extern unsigned char *gReadspace;
extern short gBlocksize;
extern ConstStringPtr gDefaultName;
static short numWind = 1;
static short stagNum = 1;
static Boolean startautocomplete = false;
static Boolean doneautocomplete = false;
static unsigned long autoTicks;
/*
extern void LockDialog();
extern void UnlockDialog();
@ -97,15 +106,18 @@ void OpenPortSpecial(MenuHandle menuh, short item)
if (theParams == NULL) {
OutOfMemory(1020);
return;
}
}
// use favorite's name as window name
if ( !(**theParams).WindowName[0] && memcmp(scratchPstring, gDefaultName, gDefaultName[0] + 1) ) {
BlockMoveData(scratchPstring, (**theParams).WindowName, scratchPstring[0] + 1);
NumToString(numWind++, scratchPstring);
pstrcat((**theParams).WindowName, "\p (");
pstrcat((**theParams).WindowName, scratchPstring);
pstrcat((**theParams).WindowName, "\p)");
}
success = CreateConnectionFromParams(theParams);
}
static Boolean startautocomplete = false;
static Boolean doneautocomplete = false;
static unsigned long autoTicks;
SIMPLE_UPP(POCdlogfilter, ModalFilter);
pascal short POCdlogfilter( DialogPtr dptr, EventRecord *evt, short *item)
{
@ -148,36 +160,10 @@ pascal short POCdlogfilter( DialogPtr dptr, EventRecord *evt, short *item)
// if (evt->what == mouseDown)
// return(PopupMousedown(dptr, evt, item));
/* NONO */
/*
if ( gApplicationPrefs->parseAliases ) {
editField = ((DialogPeek)dptr)->editField + 1;
if ( editField == NChostname ) {
GetTEText(dptr, editField, scratch1Pstring);
}
}
*/
/* NONO */
// RAB BetterTelnet 1.2 - we let StdFilterProc handle this now
// return(DLOGwOK_Cancel(dptr, evt, item));
result = CallStdFilterProc(dptr, evt, item);
/* NONO */
/*
if ( gApplicationPrefs->parseAliases ) {
if ( editField == NChostname && (evt->what == keyDown || evt->what == autoKey) ) {
GetTEText(dptr, editField, scratch2Pstring);
if (memcmp(scratch1Pstring, scratch2Pstring, scratch1Pstring[0] + 1)) {
// host name changed
//*item = editField;
//result = true;
autoTicks = LMGetTicks();
startautocomplete = true;
}
}
}
*/
if ( startautocomplete && LMGetTicks() - autoTicks >= 30 ) {
startautocomplete = false;
doneautocomplete = true;
@ -185,8 +171,6 @@ pascal short POCdlogfilter( DialogPtr dptr, EventRecord *evt, short *item)
result = -1;
}
/* NONO */
return result;
}
@ -253,7 +237,9 @@ Boolean PresentOpenConnectionDialog(void)
Boolean success;
long scratchlong;
Str255 hostString;
Str255 scratchPstring, terminalPopupString, scritchPstring;
Str255 scratchPstring;
Str255 terminalPopupString;
Str255 favoriteString;
Handle ItemHandle;
SessionPrefs **tempSessHdl;
short numberOfTerms, sessMark, requestPort;
@ -474,13 +460,13 @@ Boolean PresentOpenConnectionDialog(void)
}
MaxMem(&junk);
GetMenuItemText(SessPopupHdl, sessMark, scritchPstring);
GetMenuItemText(SessPopupHdl, sessMark, favoriteString);
/* don't try to convert hostname to alias if nothing has been typed */
parseAliases = gApplicationPrefs->parseAliases;
if (!typedHost)
gApplicationPrefs->parseAliases = false;
InitParams = NameToConnInitParams(scratchPstring, FALSE, scritchPstring, &wasAlias);
InitParams = NameToConnInitParams(scratchPstring, FALSE, favoriteString, &wasAlias);
gApplicationPrefs->parseAliases = parseAliases;
if (InitParams == NULL)
{
@ -489,7 +475,7 @@ Boolean PresentOpenConnectionDialog(void)
ResetMenus();
OutOfMemory(1000);
return;
}
}
// if ((**InitParams).terminal == NULL) //if this is not null, then the string was an alias,
// { // so dont use the popup terminal
@ -539,10 +525,19 @@ Boolean PresentOpenConnectionDialog(void)
HUnlock((Handle)(**InitParams).session);
HUnlock((Handle)InitParams);
DisposeMenu(SessPopupHdl); // drh Ñ Bug fix: memory leak
DisposeMenu(SessPopupHdl);
DisposeDialog(dptr);
ResetMenus();
// use favorite's name as window name
if ( !(**InitParams).WindowName[0] && memcmp(favoriteString, gDefaultName, gDefaultName[0] + 1) ) {
BlockMoveData(favoriteString, (**InitParams).WindowName, favoriteString[0] + 1);
NumToString(numWind++, favoriteString);
pstrcat((**InitParams).WindowName, "\p (");
pstrcat((**InitParams).WindowName, favoriteString);
pstrcat((**InitParams).WindowName, "\p)");
}
success = CreateConnectionFromParams(InitParams);
return success;
}
@ -625,7 +620,6 @@ Boolean OpenConnectionFromURL(char *host, char *portstring, char *user, char *pa
Boolean CreateConnectionFromParams( ConnInitParams **Params)
{
short scratchshort, fontnumber, otherfnum;
static short numWind = 1, stagNum = 1;
SessionPrefs *SessPtr;
TerminalPrefs *TermPtr;
short cur;
@ -641,8 +635,7 @@ Boolean CreateConnectionFromParams( ConnInitParams **Params)
// Check if we have the max number of sessions open
if (TelInfo->numwindows == MaxSess) return(FALSE);
cur = TelInfo->numwindows; /* Adjust # of windows and get this window's number */
TelInfo->numwindows++;
cur = TelInfo->numwindows++; // Adjust # of windows and get this window's number
theScreen = &screens[cur];
theScreen->active = CNXN_NOTINUSE; // Make sure it is marked as dead (in case we
@ -667,30 +660,21 @@ Boolean CreateConnectionFromParams( ConnInitParams **Params)
pstrcat((**Params).WindowName, "\p (");
pstrcat((**Params).WindowName, numPstring); // tack the number onto the end.
pstrcat((**Params).WindowName, "\p)");
}
}
if (SessPtr->hostname[0] == 0) {
OperationFailedAlert(5, 0, 0);
DisposeHandle((Handle)(**Params).terminal);
DisposeHandle((Handle)(**Params).session);
DisposeHandle((Handle)Params);
TelInfo->numwindows--;
updateCursor(1);
return(FALSE);
goto failed;
}
/* we have SSH.
if (SessPtr->protocol == 4) // make sure we have SSH
{
if (!ssh_glue_installed()) {
OperationFailedAlert(6, 0, 0);
DisposeHandle((Handle)(**Params).terminal);
DisposeHandle((Handle)(**Params).session);
DisposeHandle((Handle)Params);
TelInfo->numwindows--;
updateCursor(1);
return(FALSE);
goto failed;
}
}
*/
Mnetinit(); // RAB BetterTelnet 1.0fc4
@ -716,13 +700,8 @@ Boolean CreateConnectionFromParams( ConnInitParams **Params)
// Get the IP for the host while we set up the connection
if (DoTheDNR(hostname, cur) != noErr) {
OutOfMemory(1010);
DisposeHandle((Handle)(**Params).terminal);
DisposeHandle((Handle)(**Params).session);
DisposeHandle((Handle)Params);
TelInfo->numwindows--;
updateCursor(1);
return(FALSE);
}
goto failed;
}
*/
DoTheMenuChecks();
@ -819,28 +798,19 @@ Boolean CreateConnectionFromParams( ConnInitParams **Params)
if ( !theScreen->sshdata.login[0]
/*|| !theScreen->sshdata.password[0]*/ ) {
if ( !SSH2LoginDialog(theScreen->sshdata.host, theScreen->sshdata.login, theScreen->sshdata.password) ) {
DisposeHandle((Handle)(**Params).terminal);
DisposeHandle((Handle)(**Params).session);
DisposeHandle((Handle)Params);
TelInfo->numwindows--;
updateCursor(1);
return(FALSE);
goto failed;
}
}
}
/* NONO */
theScreen->active = CNXN_DNRWAIT; // Signal we are waiting for DNR.
// Get the IP for the host while we set up the connection
if (DoTheDNR(hostname, cur) != noErr) {
OutOfMemory(1010);
DisposeHandle((Handle)(**Params).terminal);
DisposeHandle((Handle)(**Params).session);
DisposeHandle((Handle)Params);
TelInfo->numwindows--;
updateCursor(1);
return(FALSE);
}
goto failed;
}
GetFNum(TermPtr->DisplayFont, &fontnumber);
GetFNum(TermPtr->BoldFont, &otherfnum);
@ -861,33 +831,28 @@ Boolean CreateConnectionFromParams( ConnInitParams **Params)
if (TermPtr->realbold)
flags |= RSWrealbold;
if (TermPtr->oldScrollback)
flags |= RSWsavelines;
flags |= RSWoldscrollback;
if (TermPtr->jumpScroll)
flags |= RSWjumpscroll;
if (TermPtr->realBlink)
flags |= RSWrealBlink;
if (TermPtr->vt7bits)
flags |= RSWvt7bit;
theScreen->vs = RSnewwindow(&((**Params).WindowLocation), TermPtr->numbkscroll, TermPtr->vtwidth,
TermPtr->vtheight, (**Params).WindowName, fontnumber,
TermPtr->fontsize, cur, otherfnum, TermPtr->boldFontSize,
TermPtr->boldFontStyle, TermPtr->vtemulation, flags);
if (theScreen->vs <0 ) { /* we have a problem opening up the virtual screen */
if (theScreen->vs < 0 ) { /* we have a problem opening up the virtual screen */
OutOfMemory(1011);
DisposeHandle((Handle)(**Params).terminal);
DisposeHandle((Handle)(**Params).session);
DisposeHandle((Handle)Params);
TelInfo->numwindows--;
DoTheMenuChecks();
updateCursor(1);
return(FALSE);
}
goto failed;
}
theScreen->wind = RSgetwindow( theScreen->vs);
((WindowPeek)theScreen->wind)->windowKind = WIN_CNXN;
/*
* Attach our extra part to display encryption status
*/
@ -962,7 +927,6 @@ Boolean CreateConnectionFromParams( ConnInitParams **Params)
scratchBoolean = RSsetcolors( theScreen->vs, 3, &TermPtr->bbcolor);
addinmenu(cur, (**Params).WindowName, diamondMark);
theScreen->active = CNXN_DNRWAIT; // Signal we are waiting for DNR.
theScreen->myInitParams = (Handle)Params;
HUnlock((Handle)(**Params).terminal);
@ -972,7 +936,21 @@ Boolean CreateConnectionFromParams( ConnInitParams **Params)
VSscrolcontrol( theScreen->vs, -1, theScreen->ESscroll);
updateCursor(1); /* Done stalling the user */
return(TRUE);
return TRUE;
failed:
theScreen->active = CNXN_NOTINUSE;
disposetranslation(theScreen);
disposemacros(&theScreen->sessmacros);
DisposeHandle((Handle)(**Params).terminal);
DisposeHandle((Handle)(**Params).session);
DisposeHandle((Handle)Params);
TelInfo->numwindows--;
DoTheMenuChecks();
updateCursor(1);
return FALSE;
}
void CompleteConnectionOpening(short dat, ip_addr the_IP, OSErr DNRerror, char *cname)
@ -1325,7 +1303,6 @@ void destroyport(short wind)
DisposePtr((Ptr)tw->aedata);
}
disposetranslation(tw);
/*
* Get handle to the WDEF patch block, kill the window, and then
@ -1372,6 +1349,8 @@ void removeport(WindRecPtr tw)
ssh_glue_close(tw);
}
disposetranslation(tw);
if (tw->outlen>0) {
tw->outlen=0; /* Kill the remaining send*/
HUnlock( tw->outhand); /* buffer */

View File

@ -63,6 +63,8 @@ extern WindRec *screens,
extern Cursor *theCursors[];
extern Boolean gHaveDragMgr;
extern void VSprintf(char *fmt, ...);
extern void VSdump(char *p, int len);
static gHaveInstalledNotification = 0;
NMRec *nRecPtr;
@ -574,6 +576,9 @@ emacsHack:
}
}
// VSprintf("trin: ");
// VSdump(&ascii, 1);
// Handle whatever mapping is needed.
// mac_nat(tw, &ascii); // LU/PM: Convert char from mac to nat
if ( GetTranslationIndex(tw->outnational) != kTRJIS ) {
@ -603,7 +608,7 @@ emacsHack:
// translation ok, or no data yet
if ( inlen ) {
// keep a few chars
for (i = inlen; i <= tw->troutcount; i++) {
for (i = inlen; i < tw->troutcount; i++) {
pbuf[i - inlen] = pbuf[i];
}
tw->troutcount -= inlen;
@ -639,6 +644,9 @@ emacsHack:
}
}
// VSprintf("trout: ");
// VSdump(pbuf, trlen);
if ( (tw->clientflags & PASTE_IN_PROGRESS) && tw->pastemethod ) {
// queue this
kbwrite( tw, pbuf, trlen);

View File

@ -93,20 +93,18 @@ void main(void)
ProfilerClear();
#endif
if (!Gestalt('appr',&dummy)) {
if ( !Gestalt('appr', &dummy) ) {
gHasAppearance = true;
if (!Gestalt(gestaltAppearanceVersion, &dummy) && dummy >= 0x110 ) {
if ( !Gestalt(gestaltAppearanceVersion, &dummy) && dummy >= 0x110 ) {
gHasAppearance11 = true;
}
RegisterAppearanceClient();
}
init(); /* JMB 2.6 - Call all init routines */
UnloadSeg(&init); /* Bye, bye to init routines... */
if (gApplicationPrefs->autoOpenDefault)
if ( gApplicationPrefs->autoOpenDefault )
OpenSpecial(3);
TelInfo->gotDocument = 0;
@ -120,13 +118,10 @@ void main(void)
if (!TelInfo->done) {
DoNetEvents();
}
//ssh2_sched();
memOK = RecoverReserveMemory();
if (memOK)
if ( memOK ) {
haveNotifiedLowMemory = false;
else if (!haveNotifiedLowMemory)
{
} else if (!haveNotifiedLowMemory) {
Alert(MemoryLowAlert, NULL);
haveNotifiedLowMemory = true;
}
@ -140,8 +135,8 @@ void main(void)
gPresentOpenConnectionDialog = 0;
}
}
} while (!TelInfo->done); /* BYU mod */
} while ( !TelInfo->done );
#ifdef PERFORMANCE
if (!PerfDump(ThePGlobals, "\pPerform.out", TRUE, 80))
DebugStr("\pDump Failed");

View File

@ -282,19 +282,29 @@ void pasteText(short scrn)
SetHandleSize(tw->outhand, uploadLength);
if ( GetTranslationIndex(tw->outnational) != kTRJIS )
tw->outhand = htrbuf_mac_nat(tw, tw->outhand);
HLock(tw->outhand);
tw->outptr = *tw->outhand;
tw->outlen = GetHandleSize(tw->outhand);
tw->clientflags |= PASTE_IN_PROGRESS;
if (uploadLength != 16384) {
tw->isUploading = 0;
FSClose(tw->uploadRefNum);
if ( tw->outhand && !(tw->outlen = GetHandleSize(tw->outhand)) ) {
DisposeHandle( tw->outhand );
tw->outhand = NULL;
}
if ( tw->outhand ) {
HLock(tw->outhand);
tw->outptr = *tw->outhand;
tw->outlen = GetHandleSize(tw->outhand);
tw->clientflags |= PASTE_IN_PROGRESS;
if (uploadLength != 16384) {
tw->isUploading = 0;
FSClose(tw->uploadRefNum);
}
tw->incount = 0;
tw->outcount = 0;
//pasteText(scrn);
netputevent(USERCLASS, PASTELEFT, scrn, 0);
return;
} else {
// translation failed...
SysBeep(5);
tw->outlen = 0;
}
tw->incount = 0;
tw->outcount = 0;
//pasteText(scrn);
netputevent(USERCLASS, PASTELEFT, scrn, 0);
return;
}
}
@ -303,8 +313,10 @@ void pasteText(short scrn)
tw->clientflags &= ~PASTE_IN_PROGRESS;
if (tw->isUploading)
FSClose(tw->uploadRefNum);
HUnlock(tw->outhand);
DisposeHandle(tw->outhand);
if ( tw->outhand ) {
HUnlock(tw->outhand);
DisposeHandle(tw->outhand);
}
tw->outptr = (char *) 0L;
tw->outhand = (char **) 0L;

View File

@ -83,14 +83,18 @@ void printsleep(void)
void printGraph(short dnum) /* Which drawing to print */
{
short h,v; /* used for centering (h=horiz. , v=vert.) */
short wh,wv; /* Window horiz and vert */
TPrStatus
prStatus; /* Printing status record */
Rect prRect; /* the rectangle to print in */
TPPrPort prPort; /* the printing port */
short j; /* VG identifier for pass-through */
short h,v; /* used for centering (h=horiz. , v=vert.) */
short wh,wv; /* Window horiz and vert */
TPrStatus prStatus; /* Printing status record */
Rect prRect; /* the rectangle to print in */
TPPrPort prPort; /* the printing port */
short j; /* VG identifier for pass-through */
THPrint PrRecHandle; /* our print record handle */
short vs;
vs = VGgetVS(dnum);
if ( vs < 0 )
return;
PrRecHandle = PrintSetupRecord();
@ -119,8 +123,7 @@ void printGraph(short dnum) /* Which drawing to print */
prRect.left = (h- wh) /2;
prRect.bottom = prRect.top + wv;
prRect.right = prRect.left + wh;
j=VGnewwin(TEK_DEVICE_PICTURE,VGgetVS(dnum)); /* NCSA 2.5: fixed the print call */
j = VGnewwin(TEK_DEVICE_PICTURE, vs, VGgettektype(vs), VGgettekclear(vs));
RGMPsize( &prRect );
VGzcpy( dnum, j); /* Love dat zm factr */
VGredraw(dnum,j); /* Copy the picture in i to j */

View File

@ -132,6 +132,7 @@ struct VGWINTYPE {
short pencolor; /* current pen color */
short fontnum,charx,chary; /* char size */
short count; /* for temporary use in special state loops */
char tekclear;
char TEKtype; /* 4105 or 4014? added: 16jul90dsw */
char TEKMarker; /* 4105 marker type 17jul90dsw */
char TEKOutline; /* 4105 panel outline boolean */