home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / bix / filsiz.pas < prev    next >
Pascal/Delphi Source File  |  1986-08-04  |  5KB  |  88 lines

  1. {*************************************************************************}
  2. {                                                                         }
  3. {                              FILSIZ                                     }
  4. {    Copyright by Ron Sparks - Not for Sale without Written Permission    }
  5. {              Significant portions coauthored by Jim Keohane             }
  6. {            Personal use is approved without permission if the           }
  7. {                      author's names are included                        }
  8. {                                                                         }
  9. {                  First version - April 12, 1986                         }
  10. {                                                                         }
  11. {                          Revision History:                              }
  12. {                                                                         }
  13. {                      Date          Modification                         }
  14. {                      ======        ===============================      }
  15. {                                                                         }
  16. {                                                                         }
  17. {                                                                         }
  18. {                                                                         }
  19. {                           GENERAL COMMENTS                              }
  20. {                           ----------------                              }
  21. {    This routine was inspired by and contains significant portions of    }
  22. {    the "FILESIZE" routine originated by Jim Keohane on BIX in Apr 86    }
  23. {    Revisions and upgrades were added by Ron Sparks.  This procedure     }
  24. {    can return the filesize of the file sent in by variable phile.  It   }
  25. {    must have been previously assigned and opened.  This routine is now  }
  26. {    nondestructive of the file pointer position.  If LOCN is true the    }
  27. {    function returns the current position of the pointer in bytes from   }
  28. {    the start of the file.  This may be used to indicate progress in     }
  29. {    processing a file.  It returns a Real value as opposed to Turbo's    }
  30. {    builtin function which returns an integer.                           }
  31. {                                                                         }
  32. {*************************************************************************}
  33.  
  34. {-------------------------------------------------------------> Filesiz   }
  35. FUNCTION FilSize(VAR phile : filtyp; VAR locn : Boolean) : Real;
  36.   { original author - Jim Keohane placed in public domain                 }
  37.   { Additions and revisions by Ron Sparks Apr 12, 1986                    }
  38.   {    Revisions include With statement, Handle name & Format             }
  39.   {    Additions include code to make filesize nondestructive to current  }
  40.   {              file pointer location.  Also added is code to get current}
  41.   {              position in file for Percent read calculations           }
  42.  
  43.  
  44. TYPE
  45.   intregs = RECORD
  46.               CASE Integer OF
  47.                 0 : (ax, bx, cx, dx, bp, si, di, ds, es, flags : Integer);
  48.                 1 : (al, ah, bl, bh, cl, ch, dl, dh : Byte);
  49.             END;
  50. VAR
  51.   reg : intregs;
  52.   Curptroff, curptrseg : Integer;
  53.   temp1, temp2 : Real;
  54. BEGIN
  55.   WITH reg DO
  56.     BEGIN
  57.       ax := $4201;                        {      First find out where you are }
  58.       bx := Mem[Seg(phile):Ofs(phile)];
  59.       cx := 0;
  60.       dx := 0;
  61.       MsDos(reg);
  62.       temp1 := ax;
  63.       temp2 := dx;
  64.       IF NOT Locn THEN
  65.         BEGIN
  66.           curptrseg := dx;                {      Now save current pointers    }
  67.           curptroff := ax;                { ... stuffing your own value here  }
  68.           ax := $4202;                    {     would allow you to position   }
  69.           cx := 0;                        {     anywhere in file you wish.... }
  70.           dx := 0;
  71.           MsDos(reg);
  72.           temp1 := ax;
  73.           temp2 := dx;
  74.           ax := $4200;                          {And reposition back where you}
  75.           cx := curptrseg;                      {were.                        }
  76.           dx := curptroff;
  77.           MsDos(reg);
  78.         END;
  79.       IF (flags AND $01) = 1 THEN
  80.         filsize := 0
  81.       ELSE
  82.         IF temp1 >= 0 THEN
  83.           filsize := (temp2*65536.0)+temp1
  84.         ELSE
  85.           filsize := (temp2*65536.0)+(temp1+65536.0);
  86.     END;
  87. END;
  88.