/* ÆILE ÎAME : CWEEP.C */ /* ×RITTEN ÂY : ÓNAGA ÇHASH */ /* ÃREATED ÏN : 1/30/88 */ /* ×RITTEN ÏN : C128, ÐOWER Ã, FROM ÓPINNAKER */ /* */ /* ÎOTES: ÔHIS PROGRAM IS BASED ON THE Ã/ÐÍ ÓWEEP ÐRG. */ /* É AM RELEASING THIS PROGRAM TO THE PUBLIC DOMAIN FOR FREE */ /* USE. ÐLEASE LET ME KNOW HOW TO IMPROVE THIS PROGRAM. */ /* */ /* ÈARRY Å. ÔUCKER, ÊR. */ /* 2101 Ó.×. 38TH ÓT, ÌOT 299 */ /* ÌAWTON, ÏË 73505 */ /* */ /*==================================================================*/ #INCLUDE #INCLUDE #DEFINE ÍÅÎÕ "[Ó] ÓCRATCH; [Î] ÎEXT; [Ô] ÔERMINATE \N" #DEFINE ÔÉÔÌÅ "ÓNAGA'S ÃWEEP \N\N" MAIN() INT UNIT; Û STRUCT DIRECT *DP; INT OKAY; CHAR OPTION[]; TITLEPG(); DO Û UNIT = GETUNIT(); Ý WHILE ((UNIT <0) ßß (UNIT >= 5)); CLEARSCR(); PRINTF("› ×ORKING ON ÕNIT: %D ’\N", UNIT); POKE(15, 0XE5, 5);/*SET TOP OF FRAME*/ CLEARSCR(); OPENDIR(UNIT); IF (OKAY = FERROR() != ÎÕÌÌ)Û PRINTF("ÄISK ÅRROR %D", OKAY); SLEEP(10); GOTO BYE; Ý ELSE Û FOR (DP = READDIR(); DP != ÎÕÌÌ; DP = READDIR())Û LOP: PRINTF("\N%-30S =]", DP->NAME); SCANF("%S", OPTION); IF (OPTION[0] == '\N') GOTO LOP; SWITCH(OPTION[0])Û CASE 'T': CASE 'Ô': GOTO BYE; BREAK; CASE 'S': CASE 'Ó': REMOVE(DP->NAME, UNIT); BREAK; CASE 'N': CASE 'Î': CONTINUE; BREAK; DEFAULT: GOTO LOP; Ý Ý Ý CLOSEDIR(); BYE: POKE(15, 0XE5, 0);/*SET TOP OF FRAME*/ POKE(15, 0XE4, 24);/*SET BOTTOM OF FRAME*/ CLEARSCR(); Ý /* ÔHIS IS A ROUTINE THAT WILL PUT UP A PROGRAM TITLE AND SET THE TOP AND BOTTOM MARGINS. */ INT TITLEPG() Û INT COUNT, WORKSPACE; CHAR *PTR; /*UTILITY POINTER.*/ CLEARSCR(); WORKSPACE = 40 - (STRLEN(ÔÉÔÌÅ) - (STRLEN(ÔÉÔÌÅ) % 2)) / 2; FOR (COUNT = 0; COUNT < WORKSPACE; COUNT++) PRINTF(" "); PRINTF(ÔÉÔÌÅ); WORKSPACE = 40 - (STRLEN(ÍÅÎÕ) - (STRLEN(ÍÅÎÕ) % 2)) / 2; FOR (COUNT = 0; COUNT < WORKSPACE; COUNT++) PRINTF(" "); PRINTF(ÍÅÎÕ); FOR(COUNT = 0; COUNT < 75; COUNT++)PRINTF("À"); POKE(15, 0XE5, 4);/*SET TOP OF FRAME*/ FOR (COUNT = 4; COUNT < 23; COUNT++) PRINTF("\N"); FOR (COUNT = 0; COUNT < 75; COUNT++) PRINTF("À"); POKE(15, 0XE4, 20);/*SET BOTTOM OF FRAME*/ CLEARSCR(); Ý /* JUST A DUMB WAY TO GET THE DEVICE NUMBER. ÉT COULD HAVE BEEN WITHIN MAIN() JUST AS EASILY. */ INT GETUNIT() Û UNSIGNED DRIVE; PRINTF("×HAT UNIT IS YOUR WORK DRIVE?"); SCANF("%D", &DRIVE); RETURN(DRIVE); Ý /* USES ÐÌÏÔ TO CLEAR THE SCREEN. É TRIED TO USE LITERALS IN A STRING BUT É COULDN'T GET RELIABLE RESULTS. */ INT CLEARSCR() Û UNSIGNED A, X, Y; A = 147; SYS(15, 0XFFD2, &A, &X, &Y); Ý /* IT TOOK ME A WHILE TO LEARN TO WRITE TO THE DRIVES. ÁND IT AINT HARD*/ INT REMOVE(FILENAME, UNIT) INT UNIT; CHAR FILENAME[]; Û ÆÉÌÅ CMDCH = 5; INT DISKERROR; PRINTF("—ÓCRATCHING %S ’\N", FILENAME); OPEN(CMDCH, (UNIT + 8), 15, ""); DISKERROR = FERROR(); IF (DISKERROR != 0) PRINTF("ÔHIS OPEN ERROR WAS %D\N", DISKERROR); FPRINTF(CMDCH, "S0:%S\N", FILENAME); DISKERROR = FERROR(); IF (DISKERROR != 1) PRINTF("ÄISK ÅRROR ON ÓCRATCH %D\N", FERROR()); CLOSE(CMDCH); DISKERROR = FERROR(); IF (DISKERROR != 0) PRINTF("ÔHE CLOSE ERROR WAS %D\N", DISKERROR); Ý /* USES THE JIFFY TIMER FOR WAITING. */ /* THERE IS A SMALL ERROR IN THE TIME LOOP WHICH COULD BE CORRECTED IF NEEDED. */ INT SLEEP(SEC) INT SEC; Û INT TIME, JIFFY, A, X, Y; A = X = Y = 0; SYS(15, 0XFFDB, &A, &X, &Y); JIFFY = SEC * 60; DO Û SYS(15, 0XFFDE, &A, &X, &Y); TIME = A + (255 * X) + (65025 * Y); Ý WHILE (TIME < JIFFY); RETURN(0); Ý