jac@yoko.rutgers.edu (Jonathan A. Chandross) (05/03/91)
Submitted-by: Jawaid Bazyar (bazyar@cs.uiuc.edu)
Posting-number: Volume 1, Source:43
Archive-name: util/gs/shell/orca/more
Architecture: ONLY_2gs
Version-number: 1.2
View a file one page at a time.
Requires ORCA shell.
Enjoy.
###################################
=more.doc
-============
- MORE
-============
-
-Version 1.2
-
-The first tool I wanted was a text file pager. TYPE worked ok, but
-having to hit the space bar at just the right time got on my nerves.
-So I first created PAGE (RIP), then MORE. As it exists, MORE looks like
-Unix 'more'. It doesn't support searching with regular expressions
-and silliness like that (that's what uEmacs is for). But it's a good
-pager.
-
-MORE is invoked with the following format:
-
- MORE <filespec>...
-
-When the - <filename> (xx%) - prompt appears at the bottom of the screen,
-pressing Q will quit the current file and MORE the next one (if present).
-Hitting ESC at this prompt will stop the program completely (whether more
-files were specified or not). Pressing SPACE will scroll through another page
-of the file. RETURN will move forward in the file one line.
-
-MORE supports redirection and pipes. If the output is redirected away
-from the console, more won't pause for each page. In this way it can be
-used as a simple text file converter.
-
-The most useful aspect of MORE is it's versatility- it can read regular Apple
-(CR-delimited) TXT and SRC files, Unix text files (LF-delimited), and IBM CRLF
-text files. All automatically.
-By redirecting output to a file, MORE can convert from Unix or IBM to Apple
-text format. Neat, eh? (But using MORE is slower than using CONV- see below).
-
-MORE has no option switches- it's too simple.
-
-Change Log:
-
-v1.1 - MORE can now abort either an individual file or all files. Also,
- changed return from 'advance page' to 'advance line', like the
- Unix version.
-
-Note:
-
-A filespec is a method of identifying files on a disk. In the ORCA
-shell, a filespec can contain the = and ? wildcards, in addition to
-plain filenames. MORE supports multiple filespecs, e.g.
- more a.c b.c c.c d=.c
-etc. Any combination of wildcarded and/or vanilla filespecs is allowed.
-This functionality, however, comes at a price. MORE works only under
-the ORCA shell or a compatible. At this time, there are no shells truly
-compatible with ORCA.
-
------
-
-Jawaid Bazyar
-Derek Taubert
-
-Copyright 1990 by Procyon Software
-Freeware - distribute but don't sell!
-
-This utility is FreeWare. Distribute them as much as you like, just
-don't sell them or distribute modified versions. Send me your comments -
-I'm eager to hear from you for suggestions and improvements.
-
-Also, if you make any modifications to the code please do not redistribute
-them. Instead, send me the changed source along with an explanation and
-I will consider including your change in the next version.
-
- Jawaid Bazyar
- 1120 Maple Street
- Mt. Vernon, IL 62864
-
- Internet/ARPAnet bazyar@cs.uiuc.edu
- GEnie J.BAZYAR
-
=more.c
-#pragma optimize -1
-
-#pragma keep "6/more"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <shell.h>
-#include <gsos.h>
-#include <string.h>
-#include <orca.h>
-
-#pragma lint -1
-
-#define MAX_LINE 24
-#define MAX_COL 80
-
-int main(int argc,char *argv[])
-{
-FILE *file;
-int line,col;
-int i;
-int c,quit,abort;
-int pipeFlag; /* 1 means input is piped in or redirected */
-int standardOut;
-DirectionPB checkIO;
-EOFRecGS eofs;
-char expanded[65];
-char *truncated;
-Init_WildcardPB iwpb;
-Next_WildcardPB nwpb;
-
- checkIO.device = 1;
- DIRECTION(&checkIO);
- standardOut = (checkIO.direct != 0) ? 0 : 1;
-
- pipeFlag = (argc == 1) ? 1 : 0;
- if (argc == 1) argc = 2;
- quit = 0;
- abort = 0;
-
- for (i = 1; (i < argc && !abort); i++)
- {
- if (!pipeFlag) {
- strcpy(expanded+1,argv[i]);
- expanded[0] = strlen(argv[i]);
- iwpb.w_file = expanded;
- iwpb.flags = 0x8000;
- INIT_WILDCARD(&iwpb);
- nwpb.nextfile = expanded;
- NEXT_WILDCARD(&nwpb);
- expanded[expanded[0]+1] = 0;
- }
- while ((strlen(expanded) != 0) || (pipeFlag && !quit)) {
- quit = 0;
-
- if (pipeFlag) {
- file = stdin;
- /* rewind(file); */
- }
- else {
- truncated = strrchr(expanded+1,'/');
- if (truncated == NULL) truncated = expanded+1;
- else truncated++;
- file = fopen(expanded+1,"rb");
- eofs.pCount = 2;
- eofs.refNum = file->_file;
- GetEOFGS(&eofs);
- if (toolerror()) {
- printf("GS/OS Error %d\n",toolerror());
- exit(-1);
- }
- }
- line = 1; col = 1;
-
- c = getc(file);
- if ((c == EOF) || (c == 0x04)) quit = 1;
-
- while (!quit && !abort)
-
- {
- int k;
-
- if (c == '\r') {
- if ((k = getc(file)) == '\n') /* IBM silly CR & LF EOL */
- putchar('\n');
- else { ungetc(k,file); putchar('\n'); }
- col = 1; line++;
- }
- else
- if (c == '\n')
- {
- putchar('\n');
- col = 1; line++;
- }
- else
- {
- putchar(c);
- col++;
- if (col > MAX_COL)
- {
- col = 1; line++;
- }
- }
- if ((line == MAX_LINE) && standardOut)
- { long percent;
- putchar(15);
- if (!pipeFlag)
- {
- percent = (ftell(file) * 100) / eofs.eof;
- printf(" - %s (%2ld%%) -",truncated,percent);
- }
- else
- printf(" - (pipe) -");
- putchar(14);
- asm {
- again: lda 0xE0C000
- bpl again
- sta c
- lda 0xE0C010
- }
- c = c & 0x7f;
-
- if (c == 'q') quit = 1;
- if (c == 27) abort = 1;
- if (c == 13) line--;
- else line = 1;
- for (c = 0; c < (11 + (pipeFlag ? 0 : strlen(truncated))); c++)
- {
- putchar(8);
- putchar(' ');
- putchar(8);
- }
- }
- c = getc(file);
- if ((c == EOF) || (c == 0x04)) quit = 1;
- }
- /* if (!pipeFlag)*/ fclose(file);
- if (!pipeFlag)
- { NEXT_WILDCARD(&nwpb);
- expanded[expanded[0]+1] = 0; }
- }
- }
-}
-
+ END OF ARCHIVE