FSED
Z PMD 85 Infoserver
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ž 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 01 až 1F a 7F až FE. 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.