:macro Convers
echo
echo Konferenční server LinPac %V
echo Vstup %C v %T
echo
if %(exist STN_NICKNAME) = 1
  echo Ahoj %STN_NICKNAME, vítej v konferenci !
else
  echo Ahoj %N, vítej v konferenci !
endif
echo Pro nápovědu napiš /H
echo

;;*********************** INICIALIZACE ************************
set CONVERS "LP_CONVERS"  ;;Pro rozpoznani kanalu na kterem bezi koference
set LOGTIME %T            ;;Cas vstupu do konference
set CALL %C               ;;Znacka ucastnika
if "%N" = "%U"            ;;Zjisteni jmena ucastnika
  set NAME "???"
else
  set NAME "%N"
endif
set LAST "%<"
set OUT1 ""
set OUT2 ""
set OUT3 ""
set OUT4 ""
set OUT5 ""
set OUT6 ""
set OUT7 ""
set OUT8 ""
set MSG1 ""
set MSG2 ""
set MSG3 ""
set MSG4 ""
set MSG5 ""
set MSG6 ""
set MSG7 ""
set MSG8 ""

set LAST "*** Vstupuje do konference v %T ***"
conv @SENDALL

label MAIN

  flush

  ;;**** KONTROLA, ZDA SE NEMA NECO POSLAT Z JINYCH KANALU ****
  set i 1
  label TESTOUT
    if "%OUT%i" <> ""      ;;Prislo neco z jineho kanalu ?
      echo <%C@%i>         ;; ANO - vypis informace
      echo %OUT%i          ;;       vypis text
      set OUT%i ""         ;;       vprazdni buffer
      flush
    endif
    if "%MSG%i" <> ""      ;;Totez pro soukrome zpravy
      echo *%C@%i*
      echo %MSG%i
      set MSG%i ""
      flush
    endif
    set i %[%i+1]
  if (%i <= 8) goto TESTOUT  ;;Opakuj pro vsechny kanaly

  set LAST "%<"              ;; Zjisti zda neprisel novy text

if ("%LAST" = "") goto MAIN

  ;;UZIVATEL ZADAL NEJAKY RETEZEC
  if ("%(strleft 1 "%LAST")" = "/") goto COMMAND ;;Zacina lomitkem - je to prikaz

  conv @SENDALL ;;Neni prikaz - rozesli vsem jako text
goto MAIN

;;**** ODESLANI RETEZCE VSEM STANICIM ****
label SENDALL
  set I 1
  label SENDING
    if "%CONVERS@%I" = "LP_CONVERS"    ;;Pokud dany kanal je v konferenci
      if %I <> %K                      ;; (a neni to zrovna nas kanal)
        set@%I OUT%K "%LAST"           ;;Posli text na dany kanal
      endif
    endif
    set I %[%I+1]
  if (%I <= 8) goto SENDING
return


;; **** VYHODNOCENI PRIKAZU ****
label COMMAND
set CMD "%(Upcase %LAST)"
if (%CMD = /Q) goto KONEC
if (%CMD = /H) goto HELP
if (%CMD = /W) goto WHO
if (%CMD = /U) goto WHO
if (%(strleft 4 "%CMD") = "/MSG") goto MSGS
echo *** Neznámý příkaz.
goto MAIN


;; ************************ PRIKAZ /H  **************************
label HELP
echo *** Příkazy konference:
echo   /H           -  tato nápověda
echo   /MSG <call>  -  poslání privátní zprávy
echo   /Q           -  odpojení od konference
echo   /W nebo /U   -  seznam uživatelů
echo ***
goto MAIN


;; ************************ PRIKAZ /MSG *************************
label MSGS

;; ODSTRANENI '/MSG'
set I %(strpos " " "%LAST")
if (%I = 0) goto MSGERROR
set I %[%(strlen %LAST) - %I - 1]
set LAST "%(strr %I "%LAST")"

;; ROZDELENI NA ZPRAVU A ZNACKU
set I %(strpos " " "%LAST")
if (%I = 0) goto MSGERROR
set MSGC "%(strleft %I "%LAST")"
set MSGC "%(upcase "%MSGC")"
set I %[%(strlen "%LAST") - %I - 1]
set LAST "%(strr %I %LAST)"

;; VYHLEDANI ZNACKY
set FND 0
set I 1
label CMSGS
  if %CALL@%I = %MSGC
    set@%I MSG%K "%LAST"
    set FND 1
  endif
  set I %[%I+1]
if (%I < 9) goto CMSGS
if %FND = 0
  echo *** Nikdo s takovou značkou není v konferenci
endif
unset MSGC FND
goto MAIN

;; Chyba pri MSGS
label MSGERROR
echo *** Nutno zadat značku a zprávu !
goto MAIN


; ************************ PRIKAZ /W **********************
label WHO
echo *** Seznam uživatelů:
set I 1
label CWHO
  if "%CONVERS@%I" = "LP_CONVERS"
    echo %CALL@%I - %NAME@%I - připojen od %LOGTIME@%I
  endif
  set I %[%I+1]
if (%I < 9) goto CWHO
echo ***
goto MAIN


; ************************ ODPOJENI ***********************
label KONEC
set LAST "*** Odpojen od konference v %T ***"
echo Výstup z konference v %T.
if %(exist STN_NICKNAME) = 1
  echo Přijď zase, %STN_NICKNAME !
else
  echo Přijď zase, %N !
endif
conv @SENDALL
unset CONVERS LOGTIME CALL NAME I CMD
unset OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 OUT8
unset MSG1 MSG2 MSG3 MSG4 MSG5 MSG6 MSG7 MSG8
