Verktyg Visningsval
2013-06-23, 19:01   #1

Itchago

Medlem

Itchagos avatar

Plats: Västerås

Registrerad: feb 2009

Snabb fråga: URL i Ada


Tjenixen,

Har letat som en galning på internet. Går det att öppna en URL via Ada? Altså, få standardprogrammet på datorn att öppna en url, likt ett batch-skript?

Någon som vet? Vet ju att det finns kapacitet för nätverkande i Ada eftersom att dom har en Ada web server, då borde dom ha stöd för detta?

tack på förhand
Itchago är inte uppkopplad
2013-06-25, 09:39   #2

virtual void

Datavetare

virtual voids avatar

Plats: Stockholm

Registrerad: jun 2011

Väldigt få som lär sig Ada idag så lär vara tunt med svar. Har använt Ada för ett par år sedan, men är definitivt ingen expert.

Är rätt säker på att språket Ada har inget inbyggt stöd för sockets och ändra nätverksrelaterade saker. Samma sak gäller språk som C och C++ och majoriteten av alla webervers är utvecklade i någon av dessa språk, så bara för att det finns webservers betyder det inte att språket eller ens standardbiblioteket kan hantera URL:er, sådant kan man ju skriva själv eller använda färdiga 3:e partsbibliotek.

Du skriver inte vilken Ada-miljö eller OS du använder, men om du använder GNAT (Ada kompilator baserad på GCC-kompilatorinfrastrukturen) så finns det ett bibliotek för sockets som heter GNAT.Sockets.

Du kan omvandla ett namn likt www.sweclockers.com till IP-adress via anropen
host_entries : GNAT.Sockets.Host_Entry_Type := 
   GNAT.Sockets.Get_Host_By_Name("www.sweclockers.com");
--- host_entries kan innehålla noll eller flera IP-adresser då 
--- man kan binda ett namn till flera adresser.
--- Plocka ut den första adressen så här
--- Antar här att det finns en variabel med namn "SockAddr"
--- med typen "GNAT.Sockets.Sock_Addr_Type"
SockAddr.Addr := GNAT.Sockets.Addresses(host_entries, 1);
SockAddr.Port := 80;
SockAddr är nu det du kan använda för att öppna en socket mot www.sweclockers.com på port 80, som är det HTTP använder.
__________________
Those who don't understand UNIX are condemned to reinvent it, poorly. – Henry Spencer
virtual void är inte uppkopplad
2013-06-25, 10:40   #3

jovnas

Medlem

jovnass avatar

Plats: Göteborg

Registrerad: maj 2004

Jag uppfattar frågan som att du från ditt ADA-program vill öppna Internet Exploder (eller vilken som nu är standard-browser).
Då jag aldrig pysslat med ADA, så kan jag inte hjälpa dig med hur man går tillväga, men man brukar (iaf i Windows) bara behöva starta en ny process med URLen som "mål".

exempel i C#:
var process = new Process();
process.StartInfo.FileName "http://www.sweclockers.com/";
process.Start(); 
__________________
as far as we can tell, the massacre went well...
jovnas är inte uppkopplad
2013-07-06, 12:57   #4

Itchago

Medlem

Itchagos avatar

Plats: Västerås

Registrerad: feb 2009

Citat:
Ursprungligen inskrivet av virtual void Visa inlägg
Spoiler:
Väldigt få som lär sig Ada idag så lär vara tunt med svar. Har använt Ada för ett par år sedan, men är definitivt ingen expert.

Är rätt säker på att språket Ada har inget inbyggt stöd för sockets och ändra nätverksrelaterade saker. Samma sak gäller språk som C och C++ och majoriteten av alla webervers är utvecklade i någon av dessa språk, så bara för att det finns webservers betyder det inte att språket eller ens standardbiblioteket kan hantera URL:er, sådant kan man ju skriva själv eller använda färdiga 3:e partsbibliotek.

Du skriver inte vilken Ada-miljö eller OS du använder, men om du använder GNAT (Ada kompilator baserad på GCC-kompilatorinfrastrukturen) så finns det ett bibliotek för sockets som heter GNAT.Sockets.

Du kan omvandla ett namn likt www.sweclockers.com till IP-adress via anropen
host_entries : GNAT.Sockets.Host_Entry_Type := 
   GNAT.Sockets.Get_Host_By_Name("www.sweclockers.com");
--- host_entries kan innehålla noll eller flera IP-adresser då 
--- man kan binda ett namn till flera adresser.
--- Plocka ut den första adressen så här
--- Antar här att det finns en variabel med namn "SockAddr"
--- med typen "GNAT.Sockets.Sock_Addr_Type"
SockAddr.Addr := GNAT.Sockets.Addresses(host_entries, 1);
SockAddr.Port := 80;
SockAddr är nu det du kan använda för att öppna en socket mot www.sweclockers.com på port 80, som är det HTTP använder.
Provade din kod, fungerade finfint, men den åstadkom inte det jag var ute efter. Tack ändå.

Citat:
Ursprungligen inskrivet av jovnas Visa inlägg
Jag uppfattar frågan som att du från ditt ADA-program vill öppna Internet Exploder (eller vilken som nu är standard-browser).
Då jag aldrig pysslat med ADA, så kan jag inte hjälpa dig med hur man går tillväga, men man brukar (iaf i Windows) bara behöva starta en ny process med URLen som "mål".

exempel i C#:
var process = new Process();
process.StartInfo.FileName = "http://www.sweclockers.com/";
process.Start();
Det är PRECIS det jag är ute efter, men tyvärr så funkar inte riktigt ada som C#, vad jag vet iaf. Har hittat en funktion i ADA.AWS som ger möjlighet till att omdirigera webbläsaren till en URL, ska kika om det fungerar för sig.

Hmm.. Att det ska vara så svårt, men tycker ju att länkar i program är rätt vanligt?
Itchago är inte uppkopplad
2013-07-06, 13:37   #5

jovnas

Medlem

jovnass avatar

Plats: Göteborg

Registrerad: maj 2004

den här länken kanske kan vara till hjälp?
http://blog.vacs.fr/index.php?post/2...n-Java-and-Ada
__________________
as far as we can tell, the massacre went well...
jovnas är inte uppkopplad
2013-07-08, 20:11   #6

Itchago

Medlem

Itchagos avatar

Plats: Västerås

Registrerad: feb 2009

Citat:
Ursprungligen inskrivet av jovnas Visa inlägg
den här länken kanske kan vara till hjälp?
http://blog.vacs.fr/index.php?post/2...n-Java-and-Ada
Tackar, var precis det jag letar efter, tror jag... Nu är då nästa problem, utilities är ett opensource paket med massa spännande grejjer i måste installeras. Görs det under unix så har den som publicerat paketet fina instruktioner.

Här är paketet för den nyfikne:
https://code.google.com/p/ada-util/

Instruktioner, väldigt simpelt om man har tillgång till ett unix(antar jag) system. Frågan är hur jag får igång det under windows? Har tyvärr ingen dator med ubutnu eller liknande på för tillfället, man kanske ska prova med en VM och se vad reusltatet blir? Någon som vet vad motsvarande kommandon är på windows?

Har provat med att bara flytta över källflierna jag behöver, men den trilskas ändå :/
Spoiler:
Citat:
Build
Build with the following commands:

./configure
make

The samples can be built using:

gnatmake -Psamples
The unit tests are built using (you will need Aunit):

gnatmake -Ptests
And unit tests are executed with:

bin/util_harness
Installation
The installation on Ubuntu or Debian-based system is possible by using the install target:

sudo make install

Senast redigerad av Itchago 2013-07-08 klockan 20:30.
Itchago är inte uppkopplad
2013-07-09, 21:04   #7

haxbax

Medlem

Registrerad: apr 2012

Du kan prova att installera cygwin eller något liknande och se efter om det går bra att följa installationsinstruktionerna för linux då. Annars är det nog en god idé att prova med en virtual machine först och se efter om det funkar så som du förväntar dig överhuvudtaget.
haxbax är inte uppkopplad
2013-07-10, 10:59   #8

Fnorken

Medlem

Plats: Göteborg

Registrerad: dec 2008

Citat:
Ursprungligen inskrivet av Itchago Visa inlägg
Instruktioner, väldigt simpelt om man har tillgång till ett unix(antar jag) system. Frågan är hur jag får igång det under windows? Har tyvärr ingen dator med ubutnu eller liknande på för tillfället, man kanske ska prova med en VM och se vad reusltatet blir? Någon som vet vad motsvarande kommandon är på windows?
Du behöver nog ett unix-skal för att köra configure-scriptet. Jag gjorde sådant här någon gång i forntiden och jag har för mig att jag använde http://www.mingw.org/ eller om det var http://www.cygwin.com/.
Fnorken är inte uppkopplad
2013-07-12, 20:38   #9

Itchago

Medlem

Itchagos avatar

Plats: Västerås

Registrerad: feb 2009

Tack för svaren Har nu löst problemet! Fanns visst redan ett paket för att starta program, bifogar koden för den nyfikne/strandade ada-programmeraren
(Inte jag som gjort just denna biten, den var väldigt bra pedagogiskt så jag översatte den till svenska bara)

Nu fattas bara att det blir lite estetiskt snyggt, att få bort den fula kommandopromten som dyker upp. Vet att det ska finnas någon "silent" switch att hänga på programmet när det startar, men får det inte att funka, någon som vet?

Frågan är altså: Starta program som vanligtvis ploppar upp en terminalruta i en halv sekund, få bort den rutan så saker och ting sker utan estetiska handikapp

Koden lyder: (Har provat att ta bort biten som skriver ut grejjer, men jag antar att det är i själva .exe filen som det ska sitta någon switch för att inte visa kommandopromten vid start...)
Spoiler:
with Ada.Text_IO ;use  Ada.Text_IO ;
with GNAT.OS_Lib ; use GNAT.OS_Lib ;

 procedure web_test is

   Program_Name : String := "Filväg till ditt program, kan funka med bara tex "cmd.exe" men inte för alla program" ;
   Args         : Argument_List_Access ;
   Success      : Boolean ;

 begin

   -- Initera listan över argument man kan tänkas vilja ha med under starten

   Args := Argument_String_To_List (" Dina argument här" ) ;

--Startar programmet
   Spawn ( Program_Name,Args.all , Success ) ;
--Skriver ut ifall det blir några fel
   if Success then
     Put_Line ( "Fungerade korrekt" ) ;
   else
     Put_Line ( "FEL" ) ;
   end if ;
 end web_test ;
Itchago är inte uppkopplad
Senaste nyheterna

Redaktionens senaste nyhetsrubriker

Sök jobb