[Back to DOS SWAG index]  [Back to Main SWAG index]  [Original]

PROGRAM FlushDem;

  FUNCTION DosFlush(VAR F) : BOOLEAN; Assembler;
  ASM
    MOV AX, 3000h       {get DOS version}
    INT 21h
    CMP AL, 3           {DOS < 3? old!}
    JL @old
    CMP AH, 1Eh         {DOS < 3.3? old!}
    LES DI, F
    MOV BX, ES:[DI]     {file handle is first word}
    MOV AH, 68h         {commit file function}
    INT 21h
    JC @BadEnd
    JMP @GoodEnd

    @old:
    LES DI, F
    MOV BX, ES:[DI]     {file handle is first word}
    MOV AH, 45h         {duplicate handle function}
    INT 21h
    JC @BadEnd
    @ok:
    MOV BX, AX          {put duped handle in BX...}
    MOV AH, 3Eh         {... and close it}
    INT 21h
    JC @BadEnd
    @GoodEnd:
    MOV AX, 0
    @BadEnd:
  END;

VAR
  T1, T2 : Text;
  S      : String;
  W      : Word;
BEGIN
  Assign(T1, 'DEMO1.$$$');
  Rewrite(T1);
  Assign(T2, 'DEMO2.$$$');
  Rewrite(T2);
  S := 'This is just a sample line of text.';
  FOR W := 1 to 100 DO
    BEGIN
      WriteLn(T1, W:4, ' ', S);
      WriteLn(T2, W:4, ' ', S);
    END;
  IF DosFlush(T2) THEN
    BEGIN
      WriteLn('Successfully flushed the second demo ',
              'file.  Please reboot your computer.');
      ReadLn;
      WriteLn('Hey, I said PLEASE reboot.  Oh well... ',
              ' I will erase the temporary files.');
      Close(T1);  Erase(T1);
      Close(T2);  Erase(T2);
    END
  ELSE WriteLn('DosFlush routine failed.');
END.

[Back to DOS SWAG index]  [Back to Main SWAG index]  [Original]