[#1] Nazwa urządzenia w CLI.
Cześć. Mam pytanko jak zrobić w CLI aby po wpisaniu nazwy dysku, dyskietki lub płyty pokazała mi się nazwa urządzenia?

Przykład, gdzie XXX to polecenie które szukam:

XXX AmigaOS:


Wynik:

DH0:


Lub

XXX MACD_10:

Wynik:

CD0:


Jak to zrobić?
[#2] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #1

Jak to zrobić?


zawartością w pliku s:Shell-Start

np:

Prompt "%N.%S> "
Alias Clear "Echo *"*E[0;0H*E[J*" "
Alias XCopy "Copy CLONE "
1
[#3] Re: Nazwa urządzenia w CLI.

@Cezarykl, post #2

Jak miałbym to użyć w skrypcie?
[#4] Re: Nazwa urządzenia w CLI.

@Cezarykl, post #2

Jak wpiszę

INFO NAZWA_VOLUMENU:

to wyrzuca dwie linijki tekstu. Z pierwszą sobie poradzę i usunę ją, natomiast w drugiej pojawia się na początku to co chcę otrzymać, czyli np. DH0: ale później jest odstęp i mnóstwo innych informacji, które są mi zbędne. Jak je usunąć?
[#5] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #4

Jeśli nazwa urządzenia będzie miała stałą długość to możesz uzyc ECHO i parametry FIRST i LEN
[#6] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #1

Ten programik zrobi to o co Ci chodzi:
http://bitplan.pl/amiga/download/diskfromvolume.lha

Źródło w E:
/*  diskfromvolume.e  */

OPT PREPROCESS

MODULE 	'dos/dos',
	'dos/dosextens',
	'dos',
	'dos/filehandler'
		

ENUM ERR_NONE, ERR_KICK, ERR_LOCK, ERR_MEM, ERR_DEVICE_NOT_FOUND,ERR_ARGS

RAISE 	ERR_MEM IF String()=NIL,
	ERR_KICK IF KickVersion()=FALSE,
	ERR_LOCK IF Lock()=NIL,
	ERR_ARGS IF ReadArgs()=NIL

DEF lock=NIL,
	dosinfo=NIL:PTR TO dosinfo, 
	dos=NIL:PTR TO doslibrary, 
	dvi=NIL:PTR TO devinfo, 
	fl=NIL:PTR TO filelock,
	process=NIL:PTR TO process,
	bstr=NIL,
	bstrLen=0,
	strName=NIL,
	readargs=NIL, 
	rargs[2]:ARRAY OF LONG

PROC main () HANDLE

	KickVersion(37)

	readargs:=ReadArgs('VOLUME/A', rargs, NIL)
    		
	/* wylaczenie requesterow w przypadku gdy zostanie podany bledny label */
	process:=FindTask(NIL)
	process.windowptr:=-1

	lock := Lock(rargs[0], SHARED_LOCK)
	fl:= BADDR(lock)
	dos:=dosbase
	dosinfo:=BADDR(dos.root.info)

	dvi := BADDR(dosinfo.devinfo)
	WHILE (dvi)
		IF (dvi.type = DLT_DEVICE AND dvi.task = fl.task)
			bstr:= BADDR(dvi.name)
			bstrLen := bstr[0]	
			strName := String (bstrLen +1 )
			StrCopy (strName, bstr +1 , bstrLen)
			StrAdd(strName, ':')						
		ENDIF
		dvi:=BADDR(dvi.next)
	ENDWHILE

	UnLock(lock)

	IF (strName)
		WriteF('\s\n', strName)
		DisposeLink(strName)
	ELSE
		Raise( ERR_DEVICE_NOT_FOUND)
	ENDIF

	EXCEPT DO
	
		SELECT exception
			CASE ERR_KICK	
				WriteF('Requires at least V37\n')
			CASE ERR_MEM      	
				WriteF('Not enough memory\n')
			CASE ERR_LOCK
				WriteF('Can not lock volume \s\n', rargs[0])
			CASE ERR_DEVICE_NOT_FOUND
				WriteF('Device for volume \s not found\n', rargs[0])
			CASE ERR_ARGS
				WriteF('Bad args\n')

		ENDSELECT      

		IF readargs THEN FreeArgs(readargs)

		CleanUp(exception)
	
ENDPROC
3
[#7] Re: Nazwa urządzenia w CLI.

@vojo, post #6

Program działa i robi nawet wiecej.
Chyba że to było zamierzone
Wystarczy jako argument podać istniejącą ścieżkę dostępu do pliku lub katalogu, a wynikiem będzie nazwa dysku.

Ostatnia aktualizacja: 13.01.2025 14:34:54 przez Norbert
[#8] Re: Nazwa urządzenia w CLI.

@Norbert, post #7

Program działa i robi nawet wiecej.
Chyba że to było zamierzone
Wystarczy jako argument podać istniejącą ścieżkę dostępu do pliku lub katalogu, a wynikiem będzie nazwa dysku.


Nie planowane, to efekt uboczny, w sumie zadziała ze wszystkim co przyjmie funkcja Lock() z dos.library
[#9] Re: Nazwa urządzenia w CLI.

@vojo, post #8

Super OK Dziękuję. Pytanie, czy będę mógł go udostępnić kiedyś dalej razem z moim skryptem? Ty jesteś autorem?
[#10] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #9

Tak, to moje wypociny, można rozpowszechniać jako public domain.
1
[#11] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #9

A co to za skrypt, że wymagane jest nazwa urządzenia, a nie nazwa dysku?
[#12] Re: Nazwa urządzenia w CLI.

@Norbert, post #11

Niestety skrypt dotyczy WinUAE. Opisywałem go już w 14 numerze K&A Plus. W tedy była to jeszcze wczesna wersja, ale działająca, bo dająca możliwość montowania obrazów płyt CD oraz dyskietek z poziomu AmigaOS, bez konieczności używania GUI (F12). Aktualnie dosyć mocno go zmodyfikowałem, dodając kilka funkcji i została mi tylko jedna rzecz. Dotychczas aby wszystko działało poprawnie należało edytować, dostosować skrypt do swojego emulowanego systemu. Koniecznością było podanie windowsowej ścieżki dostępu do folderu z obrazami CD lub dyskietek oraz nazwę wolumenu pod jaką zamontowany jako twardy dysk jest wspomniany folder. Aktualnie wystarczy taki folder z obrazami zamontować w WinUAE choćby jak dysk DH2: z dowolną nazwą wolumenu. Po wczytaniu WB i uruchomieniu skryptu ten każe wskazać owy wolumen i sam wydłubie sobie windowsową ścieżkę dostępu. Niestety skrypt wymaga kilku programików dostępnych choćby na Aminecie. Mam zamiar w przyszłości udostępnić ten skrypt załączając do niego wymagane programy, aby nie było konieczności szukania ich na własną rękę. Oczywiście zamieszczę stosowne informacje gdzie można je znaleźć i kto jest ich autorem.

Mimo tego, że skrypt dotyczy WinUAE to na pewno każdy będzie mógł się nim choćby zainspirować do stworzenia czegoś innego.
1
[#13] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #12

A nie myślałeś nad GUI4Cli ?
Można w prosty sposób stworzyć GUI dla programu w CLI.
Są podane przykłady, które można w zmodyfikować do swoich celów.
Moje "wypociny" dla programu hxcmount

Przyciski można dowolnie konfigurować i przypisać działania.
Nawigacja po plikach jest taka jak na filemanagerach.
[#14] Re: Nazwa urządzenia w CLI.

@Norbert, post #13

Fajne to GUI. Ja niestety zraziłem się kilka razy do GUI4CLI bo nie udało mi się nic wskórać dołączonym kreatorem. Zastanawiałem się też zawsze jak stworzyć takie fajne GUI jakie ma PlayGUI.
[#15] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #14

Przecież w archiwum PlayGUI masz cały skrypt do GUI4CLI.
Wystarczy tylko dopasować skrypt do swoich potrzeb.
[#16] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #12

świetny pomysł i zacna idea. powodzenia
[#17] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #1

Pytanie, prośba do osób używających WinUAE. Jeżeli tak samo jak ja, montujecie foldery jako dyski/wolumeny to prosiłbym o ich listing z konfiguracji. Można to zrobić wpisując w CLI:

UAE-Configuration filesystem2

Dzięki temu będę mógł zweryfikować, czy skrypt zadziała poprawnie u wszystkich.
[#18] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #17

[#19] Re: Nazwa urządzenia w CLI.

@Ponki1986, post #12

A jeśli chodzi o EJECT dla FLOPPY, to można byłoby przerobić program uaectrl (jest źródło) żeby podanie parametru typu
uaectrl  0

robiło EJECT dla df0 , 1 dla df1 itp itd
Możliwości jest wiele. Jest też RESET, wyłączenie emulator itd.
Może znajdzie się ktoś co to przerobi.

/***********************************************************
 * UAE - The U*nix Amiga Emulator			   *
 *							   *
 * UAE-Ctrl -- Emulator Control from Inside Emulation	   *
 *  (c) 1996 Tauno Taipaleenmaki <tataipal@raita.oulu.fi>  *
 *							   *
 * Version 0.1						   *
 *							   *
 * Command line version, Should work with any KS version   *
 *							   *
 ***********************************************************/
#include <clib/exec_protos.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "uae-control.h"
#include "uae_pragmas.h"

#define MAX_DRV_NAME	      20

struct UAE_CONFIG      config;

void print_drive_status(void);
void quit_program(int error, char *text);

/************************************
 * Main program 		    *
 ************************************/
int main()
{
       int		    quit = 0,i, correct,number;
       char		    buf[257];
       char		    *langs[]={
	      "US\0","DE\0","SE\0","FR\0","IT\0",
       };

/* Read UAE configuration */
       i = GetUaeConfig( &config );

       while( quit == 0 ) {
	      printf(" UAE-Control v0.1\n\n");
	      printf(" 1) Reset\n");
	      printf(" 2) Debug\n");
	      printf(" 3) Exit Emulator\n");
	      printf(" 4) Change framerate     (Currently : %ld)\n", config.framerate);
	      printf(" 5) Toggle sound         (Currently : %s)\n", config.do_output_sound ? "ON" : "OFF");
	      printf(" 6) Toggle fake joystick (Currently : %s)\n", config.do_fake_joystick ? "ON" : "OFF");
	      printf(" 7) Change language      (Currently : %s)\n", langs[config.keyboard]);
	      printf(" 8) Eject a disk\n");
	      printf(" 9) Insert a disk\n");
	      printf("10) Exit UAE-Control\n\n");
	      correct = 0;
	      while( correct == 0 ) {
		     printf(" Command : ");
		     gets( buf );
		     i = atoi( buf );
		     if ((i > 0) && (i < 11))
		       correct = 1;
	      }
	      switch( i ) {
	       case 1:
		     HardReset();
		     break;
	       case 2:
		     DebugFunc();
		     break;
	       case 3:
		     ExitEmu();
		     break;
	       case 4:
		     printf(" Enter new framerate (1-20) :");
		     gets( buf );
		     number = atoi( buf );
		     if (SetFrameRate (number))
			    GetUaeConfig(&config);
		     else
			    printf(" Illegal value, not changed.\n");
		     break;
	       case 5:
		     if (config.do_output_sound)
		       DisableSound();
		     else
		       EnableSound();
		     GetUaeConfig( &config );
		     break;
	       case 6:
		     if (config.do_fake_joystick)
		       DisableJoystick();
		     else
		       EnableJoystick();
		     GetUaeConfig( &config );
		     break;
	       case 7:
		     printf(" 1 = US, 2 = DE, 3 = SE, 4 = FR, 5 = IT\n");
		     printf(" What will it be : ");
		     gets( buf );
		     number = atoi( buf );
		     if ((number >= 1) && (number <= 5)) {
			    ChangeLanguage( number-1 );
			    GetUaeConfig( &config );
		     } else {
			    printf(" Illegal value, not changed.\n");
		     }
		     break;
	       case 8:
		     print_drive_status();
		     printf(" Eject which drive (1-4): ");
		     gets( buf );
		     number = atoi( buf );
		     if ((number >= 1) && (number <=4 )) {
			    EjectDisk( number-1 );
			    GetUaeConfig( &config );
		     } else {
			    printf(" Illegal drive, not changed.\n");
		     }
		     break;
	       case 9:
		     print_drive_status();
		     printf(" Enter disk to drive (1-4): ");
		     gets( buf );
		     number = atoi( buf );
		     if ((number >= 1) && (number <= 4)) {
			    printf("Name of diskfile :");
			    gets( buf );
			    InsertDisk( (UBYTE *)&buf, number - 1 );
			    GetUaeConfig( &config );
		     } else {
			    printf(" Illegal drive, not changed.\n");
		     }
		     break;
	       case 10:
		     quit = 1;
		     break;
	      }
       }
       quit_program(0, "");
       return(0);
}

/******************************************
 * Prints drive status			  *
 ******************************************/
void print_drive_status(void)
{
       printf(" DF0 : %s\n", config.disk_in_df0 ? config.df0_name : "EMPTY");
       printf(" DF1 : %s\n", config.disk_in_df1 ? config.df1_name : "EMPTY");
       printf(" DF2 : %s\n", config.disk_in_df2 ? config.df2_name : "EMPTY");
       printf(" DF3 : %s\n", config.disk_in_df3 ? config.df3_name : "EMPTY");
}



/******************************************
 * Quits the program			  *
 ******************************************/
void quit_program(int error, char *text)
{
       if (error > 0) {
	      printf(" UAE-Control v0.1\n");
	      printf("  (c)1996 Tauno Taipaleenmaki\n\n");
	      printf(" ERROR: %s\n", text);
       }
}
[#20] Re: Nazwa urządzenia w CLI.

@Norbert, post #19

Ale działa bez problemu:

UAE-Configuration floppy0 "."

Cyfry od 0 do 3 to oczywiście numery wirtualnych stacji. Więc zmieniamy ją dla innej stacji niż DF0.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem