Added MORE command.

svn path=/trunk/; revision=673
This commit is contained in:
Eric Kohl 1999-09-27 22:13:59 +00:00
parent ddc9e680c9
commit 1241612f69
2 changed files with 139 additions and 6 deletions

View file

@ -2,14 +2,16 @@
# ReactOS cmdutils makefile
#
TARGET=tee.exe
TARGET=more.exe tee.exe
all: $(TARGET)
OBJECTS = tee.o
CLEAN_FILES = *.o *.exe *.sym *.coff
more.exe: more.o
$(CC) more.o -lkernel32 -lcrtdll -o more.exe
$(NM) --numeric-sort more.exe > more.sym
tee.exe: tee.o
$(CC) tee.o -lkernel32 -lcrtdll -o tee.exe
@ -34,13 +36,13 @@ else
endif
dist: $(TARGET:%=../$(DIST_DIR)/%)
dist: $(TARGET:%=../$(DIST_DIR)/apps/%)
$(TARGET:%=../$(DIST_DIR)/%): ../$(DIST_DIR)/%: %
$(TARGET:%=../$(DIST_DIR)/apps/%): ../$(DIST_DIR)/apps/%: %
ifeq ($(DOSCLI),yes)
$(CP) $* ..\$(DIST_DIR)\$*
$(CP) $* ..\$(DIST_DIR)\apps\$*
else
$(CP) $* ../$(DIST_DIR)/$*
$(CP) $* ../$(DIST_DIR)/apps/$*
endif
include ../rules.mak

131
rosapps/cmdutils/more.c Normal file
View file

@ -0,0 +1,131 @@
/*
* MORE.C - external command.
*
* clone from 4nt more command
*
* 26 Sep 1999 - Dr.F <dfaustus@freemail.it>
* started
*/
#include <windows.h>
#include <malloc.h>
#include <tchar.h>
DWORD len;
LPTSTR msg = "--- continue ---";
/*handle for file and console*/
HANDLE hStdIn;
HANDLE hStdOut;
HANDLE hStdErr;
HANDLE hKeyboard;
static VOID
GetScreenSize (PSHORT maxx, PSHORT maxy)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo (hStdOut, &csbi);
if (maxx)
*maxx = csbi.dwSize.X;
if (maxy)
*maxy = csbi.dwSize.Y;
}
static VOID
ConInKey (VOID)
{
INPUT_RECORD ir;
DWORD dwRead;
do
{
ReadConsoleInput (hKeyboard, &ir, 1, &dwRead);
if ((ir.EventType == KEY_EVENT) &&
(ir.Event.KeyEvent.bKeyDown == TRUE))
return;
}
while (TRUE);
}
static VOID
WaitForKey (VOID)
{
DWORD dwWritten;
WriteFile (hStdErr,msg , len, &dwWritten, NULL);
ConInKey();
WriteFile (hStdErr, _T("\n"), 1, &dwWritten, NULL);
// FlushConsoleInputBuffer (hConsoleIn);
}
//INT CommandMore (LPTSTR cmd, LPTSTR param)
int main (int argc, char **argv)
{
SHORT maxx,maxy;
SHORT line_count=0,ch_count=0;
INT i;
/*reading/writing buffer*/
TCHAR *buff;
/*bytes written by WriteFile and ReadFile*/
DWORD dwRead,dwWritten;
/*ReadFile() return value*/
BOOL bRet;
len = _tcslen (msg);
hStdIn = GetStdHandle(STD_INPUT_HANDLE);
hKeyboard = CreateFile ("CONIN$", GENERIC_READ,
0,NULL,OPEN_ALWAYS,0,0);
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
hStdErr = GetStdHandle(STD_ERROR_HANDLE);
GetScreenSize(&maxx,&maxy);
buff=malloc(maxx);
FlushConsoleInputBuffer (hKeyboard);
do
{
bRet = ReadFile(hStdIn,buff,1,&dwRead,NULL);
if (dwRead>0 && bRet)
WriteFile(hStdOut,buff,dwRead,&dwWritten,NULL);
for(i=0;i<dwRead;i++)
{
ch_count++;
if(buff[i] == _T('\x0a') || ch_count == maxx)
{
ch_count=0;
line_count++;
if (line_count == maxy-1)
{
line_count = 0;
FlushFileBuffers (hStdOut);
WaitForKey ();
}
}
}
}
while(dwRead>0 && bRet);
free (buff);
CloseHandle (hKeyboard);
return 0;
}
/* EOF */