home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / Emulation / ZXAMSpectrum / ZXAM_Rexx / Español / ZXAM_Tape.zxam < prev    next >
Text File  |  1995-07-31  |  4KB  |  140 lines

  1. /* Este script se encarga de cargar/grabar en ficheros .TAP */
  2.  
  3. /* Para convertir ficheros sueltos a .TAP lo mejor es usar un copión */
  4. /* como el DUPLITAPE, con 'Load Mode -> Disk' y 'Save Mode -> ARexx' */
  5.  
  6.     /* comprobamos si el emulador está presente */
  7.     address command
  8.     
  9.     if ~show(ports,ZXAM_REXX) then do
  10.         requestchoice 'title "ZXAM Script error..." body "No encuentro el puerto del emulador!!" gadgets "AARGH!"'
  11.         exit
  12.         end
  13.  
  14.     ZXAMTapeSetResult(2)   /* resultado=error */
  15.  
  16.     /* Comprobar el tipo de operación deseada */
  17.     
  18.     oper=ZXAMTapeAction()
  19.     if oper=0 then exit   /* Script ejecutado manualmente */
  20.     if oper=3 then signal actionsave   /* SAVE */
  21.  
  22.     /* La operación es LOAD o VERIFY */
  23. actionload:
  24.     nombre=ZXAMTapeLoadName()   /* Nombre del .TAP actualmente seleccionado */
  25.  
  26.         ZXAMTapeSetLoadName('')
  27.  
  28.     /* Requester de LOAD si no hay .TAP seleccionado */
  29.     if nombre='' then do
  30.        oldpath=zxamactloadpath()
  31.        oldpattern=zxamactpattern()
  32.        zxamloadpath("ram:")
  33.        zxampattern('#?.TAP')
  34.        ZXAMControlToFront()
  35.        nombre=zxamloadrequester("Selecciona el fichero .TAP...")
  36.        ZXAMTapeSetLoadOffset(0)
  37.        ZXAMEmulToFront()
  38.        zxamloadpath(oldpath)
  39.        zxampattern(oldpattern)
  40.     end
  41.  
  42.     if nombre='' then exit 0    /* pulsado el CANCEL */
  43.  
  44.     /* abrimos el fichero */
  45.     if ~open('fichero',nombre,'R') then exit 0
  46.     
  47.     /* Nos colocamos en el punto adecuado del fichero */
  48.     filepos=ZXAMTapeLoadOffset()
  49.  
  50.     /* Si hay problemas, seleccionar otro .TAP */
  51.     if filepos~=seek('fichero',filepos,'B') then do
  52.        dummy=close('fichero')
  53.        signal actionload
  54.     end
  55.     
  56.     /* leer el tamaño del bloque actual */
  57.     size=readch('fichero',2)
  58.     if length(size)~=2 then do
  59.     dummy=close('fichero')
  60.     signal actionload
  61.     end
  62.     
  63.     /* abrir fichero temporal para entregar resultado */
  64.     if ~open('destino','t:zxamtemp','W') then exit 0
  65.     
  66.     /* convertirlo a numero */
  67.     size=c2d(reverse(size)) /* fomato invertido Z80 */
  68.     
  69.     /* cargar el bloque */
  70.     block=readch('fichero',size)
  71.     
  72.     /* salvarlo hacia el fichero temporal */
  73.     dummy=writech('destino',block)
  74.     
  75.     ZXAMTapeSetLoadName(nombre)
  76.     ZXAMTapeSetLoadOffset(seek('fichero',0,'C'))
  77.  
  78.     ZXAMTapeSetResult(1,'t:zxamtemp')
  79.     
  80.     dummy=close('fichero')
  81.     dummy=close('destino')
  82.     
  83.     exit
  84.  
  85.  
  86.     /* La operación es SAVE */
  87. actionsave: 
  88.     nombre=ZXAMTapeSaveName()
  89.  
  90.         ZXAMTapeSetSaveName("")
  91.  
  92.     if ((zxamtapeflag()=0)&(zxampeek(zxamtapeaddress())=0)&(zxamtapesize()=17)) then nombre=''
  93.  
  94.     /* requester de SAVE */
  95.     if nombre='' then do
  96.        oldpath=zxamactsavepath()
  97.        oldpattern=zxamactpattern()
  98.        zxamsavepath("ram:")
  99.        zxampattern('#?.TAP')
  100.        ZXAMControlToFront()
  101.        nombre=zxamsaverequester("Selecciona el fichero .TAP para SAVE...")
  102.        ZXAMTapeSetSaveOffset(0)
  103.        ZXAMEmulToFront()
  104.        zxamsavepath(oldpath)
  105.        zxampattern(oldpattern)
  106.     end
  107.     if nombre='' then exit 0    /* pulsado el CANCEL */
  108.  
  109.     if ~exists(nombre) then
  110.       /* creamos el fichero */
  111.       if ~open('fichero',nombre,'WRITE') then exit
  112.       else nop
  113.     else
  114.       /* abrimos el fichero en modo APPEND */
  115.       if ~open('fichero',nombre,'APPEND') then exit
  116.       else nop
  117.     endif
  118.     /* Extraemos de la memoria de Spectrum el bloque a grabar */
  119.     block=d2c(zxamtapeflag())
  120.     if zxamtapesize()~=0 then block=insert(block,zxamgetmem(zxamtapeaddress(),zxamtapesize()))
  121.     block=insert(block,d2c(zxamchecksumstring(block)))
  122.     /* añadimos el tamaño del bloque */
  123.     size=zxamtapesize()+2
  124.     size=d2c(size)
  125.     if length(size)=1 then size=insert(d2c(0),size)
  126.     /* convertimos al formato invertido tipo Z80 */
  127.     size=reverse(size)
  128.     block=insert(size,block)
  129.     /* salvamos el bloque */
  130.     dummy=writech('fichero',block)
  131.     
  132.     ZXAMTapeSetSaveName(nombre)
  133.  
  134.     ZXAMTapeSetResult(1)
  135.     
  136.     dummy=close('fichero')
  137.     
  138.     exit
  139.  
  140.