Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из С++ в Delphi, Помогите код перевести 
:(
    Опции темы
RA
Дата 25.3.2004, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: нет
Всего: 115



Код
#include <stdio.h>  /* Needs only really basic stuff;) */
#include <stdlib.h>

int main(int argc, char *argv[]) {
if(argc==2) {
FILE * fp;
char temp=0;
int pm=0;
int i=0;
int passsize=0;
int port=0;

printf("\ \n");
printf("\n");
printf("----------------------------------------- \n");

fp = fopen(argv[1], "r");

if (fp!=NULL) {
/*  fseek(fp, 230, SEEK_SET); */
for(i=0;i<250;i++){
 temp = fgetc(fp);
 if(temp == 'C'){           /* This basically just skips    */
 temp = fgetc(fp);        /* the header of the file.      */
 if(temp=='S') {          /* A little messy, but it works */
  fseek(fp, 24, SEEK_CUR);
  break;
 }
}
 }
while(!feof(fp)) {
 temp = fgetc(fp);
 if(temp > 31 && temp <127) {
printf("\nSite name: ");
   do {
      printf("%c", temp);

} while((temp=fgetc(fp))>31 && temp < 127);
  printf("\n");

fseek(fp, 18, SEEK_CUR);
temp=fgetc(fp);
if(temp<31) {
  while(temp<31)
  temp=fgetc(fp);
}
  printf("Host:      ");  
  do {
  printf("%c", temp);
} while((temp=fgetc(fp))>31);
  printf("\n");

  temp=fgetc(fp);
printf("Username:  ");
  if(temp==0) {
    printf("anonymous");
  }
else {
   do {
      printf("%c", temp);

 } while((temp=fgetc(fp))>31 && temp < 127);
  }
  printf("\n");

passsize=temp;
  printf("Password:  ");
 for(i=0;i<passsize;i++) {
 temp=fgetc(fp);              /* This glob of nastiness simply  */
 if(temp < -88 && temp > -97)   /* breaks the ASCII table down    */
  printf("%c", temp+200);       /* into groups of 8 characters.   */
 if(temp < -80 && temp > -89)   /* This could have been done much */
  printf("%c", temp+184);       /* neater, but I haven't had time */
 if(temp > -73 && temp < -64)   /* to re-do it. For a description */
printf("%c", temp+184);       /* of how this "decrypts" the     */
 if(temp > -81 && temp < -73)   /* file, see the README.          */
printf("%c", temp+200);
 if(temp > -25 && temp < -16)
  printf("%c", temp+56);
 if(temp > -19 && temp < -8)
printf("%c", temp+72);
 if(temp > -9 && temp < 0)
printf("%c", temp+56);
 if(temp > -121 && temp < -112)
printf("%c", temp+184);
 if(temp > -129 && temp < -120)
printf("%c", temp+200);
 if(temp > -103 && temp < -96)
printf("%c", temp+184);
 if(temp > -111 && temp < -104)
printf("%c", temp+200);
 }
 printf("\n");
 temp=fgetc(fp);
 while(temp==0)
temp=fgetc(fp);
/* fseek(fp, 2, SEEK_CUR); */
 pm=fgetc(fp);


 if(temp > 0 && pm == 0)
 printf("Port:      %i\n", temp);
 if(temp < 0 && pm == 0)
 printf("Port:      %i\n", temp+256);

 if(pm != 0) {

if(temp < 0)    {                    /* Fun "decrypting" the port.     */
 pm = (pm * 256) + 256;              /* See the README for a technical */
 port = pm + temp;                   /* discription of how this works. */
 printf("Port:      %i\n", port);
}
if(temp > 0) {
  pm = pm * 256;
  port = pm + temp;
  printf("Port:      %i\n", port);
  }

 }
 fseek(fp, 150, SEEK_CUR);
}
}  /* End while(!eof) */


 printf("\n");
printf("Finished.\n");
printf("===================================================\n");
fclose(fp);
}
else {
 printf("Error opening %s\n", argv[1]);
 return(-1);
}
return(1);
}
else {
printf("Usage: filename\n");
printf("Where filename  or other file of the same\n");
printf("format, 5.0\n");
return(-1);
}
}

PM   Вверх
sergejzr
Дата 25.3.2004, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Во первых давайте решим неясности в теме.
  • С++ в Delphi => Наверное имеется в виду C++ в Object-Pascal
  • Опубликованный код не является С++, но С => Неободим конвертор С в Pascal

Вот он:
http://c2pas.sourceforge.net/

Мне кажется эта тема стоит рассмотрения, поскольку такие конверторы часто необходимы.
Возможен ли такой конвертор na 100%?.
По пунктам:
  • То есть синтакс конвертировать пожалуйста, но что делать с вызовом функций?
    Ведь функции надо различать как по названиям, так и по удобству применения.
  • Если заменяю функцию, я обязан так же инклудовать соответсвующий .h
  • Именно в Pascal'e отсутствует return
  • ...

Так что поправлять всегда ручками придётся. smile.gif

Вот кстати конвертированный код:
Код

#include <stdio.h>  (* Needs only really basic stuff;) *)
#include <stdlib.h>

Integer main(Integer argc, char *argv[]) begin
if (argc=2) then begin
FILE * fp;
char temp :=0;
Integer pm := 0;
Integer i := 0;
Integer passsize := 0;
Integer port := 0;

printf('\ '#10'');
printf(''#10'');
printf('----------------------------------------- '#10'');

fp := fopen(argv[1], 'r');

if (fp <> nil) then begin
(*  fseek(fp, 230, SEEK_SET); *)
for(i := 0;i<250;i++) begin
temp := fgetc(fp);
if (temp = 'C') then begin           (* This basically just skips    *)
temp := fgetc(fp);        (* the header of the file.      *)
if (temp='S') then begin          (* A little messy, but it works *)
 fseek(fp, 24, SEEK_CUR);
 break;
end;
end;
end;
while ( not feof(fp)) do begin
temp := fgetc(fp);
if (temp > 31 and temp <127) then begin
printf(''#10'Site name: ');
  do begin
     printf('%c', temp);

end; while ((temp := fgetc(fp))>31 and temp < 127) do;
 printf(''#10'');

fseek(fp, 18, SEEK_CUR);
temp := fgetc(fp);
if (temp<31) then begin
 while (temp<31) do
 temp :=fgetc(fp);
end;
 printf('Host:      ');
 do begin
 printf('%c', temp);
end; while((temp := fgetc(fp))>31) do;
 printf(''#10'');

 temp := fgetc(fp);
printf('Username:  ');
 if (temp=0) then begin
   printf('anonymous');
 end
else begin
  do begin
     printf('%c', temp);

end; while ((temp := fgetc(fp))>31 and temp < 127) do;
 end;
 printf(''#10'');

passsize := temp;
 printf('Password:  ');
for(i := 0;i<passsize;i++) begin
temp := fgetc(fp);              (* This glob of nastiness simply  *)
if (temp < -88 and temp > -97) then   (* breaks the ASCII table down    *)
 printf('%c', temp+200);       (* into groups of 8 characters.   *)
if (temp < -80 and temp > -89) then   (* This could have been done much *)
 printf('%c', temp+184);       (* neater, but I haven't had time *)
if (temp > -73 and temp < -64) then   (* to re-do it. For a description *)
printf('%c', temp+184);       (* of how this "decrypts" the     *)
if (temp > -81 and temp < -73) then   (* file, see the README.          *)
printf('%c', temp+200);
if (temp > -25 and temp < -16) then
 printf('%c', temp+56);
if (temp > -19 and temp < -8) then
printf('%c', temp+72);
if (temp > -9 and temp < 0) then
printf('%c', temp+56);
if (temp > -121 and temp < -112) then
printf('%c', temp+184);
if (temp > -129 and temp < -120) then
printf('%c', temp+200);
if (temp > -103 and temp < -96) then
printf('%c', temp+184);
if (temp > -111 and temp < -104) then
printf('%c', temp+200);
end;
printf(''#10'');
temp :=fgetc(fp);
while (temp=0) do
temp := fgetc(fp);
(* fseek(fp, 2, SEEK_CUR); *)
pm := fgetc(fp);


if (temp > 0 and pm = 0) then
printf('Port:      %i'#10'', temp);
if (temp < 0 and pm = 0) then
printf('Port:      %i'#10'', temp+256);

if (pm <> 0) then begin

if (temp < 0) then    begin                    (* Fun "decrypting" the port.     *)
pm := (pm * 256) + 256;              (* See the README for a technical *)
port := pm + temp;                   (* discription of how this works. *)
printf('Port:      %i'#10'', port);
end;
if (temp > 0) then begin
 pm := pm * 256;
 port := pm + temp;
 printf('Port:      %i'#10'', port);
 end;

end;
fseek(fp, 150, SEEK_CUR);
end;
end;  (* End while(!eof) *)


printf(''#10'');
printf('Finished.'#10'');
printf('==================================================='#10'');
fclose(fp);
end
else begin
printf('Error opening %s'#10'', argv[1]);
(* C2PAS: Exit *) Result :=(-1);
end;
(* C2PAS: Exit *) Result :=(1);
end
else begin
printf('Usage: filename'#10'');
printf('Where filename  or other file of the same'#10'');
printf('format, 5.0'#10'');
(* C2PAS: Exit *) Result :=(-1);
end;
end;








--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Burich-Caeser
Дата 6.8.2004, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 28.7.2004

Репутация: нет
Всего: 1



Цитата(sergej @ 25.3.2004, 18:11)
Во первых давайте решим неясности в теме.
  • С++ в Delphi => Наверное имеется в виду C++ в Object-Pascal
  • Опубликованный код не является С++, но С => Неободим конвертор С в Pascal
Вот он:
http://c2pas.sourceforge.net/

Мне кажется эта тема стоит рассмотрения, поскольку такие конверторы часто необходимы.
Именно в Pascal'e отсутствует return

Транслятор не сможет сам преобразовать подобное:

int proc1(void)
...
return 0

в

proc1:=0

??Странно...
Добавлено @ 02:43
Блин, глюк с цитатой=(
Нужна только последняя строчка.
--------------------
Ты брошен вниз силой судьбы,Ты унижен и раздавлен,Время забыть то, кем ты был,Но помнить, кем ты стал...
PM MAIL   Вверх
sergejzr
Дата 30.8.2004, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(Burich @ 6.8.2004, 01:42)
int proc1(void) ... return 0

в

proc1:=0


Вообще то надо в
proc1:=0;
exit;

Может конечно smile.gif , но этот транслятор не делает smile.gif



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
lynx_916
Дата 30.8.2004, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 13.6.2004
Где: Молдова

Репутация: нет
Всего: 1



а в паскале разве инклуды?
помойму Юзесы hmmm.gif


--------------------
Who dares, wins. (с) Solid Snake
PM MAIL ICQ YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0469 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.