PROGRAM ListSVOs;

{  ======================================================================== }
{  = Programmname    : ListSVOs V7.1 PCQ                                  = }
{  =                                                                      = }
{  ======================================================================== }
{  = Autor/Copyright : (c) 1993-94 by Andreas R. Kleinert.                = }
{  =                   All rights reserved.                               = }
{  =                   PCQ-Konvertierung (c) 1994 by Andreas Neumann      = }
{  ======================================================================== }
{  = Funktion        : Show available svobjects of superview.library.     = }
{  =                                                                      = }
{  ======================================================================== }
{  = Letztes Update  : 15.7.1994                                          = }
{  =                                                                      = }
{  = Letztes PCQ-Update : 24.11.1994                                      = }
{  ======================================================================== }
{  = Bemerkungen     : "superview.library" V3+ needed.                    = }
{  =                                                                      = }
{  ======================================================================== }
{  = Compiler        : SAS/C V6.51      /   PCQ 1.2d                      = }
{  =                   (smakefile)                                        = }
{  ======================================================================== }

{$I "include:sv/superview/superviewbase.i" }
{$I "include:sv/svobjects/svobjectbase.i" }

{$I "include:sv/superview/WurzelSuperView.i" }

{$I "include:utils/stringlib.i" }
{$I "include:utils/parameters.i" }



CONST
   {  Help- and Info- Texts }

    entry1_text : String = "\n\c31;32;40mListSVOs V7.1 PCQ \c30;32;40m\c33;32;40m(FREEWARE)\n\c30;31;40m(c) 1993-94 by Andreas Ralph Kleinert. PCQ-Version by Andreas Neumann";
    entry2_text : String = "\nAndreas R. Kleinert, Grube Hohe Grethe 23, D-57074 Siegen, Germany.";
    entry3_text : String = "\nAndreas Neumann, c/o Schnitzler, Espenhausen 3, 35091 Cölbe, Germany.";
    entry4_text : String = "\nLists up available svobjects of superview.library\n";
    entry5_text : String = "USAGE : \c30;33;40m\"ListSVOs\"\c30;31;40m\n";

    ver_text    : String = "\0$VER: ListSVOs V7.1 PCQ (24.11.94)";


{  *************************************************** }
{  *                                                 * }
{  * Error-Messages for Leave() and KF_Message()     * }
{  *                                                 * }
{  *************************************************** }

    svlib_text : String = "You need superview.library V3+ !";
    string_text : String = "Can't allocate string !";


VAR
    obj_list    :   ^List;
    sv_node     :   NodePtr;
    svo_node    :   SVO_ObjectNodePtr;
    i           :   INTEGER;
    argc        :   String;


FUNCTION ByteToUByte (bi : BYTE) : SHORT;

VAR btu :   SHORT;

BEGIN
 btu:=bi;
 IF btu>127 THEN
  btu:=btu-256;
 ByteToUByte:=btu;
END;

BEGIN
 obj_list:=NIL;
 svo_node:=NIL;
 argc:=AllocString (255);
 IF argc=NIL THEN
  Writeln (string_text)
 ELSE
 BEGIN
  GetParam(1,argc);
  IF StriCmp (argc,"-?")=0 THEN
   WRITELN (entry1_text,entry2_text,entry3_text,entry4_text,entry5_text)
  ELSE
  BEGIN
   IF StrLen (argc)=0 THEN
   BEGIN
    SuperViewBase:=Address(OpenLibrary("superview.library", 3));
    IF SuperViewBase=NIL THEN
     WRITELN (svlib_text)
    ELSE
    BEGIN

     WRITE("\nList of available svobjects :");

     obj_list:=Adr(SuperViewBase^.svb_SVObjectList);
     sv_node:=obj_list^.lh_Head;
     svo_node:=Address(sv_node);

     WHILE (svo_node<>NIL) AND (sv_node^.ln_Pred<>obj_list^.lh_TailPred) DO
     BEGIN

{ for(svo_node=(APTR) obj_list->lh_Head;(svo_node)&&(svo_node!=(APTR) &(obj_list->lh_Tail));) }
      WRITE ("\n\n");

      WRITE ("\nSVObject : \"", svo_node^.svo_FileName,"\"");
      WRITE ("\nsvo-Type : ", svo_node^.svo_ObjectType);
      WRITE ("\nPriority : ", ByteToUByte(sv_node^.ln_Pri));
      WRITE ("\nTypeID   : \"", svo_node^.svo_TypeID,"\"");
      WRITE ("\nTypeCode : ", svo_node^.svo_TypeCode);

      FOR i:=1 TO svo_node^.svo_SubTypeNum DO
      BEGIN
       WRITE ("\n\n",i:2,".SubType     :");
       WRITE ("\n   SubTypeID   : \"", svo_node^.svo_SubTypeID[i],"\"");
       WRITE ("\n   SubTypeCode : ", svo_node^.svo_SubTypeCode[i]);
      END;

      IF (svo_node^.svo_Version > 1) THEN
      BEGIN
       WRITE ("\n\nFlags    :");

       IF (svo_node^.svo_Flags AND SVO_FLAG_READS_TO_BUFFER)>0 THEN WRITE (" file->buffer");
       IF (svo_node^.svo_Flags AND SVO_FLAG_READS_TO_SCREEN)>0 THEN WRITE (" file->screen");
       IF (svo_node^.svo_Flags AND SVO_FLAG_WRITES_FROM_BUFFER)>0 THEN WRITE (" buffer->file");
       IF (svo_node^.svo_Flags AND SVO_FLAG_WRITES_FROM_SCREEN)>0 THEN WRITE (" screen->file");
       IF (svo_node^.svo_Flags AND SVO_FLAG_SUPPORTS_SVDRIVER)>0 THEN WRITE (" svdriver?");
       IF (svo_node^.svo_Flags AND SVO_FLAG_NEEDS_SVDRIVER)>0 THEN WRITE (" svdriver!");
      END
      ELSE
       WRITE ("\n\nNo flag field found (Version 1 SVObject)");

      sv_node:=sv_node^.ln_Succ;
      svo_node:=Address(sv_node);
     END;

     WRITE ("\n\nNo more svobjects available.\n\n");
     CloseLibrary (Address(SuperViewBase));
    END;
   END;
  END;
  FreeString(argc);
 END;
END.
