@echo off
rem ===========================================================================
rem  ROTEIRO - motor de foco p/ laudar (TUI retro multi-maquina, Windows)
rem  Batch puro. Sem dependencias. So grava arquivo quando VOCE exporta.
rem  Te leva estrutura por estrutura, na ordem do laudo, e NAO deixa avancar
rem  ate resolver a atual. No fim gera o LAUDO FORMATADO (metodo hehe) e
rem  exporta .doc/.txt. Alterna TC/RM/RX (tecla M). Temas: telescope atari
rem  c64 bsd ibm (tecla T no menu, ou -t <tema>).
rem
rem  Uso:  roteiro.cmd                 (boot + menu)
rem        roteiro.cmd -t ibm -m RM    (tema + modalidade inicial)
rem        roteiro.cmd ombro           (abre direto)   -q pula o boot
rem
rem  Regra de codificacao: texto acentuado SO dentro de set "..." (chcp 65001).
rem  NAO digite dados que identifiquem o paciente.
rem ===========================================================================
setlocal EnableDelayedExpansion
chcp 65001 >nul 2>&1

for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
set "THEME=telescope"
set "MOD=TC"
set "LADO=" & set "LADOU=" & set "LADOL="
set "INDIC="
set "SKIPBOOT=" & set "OPENID="

:parseargs
if "%~1"=="" goto argsdone
if /I "%~1"=="-q" set "SKIPBOOT=1"& shift & goto parseargs
if /I "%~1"=="--no-boot" set "SKIPBOOT=1"& shift & goto parseargs
if /I "%~1"=="-t" set "THEME=%~2"& shift & shift & goto parseargs
if /I "%~1"=="-m" set "MOD=%~2"& shift & shift & goto parseargs
set "OPENID=%~1"& shift & goto parseargs
:argsdone

call :theme "%THEME%"
call :setmod
set "LBL_TEC=Técnica:" & set "LBL_IMP=Impressão:" & set "LBL_IND=Indicação clínica:"
mode con: cols=88 lines=46 >nul 2>&1
if not defined SKIPBOOT call :boot

if defined OPENID call :run "%OPENID%"

:mainloop
call :menu
if "%CHOSEN%"=="" goto :eof
call :run "%CHOSEN%"
goto mainloop


rem ===========================================================================
rem  TEMAS (paletas ANSI 24-bit)
rem ===========================================================================
:theme
set "THEME=%~1"
if /I "%THEME%"=="atari" ( set "cA=255;255;255" & set "cY=255;233;166" & set "cR=255;176;176" & set "cM=185;196;242" & set "cW=230;236;255" & goto themeset )
if /I "%THEME%"=="c64"   ( set "cA=176;164;255" & set "cY=216;207;138" & set "cR=255;138;138" & set "cM=150;140;220" & set "cW=139;127;240" & goto themeset )
if /I "%THEME%"=="bsd"   ( set "cA=240;179;80"  & set "cY=224;192;96"  & set "cR=224;122;90"  & set "cM=143;133;95"  & set "cW=217;199;160" & goto themeset )
if /I "%THEME%"=="ibm"   ( set "cA=255;255;85"  & set "cY=255;255;85"  & set "cR=255;85;85"   & set "cM=168;168;255" & set "cW=255;255;255" & goto themeset )
set "THEME=telescope" & set "cA=126;198;153" & set "cY=212;184;106" & set "cR=204;122;122" & set "cM=138;146;156" & set "cW=217;222;227"
:themeset
set "G=%ESC%[38;2;%cA%m"
set "Y=%ESC%[38;2;%cY%m"
set "R=%ESC%[38;2;%cR%m"
set "M=%ESC%[38;2;%cM%m"
set "W=%ESC%[38;2;%cW%m"
set "B=%ESC%[1m" & set "D=%ESC%[2m" & set "Z=%ESC%[0m"
set "CLS=%ESC%[2J%ESC%[H"
exit /b

:cycletheme
if /I "%THEME%"=="telescope" ( call :theme atari & exit /b )
if /I "%THEME%"=="atari"     ( call :theme c64   & exit /b )
if /I "%THEME%"=="c64"       ( call :theme bsd   & exit /b )
if /I "%THEME%"=="bsd"       ( call :theme ibm   & exit /b )
call :theme telescope
exit /b


rem ===========================================================================
rem  MODALIDADE
rem ===========================================================================
:setmod
if /I "%MOD%"=="RM" ( set "MOD=RM" & set "MTIT=RESSONÂNCIA MAGNÉTICA" & set "MCORPO=Análise" & exit /b )
if /I "%MOD%"=="RX" ( set "MOD=RX" & set "MTIT=RADIOGRAFIA" & set "MCORPO=Achados" & exit /b )
set "MOD=TC" & set "MTIT=TOMOGRAFIA COMPUTADORIZADA" & set "MCORPO=Relatório"
exit /b

:cyclemod
if /I "%MOD%"=="TC" ( set "MOD=RM" ) else if /I "%MOD%"=="RM" ( set "MOD=RX" ) else ( set "MOD=TC" )
call :setmod
exit /b

:buildtec
if /I "%MOD%"=="RM" ( set "TEC=Foram obtidas imagens multiplanares e multissequenciais !RTEC!." & exit /b )
if /I "%MOD%"=="RX" ( set "TEC=Radiografia realizada em duas incidências." & exit /b )
set "TEC=Realizada aquisição volumétrica dos dados, sem a administração endovenosa do meio de contraste iodado."
exit /b


rem ===========================================================================
rem  BOOT (por tema)
rem ===========================================================================
:boot
echo %CLS%
if /I "%THEME%"=="atari"     ( call :bl "ATARI 800XL" 1 & call :bl "ATARI COMPUTER - MEMO PAD" 0 & call :bl "SELF TEST ................ OK" 0 & call :bl "ROTEIRO.OSS CARREGADO" 0 & call :bl "READY" 1 & goto bootbar )
if /I "%THEME%"=="c64"       ( call :bl "**** COMMODORE 64 BASIC V2 ****" 1 & call :bl "64K RAM SYSTEM  38911 BASIC BYTES FREE" 0 & call :bl "LOAD ROTEIRO,8,1  ... LOADING ... READY." 0 & call :bl "RUN" 1 & goto bootbar )
if /I "%THEME%"=="bsd"       ( call :bl "FreeBSD/amd64 (laudario) - boot" 1 & call :bl "Copyright (c) 1992-2026 baltazar systems" 0 & call :bl "CPU: foco@sustentado (2400.00-MHz)" 0 & call :bl "Trap: satisfacao_de_busca -^> SIGKILL" 0 & call :bl "login: radiologista" 1 & goto bootbar )
if /I "%THEME%"=="ibm"       ( call :bl "IBM  Personal Computer" 1 & call :bl "Phoenix ROM BIOS PLUS v6.66" 0 & call :bl "640K OK" 0 & call :bl "Starting MS-DOS..." 0 & call :bl "C:\> ROTEIRO.EXE" 1 & goto bootbar )
call :bl "LAUDARIO BIOS v6.66  (C) baltazar systems" 1
call :bl "Radiologia / foco / disciplina de leitura" 0
call :bl "Satisfacao de busca ...... DESATIVADA  OK" 0
call :bl "Vies de ancoragem ........ SUPRIMIDO  OK" 0
call :bl "> um passo por vez" 1
:bootbar
echo.
<nul set /p "=%G%Montando trilho de analise ["
for /L %%i in (1,1,26) do ( <nul set /p "=#" & call :sleep 22 )
echo ]%Z%
call :sleep 500
exit /b

:bl
if "%~2"=="1" ( echo %G%%~1%Z% ) else ( echo %M%%~1%Z% )
call :sleep 90
exit /b

:sleep
ping -n 1 -w %~1 192.0.2.1 >nul 2>&1
exit /b


rem ===========================================================================
rem  MENU
rem ===========================================================================
:menu
set "CHOSEN="
echo %CLS%
call :hdr "modalidade: %MOD%  -  tema: %THEME%"
echo.
echo  %M%Escolha a regiao. O motor te leva %G%estrutura por estrutura%M%, trava o avanco,%Z%
echo  %M%e no fim gera o %G%laudo formatado%M%.  [M] troca TC/RM/RX   [T] troca o tema.%Z%
echo.
echo   %B%%G%1%Z%. %W%%B%Ombro%Z%            %M%13 passos - com lateralidade%Z%
echo   %B%%G%2%Z%. %W%%B%Tornozelo%Z%        %M%10 passos - com lateralidade%Z%
echo   %B%%G%3%Z%. %W%%B%Pescoco%Z%          %M%10 passos%Z%
echo   %B%%G%4%Z%. %W%%B%Bacia / Quadril%Z%  %M%8 passos - com lateralidade%Z%
echo   %B%%G%5%Z%. %W%%B%Coluna Lombar%Z%    %M%10 passos%Z%
echo   %B%%G%6%Z%. %W%%B%Generico%Z%         %M%6 passos%Z%
echo.
call :ruler
echo  %M%[1-6] abrir   [M] modalidade   [T] tema   [Q] sair%Z%
echo  %D%%M%so grava quando voce exporta, nao digite dados do paciente%Z%
choice /C 123456MTQ /N >nul
set "e=%errorlevel%"
if "%e%"=="9" ( set "CHOSEN=" & exit /b )
if "%e%"=="8" ( call :cycletheme & goto menu )
if "%e%"=="7" ( call :cyclemod & goto menu )
if "%e%"=="1" set "CHOSEN=ombro"
if "%e%"=="2" set "CHOSEN=tornozelo"
if "%e%"=="3" set "CHOSEN=pescoco"
if "%e%"=="4" set "CHOSEN=bacia"
if "%e%"=="5" set "CHOSEN=coluna"
if "%e%"=="6" set "CHOSEN=generico"
exit /b


rem ===========================================================================
rem  DADOS - RNAME(ascii) N RTAIL RTEC RLADO RIMPR EXAME + T# X# NORM# DICA#
rem  Acentos SO nos valores. NORM# vazio = passo de trabalho (fora do corpo).
rem ===========================================================================
:load
for /L %%k in (1,1,20) do ( set "T%%k=" & set "X%%k=" & set "NORM%%k=" & set "DICA%%k=" )
set "RID=%~1"
if /I "%RID%"=="ombro" goto load_ombro
if /I "%RID%"=="tornozelo" goto load_tornozelo
if /I "%RID%"=="pescoco" goto load_pescoco
if /I "%RID%"=="bacia" goto load_bacia
if /I "%RID%"=="coluna" goto load_coluna
if /I "%RID%"=="generico" goto load_generico
set "RNAME="& exit /b

:load_ombro
set "RNAME=Ombro" & set "EXAME=ombro" & set "N=13" & set "RLADO=1"
set "RTAIL=DO OMBRO" & set "RTEC=do ombro"
set "RIMPR=Exame sem alterações significativas do ombro"
set "T1=Tecnica e qualidade" & set "X1=sequencias/planos, lateralidade, artefatos" & set "DICA1=Confirme antes de olhar achado nenhum."
set "T2=Acromio / acromioclavicular" & set "X2=tipo do acromio I-III, os acromiale, artrose AC, esporao, impacto" & set "NORM2=Acrômio de morfologia habitual; articulação acromioclavicular sem alterações significativas."
set "T3=Glenoumeral ossea/cartilagem" & set "X3=congruencia e cartilagem, edema osseo, glenoide e cabeca" & set "NORM3=Espaço articular glenoumeral mantido, com superfícies cartilaginosas preservadas; estruturas ósseas de sinal habitual."
set "T4=Derrame / sinovite / bursas" & set "X4=derrame glenoumeral, bursa subacromial-subdeltoidea, sinovite" & set "NORM4=Ausência de derrame articular glenoumeral significativo; bursa subacromial-subdeltoídea sem distensão líquida significativa."
set "T5=Manguito - tendinopatia" & set "X5=supra e infraespinal, subescapular, redondo menor" & set "NORM5=Tendões do manguito rotador com espessura e intensidade de sinal preservadas."
set "T6=Manguito - roturas" & set "X6=parcial articular/bursal, transfixante: tamanho/retracao/gap" & set "NORM6=Sem evidência de roturas tendíneas do manguito rotador."
set "T7=Trofismo muscular / calcaria" & set "X7=Goutallier/Patte, tendinopatia calcaria, musculatura" & set "NORM7=Ventres musculares de trofismo preservado, sem calcificações tendíneas."
set "T8=Cabo longo do biceps / polia" & set "X8=tendinopatia CLB, luxacao/subluxacao, rotura, polia" & set "NORM8=Tendão da cabeça longa do bíceps tópico, de aspecto habitual."
set "T9=Labrum / SLAP" & set "X9=labrum sup/ant/post, SLAP, cisto paralabral" & set "NORM9=Lábio glenoidal sem evidência de lesões."
set "T10=Instabilidade" & set "X10=Bankart osseo e mole, Hill-Sachs, ALPSA/Perthes" & set "NORM10=Sem sinais de instabilidade glenoumeral; ausência de lesões de Bankart ou Hill-Sachs."
set "T11=Capsulite adesiva" & set "X11=intervalo rotador, recesso axilar, lig. coracoumeral" & set "NORM11=Intervalo rotador e recesso axilar sem alterações significativas."
set "T12=Pos-op / trauma / p.moles" & set "X12=material de sintese, retoques/colecoes, partes moles" & set "NORM12=Partes moles adjacentes sem alterações significativas."
set "T13=Impressao" & set "X13=sintetizar positivos, responder, graduar e comparar" & set "DICA13=Nada de novo aqui, so o que ja foi visto."
exit /b

:load_tornozelo
set "RNAME=Tornozelo" & set "EXAME=tornozelo" & set "N=10" & set "RLADO=1"
set "RTAIL=DO TORNOZELO" & set "RTEC=do tornozelo"
set "RIMPR=Exame sem alterações significativas do tornozelo"
set "T1=Tecnica e qualidade" & set "X1=sequencias/planos/lateralidade, artefatos"
set "T2=Ossos e articulacoes" & set "X2=edema medular, fratura/estresse, osteocondral (domo talar), artrose, derrame" & set "NORM2=Estruturas ósseas com morfologia e sinal preservados, sem fratura ou edema ósseo; relação articular preservada, sem derrame significativo."
set "T3=Ligamentos laterais" & set "X3=talofibular anterior, talofibular posterior, calcaneofibular" & set "NORM3=Ligamentos talofibulares anterior e posterior e calcaneofibular com espessura, trajeto e sinal preservados."
set "T4=Ligamentos mediais" & set "X4=complexo deltoide, spring (calcaneonavicular plantar)" & set "NORM4=Complexo ligamentar deltoide e ligamento calcaneonavicular plantar sem alterações significativas."
set "T5=Sindesmose" & set "X5=tibiofibular distal, membrana interossea, diastase" & set "NORM5=Sindesmose tibiofibular distal preservada."
set "T6=Tendoes" & set "X6=extensores, flexores (tibial post., FLD, FLH), fibulares" & set "NORM6=Tendões extensores, flexores e fibulares com espessura e intensidade de sinal preservadas."
set "T7=Tendao calcaneo (Aquiles)" & set "X7=tendinopatia/rotura, bursa retrocalcanea, gordura de Kager" & set "NORM7=Tendão calcâneo íntegro, sem espessamento ou roturas; bursa retrocalcânea sem distensão significativa."
set "T8=Fascia e tuneis" & set "X8=fascia plantar, tunel do tarso, seio do tarso" & set "NORM8=Fáscia plantar, túnel do tarso e seio do tarso sem alterações significativas."
set "T9=Partes moles / musculatura" & set "X9=planos musculares e trofismo, edema, colecoes" & set "NORM9=Planos musculares e partes moles sem alterações significativas."
set "T10=Impressao" & set "X10=sintetizar positivos, responder, comparar previos"
exit /b

:load_pescoco
set "RNAME=Pescoco" & set "EXAME=pescoco" & set "N=10" & set "RLADO="
set "RTAIL=DE PESCOÇO" & set "RTEC=do pescoço"
set "RIMPR=Exame sem alterações significativas do pescoço"
set "T1=Tecnica e qualidade" & set "X1=metodo, contraste, planos, cobertura e artefatos"
set "T2=Nasofaringe / orofaringe" & set "X2=mucosa e simetria, espaco parafaringeo, tonsilas/base de lingua" & set "NORM2=Cavidade nasal, rinofaringe e orofaringe sem particularidades; base da língua sem alterações."
set "T3=Glandulas salivares" & set "X3=parotidas, submandibulares/sublinguais, ductos, calculos" & set "NORM3=Glândulas parótidas e submandibulares com forma, contornos, dimensões e atenuação preservados."
set "T4=Tireoide / paratireoides" & set "X4=volume e simetria, nodulos, sinal/densidade" & set "NORM4=Glândula tireoide com forma, contornos, dimensões e atenuação preservados."
set "T5=Laringe/hipofaringe/traqueia" & set "X5=pregas vocais, seios piriformes, via aerea, cartilagens" & set "NORM5=Coluna aérea faringo-laringo-traqueal com morfologia e amplitude normais; estruturas internas da laringe preservadas."
set "T6=Espacos profundos/infeccao" & set "X6=parafaringeo/retrofaringeo, carotideo, colecoes/abscesso/gas" & set "NORM6=Espaços parafaríngeos e pré-vertebral sem alterações; planos musculares e adiposos preservados."
set "T7=Linfonodos" & set "X7=niveis I-VII, tamanho/morfologia, necrose/conglomerado" & set "NORM7=Ausência de linfonodomegalias cervicais."
set "T8=Cistos / congenitas" & set "X8=ducto tireoglosso, cisto branquial, ranula/linfangioma" & set "NORM8=Sem cistos ou lesões congênitas evidentes."
set "T9=Trauma / ossos / face" & set "X9=mandibula e face, base do cranio, corpos estranhos" & set "NORM9=Estruturas ósseas visibilizadas sem alterações significativas."
set "T10=Impressao" & set "X10=sintetizar positivos, estadiar/responder, comparar"
exit /b

:load_bacia
set "RNAME=Bacia / Quadril" & set "EXAME=bacia" & set "N=8" & set "RLADO=1"
set "RTAIL=DA BACIA" & set "RTEC=da bacia"
set "RIMPR=Exame sem alterações significativas da bacia"
set "T1=Tecnica e lateralidade" & set "X1=sequencias/planos, lateralidade correta"
set "T2=Ossos" & set "X2=edema medular, fratura de estresse/insuficiencia, necrose avascular, lesoes focais" & set "NORM2=Estruturas ósseas com morfologia e sinal preservados, sem fratura, edema ósseo ou lesões focais."
set "T3=Articulacao coxofemoral" & set "X3=cartilagem e congruencia, derrame, impacto CAM/PINCER" & set "NORM3=Articulações coxofemorais congruentes, com cartilagem preservada e sem derrame significativo."
set "T4=Labrum acetabular" & set "X4=roturas, cistos paralabrais, degeneracao" & set "NORM4=Lábios acetabulares sem evidência de roturas."
set "T5=Tendoes / bursas" & set "X5=gluteos medio/minimo no trocanter, bursa trocanterica, iliopsoas" & set "NORM5=Tendões glúteos e iliopsoas preservados, sem bursopatia significativa."
set "T6=Musculatura" & set "X6=isquiotibiais, adutores/pubis, reto femoral, trofismo" & set "NORM6=Ventres musculares de trofismo preservado."
set "T7=Sinfise / p.moles / canais" & set "X7=sinfise pubica, canais inguinais, partes moles" & set "NORM7=Sínfise púbica e partes moles adjacentes sem alterações significativas."
set "T8=Impressao" & set "X8=sintetizar positivos, responder, comparar previos"
exit /b

:load_coluna
set "RNAME=Coluna Lombar" & set "EXAME=coluna lombar" & set "N=10" & set "RLADO="
set "RTAIL=DA COLUNA LOMBAR" & set "RTEC=da coluna lombar"
set "RIMPR=Exame sem alterações significativas da coluna lombar"
set "T1=Tecnica / alinhamento" & set "X1=curvatura e alinhamento, listese, transicao lombossacra" & set "NORM1=Alinhamento e curvatura vertebral preservados, sem espondilolistese."
set "T2=Corpos / medula ossea" & set "X2=altura dos corpos, Modic e platos, lesoes focais/edema" & set "NORM2=Corpos vertebrais de altura preservada, com medula óssea de sinal habitual."
set "T3=Discos" & set "X3=hidratacao, altura, sinal" & set "NORM3=Discos intervertebrais com hidratação e altura preservadas."
set "T4=Nivel a nivel" & set "X4=abaulamento/protrusao/hernia, extrusa/sequestrada, lado e localizacao" & set "NORM4=Sem abaulamentos ou hérnias discais significativas." & set "DICA4=Percorra L1-S1 sem pular nivel."
set "T5=Canal central" & set "X5=estenose, diametro, compressao do saco dural" & set "NORM5=Canal vertebral de amplitude preservada, sem estenose significativa."
set "T6=Recessos/forames/raizes" & set "X6=recesso lateral, forames neurais, contato/compressao radicular" & set "NORM6=Recessos laterais e forames neurais preservados, sem compressão radicular."
set "T7=Facetas / lig.amarelo" & set "X7=artrose facetaria, cistos sinoviais, hipertrofia do lig.amarelo" & set "NORM7=Articulações facetárias e ligamentos amarelos sem alterações significativas."
set "T8=Cone / cauda equina" & set "X8=posicao do cone medular, cauda equina" & set "NORM8=Cone medular em topografia habitual; cauda equina sem alterações."
set "T9=Partes moles paravertebrais" & set "X9=musculatura, colecoes/partes moles" & set "NORM9=Partes moles paravertebrais sem alterações significativas."
set "T10=Impressao" & set "X10=sintetizar por nivel, responder, comparar previos"
exit /b

:load_generico
set "RNAME=Generico" & set "EXAME=exame" & set "N=6" & set "RLADO="
set "RTAIL=" & set "RTEC=da região estudada"
set "RIMPR=Exame sem alterações significativas"
set "T1=Tecnica e qualidade do exame" & set "X1=metodo adequado a pergunta, qualidade/artefatos"
set "T2=Estrutura/orgao-alvo principal" & set "X2=achado que responde a indicacao" & set "NORM2=Órgão-alvo sem alterações significativas ao método."
set "T3=Estruturas adjacentes" & set "X3=vizinhanca sistematica" & set "NORM3=Estruturas adjacentes preservadas."
set "T4=Achados incidentais" & set "X4=varredura do que esta incluido" & set "NORM4=Sem achados incidentais relevantes."
set "T5=Comparacao com previos" & set "X5=evolucao/estabilidade" & set "NORM5=Sem alterações significativas em relação a estudo prévio."
set "T6=Impressao / conclusao" & set "X6=responder a pergunta clinica, graduar e recomendar"
exit /b


rem ===========================================================================
rem  RUN - passo a passo com trava
rem ===========================================================================
:run
call :load "%~1"
if not defined RNAME exit /b
for /L %%k in (1,1,20) do ( set "MARK%%k=" & set "NOTE%%k=" )
if defined RLADO ( call :asklado ) else ( set "LADO=" & set "LADOU=" & set "LADOL=" )
set /a i=1
call :now & set /a T0=CS
set "MSG="

:step
echo %CLS%
call :hdr "%RNAME% - %MOD% - passo %i%/%N%"
echo.
set /a done=i-1
call :bar %done% %N%
echo   %G%[!BARSTR!]%Z%   %M%%done%/%N%%Z%
echo.
call :val T %i% & set "titulo=!VAL!"
call :val X %i% & set "itens=!VAL!"
call :val DICA %i% & set "dica=!VAL!"
call :val NORM %i% & set "nrm=!VAL!"
echo    %G%ESTRUTURA %i% DE %N%%Z%
echo    %G%^|%Z% %W%%B%!titulo!%Z%
echo.
echo      %G%^>%Z% %W%!itens!%Z%
if defined dica echo      %M%-^> !dica!%Z%
if defined nrm ( echo      %M%se normal: !nrm!%Z% ) else ( echo      %D%%M%passo de trabalho, fora do corpo do laudo%Z% )
echo.
call :ruler
echo  %M%roteiro:%Z%
for /L %%j in (1,1,%N%) do (
  set "cm=!MARK%%j!"
  call :val T %%j
  set "gl=." & set "gc=%D%%M%" & set "tc=%D%%M%"
  if "!cm!"=="N" ( set "gl=+" & set "gc=%G%" & set "tc=%M%" )
  if "!cm!"=="A" ( set "gl=*" & set "gc=%Y%" & set "tc=%Y%" )
  if "!cm!"=="P" ( set "gl=o" & set "gc=%M%" & set "tc=%M%" )
  if %%j==%i% ( set "gl=>" & set "gc=%G%" & set "tc=%W%%B%" )
  set "sline=  !gc!!gl!%Z% !tc!%%j. !VAL!%Z%"
  echo !sline!
)
call :ruler
call :val MARK %i% & set "cur=!VAL!"
set "lN=%M%[N] Normal%Z%" & set "lA=%M%[A] Alterado%Z%" & set "lP=%M%[P] Pular%Z%"
if "%cur%"=="N" set "lN=%G%%B%[N] Normal <%Z%"
if "%cur%"=="A" set "lA=%Y%%B%[A] Alterado <%Z%"
if "%cur%"=="P" set "lP=%M%%B%[P] Pular <%Z%"
echo   !lN!   !lA!   !lP!
if defined cur ( set "fwd=%G%%B%[F] avancar%Z%" ) else ( set "fwd=%D%%M%[F] avancar%Z%" )
if %i%==%N% if defined cur set "fwd=%G%%B%[F] gerar laudo%Z%"
echo   %W%[V] voltar%Z%    !fwd!    %M%[M] %MOD% - [Q] menu%Z%
if defined MSG echo. & echo   %Y%!MSG!%Z%
set "MSG="

choice /C NAPVFMQ /N >nul
set "e=%errorlevel%"
if "%e%"=="1" ( set "MARK%i%=N" & goto step )
if "%e%"=="3" ( set "MARK%i%=P" & goto step )
if "%e%"=="6" ( call :cyclemod & goto step )
if "%e%"=="7" exit /b
if "%e%"=="4" (
  if %i% GTR 1 set /a i-=1
  goto step
)
if "%e%"=="2" (
  set "MARK%i%=A"
  echo.
  set /p "nt=  %Y%[!] descreva o achado (Enter p/ pular): %Z%"
  if defined nt set "NOTE%i%=!nt!"
  goto step
)
if "%e%"=="5" (
  call :val MARK %i% & set "cur=!VAL!"
  if not defined cur ( set "MSG=resolva esta estrutura antes de avancar   [N] [A] [P]" & goto step )
  if %i%==%N% goto laudo
  set /a i+=1
  goto step
)
goto step

:asklado
echo %CLS%
call :hdr "lateralidade"
echo.
echo   %W%Lado do exame:%Z%   %G%[D]%Z% direito   %G%[E]%Z% esquerdo   %G%[B]%Z% bilateral   %M%[N] nenhum%Z%
choice /C DEBN /N >nul
set "e=%errorlevel%"
if "%e%"=="1" ( set "LADO=Direito" & set "LADOU=DIREITO" & set "LADOL= direito" & exit /b )
if "%e%"=="2" ( set "LADO=Esquerdo" & set "LADOU=ESQUERDO" & set "LADOL= esquerdo" & exit /b )
if "%e%"=="3" ( set "LADO=Bilateral" & set "LADOU=BILATERAL" & set "LADOL= bilateralmente" & exit /b )
set "LADO=" & set "LADOU=" & set "LADOL="
exit /b


rem ===========================================================================
rem  LAUDO - monta corpo/impressao (LB#/LI#) e mostra
rem ===========================================================================
:laudo
call :buildbody
:showlaudo
call :buildtec
call :maketitulo
echo %CLS%
call :hdr "%RNAME% - %MOD% - laudo"
echo.
echo   %G%%B%LAUDO GERADO%Z%   %M%(revise; exporte em .doc/.txt)%Z%
call :ruler
echo   %G%%B%!TITULO!%Z%
echo.
if defined INDIC echo   %W%!LBL_IND!%Z% %W%!INDIC!%Z%
if defined INDIC echo.
echo   %G%!LBL_TEC!%Z% %W%!TEC!%Z%
echo.
echo   %G%!MCORPO!:%Z%
for /L %%j in (1,1,%nLB%) do ( call :val LB %%j & echo   %W%!VAL!%Z% )
echo.
echo   %G%!LBL_IMP!%Z%
for /L %%j in (1,1,%nLI%) do ( call :val LI %%j & echo   %Y%- !VAL!%Z% )
call :ruler
echo   %G%[D]%Z% salvar .doc   %G%[T]%Z% salvar .txt   %G%[C]%Z% copiar   %W%[I]%Z% indicacao   %W%[L]%Z% lado   %W%[M]%Z% %MOD%   %W%[R]%Z% refazer   %M%[Q] menu%Z%
choice /C DTCILMRQ /N >nul
set "e=%errorlevel%"
if "%e%"=="1" ( call :writedoc & goto showlaudo )
if "%e%"=="2" ( call :writetxt & goto showlaudo )
if "%e%"=="3" ( call :copylaudo & goto showlaudo )
if "%e%"=="4" ( echo. & set /p "INDIC=  %Y%!LBL_IND! %Z%" & goto showlaudo )
if "%e%"=="5" ( if defined RLADO ( call :asklado ) & goto showlaudo )
if "%e%"=="6" ( call :cyclemod & goto showlaudo )
if "%e%"=="7" ( call :run "%RID%" & exit /b )
if "%e%"=="8" exit /b
goto showlaudo

:maketitulo
set "TITULO=!MTIT!"
if defined RTAIL set "TITULO=!MTIT! !RTAIL!"
if defined RLADO if defined LADOU set "TITULO=!TITULO! !LADOU!"
exit /b

:buildbody
set /a nLB=0, nLI=0
for /L %%k in (1,1,%N%) do (
  set "cm=!MARK%%k!"
  call :val NORM %%k & set "nm=!VAL!"
  call :val NOTE %%k & set "nt=!VAL!"
  call :val T %%k & set "tt=!VAL!"
  if "!cm!"=="N" ( if defined nm ( set /a nLB+=1 & set "LB!nLB!=!nm!" ) )
  if "!cm!"=="A" (
     if defined nt ( set /a nLB+=1 & set "LB!nLB!=!nt!" & set /a nLI+=1 & set "LI!nLI!=!nt!"
     ) else ( set /a nLB+=1 & set "LB!nLB!=[descrever: !tt!]" & set /a nLI+=1 & set "LI!nLI!=!tt!" )
  )
)
if %nLI%==0 ( set /a nLI=1 & set "LI1=!RIMPR!!LADOL!." )
exit /b


rem ===========================================================================
rem  EXPORT
rem ===========================================================================
:fname
set "FN=%MOD%-%EXAME%-%DATE:~-4%%DATE:~3,2%%DATE:~0,2%"
set "FN=%FN: =-%"
exit /b

:writetxt
call :fname
set "OUT=%FN%.txt"
( echo !TITULO!
  echo.
  if defined INDIC ( echo !LBL_IND! !INDIC! & echo. )
  echo !LBL_TEC! !TEC!
  echo.
  echo !MCORPO!:
  for /L %%j in (1,1,%nLB%) do (
    call :val LB %%j
    echo !VAL!
  )
  echo.
  echo !LBL_IMP!
  for /L %%j in (1,1,%nLI%) do (
    call :val LI %%j
    echo - !VAL!
  )
) > "%OUT%"
call :flash "salvo: %CD%\%OUT%"
exit /b

:writedoc
call :fname
set "OUT=%FN%.doc"
set "PS=<p style='margin:0cm 0cm 6.0pt 0cm;line-height:12.0pt;mso-line-height-rule:exactly;font-family:Arial,sans-serif;font-size:11.0pt;text-align:justify'>"
set "PC=<p style='margin:0cm 0cm 6.0pt 0cm;line-height:12.0pt;font-family:Arial,sans-serif;font-size:11.0pt;text-align:center'>"
set "BL=<p style='margin:0cm 0cm 6.0pt 0cm;font-family:Arial,sans-serif;font-size:11.0pt'>&nbsp;</p>"
(
  echo ^<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:w='urn:schemas-microsoft-com:office:word' xmlns='http://www.w3.org/TR/REC-html40'^>^<head^>^<meta charset='utf-8'^>^</head^>^<body^>
  set "L=!PC!<b>!TITULO!</b></p>" & echo !L!
  echo !BL!
  if defined INDIC ( set "L=!PS!<b>Indicação clínica:</b> !INDIC!</p>" & echo !L! & echo !BL! )
  set "L=!PS!<b>Técnica:</b> !TEC!</p>" & echo !L!
  echo !BL!
  set "L=!PS!<b>!MCORPO!:</b></p>" & echo !L!
  for /L %%j in (1,1,%nLB%) do ( call :val LB %%j & set "L=!PS!!VAL!</p>" & echo !L! )
  echo !BL!
  set "L=!PS!<b>Impressão:</b></p>" & echo !L!
  for /L %%j in (1,1,%nLI%) do ( call :val LI %%j & set "L=!PS!- !VAL!</p>" & echo !L! )
  echo ^</body^>^</html^>
) > "%OUT%"
call :flash "salvo: %CD%\%OUT%  (abre no Word)"
exit /b

:copylaudo
(
  echo !TITULO!
  echo.
  if defined INDIC ( echo !LBL_IND! !INDIC! & echo. )
  echo !LBL_TEC! !TEC!
  echo.
  echo !MCORPO!:
  for /L %%j in (1,1,%nLB%) do (
    call :val LB %%j
    echo !VAL!
  )
  echo.
  echo !LBL_IMP!
  for /L %%j in (1,1,%nLI%) do (
    call :val LI %%j
    echo - !VAL!
  )
) | clip
call :flash "laudo copiado p/ area de transferencia"
exit /b


rem ===========================================================================
rem  HELPERS
rem ===========================================================================
:flash
echo.
echo   %G%%~1%Z%
echo   %M%[qualquer tecla] voltar%Z%
pause >nul
exit /b

:hdr
echo %B%%G%ROTEIRO%Z%%G%_%Z%    %M%%~1%Z%
call :ruler =
exit /b

:ruler
set "rc=%~1"
if "%rc%"=="" set "rc=-"
set "RL="
for /L %%r in (1,1,80) do set "RL=!RL!%rc%"
echo %M%!RL!%Z%
exit /b

:bar
set /a _w=34, _f=%~1*_w/%~2
set "BARSTR="
for /L %%b in (1,1,%_w%) do ( if %%b LEQ %_f% ( set "BARSTR=!BARSTR!#" ) else ( set "BARSTR=!BARSTR!." ) )
exit /b

:val
call set "VAL=%%%~1%~2%%"
exit /b

:now
set "tt=%TIME: =0%"
set /a CS=(1%tt:~0,2%-100)*360000 + (1%tt:~3,2%-100)*6000 + (1%tt:~6,2%-100)*100 + (1%tt:~9,2%-100)
exit /b
