|
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 proporcionarle 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 vídeo, 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 vídeo y editar ésta como si de imágenes se tratase. Así, conseguiremos una sincronización de la imagen y el sonido. Muchos profesionales del vídeo, graban en vídeo 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 vídeo. Con dicho código de tiempos, podemos acceder a cualquier posición de una cinta de vídeo 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 vídeo, lo hacemos en la pista de audio normal o en la HIFI si la tenemos. Como no necesitamos grabar ninguna imagen, aprovechamos la pista de vídeo 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.
CARACTERÍSTICAS
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 Vídeo, 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 vídeo 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 librerí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.
INTRODUCCIÓN
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: Librería Exec
Error General al: No Aplicable
Error Específico: Lista de memoria corrupta detectada en FreeMem
CARACTERÍSTICAS
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 dígitos 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 arranque 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 salvará 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 mitad 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.
INSTALACIÓN
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:".
DISTRIBUCIÓN
Este programa es SHAREWARE. Esto quiere decir que, si lo usa habitualmente 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.
Nota Encanta: La dirección ha sido omitida.
;-------------------------------- ; $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
|
|