{$PAGESIZE:64,$TITLE:'DOSFTEST -- TEST PROGRAM FOR DOS UTILITIES'}
{Listing is turned off for including FILKQQ.INC}
{$LIST-}
{$INCLUDE:'FILKQQ.INC'}
{$LIST+}
{$INCLUDE:'DOSFUN.INC'}

PROGRAM DOSFTEST(INPUT,OUTPUT);

USES FILKQQ,DOSFUN;

TYPE
  CMDS = (CPFN,CREN,CDEL,CDIR,CEXI,CNONE);

VAR
  CMD:CMDS;
  LIN:LSTRING(81);
  F:DOSFCB;
  FDIR:FCBFQQ;

FUNCTION CMPLSTR(CONST S1,S2:LSTRING):BOOLEAN;
  {Function compares two LSTRINGS for equality
    returns TRUE if identical else FALSE}

  VAR I:WORD; {Loop counter}

  BEGIN
    IF(S1.LEN <> S2.LEN) THEN [CMPLSTR := FALSE; RETURN];
    IF(S1.LEN = 0) THEN [CMPLSTR := TRUE; RETURN];
    FOR I := 1 TO S1.LEN DO
        IF (S1[I] <> S2[I]) THEN [CMPLSTR := FALSE; RETURN];
    CMPLSTR := TRUE;
  END;

FUNCTION GET_CMD(VAR S:LSTRING):CMDS;
  
  VAR
    C:LSTRING(3);
    I:INTEGER;
    T:BOOLEAN;

  BEGIN
    IF (S.LEN < 3) THEN [GET_CMD := CNONE; RETURN];
    FOR I := 1 TO 3 DO C[I] := S[I]; {fix for lookup}
    C.LEN := 3;
    DELETE(S,1,3);  {Remove command from string} 
    T := CMPLSTR(C,'PFN');
    IF T THEN [GET_CMD := CPFN; RETURN];
    T := CMPLSTR(C,'REN');
    IF T THEN [GET_CMD := CREN; RETURN];
    T := CMPLSTR(C,'DEL');
    IF T THEN [GET_CMD := CDEL; RETURN];
    T := CMPLSTR(C,'DIR');
    IF T THEN [GET_CMD := CDIR; RETURN];
    T := CMPLSTR(C,'EXI');
    IF T THEN GET_CMD := CEXI ELSE GET_CMD := CNONE;
  END;

PROCEDURE EXE_PFN;

  BEGIN
    PFNAME(LIN,F);
    WRITELN(OUTPUT,'PFNAME RESULT = ',F.DR,':',F.FN,'.',F.FT);
  END;

PROCEDURE EXE_DIR;

  VAR I:BOOLEAN;

  BEGIN
    I:=SDIRS(LIN,FDIR);
    IF (NOT I) THEN [WRITELN(OUTPUT,'SDIRS IS FALSE');RETURN];
    WHILE I DO
      BEGIN
        MOVEL(ADR FDIR.SBUF,ADR F,32); {Move result}
        WRITELN(OUTPUT,F.DR,':',F.FN,'.',F.FT);
        I := CDIRS(FDIR);
      END;
  END;

PROCEDURE EXE_DEL;

 VAR I:BOOLEAN;

  BEGIN
    I := DEL(LIN);
    IF I THEN WRITELN(OUTPUT,'FILE(S) DELETED')
      ELSE WRITELN(OUTPUT,'FILE NOT FOUND');
  END;

PROCEDURE EXE_REN;

  VAR I:BOOLEAN;
      LIN1,LIN2:LSTRING(20);

  BEGIN
    WRITE(OUTPUT,'INPUT FROM FILE NAME:  ');
    READLN(INPUT,LIN1);
    WRITE(OUTPUT,'INPUT TO FILE NAME:    ');
    READLN(INPUT,LIN2);
    I := RENAME(LIN1,LIN2);
    IF I THEN WRITELN(OUTPUT,'NAME CHANGED')
      ELSE WRITELN(OUTPUT,'NAME WAS NOT CHANGED');
  END;
     

BEGIN
  WRITELN(OUTPUT,'DOSFUN TEST PROGRAM');
  WRITELN(OUTPUT);
  WRITELN(OUTPUT,'COMMANDS: PFN,REN,DEL,DIR,EXI');
  READLN(INPUT,LIN);
  CMD := GET_CMD(LIN); {Get command from input}
  WHILE (CMD <> CEXI) DO
    BEGIN
      CASE CMD OF
      CPFN:EXE_PFN;
      CREN:EXE_REN;
      CDEL:EXE_DEL;
      CDIR:EXE_DIR
      OTHERWISE WRITELN(OUTPUT,'ILLEGAL COMMAND')
      END;
     READLN(INPUT,LIN);
     CMD := GET_CMD(LIN);
    END;
END/EX
