Renombrador

Description of the page contents

A file renamer for the Psion 5mx.

I wrote this litte tool in OPL for my Psion 5mx. It uses an ad hoc procedure to rename the files listed in a text file. I wrote also another file renamer with a different approach and more features.

Listing


rem renombrador

rem Un renombrador de ficheros para la Psion 5mx.
rem Dosier-renomigilo por Psion 5mx.
rem A file renamer for the Psion 5mx.

rem Renombra archivos de Psion 5mx cuyos nombres están en un archivo de texto.
rem Ghi alinomigas dosierojn en teksta dosiero listitajn.
rem It renames files whose names are included in a text file.

rem Carece de interfaz de usuario. Hay que adaptar el código fuente a cada caso.
rem Senuzinterfaca. La fontkodon endas chiukaze adapti.
rem No user interface. The source code has to be configured for every case.

rem Copyright (C) 2004-2007 Marcos Cruz (http://programandala.net)
rem Licencia/Permesilo/License:
rem http://programandala.net/license

rem --------------------------------------------

rem 2007-01-20
rem Mejorado. Ampliado con nuevo proc para renombrar.

rem 2006-07-12
rem Mejorado. Ampliado con nuevo proc para renombrar.

rem 2005-10-21
rem Segunda versión, mejorada.
rem Dua versio, plibonigita.
rem Second version, improved.

rem 2004-09-10
rem Primera versión.
rem Unua versio.
rem First version.

rem --------------------------------------------

proc main:

	local file_list$(255)
	local old_file_name$(255)
	local new_file_name$(255)
	local ret%,handle%,mode%
	local address&
	local k%

	setpath "d:\MY_PATH\":rem CONFIGURE THIS
	
	address&=addr(old_file_name$)

	rem CONFIGURE THIS:
rem	print "Filename with the file list?",
rem	input file_list$
	file_list$ = "c:\MY_FILE_LIST.txt":rem OR CONFIGURE THIS
	cls
	mode%=$0400 OR $0020  rem open=$0000,text=$0020,share=$0400
	ret%=ioopen(handle%,file_list$,mode%)
	if ret%<0
		error:(ret%)
		return
	endif

	while 1

		k% = key
		if k% rem if keypress
			if k%=27 rem Esc pressed
				return rem otherwise wait for a key
			elseif get=27
				return rem Esc pressed
			endif
		endif

		ret%=ioread(handle%,address&+1,255)
		if ret%<0
			if ret%<>-36 rem not end of file
				error:(ret%)
			endif
			break
		else
			pokeb address&,ret% rem leading byte count
			new_file_name$=rename_02$:(old_file_name$)
			if exist(old_file_name$) and (new_file_name$<>old_file_name$)
					print old_file_name$;" > ";
					if not exist(new_file_name$)
						rename old_file_name$,new_file_name$
						print new_file_name$
					else
						print "Error: YA EXISTE. Pulsa una tecla para seguir."
						pause 0
					endif
			endif
		endif

	endwh
	
	ret% = ioclose(handle%)
	if ret%
		error:(ret%)
	endif
	pause -100
	key

endp

proc rename_01$:(file_name$)

	rem Renombra a minúsculas
	rem y cambia los espacios por guiones bajos.

	local renamed$(255)
	local addr&
	local i%

	renamed$ = lower$(file_name$)
	addr& = addr(renamed$)
	i% = len(renamed$)

	while i%
		if peekb(addr&+i%) = 32 rem space
			pokeb addr&+i&,%_
		endif
		i% = i%-1

	endwh
	
	return renamed$

endp

proc rename_02$:(file_name$)

	rem entrada:
	rem 	x_p1_p2_pn[_muestra].jpg
	rem salida:
	rem		x[_muestra].jpg

	rem 2006-07-12

	local left%,right%

	left% = loc(file_name$,"_")-1
	right%=4+8*abs(loc(file_name$,"_muestra.jpg")>0)
	return left$(file_name$,left%)+right$(file_name$,right%)

endp

proc rename_03$:(file_name$)

	rem Cambia los guiones bajos por espacios.
	
	rem 2007-01-20

	local renamed$(255)
	local addr&
	local i%

	renamed$ = file_name$
	addr& = addr(renamed$)
	i% = len(renamed$)

	while i%
		if peekb(addr&+i%) = %_
			pokeb addr&+i&,32 rem space
		endif
		i% = i%-1

	endwh
	
	return renamed$

endp

proc error:(val%)

	print "Error",val%,err$(val%)
	get

endp

Download

Glossary

OPL
Organiser Programming Language