home *** CD-ROM | disk | FTP | other *** search
/ Action! Club Magazin 4B / Action_Club_Magazin_4_1987_Action_User_Group_Side_B.atr / pointer.krs < prev    next >
Text File  |  2023-02-26  |  4KB  |  1 lines

  1. POINTER.KRS¢*************************************¢*                                   *¢*                                   *¢*     >>>   P O I N T E R   <<<     *¢*                                   *¢*                                   *¢*  (c) 1987 by Action! User Group   *¢*                                   *¢*************************************¢¢¢¢Der Pointer ist wiederum ein neuer ¢Variablentyp. Mit ihm ist es moeglich,¢auf andere Varaiablen,also Speicher-¢plaetze zu 'zeigen' und zu veraendern.¢Die POINTER werden ebenfalls wie Var-¢iablen definiert, nur mit dem Zusatz¢POINTER. Es gibt sie auch als ver-¢schiedenen Arten:¢z.B.:¢¢BYTE POINTER ZEIGER¢CARD POINTER ZEIGER¢INT POINTER ZEIGER¢¢oder  man kann die POINTER auch auf¢besimmte Addressen setzen:¢¢CARD POINTER = 88  ¢¢Doch dazu spaeter mehr.¢¢Jetzt wieder ein Beispiel:¢¢BYTE POINTER COLOR¢¢PROC MK_DEMO9()¢¢ COLOR=710   ; DEN POINTER AUF ADD-¢             ; RESSE 710 SETZEN¢¢ COLOR^=0    ; ADDRESSE, AUF DIE DER¢             ; POINTER ZEIGT(710) AUF¢             ; 0 SETZTEN¢¢ PRINT("POINTER ZEIGT AUF ADR ")¢ PRINTCE(COLOR)¢¢ PRINT("ADR AUF DIE POINTER ZEIGT IST ")¢ PRINTBE(COLOR^)¢ ¢ COLOR==-1   ; POINTER AUF EINE ADD-¢             ; RESSE NIEDRIGER SETZEN¢             ; (709)¢ ¢ COLOR^=15   ; UND 709 AUF 15 SETZEN¢¢ PRINT("POINTER ZEIGT AUF ADR ")¢ PRINTCE(COLOR)¢¢ PRINT("ADR AUF DIE POINTER ZEIGT IST ")¢ PRINTBE(COLOR^)¢¢RETURN¢¢¢Aus dem obigen Beispiel sehen wir,dass¢Zur Veraenderung der Speicherzelle,¢auf die ein POINTER zeigt, das '^' ¢Zeichen notwendig ist.¢Aus dem Beispiel sollte auch ersicht-¢lich werden, wie die Pointer ver-    ¢aendert werden koennen.¢¢Die POINTER haben meistens die Auf-¢gabe, Speicherzellen, auf die sie¢zeigen, zu veraendern. In Basic ge-¢schieht dies mit dem 'POKE' Befehl.¢Obwohl es in Action! auch eine 'POKE'¢Prozedur gibt, ist immer eleganter¢mit POINTERN zu arbeiten, da diese¢gegenueber dem Aufruf einer 'POKE'¢Prozedur schneller arbeiten.¢¢Die BYTE POINTER koennen immer nur¢EIN Byte veraendern, auf das sie ¢zeigen. Die BYTE POINTER selber aber¢sind natuerlich in ZWEI BYTE abgelegt,¢um auf die Addressen von 0 bis $FFFF¢zeigen zu koennen.¢¢Nun noch ein Beispiel fuer CARD¢POINTER¢¢CARD POINTER SCREEN=88¢¢PROC MK_DEMO10()¢BYTE POINTER SCREENSTART¢      ¢PRINT("SCREEN ZEIGT AUF ADR. ")¢PRINTCE(SCREEN^)¢¢SCREENSTART=SCREEN^+40*10¢ ¢SCREENSTART^='a¢¢RETURN¢¢Im Beispiel wird der CARD POINTER ¢auf Addresse 88/89 gelegt. In ¢MK_DEMO10() wird nach der Ausgabe¢der lokale POINTER SCREENSTART auf¢die Addresse gelegt, auf die SCREEN¢zeigt(in diesem Fall auf die Start-¢addresse des Bildschirms, die ja¢in 88/89 festgehalten wird.¢Aber dazu wird noch der Wert '40*10'¢hinzuaddiert, um das folgende 'a' in¢die 10. Zeile zu setzen( eine Zeile¢in GRAPHICS 0 benoetigt 40 Byte)¢¢-------------------------------------¢¢Nun kommt aber endlich die Verwendung¢der POINTER fuer Parameter-Zeichen-¢ketten:¢Der Arrayname als Variablenname zeigt¢immer auf das Element #0. Die  ¢einzelnen Elemente kann man dann immer¢dazuaddieren. Wenn wir das wissen, so¢ist es auch einfach zu verstehen, dass¢wir nicht alle Elemente des Arrays als¢Parameter uebergeben muessen, sondern¢eigentlich nur dessen Startaddresse.¢Un dafuer bieten sich dann die POINTER¢ganz gut an... Doch erstmal wieder ein¢Beispiel:¢ ¢BYTE ARRAY FILE(30)¢¢PROC READFILE(BYTE POINTER DATEI)  ¢BYTE A¢ CLOSE(2)¢ OPEN(2,DATEI,4,0)¢ DO¢  A=GETD(2)¢  PUT(A)¢ UNTIL EOF(2)=136¢ OD¢RETURN¢¢PROC MK_DEMO11()¢ PUT(125)¢ PRINTE("GEBE FILESPEC EIN")¢ INPUTMD(0,FILE,20)¢ READFILE(FILE)¢RETURN¢¢¢Dieses Programm fragt zunaechst nach ¢dem FILESPEC(also mit Geraetenamen und¢so...), dann ruft es die PROC READFILE¢mit dem FILESPEC als Parameter auf.¢In READFILE wird das File dann Byte-¢weise gelesen und auf dem Bildschirm¢mit 'PUT' ausgegeben, bis die EOF¢Variable auf 136 ist (End of File)¢'EOF' ist uebrigens eine eigene Action!¢Variable. In Klammern dahinter muss ¢nur die Kanalnummer stehen, die ab-¢gefragt werden soll. ¢¢Der Kurs geht weiter mit:¢¢¢           BEF2.KRS¢¢dem 2. Teil der 'eingebauten' PROCs¢¢