FSED

Z PMD 85 Infoserver

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-2.0.zip - obraz disku s editorom a konfiguračným programom, plus samostatné COM súbory
fsed-2.0-src.zip - zdrojové súbory editora a konfiguračného programu

Obsah


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 odstráni 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 za posledným znakom v 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é medzerami a tabulátormi.

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.

Do 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ď. vyšš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 textu, 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ávesmi, 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čí 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 naposledy 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.
V (show Version) - zobrazenie verzie programu 
Zmaže obrazovku a vypíše verziu programu s názvom terminálu, pre ktorý je editor nakonfigurovaný. Po stlačení ľubovoľného klávesu sa znovu zobrazí editovaný text.

Zadávanie vstupných údajov

Ako už bolo spomenuté vyššie, informačný riadok zároveň slúži pre zadávanie rôznych vstupných údajov. Znaky, ktoré možno zadať závisia od toho, aké zadanie sa od užívateľa očakáva. Okrem bežných znakov možno pre editáciu použiť nasledujúce riadiace klávesy (použité názvy pre jednotnosť zodpovedajú vyššie uvedeným editačným funkciám a v zátvorke je uvedený kláves na PMD 85):

  • cursor left by char (<--) - zmazanie posledného znaku
  • backspace (K1) - zmazanie posledného znaku
  • delete text from line (CLR) - zmazanie editačného riadku
  • restore original line text (RCL) - prerušenie vstupu a ukončenie povelu bez jeho vykonania
  • key ENTER/RETURN (EOL) - potvrdenie vstupu
Meno súboru 
Meno súboru za zadáva v tvare [d:]filename.ext, kde je písmeno diskovej jednotky d: nepovinné. Pre zadanie mena súboru sú povolené iba znaky bodka, pomlčka, dvojbodka, čísla a písmená. Malé písmená sú automaticky menené na veľké. Dvojbodka sa samozrejme môže vyskytnúť iba za písmenom diskovej jednotky. Bodka sa môže vyskytnúť iba ako oddeľovač mena a prípony súboru.
Číslo riadku 
Pri zadávaní čísla riadku pre povel G sú samozrejme povolené iba čísla.
Hľadaný alebo nahradzovaný reťazec 
Tu je povolené zadávať všetky znaky z klávesnice.

Hlásenia editora

Ak pri editácii textu alebo vykonávaní povelov dôjde ku nejakej chybe, editor vypíše do informačného riadku príslušné hlásenie.

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á (minimálne by mala služba vracať vždy 0FFh), 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

Problémy so spustením alebo používaním

Na niektorých implementáciách systému CP/M sa objavili problémy so spustením alebo používaním editora. Tu si popíšeme dané problematické prípady a ich riešenie priamou modifikáciou súboru FSED.COM.

Problematický znak označenia bloku

Editor používa znak vertikálna čiarka | (kód 124 / 7Ch - vertical line, pipe) na označenie bloku textu. Na niektorých systémoch sa tento znak nedá vôbec zobraziť, alebo ho BIOS využíva ako riadiaci znak. V prvom prípade to môže znamenať, že označený blok tak nie je vôbec vidieť, v druhom prípade to spôsobuje neočakávané chovanie konzoly. Riešením je zmeniť znak, ktorým sa blok označuje, napr. na hviezdičku * (kód 42 / #2A).

  • offset #0D22 : #7C zmeniť na #2A
  • offset #0DD1 : #7C zmeniť na #2A

Problematický znak oddeľovacej čiary informačného riadku

Podobný problém, kde sa ale ako znak pre oddeľovaciu čiaru používa znak vlnovka ~ (kód 126 / 7Eh - tilde). Ten môžeme zmeniť na napr. pomlčku - (kód 45 / #2D).

  • offset #02C3 : #7E zmeniť na #2D

Pri spúšťaní sa editor "zasekne" alebo sa aktivujú všetky mechaniky

Editor po spustení pri svojej inicializácii overuje volaním BIOS služby SELDSK, ktoré mechaniky sú v systéme definované (zavolá ju postupne pre všetky potenciálne jednotky P:A:). Túto informáciu potom využíva pri poveloch Z a Y, aby dovolil výpis adresára iba na diskových jednotkách, ktoré existujú. To mala byť práve prevencia pred tým, aby sa editor "nezasekol", ak by užívateľ nechtiac zvolil nesprávne písmeno diskovej jednotky a tým by prišiel o rozpísaný text.

Služba BIOSu SELDSK slúži pre výber aktuálnej diskovej jednotky, s ktorou sa budú vykonávať ďalšie diskové operácie. Ak je požadovaná disková jednotka definovaná, služba vráti ukazateľ na tabuľku jej diskových parametrov. Ak definovaná nie je, vráti sa hodnota 0. Na základe tejto vrátenej hodnoty si teda editor vytvoril "mapu" dostupných diskových jednotiek.

U niektorých systémov sa ale v rámci tejto služby "dynamicky" overuje, o aký typ diskovej mechaniky alebo vloženého disku sa jedná (jednostranná/obojstranná, jednoduchá/dvojitá hustota a podobne) a podľa toho sa prispôsobuje tabuľka diskových parametrov. Potiaľ by to bolo v poriadku. Problém nastane, ak táto služba nemá vhodne ošetrené prípady, ak FDC radič pre danú jednotku neodpovedá, alebo daná jednotka vôbec neexistuje, alebo že dokonca nie je vložený disk - to znamená, že sa volanie tejto služby "zasekne" na čakaní na odpoveď od FDC radiča. Rozumne napísaný systém by mal mať implementované "timeouty", teda čakať na odpoveď od FDC len určitý čas a inak sa vrátiť s nejakým chybovým príznakom, ktorý sa potom príslušne spracuje.

Pre potlačenie kontroly dostupných diskových jednotiek po spustení editora je teda možné urobiť nasledujúcu úpravu. Vo výsledku teda budú povely Z a Y akceptovať akékoľvek písmeno jednotky a je na užívateľovi, aby nezvolil písmeno diskovej jednotky, ktorá nie je definovaná.

  • offset #19AB : #CD zmeniť na #21

Známe chyby

V každom programe sa vyskytujú nejaké chyby a FSED nie je výnimkou. V tomto zozname budú popísané chyby, ktoré nie je možné opraviť priamou modifikáciou FSED.COM a tak budú ošetrené v prípadnej ďalšej verzii.

Problém s nahratím prázdneho súboru

FSED sa po nahratí prázdneho súboru buď hneď zosype, alebo deklaruje nezmyselnú veľkosť voľnej pamäte, počet riadkov textu a podobne. To záleží aj od toho, čo bolo v pamäti predtým. V každom prípade je už jeho chovanie vecou "náhody". Chyba je v tom, že si FSED nesprávne označí koniec textu, čo rozhodí všetky ďalšie operácie nad textom. Nahratie prázdneho súboru povelom I túto chybu nespôsobí.

Konfiguračný program

Vzhľadom na to, že systém CP/M nedefinuje jednoznačne vlastnosti vstupu z konzoly a výstupu na konzolu, FSED je možné nakonfigurovať na vlastnosti konkrétneho systému a jeho konzoly (terminálu) pomocou konfiguračného programu FSEDCONF. V tomto programe je možné zadefinovať ovládacie klávesy pre jednotlivé editačné funkcie a spôsob "ovládania" výstupu na konzolu. Výsledná konfigurácia sa potom zapíše do samotného programového súboru FSED.COM. Distribučný disk obsahuje editor nakonfigurovaný pre PMD 85.

Konfiguračný program FSEDCONF.COM sa spúšťa z aktuálneho disku, na ktorom musí byť aj samotný editor, teda súbor FSED.COM. Za názvom konfiguračného programu môže byť jeden číselný parameter určujúci počet znakov na riadok (zr) aktuálneho terminálu. To umožní vhodné zalamovanie textu konfiguračného programu a lepšiu čitateľnosť. Ak sa tento parameter neuvedie, použije sa hodnota 80 znakov na riadok.

   A>FSEDCONF
   A>FSEDCONF zr

Pred spustením konfiguračného programu je dobré si vytvoriť zálohu súboru FSED.COM. Konfiguračný program po spustení najprv vyzve užívateľa, aby potvrdil, že má súbor FSED.COM odzálohovaný. Potom sa zobrazí nasledujúce menu:

 Menu:
 
   1. Display input console settings
   2. Edit input console settings
   3. Display output console settings
   4. Edit output console settings
   5. Terminal name: PMD 85
   0. Exit and save changes
 
 Your option:
Display input console settings 
Zobrazí aktuálne nastavenie riadiacich klávesov pre jednotlivé editačné funkcie, ako boli uvedené vyššie.
Edit input console settings 
Voľba priradenia riadiacich klávesov pre jednotlivé editačné funkcie. Je možné si vybrať medzi dvoma spôsobmi priradenia:
  • zadaním hexadecimálneho kódu riadiaceho klávesu : Kódy môžu byť v rozsahu 011F a 7FFE. Zadanie FF znamená, že daná editačná funkcia nebude dostupná. Odoslanie prázdneho riadku znamená, že sa aktuálny kód nezmení. Stlačením CTRL+Z sa prevedie návrat do menu.
  • stlačením daného riadiaceho klávesu : Po stlačení riadiaceho klávesu treba danú voľbu potvrdiť klávesom SPACE. Zadanie - (pomlčky) znamená, že daná editačná funkcia nebude dostupná. Stlačenie iba klávesu SPACE ponechá pôvodné nastavenie. Návrat do menu je možný stlačením písmena Q.
Display output console settings 
Zobrazí aktuálne nastavenie výstupu na konzolu.
Edit output console settings 
Určenie vlastností konzolového výstupu. Stlačením CTRL+Z sa prevedie návrat do menu. Od užívateľa sa požadujú tieto parametre:
  • počet znakov na riadok
  • počet riadkov na obrazovke
  • riadiaca (escape) sekvencia pre nastavenie pozície kurzora (povinné) - max. 8 kódov
  • riadiaca (escape) sekvencia pre zmazanie obrazovky (povinné) - max. 8 kódov
  • riadiaca (escape) sekvencia pre skrytie kurzora (nepovinné) - max. 8 kódov
  • riadiaca (escape) sekvencia pre zobrazenie kurzora (nepovinné) - max. 8 kódov
  • riadiaca (escape) sekvencia pre pípnutie (nepovinné) - max. 3 kódy

Počet znakov na riadok a počet riadkov na obrazovku sa zadáva v desiatkovej sústave. Kódy v riadiacej sekvencii sa zadávajú hexadecimálne a jednotlivé kódy sa oddeľujú medzerami. Odoslanie prázdneho riadku znamená ponechanie aktuálneho nastavenia. Pre nepovinné riadiace sekvencie, ktoré sa nemajú použiť alebo nie sú terminálom podporované, treba zadať iba 00.

V riadiacej sekvencii pre nastavenie pozície kurzora sa musia uviesť "kľúčové slová" row a col (na veľkosti písmen nezáleží) v mieste, kde má byť požadované číslo riadku a stĺpca. Následne je treba určiť, či sú v sekvencii čísla riadku a stĺpca v binárnom alebo ASCII tvare. Ak sú v binárnom tvare, tak je nakoniec treba ešte zadať o akú hodnotu sú jednotlivé čísla posunuté (hexadecimálne).

Terminal name 
Zadanie mena terminálu, pre ktorý je táto konfigurácia určená. Meno terminálu sa potom zobrazí pri štarte editora, prípadne po vyvolaní príkazu pre zobrazenie verzie. Dĺžka mena terminálu je maximálne 12 znakov.
Exit and save changes 
Ukončenie konfiguračného programu a uloženie zmien. Program sa najprv opýta, či má zmeny skutočne uložiť do FSED.COM. Po kladnej odpovedi sa FSED.COM modifikuje a je pripravený na používanie na danom termináli.

Súbory na stiahnutie

Hlavný archív fsed-2.0.zip obsahuje obraz disku fsed.p32 pre PMD 32, ale aj osobitne "binárky" FSED.COM a FSEDCONF.COM, ktoré je možné uložiť na obrazy diskov pre iné platformy pomocou utility CP/M Image Manager. Na obraze disku fsed.p32 sú uložené aj súbory HLP s týmto popisom editora "formátované" pre 3 rôzne šírky konzoly - 48, 64 a 80 znakov na riadok.

Druhý archív fsed-2.0-src.zip obsahuje zdrojové súbory editora a aj konfiguračného programu.

Samotný editor je napísaný v assembleri i8080 a kompilovaný bol na PC pomocou Macro Assembleru AS - viď súbor build.bat. Zdrojové súbory sú v podadresári src a boli upravované najprv v PSPade a neskôr vo VSCode. Pre oba sú v archíve projektové súbory.

Konfiguračný program bol napísaný v jazyku C, upravovaný priamo v editore FSED a kompilovaný pomocou BDSC kompilátora pod Mikrosom. Zdrojové súbory konfiguračného programu sú v archíve v adresári fsedconf, v ktorom je aj obraz disku fsedconf.p32. Pri kompilácii je potrebné tento obraz umiestniť do mechaniky A a do mechaniky B je treba umiestniť kompilátor, teda obraz disku bdsc-main.p32. Kompilácia sa spustí z disku A príkazom SUBMIT FC.