Pascal - editor hp424tm : komentář 1987 Ad. =========================================== Vzhledem k častým dotazům uživatelů některé z úprav Hisoft Pascalu (hp 80, .. ,hp424) shrnuji odpovědi na nejčastější dotazy. ..čísla verzí a rozdíly : ----------------------- hp80 - "historická" zkušební verze, nebyla určena pro veřejnost, rozšířila se omylem. hp113 - první cílová verze, určena výhradně pro provoz s páskou; microdrive rutiny neexistují, na jejich místě je rozšíření Pascalu o některé nestandardní příkazy (PLOT,DOT,DRFT, AT,..).Toto rozšíření je pouze v této verzi. Základem je překladač verze HP4S. hp424t - pásková verze na bázi HP4TM. Firma uvádí pro tuto verzi i spolupráci s microdrive, ale jakýkoli pokus použití microdrive vede k poškození kódu překladače otevřeným kanálem (IF1 se starou ROM) nebo k hlášení System call error (nová ROM IF1 , tentýž důvod) a tak dříve či později ke zhroucení systému. hp424tm - je univerzální verze páska - microdrive na bázi překladače HP4TM16, u kterého byl uveden do provozu i microdrive. Loader této verze zajišťuje "obojetnost" programu bez jakýchkoliv změn (stejný program na pásce i MD). Vyskytuje se ve dvou číslem nerozlišených verzích. V novější z nich funguje v plné míře i Translate na microdrive a neprodukuje nesmyslné jméno při Translate na pásku. hp424d - je disková verze hp424tm. Spolupracuje s páskou a diskem (interface "Beta" v.4.11 Technology Research). Autor udržuje nadále jen v. hp424tm a hp424d; zdrojové programy jsou kompatibilní zdola, přidané nestandardní funkce z hp113 nahrazeny INLINE. Přidaný editor je v těchto verzích nejkratší a má drobná zlepšení oproti předchozím. ... MD se nehlásí - jakým příkazem se "to dělá ? .. --------------------------------------------------- všude, kde se uvádí jméno souboru, jak při obsluze překladače, tak v uživatelském programu (TOUT,TIN) se testuje tvar jména : začíná-li číslem 1-8 následovaným dvojtečkou, použije se microdrive příslušného čísla a jména za dvojtečkou. Pozor na to, že na jméno zbývá jen 6 znaků (páska 8). Zápis souboru, jehož jméno na microdrive již existuje smaže starý soubor a nahradí novým - proto pozor na nechtěné přepsání nějakého důležitého souboru. ... překopíroval jsem si kopírovacím programem soubory z pásky na MD (příp. naopak) a teď mi s nimi Pascal nefunguje.. -------------------------------------------------------------- Pascal a uživatelský program v pascalu používá na pásce soubor typu Bytes (CODE), kdežto na microdrive výhradně soubory typu "PRINT" file. Kopírovací programy (např. TRANS 48) však tuto konverzi neprovádějí. Jednoduchou odpomocí je překopírovat je stejným kopírákem zpět na původní medium. Jinak lze konverzi provádět krátkým programem v Basicu - přepisem bajt po bajtu - t.j. PEEK a PRINT #s;n resp. INKEY$ a POKE. Abyste se vyhnuli podobným nepříjemnostem, kopírujte zdrojové programy mezi různými medii Pascalem - posloupnosti příkazů Get a Put s vhodným jménem (1:jméno nebo jen jméno). ... při překladu programu chvíli vše běží normálně a pak se ohlásí neexistující chyba .. ---------------------------- až se přesvědčíte, že ohlášená chyba je opravdu nesmyslem a Váš program je mimořádně dlouhý, pak vězte, že překladač nemá dost místa v paměti pro překlad. Několikrát a důkladně ověřte, že program je bez syntaktické chyby !! než budete dělat další pokusy. Přetéká-li opravdu paměť, nezbývá než použít příkaz $F - viz dále. ... text programu se nevejde do paměti počítače (ddto když se nevejde překlad nebo se po startu přeloženého programu ohlásí "Out of Ram") - jde to nějak obejít ... --------------------------------------- způsobů, jak uvolňovat postupně paměť pro překladač je několik (zrušení přidaných editorů, zkrácení zdrojového textu..), krajním případem je následující postup - pokud selže, nemáte naději. Text programu zapište na MD běžným způsobem, na pásku speciálním příkazem W (viz firemní manuál). Nevejde-li se celý najednou do paměti, pište "po kusech" a každý kus zaznamenejte jako další soubor. Zápisem vzniknou např. soubory : KUS1, KUS2 a KUS3. Nahrajte znovu překladač (u hp424 variantu 1) a na úvodní dotaz na Ramtop odpovězte 65535, další "odklepejte" ENTERem. Místo původních souborů dejte přeložit následující krátký program příkazem T1,32000,JMENO (pro hp424tm i 1:JMENO na MD) {$L-} {$F KUS1} {$F KUS2} {$F KUS3} překlad bude žádat dříve zapsané zdrojové texty. Z microdrive si je přečte sám, pásku musíte převinout a spustit manuálně - při režimu L- zvoleného první řádkou programu nemusíte magnetofon zastavovat mezi bloky, stihne překlad v meziblokové mezeře. Po dokončeném překladu (bez chyby !) připravte magnetofon na záznam nebo vložte kazetku do MD a odpovězte stiskem "Y". Přeložený program se zaznamená pod názvem "JMENO" jako soubor typu CODE. Na další dotaz "OK ?" odpovězte "N" (cokoli kromě Y"). Řízení se vrátí do Basicu. Dejte příkaz RANDOMIZE USR 24608 a měl by začít fungovat Váš program. Pokud je vše v pořádku můžete nadále používat i zaznamenaný soubor "JMENO": reset počítače (nebo vyp-zap), CLEAR 24597, LOAD "JMENO" (analogicky z MD) a RANDOMIZE USR 24608. Překladač Pascal k tomu už samozřejmě nepotřebujete. Při tomto způsobu lze zpracovat i velmi dlouhý zdrojový program. Výsledný kód však nemůže přesáhnout délku cca 26500 bajtů (z toho je 5395 tzv. runtimes a zbytek přeložený prog.) a zbytek paměti (cca 14400 bajtů) je k dispozici pro proměnné. Při kratším programu se místo uvolňuje pro proměnné - druhým teoretickým krajním stavem je žádný program a cca 35500 bajtů pro proměnné. ... jak odpovídat na úvodní dotazy po zatažení Pascalu -------------------------------------------------------- je důležité zejména u verze hp424. Na první dotaz odpovězte hodnotou, která je uvedena inverzně u zprávy "Warning" o řádek výše. Tuto, příp. nižší hodnotu musíte zapsat (u hp424 nelze zadat jen ENTER). Dalším dotazem je Ramtop pro "T". Odesláním bez čísla se akceptuje stejná hodnota, jako byla zadána v předchozím dotazu. Nebudete-li používat "Translate", je to lhostejné, jinak bude nejvhodnější odpovědí 65535 nechcete-li používat v cílovém programu 64 sloupcový displej. Chcete-li jej používat, zadejte hodnotu podle nabídky zobrazené o pár řádek výše. Třetím dotazem je volba velikosti tabulky. V drtivé většině případů stačí odeslat bez čísla - automaticky se zvolí velikost 1/16 volné paměti a je vyhovující. Změna je nutná pouze u programů, které při překladu ohlásí "No Table Size". Pak je nutno nahrát celý program znovu a zadat větší rozměr tabulky ("automatický" rozměr je cca 1500 bajtů). Je to atypický případ, obvykle signalizuje používání nepřiměřeně dlouhých identifikátorů - zkuste nejdříve zkrátit jména proměnných, procedur, typů apod., pravděpodobně bude po této úpravě tabulka stačit. ... příkaz READ a READLN mi nějak nefunguje, zejména na začátku programu se stává, že něco zadám a ono se to objeví až v dalším READ .. -------------- ač se chování Hisoft Pascalu zdá nelogické, odpovídá přesně původnímu a všeobecně uznávanému návrhu N.Wirtha. Pascal vznikl v době, kdy přímý klávesnicový vstup do počítače byl zcela výjimečný, takže odpovídá spíše hromadnému vstupu dat, kdy je po otevření souboru (RESET INPUT) první znak příkazu READ okamžitě k dispozici. Klávesnice, resp. lidský faktor tento předpoklad zcela anuluje. K nesrovnalosti dochází u rošíření READ i na "řetězce", tedy ARRAY[1..N] OF CHAR. Chcete-li napodobit vstup tak, jak jste zvyklí z Basicu, čtěte řetězce zásadně příkazem READLN;READ(A) , kde A je "řetězec" a pro číselné vstupy nepoužívejte READLN, ale výhradně READ(N). Při tomto způsobu čtení se Pascal chová podle zvyklostí Basicu s tím rozdílem, že lze zapsat řadu čísel i "do foroty", když namísto ENTER vložíte mezeru a píšete další číslo, určené pro příští příkaz READ. Tak jde předem připravit text do rozsahu 80 sloupců. ...mohu přenášet data mezi Basicem a Pascalem ?.. ------------------------------------------------------ neexistuje žádný jednoduchý způsob přenášení číselných hodnot. Oba programy mají zcela odlišnou vnitřní interpretaci čísel v plovoucí desetinné čárce. Pascal odpovídá přibližně zvyklostem větších počítačů, kdežto Basic je poplatný "kalkulačkové" přesnosti a uchovává číselné hodnoty v poněkud delší a zakódovanější formě. Jedinou slabou náhradou může být přenos pomocí microdrive souborů typu "PRINT". Ty jsou "čitelné" oběma systémy, ale jde o přenos textů - ASCII znaků. V HISOFT Pascalu tomu odpovídá TIN a TOUT pole, deklarovaného jako ARRAY[1..N] OF CHAR. Na straně Pascalu nedochází k žádné konvezi, v Basicu při INKEY$#n také ne (INPUT se nedá vždy použít) - lze tak přenést obecně posloupnost libovolných bajtů, nejen ASCII. Jak jsou interpretovány záleží na uživatelských programech a lze tak nouzově přenést i řadu integer čísel. Pro floating point čísla je to však cesta dost neschůdná. ... víte, von bude ten paskal asi špatnej, já tam napíšu správně program, von se přeloží, ale nefunguje to.. --------------------------------------------------- nebude špatnej. V drtivé většině případů jde o chybu programátora, ač je tento skálopevně přesvědčen o opaku. I když samozřejmě každý program může (a většinou i má) nějakou chybu, neošetřený mezní stav apod., HISOFT Pascal není výjimkou, je mnohem pravděpodobnější, že Váš program dělá přesně to, co jste do něho napsal, narozdíl od toho, co jste chtěl, aby dělal. Nějakým nedopatřením jste mu to "chtění" sdělil trochu jinak a počítač, věren svému společenskému zařazení "geniálně rychlý idiot" Vám to jen bleskurychle předvádí. Jednou z velmi častých chyb "odchovanců" SPECTRUM Basicu je použití neinicilaizované proměnné. Velice dobrou, u jiných Basiců téměř neznámou vlastností Spectrum Basicu je hlášení chyby "Varible not found" - proměnná nenalezena. Tuto situaci ponechá Pascal bez povšimnutí a počítá s tím, co v paměti nalezl - nejčastěji nulu, obecně nějaké "smetí". Výsledek ovšem vypadá podle toho.