home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / D / CLISP / CLISPSRC.TAR / clisp-1995-01-01 / src / atari.d < prev    next >
Encoding:
Text File  |  1993-03-04  |  34.0 KB  |  846 lines

  1. # Include-File fⁿr ATARI-Version von CLISP
  2. # Bruno Haible 4.3.1993
  3.  
  4.  
  5. # Konstanten fⁿr Steuerzeichen:
  6.  
  7. #define BEL  7              # Ton ausgeben
  8. #define RUBOUT BS           # Rubout = Backspace
  9. #define CRLFstring  "\r\n"  # C-String, der CR/LF enthΣlt
  10.  
  11. # Datenstrukturen fⁿr Betriebssystem-Aufrufe, aus ATARI_TURBO's TOS.H :
  12. # zu GEMDOS:
  13.   typedef struct          # used by Fsetdta, Fgetdta
  14.     {
  15.       BYTE  d_reserved[21];
  16.       UBYTE d_attrib;
  17.       UWORD d_time;
  18.       UWORD d_date;
  19.       ULONG d_length;
  20.       BYTE  d_fname[14];
  21.     } DTA;
  22.   typedef struct { UWORD time; UWORD date; } DOSTIME;
  23.   typedef struct          # used by Pexec
  24.     {
  25.       UBYTE length;
  26.       BYTE  command_tail[127];
  27.     } COMMAND;
  28.   typedef struct baspag   # used by Pexec and Startup-Code
  29.     {
  30.       void* TpaStart;
  31.       void* TpaEnd;
  32.       void* TextSegStart;
  33.       ULONG TextSegSize;
  34.       void* DataSegStart;
  35.       ULONG DataSegSize;
  36.       void* BssSegStart;
  37.       ULONG BssSegSize;
  38.       DTA*  DtaPtr;
  39.       struct baspag *ParentPrcPtr;
  40.       LONG  Reserved0;
  41.       BYTE* EnvStrPtr;
  42.       BYTE  Reserved1[7];
  43.       BYTE  CurDrv;
  44.       LONG  Reserved2[18];
  45.       COMMAND CmdLine;
  46.     } BASEPAGE;
  47. # zu BIOS:
  48.   typedef struct          # used by Getbpb
  49.     {
  50.       WORD recsiz;
  51.       WORD clsiz;
  52.       WORD clsizb;
  53.       WORD rdlen;
  54.       WORD fsiz;
  55.       WORD fatrec;
  56.       WORD datrec;
  57.       WORD numcl;
  58.       WORD bflags;
  59.     } BPB;
  60. # zu XBIOS:
  61.   typedef struct          # used by Keytbl
  62.     {
  63.       uintB* unshift;
  64.       uintB* shift;
  65.       uintB* capslock;
  66.     } KEYTAB;
  67. # zu LINEA/VDI/BIOS:
  68.   typedef struct # ab Vdiesc = Linea - 0x38e
  69.     { LONG  reserved6;         # reserviert
  70.       void* cur_font;          # Zeiger auf Header des aktuellen Fonts
  71.       WORD  reserved5[23];     # reserviert
  72.       WORD  m_pos_hx;          # X-Koordinate des Maus-'Hot spot'
  73.       WORD  m_pos_hy;          # Y-Koordinate des Maus-'Hot spot'
  74.       WORD  m_planes;          # Zeichenmodus der Maus (Transparent oder XOR)
  75.       WORD  m_cdb_bg;          # Maus-Hintergrundfarbe
  76.       WORD  m_cdb_fg;          # Maus-Vordergrundfarbe
  77.       WORD  mask_form[32];     # je 16 words Vordergrund und Maske
  78.       WORD  inq_tab[45];       # wie vq_extnd()
  79.       WORD  dev_tab[45];       # wie v_opnwk()
  80.       WORD  gcurx;             # Aktuelle X-Position der Maus
  81.       WORD  gcury;             # Aktuelle Y-Position der Maus
  82.       WORD  m_hid_ct;          # Anzahl der erfolgten hide_mouse-Aufrufe
  83.       WORD  mouse_bt;          # Aktueller Status der Mauskn÷pfe (Bit 0 links, Bit 1 rechts)
  84.       WORD  req_col[3][16];    # Interne Daten fⁿr vq_color()
  85.       WORD  siz_tab[15];       # wie v_opnwk()
  86.       WORD  reserved4[2];      # reserviert
  87.       void* cur_work;          # Zeiger auf Attributdaten der aktuellen virtuellen Workstation
  88.       void* def_font;          # Zeiger auf den Standard-Systemzeichensatz
  89.       void* font_ring[4];      # 3 Zeiger auf Zeichensatzlisten, verkettete FONT_HEADER-Strukturen
  90.       WORD  font_count;        # Anzahl der ZeichensΣtze in der font_ring-Liste
  91.       WORD  reserved3[45];     # reserviert
  92.       BYTE  cur_ms_stat;       # Mausstatus (Bit 0 links, Bit 1 rechts, Bit 5 Flag ob Maus bewegt wurde)
  93.       BYTE  reserved2;         # reserviert
  94.       WORD  v_hid_cnt;         # Anzahl der erfolgten hide_cursor-Aufrufe
  95.       WORD  cur_x;             # X-Position der Maus
  96.       WORD  cur_y;             # Y-Position der Maus
  97.       BYTE  cur_flag;          # != 0: Maus neu zeichnen
  98.       BYTE  mouse_flag;        # != 0: Maus-Interrupt eingeschaltet
  99.       LONG  reserved1;         # reserviert
  100.       WORD  v_sav_xy[2];       # gerettete X-,Y-Koordinaten des Cursors
  101.       WORD  save_len;          # Anzahl der gebufferten Bildschirmzeilen
  102.       void* save_addr;         # Adresse des ersten gebufferten Bytes im Bildspeicher
  103.       WORD  save_stat;         # Bit 0: Buffer gⁿltig?, Bit 1: LONGs oder WORDs gebuffert
  104.       LONG  save_area[4][16];  # Buffer fⁿr Bild unter Mauszeiger
  105.       void(*user_tim)(void);   # aktueller Timer-Interrupt-Vektor
  106.       void(*next_tim)(void);   # alter Timer-Interrupt-Vektor
  107.       void(*user_but)(void);   # Maustasten-Vektor
  108.       void(*user_cur)(void);   # Maus-Vektor
  109.       void(*user_mot)(void);   # Mausbewegungs-Vektor
  110.       WORD  v_cel_ht;          # Zeichenh÷he
  111.       WORD  v_cel_mx;          # maximale Cursor-Spaltenposition
  112.       WORD  v_cel_my;          # maximale Cursor-Zeilenposition
  113.       WORD  v_cel_wr;          # Characterzeilenbreite in Bytes
  114.       WORD  v_col_bg;          # Hintergrundfarbe
  115.       WORD  v_col_fg;          # Vordergrundfarbe
  116.       void* v_cur_ad;          # Adresse der aktuellen Cursorposition auf dem Bildschirm
  117.       WORD  v_cur_off;         # Vertikaler Offset vom physikalischen Bildschirmanfang
  118.       WORD  v_cur_xy[2];       # X-,Y-Position des Cursors
  119.             #define v_cur_x  v_cur_xy[0]
  120.             #define v_cur_y  v_cur_xy[1]
  121.       BYTE  v_period;          # Blinkgeschwindigkeit des Cursors
  122.       BYTE  v_cur_ct;          # ZΣhler fⁿrs Blinken des Cursors
  123.       void* v_fnt_ad;          # Zeiger auf Zeichensatzdaten des Systemzeichensatzes
  124.       WORD  v_fnt_nd;          # gr÷▀ter ASCII-Wert im Zeichensatz
  125.       WORD  v_fnt_st;          # kleinster ASCII-Wert im Zeichensatz
  126.       WORD  v_fnt_wd;          # Breite des Fontimage in Bytes
  127.       WORD  v_rez_hz;          # Bildschirmbreite in Pixel
  128.       WORD* v_off_ad;          # Zeiger auf Font-Offset-Tabelle
  129.       WORD  reserved;          # Cursorflag (nur beim alten TOS!), reserviert
  130.       WORD  v_rez_vt;          # Bildschirmh÷he in Pixel
  131.       WORD  bytes_lin;         # Bytes pro Pixelzeile
  132.     } VDIESC;
  133.   #define vdiesc  (((VDIESC*)linea)[-1])
  134. #ifdef ATARI_TURBO
  135.   # Allgemeine Betriebssystem-Aufrufe:
  136.   extern LONG gemdos( void, ... );
  137.   # GEMDOS-Funktionen, siehe TOS.H:
  138.   extern void    Pterm0( void );
  139.   extern LONG    Cconin( void );
  140.   extern void    Cconout( WORD c );
  141.   extern void    Cauxout( WORD c );
  142.   extern WORD    Cprnout( WORD c );
  143.   extern LONG    Crawcin( void );
  144.   extern WORD    Cconws( BYTE *buf );
  145.   extern WORD    Cconis( void );
  146.   extern WORD    Dsetdrv( WORD drv );
  147.   extern WORD    Cprnos( void );
  148.   extern WORD    Cauxos( void );
  149.   extern WORD    Dgetdrv( void );
  150.   extern WORD    Dcreate( const char *path );
  151.   extern WORD    Ddelete( const char *path );
  152.   extern WORD    Dsetpath( const char *path );
  153.   extern WORD    Fcreate( const char *filename, WORD attr );
  154.   extern WORD    Fopen( const char *filename, WORD mode );
  155.   extern WORD    Fclose( WORD handle );
  156.   extern LONG    Fread( WORD handle, LONG count, void *buf );
  157.   extern LONG    Fwrite( WORD handle, LONG count, void *buf );
  158.   extern WORD    Frename( WORD zero, const char *oldname, const char *newname );
  159.   extern WORD    Fdelete( const char *filename );
  160.   extern LONG    Fseek( LONG offset, WORD handle, WORD seekmode );
  161.   extern WORD    Fattrib( const char *filename, WORD wflag, WORD attrib);
  162.   extern WORD    Dgetpath( char *path, WORD driveno );
  163.   extern void    *Malloc( LONG number );
  164.   extern WORD    Mfree( void *block );
  165.   extern WORD    Mshrink( WORD zero, void *block, LONG newsiz );
  166.   extern LONG    Pexec( WORD mode, char *ptr1, COMMAND *ptr2, void *ptr3 );
  167.   extern UWORD   Tgettime( void );
  168.   extern UWORD   Tgetdate( void );
  169.   extern WORD    Fdatime( DOSTIME *timeptr, WORD handle, WORD wflag );
  170.   extern void    Fsetdta( DTA *buf );
  171.   extern WORD    Fsfirst( const char *filename, WORD attr );
  172.   extern WORD    Fsnext( void );
  173.   # BIOS-Funktionen, siehe TOS.H:
  174.   extern void    Bconout( WORD dev, WORD c );
  175.   extern LONG    Rwabs( WORD rwflag, void *buf, WORD cnt, WORD recnr, WORD dev );
  176.   extern void    (*Setexc( WORD number, void (*exchdlr)() )) ();
  177.   extern BPB     *Getbpb( WORD dev );
  178.   extern LONG    Mediach( WORD dev );
  179.   extern LONG    Drvmap( void );
  180.   extern LONG    Kbshift( WORD mode );
  181.   # XBIOS-Funktionen, siehe TOS.H:
  182.   extern KEYTAB* Keytbl( uintB* unshift, uintB* shift, uintB* capslock );
  183.   extern LONG    Random( void );
  184.   extern ULONG   Gettime( void );
  185.   extern WORD    Setprt( WORD config );
  186.   extern void    Supexec( void (*addr)() );
  187.   # Definition der LINEA-Funktionen, siehe LINEA.H:
  188.   extern void    linea_init( void );
  189.   extern void    show_mouse( int flag );
  190.   extern void    hide_mouse( void );
  191.   #define linea  Linea
  192.   extern void* linea;
  193. #endif
  194. #ifdef GNU
  195.   #include <osbind.h>
  196.   #include <linea.h>
  197.   # Hier haben die LineA-Funktionen andere Namen:
  198.   #define linea_init()  linea0()
  199.   #define show_mouse(flag)  (INTIN[0] = (flag), linea9())
  200.   #define hide_mouse()  lineaa()
  201.   #define linea  __aline
  202. #endif
  203.  
  204.  
  205. # Typ von argc in der Deklaration von main():
  206.   #ifdef GNU               # nur bei Benutzung von Bammis Runtime-System
  207.     #define argc_t  sintL  # da crt0.o ohne '-mshort' compiliert ist
  208.   #endif
  209.  
  210. # Environment-Variablen abfragen:
  211.   extern char* getenv (char* name); # siehe GETENV(3V)
  212. # wird verwendet von Runtime-Library (crt0.o, main.o)
  213.   #define getenv  my_getenv
  214.   extern const char * getenv (const char* name); # siehe GETENV(3V)
  215. # wird verwendet von MISC
  216.  
  217. # Programm verlassen und beenden:
  218. # GEMDOS_exit()
  219.   #define GEMDOS_exit()  Pterm0()
  220. # wird verwendet von SPVW
  221.  
  222. # Auf Tastendruck warten.
  223. # GEMDOS_ConIn()
  224. # < ULONG ergebnis
  225. # < (UBYTE)ergebnis = Ascii-Code der gedrⁿckten Taste
  226. # < (UBYTE)(ergebnis>>16) = Scan-Code der gedrⁿckten Taste
  227. #             (wichtig z.B. fⁿr Funktionstasten, die den Ascii-Code 0 geben)
  228. # Der Ascii-Code wird auch auf den Bildschirm ausgegeben.
  229.   #define GEMDOS_ConIn()  Cconin()
  230. # wird verwendet von SPVW
  231.  
  232. # Zeichen auf Bildschirm ausgeben.
  233. #   void GEMDOS_ConOut(code)
  234. # > UWORD code : Ascii-Code (>=0,<256) des auszugebenden Zeichens
  235.   #define GEMDOS_ConOut(code)  Cconout(code)
  236. # wird verwendet von SPVW
  237. # Control-Zeichen werden so interpretiert wie bei einer VT52-Emulation:
  238. # BEL           kurzen Ton ausgeben
  239. # TAB           ?
  240. # 10=LF,11,12   Zeilenvorschub ?
  241. # CR            Cursor an den Zeilenanfang
  242. # ESC A         Cursor 1 Zeile hoch (nichts, falls er ganz oben war)
  243. # ESC B         Cursor 1 Zeile runter (nichts, falls er ganz unten war)
  244. # ESC C         Cursor 1 Zeichen nach rechts
  245. # BS oder
  246. # ESC D         Cursor 1 Zeichen nach links (nichts, falls er ganz links war)
  247. # ESC E         (Clear Home) Bildschirm l÷schen und Cursor an die linke obere
  248. #                Ecke
  249. # ESC H         (Home) Cursor an die linke obere Ecke
  250. # ESC I         Cursor 1 Zeichen nach oben (falls er ganz oben war,
  251. #               alles um 1 Zeile nach unten scrollen und Leerzeile einfⁿgen)
  252. # ESC J         Bildschirminhalt ab Cursorposition l÷schen
  253. # ESC K         Zeileninhalt ab Cursorposition l÷schen
  254. # ESC L         Leerzeile an der momentanen Cursorposition einfⁿgen, Rest
  255. #               des Bildschirms um 1 Zeile nach unten scrollen, Cursor an
  256. #               den Anfang der neuen Leerzeile
  257. # ESC M         Zeile l÷schen: Cursor ganz nach links, diese Zeile l÷schen
  258. #               und Rest des Bildschirms um 1 Zeile nach oben schieben
  259. # ESC Y chr(32+l) chr(32+c)
  260. #               Cursor positionieren an Zeile l (0<=l<25), Spalte c (0<=c<80)
  261. # ESC b chr(f)  Schriftfarbe wΣhlen, Farbe (f mod 16) (0=wei▀, 1=schwarz)
  262. # ESC c chr(f)  Hintergrundfarbe wΣhlen, Farbe (f mod 16) (0=wei▀, 1=schwarz)
  263. # ESC d         Bildschirm bis zur Cursorposition (einschlie▀lich!) l÷schen
  264. # ESC e         Cursor einschalten (sichtbar machen)
  265. # ESC f         Cursor ausschalten (unsichtbar machen)
  266. # ESC j         Cursorposition speichern
  267. # ESC k         Cursor auf gespeicherte Position setzen
  268. # ESC l         Zeile l÷schen: Cursor ganz nach links, diese Zeile l÷schen
  269. # ESC o         Zeile bis zur Cursorposition (einschlie▀lich!) l÷schen
  270. # ESC p         Reverse on: ab jetzt schreibe mit Hintergrundfarbe auf einem
  271. #               Hintergrund, der die Schriftfarbe hat
  272. # ESC q         Reverse off
  273. # ESC v         Ab jetzt bei Zeilenⁿberlauf automatisch in die nΣchste Zeile
  274. # ESC w         Ab jetzt bei Zeilenⁿberlauf jedes Zeichen in die Spalte ganz
  275. #               rechts schreiben.
  276.  
  277. # Gibt einen Piepser aus.
  278. # GEMDOS_Bell()
  279.   #define GEMDOS_Bell()  GEMDOS_ConOut(BEL)
  280. # wird verwendet von
  281.  
  282. # Auf Tastendruck warten.
  283. # GEMDOS_DirConIn()
  284. # < ULONG ergebnis
  285. # < (UBYTE)ergebnis = Ascii-Code der gedrⁿckten Taste
  286. # < (UBYTE)(ergebnis>>16) = Scan-Code der gedrⁿckten Taste
  287. # < (UBYTE)(ergebnis>>24) = normalerweise: 0,
  288. #              Bit 3,0x484 gesetzt: Sondertasten-Status (wie bei BIOS_KBSHIFT)
  289. # Auf den Bildschirm wird nichts ausgegeben.
  290.   #define GEMDOS_DirConIn()  Crawcin()
  291. # wird verwendet von STREAM
  292. # Ascii-Codes (dezimal):
  293. #   gro▀er Tastaturblock: bekannt
  294. #   Pfeiltastenblock:
  295. #     ohne Shift: stets 0
  296. #     mit Shift: Insert='0',='8',='4',='2',='6', sonst 0
  297. #   Ziffernblock:
  298. #     ohne Ctrl: bekannt
  299. #     mit Ctrl:
  300. #       obere Zeile     (=8,)=9,/=15,*=10
  301. #       nΣchste Zeile   7=23,8=24,9=25,-=31
  302. #       nΣchste Zeile   4=20,5=21,6=30,+=11
  303. #       nΣchste Zeile   1=17,2=0,3=19,Enter=10
  304. #       untere Zeile    0=16,.=14,Enter=10
  305. #   Funktionstasten: stets 0
  306. # Scan-Codes (dezimal):
  307. #   gro▀er Tastaturblock:
  308. #     obere Zeile    1,2,3,4,5,6,7,8,9,10,11,12,13,41,Backspace=14
  309. #     nΣchste Zeile  15,16,17,18,19,20,21,22,23,24,25,26,27,Return=28,Delete=83
  310. #     nΣchste Zeile  Control,30,31,32,33,34,35,36,37,38,39,40,Return=28,~=43
  311. #     untere Zeile   Shift,96,44,45,46,47,48,49,50,51,52,53,Shift
  312. #     Space-Zeile    Alternate,Space=57,CapsLock
  313. #     obere Zeile mit Alt  1,120,121,122,123,124,125,126,127,128,129,130,131,41,...
  314. #   Pfeiltastenblock (liefert meist Ascii-Code 0):
  315. #     obere Zeile     Help=98, Undo=97
  316. #     mittlere Zeile  Insert=82, =72, ClrHome=71, Ctrl-ClrHome=119
  317. #     untere Zeile    =75, Ctrl-=115, =80, =77, Ctrl-=116
  318. #   Ziffernblock:
  319. #     obere Zeile     (=99,)=100,/=101,*=102
  320. #     nΣchste Zeile   7=103,8=104,9=105,-=74
  321. #     nΣchste Zeile   4=106,5=107,6=108,+=78
  322. #     nΣchste Zeile   1=109,2=110,3=111,Enter=114
  323. #     untere Zeile    0=112,.=113,Enter=114
  324. #   Funktionstasten (liefern Ascii-Code 0):
  325. #     normal: F1=59, ..., F10=68
  326. #     mit Shift: F1=84, ..., F10=93
  327.  
  328. # String auf Bildschirm ausgeben.
  329. # GEMDOS_PrintLine(string)
  330. # > char* string : Anfangsadresse des auszugebenden ASCIZ-Strings
  331.  #ifndef ATARI_TURBO
  332.   #define GEMDOS_PrintLine(string)  Cconws(string)
  333.  #else # Damit das Argument auch ein PrΣprozessor-abhΣngiger String sein kann:
  334.        # (TURBO-C auf dem ATARI verkraftet keine PrΣprozessor-Anweisungen
  335.        #  innerhalb von Macro-Argumenten!)
  336.   #define GEMDOS_PrintLine  Cconws
  337.  #endif
  338. # wird verwendet von SPVW, DEBUG
  339.  
  340. # Abfragen, ob GEMDOS-Tastaturbuffer (max. 64 Tastendrⁿcke) leer ist.
  341. # GEMDOS_ConStat()
  342. # < UWORD ergebnis : falls =0, ist der Tastaturbuffer leer.
  343.   #define GEMDOS_ConStat()  Cconis()
  344. # wird verwendet von STREAM
  345.  
  346. # Druckerstatus abfragen.
  347. # GEMDOS_PrtStat()  bei paralleler Schnittstelle
  348. # GEMDOS_AuxStat()  bei serieller Schnittstelle
  349. # < WORD ergebnis : 0x0000 falls nicht bereit, 0xFFFF falls bereit
  350.   #define GEMDOS_PrtStat()  Cprnos()
  351.   #define GEMDOS_AuxStat()  Cauxos()
  352. # wird verwendet von STREAM
  353.  
  354. # Zeichen auf Drucker ausgeben.
  355. # GEMDOS_PrtOut(ch)  bei paralleler Schnittstelle
  356. # GEMDOS_AuxOut(ch)  bei serieller Schnittstelle
  357. # > UWORD ch : auszugebendes Zeichen
  358.   #define GEMDOS_PrtOut(ch)  Cprnout(ch)
  359.   #define GEMDOS_AuxOut(ch)  Cauxout(ch)
  360. # wird verwendet von STREAM
  361.  
  362. # Aktuelles Laufwerk festlegen.
  363. # GEMDOS_SetDrv(drive)
  364. # > UWORD drive : Nummer des Laufwerks (0=A, 1=B, ...), das aktuell werden soll
  365.   #define GEMDOS_SetDrv(drive)  Dsetdrv(drive)
  366. # wird verwendet von
  367.  
  368. # Aktuelles Laufwerk abfragen.
  369. # GEMDOS_CurrentDisk()
  370. # < UWORD ergebnis : Nummer des aktuellen Laufwerks (0=A, 1=B, ...)
  371.   #define GEMDOS_CurrentDisk()  Dgetdrv()
  372. # wird verwendet von PATHNAME
  373.  
  374. # Neues Subdirectory anlegen.
  375. # GEMDOS_mkdir(name)
  376. # > char* name : Adresse eines ASCIZ-Strings, der den Pfadnamen des neu
  377. #                anzulegenden Subdirectories (ohne '\' am Schlu▀) enthΣlt
  378. # < WORD ergebnis : Falls negativ, Fehlernummer.
  379.   #define GEMDOS_mkdir(name)  Dcreate(name)
  380. # wird verwendet von PATHNAME
  381.  
  382. # Subdirectory l÷schen
  383. # GEMDOS_rmdir(name)
  384. # > char* name : Adresse eines ASCIZ-Strings, der den Pfadnamen des zu l÷schenden
  385. #                Subdirectories (ohne '\' am Schlu▀) enthΣlt
  386. # < WORD ergebnis : Falls negativ, Fehlernummer.
  387.   #define GEMDOS_rmdir(name)  Ddelete(name)
  388. # wird verwendet von PATHNAME
  389.  
  390. # Aktuellen Pfad Σndern.
  391. # GEMDOS_chdir(name)
  392. # > char* name : Adresse eines ASCIZ-Strings, der den Pfadnamen des angewΣhlten
  393. #                Subdirectories (ohne '\' am Schlu▀) enthΣlt
  394. # < WORD ergebnis : Falls negativ, Fehlernummer.
  395.   #define GEMDOS_chdir(name)  Dsetpath(name)
  396. # wird verwendet von
  397.  
  398. # Attribute einer Datei abfragen.
  399. # GEMDOS_access(name)
  400. # > char* name : Adresse eines ASCIZ-Strings mit dem Filenamen
  401. # < WORD ergebnis : Falls negativ, Fehlernummer. Sonst Attribute des Files.
  402.   #define GEMDOS_access(name)  Fattrib(path,0,0)
  403. # wird verwendet von
  404.  
  405. # Typ einer Handle-Nummer:
  406.   #define Handle  uintW
  407. # wird verwendet von PATHNAME, SPVW
  408.  
  409. # Datei anlegen.
  410. # GEMDOS_create(name,attribs)
  411. # > char* name : Adresse eines ASCIZ-Strings mit dem Filenamen
  412. # > UWORD attribs : Attribute (0 fⁿr normale Datei)
  413. # < WORD ergebnis : Falls negativ, Fehlernummer. Sonst eine Handle-Nummer.
  414.   #define GEMDOS_create(attribs,name)  Fcreate(attribs,name)
  415. # wird verwendet von PATHNAME
  416.  
  417. # Datei ÷ffnen.
  418. # GEMDOS_open(name,mode)
  419. # > char* name : Adresse eines ASCIZ-Strings mit dem Filenamen
  420. # > UWORD mode : Zugriffs-Modus (0 fⁿr Read, 1 fⁿr Write, 2 fⁿr Read/Write)
  421. # < WORD ergebnis : Falls negativ, Fehlernummer. Sonst eine Handle-Nummer.
  422.   #define GEMDOS_open(name,mode)  Fopen(name,mode)
  423. # wird verwendet von SPVW, STREAM, PATHNAME
  424.   #define GEMDOS_open_NotFound -33  # Fehlernummer, wenn Datei nicht gefunden
  425.  
  426. # Datei schlie▀en.
  427. # GEMDOS_close(handle)
  428. # > UWORD handle : Handle-Nummer eines (offenen) Files.
  429. # < WORD ergebnis : Falls negativ, Fehlernummer. Sonst 0.
  430.   #define GEMDOS_close(handle)  Fclose(handle)
  431. # wird verwendet von SPVW, STREAM, PATHNAME
  432.   #define GEMDOS_close_DiskChange -65  # Fehlernummer, wenn Diskette gewechselt wurde
  433.   #define GEMDOS_close_BadHandle  -37  # Fehlernummer, wenn ungⁿltiges Handle
  434.  
  435. # Lesen.
  436. # GEMDOS_read(handle,bufsize,buf)
  437. # > UWORD handle : Handle (eines offenen Files oder 0 fⁿr Console, 2 fⁿr RS232)
  438. # > ULONG bufsize : Anzahl der zu lesenden Bytes (= Puffergr÷▀e)
  439. # > char* buf : Adresse (24 Bit) eines Puffers, in den die gelesenen Bytes
  440. #               kommen sollen
  441. # < LONG ergebnis : Falls negativ, Fehlernummer. Sonst Anzahl der gelesenen Bytes.
  442. # < Puffer buf : gefⁿllt mit den gelesenen Bytes
  443. # < (ergebnis==bufsize), falls alle angeforderten Bytes korrekt gelesen
  444.   #define GEMDOS_read(handle,bufsize,buf)  Fread(handle,bufsize,buf)
  445. # wird verwendet von SPVW, STREAM
  446.  
  447. # Schreiben.
  448. # GEMDOS_write(handle,bufsize,buf)
  449. # > UWORD handle : Handle (eines offenen Files oder 1 fⁿr Console,
  450. #                  2 fⁿr serielle Schnittstelle, 3 fⁿr parallele Schnittstelle)
  451. # > ULONG bufsize : Anzahl der zu schreibenden Bytes (= Puffergr÷▀e)
  452. # > char* buf : Adresse (24 Bit) eines Puffers, in dem die zu schreibenden
  453. #               Bytes stehen
  454. # < LONG ergebnis : Falls negativ, Fehlernummer. Sonst Anzahl der geschriebenen Bytes.
  455. # < (ergebnis==bufsize), falls alle Bytes korrekt geschrieben
  456.   #define GEMDOS_write(handle,bufsize,buf)  Fwrite(handle,bufsize,buf)
  457. # wird verwendet von SPVW, STREAM
  458.  
  459. # Datei umbenennen.
  460. # GEMDOS_rename(oldname,newname)
  461. # > char* oldname : Adresse eines ASCIZ-Strings mit dem alten Filenamen
  462. # > char* newname : Adresse eines ASCIZ-Strings mit dem neuen Filenamen
  463. # < WORD ergebnis : Falls negativ, Fehlernummer.
  464.   #define GEMDOS_rename(oldname,newname)  Frename(0,oldname,newname)
  465. # wird verwendet von PATHNAME
  466. #define GEMDOS_rename_exists -36 # Fehlernummer, wenn Datei mit neuem Namen existiert
  467.  
  468. # Datei l÷schen.
  469. # GEMDOS_unlink(name)
  470. # > char* name : Adresse eines ASCIZ-Strings mit dem Filenamen
  471. # < WORD ergebnis : Falls negativ, Fehlernummer. Sonst 0.
  472.   #define GEMDOS_unlink(name)  Fdelete(name)
  473. # wird verwendet von PATHNAME
  474.  
  475. # Dateizeiger positionieren.
  476. # GEMDOS_Lseek(pos,handle,mode)
  477. # > LONG pos : Position in Bytes (mu▀ >=0 bei Modus 0 bzw. <=0 bei Modus 2 sein)
  478. # > UWORD handle : Handle-Nummer eines (offenen) Files.
  479. # > UWORD mode : Modus (0 = ab Fileanfang, 1 = ab momentan, 2 = ab Fileende)
  480. # < LONG ergebnis : Falls negativ, Fehlernummer. Sonst neue Position ab Fileanfang.
  481.   #define GEMDOS_Lseek(pos,handle,mode)  Fseek(pos,handle,mode)
  482. # wird verwendet von STREAM
  483.  
  484. # Aktuellen Pfad ermitteln.
  485. # GEMDOS_GetDir(buf,drive)
  486. # > char buf[64] : Adresse eines 64 Bytes gro▀en Puffers
  487. # > UWORD drive : Nummer des Laufwerks (0=aktuelles, 1=A, 2=B, ... !)
  488. # < WORD ergebnis : Falls negativ, Fehlernummer.
  489. # < Puffer buf : enthΣlt (als ASCIZ-String) das aktuelle Subdirectory im
  490. #                angegebenen Laufwerk; Leerstring bedeutet Hauptdirectory.
  491.   #define GEMDOS_GetDir(buf,drive)  Dgetpath(buf,drive)
  492. # wird verwendet von PATHNAME
  493.  
  494. # Speicherplatz reservieren.
  495. # GEMDOS_Malloc(size)
  496. # > ULONG size : Anzahl der gewⁿnschten Bytes (eine gerade Zahl)
  497. # < LONG ergebnis : Falls negativ, Fehlernummer.
  498. #                   Sonst Anfangsadresse des zugeteilten Speicherbereichs.
  499.   #define GEMDOS_Malloc(size)  Malloc(size)
  500. # wird verwendet von SPVW
  501.  
  502. # freien Speicherplatz erfragen.
  503. # GEMDOS_FreeMem()
  504. # < ULONG ergebnis : Anzahl der freien Bytes Speicher
  505.   #define GEMDOS_FreeMem()  GEMDOS_Malloc(-1)
  506. # wird verwendet von SPVW
  507.  
  508. # Reservierten Speicherplatz freigeben.
  509. # GEMDOS_Mfree(block)
  510. # > ULONG block : Anfangsadresse des freizugebenden Speicherbereichs
  511. # < WORD ergebnis : Falls negativ, Fehlernummer.
  512.   #define GEMDOS_Mfree(block)  Mfree(block)
  513. # wird verwendet von SPVW
  514.  
  515. # Speicherplatz reservieren und zurⁿckgeben.
  516. # GEMDOS_SetBlock(block,size)
  517. # Beansprucht einen vorgegebenen Speicherbereich und gibt alle
  518. # darⁿberliegenden Speicherbereiche ans System zurⁿck.
  519. # > ULONG block : Anfangsadresse des zu reservierenden Speicherbereiches
  520. # > ULONG size : Gr÷▀e des zu reservierenden Speicherbereiches (in Bytes)
  521. # < LONG ergebnis : Falls negativ, Fehlernummer.
  522.   #ifdef ATARI_TURBO
  523.     #define GEMDOS_SetBlock(block,size)  Mshrink(0,block,size)
  524.     # NB: der Ergebnistyp ist in TURBO-Cs TOS.H als 'int' deklariert,
  525.     #     ist aber ein LONG.
  526.   #endif
  527.   #ifdef GNU
  528.     #define GEMDOS_SetBlock(block,size)  Mshrink(block,size)
  529.   #endif
  530. # wird verwendet von SPVW
  531.  
  532. # LΣdt ein File.
  533. # GEMDOS_exec_3(name,tail,env)
  534. # > char* name : Adresse eines ASCIZ-Strings mit dem Filenamen
  535. # > struct {BYTE len; char str[];} * tail :
  536. #                     Aufrufparameter (String mit <=127 Zeichen, LΣnge voran)
  537. # > char* env : Environment (Folge von ASCIZ-Strings, durch '\0' abgeschlossen)
  538. # < WORD ergebnis : Falls negativ, Fehlernummer.
  539. #                   Sonst Adresse der Base-Page des geladenen Programms.
  540.   #define GEMDOS_exec_3(name,tail,env)  Pexec(3,name,tail,env)
  541. # wird verwendet von
  542.  
  543. # Fⁿhrt ein bereits geladenes Programm aus.
  544. # GEMDOS_exec_4(dummy1,prog,dummy2)
  545. # > ULONG dummy1 : Dummy (z.B. ASCIZ-Leerstring)                (?)
  546. # > ULONG prog : Adresse der Base-Page des geladenen Programms  (?)
  547. # > ULONG dummy2 : Dummy (z.B. ASCIZ-Leerstring)
  548. # < UWORD ergebnis : Exitcode nach Abschlu▀ des Programms
  549.   #define GEMDOS_exec_4(dummy1,prog,dummy2)  Pexec(4,dummy1,prog,dummy2)
  550. # wird verwendet von
  551.  
  552. # LΣdt und startet ein File.
  553. # GEMDOS_exec_0(name,tail,env)
  554. # > char* name : Adresse eines ASCIZ-Strings mit dem Filenamen
  555. # > struct {BYTE len; char str[];} * tail :
  556. #                     Aufrufparameter (String mit <=127 Zeichen, LΣnge voran)
  557. # > char* env : Environment (Folge von ASCIZ-Strings, durch '\0' abgeschlossen)
  558. # < LONG ergebnis : Falls negativ, Fehlernummer.
  559. #                   Sonst Returncode des aufgerufenen Programms.
  560.   #define GEMDOS_exec_0(name,tail,env)  Pexec(0,name,tail,env)
  561. # wird verwendet von SPVW
  562.  
  563. # Liefert die aktuelle Uhrzeit.
  564. # GEMDOS_GetTime()
  565. # < UWORD ergebnis : Bits 15..11: Stunde in {0,...,23},
  566. #                    Bits 10..5:  Minute in {0,...,59},
  567. #                    Bits 4..0:   Sekunde/2 in {0,...,29}.
  568.   #define GEMDOS_GetTime()  (UWORD)Tgettime()
  569. # wird verwendet von SPVW, LISPARIT
  570.  
  571. # Liefert das aktuelle Datum.
  572. # GEMDOS_GetDate()
  573. # < UWORD ergebnis : Bits 15..9: Jahr-1980 in {0,...,119},
  574. #                    Bits 8..5:  Monat in {1,...,12},
  575. #                    Bits 4..0:  Tag in {1,...,31}.
  576.   #define GEMDOS_GetDate()  (UWORD)Tgetdate()
  577. # wird verwendet von SPVW, LISPARIT
  578.  
  579. # Liefert Datum und Uhrzeit einer offenen Datei.
  580. # GEMDOS_GSDTOF(buf,handle)
  581. # > struct {UWORD time; UWORD date;} * buf
  582. #   Adresse eines 4-Byte-Buffers, wo Uhrzeit und Datum abgelegt werden sollen.
  583. # > UWORD handle : Handle-Nummer eines (offenen) Files.
  584. # < WORD ergebnis : Falls negativ, Fehlernummer.
  585.   #define GEMDOS_GSDTOF(buf,handle)  Fdatime(buf,handle,0)
  586. # wird verwendet von PATHNAME
  587.  
  588.  
  589. # Durchsuchen von Directories nach Dateien:
  590.  
  591. # Dies geschieht etwa so:
  592. #     GEMDOS_SET_DTA
  593. #     GEMDOS_SFIRST
  594. #     while found do {DTA verwenden, GEMDOS_SNEXT}.
  595. # Dabei mu▀ dem GEMDOS mit GEMDOS_SET_DTA die Adresse eines 44-Byte-Buffers
  596. # ⁿbergeben werden, in den die Daten der einzelnen Files gelesen werden.
  597. # Sein Aufbau:
  598. # 0-20 : reserviert
  599. # 21 : File-Attribut
  600. #      (Bit 0: Write-Protected, Bit 1: Hidden file, Bit 2: System file,
  601. #       Bit 3: Volume-label, Bit 4: Subdirectory, Bit 5: korrekt geschlossen)
  602. # 22-23 : Uhrzeit der Dateierstellung
  603. #          Als Word: Bits 15..11: Stunde in {0,...,23},
  604. #                    Bits 10..5:  Minute in {0,...,59},
  605. #                    Bits 4..0:   Sekunde/2 in {0,...,29}.
  606. # 24-25 : Datum der Dateierstellung
  607. #          Als Word: Bits 15..9: Jahr-1980 in {0,...,119},
  608. #                    Bits 8..5:  Monat in {1,...,12},
  609. #                    Bits 4..0:  Tag in {1,...,31}.
  610. # 26-29 als Longword: Gr÷▀e der Datei (in Bytes)
  611. # 30-43 (max. 13 Bytes)  : Filename der Datei als ASCIZ-String
  612.  
  613. # Disk Transfer Address setzen.
  614. # GEMDOS_SetDTA(address)
  615. # > UBYTE address[44] : gerade Adresse eines 44-Byte-Buffers, den GEMDOS als DTA
  616. #                       verwenden soll
  617.   #define GEMDOS_SetDTA(address)  Fsetdta(address)
  618. # wird verwendet von PATHNAME
  619.  
  620. # Dateinamen im Directory suchen.
  621. # GEMDOS_Sfirst(name,mask)
  622. # > char* name : Adresse eines ASCIZ-Strings, der den Filename (Pfadname und
  623. #                Wildcards wie '*.*' zugelassen) enthΣlt.
  624. # > UWORD mask : Attributmaske, welche Dateien gewⁿnscht sind
  625. #                (0 um nur normale Dateien zu durchsuchen)
  626. # < WORD ergebnis : Falls negativ, Fehlermeldung. Falls =-33, keine Datei gefunden.
  627. #                   Sonst Daten der gefundenen Datei in DTA.
  628.   #define GEMDOS_Sfirst(name,mask)  Fsfirst(name,mask)
  629.   #define GEMDOS_Sfirst_notfound -33 # Fehlernummer, wenn Datei nicht gefunden
  630. # wird verwendet von PATHNAME
  631.  
  632. # Dateien weitersuchen.
  633. # GEMDOS_Snext()
  634. # < WORD ergebnis : Falls negativ, Fehlermeldung.
  635. #                   Falls =-49, keine weitere Datei gefunden.
  636. #                   Sonst Daten der gefundenen Datei in DTA.
  637.   #define GEMDOS_Snext()  Fsnext()
  638. # wird verwendet von SPVW, PATHNAME
  639. #define GEMDOS_Snext_notfound -49 # Fehlernummer, wenn keine weitere Datei gefunden
  640.  
  641.  
  642. # Zeichen auf Bildschirm ausgeben.
  643. # BIOS_ConOut(ch)
  644. # > UWORD ch : Ascii-Code (>=0,<256) des auszugebenden Zeichens
  645.   #define BIOS_ConOut(ch)  Bconout(2,ch)
  646.                            # 2 = Handle fⁿr Bildschirm mit Steuerzeichen
  647. # wird verwendet von SPVW, STREAM
  648. # Control-Zeichen werden interpretiert wie bei GEMDOS_ConOut().
  649. # Im Unterschied zu diesem werden Control-S/Q und Control-C nicht abgefangen.
  650.  
  651. # Zeichen auf Bildschirm ausgeben.
  652. # BIOS_GrConOut(ch)
  653. # > UWORD ch : Ascii-Code (>=0,<256) des auszugebenden Zeichens
  654.   #define BIOS_GrConOut(ch)  Bconout(5,ch)
  655.                              # 5 = Handle fⁿr Bildschirm ohne Steuerzeichen
  656. # wird verwendet von STREAM
  657. # Control-Zeichen werden nicht interpretiert!
  658.  
  659. # Gibt einen Piepser aus.
  660. # BIOS_Bell()
  661.   #define BIOS_Bell()  BIOS_ConOut(BEL)
  662. # wird verwendet von SPVW, STREAM
  663.  
  664. # Sectoren lesen.
  665. # BIOS_ReadAbs(buf,nsectors,sector,drive)
  666. # > BYTE* buf : Adresse (24 Bit) eines Puffers, in den die Daten kommen sollen
  667. # > UWORD nsectors : Anzahl der zu lesenden Sectoren
  668. # > UWORD sector : logische Sectornummer des ersten zu lesenden Sectors
  669. # > UWORD drive : Laufwerksnummer (0=A, 1=B, ...)
  670. # < LONG ergebnis : Falls negativ, Fehlernummer.
  671.   #define BIOS_ReadAbs(buf,nsectors,sector,drive) \
  672.           Rwabs(0,buf,nsectors,sector,drive)
  673. # wird verwendet von PATHNAME
  674.  
  675. # Exception-Vektor holen.
  676. # BIOS_GetException(nummer)
  677. # > UWORD nummer : Exception-Vektor-Nummer
  678. # < ULONG ergebnis : Wert des Exception-Vektor nummer (bei Adresse 4*nummer)
  679.   #define BIOS_GetException(nummer)  Setexc(nummer,-1)
  680. # wird verwendet von SPVW
  681.  
  682. # Exception-Vektor setzen.
  683. # BIOS_SetException(nummer,wert)
  684. # > UWORD nummer : Exception-Vektor-Nummer
  685. # > ULONG wert : Adresse als neuer Wert des Exception-Vektors nummer
  686. # < ULONG ergebnis : alter Wert des Exception-Vektors nummer (bei Adresse 4*nummer)
  687.   #define BIOS_SetException(nummer,wert)  Setexc(nummer,wert)
  688. # wird verwendet von SPVW
  689.  
  690. # Diskettenparameter abfragen.
  691. # BIOS_GetBPB(drive)
  692. # > UWORD drive : Laufwerksnummer (0=A, 1=B, ...)
  693. # < ULONG ergebnis : falls =0, Fehler.
  694. #                    falls /=0, Adresse des Bios-Parameter-Blocks der Diskette:
  695. #                       .W Sectorgr÷▀e in Bytes
  696. #                       .W Clustergr÷▀e in Sectoren
  697. #                       .W Clustergr÷▀e in Bytes
  698. #                       .W DirectorylΣnge in Sectoren
  699. #                       .W FAT-Gr÷▀e in Sectoren
  700. #                       .W Sectornummer der zweiten FAT
  701. #                       .W Sectornummer des ersten Datenclusters
  702. #                       .W Anzahl der Datencluster auf der Diskette
  703. #                       .W Diverse Flags
  704.   #define BIOS_GetBPB(drive)  Getbpb(drive)
  705. # wird verwendet von PATHNAME
  706.  
  707. # Diskettenwechsel abfragen.
  708. # BIOS_Mediach(drive)
  709. # > UWORD drive : Laufwerksnummer (0=A, 1=B)
  710. # < UWORD ergebnis : Diskettenwechsel? 0=nein, 1=vielleicht, 2=ja.
  711.   #define BIOS_Mediach(drive)  Mediach(drive)
  712. # wird verwendet von
  713.  
  714. # Liefert eine Tabelle aller existenten Laufwerke.
  715. # BIOS_DriveMap()
  716. # < uint16 ergebnis : Bitvektor.
  717. #          Darin ist Bit n gesetzt, wenn Laufwerk mit Nummer n
  718. #          (0=A, 1=B, ...) existiert.
  719.   #define BIOS_DriveMap()  Drvmap()
  720. # wird verwendet von STREAM
  721.  
  722. # Sondertasten-Status abfragen.
  723. # BIOS_KbShift()
  724. # < uint8 ergebnis:
  725. #         Bit 0: rechte Shift-Taste gedrⁿckt
  726. #         Bit 1: linke Shift-Taste gedrⁿckt
  727. #         Bit 2: Ctrl-Taste gedrⁿckt
  728. #         Bit 3: Alt-Taste gedrⁿckt
  729. #         Bit 4: Caps-Lock eingeschaltet
  730. #         Bit 5: rechte Maustaste, Clr/Home
  731. #         Bit 6: linke Maustaste, Insert
  732.   #define BIOS_KbShift()  Kbshift(-1)
  733. # wird verwendet von SPVW
  734.   #define RShiftKey_mask   bit(0)
  735.   #define LShiftKey_mask   bit(1)
  736.   #define CtrlKey_mask     bit(2)
  737.   #define AltKey_mask      bit(3)
  738.   #define CapsLockKey_mask bit(4)
  739.   #define RMouseKey_mask   bit(5)
  740.   #define LMouseKey_mask   bit(6)
  741.   #define BothShiftKey_mask  (LShiftKey_mask|RShiftKey_mask)
  742.   #define BothMouseKey_mask  (LMouseKey_mask|RMouseKey_mask)
  743.  
  744. # Sondertasten-Status setzen.
  745. # BIOS_SetKbShift(status)
  746. # > uint16 status :
  747. #         Bit 0: rechte Shift-Taste gedrⁿckt
  748. #         Bit 1: linke Shift-Taste gedrⁿckt
  749. #         Bit 2: Ctrl-Taste gedrⁿckt
  750. #         Bit 3: Alt-Taste gedrⁿckt
  751. #         Bit 4: Caps-Lock eingeschaltet
  752. #         Bit 5: rechte Maustaste, Clr/Home
  753. #         Bit 6: linke Maustaste, Insert
  754.   #define BIOS_SetKbShift(status)  Kbshift(status)
  755. # wird verwendet von
  756.  
  757. # Liefert die Adresse der Tastaturtabellenzeigertabelle.
  758. # XBIOS_GetKeyTbl()
  759. # < KEYTAB* ergebnis:
  760. #           ergebnis->unshift, ergebnis->shift, ergebnis->capslock
  761. #           sind Zeiger auf die drei Tastaturtabellen (LΣnge 128,
  762. #           Index: Scancode, Wert: Ascii-Code)
  763.   #define XBIOS_GetKeyTbl()  Keytbl((uintB*)(-1),(uintB*)(-1),(uintB*)(-1))
  764. # wird verwendet von STREAM
  765.  
  766. # Liefert eine Zufallszahl.
  767. # XBIOS_Random()
  768. # < uint32 ergebnis : Bits 31..24 =0, Bits 23..0 zufΣllig
  769.   #define XBIOS_Random()  Random()
  770. # wird verwendet von LISPARIT
  771.  
  772. # Liefert das aktuelle Datum und die aktuelle Uhrzeit.
  773. # XBIOS_GetDateTime()
  774. # < uint32 ergebnis :
  775. #          Bits 31..25: Jahr-1980 in {0,...,119},
  776. #          Bits 24..21: Monat in {1,...,12},
  777. #          Bits 20..16: Tag in {1,...,31},
  778. #          Bits 15..11: Stunde in {0,...,23},
  779. #          Bits 10..5:  Minute in {0,...,59},
  780. #          Bits 4..0:   Sekunde/2 in {0,...,29}.
  781.   #define XBIOS_GetDateTime()  Gettime()
  782. # wird verwendet von
  783.  
  784. # Liefert die Druckerkonfiguration
  785. # XBIOS_GetPrtConfig()
  786. # < uint16 ergebnis :
  787. #          Bit 0: 0=Matrixdrucker, 1=Typenraddrucker
  788. #          Bit 1: 0=Farbdrucker, 1=Monochromdrucker
  789. #          Bit 2: 0=Atari-Drucker, 1=Epson-Drucker
  790. #          Bit 3: 0=Test-Modus, 1=QualitΣtsmodus
  791. #          Bit 4: 0=Centronics-Port, 1=RS232-Port
  792. #          Bit 5: 0=Endlospapier, 1=Einzelblatt
  793.   #define XBIOS_GetPrtConfig()  Setprt(-1)
  794. # wird verwendet von STREAM
  795.  
  796. # Fⁿhrt ein Programmstⁿck im Supervisor-Modus aus.
  797. # Supervisor_Exec(fun)
  798. # void fun(void) : Adresse des auszufⁿhrenden Programmstⁿcks
  799.   #define Supervisor_Exec(fun)  Supexec(&fun)
  800. # wird verwendet von SPVW, PATHNAME
  801.  
  802. # Initialisiert die Line-A Routinen.
  803. # LineA_Init();
  804.   #define LineA_Init()  linea_init()
  805. # wird verwendet von SPVW
  806.  
  807. # Schaltet die Maus ein. (Show Mouse)
  808. # LineA_MouseOn();
  809.   #define LineA_MouseOn()  show_mouse(0)
  810. # wird verwendet von
  811.  
  812. # Schaltet die Maus aus. (Hide Mouse)
  813. # LineA_MouseHide();
  814.   #define LineA_MouseHide()  hide_mouse()
  815. # wird verwendet von SPVW
  816.  
  817. # Schaltet die Maus wieder ein, falls sie vor dem letzten 'Hide Mouse'
  818. # eingeschaltet war. (Unhide Mouse)
  819. # LineA_MouseUnhide();
  820.   #define LineA_MouseUnhide()  show_mouse(1)
  821. # wird verwendet von SPVW
  822.  
  823. # Liefert den Status der Maustasten.
  824. # LineA_MouseButtons()
  825. # < ergebnis: Bit 0 gesetzt, wenn die linke Maustaste gedrⁿckt ist,
  826. #             Bit 1 gesetzt, wenn die rechte Maustaste gedrⁿckt ist.
  827.   #define LineA_MouseButtons()  (*(volatile WORD *)(&vdiesc.mouse_bt))
  828. # wird verwendet von STREAM, Macro interruptp
  829.  
  830. # Liefert den Status der Maus.
  831. # LineA_MouseStatus()
  832. # < ergebnis: Bit 0 gesetzt, wenn die linke Maustaste gedrⁿckt ist,
  833. #             Bit 1 gesetzt, wenn die rechte Maustaste gedrⁿckt ist,
  834. #             Bit 5 gesetzt, wenn die Maus bewegt wurde.
  835.   #define LineA_MouseStatus()  (*(volatile BYTE *)(&vdiesc.cur_ms_stat))
  836. # wird verwendet von STREAM
  837.  
  838. # Sofortiger Programmabbruch, Sprung in den Debugger
  839.   #ifdef GNU
  840.     #define abort()  __asm__ __volatile__ (" .word 0x4AFC ") # illegaler Befehl
  841.   #else
  842.     extern void abort (void); # siehe STDLIB.H
  843.   #endif
  844. # wird verwendet von DEBUG, EVAL, IO
  845.  
  846.