[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]