Quick Web Site Guide INDEX NEWS LINKS FEATURES MART TALKING ABOUT

Amiga Features LOGO


Tutorials για C στην Amiga!


C Tutorial #4

Σε αυτό το άρθρο θα δούμε ένα απλό παράδειγμα για το πώς μπορούμε να ανοίξουμε ένα
file requester απο την asl.library που είναι και το standard format για τους requesters για την Amiga.
Φυσικά όπως ίσως ξέρετε υπάρχουν και άλλες βιβλιοθήκες που χρησιμοποιούνται για αυτο το σκοπό αλλά η συγκεκριμένη είναι η πιο συνηθισμένη αφού είναι και στο λειτουργικό της εταιρίας!
Πάμε λοιπον στον κώδικα:
#include <stdio.h>
#include <clib/intuition_protos.h>
#include <clib/asl_protos.h>
#include <clib/dos_protos.h>
#include <clib/exec_protos.h>

struct FileRequester *fReq;

		
int main(void)
{
	struct Library *IntuitionBase;
	struct Library *AslBase;
	int test;
	BOOL result;
	STRPTR filnam, drnam;

	IntuitionBase=OpenLibrary("intuition.library",0);
	AslBase=OpenLibrary("asl.library",0);
	fReq=AllocFileRequest();	
	result=RequestFile(fReq);
	if(result==FALSE){
		printf("Error in selecting\n");
	}else{
		filnam=fReq->fr_File;
		drnam=fReq->fr_Drawer;
		printf("The file which was selected is:%s%s.\n", drnam,filnam);
	};
	scanf("%d", &test);
	CloseLibrary(IntuitionBase);
	CloseLibrary(AslBase);
	return 0;
}

Επεξήγηση εντολών
struct <.....> <.....> Αυτή η εντολή δημιουργεί δομές που πρέπει να οριστούν έτσι ώστε να χρησιμοποιηθούν αυτές για να κρατήσουν τα αποτελέσματα των συναρτήσεων (συνήθως).
Για το πρώτο struct FileRequester *fReq; θα αναφέρω απλώς οτι το *fReq είναι πλέον μετά την εκτέλεση της εντολής έτοιμο και δομημένο έτσι ώστε να μπορεί να κρατήσει τα αποτελέσματα απο την AllocFileRequest()
Επειδή η AllocFileRequest() επιστρέφει μια δομή απο πληροφορίες οταν εκτελείται, πρέπει να υπάρχει και ο κατάλληλα διαμορφωμένος χώρος στην μνήμη για να τις κρατήσει. Σωστά;
Ε λοιπόν με την struct δημιουργούνται τα κατάλληλα πεδία όπου θα μπούν αυτα τα στοιχεία ώστε να τα χρησιμοποιήσουμε αργότερα.
BOOL result; Ισως να το φανταστήκατε ήδη οτι έτσι ορίζουμε μια μεταβλητή σαν τύπου Boolean.
Δηλαδή αυτό σημαίνει οτι αυτή η μεταβλητή μπορεί να πάρει μόνο 2 τιμές που είναι οι: TRUE/FALSE.
Ετσι ελέγχουμε το αποτέλεσμα της RequestFile(fReq) αν είναι αληθές ή όχι και ανάλογα προχωρούμε στο άνοιγμα του requester ή αν είναι το αποτέλεσμα της επιλογής δεν είναι σωστό, τότε μας δίνει η συνάρτηση FALSE όποτε και τυπώνεται το κατάλληλο μύνημα και το πρόγραμμα τελειώνει χωρίς να μας δώσει το αρχείο που προσπαθήσαμε να επιλέξουμε.
STRPTR filnam, dirnam; Είναι ο ορισμός STRING POINTER.
Με αυτόν τον εύκολο τρόπο θέτουμε μια μεταβλητή ικανή να κρατήσει αλφαριθμητικά δεδομένα.
OpenLibrary("LibName.library", 0) Οπως φανερώνει και το όνομα αυτή η συνάρτηση ανοίγει μια βιβλιοθήκη για να μπορέσουμε να χρησιμοποιήσουμε τις ήδη έτοιμες συναρτήσεις που περιέχει.
Το LibName.library είναι το όνομα της συνάρτησης και ο αριθμός 0 δηλώνει ποιά version της συνάρτησης θέλουμε να χρησιμοποιήσουμε.
Σε περίπτωση που βάλουμε 0 όπως και στο παράδειγμα, τότε ζητάμε όποια version υπάρχει και όχι καποια συγκεκριμένη.
Τέλος όπως παρατηρήσατε η συνάρτηση αυτή δίνει κάποιο αποτέλεσμα που φυλάσετε σε μια struct τύπου Library.
Δηλαδή και πάλι δημιουργούμε μια δομή με κατάλληλα πεδία για να φυλάξουν τα αποτελέσματα του ανοίγματος της βιβλιοθήκης.
Στην ουσία αυτά τα αποτελέσματα είναι κυρίως πληροφορίες για το σύστημα και όχι τόσο χρήσιμα σε έναν μή εμπειρο coder.
filnam=fReq->fr_File; Αυτός είναι ο τρόπος πρόσβασης σε ένα πεδίο μίας δομής!
Δηλαδή με αυτό τον τρόπο στο συγκεκριμένο παράδειγμα βάζω στην μεταβλητή filnam το περιεχόμενο του πεδίου fr_File της δομής fReq η οποία δομή έχει το αποτέλεσμα της επιλογής που έχω κάνει όταν πατήσω το ΟΚ απο τον file requester.
Το fr_File είναι ήδη ορισμένο μέσα στην δομή απο τον ορισμό που κάναμε για το fReq!
Το ίδιο συμβαίνει και με την dirnam.
CloseLibrary(LibName) ΠΑΝΤΑ όταν δεν χρειαζόμαστε άλλο την βιβλιοθήκη και ειδικά στο τέλος του προγράμματος, δεν πρέπει ΠΟΤΕ να ξεχνάμε να κλείσουμε τις βιβλιοθήκες που ανοίξαμε ετσι ώστε να απελευθερώσουμε την μνήμη που αυτές καταλαμβάνουν!
Και αυτό γίνεται με την συγκεκριμένη συνάρτηση.


C Tutorials C Tutorial #1 C Tutorial #2 C Tutorial #3 C Tutorial #4
1