home *** CD-ROM | disk | FTP | other *** search
- /* prf_print.c */
- /* V1.1 14-3-92 */
-
- #include "prf.h"
-
- char *dayname[]=
- {
- T_SUNDAY,T_MONDAY,T_TUESDAY,T_WEDNESDAY,T_THURSDAY,T_FRIDAY,T_SATURDAY
- };
- char *monthname[]=
- {
- T_JAN,T_FEB,T_MAR,T_APR,T_MAY,T_JUNE,T_JULY,T_AUG,T_SEP,T_OCT,T_NOV,T_DEC
- };
-
- long BuildStatusline(struct prf_info *,UBYTE *);
- long CheckFile(struct prf_info *,UBYTE *);
- long PopFile(struct prf_info *,UBYTE *);
- void PushFile(struct prf_info *,UBYTE *);
- long PrintText(struct prf_info *,UBYTE *);
-
-
- void PrintQueue(struct prf_info *info)
- {
- long end = FALSE;
- UBYTE filename[256];
- FILE *display = NULL;
- info->flags |= FLAG_PRINT;
- if(info->Swd)GT_SetGadgetAttrs(info->SGadgets[GD_Print],info->Swd,NULL,GA_Disabled,TRUE,TAG_DONE);
- if(info->Pwd)GT_SetGadgetAttrs(info->PGadgets[GD_PPrint - PGD],info->Pwd,NULL,GA_Disabled,TRUE,TAG_DONE);
- if(info->Swd)
- {
- SwdTags[0].ti_Data = (ULONG)info->Swd->LeftEdge;
- SwdTags[1].ti_Data = (ULONG)info->Swd->TopEdge;
- }
- sprintf(filename,"CON:%ld/%ld/%ld/%ld/%s",
- SwdTags[0].ti_Data,SwdTags[1].ti_Data,
- SwdTags[2].ti_Data,info->BarHeight * 4,T_DISPLAYNAME);
- if((info->flags & FLAG_DISPLAY) && ((info->Pwd) || (info->Swd)))
- display = fopen(filename,"w");
- while (!end && PopFile(info,filename))
- {
- if(display)fprintf(display,"\n%s",filename);
- switch(CheckFile(info,filename))
- {
- case FILE_TEXT : if(PrintText(info,filename) == CMD_QUIT) end = TRUE;
- info->Special1 = (APTR)filename;
- RemoveName(info);
- info->Special1 = NULL;
- break;
- case FILE_ILBM : if(display)fprintf(display,ERROR_ILBM);break;
- case FILE_FTXT : if(display)fprintf(display,ERROR_FTXT);break;
- case FILE_PROG : if(display)fprintf(display,ERROR_PROG);break;
- case FILE_ICON : if(display)fprintf(display,ERROR_ICON);break;
- case FILE_DIR : if(display)fprintf(display,ERROR_DIR);break;
- default : end = TRUE;
- break;
- }
- }
- if(display) fclose(display);
- if(info->Pwd)GT_SetGadgetAttrs(info->PGadgets[GD_PPrint - PGD],info->Pwd,NULL,GA_Disabled,FALSE,TAG_DONE);
- if(info->Swd)GT_SetGadgetAttrs(info->SGadgets[GD_Print],info->Swd,NULL,GA_Disabled,FALSE,TAG_DONE);
- info->flags ^= FLAG_PRINT;
- }
-
- long PrintText(struct prf_info *info,UBYTE *name)
- {
- long rc = CMD_NEUTRAL;
- long line = 0;
- long lines = 1;
- long page = 1;
- long offset = 0;
- FILE *printer;
- FILE *file;
- UBYTE buffer[STR_SIZE];
- long end = FALSE;
- if(file = fopen(name,"r"))
- {
- if(printer = fopen("prt:","w"))
- {
- if(info->Columns <= 0L) info->Columns = 1L;
- if(info->flags & FLAG_DRAFT) fprintf(printer,"\x1b[1\x22z");
- if(info->flags & FLAG_LQ) fprintf(printer,"\x1b[2\x22z");
- if(info->flags & FLAG_PITCH6) fprintf(printer,"\x1b[1z");
- if(info->flags & FLAG_PITCH8) fprintf(printer,"\x1b[0z");
- if(info->flags & FLAG_10CPI) fprintf(printer,"\x1b[0w");
- if(info->flags & FLAG_12CPI) fprintf(printer,"\x1b[0w\x1b[2w");
- if(info->flags & FLAG_15CPI) fprintf(printer,"\x1b[0w\x1b[4w");
- fprintf(printer,"\x1b[%ld;%lds",info->Lmargin,info->Rmargin);
- offset = BuildStatusline(info,name);
- while(!end)
- {
- if(fgets(buffer,STR_SIZE,file))
- {
- if(DoCommand(info,HandleMsgs(info)) == CMD_QUIT)
- {
- end = TRUE;
- rc = CMD_QUIT;
- }
- if(line == (info->Lines - offset))
- {
- if(*(info->Footline))
- {
- fprintf(printer,"%s\n",info->Footline);
- if (strlen(info->Footline) > info->Columns) line += strlen(info->Footline)/info->Columns;
- }
- if(info->flags & FLAG_PAGE) fprintf(printer,"*** " T_PAGE ": %5d ***",page);
- fprintf(printer,"\f");
- line = 0;line = 0;page++;
- }
- if(line == 0)
- {
- if(*(info->Statusline))
- {
- fprintf(printer,"%s\n",info->Statusline);
- if (strlen(info->Statusline) > info->Columns) line += strlen(info->Statusline)/info->Columns;
- }
- if(info->Headline)
- {
- fprintf(printer,"%s\n\n",info->Headline);
- if (strlen(info->Headline) > info->Columns) line += strlen(info->Headline)/info->Columns;
- }
- }
- if(info->flags & FLAG_LINE)
- {
- fprintf(printer,"%5d:%s",lines,buffer) ;
- if (strlen(buffer) > info->Columns) line += strlen(buffer)/info->Columns;
- }
- else
- {
- fprintf(printer,"%s",buffer);
- if (strlen(buffer) > info->Columns) line += strlen(buffer)/info->Columns;
- }
- if(info->flags & FLAG_CRLF) fprintf(printer,"\n");
- line++,lines++;
- }
- else end = TRUE;
- }
- if(*(info->Footline))fprintf(printer,"%s\n",info->Footline);
- if(info->flags & FLAG_PAGE) fprintf(printer,"*** %5d " T_PAGES T_PRINTED "***\n",page);
- if(info->flags & FLAG_FF) fprintf(printer,"\f");
- fclose(printer);
- }
- else
- {
- PushFile(info,name); /* file not found */
- }
- fclose(file);
- }
- return rc;
- }
-
- long CheckFile(struct prf_info *info, UBYTE *name)
- {
- long rc = FILE_TEXT;
- struct FileInfoBlock *fib;
- BPTR fh,lock;
- if(stricmp(name + (strlen(name) - 5), ".info"))
- {
- if(fib = (struct FileInfoBlock *)AllocDosObject(DOS_FIB,NULL))
- {
- if(lock = Lock(name,ACCESS_READ))
- {
- if(Examine(lock,fib))
- {
- if(fib->fib_DirEntryType > 0)
- {
- rc = FILE_DIR;
- }
- else
- {
- if(!(fib->fib_Protection & FIBB_SCRIPT))
- {
- if(fh = Open(name,MODE_OLDFILE))
- {
- UBYTE b[10];
- if(Read(fh,b,4))
- if(!(strnicmp(b,"\00\00\03\f3",4)))
- {
- rc = FILE_PROG;
- }
- if( (!(strnicmp(b,"form",4))) || (!(strnicmp(b,"list",4))) ||
- (!(strnicmp(b,"prop",4))) || (!(strnicmp(b,"cat" ,3)))
- )
- {
- Read(fh,b,4); /* read length of file */
- Read(fh,b,4); /* read form type */
- if(!(strnicmp(b,"ftxt",4)))rc = FILE_FTXT;
- else if(!(strnicmp(b,"ilbm",4)))rc = FILE_ILBM;
- else rc = FILE_UNKNOWN;
- }
- Close(fh);
- }
- }
- }
- }
- UnLock(lock);
- }
- FreeDosObject(DOS_FIB,(APTR)fib);
- }
- }
- else rc = FILE_ICON;
- return rc;
- }
-
- long PopFile(struct prf_info *info,UBYTE *name)
- {
- long rc = FALSE;
- struct FileNameNode *fnn;
- DetachList(info);
- if(fnn = (struct FileNameNode *)RemHead(&info->FileList))
- {
- if(*(fnn->fnn_Name))
- {
- rc = TRUE;
- strcpy(name,fnn->fnn_Name);
- free(fnn);
- }
- }
- AttachList(info);
- return rc;
- }
-
- void PushFile(struct prf_info *info,UBYTE *name)
- {
- struct FileNameNode *fnn;
- if(*name)
- {
- if(fnn = calloc(1,sizeof(struct FileNameNode)))
- {
- strcpy(fnn->fnn_Name,name);
- fnn->fnn_Node.ln_Name = fnn->fnn_Name;
- DetachList(info);
- AddHead(&info->FileList,(struct Node *)fnn);
- AttachList(info);
- }
- }
- }
-
- long BuildStatusline(struct prf_info *info,UBYTE *name)
- {
- long rc = 0;
- char buffer1[STR_SIZE],buffer2[STR_SIZE],buffer3[STR_SIZE];
- long t;
- struct tm *date;
- time(&t);
- date = localtime(&t);
- *buffer1 = '\0';
- *buffer2 = '\0';
- *buffer3 = '\0';
- if(info->flags & FLAG_DATE) sprintf(buffer1,DATE_FORMAT);
- if(info->flags & FLAG_TIME) sprintf(buffer2,TIME_FORMAT);
- if(info->flags & FLAG_FILE) sprintf(buffer3,NAME_FORMAT);
- if((*(buffer1)) || (*(buffer2)) || (*(buffer3)))
- {
- sprintf(info->Statusline,"*** %s%s%s ***",buffer1,buffer2,buffer3);
- rc += 1;
- }
- if(info->flags & FLAG_PAGE)rc += 1;
- if(*(info->Headline))rc += 2;
- if(*(info->Footline))rc += 1;
- return rc;
- }
-
-
-