Example #1
0
File: fm.c Project: palmerc/lab
boolean FileGetSomeBytes (blkhdrtype   *BlkHdr,     farlongtype  FileOffset,
                          unsigned      SomeBytes,
                          ft F,lt Z,zz *Status,     addrtype     BytesAddr)
{
size_t  CheckCount  = 0;
int     SeekStatus  = 0;

    SeekStatus = fseek (BlkHdr->BlkFile, FileOffset, SEEK_SET);
    if (SeekStatus != 0)
    {
        sprintf  (Msg, TraceStr(9),
/* "***FileGetSomeBytes... SeekStatus= %u\n" */
                  SeekStatus);
        TraceMsg  (0,   Msg);
       *Status = File_BadDiskWrite;
    }

    CheckCount = fread (BytesAddr,       SomeBytes,  (size_t )1,
                        BlkHdr->BlkFile);
    if (CheckCount != (int )1)
    {
        sprintf  (Msg, TraceStr(10),
/* "***FileGetSomeBytes... CheckCount= %u\n" */
                  CheckCount);
        TraceMsg  (0,   Msg);
       *Status = File_BadDiskWrite;
    }

    if (SomeBytes == 0)
       *Status = Err_NoBytesMoved;

TRACK(TrackBak,"FileGetSomeBytes\n");
return(STAT);
}
Example #2
0
//
//   DetermineUnitGeometry()
//
// Extract and determine the logical and physical geometry.
//
VOID DetermineUnitGeometry (NPU npU)
{
  NPA	 npA;
  NPGEO  npGEO;
  ULONG  MaxSec;
  USHORT SecPerCyl;
  UCHAR  rc;

T('G') T('<')
  if ((npU->Flags & (UCBF_NOTPRESENT | UCBF_FORCE)) == UCBF_NOTPRESENT) return;
  npA = npU->npA;

  // Reconsile the physical geometries.

  if (npU->FlagsT & UTBF_IDEGEOMETRYVALID) {
    npGEO = &npU->IDEPhysGeom;
  } else {
    npU->Status = UTS_NOT_PRESENT;
  }
  npU->PhysGeom = *npGEO;

  if ((npU->Flags & (UCBF_NOTPRESENT | UCBF_ATAPIDEVICE)) == 0) {
    // Get the BIOS Parameter Block Logical geometry for this drive.

    if (!BPBGeometryGet (npU)) {
      if (npU->Flags & UCBF_ONTRACK)
	npU->PhysGeom.TotalSectors -= ONTRACK_SECTOR_OFFSET;

      if (npU->BPBLogGeom.NumHeads * npU->BPBLogGeom.SectorsPerTrack)
	npU->FlagsT |= UTBF_BPBGEOMETRYVALID;
    }

    // Get the BIOS reported and Logical geometry (only if BPB geom failed!)

    if (InitActive && !Int13GeometryGet (npU))
      if (npU->I13LogGeom.NumHeads * npU->I13LogGeom.SectorsPerTrack)
	npU->FlagsT |= UTBF_I13GEOMETRYVALID;
  }

  // Calculate a logical geometry based on the physical geometry.

  LogGeomCalculate (&npU->IDELogGeom, &npU->PhysGeom);
  if ((npU->IDELogGeom.NumHeads * npU->IDELogGeom.SectorsPerTrack) == 0)
    npU->FlagsT &= ~UTBF_IDEGEOMETRYVALID;

#if TRACES
  if (Debug & 16) {
  TWRITE(16)
  TraceStr ("LGeoB: H:%u S:%u",      npU->BPBLogGeom.NumHeads,
				     npU->BPBLogGeom.SectorsPerTrack);
  TWRITE(16)
  TraceStr ("LGeo3: H:%u S:%u",      npU->I13LogGeom.NumHeads,
				     npU->I13LogGeom.SectorsPerTrack);
  TWRITE(16)
  TraceStr ("LGeoI: C:%u H:%u S:%u", npU->IDELogGeom.TotalCylinders,
				     npU->IDELogGeom.NumHeads,
				     npU->IDELogGeom.SectorsPerTrack);
  TWRITE(16)
}
Example #3
0
File: core01.c Project: palmerc/lab
boolean    CoreMoveBytes  (addrtype      Source,      sizeinbytes   SourceSize,
                           sizeinbytes   TargetSize,
                           ft F,lt Z,zz *Status,      addrtype     *Target )
{
  if (SourceSize == 0)
  {
    *Target = Source;
    *Status = Err_NoBytesMoved;
  }

  if (Normal(*Status))
  if (CoreMoreCore     (TargetSize,              McStat,     Target))
     memcpy            ((char *)*Target, (char *)Source,     SourceSize);

  if (sprintf (Msg, TraceStr(66),
/*  "    CoreMoveBytes(%u) @%x to %x NewSize(%u)\n"  */
               SourceSize, Source, *Target, TargetSize))
     SendMsg (0, Msg);

  if (Normal(*Status))
     CoreFreeCoreSpace (&Source,                 SourceSize, McStat);

TRACK(TrackBak,"CoreMoveBytes\n");
return(STAT);
}
Example #4
0
File: core01.c Project: palmerc/lab
int        CompareBytes  (addrtype      Source,      addrtype      CmpVal,
                          sizeinbytes   ByteCount,   ft F,lt Z,zz *Status)
{
int i = 0;

    if (DeBug >= 2)
    if (sprintf (Msg, TraceStr(87),
/*  "       %u Bytes compared testvalue= %u \n"  */
             ByteCount, Source, CmpVal,
             i = memcmp ((char *)Source, (char *)CmpVal, ByteCount)))
       TraceMsg (0, Msg);

    if (i<0)
       *Status = Env_Less;

    else if(i>0)
       *Status = Env_Gtr;

    else
       *Status = Env_Normal;

StackTrack ("CompareBytes\n");
STAT;
return(i);
}
Example #5
0
File: core01.c Project: palmerc/lab
/*+-----------------------------------------------------------------------+
~CM                       GENERIC EXTERNAL UTILITIES                      !
  +-----------------------------------------------------------------------+*/
void       MoveBytes      (addrtype     Source,      addrtype  Target,
                           sizeinbytes  ByteCount)
{
    memcpy    ((char *)Target,    (char *)Source,    ByteCount);

    if (DeBug >= 2 || MemBug)
    {
       sprintf (Msg, TraceStr(82),
/*  "       %u Bytes moved from %x to %x "  */
                ByteCount, Source, Target);
       TraceMsg (0, Msg);
       switch (ByteCount)
       {
          case  1 :
            sprintf (Msg, TraceStr(83),
/*  " %4u\n"  */
                     *(char      *)Source);
            break;

          case  2 :
            sprintf (Msg, TraceStr(84),
/*  " %4u\n"  */
                    *(short     *)Source);
            break;

          case  8 :
            sprintf (Msg, TraceStr(85),
/*  "<[%4lu:%4lu]> || <%6xX : %6xX>\n"  */
                     *(longtype *)Source,
                     *(longtype *)((char *)Source + sizeof (long)),
                     *(addrtype *)Source,
                     *(addrtype *)((char *)Source + sizeof (addrtype)));
            break;

          case  4 :
          default :
            sprintf (Msg, TraceStr(86),
/*  "<%4ld>  || <%6xX>\n"  */
                     *(lt64     *)Source,  *(addrtype  *)Source);
       }
       TraceMsg (0, Msg);
    }

StackTrack ("MoveBytes\n");
return;
}
Example #6
0
File: fm.c Project: palmerc/lab
boolean FileInChunk     (numtype      *Chunk,    blkhdrtype *BlkHdr,
                         boolean       Release,
                         ft F,lt Z,zz *Status,   vbntype    *VbnBlk)
{
addrtype    ChunkAddr    = NullPtr;
bytessize   UnitSize     = 0;
indextype   UnitCount    = 0;
sizetype    ChunkSize    = 0;
sizetype    BlkSize      = 0;
chunkstruc  ChunkRef; 
chunkstruc *ChunkRefPtr  = &ChunkRef;
addrtype    ChunkBlk     = NullPtr;
indextype   BlkIndex     = 0;

  if (MemGetIndex       (BlkHdr->BlkDirChunk,        *VbnBlk,
                         McStat,                     &BlkIndex))
  if (MemGetWord        (BlkHdr->BlkSizeChunk,        BlkIndex, 
                         McStat,                     &BlkSize))
  if (!*Chunk)
      MemNewChunkBlk    (BlkSize,  McStat,    Chunk, &ChunkBlk);
  else {
     if (MemGetChunkAddr   (*Chunk,   McStat,    &ChunkAddr))
        ChunkBlk  = (addrtype )((char *)ChunkAddr - sizeof (chunkstruc));
  }

  if (Normal(*Status))
  if (FileInBlk (&ChunkBlk,   BlkSize,           
                 BlkHdr,      False,       McStat,    VbnBlk))
  {
     ChunkRefPtr = (chunkstruc *)ChunkBlk;
     UnitSize    = ChunkRefPtr->UnitSize;
     UnitCount   = ChunkRefPtr->UnitCount;

     MemPutChunkStruc   (*Chunk,  (chunkstruc *)ChunkBlk,
                         DbmDbId,               McStat);

     ChunkSize   = UnitSize * UnitCount;
     if (ChunkSize != BlkSize - sizeof (chunkstruc))
     if (sprintf (Msg, TraceStr(41),
/* " ***ERROR... FileInChunk. Size %4u != BlkSize %4u\n" */
                  ChunkSize, BlkSize))
       TraceMsg (0, Msg);
  }

  if (Normal(*Status))
  if (Release)
      MemFreeFileBlk (BlkHdr,             McStat,        VbnBlk);

TRACK(TrackBak,"FileInChunk\n");
return(STAT);
}
Example #7
0
File: ogrp.c Project: palmerc/lab
/*     12.0.4                                                              */
boolean GrpGetObject     (dbheader     *CoreDb,    objheader    *ObjHdr,
                          indextype     Index,
                          ft F,lt Z,zz *Status,    addrtype     *RgnAddr)
{
numtype         RgnNum       = 0;
numtype         Chunk        = 0;
addrtype        ChunkAddr    = NullPtr;
indextype       LocalIndex   = 0;

  if (Normal(*Status))
  {
     if (Index   < ObjHdr->BaseIndex)
     {
        RgnNum     = 0;
        LocalIndex = Index;
        if (ObjHdr->BaseRegion == 0)
           GrpGetRegion     (CoreDb,     (grpheader *)ObjHdr,  0,
                             McStat,    &ObjHdr->BaseRegion,  &ChunkAddr);
        else
           MemGetChunkAddr  (ObjHdr->BaseRegion,  McStat,     &ChunkAddr);

        Chunk      = ObjHdr->BaseRegion;

     } else {
        RgnNum     = (Index - ObjHdr->BaseIndex) / ObjHdr->RegionObjects;
        if (ObjHdr->BaseIndex)
           RgnNum++;
        LocalIndex = (Index - ObjHdr->BaseIndex)  % ObjHdr->RegionObjects;
        GrpGetRegion        (CoreDb,     (grpheader *)ObjHdr,  RgnNum,
                             McStat,    &Chunk,               &ChunkAddr);
     }
    *RgnAddr    = ChunkAddr;

  }
  if (Normal(*Status))
  if (Admin_Run)
  if (CoreDb->DbId < PrimalId)
     MemPutBit        (ObjHdr->DirtyRegionDir,  RgnNum, 1, McStat);

  if (!Normal(*Status) || GrpBug || DbmBug || DeBug)
  if (sprintf (Msg, TraceStr(6),
/* "   GrpGetObject DbId=%3u Obj[%3u] Index=%4u Region[%2u:%2u]\n" */
               CoreDb->DbId, ObjHdr->LocalObjNum,  Index,
               RgnNum, LocalIndex))
     TraceMsg (0, Msg);

TRACK(TrackBak,"GrpGetObject\n");
return (STAT);
}
Example #8
0
File: fm.c Project: palmerc/lab
boolean FileGetZeroedChunk (vbntype       VbnBlk,    blkhdrtype *BlkHdr, 
                            boolean       Release,   
                            ft F,lt Z,zz *Status,    numtype    *Chunk)  
{
bytessize   UnitSize     = 0;
indextype   UnitCount    = 0;
bytessize   ChunkSize    = 0;
vbntype     ChunkRefVbn  = VbnBlk;
chunkstruc  ChunkRef; 
chunkstruc *ChunkRefPtr  = &ChunkRef;
addrtype    ChunkAddr    = NullPtr;

  /* Load Chunk Struc Into Core                                            */
  if (FileInBlk ((addrtype *)&ChunkRefPtr,              sizeof(chunkstruc),
                 BlkHdr,      Release,     McStat,     &ChunkRefVbn))
  {
     UnitSize  = ChunkRefPtr->UnitSize;
     UnitCount = ChunkRefPtr->UnitCount;
     ChunkSize = UnitCount * UnitSize;

     if (!*Chunk)
        MemMakeChunk (UnitSize,  UnitCount, ChunkRef.ExtendQty,
                      DbmDbId,   McStat,    Chunk);

     if (Normal(*Status))
        MemPutStackPtr (*Chunk, ChunkRef.StackPtr, McStat);


     if (!ChunkSize)
     if (sprintf (Msg, TraceStr(43),
/* "    ZERO BLOCK [%3u] ZERO Chunk[%4u](%2u * %2u)\n" */
                  VbnBlk, *Chunk, UnitCount, UnitSize))
        TraceMsg (0, Msg);

     if (MemGetChunkAddr (*Chunk,     McStat,      &ChunkAddr))
        memset           (ChunkAddr,  NULL,    (size_t )ChunkSize);
  }

  if (Normal(*Status))
  if (DeBug)
      MemDumpChunk   (0,                 *Chunk,         McStat);

TRACK(TrackBak,"FileGetZeroedChunk\n");
return(STAT);
}
Example #9
0
/*--------------------------------------------*/
USHORT SetupCommonPre (NPA npA)
{
  CHAR	 Unit;
  USHORT Cap;
  NPU	 npU;
  UCHAR  MinIFTiming, MinUDMA;

#define Restrictions (npA->PCIInfo.Ident.TModes)

  /*
   ** If there were no units attached, then the ACB has been
   ** deallocated, so do no configuration on this IDE channel.
   */

  if (!npA->cUnits) return 1;

  npA->PIIX_IDEtim  = 0;   /* clear timing value initially */
  npA->PIIX_SIDEtim = 0;   /* clear timing value initially */
  npA->DMAtim[0]    = 0;   /* clear timing value initially */
  npA->DMAtim[1]    = 0;   /* clear timing value initially */

  if (npA->Cap & CHIPCAP_SATA) npA->Cap |= CHANCAP_CABLE80 | CHANCAP_SPEED;
  if (npA->Cap & CHANCAP_CABLE80) npA->FlagsT |= ATBF_80WIRE;
  Cap = npA->Cap;
  if (!(npA->FlagsT & ATBF_80WIRE))
    Cap &= ~CHANCAP_SPEED;

  MinIFTiming = 2;
  MinUDMA = 15;

  for (npU = npA->UnitCB, Unit = npA->cUnits; --Unit >= 0; npU++) {
    if (!(Cap & CHIPCAP_ULTRAATA)) npU->UltraDMAMode = 0;

    if (!(Cap & CHIPCAP_ATA66) && (npU->UltraDMAMode > ULTRADMAMODE_2))
      npU->UltraDMAMode = ULTRADMAMODE_2;

    if (!(Cap & CHIPCAP_ATA100) && (npU->UltraDMAMode > ULTRADMAMODE_4))
      npU->UltraDMAMode = ULTRADMAMODE_4;

    if (!(Cap & CHIPCAP_ATA133) && (npU->UltraDMAMode > ULTRADMAMODE_5))
      npU->UltraDMAMode = ULTRADMAMODE_5;

TSTR("UF:%lX,O:%X", npU->Flags, npU->FlagsT);

    if (npU->FlagsT & UTBF_NOT_BM) npU->Flags &= ~UCBF_BM_DMA;

    if (npU->Flags & UCBF_ATAPIDEVICE) {
      npA->FlagsT |= ATBF_ATAPIPRESENT;
      if ((!npU->ATAVersion || (npA->HardwareType == generic))
	 && !(npU->FlagsT & UTBF_SET_BM))
	npU->Flags &= ~UCBF_BM_DMA;

      if (npA->Cap & CHIPCAP_ATAPIPIO32)  npU->Flags |= UCBF_PIO32;
      if (!(npA->Cap & CHIPCAP_ATAPIDMA)) npU->Flags &= ~UCBF_BM_DMA;
    } else {
      if (npA->Cap & CHIPCAP_ATAPIO32)	npU->Flags |= UCBF_PIO32;
      if (!(npA->Cap & CHIPCAP_ATADMA)) npU->Flags &= ~UCBF_BM_DMA;
    }

    if (npU->Features & 0x2000) npU->Flags &= ~UCBF_PIO32;

    npU->InterfaceTiming = (npU->CurPIOMode >= 3) ? npU->CurPIOMode - 2 : 0;

    if (!(npU->UltraDMAMode | npU->CurDMAMode))
      npU->Flags &= ~UCBF_BM_DMA;

    if (npU->Flags & UCBF_BM_DMA) {
      if (npU->CurDMAMode && !npU->UltraDMAMode) {
	if ((npU->InterfaceTiming == 0) && (Restrictions & TR_PIO0_WITH_DMA)) {
	  npU->InterfaceTiming = npU->CurDMAMode;
	} else if (Restrictions & TR_PIO_EQ_DMA) {
	  if (npU->InterfaceTiming > npU->CurDMAMode)
	    npU->InterfaceTiming = npU->CurDMAMode;
	}
      } else {
	if (MinUDMA > npU->UltraDMAMode) MinUDMA = npU->UltraDMAMode;
      }
    } else {
      npU->CurDMAMode = npU->UltraDMAMode = 0;
    }

    if (MinIFTiming > npU->InterfaceTiming)
      MinIFTiming = npU->InterfaceTiming;

TS("F:%lX,", npU->Flags)
  }

  npA->FlagsT &= ~ATBF_BM_DMA;

  for (npU = npA->UnitCB, Unit = npA->cUnits; --Unit >= 0; npU++) {

    if (Restrictions & TR_PIO_SHARED) npU->InterfaceTiming = MinIFTiming;
    if ((npU->Flags & UCBF_BM_DMA) && npU->CurDMAMode && !npU->UltraDMAMode) {
      npU->CurDMAMode = npU->InterfaceTiming;
      if (!npU->CurDMAMode) npU->Flags &= ~UCBF_BM_DMA;
    }
    if (npU->InterfaceTiming == 0) {
      npU->CurPIOMode = 0;
    } else {
      if (npU->CurPIOMode || !(Restrictions & TR_PIO0_WITH_DMA))
	npU->CurPIOMode = npU->InterfaceTiming + 2;
    }
    if (npU->UltraDMAMode && (Restrictions & TR_UDMA_SHARED))
      npU->UltraDMAMode = MinUDMA;

    if (npU->UltraDMAMode >= ULTRADMAMODE_3) npA->Cap |= CHANREQ_ATA66;
    if (npU->UltraDMAMode >= ULTRADMAMODE_5) npA->Cap |= CHANREQ_ATA100;
    if (npU->UltraDMAMode >= ULTRADMAMODE_6) npA->Cap |= CHANREQ_ATA133;

    if (npU->Flags & UCBF_BM_DMA) npA->FlagsT |= ATBF_BM_DMA;
  }

#if TRACES
  if (Debug & 2) {
    TraceStr ("Cbl:%02X,Lvl:%X,Cap:%04X,", npA->FlagsT & ATBF_80WIRE, npA->PCIInfo.Level, npA->Cap);
  }
#endif

  CurPCIInfo = &npA->PCIInfo;
  CurLevel   = npA->PCIInfo.Level;
  RegOffset  = 0;

  return 0;
}
Example #10
0
File: odbm.c Project: palmerc/lab
/*+-----------------------------------------------------------------------+*
 ~L                          DOWN LOAD
 *+-----------------------------------------------------------------------+*/
boolean DbmLoadObjHdr    (tokentype    *DbToken,  numtype     LocalObj,
                          ft F,lt Z,zz *Status,   objheader **ObjHdr)
{
boolean     TmpWriteHdr  = WriteHdr;
boolean     TmpSwapBug   = SwapBug;
int         TmpDeBug     = DeBug;
vbntype     MaxVbn       = 0;
vbntype     ObjHdrVbn    = 0;
boolean     Release      = False;    
dbheader   *DbHdr        = NullPtr;
statustype  DumpStatus   = Env_Normal;

  if (!DbmBug)
     WriteHdr    = True;

  SwapBug        = SwapBug;
  DeBug          = DeBug;

  DbmDbId        = DbToken->DbId;

  if (TmFetchCoreDb  (DbToken,           McStat, &DbHdr))
  if (MemGetStackPtr (DbHdr->ObjVbnDir,  McStat, &MaxVbn))
  if (LocalObj >= MaxVbn)
  if (sprintf (Msg, TraceStr(21),
/* " ***Error...ObjHdrNotExist for LocalObj=%3u MaxVbn=%u\n" */
               LocalObj, MaxVbn))
  if (TraceMsg (0, Msg))
  {
      MemDumpChunk   (0,  DbHdr->ObjVbnDir,  Dump_Status);
     *Status = Dbm_ObjHdrNotExist;
  }

  if (Normal(*Status))
  if (MemGetVbn (DbHdr->ObjVbnDir,      LocalObj, McStat,      &ObjHdrVbn))

  if (!ObjHdrVbn)
  if (sprintf (Msg, TraceStr(22),
/* " ***Error...ObjHdrNotExist for LocalObj=%3u Vbn=%u\n" */
               LocalObj, ObjHdrVbn))
  if (TraceMsg (0, Msg))
  {
      if (DeBug)
         MemDumpChunk   (0,  DbHdr->ObjVbnDir,  Dump_Status);
     *Status = Dbm_ObjHdrNotExist;
  }

  if (Normal(*Status))
  if (DbHdr->BlkHdr.BlkFile)
  {
#ifdef __DISPLAY_MESSAGE__
     if (DeBug || DbmBug)
     if (sprintf (Msg, TraceStr(23),
/* "\n LOAD OBJHDR[%2u] from FilePtr = %x\n"  */
                  LocalObj, DbHdr->BlkHdr.BlkFile))
         TraceMsg (0, Msg);
#endif /* __DISPLAY_MESSAGE__ */
  } else {
     *Status = File_NotFound;
#ifdef __DISPLAY_MESSAGE__
      sprintf (Msg, TraceStr(24),
/* " DbmLoad CoreDb[%2u]::ObjHdr[%2u] has a NULL FilePtr"  */
               DbHdr->DbId, LocalObj);
      SendMsg (0, Msg);
#endif /* __DISPLAY_MESSAGE__ */
  } 

  /* Reserve space for ObjHeader */
  if (Normal(*Status))
  if (CoreMoreCore (sizeof(objheader),  McStat,     (addrtype *)ObjHdr))

  if (FileInBlk    ((addrtype *)ObjHdr,        (bytessize )sizeof (objheader),
                    &DbHdr->BlkHdr,     Release,  McStat,      &ObjHdrVbn)) 

  if (DeBug || DbmBug)
  if (sprintf (Msg, TraceStr(25),
/* "    OBJ HDR restored from FileVbn[%3u]\n" */
               ObjHdrVbn))
     TraceMsg (0, Msg);
 
  if (Normal(*Status))
  {
     (*ObjHdr)->ObjectLockDir      = 0;
     (*ObjHdr)->FieldNumMap        = 0;
     (*ObjHdr)->LocalAttrNumMap    = 0;
     (*ObjHdr)->FieldOffsetDir     = 0;
     (*ObjHdr)->ClassOffsetDir     = 0;
     (*ObjHdr)->FieldRefDir        = 0;
     (*ObjHdr)->FieldMapDir        = 0;
     (*ObjHdr)->FieldArrayDir      = 0;

     (*ObjHdr)->NoRegionsInCore    = True;


     if (FREEZE_GRP_PACKETS  == True)
     {
        (*ObjHdr)->FreezeClass     = 1;
        (*ObjHdr)->DiskCache       = False;
     } else {
        (*ObjHdr)->FreezeClass     = 0;
        (*ObjHdr)->DiskCache       = True;
     }
     if ((*ObjHdr)->ObjNum        == lSetNode_ObjNum
     ||  (*ObjHdr)->ObjNum        == gSetNode_ObjNum)
        (*ObjHdr)->FreezeClass     = 1;

     (*ObjHdr)->RegionChunkDir     = 0;
     (*ObjHdr)->RegionVbnDir       = 0;
     (*ObjHdr)->RegionSwapDir      = 0;
     (*ObjHdr)->RegionFreezeDir    = 0;

     (*ObjHdr)->TextChunk          = 0;
     (*ObjHdr)->ExObjectTbl        = 0;
     (*ObjHdr)->RgnStatusDir       = 0;
  }

  if (Normal(*Status)) 
  if (DbmFileInObjHdr    (*ObjHdr,  DbmDbId, &DbHdr->BlkHdr, Release, McStat))
  if (MemPutAddr         (DbHdr->ObjHdrDir,   LocalObj,
                          *(addrtype *)ObjHdr,    McStat))
  if (DeBug)
      MemDumpChunk   (0,  DbHdr->ObjHdrDir,  Dump_Status);

#ifdef __DISPLAY_MESSAGE__
  if (DeBug >= 0)
  if (sprintf (Msg, TraceStr(26),
/* "  CoreDb[%2u] ObjHdr[%2u] Loaded @ %x\n" */
               DbToken->DbId, LocalObj, *ObjHdr))
      TraceMsg (0, Msg);
#endif /* __DISPLAY_MESSAGE__ */
  if (DbmBug)
  if (*ObjHdr)
    OaDumpObjHdr  (0, DbToken,  (*ObjHdr)->ObjNum,   McStat);


  SwapBug        = TmpSwapBug;
  DeBug          = TmpDeBug;
  WriteHdr       = TmpWriteHdr;

/*  ...  Done by calling procedure after return from here  ...
  if (Normal(*Status)) 
      OmChkImage    (DbToken,    (*ObjHdr)->ObjNum,    McStat);
*/

TRACK(TrackBak,"DbmLoadObjHdr\n");
return(STAT);
}
Example #11
0
File: mem01.c Project: palmerc/lab
boolean Mem_MoveChunk   (numtype       ChunkNum,  ft F,lt Z,zz *Status,  
                         addrtype     *FreeAddr,  sizeinbytes  *FreeSize)
{
addrtype      Source         = NullPtr;
addrtype      SourceRegion   = NullPtr;
sizeinbytes   SourceSize     = 0;
addrtype      TargetRegion   = NullPtr;
addrtype     *ChunkAddrPtr   = NullPtr;

 *FreeAddr      =  NullPtr;
 *FreeSize      =  0;

  if (DbmBug)
  if (TraceMsg (0, " BEFORE move ::    "))
      Mem_DumpChunkChunk (0, ChunkNum);

  SourceRegion  = Chunk_Addr (ChunkNum);
  SourceRegion  = (addrtype )((char *)SourceRegion - sizeof (chunkstruc));
  Source        = SourceRegion;

  SourceSize   = Unit_Size  (ChunkNum) *  Unit_Count (ChunkNum);
  SourceSize  += sizeof (chunkstruc);

  if (Normal(*Status))
  {
/*   This is a Normal Chunk Expansion                                      */
     if (NewRegion   (SourceSize,      McStat,     (addrtype *)&ChunkAddrPtr))
     {
        TargetRegion = ChunkAddrPtr;

        if (DbmBug || MemBug)
        {
           sprintf (Msg, TraceStr(41),
/* "     Copy from Source(* %8u) @%x TO Target @%x\n" */
                    SourceSize, SourceRegion, TargetRegion);
           TraceMsg (0, Msg);
        }

        memcpy  ((char *)ChunkAddrPtr, (char *)SourceRegion, SourceSize);

/*      Adjust for the chunkstruc Header Block                            */
        TargetRegion  = (addrtype )((char *)TargetRegion
                                          + sizeof (chunkstruc));
        ChunkAddrPtr  = (addrtype *)TargetRegion;

/*      Set the Chunk Stats on the New Chunk                              */
        Chunk_Addr(ChunkNum)    = TargetRegion;

        if (DbmBug)
        if (TraceMsg (0, " AFTER  move ::    "))
           Mem_DumpChunkChunk (0, ChunkNum);
     }

    *FreeAddr      =  Source;
    *FreeSize      =  SourceSize;

     if (DbmBug)
     {
        sprintf (Msg, 
          " Mem_MoveChunk [%6u] :: TO Target @%8x; Size :=%6u,  From @%8x.\n",
                 ChunkNum, TargetRegion, SourceSize, SourceRegion);
        TraceMsg (0, Msg);
     }
  }

TRACK(TrackBak,"Mem_MoveChunk\n");
return(STAT);
}
Example #12
0
File: odbm.c Project: palmerc/lab
/*+-----------------------------------------------------------------------+*/
boolean DbmFileInObjHdr  (objheader  *ObjHdr,    idtype        DbId,
                          blkhdrtype *BlkHdr,    boolean       Release,
                          ft F,lt Z,zz *Status )
{
struchdr     *StrucHdr   = NullPtr;

  DbmFileInGrpHdr  ((grpheader *)ObjHdr,      DbId,
                    BlkHdr,      Release,     McStat);
  if (DbId == RenvId)
     ObjHdr->FreezeClass  = 1;

  if (Normal(*Status))
  if (ObjHdr->ObjectLockDirVbn)
  if (FileInChunk (&ObjHdr->ObjectLockDir,    BlkHdr,        Release,  
                    McStat,                 &ObjHdr->ObjectLockDirVbn)) 
  if (DeBug || DbmBug) {
     sprintf (Msg, TraceStr(53),
/* "    Obj ObjectLockDir    : Chunk[%4u] AT Vbn[%3u]\n" */
              ObjHdr->ObjectLockDir,ObjHdr->ObjectLockDirVbn);
     TraceMsg (0, Msg);
  }

  if (Normal(*Status))
  if (FileInChunk (&ObjHdr->FieldNumMap,      BlkHdr,        Release,  
                    McStat,                 &ObjHdr->FieldNumMapVbn)) 
  if (DeBug || DbmBug) {
     sprintf (Msg, TraceStr(32),
/* "    Obj FieldNumMap      : Chunk[%4u] AT Vbn[%3u]\n" */
              ObjHdr->FieldNumMap,  ObjHdr->FieldNumMapVbn);
     TraceMsg (0, Msg);
  }
  if (Normal(*Status))
  if (FileInChunk (&ObjHdr->LocalAttrNumMap,      BlkHdr,        Release,  
                    McStat,                 &ObjHdr->LocalAttrNumMapVbn)) 
  if (DeBug || DbmBug) {
     sprintf (Msg, TraceStr(33),
/* "    Obj LocalAttrNumMap  : Chunk[%4u] AT Vbn[%3u]\n" */
              ObjHdr->LocalAttrNumMap,  ObjHdr->LocalAttrNumMapVbn);
     TraceMsg (0, Msg);
  }
  if (Normal(*Status))
  if (FileInChunk (&ObjHdr->FieldOffsetDir,      BlkHdr,        Release,  
                    McStat,                 &ObjHdr->FieldOffsetDirVbn)) 
  if (DeBug || DbmBug) {
     sprintf (Msg, TraceStr(34),
/* "    Obj FieldOffsetDir   : Chunk[%4u] AT Vbn[%3u]\n" */
              ObjHdr->FieldOffsetDir,  ObjHdr->FieldOffsetDirVbn);
     TraceMsg (0, Msg);
  }
  if (Normal(*Status))
  if (FileInChunk (&ObjHdr->ClassOffsetDir,      BlkHdr,        Release,  
                    McStat,                 &ObjHdr->ClassOffsetDirVbn)) 
  if (DeBug || DbmBug) {
     sprintf (Msg, TraceStr(35),
/* "    Obj ClassOffsetDir   : Chunk[%4u] AT Vbn[%3u]\n" */
              ObjHdr->ClassOffsetDir,  ObjHdr->ClassOffsetDirVbn);
     TraceMsg (0, Msg);
  }
  if (Normal(*Status))
  if (FileInChunk (&ObjHdr->FieldRefDir,         BlkHdr,        Release,  
                    McStat,                 &ObjHdr->FieldRefDirVbn)) 
  if (DeBug || DbmBug) {
     sprintf (Msg, TraceStr(36),
/* "    Obj FieldRefDir      : Chunk[%4u] AT Vbn[%3u]\n" */
              ObjHdr->FieldRefDir,  ObjHdr->FieldRefDirVbn);
     TraceMsg (0, Msg);
  }
  if (Normal(*Status))
  if (ObjHdr->FieldMapCount)
  if (FileInChunk (&ObjHdr->FieldMapDir,     BlkHdr,        Release,  
                    McStat,                 &ObjHdr->FieldMapDirVbn)) 
  if (DeBug || DbmBug) {
     sprintf (Msg, TraceStr(37),
/* "    Obj FieldMapDir     : Chunk[%4u] AT Vbn[%3u]\n" */
              ObjHdr->FieldMapDir,           ObjHdr->FieldMapDirVbn);
     TraceMsg (0, Msg);
  }
  if (Normal(*Status))
  if (ObjHdr->FieldArrayCount)
  if (FileInChunk (&ObjHdr->FieldArrayDir,   BlkHdr,        Release,  
                    McStat,                 &ObjHdr->FieldArrayDirVbn)) 
  if (DeBug || DbmBug) {
     sprintf (Msg, TraceStr(38),
/* "    Obj FieldArrayDir   : Chunk[%4u] AT Vbn[%3u]\n" */
              ObjHdr->FieldArrayDir,  ObjHdr->FieldArrayDirVbn);
     TraceMsg (0, Msg);
  }

  if (Normal(*Status))
  if (ObjHdr->TextChunkVbn)
  if (FileInChunk     (&ObjHdr->TextChunk,   BlkHdr,        Release,  
                       McStat,              &ObjHdr->TextChunkVbn)) 
  if (MemGetChunkAddr (ObjHdr->TextChunk,    McStat,   (addrtype *)&StrucHdr))
  {
     if (StrucHdr->TextVbn)
        FileInChunk   (&StrucHdr->TextChunk,   BlkHdr,        Release,  
                       McStat,                &StrucHdr->TextVbn); 
     if (DeBug || DbmBug) 
     {
        sprintf (Msg, TraceStr(38),
/* "    Obj TextChunk   : Chunk[%4u] AT Vbn[%3u]\n" */
                 ObjHdr->TextChunk,  ObjHdr->TextChunkVbn);
        TraceMsg (0, Msg);
     }
  }

TRACK(TrackBak,"DbmFileInObjHdr\n");
return(STAT);
}
Example #13
0
File: core01.c Project: palmerc/lab
void CoreShowStats       (void)
{
statustype  ShellStatus   = Env_Normal;

   TraceMsg (MSGFILE, "\n  Memory Manager Statistics::\n\n");
   sprintf (Msg, TraceStr(67),
/*  " Void      Allocated :: %lu\n"  */
            VoidAllocated);
   TraceMsg (MSGFILE, Msg);
   sprintf (Msg, TraceStr(68),
/*  " Void   De Allocated :: %lu\n"  */
            VoidDeAllocated);
   TraceMsg (MSGFILE, Msg);
   sprintf (Msg, TraceStr(69),
/*  " Void   CurrentSize  :: %lu\n"  */
            VoidUsed);
   TraceMsg (MSGFILE, Msg);

   sprintf (Msg, " Void   MAX Alloc'd  (at any point in Run) :: %8lu\n\n",  VoidMaxUsed);
   TraceMsg (MSGFILE, Msg);

   sprintf (Msg, TraceStr(70),
/*  " Blks      Allocated :: %lu\n"  */
            VoidBlksAllocated);
   TraceMsg (MSGFILE, Msg);
   sprintf (Msg, TraceStr(71),
/*  " Blks   De Allocated :: %lu\n\n"  */
            VoidBlksDeAllocated);
   TraceMsg (MSGFILE, Msg);

   sprintf (Msg, TraceStr(72),
/*  " Regions  Allocated :: %u\n"  */
            Num1Regions);
   TraceMsg (MSGFILE, Msg);
   sprintf (Msg, TraceStr(73),
/*  " Core   Used         :: %lu\n"  */
            Core1Size);
   TraceMsg (MSGFILE, Msg);
   sprintf (Msg, TraceStr(74),
/*  " Core   Freeed       :: %lu\n"  */
            Core1Freeed);
   TraceMsg (MSGFILE, Msg);
   sprintf (Msg, TraceStr(75),
/*  " Core   Reclaimed    :: %lu\n\n"  */
            Core1Reclaimed);
   TraceMsg (MSGFILE, Msg);

   sprintf (Msg, " Core   Current Size :: %8lu\n\n",Core1Used);
   TraceMsg (MSGFILE, Msg);

   sprintf (Msg, TraceStr(76),
/*  " CoreBlks Requested  :: %lu\n"  */
            CoreBlksRequested);
   TraceMsg (MSGFILE, Msg);
   sprintf (Msg, TraceStr(77),
/*  " CoreBlks Freeed     :: %lu\n\n"  */
            CoreBlksFreeed);
   TraceMsg (MSGFILE, Msg);
   sprintf (Msg, TraceStr(78),
/*  " CoreBlks Reclaimed  :: %lu\n"  */
            CoreBlksReclaimed);
   TraceMsg (MSGFILE, Msg);
   sprintf (Msg, TraceStr(79),
/*  "     By   Exact Size :: %lu\n"  */
            CoreBlksExactReclaimed);
   TraceMsg (MSGFILE, Msg);
   sprintf (Msg, TraceStr(80),
/*  "     By   Gaps       :: %lu\n"  */
            CoreBlksGapReclaimed);
   TraceMsg (MSGFILE, Msg);

   sprintf (Msg, TraceStr(81),
/*  "     By   Page Space :: %lu\n\n"  */
            CoreBlksPageSpaceReclaimed);
   TraceMsg (MSGFILE, Msg);

   if (ClassBug || CoreBug)
   if (KrnlFreeAddrChunk)
   {
      TraceMsg (MSGFILE, " Dump of KrnlFreeAddrChunk ::   ");
      Mem_DumpChunkPart (MSGFILE, KrnlFreeAddrChunk, 0, 100, ShellMcStat);
      TraceMsg (MSGFILE, "\n Dump of KrnlFreeSizeChunk ::   ");
      Mem_DumpChunkPart (MSGFILE, KrnlFreeSizeChunk, 0, 100, ShellMcStat);
      TraceMsg (MSGFILE, "\n");
   }

return;
}
Example #14
0
File: odbm.c Project: palmerc/lab
/*+-----------------------------------------------------------------------+*/
boolean    DbmPairRgnObjects  (dbheader       *CoreDb,  objheader    *ObjHdr,
                               numtype    CurrRgnChunk, ft F,lt Z,zz *Status)
{ 
indextype   Index         = 0;
indextype   Offset        = 0;
indextype   Objects       = 0;
byte       *RegionAddr    = NullPtr;
handletype *HandlePtr     = NullPtr;
addrtype    ObjectAddr    = NullPtr;
int         TempDeBug     = DeBug;
booleantype TempMemBug    = MemBug;
numtype     MemLoc        = 0;

 if (!PairObjects)
 {
    TRACK(TrackBak,"DbmPairRgnObjects\n");
    return (STAT);
 }

 if (MemGetChunkAddr (CurrRgnChunk,          McStat, (addrtype *)&RegionAddr))
     MemGetStackPtr  (CurrRgnChunk,          McStat, &Objects);

 if (!RegionAddr || !Objects)
 {
    *Status = Odbm_BadSwapChunks;
     sprintf (Msg, TraceStr(41),
/* " BAD PAIR Handles for RegionChunk[%3u] @%x count %4u\n" */
              CurrRgnChunk, RegionAddr, Objects);
     TraceMsg (0, Msg);
 }


 if (SWAP)
 {
   DeBug = 0;
   MemBug = False;
   while (Normal(*Status) 
   &&     Index < Objects)
   {
     Offset     = (ObjHdr->ObjSize * Index) + ObjHdr->HandleOffset;
     ObjectAddr =  (addrtype )(RegionAddr + (ObjHdr->ObjSize * Index));
     HandlePtr  = (handletype *)(RegionAddr + Offset);

     if (*HandlePtr          == 1
     &&  ObjHdr->ObjectCount != 1)
     {
        sprintf (Msg,  
        " DbmPairRgnObjects:: RegionChunk[%3u] Index = %2u; Handle=%4u\n",
                CurrRgnChunk,  Index, *HandlePtr);
        TraceMsg (0, Msg);
        TraceMsg (0, 
        " ***ERROR... Should not be equal 1, as is NOT a Primal!\n");

       *Status = Dbm_BadHandleInRegion;

     }
     if (*HandlePtr)
     {
        if (HmGetObjectMemLoc (CoreDb,  *HandlePtr, McStat, &MemLoc))
        if (MemLoc == 0)
            HmPutObjectAddr   (CoreDb,  *HandlePtr, ObjectAddr, McStat); 
        if (!Normal(*Status))
        if (sprintf (Msg, 
              TraceStr(45),
/* " Region[%3u] Object[%3u] Handle= %4u\n" */
                CurrRgnChunk,   Index, *HandlePtr))
           TraceMsg (0, Msg);

     }
     ++Index;
   }
   MemBug = TempMemBug;
   DeBug = TempDeBug;
 }

TRACK(TrackBak,"DbmPairRgnObjects\n");
return (STAT);
}
Example #15
0
File: core01.c Project: palmerc/lab
farlongtype SysFarCoreLeft   (void)
{
indextype      CoreBlks           = 0;
addrtype       CoreAddr[20];
counttype      i                  = 0;
farlongtype    AllocAmount        = Core_PageSize;
static
sizetype       SizeOfInt          = sizeof(int);

 if (FirstTry == False
 ||  FirstTry == True)
   return (1024000L);


 if (FirstTry == True)
 {
    FirstTry = False;
    if (SizeOfInt <= 2)
       return (1024000L);

    while ((CoreAddr[i]  = (addrtype )GET_MEM (1, AllocAmount)) != NULL)
    {
       Alloc_Amount += AllocAmount;
       sprintf (Msg, TraceStr(7),
/*  " Allocated %6u bytes @%x\n"  */
                AllocAmount, CoreAddr[i]);
       SendMsg (0, Msg);
       ++i;
    }

    AllocAmount -= 100;
    while ( (AllocAmount &&
             (CoreAddr[i]  = (addrtype )GET_MEM (1, AllocAmount)) == NULL))
    {
       AllocAmount -= 100;
    }

    if (CoreAddr[i])
    {
       Alloc_Amount += AllocAmount;
       sprintf (Msg, TraceStr(8),
/*  " Allocated %6u bytes @%x\n"  */
                AllocAmount, CoreAddr[i]);
       SendMsg (0, Msg);
    } else
      --i;

    if (Alloc_Amount)
    {
       CoreBlks     = i;
       while (i >= 0)
       {
          sprintf (Msg, TraceStr(9),
/*  " De Allocate block[%2u] @ %x\n"  */
                   i, CoreAddr[i]);
          SendMsg (0, Msg);
          FREE_MEM (CoreAddr[i]);
          i--;
       }
       CoreFreeStoreSize = (Core_PageSize * CoreBlks) + AllocAmount;
       sprintf (Msg, TraceStr(10),
/*  "  *** INFO *** Far Core Available = %lu\n"  */
                CoreFreeStoreSize);
       SendMsg (0, Msg);

    } else
       SendMsg (0, " *** CORE *** CoreNoMore\n");
 }

return (CoreFreeStoreSize);
}
Example #16
0
File: core01.c Project: palmerc/lab
void VoidFreeCore         (addrtype      *CoreAddr,  farlongtype SizeInBytes)
{
farlongtype    FarSize        = 0;
sizetype       ByteAlignment  = 0;
addrtype       EndCoreBlkAddr = NullPtr;
lt64          *LongPtr = NullPtr;

    VoidStatus   = Env_Normal;

#ifdef __BCC__
   sprintf (Msg, /* TraceStr[6] */
            "    VOID FreeCore:: Void Range (* %-8lu) @ %8x :: %8x\n",
            SizeInBytes, *CoreAddr,
            (addrtype )(*(farlongtype **)CoreAddr + SizeInBytes));
   TraceMsg (0, Msg);

#else
   if (CoreBug)
   if (sprintf (Msg, TraceStr(6),
/*  "    VOID FreeCore:: Void Range (* %-8lu) @ %8x :: %8x\n"  */
                 SizeInBytes, *CoreAddr,
                 (addrtype )(*(farlongtype **)CoreAddr + SizeInBytes)))
       TraceMsg (0, Msg);
#endif
   if (*CoreAddr)
   {

#ifdef    CORE_CRC_CHECK

      FarSize          = SizeInBytes + CORE_BLOCK_ALIGN + 4;
      if (FarSize % CoreBlk_GapSpace)
      {
         ByteAlignment = CoreBlk_GapSpace - (FarSize % CoreBlk_GapSpace);
         FarSize      += ByteAlignment;
      }
     *CoreAddr         = (addrtype )((char  *)*CoreAddr - CORE_BLOCK_ALIGN);
      LongPtr          = *(numtype **)CoreAddr;

      EndCoreBlkAddr   = (addrtype )((char  *)*CoreAddr + (FarSize - 4));

      if (*(numtype *)LongPtr               != CORE_CONSTANT)
      {
         SendMsg (0, "\n ***ERROR... in Management of VOID\n");
         SendMsg (0, "    FIRST 4 bytes in VOID Block OVER-WRITEN !\n");
         sprintf (Msg, "     VOID address := @%8x\n", *CoreAddr);
         TraceMsg (0, Msg);

         VoidStatus   = Core_CRCoverWritten;

      } else if (*(numtype *)EndCoreBlkAddr != CORE_CONSTANT) {

         SendMsg (0, "\n ***ERROR... in Management of VOID\n");
         SendMsg (0, "    LAST  4 bytes in VOID Block OVER-WRITEN !\n");
         sprintf (Msg, "     VOID address := @%8x\n", *CoreAddr);
         TraceMsg (0, Msg);

         VoidStatus   = Core_CRCoverWritten;
      }

#else

      FarSize          = SizeInBytes;
      if (FarSize % CoreBlk_GapSpace)
      {
         ByteAlignment = CoreBlk_GapSpace - (FarSize % CoreBlk_GapSpace);
         FarSize      += ByteAlignment;
      }

#endif /* CORE_CRC_CHECK */

      VoidDeAllocated += FarSize;
      VoidUsed        -= FarSize;

      FREE_MEM         (*(void **)CoreAddr);


   } else {
     sprintf (Msg, "***ERROR... Core Address <%8x> Below Void <%8x>\n",
              *CoreAddr, VoidLowestAddr);
     TraceMsg (0, Msg);

     VoidStatus     = Core_NULLCoreAddrOfFree;
   }
  *CoreAddr         = NullPtr;

   VoidBlksDeAllocated++;

    if ( DeBug )
    {
       sprintf(Msg, "Free   VOID [%6u] := %8lu bytes;  VoidUsed := %8lu\n",
             VoidBlksDeAllocated , SizeInBytes, VoidUsed);
       TraceMsg (0, Msg);
    }

StackTrack ("VoidFreeCore\n");
return;
}
Example #17
0
File: core01.c Project: palmerc/lab
addrtype   VoidExtendCore (farlongtype   *SizeInBytes)
{
lt64          *LongPtr        = NullPtr;
addrtype       CoreAddr       = NullPtr;
addrtype       EndCoreBlkAddr = NullPtr;
sizetype       ByteAlignment  = 0;
farlongtype    FarSize        = 0;
static
boolean        FirstTime      = False;
static
boolean        FirstLimit     = True;

    VoidStatus   = Env_Normal;

#ifdef __BCC__
    sprintf (Msg, "    Extend VOID [%6u] %8lu bytes;  New Void =%8lu\n",
             VoidBlksAllocated + 1, *SizeInBytes, VoidUsed);
    TraceMsg (0, Msg);

#endif

#ifdef CORE_LIMIT
    if (*SizeInBytes > CORE_LIMIT)
    {
       sprintf (Msg, TraceStr(0),
/*  "    Alloc from the VOID %8lu bytes;\n"  */
                 *SizeInBytes);
        TraceMsg (0, Msg);
       return (CoreAddr);
    }
#endif

#ifdef OLDWAY
    if (*SizeInBytes % CoreBlk_GapSpace)
    {
       ByteAlignment = CoreBlk_GapSpace - (*SizeInBytes % CoreBlk_GapSpace);
      *SizeInBytes  += ByteAlignment;
    }
#else

#ifdef CORE_CRC_CHECK

    FarSize          = *SizeInBytes + CORE_BLOCK_ALIGN + 4;
    if (FarSize % CoreBlk_GapSpace)
    {
       ByteAlignment = CoreBlk_GapSpace - (FarSize % CoreBlk_GapSpace);
       FarSize      += ByteAlignment;
    }

#else
    FarSize          = *SizeInBytes; 
    if (FarSize % CoreBlk_GapSpace)
    {
       ByteAlignment = CoreBlk_GapSpace - (FarSize % CoreBlk_GapSpace);
       FarSize      += ByteAlignment;
    }

#endif  /* CORE_CRC_CHECK */

#endif  /* OLDWAY */

    if ((FarSize + VoidUsed) > VOID_BOUNDARY)
    {
       if (FirstLimit)
          SendMsg (0,   "\n *** WARNING *** VOID_BOUNDARY EXCEEDED!!!\n");
       else
          SendMsg (0,   "\n *** ERROR   *** VOID_BOUNDARY EXCEEDED!!!\n");

       sprintf (Msg, "      BOUNDARY := %8d;  RESERVE := %8d;\n",
                VOID_BOUNDARY, VOID_RESERVE);
       SendMsg (0, Msg);

       if (FirstLimit)
          VOID_BOUNDARY  += VOID_RESERVE;
       FirstLimit         = False;

       return (NullPtr);
    }

    if ((LongPtr  = (lt64           *)GET_MEM (1, FarSize)) == NULL)
    {
      if (!FirstTry)
      {
        return (NullPtr);

      } else {
        FirstTry     = False;
        do
        {
          *SizeInBytes = *SizeInBytes - 256;
           LongPtr     = (lt64          *)GET_MEM (1, *SizeInBytes);
        } while (*SizeInBytes >= 256 && LongPtr == NULL);

        if (LongPtr)
        if (sprintf (Msg, TraceStr(1),
/*  "  *** WARNING ... Partial Core Page = %lu\n"  */
                     *SizeInBytes))
           SendMsg (0, Msg);
      }
    }

    if (! CoreFreeStoreSize && FirstTry)
       SysFarCoreLeft();
    else
       CoreFreeStoreSize -= FarSize;

#ifdef    CORE_CRC_CHECK
    memset             ((addrtype )LongPtr, 0x55,   4);
    EndCoreBlkAddr   = (addrtype )((char  *)LongPtr + (FarSize - 4));
    memset             (EndCoreBlkAddr,     0x55,   4);

    CoreAddr         = (addrtype )((char *)LongPtr + CORE_BLOCK_ALIGN);

#else
    CoreAddr         = (addrtype )LongPtr;

#endif /* CORE_CRC_CHECK */

    VoidAllocated   += FarSize;
    VoidUsed        += FarSize;

    if (VoidUsed > VoidMaxUsed)
       VoidMaxUsed        = VoidUsed;

    VoidBlksAllocated++;


    if (FirstTime)
    {
       VoidLowestAddr   = CoreAddr;
       FirstTime        = False;

    } else if (CoreAddr < VoidLowestAddr) {
       VoidLowestAddr   = CoreAddr;
    }



    if (StrucAlignment)
    {
      if ((farlongtype )CoreAddr % StrucAlignment)
      {
         sprintf (Msg, TraceStr(4),
/*  " CoreMoreCore... Non Aligned Address= %8x\n"  */
                   LongPtr);
         TraceMsg (0, Msg);
         sprintf (Msg, TraceStr(5),
/*  "                 Core1Size          = %8lu\n"  */
                   Core1Size);
         SendMsg (0, Msg);

         VoidStatus   = Core_NotInAlignment;
      }
    }

    if ( DeBug )
    {
       sprintf(Msg, "Extend VOID [%6u] := %8lu bytes;  VoidUsed := %8lu\n",
             VoidBlksAllocated , *SizeInBytes, VoidUsed);
       TraceMsg (0, Msg);
    }

return (CoreAddr);
}
Example #18
0
File: ogrp.c Project: palmerc/lab
/*     12.0.3                                                              */
boolean GrpNewObject     (dbheader     *CoreDb,    objheader    *ObjHdr,
                          ft F,lt Z,zz *Status,    indextype    *Index,
                          numtype      *RgnIndex,  addrtype     *RgnAddr)
{
numtype         Chunk        = 0;
addrtype        ChunkAddr    = NullPtr;
indextype       LocalIndex   = 0;
boolean         ExObject     = False;
numtype         BuffIndex    = 0;


 if (ObjHdr->EnvObjType > That_AttrNum)
 if (sprintf (Msg, TraceStr(0),
/* " ObjHdr[%3u:%3u] Not set as ObjectType.\n" */
              CoreDb->DbId, ObjHdr->ObjNum))
 if (SendMsg (0, Msg))
    ObjHdr->EnvObjType = 0;


 if (ObjHdr->ExObjectCount)
 {
    ExObject     = True;
    if (MemPopIndex  (ObjHdr->ExObjectTbl,
                      McStat,    Index,  &ObjHdr->ExObjectCount))
    if (*Index < ObjHdr->BaseIndex)
    {
      *RgnIndex  = 0;
       Chunk              = ObjHdr->BaseRegion;
       MemGetChunkAddr    (Chunk,       McStat,    &ChunkAddr);

    } else {
      *RgnIndex  = (*Index - ObjHdr->BaseIndex) / ObjHdr->RegionObjects;
       if (ObjHdr->BaseIndex)
          ++*RgnIndex;

       GrpGetRegion       (CoreDb,     (grpheader *)ObjHdr,    *RgnIndex,
                           McStat,     &Chunk,     &ChunkAddr);
    }
/*  ObjHdr->ExObjectCount--;
*/
 } else if (ObjHdr->ObjectCount < ObjHdr->BaseIndex) {
   *Index        = ObjHdr->ObjectCount++;
   *RgnIndex     = 0;
    if (*Index  == 0)
    {
       GrpNewRegion (CoreDb,  (grpheader *)ObjHdr, *Index,     *RgnIndex,
                     McStat,              &Chunk,  &ChunkAddr);
       ObjHdr->BaseRegion = Chunk;

    } else {
       Chunk              = ObjHdr->BaseRegion;
       MemGetChunkAddr       (Chunk,       McStat,    &ChunkAddr);
    }

 } else {
   *Index      =  ObjHdr->ObjectCount++;
   *RgnIndex   = (*Index  - ObjHdr->BaseIndex) / ObjHdr->RegionObjects;
    if (ObjHdr->BaseIndex)
       ++*RgnIndex;

    LocalIndex = (*Index  - ObjHdr->BaseIndex) % ObjHdr->RegionObjects;

    if (LocalIndex == 0)
    {
       GrpNewRegion   (CoreDb,   (grpheader *)ObjHdr,
                       *Index,               *RgnIndex,
                       McStat,               &Chunk,   &ChunkAddr);

    } else {
       if (MemGetChunkNum   (ObjHdr->RegionChunkDir, *RgnIndex,
                             McStat,                 &Chunk))
       if (Chunk  != 0)
           MemGetChunkAddr  (Chunk,  McStat,         &ChunkAddr);

       if (Chunk     == 0
       ||  ChunkAddr == NullPtr)
           GrpGetRegion     (CoreDb,     (grpheader *)ObjHdr,    *RgnIndex,
                             McStat,     &Chunk,     &ChunkAddr);

       if (Normal(*Status))
       {
          BuffIndex                        = ObjHdr->RgnBuffNums[*RgnIndex];
          ObjHdr->RgnBuffNodes[BuffIndex]  = 1;
       }

    }
 }

 /* Allocate space for Entry: Bytes in Region Chunk Space                  */
 if (Normal(*Status))
 if (*RgnIndex)
    LocalIndex = (*Index - ObjHdr->BaseIndex) % ObjHdr->RegionObjects;
 else
    LocalIndex = *Index;

 if (Normal(*Status))
 if (!ExObject)
     MemPutStackPtr   (Chunk,  LocalIndex+1,    McStat);

 if (Normal(*Status))
 if (MemPutBit        (ObjHdr->DirtyRegionDir,  *RgnIndex, 1, McStat))
    *RgnAddr   = ChunkAddr;

 if (DbmBug)
     MemBug = False;

 if (!Normal(*Status) || DeBug || GrpBug || DbmBug)
 if (sprintf (Msg, TraceStr(3),
/* "   GrpNewObject[%4u] (%4u) Rgn=%3u RgnChunk= %3u   @ %x\n" */
             *Index, LocalIndex, *RgnIndex, Chunk, *RgnAddr))
       TraceMsg (0, Msg);

TRACK(TrackBak,"GrpNewObject\n");
return(STAT);
}
Example #19
0
File: fm.c Project: palmerc/lab
boolean FileInBlk       (addrtype     *BlkAddr, bytessize  BlkSize, 
                         blkhdrtype   *BlkHdr,  boolean    Release,
                         ft F,lt Z,zz *Status,  vbntype   *VbnBlk)
{
bytessize   UnitSize     = BlkSize;
indextype   UnitCount    = (indextype )1;
lt64        FileOffset   = 0;
indextype   VbnBlkIndex  = 0;
blktkntype  BlkTkn;
int         FileRead     = 0;

/*   This is a ChunkRef Chunk || a ObjHdr || a File Block                 */
  if (*BlkAddr      == NullPtr)
      CoreMoreCore    (BlkSize,              McStat,    BlkAddr);

  if (Normal(*Status))
  if (MemGetIndex     (BlkHdr->BlkDirChunk, *VbnBlk,    
                       McStat,              &VbnBlkIndex))
      MemGetSomeBytes (BlkHdr->BlkTknChunk,  VbnBlkIndex, 
                       sizeof (blktkntype),
                       McStat,   (addrtype )&BlkTkn);

  if (Normal(*Status))
  {  
     FileOffset    = BlkTkn.Offset;

     if (FileOffset <= 0)
     {
        sprintf (Msg, TraceStr(35),
/* " *** ZERO File Offset for Vbn = %6u; BlkIndex= %6u;\n" */
                *VbnBlk, VbnBlkIndex);
        TraceMsg (0, Msg);
     }
  }

/* Copy from File space to CoreSpace                                       */
  if (Normal(*Status))
  {
     fseek            (BlkHdr->BlkFile,     FileOffset,     SEEK_SET);
     FileRead = fread (*BlkAddr,                 (unsigned )UnitSize, 
                       (unsigned )UnitCount,                BlkHdr->BlkFile);

     if (FileRead != (int )UnitCount)
     {
         sprintf (Msg, TraceStr(38),
/* "  FILE read ERROR #  Vbn[%3u]\n" */
                  *VbnBlk);
         TraceMsg (0, Msg);
         perror("    Error Msg ");
        *Status = File_BadDiskRead;

     }
     LastFileOffset = FileOffset + UnitCount;
  }

  if (Normal(*Status))
  if (Release)
      MemFreeFileBlk   (BlkHdr,     McStat,   VbnBlk);

TRACK(TrackBak,"FileInBlk\n");
return(STAT);
}