na, kesz. csak sajat fugvenyekkel. 5x lassabban fut le, mint az eredeti progi tette, de ezen biztos lehet javitani. elso korben orulok, hogy fut. ja, es a leforditott kod 4ed annyi lett (linuxon 15k, solarison 9k). meg1x koszi.
nagyon koszi, asszem kihagyom az egesz filekezeleses dolgot, mert keves idom van es nincs ido fuggvenyeket keresgelni. standard inputrol fog olvasni, az szerintem eleg neki, es akkor gyakorlatilag csak szovegeker kell kezelni. ahhoz meg asszem eleg lesz nekem a getchar, putchar, a tobbi szovegkezelo fuggvenyt meg megirom magamnak, vegul is egyszeru tombokrol van szo. bar igy valszeg eleg lassu lesz, de most eloszor mukodnie kell, aztan olvashatom tovabb a konyvet es lehet csiszolgatni...
koszi neked is, es zsowynak is.
Hát igen, ezért írtam, hogy kiindulásnak nem rossz. Vagy lefordítod a p2c lib-jét is solaris-ra (ezzel az erövel a pascal-t is lefordíthatod), vagy a megfelelö részeket átírod igazi c-re.
trooper: cnel, meg gondolom pascalnal is, eloszor van a forditas, aztan a linkeles. na, alanti errorok a linkeles soran keletkeztek. Cnel meg kell adni, h mifele libekkel linkelodjon ossze a program, mar amennyire erre igeny van. jelen esetben van:
p2c e.pas -o e.c
gcc -c e.c #forditas, nincs is semmi error
gcc -o e e.o -lp2c #linkeles
jelen esetben. nekem debian sid van, ott a p2c csomagban van egy p2cc program is, ami nincsen 4k, ugyhogy szerintem vmi wrapper, ami egy hivja meg gcct, h a -lp2c egybol parancsorban ottlegyen.
mas kerdes, h az assingra nekem igy is errorozik, nem tudja ebbol a libbol belinkelni... dehat, hagyok vmit neked is, mert nyakunkon a hetvege, meg pascalhoz nemertek (;
koszi, remlett, hogy van valami ilyesmi, csak valamiert pas2c-re gondoltam es azt nem talaltam.
nem tudja veletlenul valaki, hogy mire fel kapom az alabbi uzeneteket mikor megprobalom leforditani?
/tmp/ccGMWpCV.o: In function `main':
/tmp/ccGMWpCV.o(.text+0x13): undefined reference to `PASCAL_MAIN'
/tmp/ccGMWpCV.o(.text+0x25): undefined reference to `P_argv'
/tmp/ccGMWpCV.o(.text+0x50): undefined reference to `assign'
...
collect2: ld returned 1 exit status
koszi. (ma nagyon halvanyszokenek erzem magam :-))
trooper
van egy progim ami qmail log filebol vadassza ki azt ami nekem kell, de nem tudok c-ben programozni es egy olyan solarisra kell atpakolnom ahol csak c fordito van. most jol megkaptam, hogy azonnal csinaljam meg, es persze nem tudom... napokig fog tartani mire egyaltalan a szukseges fuggvenyeket osszevadaszom. ezzel szemben, ha valaki aki tud c-ben programozni annak szerintem nem egy nagy melo lenne. meg ha csak a hasznalando fuggvenyek megmondana valaki az is sokat segitene. bemasolom ide a pascal forrast, eleg jol kikommenteltem asszem. szoval ha valaki tud segiteni, orok hala. bazsixnak meg egyszer koszi a konyvet, neki is allok, de ez nem egy delutan lesz es most gyujtottak ram a hazat...
program qparser;
type mailrec=record
sender:string;
rcpt:string;
timestamp:string;
bytes:string;
end;
var logf:text;
line,act,tmp:string;
output:mailrec;
begin
if paramstr(1)='' then {Ha nincs parameter akkor a standard inputrol olvas}
assign(logf,'/dev/stdin')
else
assign(logf,paramstr(1));{egyebkent az elso parameterkent megadott filebol}
reset(logf);
act:='';
while act<>'info' do {a levelek kuldese info-s sornal kezdodik}
begin
readln(logf,line);
act:=copy(line,pos(' ',line)+1,length(line)); {a fontos resz a masodik oszlopban van}
act:=copy(act,1,pos(' ',act)-1); {szokozokkel hatarolva (az elso es a masodik szokoz kozott)}
end;
while not eof(logf)do {vegigszaladuk a fileon}
begin
output.timestamp:=copy(line,1,pos('.',line)-1); {a timestamp a sor elejetol az elso pontig tart, ezt betesszuk egy valtozoba}
tmp:=copy(line,pos('<',line)+1,length(line));
output.sender:=copy(tmp,1,pos('>',tmp)-1); {a kuldo e-mail cime <> kozott van}
tmp:=copy(line,pos('bytes',line)+6,length(line));
output.bytes:=copy(tmp,1,pos(' ',tmp)-1); {az elkuldott byteok szama a byte
szo utan kezdodik es a kovetkezo szokozig tart}
repeat {miutan kiszedtuk a kuldo adatait beolvassuk az osszes fogadot}
readln(logf,line);
act:=copy(line,pos(' ',line)+1,length(line));
act:=copy(act,1,pos(' ',act)-1);
if act='starting' then {a starting is az elso es a masodik szokoz kozott van}
begin
tmp:=line;
repeat
tmp:=copy(tmp,pos(' ',tmp)+1,length(tmp)); {a fogado cime az utolso szokoz utan all}
until pos(' ',tmp)=0;
output.rcpt:=tmp;
if output.timestamp<>'' then {ha a startinghoz tartozott info sor, akkor kiirjuk a kimenetre az adatokat}
writeln(output.timestamp+'::'+output.sender+'::'+output.rcpt+'::'+output.bytes);
end;
until (act='info') or (eof(logf)); {a fogadok beolvasasa a kovetkezo kuldes sorig tart}
end;
close(logf);
end.
En, amikor eloszor lattam a programot, kitalaltam az outputot futtatas nelkul, bar nem voltam benne szazszazalakig biztos, lenyegeben az elso sztringben levo masodik specialis karakter miatt.
A unix szimbolumot en sem ismertem, de kizarasos alapon ki tudtam kovetkeztetni: abbol indultam ki, hogy a program lefordul es valami ertelmeset csinal.
Bocs, de URL-t nem keresek ki, arra ott a google Neked is. :)
Amit kérdezel, azt nagyon jól tudja az (X)emacs, a gvim, és az (x)fte - itt csak azokat írtam le, amelyek X alatt futnak, és amelyeket használtam/ok is.
Egyébként SZVSZ a sourceforge-on annyi ilyen editort találsz, hogy kín lesz választanod.
Ide is leirom, de mar ugy nez ki eleg regi a topic. Tehat honnan lehet letolteni olyan szovegszerkeszto X ala, ami ismeri a Highlight syntaxot, tehat hogy szep szinesek legyenek a parancsok, es a zarojelre kattintva a hozza kapcsolodo zarojelet.
Elore is kosz.
Sakcok az EGCS és a GCC tonképpen ugyanaz az sfw csak volt egy fork ugy '97 magasságában, ahol 1 egcs névre hallgató gittegylet (experimental gcc subproject) kezdett el optimált gcc-ket csinálni kölönböz? platformokra, chill, ada, java cross(compilereket) irkálni. A lényeg: '99 ?szét?l a 'product' teljes fele?ssége az EGCS terméktanácsra testálódott és ekkor jött ki a gcc 2.95.xx újra egységes termékként. mor nfo: http://gcc.gnu.org
A gcc verziót majd megnézem. A kde1 headerek nélkül nem fut le a ./configure mert keresi a small kde aplikációhoz a kdevelop configure.in fájlja. A Map, List, String definíciók nem az én mániám, hanem a qt programozói így írták meg, ezen nem hiszem, hogy változtatnom kéne.
nos. a gcc 2.95.2-s gcc legyen. Ne keverd a kde 1.xx és a kde 2.xx headereket. A Map, List, String cuccokból baj lehet ezet STL-reserved cuccok. valami némszpész gebasz van.
Nem igazán programozás, inkább fordítás. Kdevelop-ot szeretném újrafordítani KDE2 alatt. A KDE2-nek a qt-2.2.1 verzióra van szüksége. A Kdevelopnak állítólag 2.0-tól mindegy. A ./configure lemegy --with-qt-includes és libraris beállítva 2.2.1-re. Aztán jön a make. Itt rögtön az elején ezt a hibát adja:
g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I/usr/include/kde -I/usr/lib/qt-2.2.1/include -I/usr/X11R6/include -I/usr/lib/kde1/include -I/usr/include/kde -I/usr/lib/qt-2.2.1/include -I/usr/X11R6/include -I/usr/lib/kde1/include -O0 -g3 -Wall -frtti -c highlight.cpp
In file included from /usr/include/kde/kconfigbase.h:33,
from /usr/include/kde/kconfig.h:29,
from kwview.h:9,
from kwdoc.h:15,
from highlight.cpp:15:
/usr/lib/qt-2.2.1/include/qvariant.h:100: parse error before 'int'
A qvariant.h ezen része:
class Q_EXPORT QVariant
{
public:
enum Type {
Invalid,
Map,
List,
String,
StringList,
Font,
Pixmap,
Brush,
Rect,
Size,
Color,
Palette,
ColorGroup,
IconSet,
Point,
Image,
Int,
UInt,
Bool, // ez a 100. sor :-(((
Double,
CString,
PointArray,
Region,
Bitmap,
Cursor,
SizePolicy
};
Ezzel mi a fenét lehet kezdeni?
Elöre is köszönet.
Kistel ejjamit írtam az az, hogy a megoldás elve a stack/bázispointer/verem elve.Tekintettel arra, hogy pbuf buf tipusu elemekre mutat az elemek címzésével hidd el, hogy nem lesz baj. Ha jól megfigyeled én az sprintf()-t használtam és nem véletlenül!
tefmészetesen UNICODE esetben a dolog igy néz ki:
wchar_t buf[1024];
wchar_t* pbuf=buf;
pbuf+=sprintf(pbuf,"%ls",(const wchar_t*) "Egyik");
Az ilyen dolgokat persze igazad van speckó esetben használja az emeber, vagyis olyankor amikor futási idben derül ki, hogy pontosan hány darab text darabkát konkatenálsz pl textgenerátorok.