home *** CD-ROM | disk | FTP | other *** search
- #INCLUDE <STDIO.H>
-
- CHAR INDEV;
- CHAR OUTDEV;
- CHAR VERBOSE;
- MAIN(ARGC,ARGV)
- UNSIGNED ARGC;
- CHAR **AV;
- █
- INT FCOPY();
- UNSIGNED I;
- CHAR **ARGV;
-
- ARGV = AV;
- ARGC = INIT(ARGC,&ARGV);
- FOR (I = 1; I < ARGC; ++I)
- GLOB(ARGV[I],&FCOPY);
- ▌
-
- INIT(ARGC,ARGV)
- █
- EXTERN CHAR SYSDEV, WRKDEV;
-
-
- INDEV = SYSDEV;
- OUTDEV = WRKDEV;
- VERBOSE = 0;
- RETURN ARGC;
- ▌
-
- /*
- * EVENTUALLY MAKE THIS INVOKE FUNCTION
- * FOR EACH FILE IN THE WORK DIRECTORY
- * WHICH MATCHES "PATTERN"
- *
- * CAVEAT: OPENDIR() DOES NOT WORK WITH
- * ╥┴═ DISK
- * 2ND CAVEAT: WE COPY ╞╥╧═ SYSTEM DISK
- */
- GLOB(PATTERN, PFUNC)
- CHAR *PATTERN;
- INT (*PFUNC)();
- █
- (*PFUNC)(PATTERN);
- ▌
-
- #DEFINE ├╚╦╔╬ 0XFFC6
- #DEFINE ├╚╦╧╒╘ 0XFFC9
- #DEFINE ├╠╥├╚╬ 0XFFCC
- STATIC CHAR BLFLAG;
- STATIC CHAR MLGETB[] = █
- 0X20, 0X├╞, 0X╞╞, /* T1 JSR CHRIN */
- 0X91, 0X╞┬, /* STA ($FB),Y */
- 0X├8, /* INY */
- 0X20, 0X┬7, 0X╞╞, /* JSR READST */
- 0X─0, 0X04, /* BNE T2 */
- 0X├4, 34, /* CPY 34 */
- 0X─0, 0X╞1, /* BNE T1 */
- 0X60, /* T2 RTS */
- ▌;
- UNSIGNED
- GETBLK(BUFFER, SIZE, FID)
- CHAR *BUFFER;
- UNSIGNED SIZE;
- ╞╔╠┼ FID;
- █
- STATIC CHAR A, X, Y;
- UNSIGNED N;
-
- IF (BLFLAG) RETURN 0;
- /* ZERO PAGE USAGE: SEE ╨OWER ├ ═ANUAL */
- *((CHAR **)0XFB) = BUFFER;
- *((CHAR *)34) = SIZE;
- SYS(├╠╥├╚╬, &A, &X, &Y);
- X = FID;
- SYS(├╚╦╔╬, &A, &X, &Y);
- Y = 0;
- SYS(MLGETB, &A, &X, &Y);
- N = Y;
- IF (A != 0) BLFLAG = A;
- SYS(├╠╥├╚╬, &A, &X, &Y);
- RETURN N;
- ▌
-
- STATIC CHAR MLPUTB[] = █
- 0X┬1, 34, /* T1 LDA (34),Y */
- 0X20, 0X─2, 0X╞╞, /* JSR CHROUT */
- 0X├8, /* INY */
- 0X├4, 0X╞┬, /* CPY $FB */
- 0X─0, 0X╞6, /* BNE T1 */
- 0X60, /* RTS */
- ▌;
-
- UNSIGNED
- PUTBLK(BUFFER, N, FID)
- CHAR *BUFFER;
- UNSIGNED N;
- ╞╔╠┼ FID;
- █
- STATIC CHAR A, X, Y;
-
- IF (N == 0) RETURN 0;
- *((CHAR **)34) = BUFFER;
- *((CHAR *)0XFB) = N;
- SYS(├╠╥├╚╬, &A, &X, &Y);
- X = FID;
- SYS(├╚╦╧╒╘, &A, &X, &Y);
- Y = 0;
- SYS(MLPUTB, &A, &X, &Y);
- SYS(├╠╥├╚╬, &A, &X, &Y);
- RETURN N;
- ▌
-
- STATIC CHAR BUFF[256];
- INT
- FCOPY(NAME)
- CHAR *NAME;
- █
- ╞╔╠┼ OPENIN(), OPENOUT();
- ╞╔╠┼ INFID, OUTFID;
- UNSIGNED N;
- AUTO UNSIGNED TYPE;
-
- TYPE = 0;
- IF (VERBOSE)
- PRINTF("COPY %S FROM DEVICE %D TO WORK\N",NAME,INDEV);
- INFID = 5;
- IF ((INFID = OPENIN(INDEV,3,NAME,&TYPE)) == 0)
- PRINTF("CAN'T OPEN %S FOR INPUT\N", NAME);
- ELSE IF ((OUTFID = OPENOUT(NAME,TYPE)) == 0 ▀▀
- FERROR())
- PRINTF("CAN'T OPEN %S FOR OUTPUT\N", NAME);
- ELSE █
- /*
- * SORRY, THIS ISN'T FAST ENOUGH!
- *
- * WHILE((C = FGETC(INFID)) != ┼╧╞)
- * FPUTC(C, OUTFID);
- */
- BLFLAG = 0;
- WHILE ((N = GETBLK(BUFF,254,INFID)) != 0)
- PUTBLK(BUFF,N,OUTFID);
- ▌
- FCLOSE(INFID);
- FCLOSE(OUTFID);
- ▌
-
- /*
- * OPENIN - SPECIAL
- * OPENS FILE ON GIVEN DEVICE, AND
- * ATTEMPTS TO DETERMINE INPUT TYPE
- * BY THE ICKY METHOD OF REPEATED
- * OPEN ATTEMPTS
- *
- * UNFORTUNATELY THIS WILL BE SLOW
- */
- OPENIN(DEV,SECADD,NAME,PTYPE)
- UNSIGNED DEV;
- UNSIGNED SECADD;
- CHAR *NAME;
- UNSIGNED *PTYPE;
- █
- EXTERN CHAR WRKDEV;
- AUTO CHAR NAMBUF[30];
- REGISTER ╞╔╠┼ RFID;
- REGISTER CHAR *TSTR;
- REGISTER UNSIGNED FE;
-
- DEVICE(DEV);
- *PTYPE = 0;
- TSTR = INDEX(NAME, ',');
- IF (TSTR != ╬╒╠╠ &&
- *++TSTR != '\0' && *TSTR != 'R') █
- RFID = FOPEN(NAME,"R"); /* LEAVE *PTYPE 0 */
- DEVICE(WRKDEV);
- RETURN RFID;
- ▌
-
- FOR (TSTR = "SPU"; *TSTR != '\0'; ++TSTR) █
- SPRINTF(NAMBUF,"%S,%C", NAME, *TSTR);
- RFID = FOPEN(NAMBUF,"R");
- FE = FERROR();
- IF (RFID != 0 && FE == 0) █
- *PTYPE = *TSTR;
- DEVICE(WRKDEV);
- RETURN RFID;
- ▌
- ELSE
- FCLOSE(RFID);
- ▌
- DEVICE(WRKDEV);
- RETURN 0;
- ▌
-
- /*
- * OPENOUT - SPECIAL TO DO FOPEN OF
- * SPECIFIED TYPE
- */
- ╞╔╠┼
- OPENOUT(NAME,TYPE)
- CHAR *NAME;
- UNSIGNED TYPE;
- █
- AUTO CHAR NAMBUF[30];
-
- IF (TYPE != 0) █
- SPRINTF(NAMBUF,"%S,%C", NAME, TYPE);
- NAME = NAMBUF;
- ▌
- RETURN FOPEN(NAME,"W");
-
- ▌
-