' PROGRAMA GENBAT.BAS ' genera un arxiu .bat, per l'analisi d'un registre de veu
DECLARE SUB Parametres (v$, par$(), separador$, numpar)
DECLARE SUB Canvia (s$, l$, c$)
DECLARE SUB Temps (tmp$, hora!, minut!, segon!, tmp!, errnum!)
DIM lin$(100)
DIM SHARED par$(10) DIM area AS STRING gnb$ = COMMAND$ IF gnb$ = "" THEN INPUT "Entra nom arxiu generador: ", gnb$ IF gnb$ = "" THEN END b = INSTR(gnb$, ".")
IF b > 0 THEN nom$ = LEFT$(gnb$, b ? 1) ELSE nom$ = gnb$
bat$ = nom$ + ".bat" OPEN gnb$ FOR INPUT AS #1
OPEN bat$ FOR OUTPUT AS #2 PRINT #2, "echo off"
PRINT #2, "" WHILE NOT EOF(1)
LINE INPUT #1, l$
IF LEFT$(l$, 1) <> ":" THEN
SELECT CASE l$
CASE "[sincronitza]"
GOSUB sincronitza
CASE "[segments]"
GOSUB segments
CASE "[genera linees]"
GOSUB linees
CASE "[genera blocs]"
GOSUB blocs
CASE ELSE
' pasem la linea tal cual al arxiu .bat
' també pasem les linees en blanc
' insertem area d'analisi si es demana en la linea
Canvia "#", l$, area
PRINT #2, l$
END SELECT
END IF
WEND CLOSE
END errfor: PRINT "error de format en l'arxiu generador"
CLOSE : END
'========================================================================
' SEGMENTS
'======================================================================== ' area codifica l'area d'investigació (#)
' exemple: O [O]rexis
' U [U]niversitat ' sistema (%%%), id. segment relatiu al sistema (*)
' (%%%) codifica el sistema (Client) (3 car, [N]om, [C]ognom1 i [C]ognom2)
' (*) codifica l'analisi particular del sistema dins la sessió (1,2,...) segments: totsegm = 0
WHILE totsegm = 0
LINE INPUT #1, i$
IF i$ <> "" AND LEFT$(i$, 1) <> ":" THEN
Parametres i$, par$(), ",", npar
IF npar <> 2 THEN GOTO errfor
totsegm = VAL(par$(1))
area = LEFT$(par$(2), 1)
IF totsegm = 0 THEN GOTO errfor
' redimensionem les matrius de segments
REDIM segm(totsegm) AS STRING, sis(totsegm) AS STRING
REDIM in$(totsegm), fi$(totsegm)
END IF
WEND e = 0
WHILE e < totsegm
LINE INPUT #1, i$
IF i$ <> "" AND LEFT$(i$, 1) <> ":" THEN
Parametres i$, par$(), ",", npar
IF npar <> 2 THEN GOTO errfor
e = e + 1
sis(e) = par$(1)
segm(e) = par$(2)
END IF
WEND ' busquem el final de segments
WHILE i$ <> "[fi segments]"
LINE INPUT #1, i$
WEND RETURN
'========================================================================
' SINCRONITZA
'======================================================================== sincronitza: PRINT #2, "echo posa en marxa el video per fer un reset del A/D"
PRINT #2, ""
PRINT #2, "pause"
PRINT #2, "caadd q$$p$oz.sis q$$p$oz.td 0 200 1 0 0 0 0 0"
PRINT #2, "del q$$p$oz.td"
PRINT #2, ""
PRINT #2, "echo situa el video a punt per començar l'analisi"
PRINT #2, "echo posa el video en PAUSA"
PRINT #2, "echo entra el temps marcat en el video al ordinador"
PRINT #2, "echo pulsa <enter> i PAUSA alhora"
PRINT #2, ""
PRINT #2, "time"
PRINT #2, "" RETURN
'========================================================================
' GENERA LINEES
'======================================================================== linees: IF totsegm = 0 THEN GOTO errfor
lr$ = "" LINE INPUT #1, i$
WHILE i$ <> "[fi linees]"
' si no es un comentari, procesem la linea
IF i$ <> "" AND LEFT$(i$, 1) <> ":" THEN
' l$ conté la linea del programa a generar
l$ = i$
' cargem valors temporals si el programa es "caad.."
IF LEFT$(i$, 4) = "caad" THEN
perm = 0
WHILE perm = 0
' obtenim el valors de mostreig i temporals del analisi
LINE INPUT #1, i$
IF i$ <> "" AND LEFT$(i$, 1) <> ":" THEN
Parametres i$, par$(), ",", npar
IF npar <> 6 THEN GOTO errfor
perm = VAL(par$(1)): ' periode de mostreig
mi = VAL(par$(2)): ' mostres a integrar
dia = VAL(par$(3))
mes = VAL(par$(4))
aa = VAL(par$(5))
tref$ = par$(6): ' temps inicial de referencia
IF mi > 0 THEN
fri = 1000000! / (mi * perm)
ELSE
IF LEFT$(l$, 5) <> "caadd" THEN GOTO errfor
fri = 1000000 / perm
END IF
Temps tref$, hora, minut, segon, tref, errnum
IF errnum > 0 THEN GOTO errfor ' obtenim la localització temporal de cada segment
e = 0
WHILE e < totsegm
LINE INPUT #1, i$
IF i$ <> "" AND LEFT$(i$, 1) <> ":" THEN
Parametres i$, par$(), ",", npar
IF npar <> 2 THEN GOTO errfor
e = e + 1
in$(e) = par$(1): ' temps inicial del segment
fi$(e) = par$(2): ' temps final del segment
END IF
WEND
END IF
WEND
END IF
' generem linees per cada segment
FOR x = 1 TO totsegm
s$ = l$: ' incialitzem la linea de sortida
Canvia "*", s$, segm(x): ' insertem el id.de segment relatiu
Canvia "%%%", s$, sis(x): ' insertem sistema
Canvia "#", s$, area: ' insertem area d'analisi
' completem la linea si la linea es "caad..."
IF LEFT$(l$, 4) = "caad" THEN
Temps in$(x), hora, minut, segon, ti, errnum
IF errnum > 0 THEN GOTO errfor
Temps fi$(x), hora, minut, segon, tf, errnum
IF errnum > 0 THEN GOTO errfor
t = tf ? ti
mostres = t * fri
segments = mostres \ 1024
IF mostres MOD 1024 > 512 THEN segments = segments + 1
IF segments > 128 THEN segments = 128
IF LEFT$(l$, 5) = "caadd" THEN
s$ = s$ + STR$(perm) + STR$(segments)
ELSE
s$ = s$ + STR$(perm) + STR$(mi) + STR$(segments)
END IF
s$ = s$ + STR$(ti) + STR$(dia) + STR$(mes)
s$ = s$ + STR$(aa) + STR$(tref)
END IF
' imprimim la linea .bat generada
PRINT #2, s$
NEXT
' separem cada grup de linees
PRINT #2, ""
END IF
' obtenim una nova linea a generar
LINE INPUT #1, i$
WEND RETURN
'========================================================================
' GENERA BLOCS
'======================================================================== blocs: IF totsegm = 0 THEN GOTO errfor ' cargem les linees del bloc
lin = 0
LINE INPUT #1, l$
WHILE l$ <> "[fi blocs]"
lin = lin + 1
lin$(lin) = l$
LINE INPUT #1, l$
WEND
bloc1: FOR t = 1 TO totsegm
' generem etiqueta al principi del bloc que correspon a cada segment
PRINT #2, ":" + sis(t) + segm(t)
FOR l = 1 TO lin
s$ = lin$(l)
' si no es una linea de comentari, generem linea .bat
IF LEFT$(s$, 1) <> ":" THEN
' si es una linea en blanc, la imprimim tal cual
IF s$ <> "" THEN
' generem linea del bloc
Canvia "*", s$, segm(t): ' insertem id.segment relatiu
Canvia "#", s$, area: ' insertem area d'analisi
Canvia "%%%", s$, sis(t): 'insertem sistema
END IF
PRINT #2, s$
END IF
NEXT l
' separem cada bloc
PRINT #2, ""
NEXT t RETURN SUB Canvia (s$, l$, c$) p = 1: ls = LEN(s$) WHILE p > 0
p = INSTR(p, l$, s$)
IF p > 0 THEN
ll = LEN(l$)
IF p < ll THEN
r$ = LEFT$(l$, p ? 1) + c$ + RIGHT$(l$, ll ? (p + ls ? 1))
ELSE
r$ = LEFT$(l$, p ? 1) + c$
END IF
l$ = r$
END IF
WEND END SUB SUB Parametres (v$, param$(), separador$, numpar) numpar = 0
pa = 1
DO WHILE pa > 0 AND pa <= LEN(v$)
p = INSTR(pa, v$, separador$)
numpar = numpar + 1
IF p > 0 THEN
param$(numpar) = MID$(v$, pa, p ? pa)
pa = p + 1
ELSE
param$(numpar) = MID$(v$, pa, LEN(v$) ? pa + 1)
EXIT DO
END IF
LOOP ' eliminem espais en blanc
FOR x = 1 TO numpar
param$(x) = LTRIM$(param$(x))
param$(x) = RTRIM$(param$(x))
NEXT END SUB SUB Temps (tmp$, hora, minut, segon, tmp, errnum) errnum = 0 Parametres tmp$, par$(), ":", numpar
IF numpar <> 3 THEN errnum = 1: EXIT SUB hora = VAL(par$(1))
minut = VAL(par$(2))
segon = VAL(par$(3)) tmp = hora * 3600 + minut * 60 + segon END SUB
|