#!/bin/sh

# usage: psinfo.sh keyword cmd [args...]
#  keyword = [EXEC, FILES, FILES(RD), FILES(WR), LCALLS, SCALLS, LCALLS(set), SCALLS(set)]
#   set = [files, dirs, links, pipes, fileaccess, sharing, process, memory, signals, networking]

# use with >>>> sh "ls -l|nl|wc"
# use with >>>> ls -a
#
# hints:
#  vsechny otevirane soubory pozname kdyz stracu dame parametr "-e open"
#  soubory pro cteni FILES(RD) pozname podle O_RDONLY
#  soubory pro zapis FILES(WR) pozname podle O_WRONLY
#
#  vypis apropos | najdi jenom to co chceme | nechej jen ten popis | ??? | PROFIT!!!
# apropos fork | egrep '^\bfork\b' | egrep '(2)' | sed 's/.*-/-/'
#
#  volani zapisovat ve forme "blabla", pak pokud je apropos, pozname z toho, 
#  ze tam bude '.*- ' / popripade v promenne neco bude
#  systemova volani stranku (2), knihovni volani dle priority od nejvetsi (3p), (3), (2)
#
# strace:
#  pro keyword EXEC, FILES, SCALLS
#  -f sleduje i forky
#  -e open vytiskne jen volani open
#
# ltrace:
#  pro keyword LCALLS

###TODO
# LCALLS(set), SCALLS(set)
# pouzit jeste jednu promennou na open|fopen|read|fread a podobne sra[jn]dy
###FIXME
# LCALLS, SCALLS
# LCALLS vypisuje <... fork resumed> )                             = 9596
###DONE FINISHED
# momentalne zhruba vsechno


#TODO
##### Prace se soubory: (cteni a zapis) 
#files = {open, fopen, read, fread, write, fwrite, lseek, fseek, close, fclose}

##### Prace s adresari: 
# dirs = {rename, getcwd, chdir, mkdir, rmdir, opendir, closedir, scandir, seekdir, telldir, getdents, readdir, fopendir, dirfd, fchdir}

##### Prace s linky: 
# links = {link, unlink, readlink, symlink}

##### Roury a dalsi: 
# pipes = {dup, dup2, pipe, mknod}

##### Souborovy pristup: 
# fileaccess = {access, stat, fstat, lstat, chmod, fchmod, chown, fchown, utime}

##### Sdileni prostredku: 
# sharing = {select, poll, semop, semget, semctl, shmat, shmget, shmctl, shmdt, msgctl, msgget, msgrcv, msgsnd}

##### Prace s procesy: 
# process = {clone, execve, _exit, exit_group, fork, unshare, getpid, getppid, getpgrp, setpgrp, wait4, waitid, waitpid}

##### Prace s pameti: 
# memory = {calloc, malloc, free, realloc, brk, mmap, alloca, shmat, shmget, shmctl, shmdt}

##### Signaly: 
# signals = {kill, sigprocmask, sigaction, sigdelset, sigemptyset, rt_sigaction, rt_sigprocmask}

##### Sit: 
# networking = {socket, bind, connect, listen, accept, send, recv}

### vytvor unikatni temp soubor (obycejne 'mktemp' mi v Intepid vytvarelo soubor s nazvem mktemp, proto takhle slozite)
TEMP="$(mktemp tmp.XXXXXX)" || exit 1
### zjisti zakladni operaci pomoci odriznuti vseho v zavorce - FILES projde cele, z LCALLS(neco) zbude LCALLS
OPERATION="$( echo $1 | sed 's/[:blank:]*(.*//' )"
### zjisti subset operaci [LS]CALLS pomoci odriznuti vseho kolem zavorky
SUBSET="$(echo $1 | egrep 'SCALLS|LCALLS' | sed 's/[SL]CALLS//' | sed 's/.*(//' | sed 's/).*//')"
shift

######## EXEC
if [ "$OPERATION" = "EXEC" ]; then
  strace -o "$TEMP" -f $@ > /dev/null
  #vypis soubor | vygrepuj jen volani | odrizni PID | odrizni vsechno az po nazev volani | odrizni vse po nazvu volani | vymaz prazdne radky | protrid
  cat "$TEMP" | grep execve | sed 's/[0-9]*//' | sed 's/.*execve("//' | sed 's/"*,* .*//' | sed '/^$/d' | sort -u
fi
######## FILES
if [ "$OPERATION" = "FILES" ]; then
  strace -o "$TEMP" -f $@ > /dev/null
  #vypis soubor | odrizni vsechno az po nazev souboru | odrizni vsechno po nazvu souboru | odrizni vsechno nezacinajici '/' | vymaz prazdne radky | protrid
  cat "$TEMP" | sed 's/.*open("//' | sed 's/"*,* .*//' | sed 's/^[^\/.].*$//' | sed '/^$/d' | sort -u
fi
######## FILES(RD) USPESNE otevrene pro cteni
if [ "$OPERATION" = "FILES(RD)" ]; then
  strace -o "$TEMP" -f $@ > /dev/null
  #vypis soubor | odrizni vsechno az po nazev souboru | odrizni vsechno nezacinajici '/' a '.' | vymaz prazdne radky | vyegrepuj jen to co chceme | jen uspesne otevrene soubory | odrizni vsechno po nazvu souboru | protrid
  cat "$TEMP" | sed 's/.*open("//' | sed 's/^[^\/.].*$//' | sed '/^$/d' | egrep 'O_RDONLY|O_RDWR' | grep ') = 3' | sed 's/"*,* .*//' | sort -u
fi
######## FILES(WR) USPESNE otevrene pro zapis
if [ "$OPERATION" = "FILES(WR)" ]; then
  strace -o "$TEMP" -f $@ > /dev/null
  #vypis soubor | odrizni vsechno az po nazev souboru | odrizni vsechno nezacinajici '/' a '.' | vymaz prazdne radky | vyegrepuj jen to co chceme | jen uspesne otevrene soubory | odrizni vsechno po nazvu souboru | protrid
  cat "$TEMP" | sed 's/.*open("//' | sed 's/^[^\/.].*$//' | sed '/^$/d' | egrep 'O_WRONLY|O_RDWR' | grep ') = 3' | sed 's/"*,* .*//' | sort -u
fi
######## LCALLS
if [ "$OPERATION" = "LCALLS" -o "$OPERATION" = "SCALLS" ]; then
  if [ "$OPERATION" = "LCALLS" ]; then
    #to co vypadne behem trasovani nas nezajima, zbytek do souboru
    ltrace -o "$TEMP" $@ > /dev/null
  elif [ "$OPERATION" = "SCALLS" ]; then
    #to co vypadne behem trasovani nas nezajima, zbytek do souboru
    strace -o "$TEMP" -f $@ > /dev/null
  fi
  case "$SUBSET" in
    "")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/[0-9]* *//' | sed 's/(.*//' | egrep -w 'open|fopen|read|fread|write|fwrite|lseek|fseek|close|fclose|rename|getcwd|chdir|mkdir|rmdir|opendir|closedir|scandir|seekdir|telldir|getdents|readdir|fopendir|dirfd|fchdir|link|unlink|readlink|symlink|dup|dup2|pipe|mknod|access|stat|fstat|lstat|chmod|fchmod|chown|fchown|utime|select|poll|semop|semget|semctl|shmat|shmget|shmctl|shmdt|msgctl|msgget|msgrcv|msgsnd|clone|execve|_exit|exit_group|fork|unshare|getpid|getppid|getpgrp|setpgrp|wait4|waitid|waitpid|calloc|malloc|free|realloc|brk|mmap|alloca|shmat|shmget|shmctl|shmdt|kill|sigprocmask|sigaction|sigdelset|sigemptyset|rt_sigaction|rt_sigprocmask|socket|bind|connect|listen|accept|send|recv' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
	  ;;
    "files")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/^[0-9]* *//' | sed 's/(.*//' | egrep -w 'open|fopen|read|fread|write|fwrite|lseek|fseek|close|fclose' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
      ;;
    "dirs")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/[0-9]* *//' | sed 's/(.*//' | egrep -w 'rename|getcwd|chdir|mkdir|rmdir|opendir|closedir|scandir|seekdir|telldir|getdents|readdir|fopendir|dirfd|fchdir' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
	  ;;
	"links")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/[0-9]* *//' | sed 's/(.*//' | egrep -w 'link|unlink|readlink|symlink' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
	  ;;
	"pipes")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/[0-9]* *//' | sed 's/(.*//' | egrep -w 'dup|dup2|pipe|mknod' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
	  ;;
	"fileaccess")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/[0-9]* *//' | sed 's/(.*//' | egrep -w 'access|stat|fstat|lstat|chmod|fchmod|chown|fchown|utime' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
	  ;;
	"sharing")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/[0-9]* *//' | sed 's/(.*//' | egrep -w 'select|poll|semop|semget|semctl|shmat|shmget|shmctl|shmdt|msgctl|msgget|msgrcv|msgsnd' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
	  ;;
	"process")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/[0-9]* *//' | sed 's/(.*//' | egrep -w 'clone|execve|_exit|exit_group|fork|unshare|getpid|getppid|getpgrp|setpgrp|wait4|waitid|waitpid' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
	  ;;
	"memory")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/[0-9]* *//' | sed 's/(.*//' | egrep -w 'calloc|malloc|free|realloc|brk|mmap|alloca|shmat|shmget|shmctl|shmdt' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
	  ;;
	"signals")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/[0-9]* *//' | sed 's/(.*//' | egrep -w 'kill|sigprocmask|sigaction|sigdelset|sigemptyset|rt_sigaction|rt_sigprocmask' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
	  ;;
	"networking")
      #vypis soubor | odrizni pid | odrizni vsechno po prvni zavorce vcetne (zustane jen nazev volani) | vyegrepuj jen ta volani co chceme | protrid
      cat "$TEMP" | sed 's/[0-9]* *//' | sed 's/(.*//' | egrep -w 'socket|bind|connect|listen|accept|send|recv' | sort -u | while read line
      do
        if [ "$OPERATION" = "SCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b($line)\b" | egrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | egrep '(2)' | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
	  fi
        elif [ "$OPERATION" = "LCALLS" ]; then
          PARAM1=$(apropos $line | egrep "^\b$line\b" | fgrep "(3p)")
          PARAM2=$(apropos $line | egrep "^\b$line\b" | fgrep "(3)")
          PARAM3=$(apropos $line | egrep "^\b$line\b" | fgrep "(2)")
          if [ "$PARAM1" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3p)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM2" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(3)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          elif [ "$PARAM3" ]; then
            apropos $line | egrep "^\b($line)\b" | fgrep "(2)" | sed "s/.*(/$line(/" | sed 's/).*-/) -/'
          fi
        fi
      done
	  ;;
  esac
fi

#### a taky po sobe zase uklidime
rm -f $TEMP

exit 0


