OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 12.09.2024, 20:40

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 3 ] 
Autor Zpráva
PříspěvekNapsal: 06.07.2024, 20:49 
Offline
Profík

Registrován: 15.01.2014, 20:08
Příspěvky: 837
Bydliště: Šlapanice
Has thanked: 140 times
Been thanked: 118 times
Dopracoval jsem se do stavu, že by bylo záhodno převést některé programy, co používám na evidenci součástek z MS FORTRAN 77 (16 bit) do něčeho modernějšího. Konkrétně jsem zakotvil u Gfortranu (32bit). Jeden program se poved převést ale u druhého mám problém, že používá doplněnou funkci na test klávesnice a zatím se mi nepovedlo najít adekvátní náhradu.

Konkrétně jde o funkci IFBRK() která provede test klávesnice, když není stisknutá žádná klávesa tak funkce vrátí nulu, jinak vrátí číselný ASCII kód stisknuté klávesy viz úryvek kódu. V dokumentaci k Gfortranu jsem narazil na podprogram/funkci SIGNAL (strana 269) co by se asi dala použít. V dokumentaci je ukázkový program a udělá to, že čte klávesnici do stisku CTRL C. Po stisku CTRL C se program ukončí a zadané znaky se objeví v příkazovém řádku.

S angličtinou nejsem kamarád a vůbec nemám ponětí jek se dopracovat ke kýženému výsledku. Najde se nějaká dobrá duše co mi pomůže :help: :help: :help: .

Kód:
C *************************** Volba rezimu *****************************

      i=0
      do while (i.eq.0)
    i=ifbrk()
      end do
      write(*,'(1x,a1,a)')27,'[2J'
      write(*,'(1x,a)')ver
      write(*,'(1x,2(a1,a),a,a1,a)')
     # 27,'[3;36H',27,'[1;37m','PROGRAM E',27,'[0m'
      if (i.eq.86.or.i.eq.118) then
    co=' Vkladat'
      else if (i.eq.80.or.i.eq.112) then
    co='Prohlizet'
      else if (i.eq.79.or.i.eq.111) then
    co=' Opravit'
      else if (i.eq.84.or.i.eq.116) then
    co='   Tisk'
      else if (i.eq.72.or.i.eq.104) then
    co='  Hledat'
      else if (i.eq.83.or.i.eq.115) then
    co='   Spoj'
      else if (i.eq.75.or.i.eq.107) then
    CLOSE(unit=2)
    CLOSE(unit=1)
    write(*,'(1x,a1,a)')27,'[0m'
    stop'KONEC programu E'
      else if (i.eq.90.or.i.eq.122) then
    call znaceni
    goto 5
      else
    goto 5
      end if

_________________
Ne všichni jsme měli z češtiny za jedna, aneb jsem dyslektik a dysgrafik.

http://www.sapi.cz/


Nahoru
 Profil  
 
PříspěvekNapsal: 06.07.2024, 22:03 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2894
Has thanked: 246 times
Been thanked: 633 times
To není čtení klávesnice ale zachytávání signálu od jiného procesu, viz https://www.linuxexpres.cz/praxe/signaly-a-procesy-2 nebo http://phoenix.inf.upol.cz/~outrata/courses/os2/texts/signals_l.html.

Co tak koukám po netu, zřejmě nejschůdnější možnost jak to udělat je prý použít podprogram napsaný v C :o

Podívej se na funkce FGET a FGETC, jestli by se jim to nedalo přizpůsobit.

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
PříspěvekNapsal: 06.07.2024, 22:55 
Offline
Profík

Registrován: 15.01.2014, 20:08
Příspěvky: 837
Bydliště: Šlapanice
Has thanked: 140 times
Been thanked: 118 times
Ta původní funkce IFBRK() je psaná v asembleru a přilinkovaná do knihovny. Ty funkce FGET a FGETC jsou anachronizmus z F77 a není doporučené je používat. Co jsem tak pochopil z kontextu tak ty funkce mají spíše něco společného se soubory. Od F90 jde vložit kód z C++ a má pocit že to jde i na opak. Taky mám ten pocit, že to skončí u podprogramu v C++ ale absolutně netuším jak na to.

Ten ukázkový program u FGET vrátí text, co byl napsán při spuštění programu a to vlastní název programu a pak případné texty kdy oddělovač je mezera.

Ten ukázkový program u FGETC ukládá text, až dojde k naplnění, jde ukončit ENTREM a vypíše se jen počet definovaných znaků.

_________________
Ne všichni jsme měli z češtiny za jedna, aneb jsem dyslektik a dysgrafik.

http://www.sapi.cz/


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 3 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz