MODULE ListNV;
(*
  $StackChk-
  $RangeChk-
  $NilChk-
  $OvflChk-
  $ReturnChk-
  $CaseChk-
*)

IMPORT
  y := SYSTEM,

  (* Interfaces *)
  d := Dos,
  e := Exec,
  nv := NonVolatile,

  str := Strings;

CONST
  template = "AN=APPNAME/A,KR=KILLREQUESTER/S"
             "\o$VER: ListNV.mod 1.0 (30.09.95)";

TYPE
  Args = STRUCT (as :d.ArgsStruct)
    appName   :d.ArgString;
    killReq   :d.ArgBool;
  END;

VAR
  args      :d.RDArgsPtr;
  argv      :Args;

  list      :e.MinListPtr;
  entry,
  nextEntry :nv.NVEntryPtr;

BEGIN
  IF nv.base=NIL THEN
    d.PrintF("No nonvolatile.library!\n");
    HALT(20);
  END;

  args := d.ReadArgs(template, argv, NIL);
  IF args=NIL THEN
    IF d.PrintFault(d.IoErr(), "ListNV") THEN END;
    HALT(20);
  END;

  list := nv.GetNVList(argv.appName^, argv.killReq);
  entry := list.head;
  LOOP
    nextEntry := entry.node.succ;
    IF nextEntry=NIL THEN EXIT END;
    d.PrintF("%s", entry.name);
    IF nv.delete IN y.VAL(LONGSET, entry.protection) THEN
      d.PrintF("*");
    END;
    d.PrintF("\n");
    entry := nextEntry;
  END;

CLOSE
  d.FreeArgs(args);
  nv.FreeNVData(y.VAL(nv.DataPtr, list));
END ListNV.
