BID: textos universitaris de Biblioteconomia i Documentació

Número 3, desembre 1999


Disseny i creació d'una base de dades bibliogràfica en format CATMARC amb CDS/ISIS
Narcís Fluvià i Figueras
Arxiu Central Administratiu de l'Organisme de Gestió Tributària
Diputació de Barcelona
fluviafn@diba.es

Resum

Es presenta l'experiència realitzada a l'Organisme de Gestió Tributària de la Diputació de Barcelona, d'aplicació del format CATMARC (en la primera versió de 1987) a través del programari CDS/ISIS per a Windows, també conegut com a Winisis. S'hi descriuen les principals dificultats que s'han detectat durant el procés de definició de la base de dades i de la seva implementació, i les solucions que s'han aplicat en cada cas. La major part de les opcions es resolen a través del llenguatge de formatació per a la sortida de dades propi de CDS/ISIS, i a través de la programació en ISIS/PAS, versió del llenguatge PASCAL d'ús exclusiu en l'entorn d'ISIS. Finalment, fem algunes recomanacions per a l'adaptació d'ISIS al català.


Introducció

L'origen de l'aplicació que presentem en aquest treball rau en l'organització de la biblioteca de l'Organisme de Gestió Tributària de la Diputació de Barcelona, que és una petita biblioteca especialitzada en les funcions pròpies d'aquest Organisme.

Les dimensions reduïdes de la biblioteca no haurien justificat cap gran esforç d'adaptació de mitjans informàtics per gestionar-la de manera integral ni per catalogar-ne els fons. Però des de l'Arxiu es volia acceptar aquest repte atès que era la manera de descobrir els secrets, la potencialitat real i les possibilitats de resolució de problemes que tenia el CDS/ISIS. El projecte global era dissenyar la base de dades documental que havia de permetre la gestió del fons de l'Arxiu.

Ràpidament es va poder comprovar que CDS/ISIS està dissenyat per manipular dades textuals i bibliogràfiques, però no està preparat per treballar en format MARC. L'element essencial d'incompatibilitat entre els dos sistemes és que el MARC té subcamps repetibles dins d'una mateixa ocurrència de camp, mentre que CDS/ISIS només reconeix camps repetibles, però no els subcamps repetibles.

Adaptar el MARC a les limitacions estàndard del CDS/ISIS comporta l'etern perill de les adaptacions dels estàndards destinats a possibilitar la comunicabilitat i la compatibilitat de les dades bibliogràfiques: cada centre hi aplica les modificacions necessàries per adaptar-les a les necessitats locals fins que els formats resultants esdevenen compatibles només en part; o bé la compatibilitat necessita uns reajustaments tan costosos que no compensen els esforços necessaris; o bé esdevenen simplement sistemes incompatibles.

Justament, l'origen de CDS/ISIS —en un entorn d'una entitat multinacional i multilingüística— ha comportat que una de les característiques essencials que té sigui l'adaptabilitat a les necessitats locals. La idea d'adaptació del programari estàndard a les necessitats locals més impredictibles es plasma en l'existència d'una adaptació del llenguatge de programació PASCAL per preparar ampliacions i adaptacions del programa. Aquesta programació ha estat àmpliament utilitzada per a la manipulació de la base de dades.

Així, no era agosarat intentar adaptar el CDS/ISIS a les necessitats de la catalogació MARC. Es van intentar aprofitar aquestes facilitats i les eines disponibles per adaptar el programari a les necessitats específiques del MARC i no a la inversa.

En aquest treball s'exposa el resultat final, i es descriu la base de dades resultant, amb els problemes que ha calgut resoldre i com han estat superats. En descriure els diferents formats, aplicacions, etc., s'indica en nota el contingut dels fitxers originals, de manera que utilitzant les eines de Windows per senyalar, copiar i enganxar es poden crear fitxers ASCII que reprodueixin les accions descrites al text.

Descripció general de la base de dades

Atès que aquesta base de dades es va implementar inicialment per a la versió de CDS/ISIS per a l'MS-DOS (versió 3.0, de 1992), es va adaptar a la versió del CATMARC de 1987, amb les esmenes i addicions de 1990. No s'ha implementat el control d'autoritats ni s'han efectuat altres esmenes o ampliacions basades en les edicions posteriors del CATMARC, tret de la inclusió del camp 773 per a la descripció analítica de parts components. S'hi inclou el camp 999, de caràcter local, per a la gestió i control de la col·lecció, que no existien en la versió de 1987-1990, tot i que sí que es consigna (amb altres etiquetes de camp i amb altres estructures) en les versions posteriors.

El fitxer BIBLO.FDT1 reprodueix l'estructura de l'edició emprada de CATMARC, i conté la definició dels camps disponibles, amb les característiques pròpies de cadascun: els subcamps que conté, la llargària, el tipus de dades, i si és repetible o no.

Genèricament (tret dels camps de longitud fixa prescrita al CATMARC), s'assigna una longitud de 100 bytes per a cada camp, tot i que Winisis disposarà exclusivament de l'espai ocupat realment, i, si cal, permetrà l'ús d'un espai superior, fins a 6.000 bytes. Tots els camps estan definits com a alfanumèrics.

En la relació de subcamps disponibles per a cada camp, no es diferencien els que són repetibles dels que no ho són, atès que CDS/ISIS no permet identificar-los ni gestionar-los. Els subcamps repetibles s'han de gestionar amb aplicacions ISISPAS com es veurà més endavant.

El caràcter estructurat de les dades que s'introdueixen seguint el format MARC permet validar automàticament tota una sèrie d'elements: la llargada (per als camps 001, 008 i 022), els camps que són repetibles, els subcamps vàlids, els indicadors de camp vàlids, els camps incompatibles o que s'exclouen mútuament, els subcamps repetibles, la validació de l'ISBN i l'ISSN, etc. La validació de dades és un aspecte important per tal d'evitar errors en la introducció de dades i mantenir un bon nivell de qualitat.

Winisis controla automàticament determinats aspectes: els subcamps vàlids en cada camp (els definits al fitxer BIBLO.FDT), i els camps que són repetibles. Per ampliar els criteris de validació de dades, es pot crear el fitxer BIBLO.VAL, que contindrà els paràmetres de validació per a cada camp i, si escau, els generals per a cada registre.

Les validacions que permet Winisis tenen l'inconvenient que el missatge d'error que es desplega si s'atempta contra la integritat del format de dades predefinit no permet decidir entre modificar el text entrat o bé continuar endavant, perquè es tracta d'una dada introduïda conscientment. Cal retrocedir i esborrar o corregir les dades no admeses. Es va intentar obviar aquest problema creant dos fitxers d'entrada de dades: un per a l'usuari final, amb un alt nivell de control amb validacions de dades estrictes, i un altre per a l'administrador de la base de dades, sense control o bé amb controls limitats (com ara la bondat o no de l'ISBN). En realitat, però, el fitxer BIBLO.VAL no està lligat a un full d'entrada de dades, sinó a la mateixa base de dades. D'aquesta manera, tot el sistema de control de dades és vigent sigui quin sigui el full d'entrada de dades actiu. Per tot això, finalment, s'ha cregut convenient abandonar el sistema de validació automàtica de dades.

S'ha creat el fitxer BIBLO.VAL amb un únic comandament de validació: &visbn(21^a), que remet el contingut del subcamp 21$a al fitxer ISBN.PAS.

Des d'aquest fitxer es controla la correcció de l'ISBN (la llargada i el dígit de control) indicat al subcamp 21$a. En el cas que l'ISBN indicat a l'obra sigui incorrecte, caldrà assignar-li el subcamp 21$z (= ISBN incorrecte).

Pel que fa a la recuperació de les dades, Winisis permet simular l'existència de diversos diccionaris parcials, a més de l'opció de visualització del diccionari global que inclou totes les entrades dels diccionaris parcials. El fitxer BIBLO.FST conté l'estructura que utilitza Winisis per extreure les dades que incorpora al diccionari de dades.

En aquesta aplicació s'han implementat els diccionaris següents:

021.  ISBN, etiqueta de camp 21.
100.  Autors, etiquetes de camp: 100, 110, 111, 700, 710, 711
245.  Títols, etiquetes de camp: 240, 243; els subcamps amb títols, informacions complementàries del títol, títols paral·lels, títols dependents, etc.: 245$a, 248$h, 248$i, 248$j, 248$k, 245$i, 245$j, 245$k, 245$b, 245$l, 700$t.
650.  Matèries, etiquetes de camp: 600, 610, 611, 645, 650 i 651

L'índex 21 (ISBN) es formata amb l'opció 5 (subcamp sencer amb un literal) de manera que dóna el prefix ISBN seguit del contingut del subcamp $a (si és un ISBN vàlid) o del subcamp $z (si és un ISBN erroni).

Els altres índexs necessiten un tractament especial a causa de les incompatibilitats entre el format MARC i el sistema ISIS.


Incompatibilitats del CATMARC i el Winisis

Si en la descripció general de la base de dades hem advertit que Winisis no permet manipular els subcamps repetibles en una mateixa ocurrència de camp, és en els mòduls de recuperació de la informació que aquest problema es presenta amb tota la seva amplitud.

En la construcció de les eines de recuperació, els codis de subcamp han de ser substituïts per les puntuacions prescrites en les AACR (o en el codi de catalogació emprat) per tal d'obtenir els noms amb la forma normalitzada.

En la presentació de les dades recuperades ens trobem amb el mateix problema: la necessitat de convertir els codis de subcamps en puntuacions llegibles i normalitzades.

En aquests casos ha calgut recórrer a la programació en ISISPAS per efectuar la conversió dels codis de subcamp en les puntuacions correctes.

Winisis disposa d'un potent llenguatge de formatació de les dades a través del qual es poden seleccionar colors i tipus de lletra per dibuixar les dades en pantalla. Aquest llenguatge és cada cop més potent i arriba a incloure alguns elements de programació. Tots aquells elements que no es poden manipular a través del llenguatge de formatació, Winisis els tracta amb una extensió d'aquest llenguatge, que és la programació ISISPAS.

ISISPAS és una adaptació del llenguatge de programació PASCAL estàndard per al CDS/ISIS. En realitat es tracta d'un llenguatge amb la mateixa estructura i sintaxi que el PASCAL, però amb un seguit important de limitacions. La part fonamental d'ISISPAS és la biblioteca de funcions que incorpora, que permet declarar funcions i procediments que després seran utilitzats al llarg del programa; així es poden ampliar les funcions que incorpora ISISPAS de manera nativa.

Els programes són al directori definit a la línia 1 del fitxer inicialitzador SYSPAR.PAR. Són fitxers en format ASCII que contenen el programa font i que es reconeixen perquè tenen l'extensió *.PAS. Winisis incorpora una utilitat de compilació, tot creant els fitxers *.PCD, executables des dels fitxers de formatació de Winisis. Si el programa font té algun error, Winisis dóna l'opció d'editar el fitxer per corregir-lo i reintentar-ne la compilació.

Val a dir que l'ISISPAS de les versions d'ISIS per a MS-DOS és molt més potent que la versió de Winisis. La manera de presentar les dades en pantalla de Windows ha motivat que ISISPAS no pugui manipular directament la pantalla. Només pot manipular les dades, i la presentació la dissenya el llenguatge de formatació.

D'altra banda, l'ISISPAS per a Windows no permet modificar les dades de la base de dades (recuperar, modificar i recuperar registres), ni de manera automàtica ni de manera interactiva. Totes aquestes prestacions es poden personalitzar a través d'una extensió externa de la família ISIS, desenvolupada per BIREME el 1997: la interfície de programació per obtenir fitxers ISIS_DLL, compatibles amb Windows.

Tot i que posteriorment s'han desenvolupat algunes aplicacions específiques en ISISPAS (per exemple, l'aplicació ISBN.PAS que ja hem vist), aquesta programació s'ha utilitzat bàsicament per a la manipulació dels subcamps repetibles en la indexació i la presentació de les dades.

Pel que fa als índexs 100, 245 i 650, s'ha seleccionat l'opció 1 (línies o subcamps) d'indexació a partir de les dades prèviament formatades. Com que el format MARC estructura les dades en unitats mínimes a través dels subcamps, cal recuperar l'estructura de les dades donant puntuacions concretes als elements de les dades contingudes als subcamps que s'extreuen per a la recuperació de la informació. Això planteja dos problemes:

a) D'una banda, pot haver-hi subcamps repetibles en una única ocurrència de camp, possibilitat que no està prevista per ISIS, i que no és manipulable de manera estàndard;

b) De l'altra, cada subcamp requereix una puntuació diferent segons l'etiqueta de camp que el conté, o fins i tot pot ser diferent segons si existeixen o no altres subcamps en la mateixa ocurrència de camp.

L'estructura genèrica dels programes de formatació de subcamps es basa en la funció STRTRAN, que substitueix uns elements per uns altres dins una sèrie de caràcters (pren el nom de la funció nativa de CLIPPER que fa la mateixa funció). Aquesta funció no existeix a la biblioteca de funcions ISISPAS; per tant, cal declarar-la i desenvolupar-la dins de cada programa de formatació.

El cos dels programes formatació crida la funció STRTRAN per transformar els codis ISIS en la codificació prescrita per altres formats: ISBD, MARC, etc.

El format d'aquesta funció és: s1, s2, s3: string; z: real, on s1 és la cadena de caràcters que es manipula; s2 és la cadena de caràcters que s'eliminarà a l'interior d's1; s3 és la cadena de caràcters que s'incorporarà al lloc on s'ha eliminat s2; z pot tenir el valor 0 per substituir la primera ocurrència, o 1 per substituir totes les ocurrències existents. Per exemple, al camp 245 del títol i de les mencions de responsabilitat:

v:=STRTRAN(v, '^b', ' : ', 1);
v:=STRTRAN(v, '^l', '. ', 1);

El subcamp 245^a pot començar amb paraules no significatives, la qual cosa pot produir que s'extregui una sèrie de caràcters de valor nul per a la recuperació de la informació. Per evitar-ho, aquest subcamp es formata amb una aplicació especial BUIDES.PAS, per la qual s'indexa el contingut del camp a partir de la posició donada pel segon indicador de camp, i les posicions no admeses es posposen al final del subcamp amb una coma. Aquesta aplicació en principi només està pensada per a la indexació de les dades.


Formats de visualització

S'han assajat els avantatges de la versió d'ISIS per a Windows sobre la versió per a MS-DOS mitjançant l'elaboració de formats atractius visualment («amigables»), aplicant diverses possibilitats quant als colors, als tipus i a les mides de lletra, etc. Així mateix, s'han assajat les possibilitats d'establir vincles hipertextuals. A partir del format de visualització per defecte, es pot visualitzar qualsevol dels altres tres tipus de format; aquests altres formats també estan relacionats entre ells, la qual cosa pot enriquir les operacions de manteniment i depuració de dades.

Menú de presentació: format per defecte en entrar a la base de dades BIBLO. Permet seleccionar l'accés al catàleg de la biblioteca, a l'inventari de l'arxiu o al formulari d'avaluació i tria documental.

Gràfic 1. Menú de presentació


OPAC: format per defecte en entrar a la base de dades. És el format que sembla més adequat per a un OPAC. No està pensat per a les necessitats pròpies dels Serveis Tècnics, sinó per a les necessitats d'informació d'un usuari potencial. L'usuari no necessita saber si s'ha catalogat en un format de la família MARC o no, ni quina és l'estructura de la base de dades, i per tant no és necessari mostrar les etiquetes de camp ni els indicadors de camp. Per contra, el format ISBD pot semblar críptic, i més vist en pantalla: l'usuari no ha de saber necessàriament els valors corresponents a cada una de les diferents puntuacions que precedeixen les dades en aquest format. S'ha optat per una presentació basada en:

Aprofita alguns dels recursos propis de Winisis per aconseguir presentacions més «amigables» com un dels principals punts forts de les aplicacions que han de ser consultades directament pels usuaris finals. Aquesta és la visualització per defecte; tots els altres formats tenen l'opció de retornar al format de visualització OPAC.

Des d'aquest format, en canvi, es pot tornar al menú principal d'accés a les diverses bases de dades (Biblo, Arxiu i Tria), atès que és el format principal de visualització de la base de dades BIBLO.

L'opció «Darrer registre vist...» permet tornar al darrer registre visualitzat per pantalla. És una opció útil quan es prem per error l'inici o final de la base de dades i és difícil tornar a l'origen.

Gràfic 2. Format de visualització OPAC


ISIS: format de visualització que genera automàticament el mateix Winisis. Té l'avantatge de la facilitat de crear-lo i permet visualitzar la totalitat dels camps amb la denominació o nom de camp corresponent. El format automàtic, però, ha estat adaptat: si el format de presentació de dades per a un usuari final és el format per defecte, aquest és un format d'ús intern per comprovar la coherència i l'estructura del registre. Com a eina professional, ha semblat innecessari mantenir el nom de camp, i s'han deixat només les etiquetes de camp (TAG, en llenguatge CDS/ISIS). Cada etiqueta és seguida pel contingut del camp corresponent, exactament com ha estat introduït a la base de dades, sense fer-ne cap manipulació. Un joc de colors diferencia les etiquetes de les dades. El resultat és molt similar a la visualització d'un registre sense seleccionar cap format, però amb una presentació més «amigable» per raó del tipus de lletra i dels colors utilitzats.

Gràfic 3. Format de visualització ISIS


MARC: format de visualització pròpia del format MARC. El procés de creació ha estat una adaptació de l'anterior. Manté les etiquetes de camp, seguides del contingut del camp formatat amb l'aplicació &dollar(Vxxx): substitueix el codi de subcamp d'ISIS «^» pel codi de subcamp propi del MARC «$»; incorpora el signe «#» de fi de camp; elimina els signes «<>» que encerclen les paraules no significatives del títol (camp 245$a); i intercala un punt («.») entre els identificadors de camp i el contingut del camp, per facilitar-ne visualment la lectura. Conceptualment, però, aquest format és el format principal per al control tècnic de la qualitat de la catalogació. És la presentació completa de la codificació MARC. Els camps locals que no són propis del CATMARC es presenten amb un color diferent.

Gràfic 4. Format de visualització MARC


MARC complet: és una còpia del format MARC tal com ha estat presentat més amunt, però que formata una sortida per a cada un dels camps, tant si està present com si no ho està a la base de dades. Permet depurar i avaluar la catalogació a través del context dels camps utilitzats. També permet imprimir el registre en forma de formulari per completar manualment les dades del registre.

Gràfic 5. Format de visualització MARC complet


ISBD: canvia radicalment el concepte de visualització. Es prescindeix del format de base (CATMARC) i es prioritza la visualització en un format bibliogràfic estàndard: l'ISBD. Inclou els encapçalaments principals segons les AACR2 i els tracings dels subencapçalaments de noms i de matèria, i les dades de registre, per tal de generar notícies catalogràfiques completes.

Com a format, significa una interpretació dels codis introduïts en aplicació del CATMARC, i això provoca la necessitat de tractar aquestes dades amb extensions del llenguatge de formatació a través d'aplicacions *.PAS compilades amb ISISPAS. L'estructura genèrica d'aquests fitxers de formatació de camps ha estat explicada en l'apartat de la indexació.

Cal destacar, però, el tractament específic dels camps de notes. La problemàtica de les notes és la següent: l'existència d'un gran nombre de camps de notes exigeix, per poder-los tractar tots, un llarg fitxer de formatació; l'ordenació de les notes en la descripció bibliogràfica no es correspon amb la seva seqüència numèrica; i el gran nombre de camps fa difícil establir si s'ha d'incloure o no el signe «. - » per separar les notes, o el «.» final. L'aplicació notes tracta totes les notes seqüencialment segons l'ordre establert pel CATMARC i no segons la seqüència numèrica; d'aquesta manera, es resolen tots els problemes exposats més amunt amb la simple ordre: &notes('').

Aquest format complementa la visualització en els formats MARC a l'hora d'avaluar la qualitat de la catalogació o bé per depurar-la, perquè permet visualitzar ràpidament, a través de les puntuacions resultants, les opcions que han estat preses; per això es visualitza com una finestra independent. Aquesta opció també permet visualitzar simultàniament el registre en format MARC i en format ISBD per fer les comparacions que calgui. Com a format imprès és l'ideal per a catàlegs en fitxes manuals; per a bibliografies, caldria fer-ne algunes modificacions: eliminació del tracing, introducció de l'assentament amb el número de registre o bé amb l'element d'ordenació destacat si és per matèries, etc.

Quant al format, des del punt de vista de Winisis seria preferible que es formés a partir de 3 fitxers *.PFT. El primer identificaria el tipus d'encapçalament principal, per títol o no i, segons el cas, redirigiria cap a @fitxer_2.PFT o bé cap a @fitxer_3.PFT. Aquest format s'ha mantingut per adaptació directa del format original en ISIS per a MS-DOS.

Gràfic 6. Format de visualització ISBD


Consultes: la visualització dels resultats d'una cerca es tracta amb el fitxer BIBLO.EXP (que ha d'estar situat al mateix directori que el fitxer BIBLO.PAR). En aquest cas, el fitxer força a visualitzar el llistat d'encerts amb un format més informatiu que el format per defecte de Winisis: en lloc de mostrar el MFN (número de registre físic del fitxer de dades) i a continuació el primer camp de la taula de definició de camps (seria el número de registre del format MARC) i els primers caràcters del proper camp que estigui ple, el paràmetre 502 mostra l'any de publicació, seguit del títol propi, sense l'article inicial, si n'hi ha (com es pot veure a la part dreta del gràfic 7).

El paràmetre 500 selecciona el format BFIA1.PFT per a la visualització completa dels assentaments. Els formats anteriors es distorsionen quan es representen amb unes dimensions tan reduïdes com les de la finestra de visualització dels registres recuperats. El format preparat per superar aquest entrebanc és una simplificació del format ISBD: manté el cos de la descripció bibliogràfica fins a la zona de l'ISBN; s'omet, però, la traça. Es mantenen tres úniques seqüències: la del títol uniforme i l'autor principal, la de la descripció pròpiament dita, i la de les notes. Aquesta solució fa que el format es pugui adaptar fàcilment a qualsevol mida de finestra de visualització.

Gràfic 7. Format de visualització CONSULTES


Bibliografia: visualització preparada per a sortides impreses. És un format idèntic a l'anterior, de visualització de les consultes, però sense els vincles hipertextuals. Afegeix, però, els descriptors o encapçalaments de matèria.

Gràfic 8. Format de visualització BIBLIOGRAFIA


Format d'intercanvi de dades bibliogràfiques ISO 2709: format intern propi d'Isis i Winisis. Permet l'intercanvi de dades amb altres aplicacions que puguin gestionar el format estàndard d'intercanvi de dades bibliogràfiques ISO-2709.

004840000000001570004500001001100000008004000011021001800051080001400069100002
200083245006800105260002700173300001100200650003200211650003000243999005300273
#BGT9400024#950503s1988 sp W 00001 spa #10^a84-7676-089-2#00^a342.9(46)#10^aPuig
Brutau^hJosé#10^aCaducidad, prescripción extintiva y usucapión^dJosé Puig Brutau#
00^aBarcelona^bBosch^c1988#00^a222 p.#00^aPrescripció (Dret)^zEspanya#00^aCaducitat
(Dret)^zEspanya#^aAssessoria Jurídica^bAtelier^c1994-03-07^d2832 PTA##

Gràfic 9. Format d'intercanvi ISO 2709


Valoració

Winisis és un sistema gestor documental (SGD) que té algunes prestacions relacionals. La versió per a MS-DOS simulava aquestes prestacions a través del comandament REF(L(...)) havent dissenyat una base de dades amb un format de registre capaç de descriure diferents entitats. Per a cada tipus d'entitat s'utilitzen uns determinats camps entre tots els que hi ha disponibles, i la funció del llenguatge de formatació d'ISIS, REF(L(...)) establia un lligam entre els dos registres.

Actualment, Winisis permet relacionar diferents entitats utilitzant diversos fitxers de dades, i sobrepassa, per tant, les limitacions imposades per l'ús d'un únic fitxer integrat. Això enriqueix ISIS i l'acosta a prestacions pròpies dels sistemes relacionals. Aquest aspecte sembla realment prometedor per al disseny de noves aplicacions per al control d'autoritats, control de circulació de les publicacions, etc.

Sens dubte, però, la gran característica d'ISIS és l'adaptabilitat. Atesa la seva condició d'aplicació creada en un entorn multilingüe, ha desenvolupat un alt grau d'adaptabilitat a les necessitats locals, ja que:


Control de qualitat

Winisis presenta algunes disfuncions que es van descobrint a mesura que s'utilitza i que probablement no s'haurien produït si el productor del programari fos un fabricant privat amb ànim de lucre:

a) L'editor dels fitxers *.FST (per a ordenació dels ítems) no és fiable dins de l'ajuda per a la creació de bases de dades. Quan s'utilitza, si les línies del fitxer *.FST en edició són complexes, en perd la informació i les deixa amb només una part de la informació que contenien inicialment, o bé no grava les modificacions efectuades.

b) Per passar d'una base de dades a l'altre, en general no ofereix problemes a través de vincles hipertextuals. Però si es prem un d'aquests vincles hipertext havent maximitzat la visualització de la finestra actual en pantalla, el sistema dóna un senyal d'error, i el programa s'apaga.

c) En efectuar una cerca lliure (és a dir, llegint el fitxer lineal i no anant als índexs), el programa efectua una pausa i només continua el processament de l'ordre de cerca mentre el punter del ratolí es mou dins el quadre de diàleg de la pantalla. En aturar el ratolí, s'atura la cerca. Evidentment, quan es tracta d'una base de dades relativament important (s'ha provat la cerca amb la base de dades provisional de l'arxiu que havia importat 8.500 registres reals) el procediment de cerca és inviable. Per contra, la cerca en text lliure de la versió d'ISIS per a MS-DOS és molt ràpida.

d) La compatibilitat entre ISIS i Winisis no és completa. Els formats de visualització d'ISIS no sempre poden ser interpretats correctament per Winisis. L'estructura s(......) (0,10) dóna un bon resultat en ISIS, la qual cosa permet un sagnat de deu posicions a partir de la segona línia de text. Winisis, però, dóna un senyal d'error. Winisis necessita que s'apliqui la seva manera peculiar de sagnat: m(1000,-1000). Certament, la precisió i la permanència del sagnat en tot el format fins que es modifica són prestacions de Winisis superiors al sagnat d'Isis que s'havia d'anar indicant per a cada seqüència de caràcters. Però enlloc no s'explicita aquesta incompatibilitat.

e) Permet simular l'existència de diversos índexs parcials, que es poden visualitzar globalment en un índex únic (l'únic que existeix realment). El tractament de la visualització dels diferents índexs és correcta. En canvi, per seleccionar un determinat índex, no mostra els índexs definits a la taula de selecció de camps sinó que mostra una opció per a cada línia utilitzada al fitxer BIBLO.FST.

És probable que algun d'aquests aspectes sigui degut només a les particularitats de la configuració de l'equip on està instal·lat Winisis, i que es pugui resoldre sense dificultat. En qualsevol cas, la manca d'un sistema de suport als usuaris de l'aplicació converteix aquests inconvenients en veritables problemes causats per un control de qualitat deficient.


Llenguatge de formatació de dades

CDS/ISIS té en el seu potent llenguatge de formatació un dels punts més forts. La nova versió per a Windows potencia encara més les possibilitats d'aquest llenguatge. Els nous comandaments per a textos RTF (compatibles amb programaris àmpliament difosos, com ara el Word) o per efectuar connexions hipertextuals, i les possibilitats tradicionals d'ampliar les prestacions del llenguatge a través de la programació ISIS/PAS, van fent aquest llenguatge cada cop més complex. S'hi ha integrat una sèrie de funcions típiques de programació. Ara és possible, per exemple, numerar seqüencialment les ocurrències d'un camp repetible, o fins i tot numerar-les amb lletres.

La complexitat queda compensada a bastament per les prestacions, però, a més, amb un estudi superficial dels comandaments bàsics es poden aconseguir formats de sortida de dades prou interessants, a còpia de dedicar-hi un esforç moderat.

a) Les presentacions pròpies de Winisis amb diferents tipus de lletra, colors, i disposició de les dades, faciliten un entorn «amigable» per a l'usuari final. La manca d'aquest aspecte pot fer fracassar la implementació d'un determinat sistema informàtic!

b) Per a formats especialment complexos (per exemple, el tractament de subcamps repetibles en una mateixa ocurrència de camp) es pot acudir a la programació ISISPAS, i així es poden arribar a dissenyar formats de sortida molt complexos.


Possibilitat de consulta remota

Com a extensió de Winisis, Bireme (São Paulo) ha desenvolupat una interfície per a la difusió de les bases de dades de Winisis a través de pàgines Web, el WWWISIS.

Cal tenir en compte aquesta aplicació, tot i que es tracta d'una extensió independent del programari, atès que n'enriqueix enormement les possibilitats.

Fins i tot a petita escala (per exemple, per a catàlegs col·lectius d'entitats cíviques, d'estudiosos d'història local, etc.), és a través de la consulta remota que els catàlegs col·lectius i els OPAC prenen tota la seva significació.


Conclusions

Amb tot el que s'ha vist fins aquí, es pot confirmar que Winisis és plenament compatible amb els formats MARC, i que una biblioteca petita o mitjana pot utilitzar-lo per a la gestió del seu catàleg amb uns formats bibliogràfics internacionals.

Continuant la programació ISISPAS com ha estat aplicada aquí, i amb les noves possibilitats de treballar amb diverses bases de dades alhora, Winisis pot permetre implementar un control d'autoritats, i el control de la circulació dels exemplars, de manera que s'obtingui una aplicació de gestió integral de la col·lecció.

Aquí hem donat el primer pas demostrant la viabilitat de l'ús del MARC per a la catalogació i la recuperació de la informació. Les eines pròpies de Winisis fan la resta, ja que permeten la importació i l'exportació en format ISO-2709. Per tant, aquesta aplicació assoleix un dels objectius fonamentals d'un programa de gestió de biblioteques: la compatibilitat dels formats bibliogràfics per a la transferència de dades entre diversos centres documentals.


ANNEX: L'adaptació d'ISIS i Winisis al català

Durant el procés d'adaptació del programari al català s'han detectat dos problemes en el català, i la manera de corregir-les:

a) En crear el diccionari de termes, si el programa troba una ela geminada tracta els dos elements del mot separats pel punt volat com a dos termes diferents (per exemple, indexa col·legi com a dos termes: col i legi). Per neutralitzar aquest problema n'hi ha prou amb definir el punt volat (signe ASCII 250) com a signe alfabètic al fitxer ISISAC.TAB.

b) Per aconseguir que les lletres diacrítiques ç i Ç s'ordenin correctament dins la seva lletra sense signe diacrític, s'indica al fitxer ISISUC.TAB que per convertir-les a majúscules es transformin en una C. Aquest procés, però, no és convenient perquè pot comportar confusions entre termes diferents en haver convertit dues lletres diferents en una de sola. Per evitar-ho cal copiar la seqüència completa de 256 codis ASCII en el mateix fitxer ISISUC.TAB.

La primera seqüència transforma les minúscules, per tant indicarem que c ha de convertir-se a C, i que ç ha de convertir-se a Ç, per tal d'obtenir termes correctes.

La segona seqüència transforma els signes en elements d'ordenació, per tant, aquí indicarem que c, ç i Ç han de transformar-se en C, per tal d'obtenir una única seqüència ordenada correctament.

c) Un cop corregit el punt volat al fitxer ISISAC.TAB, els termes que continguin aquest signe poden quedar ordenats ben lluny de la posició que els pertoca atès que el punt volat és el signe ASCII 250, és a dir, un dels darrers de la seqüència d'ordenació. Per tant, a la segona seqüència de codis ASCII del fitxer ISISUC.TAB, que ha estat explicada al paràgraf anterior, caldrà indicar que a efectes de l'ordenació, el punt volat equival a la lletra l. Aquest sistema no garanteix la correcta ordenació de la ela geminada en el 100 % dels casos, però en els casos que el terme no quedi ben ordenat estarà situat molt a prop del lloc correcte.



Notes

1 Fitxer BIBLO.FDT:
001 Registre 10 X
008 Dades codificades 40 X
015 Número de bibliogr. nacional a 100 X
016 Inform. de control d'autorit. a 100 X
017 Missatge de correcció a 100 X
018 Missatge d'esmena a 100 X
020 Dipòsit legal abcde 100 X R
021 ISBN abcdz 100 X R
022 ISSN a 9 X
031 Informació codif. relleu a 100 X
032 Inform. codif. mesures geod. abcdefghijkl 100 X
034 Inf. codif. escala i coord. abcdefghjkmnpq 100 X R
036 Dates (mat. cartogràfics) ab 100 X R
037 Codis de descripció física a 100 A R
038 Inf. codificada fot. aèries a 100 X
041 Llengües abc 100 X
043 Codi àrea geogràfica a 100 X R
044 País del productor a 100 X
046 Codis d'informació música abcd 100 X
047 Forma de composició 100 X
048 Nombre instruments o veus 100 X
080 CDU a 100 X R
100 Enc. principal nom personal acdefhklqr 100 X
110 Enc. principal nom corporat. aceijkpq 100 X
111 Enc. princ. congrés, reunió aceijk 100 X
222 Títol clau ab 100 X
240 Tít. uniforme (no tít. col) adefghjkopqrsz 100 X
243 Tít. col·lectiu akoqrsz 100 X
245 Zona títol i mencions resp. abdefijklz 100 X
248 Idem publicacions en parts befghijk 100 X R
250 Zona de l'edició acdek 100 X R
254 Zona específica mús. impresa ak 100 X
255 Zona de la numer. (sèries) a 100 X
256 Zona dades matemàtiques abcde 100 X
260 Zona de la publicació, etc. abcdefghijkl 100 X R
300 Zona descripció física fngahbijckplm 100 X R
440 Zona de la col·lecció forma abeklvw 100 X R
490 Zona col·lecció sense forma abeklvw 100 X R
500 Nota naturalesa, abast, etc. a 100 X R
501 Nota «amb» a 100 X R
502 Nota de tesi a 100 X R
503 Nota història publicació a 100 X R
504 Nota de bibliografia i índex a 100 X R
505 Nota de contingut a 100 X R
508 Nota mencions de responsab. a 100 X R
513 Nota de resum a 100 X R
514 Nota al títol o inf. comp. a 100 X R
515 Nota a la numeració (sèries) a 100 X R
516 Nota a les dades matemàt. a 100 X R
518 Nota de canvi de núm. control a 100 X R
521 Nota de públic va destinat a 100 X R
525 Nota de mat. d'acomp. i supl. a 100 X R
528 Nota a la publicació, distr. a 100 X R
530 Nota d'altres versions disp. a 100 X R
531 Nota a la descripció física a 100 X R
532 Nota a la col·lecció a 100 X R
534 Nota a referències bibliog. a 100 X R
536 Nota rel. orig. (microformes) a 100 X R
537 Nota de programa (fitx. ord) a 100 X R
538 Nota núm. que figura al doc. ab 100 X R
542 Nota forma d'ús (fitx. ord.) a 100 X R
546 Nota de llengua, trad., ad. a 100 X R
554 Nota de periodic. (sèries) a 100 X R
555 Nota d'índexs (sèries) a 100 X R
556 Nota núm. descrit (sèr.) a 100 X R
557 Nota d'índex gràfic i full a 100 X R
600 Enc. matèries nom personal acdefhklmnoqrtuxyz 100 X R
610 Enc. matèries nom corporat. aceijkpqtuxyz 100 X R
611 Enc. matèries nom congrés aceijktuxyz 100 X R
640 Enc. matèries tít. uniforme adefghkopqrsxyz 100 X R
645 Enc. matèries de títol axyz 100 X R
650 Enc. Matèries axyz 100 X R
651 Enc. matèries nom geogràfic axyz 100 X R
700 Enc. secund. nom personal acdefhklmnoqrtuwyz 100 X R
710 Enc. secund. nom corporatiu aceijkpqtuwyz 100 X R
711 Enc. sec. nom congrés, etc. aceijktuwz 100 X R
740 Enc. secund. títol uniforme adefghjkopqrswz 100 X R
745 Enc. secund de títol awza 100 X R
773 Document font abcdgstwxz 100 X R
790 Nota de nom real a 100 X R
800 Enc. sec. col. nom pers. acdefhklqrtuvwz 100 X R
810 Enc. sec. col. nom corp. aceijkpqtuvwz 100 X R
811 Enc. sec. col. nom cong. aceijktuvwz 100 X R
840 Enc. sec. col. Títol col. alvwz 100 X R
900 Referència de nom personal acdefhklqruxz 100 X R
910 Refer. de nom corporatiu acdghijkpquxz 100 X R
911 Refer. de nom congrés, etc. aceijkuxz 100 X R
945 Refer. de títol d'una obra adefghjkopqrsxz 100 X R
999 Dades de registre abcdl 100 X R

2 Programa ISBN.PAS:

PROGRAM visbn(s1:string;lw,occ:real;s2:string) [FORMAT];
VAR i,x,k: real;
v: string;

FUNCTION strtran (s1,s2,s3: string;z:real): string;
var k,i: real;

BEGIN
k:=position(s1,s2,1);
i:=size(s2);
while k>0 do begin
    s1:=substr(s1,1,k-1)|s3|substr(s1,k+i,size(s1));
    IF z=0 THEN k:=0 ELSE k:=position(s1,s2,1);
end;
strtran:=s1;
END;

BEGIN
UC(s1);
s1:=STRTRAN(s1,'-','',1);
s2:='';
IF size(s1) > 10 THEN s2:='ISBN erroni: massa caràcters';
IF size(s1) < 10 THEN s2:='ISBN erroni: manquen caràcters';
IF s2='' THEN BEGIN
    k:=0;
    FOR x:=1 TO 9 DO k:=k+(VAL(SUBSTR(s1,x,1))*x);
    i:=k-(11*VAL(encint(k/11,0)));
    v:=encint(i,0);
    IF v='10' THEN v:='X';
    IF SUBSTR(s1,10,1)<>v THEN s2:='ISBN erroni!: '|v;
END;
IF size(s1)=0 THEN s2:='';
END.

3 Fitxer BIBLO.FST:

100 1 &nom('100')/, (&nom('700')/), &nom('110')/, (&nom('710')/), &nom('111')/, (&nom('711')/)
650 1 (&nom('600')/), (&nom('610')/), (&nom('611')/), (&nom('645')/), (&nom('650')/),
245 1 mhl &titol('240')/,&titol('243')/
245 1 MHL (v245^i/,v245^j/,v245^k/,v245^b/,v245^l/)
245 1 MHL &buides(v245*1.1,v245^a)
21 5 mpl '/ISBN /'(v21^a/, v21^z/)
4 Funció STRTRAN:
FUNCTION strtran (s1, s2, s3: string; z:real): string;
var k,i: real;

BEGIN
    k:=position(s1,s2,1);
    i:=size(s2);
    while k>0 do begin
        s1:=substr(s1,1,k-1)|s3|substr(s1,k+i,size(s1));
        IF z=0 THEN k:=0 ELSE k:=position(s1,s2,1);
    end;
    strtran:=s1;
END;
5 Programa: BUIDES.PAS
PROGRAM buides(y:string;lw,occ:real;s1:string) [FORMAT];
var i:real;
    w:string;
    v:string;

BEGIN
    w:=field(fieldn(245,1));
    i:=val(substr(w,2,1));
    IF i>0 THEN v:=', '|substr(y,1,i) ELSE v:='';
    s1:=substr(y,i+1,size(y)-(i-1))|v;
END.

6 Fitxer BIBLO.PFT
fonts((modern,Courier New),(roman,Times New Roman),(swiss,Arial)),
cols((0,0,0)),
{cl10,f2,box(1), tab(100) mhl {cl8,fs28,b ,qc 'ARXIU CENTRAL ADMINISTRATIU DE L'ORGT'}/f2, cl4, m(3900,-3900),
cl4,fs30,#
f2,cl4,m(1600,-1600),
'\isisbgbmp libros '##
tab(4000), link(('Consulta del catàleg de la Biblioteca'),'FORMAT OPAC ')###
tab(4000), link(('Arxiu Central Administratiu'),'BROWSE arxiu, 3 ')###
tab(4000), link(('Tria i avaluació documental'),'BROWSE tria ')###
7 Fitxer OPAC.PFT
fonts((modern,Courier New),(roman,Times New Roman),(swiss,Arial)),
cols((0,0,0)), fs16,
link(('Accés al menú de l'Arxiu'),'BROWSE biblo, 3,biblo '),
tab(7000) link(('Darrer registre vist...'), 'GOBACK ')/,
{cl10,f2,box(1), qc, mhl {cl8,fs28,b,
link((v245^a), 'PROMPT LAGOTO $$/(9) ')}/
f2, cl4,fs20,f2,m(1600,-1600),#
qj, if p(v100) then {b, cl1 'AUTOR: '} tab(1600) &nom('100')/ fi,
s1:=(""),
if p(v110) then
    if v110.1 = '0' then {b, cl1 'AUTOR: '}tab(1600) &nom('110')/ else s1:=(&nom('110'),'. ') fi,
fi,
if p(v111) then {b, cl1 'AUTOR: '} tab(1600) &nom('111')/ fi,
(if p(v700[occ]) then {b cl1 'AUTOR: '}, tab(1600) &nom('700')/ fi),
(if p(v710[occ]) then {b cl1 'AUTOR: '},tab(1600) &nom('710')/ fi),
(if p(v711[occ]) then {b cl1 'AUTOR: '},tab(1600) &nom('711')/ fi),
if p(v240) then {b, cl1 'TÖTOL UNIF.: '} tab(1600) s1, &titol('240')/ fi,
{b, cl1 'TÍTOL: '} tab(1600) &titol('245')/%,
(| VOLUM | d248, v248*0.1, |: |d248, &titol('248')/),
(if p(v250[occ]) then {b cl1 'EDICIÓ: '}, tab(1600) ss(5,0, &edicio('250'))/ fi),
(if p(v260[occ]) then {b cl1 'PUBLICACIÓ: '}, tab(1600) ss(5,0,&peu(''))/ fi),
(if p(v21[occ]) then {b cl1 'ISBN: '}, tab(1600) v21^a/ fi),
if p(v773[occ]) then {b, cl1 'EN: '} tab(1600)v773*4/ fi,
(if p(v745[occ]) then {b cl1 'TOTAL SEC.: '}, v745^a/ fi),
if s(v600, v610, v611,v645, v650)<>'' then {b cl1 'MATÈRIA:'} fi,
e1:=0,
(if p(v600) then tab(1600) if p(v600) then f(e1+occ,1,0) fi, |. |v600^a/fi), e1:=e1+nocc(v600),
(if p(v610) then tab(1600) if p(v610) then f(e1+occ,1,0) fi, |. |v610^a/fi), e1:=e1+nocc(v610),
(if p(v611) then tab(1600) if p(v611) then f(e1+occ,1,0) fi, |. |v611^a/fi), e1:=e1+nocc(v611),
(if p(v645) then tab(1600) if p(v645) then f(e1+occ,1,0) fi, |. |v645^a/fi), e1:=e1+nocc(v645),
(if p(v650) then tab(1600) if p(v650) then f(e1+occ,1,0) fi, |. |v650^a/fi),
(if p(v80[occ]) then {b cl1 'CDU: '}, tab(1600) v80^a/ fi),
(if p(v1[occ]) then {b cl1 'REGISTRE: '}, tab(1600) v1,
    {b cl1 tab(2000) 'LOCALITZACIÓ: '} v999^a/ fi),
link(('ISBD'),'TEXTBOX[1]RCHILDLOAD ISBD'),
tab(4000), link(('MARC'),'FORMAT MARC'),
tab(8000), link(('ISIS'),'FORMAT ISIS'),/
8 Fitxer ISIS.PDF
fonts((modern,Courier New), (roman,Times New Roman), (swiss,Arial)), cols((0,0,0)),
{'\title Format de visualització: CDS/ISIS'}, fs16,
link(('Accés al menú de l'Arxiu Central'),'BROWSE biblo, 1,biblo '),
tab(7000) link(('Darrer registre vist...'), 'GOBACK ')/,
{cl10,box(1), mpl {cl8,fs18, 'TAG ID Contingut del camp', TAB(6400) 'CDS/ISIS'}
/f2, fs25, cl4, m(700,-700)
(if p(v1) then {cl1 '001.__' }v1/fi)
(if p(v8) then {cl1 '008.__' }v8/fi)
(if p(v15) then {cl1 '015.' }v15/fi)
(if p(v16) then {cl1 '016.' }v16/fi)
(if p(v17) then {cl1 '017.' }v17/fi)
(if p(v18) then {cl1 '018.' }v18/fi)
(if p(v20) then {cl1 '020.' }v20/fi)
(if p(v21) then {cl1 '021.' }v21/fi)
(if p(v22) then {cl1 '022.' }v22/fi)
(if p(v31) then {cl1 '031.' }v31/fi)
(if p(v32) then {cl1 '032.' }v32/fi)
(if p(v34) then {cl1 '034.' }v34/fi)
(if p(v36) then {cl1 '036.' }v36/fi)
(if p(v37) then {cl1 '037.' }v37/fi)
(if p(v38) then {cl1 '038.' }v38/fi)
(if p(v41) then {cl1 '041.' }v41/fi)
(if p(v43) then {cl1 '043.' }v43/fi)
(if p(v44) then {cl1 '044.' }v44/fi)
(if p(v46) then {cl1 '046.' }v46/fi)
(if p(v47) then {cl1 '047.' }v47/fi)
(if p(v48) then {cl1 '048.' }v48/fi)
(if p(v80) then {cl1 '080.' }v80/fi)
(if p(v100) then {cl1 '100.' }v100/fi)
(if p(v110) then {cl1 '110.' }v110/fi)
(if p(v111) then {cl1 '111.' }v111/fi)
(if p(v222) then {cl1 '222.' }v222/fi)
(if p(v240) then {cl1 '240.' }v240/fi)
(if p(v243) then {cl1 '243.' }v243/fi)
(if p(v245) then {cl1 '245.' }v245/fi)
(if p(v248) then {cl1 '248.' }v248/fi)
(if p(v250) then {cl1 '250.' }v250/fi)
(if p(v254) then {cl1 '254.' }v254/fi)
(if p(v255) then {cl1 '255.' }v255/fi)
(if p(v256) then {cl1 '256.' }v256/fi)
(if p(v260) then {cl1 '260.' }v260/fi)
(if p(v300) then {cl1 '300.' }v300/fi)
(if p(v440) then {cl1 '440.' }v440/fi)
(if p(v490) then {cl1 '490.' }v490/fi)
(if p(v500) then {cl1 '500.' }v500/fi)
(if p(v501) then {cl1 '501.' }v501/fi)
(if p(v502) then {cl1 '502.' }v502/fi)
(if p(v503) then {cl1 '503.' }v503/fi)
(if p(v504) then {cl1 '504.' }v504/fi)
(if p(v505) then {cl1 '505.' }v505/fi)
(if p(v508) then {cl1 '508.' }v508/fi)
(if p(v513) then {cl1 '513.' }v513/fi)
(if p(v514) then {cl1 '514.' }v514/fi)
(if p(v515) then {cl1 '515.' }v515/fi)
(if p(v516) then {cl1 '516.' }v516/fi)
(if p(v518) then {cl1 '518.' }v518/fi)
(if p(v521) then {cl1 '521.' }v521/fi)
(if p(v525) then {cl1 '525.' }v525/fi)
(if p(v528) then {cl1 '528.' }v528/fi)
(if p(v530) then {cl1 '530.' }v530/fi)
(if p(v531) then {cl1 '531.' }v531/fi)
(if p(v532) then {cl1 '532.' }v532/fi)
(if p(v534) then {cl1 '534.' }v534/fi)
(if p(v536) then {cl1 '536.' }v536/fi)
(if p(v537) then {cl1 '537.' }v537/fi)
(if p(v538) then {cl1 '538.' }v538/fi)
(if p(v542) then {cl1 '542.' }v542/fi)
(if p(v546) then {cl1 '546.' }v546/fi)
(if p(v554) then {cl1 '554.' }v554/fi)
(if p(v555) then {cl1 '555.' }v555/fi)
(if p(v556) then {cl1 '556.' }v556/fi)
(if p(v557) then {cl1 '557.' }v557/fi)
(if p(v600) then {cl1 '600.' }v600/fi)
(if p(v610) then {cl1 '610.' }v610/fi)
(if p(v611) then {cl1 '611.' }v611/fi)
(if p(v640) then {cl1 '640.' }v640/fi)
(if p(v645) then {cl1 '645.' }v645/fi)
(if p(v650) then {cl1 '650.' }v650/fi)
(if p(v651) then {cl1 '651.' }v651/fi)
(if p(v700) then {cl1 '700.' }v700/fi)
(if p(v710) then {cl1 '710.' }v710/fi)
(if p(v711) then {cl1 '711.' }v711/fi)
(if p(v740) then {cl1 '740.' }v740/fi)
(if p(v745) then {cl1 '745.' }v745/fi)
(if p(v773) then {cl1 '773.' }v773/fi)
(if p(v790) then {cl1 '790.' }v790/fi)
(if p(v800) then {cl1 '800.' }v800/fi)
(if p(v810) then {cl1 '810.' }v810/fi)
(if p(v811) then {cl1 '811.' }v811/fi)
(if p(v840) then {cl1 '840.' }v840/fi)
(if p(v900) then {cl1 '900.' }v900/fi)
(if p(v910) then {cl1 '910.' }v910/fi)
(if p(v911) then {cl1 '911.' }v911/fi)
(if p(v945) then {cl1 '945.' }v945/fi)
(if p(v998) then {cl1 '998.' }v998/fi)
(if p(v999) then {cl1 '999.' }v999/fi),
link(('ISBD'),'TEXTBOX[1]RCHIELDLOAD ISBD'),
tab(3000), link(('OPAC'),'FORMAT OPAC')
tab(6800), link(('MARC'),'FORMAT MARC'),
9 Fitxer MARC.PFT:
fonts((modern,Courier New), (roman,Times New Roman), (swiss,Arial)), cols((0,0,0)),
{'\title Format de visualització: CATMARC'},fs18,
link(('Accés al menú de l'Arxiu Central'),'BROWSE biblo, 1,biblo '),
tab(7000) link(('Darrer registre vist...'), 'GOBACK ')/,
{cl10,box(1), mpl {cl8,fs18, 'ETQ ID Contingut del camp', TAB(6400) 'CATMARC'}
/f2, cl4, fs25, m(800,-800),
(if p(v1) then {cl1 '001.__.'}v1, '#'/fi),
(if p(v8) then {cl1 '008.__.'}v8, '#'/fi),
(if p(v15) then {cl1 '015.'}&dollar(v15)/fi),
(if p(v16) then {cl1 '016.'}&dollar(v16)/fi),
(if p(v17) then {cl1 '017.'}&dollar(v17)/fi),
(if p(v18) then {cl1 '018.'}&dollar(v18)/fi),
(if p(v20) then {cl1 '020.'}&dollar(v20)/fi),
(if p(v21) then {cl1 '021.'}&dollar(v21)/fi),
(if p(v22) then {cl1 '022.'}&dollar(v22)/fi),
(if p(v31) then {cl1 '031.'}&dollar(v31)/fi),
(if p(v32) then {cl1 '032.'}&dollar(v32)/fi),
(if p(v34) then {cl1 '034.'}&dollar(v34)/fi),
(if p(v36) then {cl1 '036.'}&dollar(v36)/fi),
(if p(v37) then {cl1 '037.'}&dollar(v37)/fi),
(if p(v38) then {cl1 '038.'}&dollar(v38)/fi),
(if p(v41) then {cl1 '041.'}&dollar(v41)/fi),
(if p(v43) then {cl1 '043.'}&dollar(v43)/fi),
(if p(v44) then {cl1 '044.'}&dollar(v44)/fi),
(if p(v46) then {cl1 '046.'}&dollar(v46)/fi),
(if p(v47) then {cl1 '047.'}&dollar(v47)/fi),
(if p(v48) then {cl1 '048.'}&dollar(v48)/fi),
(if p(v80) then {cl1 '080.'}&dollar(v80)/fi),
(if p(v100) then {cl1 '100.'}&dollar(v100)/fi),
(if p(v110) then {cl1 '110.'}&dollar(v110)/fi),
(if p(v111) then {cl1 '111.'}&dollar(v111)/fi),
(if p(v222) then {cl1 '222.'}&dollar(v222)/fi),
(if p(v240) then {cl1 '240.'}&dollar(v240)/fi),
(if p(v243) then {cl1 '243.'}&dollar(v243)/fi),
(if p(v245) then {cl1 '245.'}&dollar(v245)/fi),
(if p(v248) then {cl1 '248.'}&dollar(v248)/fi),
(if p(v250) then {cl1 '250.'}&dollar(v250)/fi),
(if p(v254) then {cl1 '254.'}&dollar(v254)/fi),
(if p(v255) then {cl1 '255.'}&dollar(v255)/fi),
(if p(v256) then {cl1 '256.'}&dollar(v256)/fi),
(if p(v260) then {cl1 '260.'}&dollar(v260)/fi),
(if p(v300) then {cl1 '300.'}&dollar(v300)/fi),
(if p(v440) then {cl1 '440.'}&dollar(v440)/fi),
(if p(v490) then {cl1 '490.'}&dollar(v490)/fi),
(if p(v500) then {cl1 '500.'}&dollar(v500)/fi),
(if p(v501) then {cl1 '501.'}&dollar(v501)/fi),
(if p(v502) then {cl1 '502.'}&dollar(v502)/fi),
(if p(v503) then {cl1 '503.'}&dollar(v503)/fi),
(if p(v504) then {cl1 '504.'}&dollar(v504)/fi),
(if p(v505) then {cl1 '505.'}&dollar(v505)/fi),
(if p(v508) then {cl1 '508.'}&dollar(v508)/fi),
(if p(v513) then {cl1 '513.'}&dollar(v513)/fi),
(if p(v514) then {cl1 '514.'}&dollar(v514)/fi),
(if p(v515) then {cl1 '515.'}&dollar(v515)/fi),
(if p(v516) then {cl1 '516.'}&dollar(v516)/fi),
(if p(v518) then {cl1 '518.'}&dollar(v518)/fi),
(if p(v521) then {cl1 '521.'}&dollar(v521)/fi),
(if p(v525) then {cl1 '525.'}&dollar(v525)/fi),
(if p(v528) then {cl1 '528.'}&dollar(v528)/fi),
(if p(v530) then {cl1 '530.'}&dollar(v530)/fi),
(if p(v531) then {cl1 '531.'}&dollar(v531)/fi),
(if p(v532) then {cl1 '532.'}&dollar(v532)/fi),
(if p(v534) then {cl1 '534.'}&dollar(v534)/fi),
(if p(v536) then {cl1 '536.'}&dollar(v536)/fi),
(if p(v537) then {cl1 '537.'}&dollar(v537)/fi),
(if p(v538) then {cl1 '538.'}&dollar(v538)/fi),
(if p(v542) then {cl1 '542.'}&dollar(v542)/fi),
(if p(v546) then {cl1 '546.'}&dollar(v546)/fi),
(if p(v554) then {cl1 '554.'}&dollar(v554)/fi),
(if p(v555) then {cl1 '555.'}&dollar(v555)/fi),
(if p(v556) then {cl1 '556.'}&dollar(v556)/fi),
(if p(v557) then {cl1 '557.'}&dollar(v557)/fi),
(if p(v600) then {cl1 '600.'}&dollar(v600)/fi),
(if p(v610) then {cl1 '610.'}&dollar(v610)/fi),
(if p(v611) then {cl1 '611.'}&dollar(v611)/fi),
(if p(v640) then {cl1 '640.'}&dollar(v640)/fi),
(if p(v645) then {cl1 '645.'}&dollar(v645)/fi),
(if p(v650) then {cl1 '650.'}&dollar(v650)/fi),
(if p(v651) then {cl1 '651.'}&dollar(v651)/fi),
(if p(v700) then {cl1 '700.'}&dollar(v700)/fi),
(if p(v710) then {cl1 '710.'}&dollar(v710)/fi),
(if p(v711) then {cl1 '711.'}&dollar(v711)/fi),
(if p(v740) then {cl1 '740.'}&dollar(v740)/fi),
(if p(v745) then {cl1 '745.'}&dollar(v745)/fi),
(if p(v773) then {cl1 '773.'}&dollar(v773)/fi),
(if p(v790) then {cl1 '790.'}&dollar(v790)/fi),
(if p(v800) then {cl1 '800.'}&dollar(v800)/fi),
(if p(v810) then {cl1 '810.'}&dollar(v810)/fi),
(if p(v811) then {cl1 '811.'}&dollar(v811)/fi),
(if p(v840) then {cl1 '840.'}&dollar(v840)/fi),
(if p(v900) then {cl1 '900.'}&dollar(v900)/fi),
(if p(v910) then {cl1 '910.'}&dollar(v910)/fi),
(if p(v911) then {cl1 '911.'}&dollar(v911)/fi),
(if p(v945) then {cl1 '945.'}&dollar(v945)/fi),
cl9 (if p(v999) then {cl1 '999.__.'}&dollar(v999)/fi)/,
link(('ISBD'),'FORMAT ISBD'),
tab(2000), link(('ISIS'),'FORMAT ISIS'),
tab(4000), link(('OPAC'),'FORMAT OPAC')
tab(6000), link(('MARC AMPLIAT'),'FORMAT MARCA')
10 Fitxer DOLLAR.PAS:
PROGRAM dollar(s1:string;lw,occ:real;s2:string)[Format];
var w,x:real;
v:string;

FUNCTION STRTRAN(s1,s2,s3:string;z:real):string;
var k,i:real;

BEGIN
    k:=position(s1,s2,1);
    i:=size(s2);
    while k>0 do begin
        s1:=substr(s1,1,k-1)|s3|substr(s1,k+i,size(s1));
        if z=0 then k:=0 else k:=position(s1,s2,1);
    end;
    strtran:=s1;
END;

BEGIN
    s2:=SUBSTR(s1,1,2)|'1'|SUBSTR(s1,3,size(s1)-2);
    s2:=STRTRAN(s2,'<','',0);
    s2:=STRTRAN(s2,'>','',0);
    s2:=STRTRAN(s2,'^','$',1)|'#';
END.

11 Fitxer MARCA.PFT:
fonts((modern,Courier New), (roman,Times New Roman), (swiss,Arial)), cols((0,0,0)),
{'\title Format de visualització: CATMARC'}
qc, link(('MARC'),'FORMAT marc')}
{cl10,box(1), mpl {cl8,fs16, 'ETQ ID Contingut del camp', TAB(6400) 'CATMARC'}
/f2, cl4, fs20, m(800,-800),
s1:=(''),
if p(v1) THEN (if p(v1) then {cl1 '001.__'}v1, '#'/fi) ELSE {cl1 '001', s1}/ FI,
if p(v8) THEN (if p(v8) then {cl1 '008.__'}v8, '#'/fi) ELSE {cl1 '008', s1}/ FI,
if p(v15) THEN (if p(v15) then {cl1 '015'} &dollar(v15)/fi) ELSE {cl1 '015', s1}/ FI,
if p(v16) THEN (if p(v16) then {cl1 '016'} &dollar(v16)/fi) ELSE {cl1 '016',s1}/ FI,
if p(v17) THEN (if p(v17) then {cl1 '017'} &dollar(v17)/fi) ELSE {cl1 '017',s1}/ FI,
if p(v18) THEN (if p(v18) then {cl1 '018'} &dollar(v18)/fi) ELSE {cl1 '018',s1}/ FI,
if p(v20) THEN (if p(v20) then {cl1 '020'} &dollar(v20)/fi) ELSE {cl1 '020', s1}/ FI,
if p(v21) THEN (if p(v21) then {cl1 '021'} &dollar(v21)/fi) ELSE {cl1 '021', s1}/ FI,
if p(v22) THEN (if p(v22) then {cl1 '022'} &dollar(v22)/fi) ELSE {cl1 '022', s1}/ FI,
if p(v31) THEN (if p(v31) then {cl1 '031'} &dollar(v31)/fi) ELSE {cl1 '031', s1}/ FI,
if p(v32) THEN (if p(v32) then {cl1 '032'} &dollar(v32)/fi) ELSE {cl1 '032', s1}/ FI,
if p(v34) THEN (if p(v34) then {cl1 '034'} &dollar(v34)/fi) ELSE {cl1 '034', s1}/ FI,
if p(v36) THEN (if p(v36) then {cl1 '036'} &dollar(v36)/fi) ELSE {cl1 '036', s1}/ FI,
if p(v37) THEN (if p(v37) then {cl1 '037'} &dollar(v37)/fi) ELSE {cl1 '037', s1}/ FI,
if p(v38) THEN (if p(v38) then {cl1 '038'} &dollar(v38)/fi) ELSE {cl1 '038', s1}/ FI,
if p(v41) THEN (if p(v41) then {cl1 '041'} &dollar(v41)/fi) ELSE {cl1 '041', s1}/ FI,
if p(v43) THEN (if p(v43) then {cl1 '043'} &dollar(v43)/fi) ELSE {cl1 '043', s1}/ FI,
if p(v44) THEN (if p(v44) then {cl1 '044'} &dollar(v44)/fi) ELSE {cl1 '044', s1}/ FI,
if p(v46) THEN (if p(v46) then {cl1 '046'} &dollar(v46)/fi) ELSE {cl1 '046', s1}/ FI,
if p(v47) THEN (if p(v47) then {cl1 '047'} &dollar(v47)/fi) ELSE {cl1 '047', s1}/ FI,
if p(v48) THEN (if p(v48) then {cl1 '048'} &dollar(v48)/fi) ELSE {cl1 '048', s1}/ FI,
if p(v80) THEN (if p(v80) then {cl1 '080'} &dollar(v80)/fi) ELSE {cl1 '080', s1}/ FI,
if p(v100) THEN (if p(v100) then {cl1 '100'} &dollar(v100)/fi) ELSE {cl1 '100', s1}/ FI,
if p(v110) THEN (if p(v110) then {cl1 '110'} &dollar(v110)/fi) ELSE {cl1 '110', s1}/ FI,
if p(v111) THEN (if p(v111) then {cl1 '111'} &dollar(v111)/fi) ELSE {cl1 '111', s1}/ FI,
if p(v222) THEN (if p(v222) then {cl1 '222'} &dollar(v222)/fi) ELSE {cl1 '222', s1}/ FI,
if p(v240) THEN (if p(v240) then {cl1 '240'} &dollar(v240)/fi) ELSE {cl1 '240', s1}/ FI,
if p(v243) THEN (if p(v243) then {cl1 '243'} &dollar(v243)/fi) ELSE {cl1 '243', s1}/ FI,
if p(v245) THEN (if p(v245) then {cl1 '245'} &dollar(v245)/fi) ELSE {cl1 '245', s1}/ FI,
if p(v248) THEN (if p(v248) then {cl1 '248'} &dollar(v248)/fi) ELSE {cl1 '248', s1}/ FI,
if p(v250) THEN (if p(v250) then {cl1 '250'} &dollar(v250)/fi) ELSE {cl1 '250', s1}/ FI,
if p(v254) THEN (if p(v254) then {cl1 '254'} &dollar(v254)/fi) ELSE {cl1 '254', s1}/ FI,
if p(v255) THEN (if p(v255) then {cl1 '255'} &dollar(v255)/fi) ELSE {cl1 '255', s1}/ FI,
if p(v256) THEN (if p(v256) then {cl1 '256'} &dollar(v256)/fi) ELSE {cl1 '256', s1}/ FI,
if p(v260) THEN (if p(v260) then {cl1 '260'} &dollar(v260)/fi) ELSE {cl1 '260', s1}/ FI,
if p(v300) THEN (if p(v300) then {cl1 '300'} &dollar(v300)/fi) ELSE {cl1 '300', s1}/ FI,
if p(v440) THEN (if p(v440) then {cl1 '440'} &dollar(v440)/fi) ELSE {cl1 '440', s1}/ FI,
if p(v490) THEN (if p(v490) then {cl1 '490'} &dollar(v490)/fi) ELSE {cl1 '490', s1}/ FI,
if p(v500) THEN (if p(v500) then {cl1 '500'} &dollar(v500)/fi) ELSE {cl1 '500', s1}/ FI,
if p(v501) THEN (if p(v501) then {cl1 '501'} &dollar(v501)/fi) ELSE {cl1 '501', s1}/ FI,
if p(v502) THEN (if p(v502) then {cl1 '502'} &dollar(v502)/fi) ELSE {cl1 '502', s1}/ FI,
if p(v503) THEN (if p(v503) then {cl1 '503'} &dollar(v503)/fi) ELSE {cl1 '503', s1}/ FI,
if p(v504) THEN (if p(v504) then {cl1 '504'} &dollar(v504)/fi) ELSE {cl1 '504', s1}/ FI,
if p(v505) THEN (if p(v505) then {cl1 '505'} &dollar(v505)/fi) ELSE {cl1 '505', s1}/ FI,
if p(v508) THEN (if p(v508) then {cl1 '508'} &dollar(v508)/fi) ELSE {cl1 '508', s1}/ FI,
if p(v513) THEN (if p(v513) then {cl1 '513'} &dollar(v513)/fi) ELSE {cl1 '513', s1}/ FI,
if p(v514) THEN (if p(v514) then {cl1 '514'} &dollar(v514)/fi) ELSE {cl1 '514', s1}/ FI,
if p(v515) THEN (if p(v515) then {cl1 '515'} &dollar(v515)/fi) ELSE {cl1 '515', s1}/ FI,
if p(v516) THEN (if p(v516) then {cl1 '516'} &dollar(v516)/fi) ELSE {cl1 '516', s1}/ FI,
if p(v518) THEN (if p(v518) then {cl1 '518'} &dollar(v518)/fi) ELSE {cl1 '518', s1}/ FI,
if p(v521) THEN (if p(v521) then {cl1 '521'} &dollar(v521)/fi) ELSE {cl1 '521', s1}/ FI,
if p(v525) THEN (if p(v525) then {cl1 '525'} &dollar(v525)/fi) ELSE {cl1 '525', s1}/ FI,
if p(v528) THEN (if p(v528) then {cl1 '528'} &dollar(v528)/fi) ELSE {cl1 '528', s1}/ FI,
if p(v530) THEN (if p(v530) then {cl1 '530'} &dollar(v530)/fi) ELSE {cl1 '530', s1}/ FI,
if p(v531) THEN (if p(v531) then {cl1 '531'} &dollar(v531)/fi) ELSE {cl1 '531', s1}/ FI,
if p(v532) THEN (if p(v532) then {cl1 '532'} &dollar(v532)/fi) ELSE {cl1 '532', s1}/ FI,
if p(v534) THEN (if p(v534) then {cl1 '534'} &dollar(v534)/fi) ELSE {cl1 '534', s1}/ FI,
if p(v536) THEN (if p(v536) then {cl1 '536'} &dollar(v536)/fi) ELSE {cl1 '536', s1}/ FI,
if p(v537) THEN (if p(v537) then {cl1 '537'} &dollar(v537)/fi) ELSE {cl1 '537', s1}/ FI,
if p(v538) THEN (if p(v538) then {cl1 '538'} &dollar(v538)/fi) ELSE {cl1 '538', s1}/ FI,
if p(v542) THEN (if p(v542) then {cl1 '542'} &dollar(v542)/fi) ELSE {cl1 '542', s1}/ FI,
if p(v546) THEN (if p(v546) then {cl1 '546'} &dollar(v546)/fi) ELSE {cl1 '546', s1}/ FI,
if p(v554) THEN (if p(v554) then {cl1 '554'} &dollar(v554)/fi) ELSE {cl1 '554', s1}/ FI,
if p(v555) THEN (if p(v555) then {cl1 '555'} &dollar(v555)/fi) ELSE {cl1 '555', s1}/ FI,
if p(v556) THEN (if p(v556) then {cl1 '556'} &dollar(v556)/fi) ELSE {cl1 '556', s1}/ FI,
if p(v557) THEN (if p(v557) then {cl1 '557'} &dollar(v557)/fi) ELSE {cl1 '557', s1}/ FI,
if p(v600) THEN (if p(v600) then {cl1 '600'} &dollar(v600)/fi) ELSE {cl1 '600', s1}/ FI,
if p(v610) THEN (if p(v610) then {cl1 '610'} &dollar(v610)/fi) ELSE {cl1 '610', s1}/ FI,
if p(v611) THEN (if p(v611) then {cl1 '611'} &dollar(v611)/fi) ELSE {cl1 '611', s1}/ FI,
if p(v640) THEN (if p(v640) then {cl1 '640'} &dollar(v640)/fi) ELSE {cl1 '640', s1}/ FI,
if p(v645) THEN (if p(v645) then {cl1 '645'} &dollar(v645)/fi) ELSE {cl1 '645', s1}/ FI,
if p(v650) THEN (if p(v650) then {cl1 '650'} &dollar(v650)/fi) ELSE {cl1 '650', s1}/ FI,
if p(v651) THEN (if p(v651) then {cl1 '651'} &dollar(v651)/fi) ELSE {cl1 '651', s1}/ FI,
if p(v700) THEN (if p(v700) then {cl1 '700'} &dollar(v700)/fi) ELSE {cl1 '700', s1}/ FI,
if p(v710) THEN (if p(v710) then {cl1 '710'} &dollar(v710)/fi) ELSE {cl1 '710', s1}/ FI,
if p(v711) THEN (if p(v711) then {cl1 '711'} &dollar(v711)/fi) ELSE {cl1 '711', s1}/ FI,
if p(v740) THEN (if p(v740) then {cl1 '740'} &dollar(v740)/fi) ELSE {cl1 '740', s1}/ FI,
if p(v745) THEN (if p(v745) then {cl1 '745'} &dollar(v745)/fi) ELSE {cl1 '745', s1}/ FI,
if p(v773) THEN (if p(v773) then {cl1 '773'} &dollar(v773)/fi) ELSE {cl1 '773', s1}/ FI,
if p(v790) THEN (if p(v790) then {cl1 '790'} &dollar(v790)/fi) ELSE {cl1 '790', s1}/ FI,
if p(v800) THEN (if p(v800) then {cl1 '800'} &dollar(v800)/fi) ELSE {cl1 '800', s1}/ FI,
if p(v810) THEN (if p(v810) then {cl1 '810'} &dollar(v810)/fi) ELSE {cl1 '810', s1}/ FI,
if p(v811) THEN (if p(v811) then {cl1 '811'} &dollar(v811)/fi) ELSE {cl1 '811', s1}/ FI,
if p(v840) THEN (if p(v840) then {cl1 '840'} &dollar(v840)/fi) ELSE {cl1 '840', s1}/ FI,
if p(v900) THEN (if p(v900) then {cl1 '900'} &dollar(v900)/fi) ELSE {cl1 '900', s1}/ FI,
if p(v910) THEN (if p(v910) then {cl1 '910'} &dollar(v910)/fi) ELSE {cl1 '910', s1}/ FI,
if p(v911) THEN (if p(v911) then {cl1 '911'} &dollar(v911)/fi) ELSE {cl1 '911', s1}/ FI,
if p(v945) THEN (if p(v945) then {cl1 '945'} &dollar(v945)/fi) ELSE {cl1 '945', s1}/ FI,
cl9 IF p(v999) THEN (if p(v999) then {cl1 '999.__'} &dollar(v999)/fi) ELSE {cl1 '999', s1}/ FI/
qc, link(('MARC'),'FORMAT marc')}
12 Fitxer ISBD.PFT:
fonts((modern,Courier New),(roman,Times New Roman),(swiss,Arial)), cols((0,0,0)),
{mhl {cl8,fs22,b }/f2, cl4,fs26, qj,
if v245*0.1='3' THEN
    m(600,-600) mhl s((&titol('245')), (&edicio('')), ". - "v255, &peu(''),
    &pag('')),
&notes(''),
ELSE m(0, 600), {b mhu s(&nom('100'), &nom('110'), &nom('111'))/, mhl
    s("[" v240^a, ". " v240^c, IF p(v240) THEN ']' FI)}/%,m(0,600), s((&titol('245')),
    (&edicio('')), ". - "v255, &peu(''), &pag('')),
fi,/,
s(&notes(''))/%, s(&isbn(''),
if v1*5.1='P' THEN 'En: ', &part('773')FI)/%
(s(v248*0.1 |. |, v248^g |. |,v248^h, | : |v248^b, | / |v248^e,
&peu('248'), &pag('248'), &isbn('248'))/)/,
e1:=1,
s1:=('    I  II III  IV   V  VI VIIVIII  IX   X  XI XIIXIII')
if v245*0.1='1' THEN
    ss(e1,4,s1) '. Títol', e1:=e1+4,
fi,
(if p(v745) then ' ', ss(e1,4,s1) '. Títol: 'v745^a, e1:=e1+4 FI),
(if p(v700) then ' ', ss(e1,4,s1) '. ' &nom('700'), e1:=e1+4 fi),
(if p(v710) then ' ', ss(e1,4,s1) '. ' &nom('710'), e1:=e1+4 fi),
(if p(v711) then ' ', ss(e1,4,s1) '. ' &nom('711'), e1:=e1+4 fi),
(if p(v740) then ' ', ss(e1,4,s1) '. Títol: ' &nom('740'), e1:=e1+4 fi),
(if p(v745) then ' ', ss(e1,4,s1) '. Títol: ' &nom('745'), e1:=e1+4 fi),
(if s(v440, v800, v810, v811, v840)>'' THEN ' ', ss(e1,4,s1) '. Col·lecció', e1:=e1+4 FI),

e1:=1,
(if p(v600) then ' ', f(e1,1,0) '. ' &nom('600'), e1:=e1+1 fi),
(if p(v610) then ' ', f(e1,1,0) '. ' &nom('610'), e1:=e1+1 fi),
(if p(v611) then ' ', f(e1,1,0) '. ' &nom('611'), e1:=e1+1 fi),
(if p(v645) then ' ', f(e1,1,0) '. ' &nom('645'), e1:=e1+1 fi),
(if p(v650) then ' ', f(e1,1,0) '. ' &nom('650'), e1:=e1+1 fi),
(v80^a/),
(v1 |: |, mdl v999/)

13 Programa NOTES.PAS:
PROGRAM notes(s1:string;lw,occ:real;s2:string) [FORMAT];
VAR w,x,z: real;
    y, v, punt: string;

FUNCTION strtran (s1,s2,s3: string): string;

BEGIN
{inicialitza la variable que inclourà el string amb les dades que s'han de visualitzar}
s2:='';
{"y" conté l'ordenació de visualització dels camps de notes}
y:='500554546514508503515516536537528531525532502521542534530513555504505557538501556';

{Inicia el processament dels 26 camps de notes possibles}
FOR z:=0 TO 26 DO BEGIN
    {obté el valor numèric del tag del camp de notes que s'ha de processar}
    w:=VAL(SUBSTR(y,(z*3)+1,3));
    {inicialitza un comptador d'ocurrències pel camp de notes que s'ha de processar}
    x:=1;
    {inicia el processament del camp de notes actiu}
    WHILE x>0 DO BEGIN
        {obté el contingut de l'ocurrència actual del camp en procés}
        v:=FIELD(FIELDN(w,x));
        {processa l'ocurrència si no és buida}
        IF v>'' THEN BEGIN
            {processament de la particularitat del camp 538}
            IF w=538 THEN v:=strtran(v,'^b',' : ');
            {comprova la fi del text de les notes per definir la forma del codi de separació entre camps de nota}
            IF SUBSTR(s2,size(s2),1)<>'.' THEN punt:='. -- ' ELSE punt:=' -- ';
            {s2=s2+separació entre camps + nota en procés des del caràcter 5, sense comptar els dos indicadors i els dos caràcters de subcamp: ^a}
            s2:=s2|punt|substr(v,5,size(v)-4);
            {s'incrementa el comptador d'ocurrències del camp en procés}
            x:=x+1 END
        ELSE x:=0;
    END;
END;

IF size(s2)>0 THEN s2:=s1|substr(s2,5, size(s2)-4);
END.

14 Per visualitzar els resultats de les cerques en forma de llista cal activar aquesta opció a través del fitxer SYSPAR.PAR: 890=1.

15 Fixter BIBLO.EXP:
500=BFIA1
502=mhu, v260^c " Ä ", &buides(v245^a)
504=1
506=1
16 Fitxer BFIA1.PFT:
qj,f1,{b,mhl, s((&nom('100'), &nom('110'),&nom('111'))|. | &titol('240'))/%,}
{i, s(&titol('245'), }, ". - "d250, (v250^a, | / |v250^c, | ; |v250^d, |, |v250^e,
| = |v250^k), ". - "v255, &peu(''), &pag('')". - ("d440, (|) (|+v440^a, | : |
v440^b, | / |v440^e, | - |v440^k, |. |v440^l, | ; |v440^v, |, ISSN |v440^w), ")"
d440, (|. ISBN |v21^a, | (|v21^c|) |), "ISSN "v22)/
'MATÈRIA: '
e1:=0,
(if p(v600) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('600')fi),
(if p(v610) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('610')fi),
(if p(v611) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('611')fi),
(if p(v645) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('645')fi),
(if p(v650) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('650')fi),
(&nom('651') if p(v651) then '; ' fi)/
link(('OPAC'),'TEXTBOX[2]RCHILDLOAD BIBLO')
17 Fitxer BFIA2.PFT:
{b,'\qr MFN: ' f(mfn,3,0)}/,
qj,f1,{b,mhl, s((&nom('100'), &nom('110'),&nom('111'))|. | &titol('240'))/%,}
{i, s(&titol('245'), }, ". - "d250, (v250^a, | / |v250^c, | ; |v250^d, |, |v250^e,
| = |v250^k), ". - "v255, &peu(''), &pag('')". - ("d440, (|) (|+v440^a, | : |
v440^b, | / |v440^e, | - |v440^k, |. |v440^l, | ; |v440^v, |, ISSN |v440^w), ")"
d440, (|. ISBN |v21^a, | (|v21^c|) |), "ISSN "v22)/
'MATÈRIA: '
e1:=0,
(if p(v600) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('600')fi),
(if p(v610) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('610')fi),
(if p(v611) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('611')fi),
(if p(v645) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('645')fi),
(if p(v650) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('650')fi),
(&nom('651') if p(v651) then '; ' fi)##

18 El nou comandament OCC del llenguatge de programació ISISPAS, adaptat al llenguatge de formatació numera les diferents ocurrències:

if p(v600) then {cl1, fs18,i,'Matèria:'} fi,
(if p(v600) then tab(2000), f(occ,1,0), |. |v21/fi),

En cas d'haver de numerar amb una mateixa seqüència les ocurrències de diversos camps, també és possible, tot i que el format és una mica més complex:

if s(v600, v610, v611,v645, v650)<>'' then {b cl1 'MATÈRIA:'} fi,
e1:=0,
(if p(v600) then tab(1600) if p(v600) then f(e1+occ,1,0) fi, |. |v600^a/fi), e1:=e1+nocc(v600),
(if p(v610) then tab(1600) if p(v610) then f(e1+occ,1,0) fi, |. |v610^a/fi), e1:=e1+nocc(v610),
(if p(v611) then tab(1600) if p(v611) then f(e1+occ,1,0) fi, |. |v611^a/fi), e1:=e1+nocc(v611),
(if p(v645) then tab(1600) if p(v645) then f(e1+occ,1,0) fi, |. |v645^a/fi), e1:=e1+nocc(v645),
(if p(v650) then tab(1600) if p(v650) then f(e1+occ,1,0) fi, |. |v650^a/fi),

El mateix procediment anterior es pot efectuar, també, amb les ordres següents:

if s(v600, v610, v611,v645, v650)<>'' then {b cl1 'MATÈRIA:'} fi,
e1:=0,
(if p(v600) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('600')fi),
(if p(v610) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('610')fi),
(if p(v611) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('611')fi),
(if p(v645) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('645')fi),
(if p(v650) then e1:=e1+1, ' ',f(e1,1,0)'. ',&nom('650')fi)
19 La numeració en lletres és possible amb la declaració d'una variable inicial, i el seu tractament amb la nova funció OCC:
s1:=('abcdefghijklmnopqrstuvwxyz'),
if p(v21) then {cl1, fs18,i,'Municipis:'} fi,(if p(v21) then tab(2000), ss(occ,1,s1), |) |v21/fi),
20 En el cas del castellà cal procedir per a la ñ de la mateixa manera que en el cas de la ç pel català.
21 Fitxer ISISAC.TAB:

048 049 050 051 052 053 054 055 056 057 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086
087 088 089 090 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 128 129
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 160 161 162 163 164 165 250

22 Fitxer ISISUC.TAB

000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 028 030 031
032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063
064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095
096 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 123 124 125 126 127
067 085 069 065 065 065 065 067 069 069 069 073 073 073 065 065 069 069 069 079 079 079 085 085 089 079 085 155 156 157 158 159
065 073 079 085 165 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 028 030 031
032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063
064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095
096 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 123 124 125 126 127
067 085 069 065 065 065 065 067 069 069 069 073 073 073 065 065 069 069 069 079 079 079 085 085 089 079 085 155 156 157 158 159
065 073 079 085 165 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255