home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / monitors / rsys / source.lha / src / RSysDisplays.c < prev    next >
C/C++ Source or Header  |  1995-01-09  |  15KB  |  490 lines

  1. /*
  2. ***************************************************************************
  3. *
  4. * Datei:
  5. *    RSysDisplays.c
  6. *
  7. * Inhalt:
  8. *    int DisplayDiskInfo(char *filename, int with_tree);
  9. *    int DisplayFileInfo(char *filename);
  10. *    void DisplayDirectoryInfo(char *filename);
  11. *    int DisplayTaskInfo(struct objectid *obj);
  12. *    int DisplayLibraryInfo(struct objectid *obj);
  13. *    void DisplaySoftDevInfo(struct objectid *obj);
  14. *    void DisplayResourceInfo(struct objectid *obj);
  15. *    int DisplayPortInfo(struct objectid *obj);
  16. *    void ShowFont(struct TextFont *tf);
  17. *    int DisplayFontInfo(struct objectid *obj);
  18. *    int DisplayWindowInfo(struct objectid *obj);
  19. *    int DisplayScreenInfo(struct objectid *obj);
  20. *
  21. * Bemerkungen:
  22. *    Funktionen zur Anzeige weiterer Informationen zu ausgewählten
  23. *    Objekten.
  24. *
  25. * Erstellungsdatum:
  26. *    07-Jul-93    Rolf Böhme
  27. *
  28. * Änderungen:
  29. *    07-Jul-93    Rolf Böhme    Erstellung
  30. *
  31. ***************************************************************************
  32. */
  33.  
  34. #include "RSysDebug.h"
  35. #include "RSysFunc.h"
  36.  
  37.    /*
  38.     * DisplayDiskInfo() zeigt eine Info über ein Volume an.
  39.     * Auf Wunsch kann die Verzeichnisstruktur angezeigt
  40.     * werden
  41.     */
  42. int
  43. DisplayDiskInfo(char *filename, int with_tree)
  44. {
  45.    int   sel;
  46.    long free = 0L,used = 0L,percentused = 0L;
  47.    char state[5],type[6];
  48.  
  49.    DPOS;
  50.  
  51.    FreeBytes(filename, &free, &used, &percentused, state, type);
  52.  
  53.    sel = MyEasyRequest(SysWnd, (UBYTE *) NAME " - Volume/Device Info",
  54.                        (UBYTE *) ((with_tree) ? "Continue|Tree" : "Continue"),
  55.                        (UBYTE *) "Name    : %-20.20s\n"
  56.                        "Size    : %7ld KBytes\n"
  57.                        "Free    : %7ld KBytes\n"
  58.                        "Used    : %7ld KBytes\n"
  59.                        "%% used  : %3ld%%\n"
  60.                        "State   : %s\n"
  61.                        "Type    : %s",
  62.                        filename,
  63.                        free + used,
  64.                        free, used, percentused,
  65.                        state, type);
  66.  
  67.    return (sel);
  68. }
  69.  
  70.    /*
  71.     * DisplayFileInfo() zeigt Infos über eine Datei an.
  72.     * Handelt es sich um ein Executable, kann eine Hunk-Liste
  73.     * erzeugt werden lassen
  74.     */
  75. int
  76. DisplayFileInfo(char *filename)
  77. {
  78.    char  path[MAXFULLNAME],
  79.         *help,
  80.          file[MAXFULLNAME];
  81.    int   sel,
  82.          ftype = filetype(filename);
  83.  
  84.    DPOS;
  85.  
  86.    strncpy(path, filename,MAXFULLNAME);
  87.    help = (char *)PathPart((UBYTE *) path);
  88.    *help = STRINGEND;
  89.  
  90.    strncpy(file, (char *)FilePart((UBYTE *) filename),MAXFULLNAME);
  91.  
  92.    sel = MyEasyRequest(NULL, (UBYTE *) NAME " - File Info",
  93.                        (UBYTE *) ((ftype == TYPE_EXECUTABLE) ?
  94.                                   "Continue|Hunk list" : "Continue"),
  95.                        (UBYTE *) "Filename : %-20.20s\n"
  96.                        "Path     : %s\n"
  97.                        "Size     : %ld Bytes\n"
  98.                        "Type     : %s",
  99.                        file, path, SizeOfFile(filename),
  100.                        mess[filetype(filename)]);
  101.  
  102.    if (ftype != TYPE_EXECUTABLE)
  103.       return (TRUE);
  104.  
  105.    return (sel);
  106. }
  107.  
  108.    /*
  109.     * DisplayDirectoryInfo() zeigt Infos über ein Verzeichnis
  110.     * an
  111.     */
  112. void
  113. DisplayDirectoryInfo(char *filename)
  114. {
  115.    int   count,
  116.          Dirs = 0;
  117.    long  Size = 0L;
  118.    char  path[MAXFULLNAME],
  119.         *help;
  120.    BPTR  lock;
  121.  
  122.    DPOS;
  123.  
  124.    strncpy(path, filename,MAXFULLNAME);
  125.    help = (char *)PathPart((UBYTE *) path);
  126.    *help = STRINGEND;
  127.  
  128.    if (lock = Lock((UBYTE *) path, MODE_OLDFILE))
  129.    {
  130.       count = SizeOfDir(lock, &Size, &Dirs);
  131.       UnLock(lock);
  132.    }
  133.    else
  134.       count = Size = Dirs = 0;
  135.  
  136.    MyEasyRequest(NULL, (UBYTE *) NAME " - Directory Info", (UBYTE *) "Continue",
  137.                  (UBYTE *) "Path       : %s\n"
  138.                  "# Files    : %ld\n"
  139.                  "# Sub-Dirs : %ld\n"
  140.                  "Total      : %ld Bytes",
  141.                  path, count, Dirs, Size);
  142.    return;
  143. }
  144.  
  145.    /*
  146.     * DisplayTaskInfo() zeigt Infos über einen Task an. Auf
  147.     * Wunsch kann der Task gekillt, ein Signal gesendet oder
  148.     * die Priorität geändert werden
  149.     */
  150. int
  151. DisplayTaskInfo(struct objectid *obj)
  152. {
  153.    struct Task *task = (struct Task *) obj->address,display_task;
  154.    char *status[]=
  155.    {
  156.       "Invalid", "Adding ", "Running", "Ready ", "Waiting", "Except", "Remove"
  157.    };
  158.    int   sel = 7,
  159.          wins = 0,
  160.          scrs = 0,
  161.          ports = 0;
  162.  
  163.    DPOS;
  164.  
  165.    Disable();
  166.    CopyMem(task,&display_task,sizeof(struct Task));
  167.    Enable();
  168.  
  169.    CountAssocObjects(task, &wins, &scrs, &ports);
  170.  
  171.    sel = MyEasyRequest(SysWnd, (UBYTE *) NAME " " VERSION " - Task Control",
  172.                        (UBYTE *) "Continue|^C|^D|^E|^F|Prio|Kill!",
  173.                        (UBYTE *) "Name : %-20.20s  (%s) Prio: %-4ld\n"
  174.                        "Address   : 0x%08lx  Flags     : 0x%08lx\n"
  175.                        "State     : %8s      IDNest    : %-8ld\n"
  176.                        "TDNest    : %-8ld    SigAlloc  : 0x%08lx\n"
  177.                        "SigWait   : 0x%08lx  SigRecvd  : 0x%08lx\n"
  178.                        "SigExcept : 0x%08lx  Stack     : %-5ld\n\n"
  179.                        "Associated Objects\n"
  180.                        "Ports     : %4ld - Windows : %4ld\n"
  181.                        "Screens   : %4ld",
  182.                        obj->fullname,
  183.                        (display_task.tc_Node.ln_Type == NT_TASK) ? "Task" : "Process",
  184.                        display_task.tc_Node.ln_Pri,
  185.                        task, display_task.tc_Flags, status[display_task.tc_State],
  186.                        display_task.tc_IDNestCnt, display_task.tc_TDNestCnt,
  187.                        display_task.tc_SigAlloc, display_task.tc_SigWait, display_task.tc_SigRecvd,
  188.                        display_task.tc_SigExcept,
  189.                        ((ULONG) display_task.tc_SPUpper - (ULONG) display_task.tc_SPLower),
  190.                        ports, wins, scrs);
  191.  
  192.    return (sel);
  193. }
  194.  
  195.    /*
  196.     * savecpyid() kopiert den ID-String einer Library in ein
  197.     * Zeichenfeld. Am Ende des Strings erscheinen häufig zwei
  198.     * Sonderzeichen, die hier entfernt werden
  199.     */
  200. static void
  201. savecpyid(char *IDStr,struct Library *lib)
  202. {
  203.    char *id;
  204.  
  205.    id = (char *)lib->lib_IdString;
  206.  
  207.    if(id && *id)
  208.    {
  209.       strncpy(IDStr,id,40);
  210.  
  211.       if(!isprint((int)IDStr[strlen(IDStr)-1]))
  212.          IDStr[strlen(IDStr)-1] = STRINGEND;
  213.       if(!isprint((int)IDStr[strlen(IDStr)-2]))
  214.          IDStr[strlen(IDStr)-2] = STRINGEND;
  215.    }
  216.    else
  217.       strcpy(IDStr, field[NO_LIB_ID]);
  218.  
  219.    return;
  220. }
  221.  
  222.    /*
  223.     * makelibflags() erzeugt entsprechend der Library-Flags
  224.     * einen "lesbaren" String
  225.     */
  226. static char *
  227. makelibflags(struct Library *lib,char *flags)
  228. {
  229.    if(lib->lib_Flags == 0)
  230.       strcpy(flags, field[NO_FLAGS]);
  231.    else
  232.       sprintf(flags,"%10s %10s %10s %10s",
  233.               (lib->lib_Flags & LIBF_SUMMING) ? "CheckSum" : field[BLANK_FIELD],
  234.               (lib->lib_Flags & LIBF_CHANGED) ? "Changed" : field[BLANK_FIELD],
  235.               (lib->lib_Flags & LIBF_SUMUSED) ? "ResetByErr" : field[BLANK_FIELD],
  236.               (lib->lib_Flags & LIBF_DELEXP) ?  "DelExpunge" : field[BLANK_FIELD]);
  237.  
  238.    return(flags);
  239. }
  240.  
  241.    /*
  242.     * DisplayLibraryInfo() zeigt alle Infos über eine Library
  243.     * an
  244.     */
  245. int
  246. DisplayLibraryInfo(struct objectid *obj)
  247. {
  248.    int   sel;
  249.    struct Library *lib = (struct Library *) obj->address;
  250.    char IDStr[41];
  251.    char flags[45];
  252.  
  253.    DPOS;
  254.  
  255.    savecpyid(IDStr,lib);
  256.  
  257.    sel = MyEasyRequest(SysWnd, (UBYTE *) NAME " " VERSION " - Library Control",
  258.                        (UBYTE *) "Continue|Remove Library",
  259.                        (UBYTE *) "Type           : Library\n"
  260.                        "Name           : %s\n"
  261.                        "ID-String      : %-30.30s\n"
  262.                        "Address        : 0x%08lx\n"
  263.                        "Flags          : %s\n"
  264.                        "Jump-Table-Size: %4ld Bytes   Data-Size   : %ld Bytes\n"
  265.                        "CheckSum       : 0x%08lx",
  266.                        obj->fullname, IDStr, obj->address,
  267.                        makelibflags(lib,flags),
  268.                        lib->lib_NegSize,
  269.                        lib->lib_PosSize,
  270.                        lib->lib_Sum);
  271.  
  272.    return (sel);
  273. }
  274.  
  275.    /*
  276.     * DisplaySoftDevInfo() zeigt alle Infos über ein
  277.     * *.device an
  278.     */
  279. void
  280. DisplaySoftDevInfo(struct objectid *obj)
  281. {
  282.    struct Library *lib = (struct Library *) obj->address;
  283.    char IDStr[40];
  284.    char flags[45];
  285.  
  286.    DPOS;
  287.  
  288.    savecpyid(IDStr,lib);
  289.  
  290.    MyEasyRequest(SysWnd,
  291.                  (UBYTE *) NAME " " VERSION " - Software Device Info",
  292.                  (UBYTE *) "Continue",
  293.                  (UBYTE *) "Type           : Software Device\n"
  294.                  "Name           : %s\n"
  295.                  "ID-String      : %-30.30s\n"
  296.                  "Address        : 0x%08lx\n"
  297.                  "Flags          : %s\n"
  298.                  "Jump-Table-Size: %4ld Bytes   Data-Size   : %ld Bytes\n"
  299.                  "CheckSum       : 0x%08lx",
  300.                  obj->fullname, IDStr, obj->address,
  301.                  makelibflags(lib,flags),
  302.                  lib->lib_NegSize,
  303.                  lib->lib_PosSize,
  304.                  lib->lib_Sum);
  305.  
  306.    return;
  307. }
  308.  
  309.    /*
  310.     * DisplayResourceInfo() zeigt alle Infos über eine .resource
  311.     * an
  312.     */
  313. void
  314. DisplayResourceInfo(struct objectid *obj)
  315. {
  316.    struct Library *lib = (struct Library *) obj->address;
  317.    char flags[45];
  318.  
  319.    DPOS;
  320.  
  321.    MyEasyRequest(SysWnd,
  322.                  (UBYTE *) NAME " " VERSION " - RessourceInfo",
  323.                  (UBYTE *) "Continue",
  324.                  (UBYTE *) "Type           : Ressource\n"
  325.                  "Name           : %s\n"
  326.                  "Address        : 0x%08lx\n"
  327.                  "Flags          : %s\n"
  328.                  "Jump-Table-Size: %4ld Bytes   Data-Size   : %ld Bytes\n"
  329.                  "CheckSum       : 0x%08lx",
  330.                  obj->fullname, obj->address,
  331.                  makelibflags(lib,flags),
  332.                  lib->lib_NegSize,
  333.                  lib->lib_PosSize,
  334.                  lib->lib_Sum);
  335.  
  336.    return;
  337. }
  338.  
  339.    /*
  340.     * DisplayPortInfo() zeigt Infos über einen Port an
  341.     */
  342. int
  343. DisplayPortInfo(struct objectid *obj)
  344. {
  345.    int   sel;
  346.    struct MsgPort *port;
  347.    char  sigtask[MAXFULLNAME];
  348.    struct Task *task;
  349.    char *flags[]=
  350.    {
  351.       "Signal", "SoftInt", "Ignore"
  352.    };
  353.  
  354.    DPOS;
  355.  
  356.    Disable();
  357.    port = (struct MsgPort *) obj->address;
  358.    if (port->mp_SigTask)
  359.    {
  360.       task = (struct Task *) (port->mp_SigTask);
  361.       savestrcpy(sigtask, &task->tc_Node, MAXFULLNAME, NT_TASK);
  362.    }
  363.    else
  364.       strcpy(sigtask, field[NO_TASK]);
  365.  
  366.    Enable();
  367.  
  368.    sel = MyEasyRequest(SysWnd, (UBYTE *) NAME " " VERSION " - Port Control",
  369.                        (UBYTE *) "Continue|Remove Port",
  370.                        (UBYTE *) "Type        : %s\n"
  371.                        "Address     : 0x%08lx\n"
  372.                        "Name        : %-20.20s\n"
  373.                        "Signal-Task : %-20.20s\n"
  374.                        "Flags       : %s",
  375.                        "Port", obj->address, obj->fullname, sigtask,
  376.                        flags[port->mp_Flags]);
  377.  
  378.    return (sel);
  379. }
  380.  
  381.    /*
  382.     * DisplayFontInfo() zeigt alle Infos über einen Font an.
  383.     * Dieser kann dann wahlweise entfernt oder angezeigt
  384.     * werden
  385.     */
  386. int
  387. DisplayFontInfo(struct objectid *obj)
  388. {
  389.    int   sel;
  390.  
  391.    DPOS;
  392.  
  393.    sel = MyEasyRequest(SysWnd, (UBYTE *) NAME " " VERSION " - Font Control",
  394.                        (UBYTE *) "Continue|Show Font|Remove Font",
  395.                        (UBYTE *) "Type    : %s\n"
  396.                        "Address : 0x%08lx\n"
  397.                        "Name    : %s",
  398.                        "Font", obj->address, obj->fullname);
  399.  
  400.    return (sel);
  401. }
  402.  
  403.    /*
  404.     * DisplayWindowInfo() zeigt Infos über ein Fenster an
  405.     */
  406. int
  407. DisplayWindowInfo(struct objectid *obj)
  408. {
  409.    int   sel;
  410.    struct Window disp_win;
  411.    ULONG lock;
  412.  
  413.    DPOS;
  414.  
  415.    lock = LockIBase(NULL);
  416.    CopyMem((struct Window *)(obj->address),&disp_win,sizeof(struct Window));
  417.    UnlockIBase(lock);
  418.  
  419.    sel = MyEasyRequest(SysWnd, (UBYTE *) NAME " " VERSION " - Window Control",
  420.                        (UBYTE *) "Continue|Close Window",
  421.                        (UBYTE *)
  422.                        "Type     : Window   Address : 0x%08lx\n"
  423.                        "Name     : %-30.30s\n"
  424.                        "Next     : 0x%08lx\n"
  425.                        "LeftEdge : %-4ld        TopEdge  : %-4ld\n"
  426.                        "Width    : %-4ld        Height   : %-4ld\n"
  427.                        "MinWidth : %-4ld        MinHeight: %-4ld\n"
  428.                        "MaxWidth : %-4ld        MaxHeight: %-4ld\n"
  429.                        "Flags    : 0x%08lx  Menu: %s\n"
  430.                        "Requester: %s       ReqCount: %ld  DMReq: %s\n"
  431.                        "IDCMP    : 0x%08lx  Detail: %-2ld   Block: %2ld",
  432.                        obj->address, obj->fullname,
  433.                        disp_win.NextWindow,
  434.                        disp_win.LeftEdge,disp_win.TopEdge,
  435.                        disp_win.Width,disp_win.Height,
  436.                        disp_win.MinWidth,disp_win.MinHeight,
  437.                        disp_win.MaxWidth,disp_win.MaxHeight,
  438.                        disp_win.Flags,(disp_win.MenuStrip ? "Yes" : "No"),
  439.                        (disp_win.FirstRequest ? "Yes" : "No"),disp_win.ReqCount,
  440.                        (disp_win.DMRequest ? "Yes" : "No"),disp_win.IDCMPFlags,
  441.                        disp_win.DetailPen,disp_win.BlockPen );
  442.  
  443.    return (sel);
  444. }
  445.  
  446.    /*
  447.     * DisplayScreenInfo() zeigt Infos über ein Screen an
  448.     */
  449. int
  450. DisplayScreenInfo(struct objectid *obj)
  451. {
  452.    int   sel;
  453.    struct Screen disp_scr;
  454.    ULONG lock;
  455.  
  456.    DPOS;
  457.  
  458.    lock = LockIBase(NULL);
  459.    CopyMem((struct Screen *)(obj->address),&disp_scr,sizeof(struct Screen));
  460.    UnlockIBase(lock);
  461.  
  462.    sel = MyEasyRequest(SysWnd, (UBYTE *) NAME " " VERSION " - Screen Control",
  463.                        (UBYTE *) "Continue|Close Screen",
  464.                        (UBYTE *) "Type     : Screen   Address : 0x%08lx\n"
  465.                        "Name     : %.20s\n"
  466.                        "Next     : 0x%08lx\n"
  467.                        "LeftEdge : %-4ld  TopEdge  : %-4ld\n"
  468.                        "Width    : %-4ld  Height   : %-4ld\n"
  469.                        "BarHeight: %-4ld  BarVBord : %-4ld\n"
  470.                        "BarHBord : %-4ld  MenuVBord: %-4ld\n"
  471.                        "MenuHBord: %-4ld  WBorTop  : %-4ld\n"
  472.                        "WBorLeft : %-4ld  WBorRight: %-4ld\n"
  473.                        "WBorBott : %-4ld  DetailPen: %-4ld\n"
  474.                        "BlockPen : %-4ld  FlashCol : %-4ld\n"
  475.                        "Flags    : 0x%08lx",
  476.                        obj->address, obj->fullname,
  477.                        disp_scr.NextScreen,
  478.                        disp_scr.LeftEdge,disp_scr.TopEdge,
  479.                        disp_scr.Width,disp_scr.Height,
  480.                        disp_scr.BarHeight,disp_scr.BarVBorder,
  481.                        disp_scr.BarHBorder,disp_scr.MenuVBorder,
  482.                        disp_scr.MenuHBorder,disp_scr.WBorTop,
  483.                        disp_scr.WBorLeft,disp_scr.WBorRight,
  484.                        disp_scr.WBorBottom,disp_scr.DetailPen,
  485.                        disp_scr.BlockPen,disp_scr.SaveColor0,
  486.                        disp_scr.Flags);
  487.  
  488.    return (sel);
  489. }
  490.