home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / share / fileshar / nflag.pas < prev    next >
Pascal/Delphi Source File  |  1988-04-16  |  4KB  |  118 lines

  1. {
  2.   NFlag - Program to set files to sharable on a network
  3.   version 1.0 4/16/88
  4.   by Richard S. Sadowsky 74017,1670
  5.  
  6.   Released as is to the public domain
  7.  
  8.   This program sets files matching the specified filespec(s) to sharable.
  9.   Other than setting the Share bit, the attributes are unchanged.  The
  10.   specified files must be in the current directory.
  11.  
  12.   You may specify more than one filename on the command line if desired,
  13.   and the filenames may optionally include wildcards.  Examples:
  14.  
  15.   NFLAG DAT??.* FIL??.FIL *.PRG MEDAPP*.C??
  16.   NFLAG TPSPOOL.EXE
  17.   NFLAG *.*
  18.  
  19.   To see how this neat command line argument expansion is done, see
  20.   XArgs.Pas for the source.
  21.  
  22.   This program is remotely similar to the much more powerful
  23.   NetWare FLAG program.  Of course, FLAG is restricted to use under
  24.   NetWare, where as NFLAG is not.
  25.  
  26.   This unit was extracted from a soon to be released commercial
  27.   package of Turbo Pascal 4 networking tools.  Send EASYPLEX to
  28.   74017,1670 for more information.
  29. }
  30. {$R-,S-,I-,V-}  { no stack or range checking, do not abort on I/O error, }
  31.                 { and relax string type checking }
  32.  
  33. {$M 16384,0,0}  { no heap needed }
  34.  
  35. program NFlag;
  36.  
  37. uses DOS,XArgs,FileShar;
  38.  
  39. { I extracted the following from a message by Sam Denton 76314,1512 }
  40. { it is a fast routine for displaying bytes as a hex string. }
  41. function Nybble(x : Byte): Char;
  42. inline($58/            {  POP     AX     }
  43.        $24/$0F/        {  AND     AL,0F  }
  44.        $04/$90/        {  ADD     AL,90  }
  45.        $27/            {  DAA            }
  46.        $14/$40/        {  ADC     AL,40  }
  47.        $27/            {  DAA            }
  48.        $24/$7F);       {  AND     AL,7F  }
  49.  
  50. function HexByte(H : Byte): String;
  51.  
  52. begin
  53.   HexByte[0] := #2;
  54.   HexByte[1] := Nybble(H shr 4);
  55.   HexByte[2] := Nybble(H);
  56. end;
  57.  
  58.  
  59. procedure ShowAtt(P : String);
  60. { Show user the file's attributes }
  61. var
  62.   F                : File;
  63.   Att              : Word;
  64.  
  65. begin
  66.   Assign(F,P);
  67.   GetFAttr(F,Att);
  68.   WriteLn(P,' is flagged as: ',HexByte(Byte(Att)),'h');
  69.   Write('  ');
  70.   if Att and ReadOnly <> 0 then
  71.     Write('ReadOnly ');
  72.   if Att and Hidden <> 0 then
  73.     Write('Hidden ');
  74.   if Att and SysFile <> 0 then
  75.     Write('SysFile ');
  76.   if Att and VolumeID <> 0 then
  77.     Write('VolumeID ');
  78.   if Att and Directory <> 0 then
  79.     Write('Directory ');
  80.   if Att and Archive <> 0 then
  81.     Write('Archive ');
  82.   if Att and _SHAREABLE <> 0 then
  83.     Write('Shareable');
  84.   WriteLn;
  85. end;
  86.  
  87. procedure FlagShare(P : String);
  88.  
  89. var
  90.   E : Word;
  91.  
  92. begin
  93.   E := MakeFileSharable(P);   { Try to flag it to shareable }
  94.   if E <> 0 then
  95.     WriteLn('MakeFileSharable error = ',E,' attempting to flag ',P);
  96.   ShowAtt(P);                 { show after }
  97. end;
  98.  
  99. var
  100.   I : Word;
  101.  
  102. begin
  103.   WriteLn('NFLAG - Flags files as sharable');
  104.   WriteLn('Version 1.0   4/16/88   Public Domain');
  105.   WriteLn;
  106.   if ParamCount < 1 then begin
  107.     WriteLn('syntax: NFLAG FileName1 FileName2...');
  108.     WriteLn('  the filename(s) may include the wildcards * and/or ?');
  109.     WriteLn('  the specified filenames must be in the current directory.');
  110.     WriteLn('  ex. NFLAG *.DAT RS*.EXE SPOOL??.* Q.EXE<cr>');
  111.     WriteLn('  ex. NFLAG *.*<cr>');
  112.     Halt(1)
  113.   end;
  114.   { Args and NArgs are set by the initialization code of the XArgs Unit }
  115.   for I := 1 to NArgs do { for each file matching some command line spec }
  116.     FlagShare(Args[I]);  { call the routine to flag the file to share }
  117. end. { We're out of here! }
  118.