Volver menú revistas Volver página anterior

El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España para ofrecer los artículos de la revista Amiga World España.

N° 39 - Enero 1993

     COLABORACION     

 

AMIGA Time Code
Por Juan Carlos Sánchez García
Versión 1.1 13/07/92

HISTORIA

Este programa fue creado para solucionar de forma sencilla y efectiva el problema que me planteó mi gran amigo Tantín, que como todo buen profesional del vídeo, exige una cierta calidad.

Es típico que cuando editamos una serie de imágenes, precisemos insertar una banda sonora para porporcionarle a nuestro trabajo un toque especial. Por lo general dicha banda sonora suele ser una música adecuada para las imágenes...

El método más utilizado por todo aficionado, consiste en realizar un AUDIO DUBBING o inserción del audio en la cinta de video, sin alterar la imagen. Este método no permite el sincronizar de cierta manera la imagen con el sonido.

Por ejemplo: supongamos que las imágenes corresponden a una carrera de motos que hemos grabado en el circuito de Jerez y queremos montarlas con una música rápida y en una escena, una moto cae estrepitosamente y queremos que ese instante coincida con una subida del ritmo de la música... Para todo profesional del vídeo, es sabido que la forma más sencilla para ello es grabar la música en cinta de video y editar ésta como si de imágenes se tratase. Así, conseguiremos una sincronización de la imagen y el sonido. Muchos profesionales del video, graban en video los efectos sonoros o músicas más usados, para realizar dichos montajes. La gran mayoría de los videos industriales o semiprofesionales no incluyen como configuración básica un generador de códigos de tiempo que es grabado como parte de la información de video. Con dicho código de tiempos, podemos acceder a cualquier posición de una cinta de video con gran exactitud y desde cualquier punto de la cinta. Por lo general estos videos poseen un cortador de tiempo que cuenta con una precisión al FRAME pero con el inconveniente de que dicho tiempo comienza en el punto en que se encuentre la cinta en el momento de su inserción. Por ello, nunca tenemos un punto exacto de localización de los fragmentos que tengamos en la cinta. Si la cinta contiene una gran cantidad de sonidos o canciones grabadas, el localizar un fragmento puede ser un trabajo complicado. En este punto entramos en juego el ATC. Cuando grabamos la música en las cintas de video, lo hacemos en la pista de uadio normal o en la HIFI si la tenemos. Como no necesitamos grabar ninguna imagen, aprovechamos la pista de video para grabar un código de tiempos en imagen, un simple contador de tiempo con precisión al FRAME. Conforme vamos grabando la música grabamos la imagen del contador y vamos anotando los tiempo de comienzo de cada fragmento. Así podremos localizar cualquier punto de forma rápida y precisa.


CARACTERISTICAS

Debido a que estamos en ESPAÑA y aquí la norma televisiva es la PAL, el programa genera un código de tiempos de 25 FRAMES por segundo. El tiempo máximo que puede contar es de 24 horas. (A ver que cinta dura eso)

La imagen del contador está generada en Hi-ress interlace para que luego no digas...


FUNCIONAMIENTO

El control del código se realiza con los dos botones del ratón de la siguiente forma:

- Una vez arrancado el programa con el botón derecho entraremos en el contador...
- El botón IZQUIERDO empieza a contar. (PLAY)
- El botón DERECHO congela el contador. (PAUSE)
- El botón DERECHO durante 2 segundos pone a cero el contador. (RESET)
- El botón DERECHO+IZQUIERDO termina el programa. (END)


PROBLEMAS CONOCIDOS

Por ahora son desconocidos...


FUTURAS VERSIONES

Tengo en preparación una nueva versión que incorpora una base de datos con todos los tiempo así como la posibilidad de insertar a demás del contador, texto que incluya el nombre del disco, autor, así como toda información necesaria.

Además la base de datos permite almacenar información sobre discos de música y mantener una discoteca tanto de Video, CD, MD, DAT, MC, DCC, LP, que además incluya la búsqueda por nombre, artistas, tipo de música, etc...

Dispondrá de editor de carátulas para todos los soportes grabables.

La base de datos también permitirá almacenar películas o montajes de video así como inserción de imágenes digitalizadas ya sean de las secuencias o de la carátula para una mayor flexibilidad en la búsqueda.

Será indispensable el poseer disco duro y la versión OS 2.04.


INFO

Este programa es de DOMINIO PUBLICO y tiene permiso del autor para ser copiado, con la única condición de mantener los Copywrites originales y todos los ficheros que acompañan, que son:

- ATC
- ATC.info
- ATC.DOC
- ATC.DOC.info
- Fonts:Hamilton/12
- Fonts:Hamilton.font
- Fonts:nEuro/36
- Fonts:nEuro.font

Para funcionar el programa deberemos instalar las fuentes de letras en nuestro directorio FONTS: y además es necesario la libería Diskfont.library en el directorio LIBS:

Realizado integramente en MODULA II (Cluster v1.0) y compatible con las versiones de KICKSTART 1.x y 2.x así como con todos los procesadores de la familia MC680x0.

En ratos libres hago algunos programas de este tipo... si te interesan (Poquitos... algunos de DP y otros NO...)


QUE GURU 1.0
Por JM Torresano

Este programa es de distribución gratuita. NO puede venderlo bajo ningún concepto.


INTRODUCCION

El programa es una pequeña utilidad para saber por qué demonios su Amiga se ha puesto místico. Lo que tiene que hacer es apuntar los ocho primeros dígitos (empezando desde la izquierda y hasta el punto) del guru de su alerta. A continuación, deje que QUEGURU se lo interprete.


USO

El empleo del programa no puede ser más fácil: teclee desde el CLI QUEGURU y cuando le pida el número introduzca el que apuntó y pulse INTRO. El número puede tener un espacio en medio (xxxx xxxx) o no (xxxxxxxx), como le sea más cómodo. Una vez en el programa, puede introducir más números sin tener que ejecutarlo de nuevo. Para salir basta con pulsar la tecla INTRO sin ningún número.

Ejemplos: >QUEGURU
GURU MEDITATION v1.0
GURU numero (Return para parar):
0000 0003
Código de Error: 0000 0003
La Alerta es: Recuperable
Provocada por: CPU
Error General al: No Aplicable
Error Específico: Error de Dirección
GURU número (Return para parar):
81000005
Código de Error: 8100 0005
ÑLa Alerta es: No Recuperable
Provocada por: Libería Exec
Error General al: No Aplicable
Error Específico: Lista de memoria corrupta detectada en FreeMem


CARACTERISTICAS

El programa está diseñado para hacer una interpretación dinámica de las alertas. Estos significa que puede interpretar cualquier combinación, dentro de los valores posibles, sin que ello signifique que, en realidad, se pueda dar esa alerta :-[. El programa controla la calidad (numero de digitos y su validez) del gurú introducido.

Todos los mensajes están actualizados hasta la versión 2.4 del Workbench y en castellano :-). Funciona en cualquier Amiga con ROM 1.2, 1.3 ó 2.04.

Si quiere que el programa soporte más opciones o si ha encontrado algún 'bug', por favor mándeme una nota a través de la redacción. GRACIAS.


CheckClock versión 2.0
Ricardo Martínez (15-Nov-1992)

Gracias por usar CheckClock 2.0, si quiere hacer alguna sugerencia o informar de algún BUG, déjeme un mensaje en FidoNET.


RESTRICCIONES

- Sólo funciona bajo AmigaDOS v2.04 o superior.
- Sólo funciona desde el Shell.
- Necesita la librería ReqTools v38 o superior (incluida en el archivo).


FUNCIONAMIENTO

CheckClock es una utilidad para mantener la fecha de su Amiga siempre correcta. Para ello comprueba que la fecha del reloj interno y la del sistema están dentro del margen especificado.

¿Por qué un margen? Para evitar escribir la fecha en el disco cada vez que se ejecuta el programa CheckClock debería ser ejecutado en la secuencia de rranque de su Amiga, por lo tanto es posible que se ejecute varias veces al día y se escribiría la misma fecha en el disco varias veces, lo cual es innecesario. Usando el margen sólo se slavará la fecha una o dos veces al mes (según el margen). Por ejemplo, un margen de 15 días y en condiciones normales implica que se salve la fecha cada 7 días. Eso es porque, aunque se considera válida dentro de esos 15 días, se actualiza cada 7 (la mitad del margen).

Se usa como: CheckClock [margen] [NOSAVE]

- margen (opcional): Margen es días por defecto o exceso dentro del cual se considera válida la fecha actual. Por defecto son 15 días.

- NOSAVE (opcional): abreviado NS): CheckClock salva las fechas en caso de necesidad. Esta opción impide que se modifique alguna de las fechas comprobadas.

CheckClock funciona de la siguiente forma:

- En primer lugar comprueba que la fecha del reloj interno y la del sistema coincidan. Si no lo hacen, avisa de ello y pregunta cual de ellas debe ser usada como la correcta.

- Seguidamente lee la fecha de creación en disco del programa, y comprueba que la diferencia entre esta y la del reloj interno está dentro del margen especificado. Si todo es correcto y además la diferencia no excede la mistad del margen, finaliza el programa silenciosamente. Si la diferencia es mayor que la mitad y menor que el margen, modifica la fecha de creación del programa dejándola como la fecha actual del reloj interno. Si excede el margen, avisa de ello permitiendo usar la fecha del reloj interno, la última salvada o introducir una nueva fecha. Esta fecha será salvada como la del reloj interno, del sistema y de creación del programa.


BUGS CONOCIDOS

- Al modificar las fechas es posible que el manejo de los segundos no sea muy exacto.

- Este programa ha sido desarrollado inicialmente en un Amiga 2000 y probado posteriormente en un Amiga 3000 asegurando su perfecto funcionamiento.


INSTALACION

Si usa la secuencia de arranque estándar del Amiga, añada una línea para ejecutar el comando "CheckClock" dentro del script "S:User-startup" si existe. Si no puede crear uno nuevo o añadir el comando en el fichero "S:startup-sequence" entre las líneas "LoadWB" y "EndCLI >NIL:".


DISTRIBUCION

Este programa es SHAREWARE. Esto quiere decir que, si lo usa habitalmente debe contribuir económicamente para financiar el desarrollo de este y otros programas y así fomentar el uso del Amiga. Cualquier contribución es válida si no puede mandar dinero, al menos mándeme una postal para que yo vea que alguien usa mis programas y merece la pena seguir con ellos. Mi dirección es:

Ricardo Martinez Carretero
c/ Federico Moreno Torroba, 1
Madrid 28007

;--------------------------------
; $VER: CheckClock versión 2.0 Ricardo Martinez (15-Nov-1992)
;--------------------------------
; Escrito con CygnusEd Pro v2.12
; Ensamblado con GenAm v3.02
;--------------------------------
incdir "Sources:Include/"
include "ExecCalls.i"
include "DosCalls.i"
include "UtilCalls.i"
AllocRequest equ -30 ; reqtools
FreeRquest equ -36
EZRequestA equ -66
GetStringA equ -72
ReadBattClock equ -12 ; battmem
WriteBattClock equ -18
lib_Version equ 20 ; exec
RDA_Buffer equ 0 ; dos
RDA_Lenght equ 4
RDA_SIZE equ 32
FORMAT_DOS equ 0
fib_FileName equ 8
fib_Date equ 132
ds_Days equ 0
ds_Minute equ 4
ds_Tick equ 8
ds_SIZE equ 12
dat_StrDay equ 14
dat_SIZE equ 26
RT_ReqPos equ $80000003 ; reqtools
RTEZ_ReqTitle equ $80000014
RTGS_TextFmt equ $80000026
TAG_END equ 0
REQPOS_CENTERSCR equ 2
RT_REQINFO equ 1
io_Command equ 28 ; struct IORequest
tv_secs equ 0
tv_micro equ 4
tr_node equ 0
tr_time equ 32
tr_SIZE equ 40
CMD_NONSTD equ 9
TR_SETSYSTIME equ CMD_NONSTD+2
UNIT_VBLANK equ 1
;--------------------------------
section CClock_code,CODE
;--------------------------------
StartUp lea RDA_args,a1 ; save command line data
move.l a0,RDA_Buffer(a1)
move.l d0,RDA_Lenght(a1)
lea DosName,a1 ; open "dos.library"
moveq #0,d0
movea.l 4.w,a6
jsr OpenLibrary(a6)
move.l d0,DosBase
beq CleanUp
.c1 movea.l DosBase,a0 ; check AmigaDOS version
move.w lib_Version(a0),d0
cmpi.w #37,d0
bge.s .c2
move.l #T_DosErr,d1
bra Error
.c2 lea ReqName,a1 ; open "reqtools.library"
moveq #0,d0
movea.l 4.w,a6
jsr OpenLibrary(a6)
move.l d0,ReqBase
bne.s .c3
move.l #T_ReqErr,d1
bra.s Error
,c3 moveq #RT_REQINFO,d0 ; alloc a Requester
lea 0.w,a0
movea.l ReqBase,a6
jsr AllocRequestA(a6)
move.l d0,RT_req
bne.s .c4
move.l #T_MemErr,d1
bra.s Error
.c4 lea UtilName,a1 ; open "utility.library"
moveq #0,d0
movea.l 4.w,a6
jsr OpenLibrary(a6)
move.l d0,UtilBase
bne.s .c5
move.l #T_UtilErr,d1
bra.s Error
.c5 lea BClkName,a1 ; open "battclock.resource"
movea.l 4.w,a6
jsr OpenResource(a6)
move.l d0,BClkBase
move.l #10,RetCode
bsr.s CheckClock
beq.s CleanUp
Error movea.l DosBase,a6 ; print error
jsr PutStr(a6)
CleanUp move.l UtilBase,d1 ; close "utility.library"
beq.s .e4
movea.l d1,a1
movea.l 4.w,a6
jsr CloseLibrary(a6)
.e4 move.l RT_req,d1 ; free requester
beq.s .e3
movea.l d1,a1
movea.l ReqBase,a6
jsr FreeRequest(a6)
.e3 move.l ReqBase,d1 ; close "reqtools.library"
beq.s .e2
movea.l d1,a1
movea.l 4.w,a6
jsr CloseLibrary(a6)
.e2 move.l DosBase,d1 ; close "dos.library"
beq.s .e1
movea.l d1,a1
movea.l 4.w,a6
jsr CloseLibrary(a6)
.e1 move.l RetCode,d0
rts
;--------------------------------
; main code
CheckClock bsr ParseArgs ; parse arguments
beq .e1
bsr GetSysDate ; get system date
bsr GetClkDate ; get battclock date
beq.s .c1
lea DS_System,a0 ; compare system & battclock date
lea DS_BClock,a1
move,l ds_Days(a0),d0
move.l ds_Days(a1),d1
cmp.l d0,d1
beq.s .c1
lea T_WhichUse,a1 ; does not match, which must I use?
lea T_3gads,a2
lea AA_temp,a4
move.l #BU_BCday,(a4)
move.l #BU_BCdate,4(a4)
move.l #BU_SYday.8(a4)
move.l #BU_SYdate,12(a4)
bsr ARequest
beq .e2
lea DAT_BClock,a0 ; copy good date info bad date
lea DAT_System,a1
subq.l #1,d0
beq.s .c3
exg a0,a1
.c3 moveq #dat_SIZE-1,d0
.l1 move.b (a0)+,(a1)+
dbf d0,.l1
bset #0,Flags
.c1 bsr GetDskDate ; get saved date
bne.s .c2
lea T_DskErr,a1 ; cant read disk date
bsr SRequest
bra .c4
.c2 lea DS_BClock,a0 ; compare battclock & saved dates
lea DS_Disk,a1
move.l ds_Days(a0),d0
move.l ds_Days(a1),d1
sub.l d1,d0
bpl.s .c5
neg.l d0
.c5 move.l DMargen,d1
bset #1,Flags
cmp.l d1,d0
bhi.s .c7 ; out of range! -> save
lsr.l d1
cmp.l d1,d0
bhi.s .c10 ; in range, but must be saved
bclr #1,Flags
bra.s .c4
.c7 lea T_BadDate,a1 ; HEY, Bad date!
lea T_4gads.a2
lea AA_temp,a4
move.l #BU_BCday,(a4)
move.l #BU_BCdate,4(a4)
move.l #BU_DKday,8(a4)
move.l #BU_DKdate,12(a4)
bsr ARequest
beq.s .e2
cmpi.w #3.d0
bne.s .c8
bsr AskDate ; ask a new date
beq.s .e2
bra.s .c4
.c10 lea DAT_BClock,a0 ; copy good date into bad date
lea DAT_Disk,a1
bra.s .c9
.c8 lea DAT_BClock,a0 ; copy good date into bad date
lea DAT_Disk,a1
subq.l #1,d0
beq.s .c9
exg a0,a1
.c9 moveq #dat_SIZE-1,d0
.l2 move.b (a0)+,(a1)+
dbf d0,.l2
.c4 tst.l AA_args+4 ; NOSAVE!
bne.s .e1
btst #0,Flags ; save system & battclock dates?
beq.s .c6
bsr SetClkDate
bsr SetSysDate
.c6 btst #1,Flags ; save disk date?
beq.s .e1
bsr SetDskDate
bne.s .e1
lea T_SaveErr,a1 ; cant save disk date
bsr SRequest
.e2 move.l #5,RetCode
rts
.e1 clr.l RetCode
rts
;--------------------------------
; parse command line arguments
ParseArgs lea RDA_args,a0 ; command is "?"
movea.l RDA_Buffer(a0),a0
move.b (a0)+,d0
lsl.w #8,d0
move.b (a0)+,d0
cmpi.w #$3f0a,d0
bne.s .c1
lea T_About,a1 ; about CheckClock
bsr SRequest
rts
.c1 move.l #Template,d1 ; parse command line
move.l #AA_args,d2
move.l #RDA_args,d3
movea.l DosBase,a6
jsr ReadArgs(a6)
move.l d0,RDA_args2
bne.s .c2
lea T_ArgErr,a1
bsr SRequest
rts
.c2 lea AA_args,a0 ; get arguments
move.l (a0),d0
beq.s .c3
movea.l d0,a0
move.l (a0),DMargen
.c3 move.l RDA_args2,d1 ; free ReadArgs() work space
movea.l DosBase,a6
jsr FreeArgs(a6)
moveq #-1,d0
rts
;--------------------------------
; get BattClock date
GetClkDate tst.l BClkBase ; there is a batt-clock?
beq.s .e1
movea.l BClkBase,a6 ; get battclock date
jsr ReadBattClock(a6)
move.l #60*50*24,d1 ; make battclock DateStamp
movea.l UtiBase,a6
jsr UDivMod32(a6)
move.l d0,DS_BClock+ds_Days
move.l d1,d0
moveq #60,d1
movea.l UtilBase,a6
jsr UDivMod32(a6)
move.l d0,DS_BClock+ds_Minute
move.l d1,DS_BClock+ds_Tick
move.l #DAT_BClock,d1 ; make battclock date string
move.l DosBase,a6
jsr DateToStr(a6)
moveq #-1,d0
.e1 rts
;--------------------------------
; set BattClock date
SetClkDate tst.l BClkBase
beq.s .e1
lea DS_BClock,a0 ; calc Clock date
bsr DStmp2Secs
movea.l BClkBase,a6 ; save Clock date
jsr WhiteBatClock(a6)
.e1 rts
;--------------------------------
; get System date
GetSysDate move.l #DS_System,d1 ; get System DateStamp
move.l DosBase,a6
jsr DateStamp(a6)
move.l #DAT_System,d1 ; make System date string
move.l DosBase,a6
jsr DateToStr(a6)
rts
;--------------------------------
; set System date
SetSysDate movea.l 4.w,a6 ; create a port
jsr CreateMsgPort(a6)
move.l d0,MP_timer
beq .e1
movea.l MP_timer.a0 ; create an IORequest
moveq #tr_SIZE,d0
movea.l 4.w,a6
jsr CreateIORequest(a6)
move.l d0,IO_timer
beq.s .e2
lea TimerName,a0 ; open "timer.device"
movea.l IO_timer,a1
moveq #UNIT_VBLANK,d0
moveq #0,d1
movea.l 4.w,a6
jsr OpenDevice(a6)
tst.l d0
bne.s .e3
movea.l IO_timer,a1
move.l d0,tr_time+tv_secs(a1)
move.l d1,tr_time+tv_micro(a1)
move.w #TR_SETSYSTIME,io_Command(a1)
movea.l 4.w,a6
jsr DoIO(a6)
movea.l IO_timer,a1 ; close "timer.device"
movea.l 4.w,a6
jsr CloseDevice(a6)
.e3 movea.l IO_timer,a0 ; delete IORequest
movea.l 4.w,a6
jsr DeleteIORequest(a6)
.e2 movea.l MP_timer,a0 ; delete port
movea.l 4.w,a6
jsr DeleteMsgPort(a6)
.e1 rts
;--------------------------------
; seconds, mseconds=DStmp2Secs(DateStamp)
; d0 d1 a0
DStmp2Secs move.l ds_Days(a0),d1
move.l ds_Minute(a0),d2
move.l ds_Tick(a0),d3
move.l #24*60*60,d0
movea.l UtilBase,a6
jsr UMul32(a6)
move.l d0,d4
moveq #60,d0
mulu d2,d0
add.l d4,d0
move.l d3,d1
divu #5,d1
mulu #6,d1
add.l d1,d0
move.l d0,-(sp)
divu #3000,d3
clr.w d3
swap d3
move.l d3,d1
move.l #20000,d0
movea.l UtilBase,a6
jsr UMul32(a6)
move.l d0,d1 ; d1 = µseconds
move.l (sp)+,d0 ; d0 = seconds
rts
;--------------------------------
; get saved date
GetDskDate movea.l DosBase,a6 ; get program's dir
jst GetProgramDir(a6)
move.l d0,ProgDir
move.l #ProgName,d1 ; get program's name
move.l #256,d2
jsr GetProgramName(a6)
tst.l d0
beq .e1
move.l ProgDir,d1 ; program's dir is now current dir
movea.l DosBase,a6
jsr CurrentDir(a6)
move.l d0,OldDir
move.l #ProgName,d1 ; lock CheckClock
movea.l DosBase,a6
jsr Lock(a6)
move.l d0,CClockLock
beq.s .e2
move.l d0,d1 ; examine CheckClock
move.l #FInfo,d2
movea.l DosBase,a6
jsr Examine(a6)
tst.l d0
beq.s .e3
lea FInfo+fib_Date,a0 ; get disk DateStamp
lea DS_Disk,a1
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l #DAT_Disk,d1 ; make Disk date string
move.l DosBase,a6
jsr DateToStr(a6)
.e3 move.l CClockLock,d1 ; unlock CheckClock
movea.l DosBase,a6
jsr UnLock(a6)
.e2 move.l OldDir,d1 ; restore old current dir
movea.l DosBase,a6
jsr CurrentDir(a6)
.e1 tst.l FInfo+fib_FileName
rts
;--------------------------------
; set saved date
SetDskDate movea.l DosBase,a6 ; get program's dir
jsr GetProgramDir(a6)
move.l d0,ProgDir
move.l #ProgName,d1 ; get program's name
move.l #256,d2
jsr GetProgramName(a6)
tst.l d0
beq.s .e1
move.l ProgDir,d1 ; program's dir is now current dir
movea.l DosBase,a6
jsr CurrentDir(a6)
move.l d0,OldDir
move.l #ProgName,d1 ; set CheckClock date
move.l #DS_Disk,d2
movea.l DosBase,a6
jsr SetFileDate(a6)
move.l d0,-(sp)
move.l OldDir,d1 ; restore old current dir
movea.l DosBase,a6
jsr CurrentDir(a6)
move.l (sp)+,d0
.e1 rts
;--------------------------------
; ask a date from user
AskDate lea TL_Stags,a0 ; get a date string
lea DAT_BClock,a1
movea.l dat_StrDate(a1),a1
lea T_ReqTitle,a2
lea 0.w,a3
moveq #10,d0
movea.l ReqBase,a6
jsr GetStringA(a6)
tst.l d0
beq.s .e1
move.l #DAT_BClock,d1 ; make date string
move.l DosBase,a6
jsr StrToDate(a6)
tst.l d0
bne.s .c1
lea T_InvDate,a1 ; Bad date!
lea T_Salir,a2
lea AA_temp,a4
lea DAT_BClock,a0
move.l dat_StrDate(a0),(a4)
bsr.s ARequest
bra.s .e1
.c1 lea DAT_BClock,a0 ; copy good date into bad dates
lea DAT_System,a1
lea DAT_Disk,a2
moveq #dat_SIZE-1,d0
.l1 move.b (a0),(a1)+
move.b (a0)+,(a2)+
dbf d0,.l1
bset #0,Flags
bset #1,Flags
moveq #-1,d0
.e1 rts
;--------------------------------
; ReqTools requester
SRequest lea T_Salir,a2 ; "SALIR" a1=text
bra.s GRequest
ORequest lea T_Ok,a2 ; " OK " a1=text
GRequest lea 0.w,a4 ; a1=text a2=gadgets
ARequest lea TL_Rtags,a0
FRequest movea.l RT_req,a3 ; a0=tags a1=text a2=gadgets
movea.l ReqBase,a6
jsr EZRequestA(a6)
tst.l d0
rts
;--------------------------------
section CClock2.00_data,DATA
cnop 0,4
FInfo dcb.b 260,0
OldDir dc.l 0
CClockLock dc.l 0
RetCode dc.l 20
OutputFH dc.l 0
DMargen dc.l 15
ProgDir dc.l 0
ProgName dcb.b 256,0
MP_timer dc.l 0
IO_timer dc.l 0
DosBase dc.l 0
ReqBase dc.l 0
UtilBase dc.l 0
BClkBase dc.l 0
DosName dc.b "dos.library",0
ReqName dc.b "reqtools.library",0
utilName dc.b "utility.library",0
BClkname dc.b "battclock.resource",0
TimerName dc.b "timer.device",0
Version dc.b "$VER: CheckClock 2.0 (15.Nov.1992)",0
Flags dc.b 0
even
;--------------------------------
; arguments
RDA_args dcb.b RDA_SIZE
RDA_args2 dc.l 0,0
Template dc.b "MARGEN/N,NS=NOSAVE/S"
even
;--------------------------------
; reqtools data
RT_req dc.l 0
TL_Stags dc.l RT_ReqPos
dc.l REQPOS_CENTERSCR
dc.l RTGS_TextFmt,T_DateFmt
dc.l TAG_END
TL_Rtags dc.l RTEZ_ReqTitle ; title
dc.l T_ReqTitle
dc.l RT_ReqPos ; position = pointer
dc.l REQPOS_CENTERSCR
dc.l TAG_END
AA_temp dcb.l 10,0
;--------------------------------
; dates
DAT_BClock ; battclock date
DS_BClock dcb.b ds_SIZE
dc.b FORMAT_DOS,0
dc.l BU_BCday,BU_BCdate,BU_BCtime
BU_BCday dcb.b 16,0
BU_BCdate dcb.b 16,0
BU_BCtime dcb.b 16,0
DAT_System ; system date
DS_System dcb.b ds_SIZE
dc.b FORMAT_DOS,0
dc.l BU_SYday,BU_SYdate,BU_SYtime
BU_SYday dcb.b 16,0
BU_SYdate dcb.b 16,0
BU_SYtime dcb.b 16,0
DAT_Disk ; saved date
DS_Disk dcb.b ds_SIZE
dc.b FORMAT_DOS,0
dc.l BU_DKday,BU_DKdate,BU_DKtime
BU_DKday dcb.b 16,0
BU_DKdate dcb.b 16,0
BU_DKtime dcb.b 16,0
;--------------------------------
; texts
T_DosErr dc.b "CheckClock 2.0 necesita el AmigaDOS versión 2.04 o superior",10,0
T_ReqErr dc.b "CheckClock 2.0 necesita la librería ReqTools",10,0
T_UtilErr dc.b "CheckClock 2.0 necesita la librería utility",10,0
T_MemErr dc.b "No hay memoria suficiente",10,0
T_ArgErr dc.b "Argumentos erróneos",10,0
T_DskErr dc.b "No puedo leer la última fecha salvada",0
T_SaveErr dc.b "'%s' no es una fecha válida",0
T_ReqTitle dc.b "Check Clock 2.0",0
T_About dc.b "Escrito por Ricardo Martinez Cantero",10
dc.b 10
dc.b "Este programa es SHAREWARE. Contribuye con",10
dc.b "una aportación moneraria si lo usas habitualmente.",10
dc.b 10
dc.b "Uso: CheckClock [margen_en_dias] [NOSALVAR]",0
T_WhichUse dc.b "La fecha del reloj interno es distinta a la del sistema",10,10
dc.b "Reloj interno: %s, %s",10
dc.b "Sistema: %s, %s",10,10
dc.b "¿Cuál debo usar?",0
T_BadDate dc.b "La fecha del reloj interno está fuera del rango especificado",10,10
dc.b "Reloj interno: %s, %s",10
dc.b "Ultima fecha salvada: %2, %2",10,10
dc.b "¿Cuál debo usar?",0
T_DateFmt dc.b "introduce una fecha en la forma 'DD-MMM-YY'",0
T_Salir dc.b "SALIR",0
T_Ok dc.b " OK ",0
T_3gads dc.b " RELOJ | SISTEMA | SALIR ",0
T_4gads dc.b "RELOJ|DISCO|NUEVA|SALIR",0

Volver menú revistas Volver página anterior