File Definition Language (FDL) je jazyk popisující organizaci souboru a formát záznamů v operačním systému OpenVMS. Na rozdíl od OS Unix a většiny novějších operačních systémů včetně MS-DOSu a MS Windows je součástí OpenVMS vrstva Record Management Services, která umožňuje pracovat na úrovni operačního systému s různými formáty a organizacemi souborů. FDL je nástroj, který umožňuje zvolit organizaci nově vytvářeného souboru nebo vytvořit kopii existujícího souboru s jinou organizací.

Organizace souborů

RMS podporuje čtyři přístupové metody k záznamům: Sekvenční přístup Přístup podle relativního čísla záznamu Record File Address přístup Indexovaný přístup

RMS podporuje čtyři formáty záznamů: záznamy s pevnou délkou záznamy s proměnnou délkou záznamy s proměnnou délkou a s pevnou délkou řídicích bloků soubory tvořené proudem bytů (v nichž jsou záznamy oddělené ukončovacími znaky) STREAM: záznamy zakončené znaky CRLF STREAM_CR: záznamy zakončené znakem CR STREAM_LF: záznamy zakončené znakem LF

Formáty textového souboru

Obyčejný textový soubor (členěný na řádky) může být na disku uložen různými způsoby:

soubor je proud bytů každý řádek je zakončen k tomu určeným znakem nebo posloupností znaků: MS-Windows a MS-DOS používají dvojici znaků CR a LF Unixové systémy používají znak LF Počítače Apple Macintosh používají znak CR řádky jsou proměnné délky, na začátku každého řádku je informace o jeho délce – toto je standardní formát textových souborů v OpenVMS všechny řádky jsou doplněny mezerami nebo jinými znaky na pevnou délku, informace o délce řádků je uložena v metadatech souboru – tento formát byl obvyklý v době používání děrných štítků

OpenVMS umožňuje přímo prostředky operačního systému konvertovat soubory mezi uvedenými formáty.

Použití

Systém pro každý soubor udržuje informace o jeho organizaci a formátu záznamu. Tyto atributy se při kopírování souboru zachovávají. Problém může nastat:

pokud se soubor zkopíruje z počítače, který používá jiný operační systém pokud jsou soubory sdíleny protokolem, který informace o atributech souboru nepodporuje (např. NFS) pokud jsou soubory zabaleny do archivu, který tyto atributy nepodporuje (například ZIP bez použití parametru "-V")

OpenVMS umožňuje:

vytvořit soubor s určitými atributy vypsat atributy souboru opravit atributy souboru, pokud se liší od skutečného formátu souboru (bez změny vlastních dat) vytvořit kopii souboru, která bude mít stejný obsah, ale jiné atributy

Výpis atributů

Pro výpis atributů souboru lze použít buď příkaz DIR s parametrem /FULL nebo příkaz ANALYZE:

DIR /FULL ABC.TXT Directory USER_DISK:[USER.SMITH]

ABC.TXT;2 File ID: (407115,857,0) Size: 1/64 Owner: [MZ,SMITHJ] Created: 8-DEC-2015 13:23:34.38 Revised: 12-APR-2019 11:31:00.37 (61) Expires: <None specified> Backup: <No backup recorded> Effective: <None specified> Recording: <None specified> Accessed: <None specified> Attributes: <None specified> Modified: <None specified> Linkcount: 1 File organization: Sequential Shelved state: Online Caching attribute: Writethrough File attributes: Allocation: 64, Extend: 0, Global buffer count: 0, No version limit Record format: Stream_LF, maximum 0 bytes, longest 32767 bytes Record attributes: Carriage return carriage control RMS attributes: None Journaling enabled: None File protection: System:RWD, Owner:RWED, Group:R, World: Access Cntrl List: None Client attributes: None

Total of 1 file, 1/64 blocks.

ANALYZE/RMS_FILE/FDL/OUTPUT=POPIS.FDL ABC.TXT TYPE POPIS.FDL IDENT FDL_VERSION 02 "10-MAY-2019 08:01:05 OpenVMS ANALYZE/RMS_FILE Utility"

SYSTEM SOURCE OpenVMS

FILE ALLOCATION 64 BEST_TRY_CONTIGUOUS no CLUSTER_SIZE 64 CONTIGUOUS no EXTENSION 0 FILE_MONITORING no NAME "USER_DISK:[USER.SMITHJ]ABC.TXT;2" ORGANIZATION sequential OWNER [MZ,SMITHJ] PROTECTION (system:RWD, owner:RWED, group:R, world:) GLOBAL_BUFFER_COUNT 0 GLBUFF_CNT_V83 0 GLBUFF_FLAGS_V83 none

RECORD BLOCK_SPAN yes CARRIAGE_CONTROL carriage_return FORMAT stream_lf SIZE 0

Oprava atributů

Pokud organizace souboru na disku nesouhlasí s organizací uvedenou v metadatech souboru, je možné informace v metadatech upravit:

SET FILE /ATTRIB=(...)

popis ve .FDL souboru Význam SET FILE /ATTRIB=(…) FORMAT stream řádky zakončené CR+LF RFM:STM FORMAT stream_cr řádky zakončené CR RFM:STMCR FORMAT stream_lf řádky zakončené LF RFM:STMLF FORMAT fixed záznamy pevné délky RFM:FIX FORMAT undefined nedefinovaný formát RFM:UDF FORMAT variable záznamy proměnné délky RFM:VAR FORMAT vfc RFM:VFC CARRIAGE_CONTROL none RAT:NONE SIZE délka záznamu LRL:32256

Například pro nastavení správného formátu záznamů u .BCK souboru lze použít:

SET FILE /ATTRIB=(RFM:FIX,RAT:NONE,LRL:32256) soubor.BCK

Textový soubor přenesený z Windows, který má špatné atributy, což se projevuje tak, že v editoru se zobrazuje na konci každého řádku nesmyslný znak, lze opravit příkazem:

SET FILE /ATTRIB=(RFM:STM) ABC.TXT

Textový soubor přenesený z Unixu, který má špatné atributy, což se projevuje tak, že se vypisuje schodovitě takto:

MACH1:BOB> TYPE MY_SCRIPT.COM $! $! MY_SCRIPT.COM $! $! Author: Bob Smith $! $! Date: 11-JUL-2013 $!

lze opravit příkazem:

SET FILE /ATTRIB=(RFM:STMLF) MY_SCRIPT.COM

Vytvoření souboru

Vytvořit soubor s určitými atributy:

CREATE /FDL=popis.FDL soubor

Zkonvertování souboru

Pro zkonvertování textového souboru organizovaného jako soubor s proměnnou délkou záznamů na textový soubor v unixovém formátu (konce řádku jsou LF) lze použít následující FDL soubor STREAM_LF.FDL:

RECORD FORMAT stream_lf

Vlastní konverze se provede příkazem:

CONVERT /FDL=STREAM_LF.FDL vstup.TXT vystup.TXT

Pro vytvoření textového souboru ve formátu MS-DOS nebo MS-Windows (konce řádku jsou CR+LF) by FDL soubor vypadal takto:

RECORD FORMAT stream

Zkonvertování souboru mimo OpenVMS

Pokud byl textový soubor s proměnnou délkou záznamů přenesen bez konverze z OpenVMS na jiný systém je možné k jeho konverzi použít následující skript vms2unix v jazyce Perl:

#!/usr/bin/perl

$filename=$ARGV; open(FILE, $filename) || die "Error opening file $filename: $!\n"; do { $read=read(FILE, $buf, 2); ($len)=unpack("v", $buf); $read=read(FILE, $buf, $len); $read=read(FILE, $skip, 1) if $len % 2; $buf=~s/\x01\x8D//; print $buf, "\n"; } while (!eof(FILE)); close(FILE);

Konverze se provede příkazem

$ vms2unix vstup.txt > vystup.txt

Historický příklad – konverze na soubor se pevnou délkou záznamu

Pro zkonvertování textového souboru záznamy s pevnou délkou 80 znaků (formát děrných štítků) lze použít soubor FIXED80.FDL obsahující:

RECORD FORMAT fixed SIZE 80

Vlastní konverze se provede příkazem:

CONVERT /FDL=FIXED80.FDL /FIXED_CONTROL /PAD=" " vstup.TXT vystup.TXT

Vytvoření FDL souboru

Soubor s popisem atributů lze získat několika způsoby:

z existujícího souboru příkazem ANALYZE/RMS_FILE/FDL/OUTPUT=popis.FDL soubor příkazem EDIT /FDL popis.FDL vytvořit textový soubor popis.FDL

Organizaci souboru lze popsat *.FDL souborem. *.FDL pro existují soubor se vyrobí příkazem

ANALYZE/RMS_FILE/FDL/OUTPUT=organizace.FDL soubor

Pro výpis popisu organizace souboru na obrazovku lze použít /OUTPUT=SYS$OUTPUT

Kompletní popis textového souboru používajícího záznamy proměnné délky ve FDL:

IDENT FDL_VERSION 02 " 3-APR-2014 08:54:40 OpenVMS ANALYZE/RMS_FILE Utility"

SYSTEM SOURCE OpenVMS

FILE ALLOCATION 64 BEST_TRY_CONTIGUOUS no CLUSTER_SIZE 64 CONTIGUOUS no EXTENSION 0 FILE_MONITORING no NAME "USER_DISK:[USER.SMITHJ]VYPIS.TXT;1" ORGANIZATION sequential OWNER [SMITHJ] PROTECTION (system:RWED, owner:RWED, group:RE, world:) GLOBAL_BUFFER_COUNT 0 GLBUFF_CNT_V83 0 GLBUFF_FLAGS_V83 none

RECORD BLOCK_SPAN yes CARRIAGE_CONTROL carriage_return FORMAT variable SIZE 0

Úvodní obrazovka příkazu EDIT /FDL soubor.FDL:

OpenVMS FDL Editor

Add to insert one line into the FDL definition Delete to remove one line from the FDL definition Exit to leave the FDL Editor after creating the FDL file Help to obtain information about the FDL Editor Invoke to initiate a script of related questions Modify to change an existing line in the FDL definition Quit to abort the FDL Editor with no FDL file creation Set to specify FDL Editor characteristics View to display the current FDL Definition

Main Editor Function (Keyword)[Help] :

Reference

OpenVMS Record Management Utilities Reference Manual

Kategorie:OpenVMS