Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

306 lines
5.8 KiB

#include <stdio.h>
#include <malloc.h>
#include <windows.h>
#include "list.h"
void PASCAL UpdateHighLighted (dlen, end)
{
int i;
long l;
ScrLock (1);
if (vHighLen + dlen == 0 && vHighLen) {
i = vAttrHigh;
vAttrHigh = vAttrList;
vHLBot = vHLTop;
UpdateHighNoLock ();
vAttrHigh = (WORD) i;
}
vHighLen += dlen;
UpdateHighNoLock ();
ScrUnLock ();
switch (end) {
case 1:
l = vHighTop + (vHighLen < 0 ? vHighLen : 0);
if (l < vTopLine) {
vTopLine = l;
SetUpdate (U_ALL);
}
break;
case 2:
l = vHighTop + (vHighLen > 0 ? vHighLen : 0);
if (l > vTopLine+vLines-1) {
vTopLine = l - vLines + 1;
SetUpdate (U_ALL);
}
break;
case 3:
l = vHighTop + vHighLen;
if (l < vTopLine) {
vTopLine = l;
SetUpdate (U_ALL);
} else if (l > vTopLine+vLines-1) {
vTopLine = l - vLines + 1;
SetUpdate (U_ALL);
}
break;
}
}
void PASCAL UpdateHighClear ()
{
int i;
ScrLock (1);
if (vHLTop)
for (i=vHLTop; i <= vHLBot; i++)
if (i >= 1 && i <= vLines)
setattr1 (i, (char) vAttrList);
vHLTop = vHLBot = 0;
vHighTop = -1L;
ScrUnLock ();
}
void PASCAL MarkSpot ()
{
UpdateHighClear ();
vHighTop = vTopLine + vLines / 2;
if (vHighTop >= vLastLine)
vHighTop = vLastLine - 1;
vHighLen = 0;
UpdateHighLighted (0, 0);
}
void PASCAL UpdateHighNoLock ()
{
int TopLine, BotLine;
int i;
if (vHighLen == 0) {
if (vHLTop)
setattr1 (vHLTop, (char) vAttrList);
if (vHighTop < vTopLine || vHighTop > vTopLine+vLines-1) {
vHLTop = vHLBot = 0;
return;
}
vHLTop = vHLBot = (char)(vHighTop - vTopLine + 1);
setattr1 (vHLTop, (char)vAttrHigh);
return;
}
if (vHighLen < 0) {
TopLine = (int)(vHighTop + vHighLen - vTopLine);
BotLine = (int)(vHighTop - vTopLine);
} else {
TopLine = (int)(vHighTop - vTopLine);
BotLine = (int)(vHighTop + vHighLen - vTopLine);
}
TopLine ++;
BotLine ++;
for (i=1; i <= vLines; i++) {
if (i >= TopLine && i <= BotLine) {
if (i < vHLTop || i > vHLBot)
setattr1 (i, (char)vAttrHigh);
} else
if (i >= vHLTop && i <= vHLBot)
setattr1 (i, (char)vAttrList);
}
vHLTop = (char)(TopLine < 1 ? 1 : TopLine);
vHLBot = (char)(BotLine > vLines ? (int)vLines : BotLine);
}
void PASCAL FileHighLighted ()
{
// NT - jaimes - 01/29/91
//
// char FAR *data;
char *data;
char s[50];
char c, lastc;
FILE *fp;
// int rc;
// HANDLE i;
// unsigned long act;
long hTopLine;
long CurLine, BotLine;
long LastOffset, CurOffset;
if (vHighTop < 0L) // || vHighLen == 0
return;
GetInput ("File As> ", s, 40);
//
// NT - jaimes - 01/30/91
//
// rc = DosOpen (s, &i, &act, 0L, 0, 0x12, 0x12, 0L);
// if (rc) {
// DisLn (CMDPOS, (Uchar)vLines+1, GetErrorCode (rc));
// beep ();
// return;
// }
fp = fopen( s, "a+b" );
ckerr (fp == NULL, "Could not create or open file");
DisLn (0, (Uchar)vLines+1, "Saving...");
if (vHighLen < 0) {
CurLine = vHighTop + vHighLen;
BotLine = vHighTop;
} else {
CurLine = vHighTop;
BotLine = vHighTop + vHighLen;
}
//
// NT - jaimes - 03/04/91
//
// fp = fdopen ((int)i, "w+b");
// ckerr (fp == NULL, "Could not make stream I/O handle");
hTopLine = vTopLine;
vTopLine = CurLine;
QuickRestore (); /* Jump to starting line */
while (InfoReady () == 0) { /* Set extern values */
DosSemSet (vSemMoreData);
DosSemClear (vSemReader);
DosSemRequest (vSemMoreData, WAITFOREVER);
}
lastc = 0;
BotLine ++;
CurOffset = vpBlockTop->offset + vOffTop;
//
// NT - jaimes - 01/29/91
//
// LastOffset = vprgLineTable[BotLine/PLINES][BotLine%PLINES];
// LastOffset = (vprgLineTable[BotLine/PLINES].pulPointerToPage)[BotLine%PLINES];
LastOffset = vprgLineTable[BotLine/PLINES][BotLine%PLINES];
//
// NT - jaimes - 01/29/91
//
// SELECTOROF(data) = SELECTOROF(vpBlockTop->Data);
// while (CurOffset++ < LastOffset) {
// OFFSETOF(data) = vOffTop;
while (CurOffset++ < LastOffset) {
data = vpBlockTop->Data;
data += vOffTop;
c = *data;
if (c == '\n' || c == '\r') {
if ((c == '\n' && lastc == '\r') || (c == '\r' && lastc == '\n'))
lastc = 0;
else {
lastc = c;
fputc ('\r', fp);
fputc ('\n', fp);
}
} else fputc (lastc=c, fp);
vOffTop++;
if (vOffTop >= BLOCKSIZE) {
ckdebug (vpBlockTop->flag == F_EOF, "internal error");
while (vpBlockTop->next == NULL) {
vpCur = vpBlockTop;
vReaderFlag = F_DOWN;
//
// NT - jaimes - 01/29/91
//
DosSemClear (vSemReader);
DosSemRequest (vSemMoreData, WAITFOREVER);
}
vOffTop = 0;
vpBlockTop = vpBlockTop->next;
//
// NT - jaimes - 01/29/91
// This assignment is not needed because it is already done in beginning
// of the while loop
//
// SELECTOROF(data) = SELECTOROF(vpBlockTop->Data);
}
}
fclose (fp);
vTopLine = hTopLine;
QuickRestore ();
SetUpdate (U_ALL);
}
void PASCAL HUp ()
{
if (vHighTop < 0L)
MarkSpot ();
if (vHighTop > 0L && vHighTop+vHighLen > 0L)
UpdateHighLighted (-1, 3);
}
void PASCAL HDn ()
{
if (vHighTop < 0L)
MarkSpot ();
if (vHighTop+vHighLen < vLastLine)
UpdateHighLighted (+1, 3);
}
void PASCAL HPgDn ()
{
if (vHighTop < 0L)
MarkSpot ();
if (vHighTop+vHighLen+vLines < vLastLine)
UpdateHighLighted (+vLines, 3);
}
void PASCAL HPgUp ()
{
if (vHighTop < 0L)
MarkSpot ();
if (vHighTop > 0L && vHighTop+vHighLen-vLines > 0L)
UpdateHighLighted (-vLines, 3);
}
void PASCAL HSDn () /* Highlight Slide dn 1 */
{
if (vHighTop < vLastLine && vHighTop >= 0L &&
vHighTop+vHighLen < vLastLine) {
vHighTop++;
UpdateHighLighted (0, 2);
}
}
void PASCAL HSUp() /* Highlight Slike up 1 */
{
if (vHighTop > 0L && vHighTop+vHighLen > 0L) {
vHighTop--;
UpdateHighLighted (0, 1);
}
}