C-Routinen

Die hier vorgestellten Routinen sind solche für die Verabeitung von Routinen, die an die Sprache C angelehnt sind. Die meisten Routinen benötigen die Library SYSEQU.LIB, die mittels MACLIB SYSEQU.LIB und einige die Library C.LIB, die mittels MACLIB C.LIB eingefügt werden. Nicht alle Routinen sind von mir entwickelt sondern lediglich in meine Bibliothek übernommen worden: Einige Hinweise zu den Routinen finden sich hier.

Modul-Entry B: Beschreibung, I: Eingabe-, O: Ausgabeparameter

ADDA.MAC
ADDA B: Addition eines 8 Bit Wertes zu einem 16 Bit Wert
  I: Registerpaar HL hält den 16 Bit Wert, der Akku hält den 8 Bit Wert
  O: Das Registerpaar HL hält den Wert <HL>=<HL>+Akku

ARGBUF.MAC
<...> ARGBUF
NARGS
B: Speicherreservierung für Parameterübergabe

BUFBLK.MAC
<...> BUFBLK B: Bereitstellung der I/O Kanalparameter

CCLOSE.MAC
CCLOSE B: Schließen eines Kanals
  I: Register C hält den zu schließenden Kanal
  O: Akkumulator hält den geschlossenen Kanal

CERROR.MAC
CERROR B: Ausgabe einer Modulfehlermeldung und Programmabbruch
  I: Registerpaar HL hält die Meldung
  O: ---

CINIT.MAC
CINIT B: Initialisierung der Kommandoparameter
  I: Der CP/M Kommandopuffer ab Adresse 0080H wird untersucht. Dabei sind Redirektionszeichen ‚>' und ‚<', direkt gefolgt von einem Dateinamen, erlaubt
  O: Variable NARGS hält Anzahl Parameter, ARGBUF die durch Nullen getrennten Parameter. Redirektionen werden nicht gerechnet

CONMSG.MAC
CONMSG B: Ausgabe einer Zeichenkette auf die Konsole
  I: Registerpaar HL zeigt auf Zeichenkette
  O: ---

COPEN.MAC
COPEN B: Öffnen einer Datei und Zuordnung eines Kanals
  I: Registerpaar HL zeigt auf Dateinamen. Register B hält 0, wenn aus der Datei gelesen werden soll, oder -1, wenn geschrieben werden soll. Das Register C hält die zur Pufferung zur Verfügung zu stellende Rekords
  O: Der Akkumulator enthält den zugeordneten Kanal oder 0, wenn kein Kanal geöffnet werden konnte

CEXIT.MAC
CEXIT B: Beenden eines Programmes, das die C Bibliothek benutzt
  I: ---
  O: Das Programm wird beendet

FILL.MAC
FILL B: Füllen eines Speicherbereiches mit einer Konstanten
  I: Registerpaar HL zeigt auf den zu füllenden Speicherbereich, Registerpaar BC hält die Länge und der Akkumulator hält das Füllbyte
  O: Bereich mit Konstante gefüllt

FILLBF.MAC
FILLBF B: Lesen eines Puffers von Diskette
  I: Registerpaar DE hält die FCB, Registerpaar HL zeigt auf den Puffer und Register C hält die zu lesende Anzahl Rekords
  O: Akkumulator hält Null oder EOF

FNB.MAC
FNB B: Suchen nach Leerzeichen oder Tabulator
  I: Registerpaar BC weist auf Zeichenkette
  O: Registerpaar zeigt auf erstes Zeichen nach Leerzeichen oder Tabulator

FNDBUF.MAC
FNDBUF B: Suchen eines Puffers für einen Diskettenkanal
  I: Register C hält die Kanalnummer
  O: Registerpaar HL zeigt auf den gefundenen Pufferblock und der Akkumulator hält die Lese- oder Schreib-Flag

GETARG.MAC
GETARG B: Laden eines Argumentes aus der Kommandozeile
  I: Akkumulator hält die Nummer des Argumentes
  O: Registerpaar HL weist auf das Argument

GETC.MAC
GETC B: Einlesen eines Zeichens von STDIN
  I: ---
  O: Akkumulator hält Zeichen von STDIN

GETCF.MAC
GETCF CONBUF B: Einlesen eines Zeichens von einem Kanal
  I: Register C hält Kanalnummer, Null ist Konsole
  O: Akkumulator hält Zeichen vom Kanal

GTLINE.MAC
GTLINE B: Einlesen einer Zeichenkette von STDIN bis Carriage Return oder Line Feed
  I: ---
  O: Registerpaar HL weist auf Zeichenkette, Akkumulator hält Länge der Kette und die gesetzte Zero Flag zeigt leere Zeichenkette an

GTLINF.MAC
GTLINF B: Einlesen einer Zeichenkette vom Kanal bis Carriage Return oder Line Feed
  I: Register C hält Kanal
  O: Registerpaar HL weist auf Zeichenkette, Akkumulator hält Länge der Kette und die gesetzte Zero Flag zeigt leere Zeichenkette an

IPTBUF.MAC
<...> IPTBUF B: Bereitstellen eines Puffers zum Einlesen einer Zeichenkette

MAKFCB.MAC
MAKFCB B: Umwandeln einer Zeichenkette in eine gültige FCB
  I: Registerpaar HL zeigt auf Zeichenkette und Registerpaar auf FCB
  O: Registerpaar HL zeigt auf Diskettenpuffer und Registerpaar DE auf FCB

MOVEU.MAC
MOVEU B: Verschieben eines Speicherbereiches von hohen nach tiefen Adressen
  I: Registerpaar HL zeigt auf die Quelle, Registerpaar DE zeigt auf das Ziel und Registerpaar hält die Länge
  O: Daten verschoben

MTBUF.MAC
MTBUF B: Puffer zur Disk schreiben
  I: Registerpaar HL weist auf den Puffer, Registerpaar DE hält FCB und Register C hält die Anzahl zu schreibender Rekords
  O: ---

NEGH.MAC
NEGH B: Registerpaar HL negieren
  I: Registerpaar HL hält 16 Bit Zahl
  O: Registerpaar HL hält den negativen Wert der Zahl

NL.MAC
NL B: Ausgabe einer neuen Zeile auf STDOUT
  I: ---
  O: ---

NLF.MAC
NLF B: Ausgabe einer neuen Zeile auf einen Kanal
  I: Register C hält Kanal
  O: ---

PUSHBF.MAC
PUSHBF B: Zurückschreiben eines Zeichens in einen Lesekanal
  I: Akkumulator hält Zeichen und Register C hält den Kanal
  O: ---

PUTC.MAC
PUTC B: Ausgabe eines Zeichens auf STDOUT
  I: Akkumulator hält Zeichen
  O: ---

PUTCF.MAC
PUTCF B: Ausgabe eines Zeichens auf Kanal
  I: Akkumulator hält das Zeichen und Register C hält den Kanal (0 ist Konsole und 16 ist Drucker)
  O: ---

PUTSTR.MAC
PUTSTR B: Ausgabe einer Zeichenkette auf STDOUT
  I: Registerpaar HL zeigt auf Zeichenkette
  O: ---

PUTSTF.MAC
PUTSTF B: Ausgabe einer Zeichenkette auf Kanal
  I: Registerpaar HL zeigt auf Zeichenkette und Register C hält den Kanal
  O: ---

SETBF.MAC
SETBF B: Laden von kanalspezifischen Daten
  I: Registerpaar HL zeigt auf einen kanalspezifischen Block mit Offset 4 (Zeiger auf Puffergröße)
  O: Registerpaar HL zeigt auf den Pufferstart, Registerpaar DE hält den FCB und Register C hält die Rekordgröße des Puffers

STDIO.MAC
<...> STDIN
STDOUT
B: Definition der STDIN und STDOUT Kanäle

PRINTF.MAC
PRINTF B: Formatierung einer Zeichenkette im C Stil
  I: Registerpaar HL zeigt auf zu formatierende Zeichenkette, abgeschlossen mit Null. Registerpaar DE zeigt auf Kontroll-Adress-Feld. Registerpaar BC zeigt auf die Ergebniszeichenkette, das erste Byte hält die maximale Länge der Kette.
Die zu formatierende Zeichenkette kann folgende Kontrollzeichen beinhalten:
\tTabulator setzen
\bBackspace setzen
\rCarriage Return setzen
\fForm Feed setzen
\nNeue Zeile setzen
\\Zeichen „\" übernehmen
 Alle anderen Kombination werden übernommen
Mit Variabler aus Kontroll-Adress-Feld:
%cAls Zeichen einfügen
%sAls Zeichenkette einfügen
%dAls Ganzzahl mit Vorzeichen einfügen
%uAls vorzeichenlose Ganzzahl einfügen
%xAls Hexzahl einfügen
%%Zeichen „%" übernehmen
 Alle anderen Kombination werden übernommen
  O: Die Ergebniskette ist gefüllt, Abschluss mit Null. Die gesetzte Carryflag zeigt Überlauf an.

PRINTN.MAC
PRINTN B: Formatierung einer Zeichenkette für Dateinamen
  I: Registerpaar HL zeigt auf zu formatierende Zeichenkette, abgeschlossen mit Null. Registerpaar DE zeigt auf Kontroll-Adress-Feld. Registerpaar BC zeigt auf die Ergebniszeichenkette, das erste Byte hält die maximale Länge der Kette.
Die zu formatierende Zeichenkette kann Kontrollzeichen beinhalten wie im Modul PRINTF definiert.
Mit Variabler aus Kontroll-Adress-Feld:
%FIn Format FN.T wandeln
%DIn Format D:FN.T wandeln
%UIn Format DU:FN.T wandeln
%%Zeichen „%" übernehmen
 Alle anderen Kombination werden übernommen
  O: Die Ergebniskette ist gefüllt, Abschluss mit Null. Die gesetzte Carryflag zeigt Überlauf an.

PRNUTL.MAC
$CONTR B: Wandeln von Kontrollzeichen wie im Modul PRINTF beschrieben
  I: Akku enthält Kontrollzeichen t, b, r, f, n oder \. Registerpaar BC zeigt auf die Ergebniszeichenkette.
  O: Zeichen in Akku gewandelt und gespeichert.
$STCH B: Speichern eines Zeichens
  I: Akku hält Zeichen, Registerpaar BC zeigt auf die Ergebniszeichenkette und Register IX zeigt auf die verbleibende Länge (Speicherung nur, wenn dieser Wert > 0 ist)
  O: Zeroflag gesetzt, wenn Null gespeichert wurde.

SBRK.MAC
SBRK B: Bereitstellen von neuem Speicherplatz
  I: Registerpaar HL hält Anzahl gewünschter Bytes.
  O: Registerpaar HL hält Adresse auf freien Speicher. Falls nicht genügend Speicher vorhanden ist, hält Registerpaar HL 0.
Der Stack Pointer muss mit der höchsten möglichen Adresse geladen sein (aus Adresse 0006). In SBRK-2 steht der zu berücksichtigende Platz für den Stack (Default 1024). Der freie Speicherplatz wird ermittelt aus der Assembler Variablen $MEMRY.

MALLOC.MAC
MALLOC $GETMEM B: Bereitstellen von Speicherplatz
  SVENV I: Registerpaar HL hält Anzahl gewünschter Bytes.
  O: Registerpaar HL hält Adresse auf freien Speicher. Falls nicht genügend Speicher vorhanden ist, hält Registerpaar HL 0.

CALLOC.MAC
CALLOC B: Bereitstellen von Speicherplatz und Initialisierung mit 0.
  I: Registerpaar HL hält Anzahl gewünschter Bytes.
  O: Registerpaar HL hält Adresse auf freien Speicher. Falls nicht genügend Speicher vorhanden ist, hält Registerpaar HL 0.

REALLOC.MAC
REALLOC B: Bereitstellen von geändertem Speicherplatz.
  I: Registerpaar HL hält Anzahl gewünschter Bytes und Registerpaar DE hält Speicherzeiger wie von MALLOC oder CALLOC geliefert.
  O: Registerpaar HL hält Adresse auf freien Speicher. Falls nicht genügend Speicher vorhanden ist, hält Registerpaar HL 0.

FREE.MAC
FREE ALLPTR B: Freigeben von Speicherplatz
  I: Registerpaar HL hält Adresse des bisher belegten Speichers, wie sie von MALLOC oder CALLOC geliefert wird.
  O: ---

FOPEN.MAC
FOPEN B: Öffnen einer Datei
  I: Registerpaar HL zeigt auf Dateinamen DU:FN.EXT oder ein Zeichen orientiertes Gerät (CON:, LST:, usw.). Registerpaar DE zeigt auf zu öffnenden Typen (‚r', ‚w' oder ‚a'). Falls Dateien im binären Format geöffnet werden sollen, muss dem Typen ein ‚o' vorangestellt werden.
  O: Registerpaar HL enthält Adresse auf eine Datei oder hält einen Kode für Zeichen orientierte Geräte. Im Fehlerfall wird 0 zurückgegeben.

FCLOSE.MAC
FCLOSE B: Schließen einer Datei
  I: Registerpaar DE enthält Adresse auf eine Datei.
  O: Registerpaar HL hält 0 bei Erfolg.

UNLINK.MAC
UNLINK B: Löschen einer Datei
  I: Registerpaar HL zeigt auf Dateinamen DU:FN.EXT
  O: Registerpaar HL hält 0 bei Erfolg.

FNAME.MAC
FNAME B: Umbenennen einer Datei
  I: Registerpaar DE zeigt auf alten Dateinamen DU:FN.EXT und Registerpaar HL zeigt auf neuen Dateinamen DU:FN.EXT
  O: Registerpaar HL hält 0 bei Erfolg.

FGETC.MAC
FGETC $RDPRC B: Einlesen eines Zeichens von einer Datei
  $KBDPC I: Registerpaar DE enthält Adresse auf eine Datei.
  O: Registerpaar HL hält Zeichen. -1 zeigt Dateiende an.

UNGETC.MAC
UNGETC B: Rückschreiben eines gelesenen Zeichens in eine Datei
  I: Registerpaar DE enthält Adresse auf eine Datei und Registerpaar HL hält Zeichen.
  O: Registerpaar HL hält Zeichen. -1 zeigt Dateifehler an.

FPUTC.MAC
FPUTC B: Schreiben eines Zeichens in eine Datei.
  I: Registerpaar DE enthält Adresse auf eine Datei, Registerpaar HL hält Zeichen.
  O: Registerpaar HL hält Zeichen. -1 zeigt Fehler an.

FGETS.MAC
FGETS B: Einlesen einer Zeichenkette von einer Datei
  I: Registerpaar DE enthält Adresse auf eine Datei, Registerpaar HL zeigt auf einzulesende Zeichenkette und Registerpaar BC hält Länge der Kette (Ohne Berücksichtigung der angehängten Null).
  O: Registerpaar HL hält Länge der Kette -1. -1 zeigt Dateiende an

FPUTS.MAC
FPUTS B: Schreiben einer Zeichenkette in eine Datei.
  I: Registerpaar DE enthält Adresse auf eine Datei, Registerpaar HL zeigt auf mit 0 abgeschlossene Zeichenkette.
  O: Registerpaar HL hält Resultat. -1 zeigt Fehler an.

FCB.MAC
DU$FCB B: Umwandeln einer Zeichenkette in eine gültige FCB
  I: Registerpaar DE zeigt auf Zeichenkette (Format DU:FN.EXT) und Registerpaar HL auf FCB
  O: Registerpaar HL zeigt auf Diskettenpuffer und Registerpaar DE auf FCB

CBDOS.MAC
$BDOS B: Ausführen einer Betriebssystemfunktion
  I: Register(paar) (D)E hält Parameter und Register C hält Funktion
  O: Registerpaar HL und Akku halten das Ergebnis

UBDOS.MAC
U$BDOS B: Ausführen einer Datei spezifischen Betriebssystemfunktion
  I: Registerpaar DE hält Adresse des Dateibeschreibers und Register C hält Funktion
  O: Registerpaar HL und Akku halten das Ergebnis
Das Byte in Dateibeschreiber+36 hält den einzustellenden Benutzerbereich, 0 bedeutet keine Änderung

FIO.MAC
<...> $FLAGS B: Definition der Gerätefunktionen
  $STDIN   Definition der Standard Eingabe
  $STDOUT   Definition der Standard Ausgabe