        $42 LSEEK



        long Fseek( long offset, int handle, int seekmode );



Bisher haben wir nur rein sequentielle Datenzugriffe kennengelernt. 
Wir knnen eine beliebige Datei von Anfang an durchlesen, bis eine 
gewnschte Information erreicht ist. Mit jedem Lesen wird ein 
interner Dateipointer mitgefhrt, der jeweils auf das nchste zu 
lesende Byte zeigt. Diesen Pointer knnen wir durch Lesen aus der 
Datei kontinuierlich in Richtung Dateiende bewegen. Ein paar Bytes 
zurck oder vorwrts, also richtig wahlfrei knnen wir den Zeiger so 
nicht verstellen. Das ist jedoch fr viele Anwendungen erforderlich.



LSEEK bietet nun eine auerordentlich komfortable Mglichkeit, den 
Dateipointer auf jedes beliebige Byte innerhalb der Datei zu stellen 
und ab dieser Stelle zu lesen oder zu schreiben. Diese UNIX- 
kompatible Mglichkeit des GEMDOS ist um vieles komfortabler als die 
z.B. von CP/M bekannten Mglichkeiten zur relativen Dateiverwaltung.



Insgesamt werden der LSEEK-Funktion drei Parameter bergeben. Der 
ertse Parameter gibt die Anzahl der Bytes an, um die der Pointer 
bewegt werden soll. Ein weiterer Parameter ist die Handle-Nummer der 
Datei. Der letzte Parameter ist ein Modus-Wort, welches beschreibt, 
wie der Dateipointer zu bewegen ist. Eine Null als Modus bewegt den 
Zeiger an den Anfang und von da die angegebene Zahl Bytes zum Ende 
der Datei. Als Anzahl drfen nur positive Werte gewhlt werden. Bei 
einem Modus-Wort von 1 wird der Zeiger um den gewnschten positiven 
oder auch negativen Betrag ab der aktuellen Position bewegt und bei 
einer 2 gilt die Entfernungsangabe ab dem Ende der Datei. Bei einer 2 
als Moduswert sind nur negative Werte zugelassen.



Nach dem Aufruf erhlt man in D0 die absolute Position des Zeigers ab 
Dateianfang oder eine Fehlermeldung.



----------------------------------------------------------------------
MOVE.W  #1,-(SP)        * relativ vom derzeitigen Filepointer

MOVE.W  handle,-(SP)    * File-Handle

MOVE.L  #-32,-(SP)      * 32 Bytes zurck

MOVE.W  #$42,-(SP)      * Funktionsnummer

TRAP    #1

ADD.L   #10,SP

TST.W   D0              * ist ein Fehler aufgetreten?

BMI     error           * scheint so

...

handle: ds.w    1       * Platz fr die Handle-Nummer

----------------------------------------------------------------------
