GMC_DCL(tp_FilTyp, ToFilTyp) { tp_DrvPth DrvPth, GenericDrvPth; boolean IsGeneric; tp_FilHdr GenericFilHdr, TmpGenericFilHdr; if (FilHdr == ERROR || ToFilTyp == ERROR) return ERROR; Do_Search(&DrvPth, &IsGeneric, FilHdr_FKind(FilHdr), FilHdr_FilTyp(FilHdr), ToFilTyp); if (IsGeneric) { GenericFilHdr = Copy_FilHdr(FilHdr); GenericDrvPth = DrvPth; while (IsGeneric) { TmpGenericFilHdr = GenericFilHdr; GenericFilHdr = Do_DrvPth(GenericFilHdr, RootFilPrm, RootFilPrm, GenericDrvPth); IsGeneric = FALSE; /*select*/{ if (GenericFilHdr == TmpGenericFilHdr) { GenericDrvPth = NIL; }else if (FilHdr_FilTyp(GenericFilHdr) != ToFilTyp) { Do_Search(&GenericDrvPth, &IsGeneric, FilHdr_FKind(GenericFilHdr), FilHdr_FilTyp(GenericFilHdr), ToFilTyp); AppendDrvPth(&DrvPth, GenericDrvPth); };}/*select*/; }/*while*/; Ret_FilHdr(GenericFilHdr); if (GenericDrvPth == NIL) { Ret_DrvPth(DrvPth); DrvPth = NIL; }/*if*/; }/*if*/; return DrvPth; }/*Get_DrvPth*/
GMC_DCL(tp_FilTyp, ToFilTyp) { tp_DrvPth DrvPth; if (FilHdr == ERROR || InhFilPrm == ERROR || ToFilTyp == ERROR) { Ret_FilHdr(FilHdr); return ERROR; }/*if*/; if (FilHdr_FilTyp(FilHdr) == ToFilTyp) { if (PrecFilPrm != RootFilPrm) { Do_Log("Ignoring parameters of", FilHdr, LOGLEVEL_IgnorePrm); }/*if*/; return FilHdr; }/*if*/; DrvPth = Get_DrvPth(FilHdr, ToFilTyp); if (DrvPth == ERROR) { SystemError("Cannot derive to <%s> from <%s>\n", FilTyp_FTName(ToFilTyp), FilTyp_FTName(FilHdr_FilTyp(FilHdr))); Ret_FilHdr(FilHdr); return ERROR; }/*if*/; FilHdr = Do_DrvPth(FilHdr, InhFilPrm, PrecFilPrm, DrvPth); Ret_DrvPth(DrvPth); return FilHdr; }/*Do_Deriv*/
GMC_DCL(tp_FilPrm, FilPrm) { tp_FilHdr ValFilHdr; tp_FilTyp FilTyp; tp_DrvPth DrvPth, DrvPthElm; tp_PrmTypLst PrmTypLst; Writeln(FilDsc, "*?* Possible Parameters :"); Clr_PrmTypMarks(); if (FilPrm == RootFilPrm) { SetFilHdr_PrmTypMarks(FilHdr); WriteMarkedPrmTyps(FilDsc); return; }/*if*/; ValFilHdr = LocHdr_FilHdr(FilPVal_LocHdr(FilPrm_FilPVal(FilPrm))); FilTyp = FTName_FilTyp(FilHdr_Ident(ValFilHdr)); Ret_FilHdr(ValFilHdr); if (FilTyp == ERROR) { return; }/*if*/; if (FilHdr_FilTyp(FilHdr) != FilTyp) { DrvPth = Get_DrvPth(FilHdr, FilTyp); if (DrvPth == ERROR) { SystemError("Cannot derive to <%s>\n", FilTyp_FTName(FilTyp)); return; }/*if*/; for (DrvPthElm = DrvPth; DrvPthElm != NIL; DrvPthElm = DrvPth_Next(DrvPthElm)) { if (DrvPth_DPType(DrvPthElm) == DPT_Drv) { PrmTypLst = DrvPth_PrmTypLst(DrvPthElm); SetPrmTypLst_Marks(PrmTypLst); }/*if*/; }/*for*/; Ret_DrvPth(DrvPth); }/*if*/; WriteMarkedPrmTyps(FilDsc); }/*WritePrmHelp*/
GMC_DCL(tp_Key, Key) { if (FilHdr_FilTyp(FilHdr) == TargetsFilTyp) { return Get_KeyDrv(FilHdr, FK_VirTgtText, Key); }/*if*/; FilHdr = Do_Deriv(FilHdr, RootFilPrm, RootFilPrm, VirTargetsFilTyp); if (strcmp(Key, ".") == 0) { return Do_Deriv(FilHdr, RootFilPrm, RootFilPrm, VirDirFilTyp); }/*if*/; return Get_KeyDrv(FilHdr, FK_VirTgt, Key); }/*Do_VTgt*/
GMC_DCL(tp_FilHdr, FilHdr) { FORBIDDEN(IsTargetsPtr(FilHdr)); while (!IsSource(FilHdr)) { if (IsVTgtText(FilHdr) || FilHdr_FilTyp(FilHdr) == VirTargetsFilTyp) { return FilHdr_Father(FilHdr_Father(FilHdr)); }/*if*/; if (IsVTgt(FilHdr)) { return FilHdr_Father(FilHdr_Father(FilHdr_Father(FilHdr))); }/*if*/; FilHdr = FilHdr_Father(FilHdr); }/*while*/; return FilHdr; }/*Get_BaseVTgtFilHdr*/
GMC_DCL(tp_FilHdr, ListFilHdr) { tp_LocElm FirstLE, LastLE; if (!(IsList(FilHdr) || IsPntr(FilHdr))) { SystemError("Input to :map must be a list.\n"); return ERROR; }/*if*/; FirstLE = NIL; LastLE = NIL; Get_Map(&FirstLE, &LastLE, FilHdr, FilHdr_FilPrm(ListFilHdr), FilTyp_ArgFilTyp(FilHdr_FilTyp(ListFilHdr)), ListFilHdr); Clr_UnionFlags(FilHdr); return FirstLE; }/*Make_MapLocElm*/
GMC_DCL(tp_FilHdr, FilHdr) { size_t sz; tp_FilHdr OutFilHdr; tp_FTName FTName; OutFilHdr = Copy_FilHdr(FilHdr); if (IsInstance(OutFilHdr)) OutFilHdr = FilHdr_Father(OutFilHdr); FTName = FilTyp_ShortFTName(FilHdr_FilTyp(OutFilHdr)); sz = snprintf(WorkFileName, MAX_FileName, "%s/%s", Job->JobDirName, FTName); if (sz >= MAX_FileName) { (void)fprintf(stderr, "File name too long (MAX_FileName=%d): %s/%s\n", MAX_FileName, Job->JobDirName, FTName); exit(11); }/*if*/; Ret_FilHdr(OutFilHdr); }/*Get_WorkFileName*/
GMC_DCL(tp_Key, Key) { tp_FilHdr DirFilHdr, DirSymFilHdr, SymDirFilHdr; tp_FilTyp FilTyp; tp_FKind FKind; if (FilHdr == ERROR || Key == ERROR) { Ret_FilHdr(FilHdr); return ERROR; }/*if*/; if (strcmp(Key, ".") == 0) { return FilHdr; }/*if*/; if (strcmp(Key, "") == 0 && !(FilHdr == RootFilHdr || FilHdr == NetRootFilHdr)) { return FilHdr; }/*if*/; if (IsSource(FilHdr)) { if (strcmp(Key, "..") == 0) { if (FilHdr == RootFilHdr) { return FilHdr; }/*if*/; DirFilHdr = FilHdr_Father(Copy_FilHdr(FilHdr)); if (DirFilHdr == NetRootFilHdr) { Ret_FilHdr(DirFilHdr); return FilHdr; }/*if*/; DirSymFilHdr = FilHdr_Father(Deref_SymLink(Copy_FilHdr(FilHdr))); SymDirFilHdr = Deref_SymLink(Copy_FilHdr(DirFilHdr)); Ret_FilHdr(FilHdr); if (DirSymFilHdr == SymDirFilHdr) { Ret_FilHdr(DirSymFilHdr); Ret_FilHdr(SymDirFilHdr); return DirFilHdr; }/*if*/; Ret_FilHdr(DirFilHdr); Ret_FilHdr(SymDirFilHdr); return FilHdr_AliasFilHdr(DirSymFilHdr); }/*if*/; if (FilHdr == CacheDirFilHdr) { if (strlen(Key) == 1) { return FilHdr; }/*if*/; Ret_FilHdr(FilHdr); return CacheFileName_FilHdr(Key); }/*if*/; return Get_KeyDrv(FilHdr, FK_SrcReg, Key); }/*if*/; if (IsVirDir(FilHdr)) { return Get_KeyDrv(FilHdr, FK_VirDirElm, Key); }/*if*/; if (IsTargets(FilHdr)) { return Get_KeyDrv(FilHdr, FK_ActTgtText, Key); }/*if*/; if (IsPntr(FilHdr)) { return Get_Drv(FilHdr, FK_PntrElm, Key_FilTyp(Key), RootFilPrm, Key); }/*if*/; if (IsDrvDirElm(FilHdr)) { return Get_KeyDrv(FilHdr, FK_DrvDirElm, Key); }/*if*/; if (!IsKeyList(FilHdr)) { FilHdr_Error("Cannot select from <%s>.\n", FilHdr); Ret_FilHdr(FilHdr); return ERROR; }/*if*/; FilTyp = FilHdr_FilTyp(FilHdr); /*select*/{ if (FilTyp == ActTargetsFilTyp) { FKind = FK_ActTgt; }else if (FilTyp == VirTargetsFilTyp) { FKind = FK_VirTgt; }else{ FKind = FK_DrvDirElm; };}/*select*/; return Get_KeyDrv(FilHdr, FKind, Key); }/*Do_Key*/