/* *** LIST *** BY ÈOWARD ÇIBSON ÃOMPILER: ÐOWER Ã, ÃOMMODORE 64 ÔHIS WILL LIST A ÐOWER Ã SOURCE CODE, THROUGH A ÐÐÉ INTERFACE, TO A ÓTAR ÓÇ10 PRINTER. ÂY SWITCHING THE INTERFACE TO TRANSPARENT MODE, IT WILL BE ABLE TO USE THE ÓTAR'S CHARACTER SET, WHICH CONTAINS ALL OF THE CHARACTERS USED BY Ã, UNLIKE THE Ã64'S SET. ÔHE PROGRAM WILL HAVE TO DO A ÐÅÔÓÃÉÉ TO ÁÓÃÉÉ TRANSLATION. ÔHE PRINTER IS CONFIGURED TO USE ITS ELITE CHARACTER SET, AND A TEN CHARACTER MARGIN. ÔHE MARGIN PERMITS THE OUTPUT TO BE PUNCHED AND STORED IN A BINDER. ÔHE ÓTAR ÓÇ10 DOES NOT NORMALLY SLASH ITS ZEROS, SO IT IS TOLD TO DO THIS ALSO. Á FIVE LINE MARGIN IS LEFT AT THE BOTTOM OF THE PAGE NO MATTER WHAT. ÔHE CODE IS FULLY COMMENTED, SO IT SHOULD BE SIMPLE TO CONFIGURE IT FOR A DIFFERENT PRINTER AND/OR FORMAT. */ #INCLUDE #DEFINE ÄÓËÄÅÖ 8 /* ÄISK ÄRIVE DEVICE NUMBER. */ #DEFINE ÄÓËÃÈÎ 2 /* ÄISK ÄRIVE CHANNEL NUMBER. */ #DEFINE ÐÒÔÄÅÖ 4 /* ÐRINTER ÄEVICE ÎUMBER. */ #DEFINE ÐÒÔÁÄÒ 4 /* ÐRINTER ÓECONDARY ÁDDRESS. */ /* ÔHIS WILL SET THE ÐÐÉ INTERFACE TO TRANSPARENT MODE. */ CHAR LINE, PAGE, FILENAME[16], DATE[20], ESCAPE=27; CHAR DISK=5, PRINTER=6; /* ÆILE ÎUMBERS */ SG10(OUTPUT) /* ÃONFIGURE ÓTAR ÓÇ10 PRINTER. */ ÆÉÌÅ OUTPUT; Û FPRINTF (OUTPUT, "%C%C%C", ESCAPE, 'B', 2); /* ÓELECT ÅLITE ÃHARACTERS */ FPRINTF (OUTPUT, "%C%C%C", ESCAPE, 'M', 10); /* ÓET ÌÈ ÍARGIN */ FPRINTF (OUTPUT, "%C%C%C", ESCAPE, 'N', 5); /* ÓET ÂOTTOM ÍARGIN */ FPRINTF (OUTPUT, "%C%C%C", ESCAPE, 92, 1); /* ÓLASH ÚEROS */ RETURN; Ý MAIN() Û PRINTF ("\N\NÓOURCE ÆILE: "); /* ÇET ÆILENAME FROM USER. */ SCANF ("%16S", FILENAME); IF (16 == STRLEN(FILENAME)) PRINTF ("\NÕSING ÆILENAME '%16S'", FILENAME); IF (0 != STRLEN(FILENAME)) Û CHAR HEAD, HEADCHR; PRINTF ("\NÄO YOU WANT A HEADER [Y/N]? "); HEADCHR=GETCHAR(); HEAD = (HEADCHR=='Y'); IF (HEAD) Û WHILE ('\N'!=GETCHAR()); /* ÃLEAR ÐOWER Ã ÂUFFER */ PRINTF ("\NÄATE: "); /* ÇET DATE FROM USER. */ GETS (DATE); Ý IF (OPEN(DISK,ÄÓËÄÅÖ,ÄÓËÃÈÎ,FILENAME, ",S,R")!=0) /* ÏPEN DISK FILE */ Û IF (0!=OPEN(PRINTER, ÐÒÔÄÅÖ, ÐÒÔÁÄÒ, "" )) /* ÏPEN PRINTER FILE.*/ Û CHAR CCHAR; SG10 (PRINTER); IF (HEAD) Û PAGE=1; LINE=66; HEADER (PRINTER); Ý WHILE ( (CCHAR=GETC(DISK)) != ÅÏÆ) /* ÇET CHAR FROM DISK */ Û CCHAR = PETASC (CCHAR); IF (HEAD && CCHAR==13) Û LINE ++; IF (LINE==58) HEADER (PRINTER); Ý PUTC (CCHAR, PRINTER); /* ÏUT TO PRINTER. */ Ý PUTC ('\014', PRINTER); CLOSE (PRINTER); FCLOSE (DISK); Ý ELSE PUTS ("\NÐRINTER FILE CANNOT BE OPENED."); Ý ELSE PUTS ("\NÄISK FILE CANNOT BE OPENED."); Ý ELSE PUTS ("\NÎO ÆILE ÎAME!"); Ý HEADER(OUTPUT) /* ÐRINT PAGE HEADER */ ÆÉÌÅ *OUTPUT; Û CHAR I, STRING[240]; IF (LINE<66) PUTC('\014',OUTPUT); SPRINTF (STRING ,"\N\NÐÁÇÅ: %2D/ %20S\NÄÁÔÅ:%S\N",PAGE,FILENAME,DATE); FOR (I=1; I<=STRLEN(STRING); I++) STRING[I] = PETASC (STRING[I]); FPUTS (STRING, OUTPUT); FOR (I=1; I<=80; I++) PUTC ('-', OUTPUT); FPUTC ('\N',OUTPUT); PAGE ++; LINE=5; RETURN; Ý CHAR PETASC(PETCHR) /* ÃONVERT ÃHARACTERS FOR PRINTER OUTPUT. */ CHAR PETCHR; Û IF ( 65<=PETCHR && PETCHR<=90 ) /* ÐÅÔÓÃÉÉ TO ÁÓÃÉÉ */ PETCHR += 32; IF ( 193<=PETCHR && PETCHR<=218 ) PETCHR -= 128; SWITCH (PETCHR) /* Ã64 CHARS TO Ã CHARS */ Û CASE 219: PETCHR=123; /* ÌÈ ÃURLY ÂRACKET */ BREAK; CASE 221: PETCHR=125; /* ÒÈ ÃURLY ÂRACKET */ BREAK; CASE 175: PETCHR=126; /* ÔILDE */ BREAK; CASE 164: PETCHR= 95; /* ÕNDERSCORE */ BREAK; CASE 223: PETCHR=245; /* ÖERTICAL ÂAR */ BREAK; DEFAULT: BREAK; Ý RETURN PETCHR; Ý