Keresés

Részletes keresés

Vgyuri Creative Commons License 2009.09.25 0 0 723

Ez az a program, ami nem megy:

 

{$M $4000,$1000,$2000}
program execpro2;
uses dos;

procedure proba (cmd, param: string);
var
    dosexit,doserr:integer;
begin
    SwapVectors;
    Exec (cmd, param);
    SwapVectors;
    dosexit:=DosExitCode;
    doserr:=DosError;
    WriteLn (cmd,' ',param, ': DosExitCode=', dosexit,' DosError=', doserr);
end;

begin
    if (ParamCount=1) and (ParamStr(1)='recursion') then begin
        WriteLn ('Hoppá, meghívtam önmagam!');

    end else begin
        Proba (GetEnv ('COMSPEC'), '/C ozihivo.bat');
    end;
end.

Ezen belül a batchfile:

 

c:\oziexplorer\oziexp.exe D:\OMAPGEN\actual.map

Előzmény: Vgyuri (722)
Vgyuri Creative Commons License 2009.09.25 0 0 722
Nem érted a kérdsét. Önállóan futtatod a batch fájlt, vagy bele teszed az általad a multkor itt beadott, és általam azóta is használt execpro programocskába?
Előzmény: NevemTeve (721)
NevemTeve Creative Commons License 2009.09.25 0 0 721
C:\>TYPE VALAMI.BAT
"C:\PROGRAM FILES\..." paraméterek
Előzmény: Vgyuri (720)
Vgyuri Creative Commons License 2009.09.25 0 0 720
Egy külön batchfájlon belül tetted idézójelbe a parancssort és a bathfájlt hívtad meg az execpro-val? Mert ezt kipróbáltam, nem megy és így, idézőjelekkel persze direktben sem fut le a batchfile.
Előzmény: NevemTeve (719)
NevemTeve Creative Commons License 2009.09.25 0 0 719
Én is csináltam egy .BAT fájlt, benne az, hogy C:\program files\java\jre1.6.0_07\bin\java.exe, és nem találta. Kicseréltem arra, hogy "C:\program files\java\jre1.6.0_07\bin\java.exe", úgy működött.
Előzmény: Vgyuri (718)
Vgyuri Creative Commons License 2009.09.25 0 0 718
De ha a batchfájlt önállóan indítom el parancssorból, akkor lemegy gond nélkül, a benne (a pathban) levő szóközök ellenére. Csak az execpro-n belül van baja.
Előzmény: NevemTeve (717)
NevemTeve Creative Commons License 2009.09.24 0 0 717
A "COMSPEC" nem bont ki semmit, a BAT-fájlodban van valami elcsépelve... Netán szóköz is van az elérési útvonalban? Mondjuk c:\Program Files\Özi Explorer\ mintára?
Előzmény: Vgyuri (716)
Vgyuri Creative Commons License 2009.09.24 0 0 716

Hát az nem megy. Pedig nem is közvetlenül indul az OziExplorer, hanem egy ozihivo.bat-ot kellene indítani a COMSPEC-es mogoldással. Azon belül van a hosszú path-t tartalmazó parancssor, mert az ozi-t nem lehet egy fájlként áthelyezni a munkakönyvtárba. Viszont a COMSPEC kibontja a batchfájlt, így felszínre kerül a hosszú fájlnév és megjelenik az Ismeretlen programról szóló hibaüzenet. Az ozihivo.bat viszont önállóan indítva a parancssorból lefut  rendesen és elindítja a világ másik végén levő echte widózos programot.

 

Ha viszont odatelepítem az Ozi-t a munkakönyvtárba, vagy a munkafájlokat az Ozi könyvtárba, akkor megy, csakhát ez nagyon csúnya megoldás.

Előzmény: Vgyuri (715)
Vgyuri Creative Commons License 2009.09.23 0 0 715

És miközben sima parancssorban elfogadja a 9 betűs nevet is, addig ebben a "COMSPEC" kombinációban nem? Levettem a 9. betűt és mindjárt működik. Nagy vagy!!! Köszi.

 

A következő próbálkozás a komplett Özyexplorer program elindítása, de annak az exéjét (merthogy eleve fel van készítve parancssoros indításra) eleve ozyexp.exe-nek hívják.

Előzmény: NevemTeve (714)
NevemTeve Creative Commons License 2009.09.23 0 0 714
DOS-ban nincs clipboard.exe csak CLIPBO~1.EXE, erre figyelj!
Előzmény: Vgyuri (713)
Vgyuri Creative Commons License 2009.09.23 0 0 713

Kipróbáltam, felemás eredménnyel. Az egyik méretes, echte DOS-os programmal, ami miatt az egészet elkezdtem, működik. A másik, a Windows clipboard fájlbaírására csinált (tehát nyilván windózos dolgokat használó) kis nyúlfarknyi programmal meg nem. Azt irja ki, hogy "rossz program vagy fájlnév",(ha a programot parancssor ablakban indítom), holott ott van vele azonos könyvtárban. Eközben a DOSERROR és az EXITCODE nulla, nyilván mert ahhoz az exe-fájlt előbb meg kellene találni, és meg kellene próbálni elindítani.

 

El akartam küldeni neked a clipboard-os változatot, nézd meg, mit tudsz megállapítani, de nem publikus a címed. Viszont magát a clipboard.exe programot (forrással együtt), le tudod tölteni innen.

Előzmény: NevemTeve (700)
naox Creative Commons License 2009.09.06 0 0 712
mar miert ne lehetne? Van IP protokoll es szamos konnyen hasznalhato FTP progi DOS ala, egyszeruen exec-kel meghivod a megfelelo parameterekkel ellatott FTP programot....
Előzmény: Törölt nick (707)
Vgyuri Creative Commons License 2009.09.05 0 0 711
Van a Freepascalnak magyar nyelvű leírása? Az új dolgok tanulásánál az a baj, hogy nem tudom angolul nem tudok elég jól, vagy tartalmilag értek valamit félre :-)
kisspetya Creative Commons License 2009.09.05 0 0 710
A 2. mondatban a Pascalt a Borland/Turbo Pascal fejlesztői környezetre értettem. Elnézést, hogy nem fogalmaztam szakszerűen. Azt hittem érthető. Tévedtem.
Előzmény: DJG (709)
DJG Creative Commons License 2009.09.05 0 0 709
Miért ne lehetne Pascalban? Egyrészt a Delphi, az mi? Az egy fordítóprogram, fejlesztői környezet, de a benne levő nyelv neve továbbra is Pascal (ámbár kétségtelenül annak egy dialektusa, és nem mindenben szerencsés dialektusa, és a gyártó valóban igyekszik Delphinek hívni, de ez butaság).

De, mint tanult kartácsak itt már meg is jegyezték, ott van a Free Pascal. Egyrészt kompatibilis a régi Pascal-veriókkal, másrészt a Delphivel is, és ilyesmiket minden további nélkül meg lehet oldani vele, természetesen.
Előzmény: kisspetya (708)
kisspetya Creative Commons License 2009.09.05 0 0 708
És mi lenne, ha a bácsi próbálna végre túllépni a Borland Pascalon? :)
Jogos, hogy ilyen feladatokkal már nem célszerű Pascalban szenvedni. Irány a Delphi ;)
Előzmény: Vgyuri (706)
Törölt nick Creative Commons License 2009.09.05 0 0 707
Hoi,

Borland Pascalban sztem sehogy.... (bocs, assembly hívásokkal valszeg meg lehet kérni a megfelelő windows megszakítást, és utána konvertálni, de sztem nem lenne a legkönnyebb feladat :) )

Helyette: Freepascal, Delphi...

Üdv,
Zs
Előzmény: Vgyuri (706)
Vgyuri Creative Commons License 2009.09.05 0 0 706
Azt kérdezném a bácsiktól és néniktől, hogy hogyan lehetne megoldani a következő feladatatot. Adva van egy netről is letölthető repülőtérkép, ahol van egy földrajzi alap és GPX fájl formájában a csak ritkán változó fedvények. (Én bütyköltem össze.)

 

Két fedvény viszont naponta változik, ez is letölthető .GPX formátumban, azt a térképre Ozi.plt trackké konvertáló prgram már megvan - szokásom szerint Borland-Pascalban. Hogyan lehetezt a programot kiegszítenazzal az elején, hogy automatikusan töltse le a netről a saját bemenő .gpx fájlját? A Borland Pascalból én ennél fontosabbakat sem tudok, de abban biztos vagyok, hogy netes letöltés nincs benne. (Hacsak nincs valami új könyvtári procedúra :-)

NevemTeve Creative Commons License 2009.08.01 0 0 705
(DOS-os programja van, és USB-s portja)
Előzmény: ghoezeke mate (704)
ghoezeke mate Creative Commons License 2009.08.01 0 0 704
Már hogyne volna windowsos soros-port kezelő lehetőség! Nézz csak utána, ilyesmi néven futnak az ügyek, hogy Comm port.
Előzmény: Vgyuri (702)
Vgyuri Creative Commons License 2009.07.31 0 0 703

Köszi, ezeket is ki fogom próbálni.

 

Előzmény: NevemTeve (700)
Vgyuri Creative Commons License 2009.07.31 0 0 702

Nem Turbo Pascal, haenm Borland Pascal, az már valamivel jobb, csak nincs könyvem róla, most bújom az antikváriumot. A többi Pacaltól félek, mert a BP sokszor önmagával sem kompatíbilis, a két gépemen levő között verziós különbségek vannak a könyvtári unitokban is, és ami az egyik gépemen lefordul, az a másikon nem. Ez pedig egy nagyon bonyolult fordítási opciókkal teletűzdelt 10+ saját unitot használó háló, amit nem én írtam, hanem a fiam programozás záródolgozatnak, tehát beletett apait-anyait a strukturált programozás szépségeiből :-)

 

Úgyhogy egyetlen esélyem visszaállítani azt a konfigurációt, amiben utóljára jól lefordult, és azután apró lépésekkel belepiszkálni egy-egy unitba olyan helyeken, ami nem kavar be máshol.

 

A program egyébként windóz alatt fog futni, éppen amiatt kell, mert a DOS alatt megírt in-out utasításokra épülő fizikai sorosport kezelés az újabb gépeken már nem megy, mert nincsen is olyan :-(

 

Végülis úgy néz ki, hogy Teve olvtárs egyszerű javaslata a {$i+} átirányításról és az IOresult-ról eddig bejött, mióta ezt beletettem, nem veszett össze a két program a fájlon, pedig órákig futott a GPS-el az ablakban :-)

 

Előzmény: DJG (701)
DJG Creative Commons License 2009.07.30 0 0 701
Szempont, hogy ősi Turbo Pascallal fordítsd, és tényleges DOS alatt fusson, vagy mehet Windows alatt valami mai fordítóval (konkrétan Free Pascal)? Mert Windows alatt azért van módszer annak eldöntésére, hogy egy fájlt megkapsz-e vagy sem, mert más is igényt tart rá...
Előzmény: Vgyuri (698)
NevemTeve Creative Commons License 2009.07.30 0 0 700
(bár van benne két felesleges szóköz, ahol túl hosszúak voltak a sorok...)
{$M $4000,$1000,$2000}
program execprob;
uses dos;

procedure proba (cmd, param: string);
var
    dosexit,doserr:integer;
begin
    SwapVectors;
    Exec (cmd, param);
    SwapVectors;
    dosexit:=DosExitCode;
    doserr:=DosError;
    WriteLn (cmd,' ',param, ': DosExitCode=', dosexit,' DosError=', doserr);
end;

begin
    if (ParamCount=1) and (ParamStr(1)='recursion') then begin
        WriteLn ('Hoppá, meghívtam önmagam!');

    end else begin
        Proba (GetEnv ('COMSPEC'), '/C COPY execprob.pas execprob.dup');
        Proba ('EXECPROB.EXE', 'recursion');
    end;
end.
Előzmény: NevemTeve (699)
NevemTeve Creative Commons License 2009.07.30 0 0 699
Végső esetben a hibakereséssel is meg lehetne próbálkozni... első próbaként ezt próbáld meg futtatni:
{$M $4000,$1000,$2000}
program execprob;
uses dos;

procedure proba (cmd, param: string);
var
    dosexit,doserr:integer;
begin
    SwapVectors;
    Exec (cmd, param);
    SwapVectors;
    dosexit:=DosExitCode;
    doserr:=DosError;
    WriteLn (cmd,' ',param, ': DosExitCode=', dosexit,' DosError=', do serr);
end;

begin
    if (ParamCount=1) and (ParamStr(1)='recursion') then begin
        WriteLn ('Hopp , meghĽvtam nmagam!');

    end else begin
        Proba (GetEnv ('COMSPEC'), '/C COPY execprob.pas exe cprob.dup');
        Proba ('EXECPROB.EXE', 'recursion');
    end;
end.

Ebben van példa a COMSPEC használatára is, meg a direkt elérésre is.
Előzmény: Vgyuri (698)
Vgyuri Creative Commons License 2009.07.30 0 0 698

Az is én voltam, és nem jött be az általad javasolt megoldás, a képernyő egyet villan (mintha DOS-ablakot akarna nyitni), azután nem történik semmi. Most a világ csúfjára kétfelé vettem a programot éss egy bat fájl először lefuttatja az elejét, azután az exec-el hivandó programot, azutána hátsó felét.

 

Most kezdek próbálgatni egy GUI generátort (AutoIT), hogy legalább pofája legyen a dolognak és ne a bat fájlhoz kelljen parancssorba paraméterként beadni az induló adatokat.

Előzmény: NevemTeve (697)
NevemTeve Creative Commons License 2009.07.30 0 0 697
Ugyanitt volt példa az exec-re, kicsit kell csak visszalapozni.
Előzmény: Vgyuri (695)
Vgyuri Creative Commons License 2009.07.30 0 0 696

Köszi, majd ha már nem lesz más bajom, ezt is megcsinálom, az előbbiek miatt nem zavar. Az inkább, hogy a másik soros vonal kezelő program időnként fájrontot csinál, becsukja a soros vonalat és válogatott káromkodásokkal kiszáll. (Pl. ha a képernyő-takarékoskodó lekapcsolta a képernyőt én meg az egér megmozdításával vissza hozom.) De ezt már keresi az írója, valószínüleg a zavaró aktusok prioritása magasabb, mint a sorosvonal-olvasóé.

 

A mozgótérképes program nagyobb gond, mert annak az írója nem elérhető, és egy 48 000 soros agyonstruktúrált programról van szó. Az én egyféléves programozói tudásommal nem is látom át. A hályogkovács bátorságával nyulkálok bele a valamelyest átlátható részekbe.

Előzmény: ghoezeke mate (694)
Vgyuri Creative Commons License 2009.07.30 0 0 695

Nem aggaszt. Semmi gond nincs, hogy kétszer jezi ugyanazt a poziciót. Viszont ha a kiolvasó program üres fájl talána, nem tdom, mi történne. Utána meg kiűríti a sorosvonal kezlő program.

 

Apropó, egy Borland Pascal program el tudna indítani valahogy egy másik, windózos programot? (Dotnet2 elemeket is használ.) Jelenlegi próbálkozásaim szerint még a DOS-os prograok sem indulnak el Exec-el.

Előzmény: NevemTeve (693)
ghoezeke mate Creative Commons License 2009.07.30 0 0 694
Azt megteheted, hogy ugyanabban az időben készített fájlt ne olvassa be.
Így működik a dolog:

Változók:

FileName:STRING[12];
F:FILE;
FileT:LONGINT;
FTime:DateTime;

Fájl date-time kiolvasása:

Assign(F,FileName);
Reset(F);
GetFTime(F,FileT);
Close(F);
UnPackTime(FileT,FTime);

Az FTime.Year...Sec tagokkal rendelkezik.
Előzmény: Vgyuri (692)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!