/* prf_main.c */ /* V1.1 9-3-92 */ #include "prf.h" /* ------------------------------------------------------------------- */ /* for cback.o startup */ /* ------------------------------------------------------------------- */ long _stack = 4000; char *_procname = "*PrintFiles V1.1*"; long priority = 0; long _BackGroundIO = 0; extern BPTR _Backstdout; /* ----------------------------------------------------------------- */ void CheckCmdLine(struct prf_info *,int,union wbstart); void SetSTFlags(struct prf_info *,UBYTE *); struct IntuitionBase *IntuitionBase; struct Library *WorkbenchBase; struct Library *GadToolsBase; struct Library *AslBase; struct Library *IconBase; struct RxsLib *RexxSysBase; struct GfxBase *GfxBase; void main(int argc ,union wbstart argv) { struct prf_info *info; long end = (long)FALSE; if(info = (struct prf_info *)calloc(1,sizeof(struct prf_info))) { if(OpenLibs(info)) { if(OpenApp(info)) { CheckCmdLine(info,argc,argv); SetPrfSignals(info); if(info->flags & FLAG_OPENWINDOW) { info->flags ^= FLAG_OPENWINDOW; ChangeApp(info); } if(info->flags & FLAG_IMMEDIATE) { info->flags ^= FLAG_IMMEDIATE; PrintQueue(info); } while(!end) { SetPrfSignals(info); Wait(info->signals); if(DoCommand(info,HandleMsgs(info)) == CMD_QUIT) end = (long)TRUE; } CloseApp(info); } } CloseLibs(info); } exit(0); } long OpenLibs(struct prf_info *info) { if(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",SYSTEM_VERSION)) { if(WorkbenchBase = OpenLibrary("workbench.library",SYSTEM_VERSION)) { if(AslBase = OpenLibrary("asl.library",SYSTEM_VERSION)) { if(GadToolsBase = OpenLibrary("gadtools.library",SYSTEM_VERSION)) { if(IconBase = OpenLibrary("icon.library",SYSTEM_VERSION)) { if(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",SYSTEM_VERSION)) { if(info->PubScr = LockPubScreen( "Workbench" )) { info->BarHeight = (ULONG)((long)(info->PubScr->BarHeight)); PwdTags[3].ti_Data += info->BarHeight ; SwdTags[3].ti_Data += info->BarHeight ; if(info->VisualInfo = GetVisualInfo(info->PubScr,TAG_DONE )) { NewList(&info->FileList); AttemptOpenRexx(info); Prf_Reset(info); return ((long)TRUE); } } } } } } } } return ((long)FALSE); } void CloseLibs(struct prf_info *info) { struct Node *n; if(info) { CloseRexx(info); if(info->Swd)CloseSwd(info); if(info->Pwd)ClosePwd(info); if(info->VisualInfo) FreeVisualInfo(info->VisualInfo); if(info->PubScr)UnlockPubScreen(0L,info->PubScr); while(n = (struct Node *)RemHead(&info->FileList))free((struct FileNameNode *)n); free(info); } if (GfxBase) CloseLibrary((struct Library *)GfxBase); if (IconBase) CloseLibrary(IconBase); if (GadToolsBase) CloseLibrary(GadToolsBase); if (AslBase) CloseLibrary(AslBase); if (WorkbenchBase) CloseLibrary(WorkbenchBase); if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase); } void Prf_Reset(struct prf_info *info) { struct Node *n; while(n = (struct Node *)RemHead(&info->FileList))free((struct FileNameNode *)n); info->Lines = DEFAULT_LINES; info->Rmargin = DEFAULT_RMARGIN; info->Lmargin = DEFAULT_LMARGIN; info->Lines = DEFAULT_LINES; info->flags = DEFAULT_FLAGS; info->Columns = DEFAULT_RMARGIN - DEFAULT_LMARGIN; strcpy(info->Headline, DEFAULT_HEADLINE); strcpy(info->Footline, DEFAULT_FOOTLINE); RefreshPwd(info); RefreshSwd(info); } void SetPrfSignals(struct prf_info *info) { info->signals = 0L; if(info->Swd) info->signals |= (1L << info->Swd->UserPort->mp_SigBit); if(info->Pwd) info->signals |= (1L << info->Pwd->UserPort->mp_SigBit); if(info->appPort) info->signals |= (1L << info->appPort->mp_SigBit); if(info->rexxPort) info->signals |= (1L << info->rexxPort->mp_SigBit); if(info->prtPort) info->signals |= (1L << info->prtPort->mp_SigBit); } long HandleMsgs(struct prf_info *info) { long rc = CMD_NEUTRAL; if(info->Swd) { while(info->imsg = GT_GetIMsg(info->Swd->UserPort)) { long rc1; if((rc1 = HandleImsg(info)) != CMD_NEUTRAL)rc = rc1; GT_ReplyIMsg(info->imsg); } } if(info->Pwd) { while(info->imsg = GT_GetIMsg(info->Pwd->UserPort)) { long rc1; if((rc1 = HandleImsg(info)) != CMD_NEUTRAL)rc = rc1; GT_ReplyIMsg(info->imsg); } } if(info->appPort) { while(info->amsg = (struct AppMessage *)GetMsg(info->appPort)) { long rc1; if((rc1 = HandleAmsg(info)) != CMD_NEUTRAL)rc = rc1; ReplyMsg((struct Message *)info->amsg); } } if(info->rexxPort) { while(info->rmsg = (struct RexxMsg *)GetMsg(info->rexxPort)) { long rc1; if((rc1 = HandleRexxMsg(info)) != CMD_NEUTRAL)rc = rc1; ReplyMsg((struct Message *)info->rmsg); } } if(info->prtPort) { } return (rc); } void CheckCmdLine(struct prf_info *info,int argc,union wbstart argv) { struct DiskObject *dobj; UBYTE *p,buffer[256],**tta; ULONG a,b; long cmd = CMD_INSERTTAIL; int i; if(argc) { if(argc > 1) { for(i=1;iflags |= FLAG_IMMEDIATE; info->Special1 = (APTR)&argv.args[i][0]; info->Special2 = (APTR)&cmd; InsertName(info); info->Special1 = NULL; info->Special2 = NULL; break; } } } } else { if(dobj = GetDiskObject(argv.msg->sm_ArgList->wa_Name)) { tta = dobj->do_ToolTypes; if(p = (UBYTE *)FindToolType(tta,TOOLTYPE_WD)) { i = sscanf(p,"%ld %ld",&a,&b); if(i == 2) { SwdTags[0].ti_Data = a; SwdTags[1].ti_Data = b; } info->flags |= FLAG_OPENWINDOW; } if(p = (UBYTE *)FindToolType(tta,TOOLTYPE_FLAGS)) { strcpy(buffer,p); SetSTFlags(info,buffer); } if(p = (UBYTE *)FindToolType(tta,TOOLTYPE_HEAD)) { strcpy(info->Headline,p); } if(p = (UBYTE *)FindToolType(tta,TOOLTYPE_FOOT)) { strcpy(info->Footline,p); } if(p = (UBYTE *)FindToolType(tta,TOOLTYPE_LMARGIN)) { info->Lmargin = atol(p); if(info->Lmargin > info->Rmargin)info->Lmargin = DEFAULT_LMARGIN; if((info->Columns = (info->Rmargin - info->Lmargin)) == 0) info->Columns = 1; } if(p = (UBYTE *)FindToolType(tta,TOOLTYPE_RMARGIN)) { info->Rmargin = atol(p); if(info->Rmargin < info->Lmargin)info->Rmargin = DEFAULT_RMARGIN; if((info->Columns = (info->Rmargin - info->Lmargin)) == 0) info->Columns = 1; } if(p = (UBYTE *)FindToolType(tta,TOOLTYPE_LINES)) { info->Lines = atol(p); } } if(argv.msg->sm_NumArgs > 1) { info->flags |= FLAG_IMMEDIATE; for(i = 1; i < argv.msg->sm_NumArgs;i++) { NameFromLock(argv.msg->sm_ArgList[i].wa_Lock,buffer,STR_SIZE); AddPart(buffer,argv.msg->sm_ArgList[i].wa_Name,STR_SIZE); info->Special1 = (APTR)buffer; info->Special2 = (APTR)&cmd; InsertName(info); info->Special1 = NULL; info->Special2 = NULL; } } } } /* ----------------------------------------------------------------- */ void SetSTFlags(struct prf_info *info,UBYTE *buffer) { int i; for(i=0;i< strlen(buffer);i++) { switch(*(buffer+i)) { case CLI_TIME : info->flags |= FLAG_TIME; break; case CLI_FF : info->flags |= FLAG_FF; break; case CLI_FILE : info->flags |= FLAG_FILE; break; case CLI_PAGE : info->flags |= FLAG_PAGE; break; case CLI_LINE : info->flags |= FLAG_LINE; break; case CLI_CRLF : info->flags |= FLAG_CRLF; break; case CLI_DRAFT : DoCommand(info,CMD_DRAFT); break; case CLI_LQ : DoCommand(info,CMD_LQ); break; case CLI_DATE : info->flags |= FLAG_DATE; break; case CLI_WD : info->flags |= FLAG_OPENWINDOW; break; case CLI_10CPI : DoCommand(info,CMD_10CPI); break; case CLI_12CPI : DoCommand(info,CMD_12CPI); break; case CLI_15CPI : DoCommand(info,CMD_15CPI); break; case CLI_PITCH6 : DoCommand(info,CMD_PITCH6); break; case CLI_PITCH8 : DoCommand(info,CMD_PITCH8); break; default : break; } } } /* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */