FSED

From PMD 85 Infoserver

Jump to: navigation, search
FSED


FSED
Autor:Roman Bórik
Vývojár:RomBorSoft
Verzia:FSED, v2.0 (2020)
Operačný systém:CP/M
Lokalizácia:angličtina
Download: FSED.P32 - obraz disku s programom

Contents


FSED je jednoduchý celoobrazovkový plain-text editor pre operačný systém CP/M 2.2. Editor je, vzhľadom na svoj charakter, určený na úpravu obyčajných textových súborov (napr. zdrojové súbory pri programovaní v assembleri alebo vyšších jazykoch) a tak neposkytuje žiadne funkcie pre formátovanie textu. Napriek tomu poskytuje množstvo editačných funkcií pre prácu s riadkom, celým textom i blokom textu. Editor pracuje iba s textom, ktorý sa vojde do voľnej pamäte. Veľkosť voľnej pamäte závisí od konkrétnej implementácie CP/M.

FSED je možné pomocou konfiguračného programu FSEDCONF prispôsobiť pre konkrétne vlastnosti použitého terminálu. FSEDCONF komunikuje s užívateľom iba v anglickom jazyku.

Spustenie editora

Editor možno spustiť obvyklým spôsobom zadaním mena programu. Za názvom programu môže nasledovať meno súboru, ktorý chceme hneď otvoriť, prípadne ešte jeden parameter.

   A>FSED
   A>FSED [d:]filename.ext
   A>FSED [d:]filename.ext linenumber
   A>FSED [d:]filename.ext @string

Ak je uvedené aj meno súboru filename.ext, daný súbor sa po spustení nahraje do pamäte. Meno nahrávaného súboru môže začínať písmenom zdrojového disku d:, na ktorom sa súbor nachádza. Za menom súboru môže nasledovať jeden parameter, ktorým môže byť buď desiatkové číslo (linenumber) alebo ľubovoľný reťazec (string) začínajúci znakom @ (zavináč). V prvom prípade sa po nahraní súboru kurzor nastaví na dané číslo riadku, v druhom prípade sa v texte vyhľadá prvý výskyt zadaného reťazca a kurzor sa nastaví na prvé písmeno nájdeného reťazca (vyhľadávací reťazec môže obsahovať rôzne escape znaky, viď. vyhľadávanie v texte popísané ďalej). Posledné dva prípady sú veľmi užitočné, keďže umožňujú dostať sa na dané miesto v texte ihneď po spustení editora so súčasným nahraním daného súboru do pamäte.

Informačný riadok

 ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜
   36:5   (272)   [30547]  INS  A:FILENAME.EXT

Posledný riadok obrazovky je určený pre zobrazenie základných informácií o editovanom texte a pre zadávanie vstupných údajov. Informačný riadok je od editovaného textu oddelený jedným riadkom s vlnovkami. Informačný riadok obsahuje zľava:

  • číslo riadku, na ktorom stojí kurzor
  • číslo stĺpca, na ktorom stojí kurzor
  • v okrúhlych zátvorkách celkový počet riadkov textu
  • v hranatých zátvorkách zostávajúca veľkosť voľnej pamäte pre text
  • režim písania znakov v riadku
    • INSert - vkladací
    • OVeRwrite - prepisovací
  • názov aktuálne editovaného súboru

Ak je šírka obrazovky menšia ako 48 znakov, meno aktuálne editovaného súboru sa zobrazuje v oddeľovacom riadku vpravo. Ak sa od užívateľa vyžaduje vstup, stane sa informačný riadok dialógovým pre zadávanie vstupných údajov.

Formát textu

Riadky sú ukončené štandardne znakmi CR <13> a LF <10>. Môžu obsahovať znak tabulátor TAB <9>. Ostatné riadiace znaky s kódmi menšími ako 32 sú pri nahrávaní súboru do pamäte zahadzované. Akceptované sú aj všetky znaky z hornej polovice ASCII tabuľky, teda s kódmi väčšími ako 127, kde sú zvyčajne znaky s diakritikou. Jeden riadok textu, vrátane rozvinutých tabulátorov na medzery, môže obsahovať maximálne 127 znakov. Pri opustení riadku, kedy sa riadok zaraďuje do textu, sú medzery a tabulátory na konci riadku odstraňované.

Bloky

Editor umožňuje definovať blok textu, s ktorým je možné vykonávať osobitné operácie. Príslušnosť riadkov k bloku je signalizovaná zvislou čiarou (znak |) v prvom stĺpci obrazovky. Nerozlišuje sa začiatok a koniec bloku, ale editor si pamätá dva okraje a pri zadávaní nového odstraní ten, ktorý bol zadaný skôr a pridá nový.

Editácia textu

Editor môže pracovať v prepisovacom alebo vkladacom režime, čo je signalizované v informačnom riadku, ako bolo uvedené vyššie. V prepisovacom režime sa znak, na ktorom stojí kurzor, nahradí (prepíše) znakom zadaným z klávesnice. Vo vkladacom režime sa znak zadaný z klávesnice vloží pred znak, na ktorom stojí kurzor a text v riadku od kurzora ďalej sa posunie o jednu pozíciu doprava. Ak už riadok obsahuje 127 znakov, k vloženiu znaku nedôjde. Vloženie tabulátora znamená prechod na ďalšiu tabelačnú pozíciu vložením príslušného počtu medzier, pri zobrazovaní na obrazovke. V pamäti je samozrejme znak TAB <9>. Tabelačné pozície sú každých 8 znakov.

Editácia v riadku prebieha v oddelenom buffri a riadok sa zaraďuje do textu pri jeho opúšťaní. Ak by pre vloženie editovaného riadku do textu nebolo v pamäti miesto, vypíše sa správa "No room for line(s)".

Editačné funkcie

Ďalej bude uvedený zoznam všetkých editačných funkcií editora s príslušným popisom. Názvy editačných funkcií sú uvedené v anglickom jazyku, rovnako, ako je to v konfiguračnom programe FSEDCONF, v ktorom sa jednotlivým funkciám priraďujú požadované kontrolné klávesy.

Štandardné priradenie kontrolného klávesu pre počítač PMD 85 je uvedené v treťom stĺpci. Slovo HOME označuje šikmú šípku na klávesnici PMD 85.

Toto nastavenie je samozrejme možné v konfiguračnom programe zmeniť.

Editačné funkcie programu FSED
Funkcia Význam Kláves na PMD 85
cursor left by char Posun o znak doľava.

Ak je už kurzor na začiatku riadku, nič sa nestane.

<--
cursor right by char Posun o znak doprava.

Ak je už kurzor na konci riadku, nič sa nestane.

-->
cursor to begin of line Prechod na začiatok riadku.

Kurzor sa nastaví na prvý znak v riadku.

HOME
cursor to end of line Prechod na koniec riadku.

Kurzor sa nastaví za posledný vložený znak v riadku.

END
cursor left by word Posun o slovo doľava.

Kurzor sa nastaví na prvý znak predchádzajúceho slova. Za slová sa považujú skupiny znakov oddelené medzerou.

Shift + <--
cursor right by word Posun o slovo doprava.

Kurzor sa nastaví na prvý znak nasledujúceho slova.

Shift + -->
insert tabulátor - TAB Vloženie tabulátora v mieste kurzora.

To textu sa vloží priamo znak TAB <9>. Pri zobrazovaní to znamená, že sa od polohy tabulátora až po nasledujúcu tabelačnú pozíciu vypíšu medzery. Tabelačné pozície sú každých 8 znakov, teda 9. stĺpec, 17., 25., ... atď.

C-D
delete text from line Zmazanie obsahu riadku. CLR
delete text right of cursor Zmazanie časti riadku vpravo od kurzora. Shift + CLR
toggle mode INS/OVR Zmena editačného režimu. Viď. viššie. INS
delete char at cursor Zmaže znak na pozícii kurzora.

Ak sa kurzor nachádza na konci riadku, alebo je riadok prázdny, dôjde k spojeniu tohto riadku s nasledujúcim, ak ich celková dĺžka nepresiahne 127 znakov.

DEL
backspace Zmaže znak pred kurzorom.

Ak sa kurzor nachádza na začiatku riadku, nič sa nestane.

K1
restore original line text Vráti obsah riadku do stavu, v akom bol pred jeho zmenou. RCL
next ASCII character Znak, na ktorom je kurzor, sa zmení na znak, ktorý za ním nasleduje v ASCII tabuľke. Umožňuje to vkladať aj znaky, ktoré na klávesnici daného terminálu chýbajú. Shift + WRK
key ENTER/RETURN Nový riadok.

Ak stojí kurzor na začiatku riadku, tak sa PRED tento riadok vloží nový riadok.

Ak stojí kurzor na konci riadku, tak sa ZA tento riadok vloží nový riadok.

Ak stojí kurzor vo vnútri riadku, tak sa tento riadok rozdelí na dva v mieste kurzora.

Ak ale nie je dosť voľnej pamäte pre vloženie nového riadku, do informačného riadku sa vypíše "No room for line(s)".

EOL
cursor to previous line Posun kurzora na predchádzajúci riadok.

Ak sa kurzor nachádza na prvom riadku obrazovky, zobrazí sa predchádzajúca stránka textu. Počet riadkov, o ktoré sa kurzor posunie, závisí od počtu riadkov na obrazovke terminálu a "stránkuje" sa o 3/4 z celkového počtu riadkov obrazovky terminálu.

|<--
cursor to next line Posun kurzora na nasledujúci riadok.

Ak sa kurzor nachádza na poslednom riadku obrazovky, zobrazí sa nasledujúca stránka textu.

-->|
previous page Prechod na predchádzajúcu stránku textu. Shift + |<--
next page Prechod na nasledujúcu stránku textu. Shift + -->|
first text line Prechod na prvý riadok textu. Shift + HOME
last text line Prechod na posledný riadok textu. Shift + END
delete current line Odstránenie riadku, na ktorom stojí kurzor. Shift + DEL
duplicate line Zduplikuje aktuálny riadok tak, že pred tento riadok vloži jeho kópiu. Shift + INS
exchange lines Zamení aktuálny riadok s predchádzajúcim. Ak kurzor stojí na prvom riadku testu, nič sa nestane. Shift + RCL
set block boundary Nastavenie okraja bloku. Operácie, ktoré je možné vykonať nad blokom textu, sú uvedené v popise príkazov. Shift + C-D
enter command mode Prechod do príkazového režimu. WRK

Príkazový režim

Okrem často používaných operácií, ktoré je možné dosiahnuť funkčnými klávesami, obsahuje editor ešte príkazový režim. Povely v príkazovom režime sa zadávajú stlačením príslušného písmenového klávesu. Po stlačení klávesu 'enter command mode' (WRK), sa do informačného riadku vypíše: "COMMAND:" a čaká sa na zadanie povelu. Ak sa stlači kláves, ktorý nemá priradený žiadny povel, nič sa nevykoná. Zoznam povelov:

Q (Quit) - ukončenie programu 
Ak bol text v pamäti zmenený a nebol uložený, do informačného riadku sa vypíše "Text changed. Save? (Y/N)". 'Y' znamená kladnú odpoveď a text je uložený pod aktuálnym menom. Kláves 'N' znamená zápornú odpoveď a ukončenie editora bez uloženia textu. Ak text ešte nebol uložený (nebolo zadané meno súboru) editor si vyžiada zadanie nového mena súboru.
X (clear teXt) - zmazanie celého textu 
Editor najprv vypíše do informačného riadku "Are you sure? (Y/N)". Po stlačení 'Y' sa ešte testuje, či bol aktuálny text zmenený. Ak áno, dôjde k uloženiu textu, rovnako ako pri povele Q. Následne sa vymaže celý text.
L (Load) - nahratie textu zo súboru do pamäte 
Najprv sa testuje, či bol aktuálny text zmenený. Ak áno, dôjde k uloženiu aktuálneho textu v pamäti, rovnako ako pri povele Q. Následne si editor vyžiada zadanie mena súboru a dôjde k nahratiu súboru do pamäte. Ak je súbor príliš dlhý a nevojde sa do pamäte, do informačného riadku sa vypíše "Too long. Truncated!" a v pamäti je iba časť textu.
Pri načítavaní textu zo súboru sa akceptujú iba riadiace znaky CR, LF a TAB. Všetky ostatné riadiace kódy sa ignorujú. Akceptujú sa aj znaky z hornej polovice ASCII tabuľky, teda znaky s kódmi väčšími ako 127, kde sú obvykle znaky s diakritikou. Riadky načítavaného textu môžu byť ukončené s CR, LF, CRLF alebo EOF. Maximálna dĺžka riadku je 127 znakov pri rozvinutí tabulátorov na medzery. Ak je riadok zo súboru dlhší, bude rozdelený na dva. Prípadné medzery a tabulátory na konci riadku sú odstránené. Za koniec textu sa považuje znak EOF alebo fyzický koniec súboru.
I (Insert) - vloženie textu zo súboru 
Editor si vyžiada zadanie mena súboru a text z daného súboru sa nahraje pred riadok, na ktorom stojí kurzor. Keďže načítavanie textu zo súboru prebieha po riadkoch, ktoré sa postupne vkladajú do existujúceho textu, môže načítanie dlhého textu trvať dlhšie. Ak je vkladaný text príliš dlhý a presiahne veľkosť voľnej pamäte, vypíše sa správa "Too long. Truncated!". Po načítaní textu zo súboru sa kurzor nastaví na prvý riadok, ktorý bol zo súboru načítaný.
S (Save) - uloženie textu do súboru 
Ak už bolo meno súboru zadané, text sa ihneď uloží. Inak si editor vyžiada zadanie mena súboru a text uloží.
Pri ukladaní sú jednotlivé riadky textu ukončené znakmi CR a LF, ako je to na CP/M obvyklé. Na koniec textu sa ako posledný znak súboru zapíše znak EOF (znakom EOF je vyplnený zbytok posledného sektoru súboru).
Uloženie prebieha v troch krokoch. Najprv sa zmaže prípadne existujúci súbor filename.BAK. Potom, ak existuje súbor s požadovaným menom filename.ext, tak sa zmení jeho prípona na BAK. Nakoniec sa uloží text do súboru pod menom filename.ext.
A (save As) - uloženie súboru pod iným menom 
Editor si vyžiada zadanie mena súboru a text uloží do súboru pod daným menom. Zároveň sa zadané meno súboru stáva aktuálnym.
B (save Block) - uloženie označeného bloku do súboru 
Editor si vyžiada zadanie mena súboru a nastavený blok textu uloží do súboru pod daným menom.
D (Delete block) - zmazanie označeného bloku 
Editor najprv vypíše do informačného riadku "Are you sure? (Y/N)". Po stlačení 'Y' sa nastavený blok zmaže. Po stlačení 'N' sa zmazanie neprevedie.
C (Copy block) - skopírovanie nastaveného bloku 
Nastavený blok textu sa skopíruje pred riadok s kurzorom. Ak ale nie je dosť voľnej pamäte pre skopírovanie bloku, do informačného riadku sa vypíše "No room for line(s)" a ku kopírovaniu nedôjde. Nemožno kopírovať do vnútra bloku.
M (Move block) - presunutie nastaveného bloku 
Nastavený blok textu sa presunie pred riadok s kurzorom. Ak ale nie je dosť voľnej pamäte pre presunie bloku, do informačného riadku sa vypíše "No room for line(s)" a k presunu nedôjde. Blok nemožno presunúť do vnútra bloku.
G (Go to line) - skok na zvolený riadok 
Do informačného riadku sa zobrazí "Line:" a editor čaká na zadanie čísla riadku, na ktorý sa má skočiť. Ak zadané číslo nie je v rozsahu 1 až počet riadkov textu, nič sa nestane.
F (Find string) - vyhľadanie reťazca 
Vyžiada si zadanie reťazca, ktorý sa má vyhľadať a začne hľadanie od aktuálnej pozície kurzora, pričom sa v informačnom riadku zobrazí "Wait please...". Ak sa daný reťazec v texte nájde, kurzor sa nastaví na prvý znak nájdeného reťazca v riadku, v ktorom sa hľadaný reťazec našiel. Ak sa pri hľadaní dosiahne koniec textu, čo znamená, že sa hľadaný reťazec nenašiel, do informačného riadku sa vypíše "String not found". Pri hľadaní sa nerozlišuje veľkosť písmen (písmená v dolnej polovici ASCII tabuľky). Hľadaný reťazec môže obsahovať rôzne Escape znaky. Escape znak začína opačným lomítkom '\'.
  • \C - rozlišovať veľkosti písmen
  • \\ - opačné lomítko
  • \T - znak tabulátor
  • \? - ľubovoľný znak
  • \S - ľubovoľný počet medzier a tabulátorov, minimálne však jeden
N (find Next) - vyhľadanie ďalšieho výskytu 
Od pozície kurzora sa hľadá ďalší výskyt reťazca zadaného v povele F. Ak kurzor stojí na posledne nájdenom výskyte, hľadať sa začne od ďalšieho znaku textu.
R (Replace) - nahradenie reťazca 
Nahradenie reťazca naposledy nájdeného povelom F, resp. N zadaným reťazcom. Kurzor musí stáť práve na naposledy nájdenom výskyte. Editor si vyžiada zadanie nahradzovacieho reťazca, ktorý môže obsahovať ďalej uvedené Escape znaky. Pri nahradzovaní sa testuje, či po nahradení nepresiahne dĺžka riadku 127 znakov alebo či je pre zmenený riadok dostatok miesta v pamäti. Ak nahradenie nie je možné, vypíše sa hlásenie "No room for line(s)". Ak je nahradenie úspešné, prevedie sa automaticky povel N, teda vyhľadanie ďalšieho výskytu. Takto je možné postupne striedaním povelov N a R nahradzovať určité výskyty reťazcov v texte. Povolené Escape znaky sú tieto:
  • \\ - opačné lomítko
  • \T - znak tabulátor
T (replace all) - nahradenie všetkých výskytov reťazca 
Kurzor musí stáť práve na naposledy nájdenom výskyte. Editor si vyžiada zadanie nahradzovacieho reťazca a nahradí v celom texte všetky výskyty reťazca naposledy nájdeného pomocou povelu F. Podobne, ako v povele R, ak by nebolo nahradenie úspešné, vypíše sa hlásenie "No room for line(s)", povel sa ukončí a kurzor bude na riadku, kde k nahradeniu nemohlo dôjsť. Ak je nahradenie v celom texte úspešné, kurzor sa nastaví na prvý nahradený reťazec.
P (Print text) - vytlačenie textu na tlačiarni 
Do informačného riadku sa zobrazí "Printing... (Ctrl+C to abort)" a text sa začne posielať na tlačiareň. Tlač možno prerušiť stlačením Ctrl+C (END na PMD 85).
O (print blOck of text) - vytlačenie nastaveného bloku textu na tlačiarni 
Do informačného riadku sa zobrazí "Printing... (Ctrl+C to abort)" a nastavený blok textu sa začne posielať na tlačiareň. Tlač možno prerušiť stlačením Ctrl+C (END na PMD 85).
Z (show directory) - zoznam súborov na disku 
Do informačného riadku sa zobrazí "Drive?" a editor čaká na stlačenie písmena disku, ktorého zoznam súborov sa má vypísať. Zobrazí sa iba prostý zoznam všetkých súborov bez informácie o ich dĺžke. Ak je na disku súborov viac ako sa vojde na stránku, vypíše sa text "SPACE - next page" a po stlačení medzery sa zobrazia ďalšie mená súborov. Iný kláves povel ukončí. Ak na disku nie sú žiadne súbory, zobrazí sa text "No files".
Y (show full directorY) - zoznam súborov na disku s dĺžkami súborov 
Do informačného riadku sa zobrazí "Drive?" a editor čaká na stlačenie písmena disku, ktorého zoznam súborov sa má vypísať. Zobrazí sa zoznam súborov vrátane ich dĺžok a voľného miesta na danom disku - "nnn kB free". Získavanie dĺžok súborov môže trvať trochu dlhšie. Inak platí to isté, ako pri povele Z.
W (reset disk system) - reinicializácia diskového systému 
Tento povel je užitočný a nutný po výmene disku, na ktorý sa má následne zapisovať. Inak systém po výmene označí tento disk ako R/O a zápis skončí systémovou chybou.

Hlásenia editora

No room for line(s) 
pri vkladaní nového riadku alebo pri kopírovaní/presúvaní bloku, ak nie je dosť voľnej pamäte
File not found 
požadovaný súbor sa na disku nenašiel
Loading file... 
pri nahrávaní súboru do pamäte
Command: 
editor očakáva zadanie povelu
Are you sure? (Y/N) 
pri mazaní celého textu alebo pri mazaní nastaveného bloku textu
Text changed! Save? (Y/N) 
text bol zmenený a užívateľ chce nahrať zo súboru nový text alebo chce zmazať celý text
Saving file... 
text sa ukladá do súboru
Name: 
editor očakáva zadanie mena súboru
Too long. Truncated! 
nahrávaný súbor je dlhší ako voľná pamäť
Bad file name 
zadané meno súboru je nesprávne
Directory full 
pri vytváraní/ukladaní súboru už nie je miesto v adresári
Disk full 
pri vytváraní/ukladaní súboru už nie je miesto na disku
Line: 
editor očakáva zadanie čísla riadku
Drive? 
editor očakáva písmeno disku
Find: 
editor očakáva zadanie reťazca, ktorý sa má vyhľadať
Wait please... 
pri hľadaní/nahradzovaní reťazcov, pri presúvaní/kopírovaní bloku
String not found 
ak sa pri hľadaní dosiahol koniec textu alebo pri nahradzovaní nestojí kurzor na naposledy nájdenom výskyte
Printing... (Ctrl+C to abort) 
pri tlači textu na tlačiareň
Replace: 
editor očakáva zadanie reťazca, ktorým sa má nahradiť nájdený reťazec
SPACE - next page 
pri výpise zoznamu súborov na disku
No files 
na zvolenom disku nie sú žiadne súbory
nnn kB free 
pri výpise voľného miesta na disku

Technické detaily

Editor používa niekoľko priamych volaní služieb BIOSu CP/M.

CONST - stav konzoly 
volaná pri tlači na tlačiareň pre priebežný test Ctrl+C
CONIN - čítanie znaku z konzoly 
volaná pri samotnej editácii textu, aby sa "obišlo" volanie služby BDOSu, ktorá robí nežiadúce "echo" stlačeného znaku na výstup konzoly
CONOUT - výstup znaku na konzolu 
volaná pri výpise textu, aby bol výpis rýchlejší a obišiel sa nežiadúci test konzoly na pozastavenie výpisu
LIST - výstup znaku na tlačiareň 
volaná pri tlači textu
LISTST - test pripravenosti tlačiarne 
volaná pri tlači textu (je dôležité, aby bola táto služba v BIOSe korektne implementovaná, inak sa môže program po vyvolaní povelu P alebo O "zaseknúť")
SELDSK - výber diskovej jednotky 
volaná pre zistenie dostupných diskových jednotiek, čo sa využíva pri poveloch Z a Y