1// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
2//
3//  Copyright (c) 2001-2003, Haiku
4//
5//  This software is part of the Haiku distribution and is covered
6//  by the MIT License.
7//
8//
9//  File:        listport.c
10//  Author:      Daniel Reinhold (danielre@users.sf.net)
11//  Description: lists all open ports in the system, organized by team
12//
13// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
14
15#include <stdio.h>
16#include <stdlib.h>
17#include <OS.h>
18
19
20void list_team_ports  (team_id id);
21void show_port_totals (void);
22
23
24
25int
26main(int argc, char **argv)
27{
28	show_port_totals();
29
30	if (argc == 1) {
31		int32     cookie = 0;
32		team_info info;
33
34		// list for all teams
35		while (get_next_team_info(&cookie, &info) >= B_OK)
36			list_team_ports(info.team);
37	}
38	else
39		// list for each team_id on the command line
40		while (--argc)
41			list_team_ports(atoi(*++argv));
42
43	return 0;
44}
45
46
47void
48show_port_totals()
49{
50	int32       max = 0, used = 0, left;
51	system_info sys;
52
53	if (get_system_info(&sys) == B_OK) {
54		max  = sys.max_ports;
55		used = sys.used_ports;
56	}
57
58	left = max - used;
59
60	printf("port: total: %5" B_PRId32 ", "
61		"used: %5" B_PRId32 ", "
62		"left: %5" B_PRId32 "\n",
63			max,
64			used,
65			left);
66}
67
68
69void
70list_team_ports(team_id id)
71{
72	int32      cookie = 0;
73	port_info  this_port;
74	team_info  this_team;
75
76	if (get_team_info(id, &this_team) == B_BAD_TEAM_ID) {
77		printf("\nteam %" B_PRId32 " unknown\n", id);
78		return;
79	}
80
81	printf("\nTEAM %4" B_PRId32 " (%s):\n", id, this_team.args);
82	printf("   ID                         name  capacity  queued\n");
83	printf("----------------------------------------------------\n");
84
85	while (get_next_port_info(id, &cookie, &this_port) == B_OK) {
86		printf("%5" B_PRId32 " %28s  %8" B_PRId32 "  %6" B_PRId32 "\n",
87		        this_port.port,
88		        this_port.name,
89		        this_port.capacity,
90		        this_port.queue_count);
91	}
92}
93
94