When you are talking about logsegments it only makes sense to think of space in terms of reserved, and unreserved space. Here is a query I posted in the ASE for Custom Appplications forum. You can rewrite it for your purposes to cull out separate columns for "logsegment_freespace", "reserved_for_rollbacks", etc per row in sysusages. Replace "mydb" with your database name:
select db_name(u.dbid) as "dbname",s.name,
case u.segmap
when 4 then str(lct_admin("logsegment_freepages", db_id('mydb'))
- lct_admin("reserved_for_rollbacks", db_id('mydb')),12)
else str(sum(curunreservedpgs(u.dbid, u.lstart, u.unreservedpgs)),12)
end as "unreserved_pgs"
from master..sysdevices d
inner join
master..sysusages u
on d.vdevno = u.vdevno
inner join
syssegments s
on u.segmap & power(2,s.segment) != 0
where u.dbid = db_id('mydb')
and d.status & 2 = 2
group by db_name(u.dbid),s.name,u.segmap
go