home *** CD-ROM | disk | FTP | other *** search
- From: jac@yoko.rutgers.edu (Jonathan A. Chandross)
- Newsgroups: comp.sources.apple2
- Subject: v001SRC043: more -- More For Orca (GS)
- Message-ID: <May.2.17.09.11.1991.311@yoko.rutgers.edu>
- Date: 2 May 91 21:09:12 GMT
- Approved: jac@paul.rutgers.edu
-
-
- 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
-