logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Kompilacja sterownika konwersji HP-GL/2 na MDG-1 - jak to zrobić?

robertsa 25 Sie 2005 16:22 2773 23
REKLAMA
  • #1 1763488
    robertsa
    Poziom 13  
    Posty: 153
    Ocena: 1
    Czy mogę prosić kogoś o skompilowanie tego
    sterownika dokonującego konwersji plików graficznych ze standardu HP-GL/2 na język poleceń plotera MDG-1 lub o podpowiedź czym to skompilować
    Nawet nie wiem w jakim to jest języku

    program HPGL;
    uses crt,dos,printer,graph,bgidriv;
    
    {$G+}
    
    var
    nazwa_pliku: string[12];
    mnemonika: string[2];
    instrukcja: string[20];
    skladnik: array[1..4] of string[8];
    parametr: array[1..4] of integer;
    plik: text;
    i,i2,j,k,p,pisak: byte;
    driver,mode,l: integer;
    v: boolean;
    zbior_sterownika: file;
    adres_sterownika: pointer;
    
    
    begin
    if RegisterBGIdriver(@EGAVGADriverProc) < 0 then Halt(1);
    clrscr;
    if paramcount=0 then 
    begin
         write('Brak nazwy pliku!');
         Halt(1);
    end
    else nazwa_pliku:=paramstr(1);
    assign(plik,nazwa_pliku);
    v:=(paramcount=2) and (paramstr(2)='v');
    reset(plik);
    driver:=vga;
    mode:=vgahi;
    if not v then
    Writeln(Lst,'F') else
    begin
         initgraph(driver,mode,'');
         setcolor(white);
         setviewport(150,0,490,479,clipon);
         floodfill(100,100,white);
    end;
    delay(2000);
    while not eof(plik) do
    begin
         readln(plik,instrukcja);
         if length(instrukcja)=3 then i:=0 else i:=1;
         for j:=3 to length(instrukcja)-1 do
         if instrukcja[j] in [' ',','] then inc(i);
         i2:=i;
         if i>0 then repeat
         k:=length(instrukcja)-1;
         p:=k-1;
         while not (instrukcja[p] in [' ',',','A'..'Z']) do 	
         dec(p);
         inc(p);
         val(copy(instrukcja,p,k+1-p),parametr[i],l);
         dec(i);
         delete(instrukcja,p,k+2-p);
         until not(length(instrukcja)>2);
         mnemonika:=copy(instrukcja,1,2);
    
    if mnemonika='PU' then  {ruch podniesionego pisaka}
    begin
         for i:=1 to i2 do
         begin
              if v then parametr[i]:= parametr[i] div 25 else 
              parametr[i]:=parametr[i] div 4;
              str(parametr[i],skladnik[i]);
         end;
         instrukcja:='M'+skladnik[1]+','+skladnik[2];
         if v then moveto(parametr[1],480-parametr[2]) else
         writeln(Lst,instrukcja);
    end;
    
    if mnemonika='PD' then  {ruch opuszczonego pisaka}
    begin
         for i:=1 to i2 do
         begin
              if v then parametr[i]:= parametr[i] div 25 else 	
              parametr[i]:=parametr[i] div 4;
              str(parametr[i],skladnik[i]);
         end;
         instrukcja:='D'+skladnik[1]+','+skladnik[2];
         if v then lineto(parametr[1],480-parametr[2]) else 
         writeln(Lst,instrukcja);
    end;
    
    if mnemonika='SP' then  {zmiana pisaka}
    begin
         case parametr[1] of
         1,8: if v then setcolor(black) else parametr[1]:=1;
         2,7: if v then setcolor(lightblue) else 
              parametr[1]:=2;
         3,5: if v then setcolor(lightred) else parametr[1]:=4;
         4,6: if v then setcolor(lightgreen) else 
              parametr[1]:=3;
         end;
         pisak:=parametr[1];
         str(parametr[1],skladnik[1]);
         instrukcja:='J'+skladnik[1];
         if not v then writeln(Lst,instrukcja);
    end;
    
    if mnemonika='LT' then  {zmiana rodzaju linii}
    begin
         if i2=0 then instrukcja:='L0' else
         begin
              case parametr[1] of
              3:      if v then setlinestyle(2,0,1) else 
                      parametr[1]:=1;
              2,4..8: if v then setlinestyle(3,0,1) else 
                      parametr[1]:=2;
              end;
              str(parametr[1],skladnik[1]);
              instrukcja:='L'+skladnik[1];
         end;
         if i2=0 then setlinestyle(0,0,1);
         if not v then writeln(Lst,instrukcja);
    end;
    
    end;
    close(plik);
    if v then repeat until keypressed;
    if v then closegraph;
    end.

    Moderowany przez Light-I:

    Wstawiono kod na własciwe miejsce dla poprawy czytelności. ;) (tagi "code").

  • REKLAMA
  • #2 1763606
    radi
    Poziom 13  
    Posty: 69
    Pomógł: 4
    Ocena: 1
    Wygląda na delphi.

    pzdr
  • REKLAMA
  • #5 1764633
    robertsa
    Poziom 13  
    Posty: 153
    Ocena: 1
    Kompletnie sie na tym nie znam
    proba kompilacji tym pascalem wywala bląd 15: file not found (BGIDRIV.TPU)
    nie wiem skąd wziąśc taki plik
  • REKLAMA
  • #7 1766226
    robertsa
    Poziom 13  
    Posty: 153
    Ocena: 1
    Nie dałem rady skompilować bgidriv,ale znalazłem w sieci BGIDRIV.TPU skopiowałem do katalogu kompil. i znowu błąd 17 :Invalid compiler directive.
    uses crt,dosprinter,graph,bgidriv:
    co to oznacz?
  • #8 1769734
    KwoiteK
    Poziom 16  
    Posty: 112
    Pomógł: 14
    Ocena: 10
    chodzi o dyrektywe



    na poczatku programu. Jest potrzebna gdy program bedzie uruchamiany na komputerach klasy 80286.
    Usun te linijke i skompiluj. Z tego co wywnioskowalem to program trzeba odpalic z parametrem (nazma pliku)

    Pascalem zajmowalem sie bardzo dawno tak wiec moge sie mylic.

    Pozdrawiam
  • #9 1770034
    robertsa
    Poziom 13  
    Posty: 153
    Ocena: 1
    wywaliłem to {$G+}
    niby się skompilowało bez błedów ,ale jak z tego zrobic plik wykonywalny exe
  • #10 1770520
    Sam Sung
    Poziom 33  
    Posty: 2013
    Pomógł: 227
    Ocena: 583
    robertsa napisał:
    jak z tego zrobic plik wykonywalny exe

    Ustaw "Destination" na "Disk" w Turbo Pascalu lub kompiluj w BP zamiast w TURBO.
    Ewentualnie odpal kompilator z linii poleceń - chyba TPC.
  • #11 1773762
    robertsa
    Poziom 13  
    Posty: 153
    Ocena: 1
    Dało się skompilować ale po uruchomieniu programu kolejny błąd
    BGI Error : Graphics not initialized (use InitGraph)
  • REKLAMA
  • #13 1774351
    robertsa
    Poziom 13  
    Posty: 153
    Ocena: 1
    niestety niepomogło
  • #14 1774440
    KwoiteK
    Poziom 16  
    Posty: 112
    Pomógł: 14
    Ocena: 10
    a nie masz przypadkiem zainstalowane na c:\program files\.... itd?
    z tego co wiem to niestety pascal sobie z "program files" nie poradzi. Taki jest DOS.

    Pozdrawiam
  • #15 1774648
    Sam Sung
    Poziom 33  
    Posty: 2013
    Pomógł: 227
    Ocena: 583
    KwoiteK napisał:
    a nie masz przypadkiem zainstalowane na c:\program files\.... itd?
    z tego co wiem to niestety pascal sobie z "program files" nie poradzi. Taki jest DOS.

    Powinien sobie poradzić, jeśli dostanie C:\PROGRA~1\...
  • #16 1776448
    robertsa
    Poziom 13  
    Posty: 153
    Ocena: 1
    Przeniosłem tp z program files od razu na c: pozmieniałem ścieżki dostępu w programie idalej błąd BGI Error : Graphics not initialized (use InitGraph)
  • #17 1778254
    jrk
    Poziom 14  
    Posty: 50
    Pomógł: 5
    Ocena: 1
    OK. Jesli masz dalej problemy z kompilacją t sciagnij zalacznik. Skompilowany program razem ze źródłem i steronikiem.
    Załączniki:
    • HPGL.ZIP (20.15 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #18 1779927
    robertsa
    Poziom 13  
    Posty: 153
    Ocena: 1
    Po uruchomieniu programu wywala mi nadal błąd BGI Error : Graphics not initialized (use InitGraph) .
    uuchamiam to w w98 może tu jest błąd
    Program uruchamia sie :hpgl.exe nazwa_pliku_do_kreślenia [v]
    Podanie na końcu linii poleceń opcji "v" powoduje wyświetlenie obrazu zapisanego w pliku na ekranie monitora. Jeżeli nie użyjemy tej opcji, program będzie wysyłał kolejne polecenia na wyjście równoległe Lpt1.
  • #19 1781517
    jrk
    Poziom 14  
    Posty: 50
    Pomógł: 5
    Ocena: 1
    Sprawdzalem na 2 innych kompach, jeden z Win XP drugi z 98 i program sie uruchamial bez zadnych bledów. Nie mam pomyslu dlaczego u Ciebie sie nie uruchamia.
  • #20 1783068
    robertsa
    Poziom 13  
    Posty: 153
    Ocena: 1
    sprawdzałem na trzech kompach i to samo.może jakiegos sterownika niemam czy co.uruchamiałes to z plikiem jakiims .plt (hpgl) czy sam program


    Jescze jedno pytanie jaki jezyk jest najbardziej zbliżony do pascala,żeby ten program przepisać na windowsa
  • #21 1804100
    jrk
    Poziom 14  
    Posty: 50
    Pomógł: 5
    Ocena: 1
    Sorry ze nie odpowiadalem ale nie mialem dostepu do netu. Skompilowalem jeszcze raz ten program i sprawdzalem z tymi plikami co mi wyslales i nie wywalal bledu, i wyswietlal tam jakies kreski, ale wydaje mi sie ze jest skopany algorytm rysowania.
  • #22 1804417
    Sam Sung
    Poziom 33  
    Posty: 2013
    Pomógł: 227
    Ocena: 583
    robertsa napisał:
    Jescze jedno pytanie jaki jezyk jest najbardziej zbliżony do pascala,żeby ten program przepisać na windowsa

    Delphi jest bardzo zbliżony do Pascala. Tylko będzie trzeba usunąć wszelkie odwołania do modułu Graph.
  • #23 1811515
    robertsa
    Poziom 13  
    Posty: 153
    Ocena: 1
    domyślam się że samo wyrzucenie odwołania do Graph nie wystarczy .Gdzie mógłbym znaleźć opis wszystkich instrukcji użytych w programie , i czy się podmienić te instr. na te z delphi czy to tylko marzenia
  • #24 1811956
    Sam Sung
    Poziom 33  
    Posty: 2013
    Pomógł: 227
    Ocena: 583
    Wydaje mi się, że ten program ma 2 tryby pracy:
    1) generowanie pliku wynikowego
    2) rysowanie na ekranie
    i tylko do tego drugiego jest potrzebny moduł Graph.
    Trzeba więc skopiować tylko kod, który jest wykonywany, gdy v = False (i z niego jeszcze powycinać odwołania do Graph). Reszta powinna dać się przenieść, pod warunkiem zamiany np. Close na CloseFile. Ale to już Delphi poinformuje, jak mu coś nie będzie pasować :)
    Zaś co do kompilacji, to trzebaby ten kod umieścić np. w obrębie procedury obsługi jakiegoś przycisku. Oczywiście bez części "program" i "uses". Z kolei do właściwego uses trzeba będzie pewnie dodać SysUtils.

Podsumowanie tematu

✨ Dyskusja dotyczy kompilacji sterownika konwersji plików graficznych ze standardu HP-GL/2 na język poleceń plotera MDG-1, napisanego w języku Pascal/Delphi. Kod źródłowy zawiera moduły crt, dos, printer, graph, bgidriv, co wskazuje na Turbo Pascala lub Delphi. Użytkownik napotkał problemy z kompilacją, m.in. brak pliku BGIDRIV.TPU oraz błędy kompilatora związane z dyrektywami i inicjalizacją grafiki (BGI Error: Graphics not initialized). Rozwiązania obejmowały pobranie brakujących plików z repozytoriów, usunięcie dyrektywy {$G+}, poprawne ustawienie ścieżek do sterowników BGI (np. EGAVGA.BGI) oraz kompilację w Turbo Pascalu z ustawieniem "Destination" na "Disk". Problem z inicjalizacją grafiki mógł wynikać z uruchamiania programu w Windows 98 i lokalizacji plików w katalogu "Program Files". Sugerowano przeniesienie środowiska kompilacji na prostszą ścieżkę (np. C:TP). Program ma dwa tryby pracy: generowanie pliku wynikowego i rysowanie na ekranie, gdzie moduł Graph jest potrzebny tylko do trybu wizualizacji. Wskazano, że Delphi jest bardzo zbliżone do Pascala i można przepisać program na Delphi, usuwając odwołania do modułu Graph i dostosowując instrukcje (np. Close na CloseFile). Kompilacja i uruchomienie wymaga odpowiedniego środowiska i konfiguracji ścieżek do sterowników graficznych BGI.
Wygenerowane przez model językowy.
REKLAMA