Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

xHarbour

131 views
Skip to first unread message

Szczepan

unread,
Oct 11, 2008, 3:18:11 AM10/11/08
to
Postanowilem przekompilowac moja stara aplikacje (ok 200 prg) w Clipperze
przy pomocy xHarbour.
Kilka godzin zajelo mi usuwanie bledow kompilacji w koncu otrzymalem plik
EXE (3 085 KB).
Sprobowalem go uruchomic z tego samego katalogu gdzie byl exec Clipperowy.
Niestety, tylko na ulamek sekundy otwiera sie czarne okienko DOSowe po czy
nic sie nie dzieje bez zadnego komunikatu.
Poradzcie mi w jaki sposob moge podejrzec liste bledow uruchamiania?
Jak znalezc przyczyne?
--
Szczepan


Jacek

unread,
Oct 11, 2008, 5:11:44 AM10/11/08
to

start/uruchom/cmd?

Szczepan

unread,
Oct 11, 2008, 6:05:11 AM10/11/08
to

Użytkownik "Jacek" <ad...@moj.pl> napisał
>
> start/uruchom/cmd?

Tak tez uruchamialem.
Nic sie nie dzieje dokladnie tak samo jakbym nacisnal tylko Enter.

--
Szczepan


artiun

unread,
Oct 11, 2008, 7:14:35 AM10/11/08
to
Szczepan pisze:
Dawno nic w Harbour nie robiłem.
Dla dokładnego sprawdzania dawało sie uzyskać logi z błędami.
Jest coś takiego:
SET ERRORLOG TO [ERRORFILE] [ADDITIVE]
spróbuj dodać do głównego pliku.

--
Artur

Szczepan

unread,
Oct 11, 2008, 9:16:37 AM10/11/08
to

Użytkownik "artiun" <art...@spam.wp.pl> napisał

> SET ERRORLOG TO [ERRORFILE] [ADDITIVE]
> spróbuj dodać do głównego pliku.
>
Dodalem:
set errorlog to "error.log" additive
skompilowalo sie ale nigdzie taki plik sie nie tworzy.

--
Szczepan


Piotr Kulinski

unread,
Oct 12, 2008, 3:14:57 AM10/12/08
to
Sat, 11 Oct 2008 15:16:37 +0200, na pl.comp.bazy-danych, Szczepan
napisał(a):

przechwyć błędy:

function main()
//deklaracje zmiennych
...
blkerror := { |berr| deferror( berr ) }
errorblock( blkerror )
....

errorblock(blkerro)
return nil

functiot deferro( oError)
//tu sprawdzeniee przekazanego obiektu oError
//i wypisanie błędów
np.
? oerr:severity
? oerr:cargo
? oerr:subcode
? oerr:operation

return .f.


ewentualnie przesłanie wyniku wykonywanego programu do pliku

mayapp.exe > myerror.log

--
pozdrawiam, GG i SkyPe w X-nagłówku posta, e-mail: zmień wpw na wp
piotr

Piotr Kulinski

unread,
Oct 12, 2008, 3:16:20 AM10/12/08
to
Sun, 12 Oct 2008 09:14:57 +0200, na pl.comp.bazy-danych, Piotr Kulinski
napisał(a):

> functiot deferro( oError)

błąd w definicji funkcji


function deferror( oError)

Szczepan

unread,
Oct 12, 2008, 5:56:15 AM10/12/08
to

Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl> napisał
>
> przechwyć błędy:

>
> ewentualnie przesłanie wyniku wykonywanego programu do pliku
>
Zrobilem i jedno i drugie bez rezultatu, nie ma zadnych komunikatow.
Przypuszczam ze cos zrobilem nie tak przy kompilowaniu calosci (robie to
pierwszy raz).
Wzorowalem sie na przykladach z http://xharbour.republika.pl/

Moj cxd.bat wyglada jak nizej.
Glownym programem startowym jest kfmenu.prg w nim na poczatku jest "function
main()".
w tymze programie w pierwszych liniach dalem
? PROCNAME(),PROCLINE()
ale po uruchomieni exeka nic sie nie wyswietla na ekranie.
Wyglada na to ze ten program main() w ogole sie nie uruchamia.
Moze moglbys mi na tej podstawie cos poradzic?
Jak sie uruchamie debuggera pod xHarbour, moze w ten sposob nieco sie
zorientuje?

DEL BUILD.TMP
ECHO kfmenu.prg >> BUILD.TMP
ECHO aptools.prg >> BUILD.TMP
ECHO aptools5.prg >> BUILD.TMP
ECHO kftools.prg >> BUILD.TMP
ECHO kfinit.prg >> BUILD.TMP
ECHO kfindex.prg >> BUILD.TMP
ECHO kfpoz.prg >> BUILD.TMP
ECHO kfserie.prg >> BUILD.TMP
ECHO kfpozk.prg >> BUILD.TMP
ECHO kf1f.prg >> BUILD.TMP
ECHO kf1ffunc.prg >> BUILD.TMP
ECHO kf1p.prg >> BUILD.TMP
.........itd ok 200 prg..................

ECHO kfl.EXE >> BUILD.TMP
ECHO C0W32.OBJ >> BUILD.TMP
ECHO common.lib >> BUILD.TMP
ECHO debug.lib >> BUILD.TMP
ECHO vm.lib >> BUILD.TMP
ECHO rtl.lib >> BUILD.TMP
ECHO gtwin.lib >> BUILD.TMP
ECHO lang.lib >> BUILD.TMP
ECHO rdd.lib >> BUILD.TMP
ECHO macro.lib >> BUILD.TMP
ECHO pp.lib >> BUILD.TMP
ECHO dbffpt.lib >> BUILD.TMP
ECHO dbfntx.lib >> BUILD.TMP
ECHO dbfcdx.lib >> BUILD.TMP
ECHO CW32.LIB >> BUILD.TMP
ECHO IMPORT32.LIB >> BUILD.TMP
ECHO hbsix.lib >> BUILD.TMP
ECHO codepage.lib >> BUILD.TMP
ECHO gtnul.lib >> BUILD.TMP
ECHO libnf.lib >> BUILD.TMP
ECHO ct.lib >> BUILD.TMP
ECHO HARBOUR_ := 'C:\XHARBOUR\BIN\HARBOUR.EXE /IC:\XHARBOUR\INCLUDE /B ' >>
BUILD.TMP
ECHO BCC32_ :=
'C:\BORLAND\BCC55\BIN\BCC32.EXE -c -O2 -d -tWC -X -IC:\XHARBOUR\Include;C:\Borland\BCC55\Include'
>> BUILD.TMP
ECHO ILINK32_ := 'C:\BORLAND\BCC55\BIN\iLink32.Exe -ap -Tpe -Gn
/LC:\XHARBOUR\Lib' >> BUILD.TMP


C:\XHARBOUR\MBUILD\MBUILD.EXE BUILD.TMP

DEL BUILD.TMP

--
Szczepan


Szczepan

unread,
Oct 13, 2008, 1:44:36 AM10/13/08
to

Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl> napisał >
> przechwyć błędy:
>
> ewentualnie przesłanie wyniku wykonywanego programu do pliku
>
> mayapp.exe > myerror.log
>
Moj poprzedni post jest juz nieaktualny.
Udalo mi sie uruchomic przekompilowana aplikacje, teraz tylko pozostalo
usuwac bledy ktore Clipper tolerowal a Harbour nie przepuszcza podczas
realizacji.

Mysle ze twoje zalecenia co do przechwytywania bledow nie zadzialaly u mnie
dobrze gdyz przy kazdym rodzaju bledu dostaje taki sam komunikat:
"Uncoverable error 9002:No ERRORBLOCK() for error"
Poradz mi co moge w tej sprawie zrobic?

Twoje zalecenia zastosowalem tak:
Na poczatku programu glownego umiescilem:

blkerror := { |berr| deferror( berr ) }
errorblock( blkerror )

a w rejonie gdzie mam inne funkcje dalem:

************************
function errorblock(blkerro)
************************
return nil

************************
function deferror( oerr)
************************


//tu sprawdzeniee przekazanego obiektu oError
//i wypisanie błędów

? "111" + oerr:severity
? "222" + oerr:cargo
? "333" + oerr:subcode
? "444" + oerr:operation

return .f.

Zadek komunikat z function deferror nie pojawia sie.

--
Szczepan


Piotr Kulinski

unread,
Oct 13, 2008, 12:57:13 PM10/13/08
to
Mon, 13 Oct 2008 07:44:36 +0200, na pl.comp.bazy-danych, Szczepan
napisał(a):

> Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl> napisał >

po pierwsze linkujesz bibliotekę gtnul, proponuję zlinkowac zamiast niej
gtdos lub gtwin,
po drugie funkcji errorblock nie nadpisujesz ona jest już w pakiecie, po
trzecie
co co wpisałeś te 111, 222 itd. przecież te zmienne nie wszystkie są typu
tekstowego, poprostu ostaw tak jak Ci podałem.


Nie mniej jednak zmień to gtnul na gtdos na początek, jak pójdzie możesz
sprawdzić czy pójdzie z gtwin

Szczepan

unread,
Oct 14, 2008, 3:57:02 AM10/14/08
to

Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl> napisał

> po pierwsze linkujesz bibliotekę gtnul, proponuję zlinkowac zamiast niej
> gtdos lub gtwin,

gtwin tez tam jest linkowana pare wierszy przed gtnul

> po drugie funkcji errorblock nie nadpisujesz ona jest już w pakiecie, po
> trzecie
> co co wpisałeś te 111, 222 itd. przecież te zmienne nie wszystkie są typu
> tekstowego, poprostu ostaw tak jak Ci podałem.
>

Faktycznie zle zrozumialem twoj przyklad , teraz jest tak jak napisales.

Teraz wszystko dziala jeszcze gorzej.
Komunikaty (tylko cyferki) z funkcji deferror wyswietlaja sie wielokrotnie
(az do przepelnieniea) w czarnym okienku na tle aplikacji. Aplikacja nadal
dziala, nie ma juz komunikatu o bledzie itd.

Generalnie rzecz biorac przy moim stanie wiedzy o przechwytywaniu i
wyswietlaniu bledow najlepszym wyjsciem bylby malutki przykladzik (chodzacy)
z dzialajaca obsluga bledow.
Czy masz cos takiego pod reka, a moze wiesz gdzie cos takiego znalezc?

--
Szczepan


Piotr Kulinski

unread,
Oct 14, 2008, 5:53:11 PM10/14/08
to
Tue, 14 Oct 2008 09:57:02 +0200, na pl.comp.bazy-danych, Szczepan
napisał(a):

> Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl> napisał


>
>> po pierwsze linkujesz bibliotekę gtnul, proponuję zlinkowac zamiast niej
>> gtdos lub gtwin,
>
> gtwin tez tam jest linkowana pare wierszy przed gtnul
>

napisałem zamiast gtnul

>> po drugie funkcji errorblock nie nadpisujesz ona jest już w pakiecie, po
>> trzecie
>> co co wpisałeś te 111, 222 itd. przecież te zmienne nie wszystkie są typu
>> tekstowego, poprostu ostaw tak jak Ci podałem.
>>
> Faktycznie zle zrozumialem twoj przyklad , teraz jest tak jak napisales.
>
> Teraz wszystko dziala jeszcze gorzej.
> Komunikaty (tylko cyferki) z funkcji deferror wyswietlaja sie wielokrotnie
> (az do przepelnieniea) w czarnym okienku na tle aplikacji. Aplikacja nadal
> dziala, nie ma juz komunikatu o bledzie itd.
>

wiec widać, że program "pluje" coś na wyjście...

> Generalnie rzecz biorac przy moim stanie wiedzy o przechwytywaniu i
> wyswietlaniu bledow najlepszym wyjsciem bylby malutki przykladzik (chodzacy)
> z dzialajaca obsluga bledow.
> Czy masz cos takiego pod reka, a moze wiesz gdzie cos takiego znalezc?

Obsługę błędów mam dość mocno uwikłaną w kod aby ją wyciągać, podam Ci
przykład użycia obsługi błędów podczas otwierania tabeli.

Poza tym masz w RTL źródło errorsys.prg, w swojej aplikacji możesz też na
początku wywołać (w głównej funkcji main) procedure errorsys() która
zainicjuje obsługę błędów. Jak już załapiesz o co chodzi bedziesz mógł
inicjować obsługę błędów w procedurze inicjującej INIT PROCEDURE

#include "error.ch"

#define OPEN_EXCLUSIVE .f.
#define OPEN_SHARED .t.

#define TESTING 0.1
#define HZ_TONE 1200

function main()
local cfile

// Set(_SET_SCOREBOARD,.F.)
// set(_SET_EXCLUSIVE,OPEN_EXCLUSIVE)
set(_SET_EXCLUSIVE,OPEN_SHARED)
setcursor(0)
/*
? memory(0)
? memory(1)
? memory(2)
? memory(3)
? memory(4)
? memory(5)
? memory(6)
? memory(7)
*/
cfile:="odbior.dbf"
// if (open_dbf(cfile,,30))
if (open_dbf(cfile))
alert(alias()+";czekam na decyzje...",{"zamknij"})
dbclosearea()
end

cfile:="test.dbf"
if (open_dbf(cfile,OPEN_EXCLUSIVE))
alert(alias()+";czekam...",{"zamknij"})
dbclosearea()
end


setcursor(1)
return nil

function open_dbf(cfile,ltryb,itries,calias)
local old_err,exitcode

if (ltryb==NIL)
ltryb:=set(_SET_EXCLUSIVE)
end
if (itries==NIL)
itries:=20
end

old_err := errorBlock()
errorBlock({|ob_err| err_net(ob_err,iTries,ltryb)})

begin sequence
DBUseArea(,nil,(cfile),(calias),ltryb,)
exitcode:=(!neterr())
recover
exitcode:=.f.
end sequence
errorBlock(old_err)

return exitcode

Function err_net(OB,iTries,lMode)

DO CASE
Case OB:GenCode==EG_NOALIAS
ob:cargo := ob:operation+";;bĺĹdny alias"
alert(ob:cargo)
break .f.

Case OB:GenCode==EG_DUPALIAS
if (Set(_SET_SCOREBOARD))
ob:cargo := ob:operation+";;próba otworcia repliki"
alert(ob:cargo)
end
break .f.

Case OB:GenCode==EG_CREATE
if (Set(_SET_SCOREBOARD))
ob:cargo := ob:filename+";;bĺćd tworzenia pliku"
alert(ob:cargo)
end
break .f.

Case OB:GenCode==EG_OPEN
if (!file(ob:filename))
ob:cargo := ob:description+";"+ob:filename
if (Set(_SET_SCOREBOARD))
alert(ob:filename+";;brak pliku do otwarcia")
end
break .f.
end
if ob:canretry .and.;
ob:oscode==EG_CORRUPTION .and. ;
ob:tries<=itries
ob:cargo:=savescreen(24,0,24,maxcol())
dispoutat(24,0,padc("otwieram "+ob:filename+"
("+ltrim(str(itries-ob:tries))+")",maxcol() ),"w+/r" )
tone(HZ_TONE,1);inkey(TESTING)
restscreen(24,0,24,maxcol(),ob:cargo)
if !(iTries==ob:tries .or. lastkey()==K_ESC)
NetErr(.f.)
return .T.
end
end
if (Set(_SET_SCOREBOARD))
NetErr(.t.)
ob:cargo := ob:filename+;
";;bĺćd otwarcia w trybie '"+;
iif(lMode,"shared","exclusive")+"'"
alert(ob:cargo)
end
break .f.
End

return .F.

Szczepan

unread,
Oct 15, 2008, 3:18:23 AM10/15/08
to

Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl> napisał

> Poza tym masz w RTL źródło errorsys.prg, w swojej aplikacji możesz też na


> początku wywołać (w głównej funkcji main) procedure errorsys() która
> zainicjuje obsługę błędów. Jak już załapiesz o co chodzi bedziesz mógł
> inicjować obsługę błędów w procedurze inicjującej INIT PROCEDURE

Dzieki za informacje, sprobuje dalej sam wytestowac obsluge bledow.

Mam natomiast kolejne pytanie.
Tak jak pisalem na poczatku watku przekompilowalem aplikacje Clipperowa pod
xHarbour.
Wszystko dziala w miare normalnie. Nie wiem tylko jak poradzic sobie z
obsluga drukarki.
Przypuszczam ze istnieje napisane przez kogos jakas klasa ktora pobiera z
windows domyslna drukarke i na ta drukarke wysyla wydruk. Wydruki w tej
aplikacji sa w trybie tekstowym i na razie nie chce ich zmieniac.
Czy mozesz poradzic mi jak sie zabrac do drukowania istniejacych wydrukow na
domyslnej drukarce windows
przy minimalnych przerobkach w kodzie starej aplikacji?

--
Szczepan


Marek Horodyski

unread,
Oct 15, 2008, 4:55:34 AM10/15/08
to

Użytkownik "Szczepan" <szcze...@wp.pl> napisał w wiadomości
news:gd45u2$1le$1...@nemesis.news.neostrada.pl...

>
> Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl> napisał
>
>> Poza tym masz w RTL Ľródło errorsys.prg, w swojej aplikacji możesz też na
>> pocz±tku wywołać (w głównej funkcji main) procedure errorsys() która

>> zainicjuje obsługę błędów. Jak już załapiesz o co chodzi bedziesz mógł
>> inicjować obsługę błędów w procedurze inicjuj±cej INIT PROCEDURE

>
> Dzieki za informacje, sprobuje dalej sam wytestowac obsluge bledow.
>

Myslę, że nie powinienes przechwytywać błedów tylko doprowadzic do
poprawnego zlinkowania aplikacji, a wniej terminala graficznego. Na początek
jednego (np. samo GTWIN). Ale piszesz, że już działa normalnie, więc chyba
sie udało. Powinieneś przy tego typu problemach podawać skrypt linkujacy i
podać info o kompilatorze C - było by łatwiej.

...

> Czy mozesz poradzic mi jak sie zabrac do drukowania istniejacych wydrukow
> na domyslnej drukarce windows
> przy minimalnych przerobkach w kodzie starej aplikacji?
>

Powinno pójść bez żadnych zmian. Jak nie idzie - podaj przykłąd i jakoś go
opisz.
Jeżeli drukujesz z pliku (gdy masz Set Printer To <NazwaJakiegoPliku>), to
taki plik z różnych powodów lepiej jest podać na drukarkę za pomocą :

PrintFileRaw( GetDefaultPrinter(), 'NazwaPliku')

To GetDefaultPrinter() zwraca drukarkę ustawioną jako domyślną pod Windows.

Pozdrawiam,
Marek Horodyski

Marek Horodyski

unread,
Oct 16, 2008, 3:54:26 AM10/16/08
to

Użytkownik "Szczepan" <szcze...@wp.pl> napisał w wiadomości
news:gd45u2$1le$1...@nemesis.news.neostrada.pl...
>
> Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl> napisał
>
>> Poza tym masz w RTL Ľródło errorsys.prg, w swojej aplikacji możesz też na
>> pocz±tku wywołać (w głównej funkcji main) procedure errorsys() która

>> zainicjuje obsługę błędów. Jak już załapiesz o co chodzi bedziesz mógł
>> inicjować obsługę błędów w procedurze inicjuj±cej INIT PROCEDURE

>
> Dzieki za informacje, sprobuje dalej sam wytestowac obsluge bledow.

>> przy minimalnych przerobkach w kodzie starej aplikacji?

Coś takiego mi w oczy wpadło (przetestuj, działa) :


#define _SET_PRINTER SET( 23)
#define _SET_PRINTFILE SET( 24)
#define _SET_PRINTER SET( 23)
#define _SET_DEVICE SET( 20)

?? 'Print test'
? '---------------------------------'
? SET(_SET_DEVICE)
aPrinter:=GetPrinters()
IF EMPTY(aPrinter)
? '----- No Printers installed'
ELSE
Set( 24, (GetDefaultPrinter()), .F. ) // set printer to
(GetDefaultPrinter())
? SET(_SET_PRINTER)
? SET(_SET_PRINTFILE)
Set( 17, "off" ) // set console off
Set( 23, "on" ) // set printer on

? 'Default Printer'
? '----------------'
? GetDefaultPrinter()
?
? 'Printers Available'
? '-------------------'
FOR x := 1 TO LEN( aPrinter)
? aPrinter[ x]
NEXT x
aPrinter:= GetPrinters(.T.)
? 'Printers and Ports'
? '-------------------'
FOR x := 1 TO LEN( aPrinter)
? aPrinter[ x, 1] + ' on ' + aPrinter[ x, 2]
NEXT x
__Eject() // EJECT
Set( 23, "off" ) // set printer off
Set( 17, "on" ) // set console on
Set( 24, "" ) // set printer to
END IF
? SET( _SET_PRINTER)
? SET( _SET_DEVICE)

Gdzieś mam też przykłady z klasą win32prn(), ale pewnie znajdziesz je sam w
jakimś /tests/testw32p.prg.

Pozdrawiam,
Marek Horodyski

Szczepan

unread,
Oct 16, 2008, 4:08:22 AM10/16/08
to

Użytkownik "Marek Horodyski" <m.hor...@pzuzycie.com.pl> napisał

> Myslę, że nie powinienes przechwytywać błedów tylko doprowadzic do
> poprawnego zlinkowania aplikacji, a wniej terminala graficznego. Na
> początek jednego (np. samo GTWIN). Ale piszesz, że już działa normalnie,
> więc chyba sie udało. Powinieneś przy tego typu problemach podawać skrypt
> linkujacy i podać info o kompilatorze C - było by łatwiej.
>

Mnie nie chodzilo o przechwytywanie bledow kompilacji tylko o bledy podczas
wykonywania sie aplikacji.
Sa pewne drobiazgi ktore Clipper podczas realizacji tolerowal a xHarbour
nie.
podczas realizacji wywala mi sie blad z lista wywolywanych programow (i to
jest ok) ale brak jest opisu bledu
zawsze jest "Uncoverable error 9002:No ERRORBLOCK() for error" i moje
pytanie dotyczylo tylko jak ten komunikat zamienic na opis faktycznego
bledu.
Jesli chodzi o skrypt linkujacy to podawalem go w tym watku w czwarty moim
poscie od gory.
Kompilator C yo Borland C++ Compiler 5.5.1.


> Jeżeli drukujesz z pliku (gdy masz Set Printer To <NazwaJakiegoPliku>), to
> taki plik z różnych powodów lepiej jest podać na drukarkę za pomocą :
>
> PrintFileRaw( GetDefaultPrinter(), 'NazwaPliku')
>
> To GetDefaultPrinter() zwraca drukarkę ustawioną jako domyślną pod
> Windows.
>

Wlasnie o to mi chodzilo, zaraz wyprobuje, mysle ze zadziala.
Jeszcze jedno, w jaki sposob moge wyswietlac na ekranie podglad wydruku (w
trybie tekstowym).
W Clipperze mialem podlinkowany jakis obj ktory mi wyswietlal wydruk na
ekranie ale pod xHarbour nie kompiluje sie.

--
Szczepan


Szczepan

unread,
Oct 16, 2008, 7:11:18 AM10/16/08
to

Użytkownik "Marek Horodyski" <m.hor...@pzuzycie.com.pl> napisał
>

Przekompilowalem, dziala ale w rezultacie na ekranie pojawia mi sie taki
wynik:

Print test
---------------------------------
NIL
NIL
NIL
NIL
NIL

Wyglada na to ze nic nie jest widoczne z poziomu tego programiku.
W systemie windows XP mam zdefiniowane dwie drukarki:
Microsoft Office Document Image Writer (domyslna)
Samsung SCX-4200 Series

--
Szczepan

Szczepan

unread,
Oct 16, 2008, 5:53:30 PM10/16/08
to

Użytkownik "Marek Horodyski" <m.hor...@pzuzycie.com.pl> napisał >
> Coś takiego mi w oczy wpadło

W zwiazku z konwersja aplikacji Clipperowej na xHarbour chcialem za jednym
zamachem uporzadkowac zapis polskich czcionek. Poniewaz aplikacja ma byc
nadal w trybie znakowym chcialem przekonwertowac znaki w dbfach i w
programach na ISO8859-2 i dalej pisac programy z uzyciem tego kodowania.
Pracujac pod Windows XP napotkalem od razu trudnosc.
Okno polecen w windows dziala w systemie CP852. Edytor w ktorym od wilu lat
pisze programy w trybie znakowym Multi Edit, rowniez w tym systemie sprawuje
sie dobrze.
Nie umiem zmienic tak strony kodowej na ISO8859-2 aby w oknie pelnoekranowym
i w Multi Edit widoczne byly poprawnie polskie znaki.
Czy mozesz poradzic mi jakim edytorem pod Windows da sie pisac programy w
kodowaniu ISO8859-2.
Moj kolega z tego powodu przeszedl na Linuxa.
A moze masz na to wszystko zupelnie inny sposob, jak Ty dajesz sobie rade z
ogonkami w aplikacjach znakowych?

--
Szczepan


Marek Horodyski

unread,
Oct 17, 2008, 4:20:50 AM10/17/08
to

Użytkownik "Szczepan" <szcze...@wp.pl> napisał w wiadomości
news:gd6sru$7r6$1...@atlantis.news.neostrada.pl...

>
> Użytkownik "Marek Horodyski" <m.hor...@pzuzycie.com.pl> napisał
>
>> Myslę, że nie powinienes przechwytywać błedów tylko doprowadzic do
>> poprawnego zlinkowania aplikacji, a wniej terminala graficznego. Na
>> początek jednego (np. samo GTWIN). Ale piszesz, że już działa normalnie,
>> więc chyba sie udało. Powinieneś przy tego typu problemach podawać skrypt
>> linkujacy i podać info o kompilatorze C - było by łatwiej.

[...]

>> PrintFileRaw( GetDefaultPrinter(), 'NazwaPliku')
>>
>> To GetDefaultPrinter() zwraca drukarkę ustawioną jako domyślną pod
>> Windows.
>>
> Wlasnie o to mi chodzilo, zaraz wyprobuje, mysle ze zadziala.
> Jeszcze jedno, w jaki sposob moge wyswietlac na ekranie podglad wydruku (w
> trybie tekstowym).
> W Clipperze mialem podlinkowany jakis obj ktory mi wyswietlal wydruk na
> ekranie ale pod xHarbour nie kompiluje sie.

Taką funkcjonalność można napisać samemu. Osobiście mam to tak zrobione, ze
wydruk zawsze idzie do pliku. Czyli jako wyjscie wydruku jest :

set printer to 'nazwaPliku'

Oczywiście nazwa jest dynamicznie wyliczana, i kazdy uzytkownik ma swój
prywatny plik wydruku. Jak chce wydrukowac, wywołuje menu wydruku (i w tym
momencie plik wydruku jest zamykany !), gdzie ma w menu między
innymi -wydrukuj x-kopii, -podejrzyj, wstaw do archiwum, skasuj itp. To
zamykanie i otwieranie (może powrócić do wydruku - czyli plik jest ponownie
otwierany - Set( 24, 'nazwaPliku', [.t.|.f.]) ) musi być przemyślane i
skorelowane z ustanowieniem pierwotnej nazwy pliku!
Jak z menu wybiera podgląd - włączam standardowego tbrowsa do podglądu
plików i juz. Tego tbrowsa zamknołem w funkcji Look - czyli jest w kodzie :

If oglądać ; Look( 'nazwaPliku')
ElseIf cosInnego ; CosInnego()

A ten Look to we fragmencie :

oTbr := TBrowseNew( Top, Left, Bottom, Right)
oTbr:cargo := Array( CARGO_DIM)
oTbr:od_kolumny := 1
oTbr:goTopBlock := {| | pocz_pliku(oTbr) }
oTbr:goBottomBlock := {| | koniec_pliku(oTbr) }
oTbr:skipBlock := {|n| myskipper(n, oTbr) }
oTbr:colorSpec := k
if !otworz_plik( oTbr, fName)
return .f.
end
oTbr:od_kolumny := 1
oTbc := TBColumnNew(, {|| substr( oTbr:linia, oTbr:od_kolumny)})
oTbc:width := Right - Left + 1
oTbc:defcolor := { 1, 2}
oTbr:addColumn( oTbc)
If disp
oTbr:forceStable() ; Czy_Koniec := .t. // nKey := 27
End
While !czy_koniec
While NextKey() == 0 .AND. !oTbr:stabilize() ; End


Całośc ponad 8 kilo, jak chcesz to mogę Ci przesłać na priv - będzie się
kompilować :)

A błąd 9002 będzie napewno zwiazany z :

9002 RDD invalid or not linked

Explanation: The runtime system has failed to detect a matching RDD
loaded for the database and indices used in the application.

Action: Make sure the database header is correct. Recreate the
indices. Refer to Actions and Notes under 999 and 1011. Check third
party .LIBraries for compatibility and version. Check link script and
order. Look for missing RDD .LIBrary or .OBJ files. The .EXE may be
invalid.

See Also: "Linking" and "Debugger" chapters of the Programming and
Utilities Guide.

Gdyż numery błędów są raczej tak samo jak w Clipperze poukładane, i tu
należało by szukać przyczyny.

Pozdrawiam,
Marek Horodyski


Marek Horodyski

unread,
Oct 17, 2008, 4:31:23 AM10/17/08
to

Użytkownik "Szczepan" <szcze...@wp.pl> napisał w wiadomości
news:gd77ur$m6q$1...@nemesis.news.neostrada.pl...

>
> Użytkownik "Marek Horodyski" <m.hor...@pzuzycie.com.pl> napisał
>>
>> Coś takiego mi w oczy wpadło (przetestuj, działa) :

Powinienem napisać : "u mnie działa" :)
Przynajmnie mam coś na monitorze, coś na drukarce.
Tu jest bezpośredni wydruk na drukarkę, osobiście stosuję przejście przez
plik.
Spróbuj zmienić drukarkę domyślną i powtórzyć uruchomienie.


> Przekompilowalem, dziala ale w rezultacie na ekranie pojawia mi sie taki
> wynik:
>
> Print test
> ---------------------------------
> NIL
> NIL
> NIL
> NIL
> NIL
>
> Wyglada na to ze nic nie jest widoczne z poziomu tego programiku.
> W systemie windows XP mam zdefiniowane dwie drukarki:
> Microsoft Office Document Image Writer (domyslna)
> Samsung SCX-4200 Series

Zmień drukarkę domyślną i zobacz czy jest wydruk. Jak będziesz miał problemy
to być może ta drukarka nie ma wlasnego procesora wydruku. Wtedy trzeba by
od razu korzystac z klasy którą wspomniałem. Wtedy korzystasz ze
specyfikacji przygotowanej przez Windows.

Pozdrawiam,
Marek Horodyski

Marek Horodyski

unread,
Oct 17, 2008, 4:39:26 AM10/17/08
to

Użytkownik "Szczepan" <szcze...@wp.pl> napisał w wiadomości
news:gd8dj0$jc9$1...@nemesis.news.neostrada.pl...

>
> Użytkownik "Marek Horodyski" <m.hor...@pzuzycie.com.pl> napisał >
>> Coś takiego mi w oczy wpadło
>

[...]

> Moj kolega z tego powodu przeszedl na Linuxa.
> A moze masz na to wszystko zupelnie inny sposob, jak Ty dajesz sobie rade
> z ogonkami w aplikacjach znakowych?

Ze wzgledu na to, ze dane przez pewien okres były współdzielone przez
Clippera i xHarbour - pracowałem pod CP852. Zarówno w danych jak i na
ekranie. Nie wiem czy można bez GUI mieć inna stronę kodową niż 852 - gdyż
ta właśnie wspomagana jest przez OS. Działa mi ona zarówno pod GTWIN jaki
GTWVT.

Pozdrawiam,
Marek Horodyski

Szczepan

unread,
Oct 17, 2008, 4:58:15 AM10/17/08
to

Użytkownik "Marek Horodyski" <m.hor...@pzuzycie.com.pl> napisał
>
> Ze wzgledu na to, ze dane przez pewien okres były współdzielone przez
> Clippera i xHarbour - pracowałem pod CP852. Zarówno w danych jak i na
> ekranie. Nie wiem czy można bez GUI mieć inna stronę kodową niż 852 - gdyż
> ta właśnie wspomagana jest przez OS. Działa mi ona zarówno pod GTWIN jaki
> GTWVT.
>
Probowalem podpiac inna strone kodowa niz CP852, komplikacje sa tego typu ze
pisze na klawiaturze owszem w ISO Latin 2 ale wyswietlanie jest i tak w
CP852. Jesli juz da rade wyswietlac poprawnie polskie znaki tu tylko w oknie
polecen ale juz w trybie pelnoekranowym pozostaje CP852 , czyli robaczki.
Poza tym w edytorze (Multi Edit) do pisania programow w trybie tekstowym
przestaje dzialac klawiatura programisty. Jednym slowem chyba gra nia warta
swieczki i zastosuje tak jak Ty CP852 zarowno w danych jak i na ekranie. Nie
wiem tylko jakie bym mial problemy gdybym ta aplikacje chcial przekompilowac
pod xHarbour dla Linuxa?

--
Szczepan


Jacek K.

unread,
Oct 17, 2008, 5:11:37 AM10/17/08
to
On 17 Paź, 10:39, "Marek Horodyski" <m.horody...@pzuzycie.com.pl>
wrote:
> Użytkownik "Szczepan" <szczepan...@wp.pl> napisał w wiadomościnews:gd8dj0$jc9$1...@nemesis.news.neostrada.pl...
>
>
>
> > Użytkownik "Marek Horodyski" <m.horody...@pzuzycie.com.pl> napisał >

> >> Coś takiego mi w oczy wpadło
>
> [...]
>
> > Moj kolega z tego powodu przeszedl na Linuxa.
> > A moze masz na to wszystko zupelnie inny sposob, jak Ty dajesz sobie rade
> > z ogonkami w aplikacjach znakowych?
>
> Ze wzgledu na to, ze dane przez pewien okres były współdzielone przez
> Clippera i xHarbour - pracowałem pod CP852. Zarówno w danych jak i na
> ekranie. Nie wiem czy można bez GUI mieć inna stronę kodową niż 852 - gdyż
> ta właśnie wspomagana jest przez OS. Działa mi ona zarówno pod GTWIN jaki
> GTWVT.
>
> Pozdrawiam,
> Marek Horodyski

Można tak zrobić

Dla GUI - trzeba pisać i wiświetlać w stronie kodowej PLWIN

request HB_LANG_PL852
request HB_CODEPAGE_PL852
request HB_LANG_PLWIN
request HB_CODEPAGE_PLWIN
HB_LANGSELECT('PLWIN')
HB_SETCODEPAGE( "PLWIN" )

A tablicę otwieramy w stroniekodowej PL852

use TABLICAX Alias TABX new shared via DBFNTX CODEPAGE "PL852"


jeżeli chcemy pisać jako aplikacja CRT (tryb terminalowy )


request HB_LANG_PL852
request HB_CODEPAGE_PL852
// request HB_LANG_PLWIN
// request HB_CODEPAGE_PLWIN
HB_LANGSELECT('PL852')
HB_SETCODEPAGE( "PL852" )

A tablicę otwieramy w stroniekodowej PL852

use TABLICAX Alias TABX new shared via DBFNTX CODEPAGE "PL852"

Pozdrowienia
Jacek K.

Piotr Kulinski

unread,
Oct 17, 2008, 1:37:46 PM10/17/08
to
Fri, 17 Oct 2008 10:20:50 +0200, na pl.comp.bazy-danych, Marek Horodyski
napisał(a):

kiedyś zaciągnąłem z netu bibliotekę ze źródłem w C do listowania pliku
tekstowego na ekranie. Teraz przerobiłem to tak aby można było używać pod
gcc i mingw + kolorowanie "składni", podświetlanie wiersza i wycinanie
znaków sterujących wysyłanych na drukarkę. Co jest w tym dobre to to, że
pliki wielkości np. kilkudziesięciu MB przegląda się bardzo szybko, nie ma
jedynie skoków do wybranych stron.
Listowanie katalogu z wydrukami jest oparte o zwykłe TBrowse, przy czym
metody przechodzenia do rekordów operują na tablicy wczytanych plików.

0 new messages