File: MACSYS.MA of Tape: Various/Decus/decus-2
(Source file text) 


/		  /STEUERZEICHEN FUER SCHRIFTGROESSE












/
/****************************************************
/****************************************************
/**** H A U N I  W E R K E  K O E B E R & COKG ******
/****************************************************
/****************************************************
/****************************************************









/****************************************************
/******************** MACSYS.MA *********************
/*********************---------**********************
/************ M A C R O - L I B R A R Y *************
/****************************************************
/*********ERSTELLT VON P.MODEREGGER ABT.281**********
/*********J.BUSSE,V.HENNINGSEN,R.MOHRMANN ***********
/****************************************************












/AUSFERTIGUNGSDATUM:  5. OKTOBER 1983

										 			/PAGE   1
/PAGE	TITLE

/   1	       INHALTSVERZEICHNIS
/   2	       HINWEISE ZUR BENUTZUNG


/   3	       DEFINITIONEN
/   4	       DEFINITIONEN FUER MACROS
/   5	       SETZEN DER ALLGEMEINEN VARIABLEN
/   6	SPERRE:SPERREN DER PLAETZE 0000-0007 IN ALLEN FELDERN
/   7	OPEN  :EROEFFNEN EINER PROGRAMMSECTION
/   8	CLOSE :ABSCHLIESSEN EINER PROGRAMMSECTION
/   9	PRINT :DRUCKEN BELIEBIGER TEXTE
/  10	TEXAUS:AUSGABE BELIEBIGER TEXTE
/  11	CALL  :AUFRUFEN VON SUBROUTINES
/  12	       MEMORY-INSTR. VATAD,VADCA,VAINC,VAISZ,VADEC,VADSZ
/  13	       MEMORY-INSTR. INC,DEC,DSZ
/  14	JMX   :SPRUNG JMX
/  15	TYPE  :AUSDRUCK DES AC-INHALTS UEBER ANGEW. DEVICE
/  16	LIES  :ZEICHENAUFNAHME VON ANGEW. DEVICE
/  17	DECPRT:WANDLUNG EINER OKTALZ. IN AUSGEDRUCKTE DEZIMALZ.
/  18	LIESTT:AUFNAHME EINES ZEICHENS VOM SICHTGERAET
/  19	TYPECL:AUSDR. EINES ZEICHENS UEBER SICHTGERAET U. DRUCKER
/  20	RUBOUT:LOESCHEN EINES ZEICHENS AUF DEM SICHTGERAET
/  21	WAIT  :STOP EINER AUSGABE
/  22	DECAUF:WANDLUNG EINGEGEBENER DEZIMALZAHLEN IN OKTALZAHLEN
/  23	MULTIP:MULTIPLIKATION ZWEIER 12-BIT OKTALZAHLEN
/  24	DIVIDE:DIVISION EINER 24-BIT OKTALZ. DURCH 12 BIT MIT VORZ.
/  25	VERZWG:VERGL. VON ARGUMENTEN MIT AC-INHALT UND SPRINGEN
/  26	VERGLE:VERGLEICH ZWEIER 12-BIT ZAHLEN MIT SPRUNG
/  27	TAELL :HOLEN EINES TABELLENPLATZES IN DEN AC
/  28	TAELS :ABSPEICHERN DES AC IN EINEN TABELLENPLATZ
/  29	MSPACE:AUSGEBEN VON SPACES
/  30	JANEIN:JA ODER NEIN GEDRUECKT ?
/  31	CRLF  :AUSGABE VON ZEILENWECHSEL
/  32	FUELL :AUFFUELLEN EINES TEXTES MIT ZEICHEN
/  33	BERAUS:PRUEFEN,OB ZEICHEN IM ANGEGEBENEN BEREICH LIEGT
/  34	ADD   :ADDIEREN IN DEN AC
/  34	DCAADD:ADDIEREN IN DEN AC UND ANSCHLIESSEND ABSPEICHERN
/  35	MULTI2:MULTIPLIKATION EINER 24-BIT ZAHL MIT 2
/  36	ZUWEIS:VERGL. VON ARG. MIT AC-INH.,BITMUSTER LADEN
/  37	OPNSUB:EROEFFNEN EINER SUBROUTINE MIT FELDW. U. DATENS.
/  38	OPSTR :EROEFFNEN EINER STRINGDEFINITION
/  39	TABERZ:STRINGTABELLE ERZEUGEN
/  40	CLOSTR:SCHLIESSEN DER STRINGTABELLE
/  41	STRING:AUFNAHME EINES STRINGS
/  42	RESMER:RUECKSETZEN VON MERKERN
/  43	DEFMER:DEFINIEREN VON MERKERN
/  44	ENDPR :LOESCHEN PERMANENTER SYMBOLE VON DER SYMBOL TABLE
/  45	CLOPG :ABSCHLIESSEN EINER PAGE, MIT PAGEWECHSEL
/  46	JMF   :FELDFREIER SPRUNG

										 			/PAGE   2

/	HINWEISE ZUR BENUTZUNG DER MACROS


/  1)	DIE VERWENDUNG VON AKKUMULATORINHALTEN,ALLGEMEINEN VARIABLEN (ALLVA)
/	UND SPRUNGZIELEN IN DEN ARGUMENTEN DER MACROAUFRUFE IST MIT EINEM
/	FESTEN EINGABEFORMALISMUS GEKOPPELT.

/	BEARBEITUNG DES AC-INHALTES

/	AC	WIRD DIESE ANGABE ALS ARGUMENT GEBRAUCHT,SO WIRD DER
/		AC-INHALT ZUR WEITEREN BEARBEITUNG VERWENDET.
/	AC:	STEHT DIESE ANGABE IM ARGUMENT,SO WIRD EIN MERKER MIT
/		AC-INHALT ANGELEGT.
/	AC+	DIESER ZUSATZ BEWIRKT DIE ADDITION DES AC-INHALTES ZUM
/		FOLGENDEN SPEICHERPLATZ.
/	CAL:	VERANLASST DAS LOESCHEN VON LINK UND AKKU,BEVOR DIE
/		NAECHSTE OPERATION ABLAEUFT.
/	CLA:	S.O.JEDOCH OHNE LINK

/	ANSPRECHEN DER ALLGEMEINEN VARIABLEN

/	VA:	DIESER ZUSATZ GESTATTET DAS AUFRUFEN EINER ALLGEMEINEN
/		VARIABLEN AUS EINEM ARGUMENT HERAUS.

/	ANWAEHLEN VON SPRUNGZIELEN

/	EQ:	BEI ERFUELLUNG DER BEDINGUNG (EQUAL) WIRD DAS SO GEKENN=
/		ZEICHNETE ARGUMENT ANGESPROCHEN UND DIE BEARBEITUNG GEHT
/		DORT WEITER.
/	NE:	S.O. (NOT EQUAL)
/	LT:	S.O. (LESS THAN)
/	GT:	S.O. (GREATER THAN)

/	FELDFREIER RUECKSPRUNG AUS UNTERPROGRAMM

/	RT:	DIESE ANGABE IM ARGUMENT BEWIRKT EINEN FELDFREIEN
/		RUECKSPRUNG.








										 			/PAGE   2-1


/  2)	ES IST IN MANCHEN FAELLEN ERFORDERLICH,DIE ARGUMENTE
/	EINES MACROAUFRUFES IN KLAMMERN ANZUGEBEN.
/	HIERBEI IST DEUTLICH ZU UNTERSCHEIDEN ZWISCHEN
/	RUNDEN UND ECKIGEN KLAMMERN.

/	RUNDE KLAMMERN ( )

/	( )	DIE RUNDEN KLAMMERN BEWIRKEN DIE ERZEUGUNG
/		EINES LITERALS AM ENDE DER PROGRAMMSECTION.
/		RUNDE KLAMMERN WERDEN GEBRAUCHT,UM FESTE WERTE
/		ANZUGEBEN ODER UM SPEICHERPLAETZE INDIREKT
/		ANZUSPRECHEN.

/	ECKIGE KLAMMERN < >

/	< >	ECKIGE KLAMMERN DAGEGEN ERMOEGLICHEN DIE
/		ANGABE EINES STRINGS,IN DEM AUCH TRENNZEICHEN
/		(SPACES) STEHEN DUERFEN.ALLE ZEICHEN 
/		INNERHALB DER KLAMMERN WERDEN ALS EIN
/		STRING AUFGEFASST.


										 			/PAGE   3

/-------ALLGEMEINE DEFINITIONEN-------
/27.08.81 PMO						
	CDI=CDF CIF
	V=HLT
	MONITR=^O7600	/EINTRITT IN DEN OS/8-MONITOR
	DUMMY=NOP
	CAL=CLA CLL

	BIT00=4000	/DEFINITIONEN ZUM SETZEN DER BITS
	BIT01=2000
	BIT02=1000
	BIT03=0400
	BIT04=0200
	BIT05=0100
	BIT06=0040
	BIT07=0020
	BIT08=0010
	BIT09=0004
	BIT10=0002
	BIT11=0001
										 			/PAGE   3-1

/FORTSETZUNG DEFINITIONEN				

/-------TTY DEFINITIONEN--------------
/27.08.81 PMO
	CR=^O215	/CARRIAGE RETURN
	LF=^O212	/LINE FEED
	RUB=^O377	/RUB OUT
	SPACE=^O240	/SPACE
	KOMMA=^O254	/KOMMA
	BELL=^O207	/BELL (KLINGEL)
	ESC=^O233	/ESCAPE


/-------CRC DEFINITIONEN--------------
/27.08.81 PMO
	CLRBET=^O6730	/CLEAR BET-SPEICHER
	WTMR=^O6732	/WARTE ZEIT IN AC AB
	STREG=^O6733	/SETZE FUNKTIONSREGISTER
	SKWEN=^O6734	/SKIP AUF WRITE ENABLED
	SKRDY=^O6735	/SKIP AUF CRC-READY MELDUNG
	SKCIP=^O6736	/SKIP AUF KASSETTE IN POSITION MELDUNG
	SKBET=^O6737	/SKIP AUF BET MELDUNG
	CLRRCV=^O6740	/CLEAR EMPFANGSREGISTER
	RCV=^O6741	/EMPFANGENE DATEN IN AC HOLEN
	CLRTRM=^O6742	/CLEAR SENDEREGISTER
	TRM=^O6743	/SENDE DATEN AUS AC AUS
	SKRCV=^O6744	/SKIP WENN DATEN EMPFANGEN
	SKTRM=^O6745	/SKIP WENN DATEN GESENDET
	SKRRDY=^O6746	/SKIP WENN DATENBLOCK BEENDET IST
	SKTRDY=^O6747	/SKIP WENN AUSSENDEN BEENDET IST



/-------MESSINTERFACE DEFINITIONEN-----
/27.08.81 PMO
	CLI=^O6100	/CLEAR MESSINTERFACE
	SRD=^O6101	/SKIP UEBERTRAGUNG BEENDET
	LSE=^O6102	/HOLE DATEN VOM DATENSPEICHER IN AC
	SBH=^O6103	/SETZE BEFEHLSSPEICHER
	SBF=^O6104	/DATEN VON AC IN ADRESS-SPEICHER
	SAD=^O6105	/DATEN VON AC IN ADRESS-SPEICHER
			/UND DATEN VON PERIPHERIE IN
			/DATENSPEICHER
	SDD=^O6106	/DATEN VON AC IN DATENSPEICHER
	SMF=^O6107	/SKIP AUF START-STOP MESSEN ODER
			/AUF BAW-MELDUNG JE NACH ANWAHL
			/IM BEFEHLSSPEICHER

										 			/PAGE   4


/-------ALLGEMEINE DEFINITIONEN FUER MACROS--------
/8.4.83 VH
	PTP=^O0000	/GENERIERUNG DER DEVICE-ADRESSE FUER PTP AUF 6010/6020
	PTR=^O0010	/ADRESSE FUER TRANSMIT
	PRE=^O0000	/ADRESSE FUER RECEIVE

	TTY=^O0020	/GENERIERUNG DER DEVICE-ADRESSE FUER TTY AUF 6030/6040
	TTR=^O0030	/ADRESSE FUER TRANSMIT
	TRE=^O0020	/ADRESSE FUER RECEIVE

	LPT=^O0640	/GENERIERUNG DER DEVICE-ADRESSE FUER LPT AUF 6650/6660
	LTR=^O0650	/ADRESSE FUER TRANSMIT
	LRE=^O0640	/ADRESSE FUER RECEIVE





/----------- CONTROL-ZEICHEN ------------------------------------
/8.4.83 VH

	CTRA=^O0201
	CTRB=^O0202
	CTRC=^O0203
	CTRF=^O0206
	CTRG=^O0207
	CTRH=^O0210
	CTRI=^O0211
	CTRJ=^O0212
	CTRL=^O214
	CTRQ=^O0221
	CTRS=^O0223
	CTRZ=^O0232
	CTRHO=^O0236

										 			/PAGE   5

/-------ALLVA (ALLGEMEINE VARIABLE PAGE 0 - FIELD 0)--------
/03.09.81 PMO

/DIE ALLVA SIND ALLGEMEINE VARIABLE IN PAGE 0  FIELD 0
/DIE VON DEN UNTERPROGRAMMEN DER LINK-LIBRARY AUFGERUFEN WERDEN.
/FUER NORMALPROGRAMME MUESSEN DIE ALLVA ALS EXTERNALS DEFINIERT SEIN.


.EXTERNAL ALLVAZ,SUBADR	,SUBFLD
.EXTERNAL SPRUB, SPTTY, SPHSR, SPMARK,ZAHIGH,ZALOW, COUNA0,COUNA1
.EXTERNAL COUNB0,COUNB1,VERGA0,VERGA1,VERGB0,VERGB1,ADM3A


										 			/PAGE   6

/========== S P E R R E =============
/31.08.81 PMO,11.4.83 VH



/UM KONFLIKTE MIT DEN ODT-PROGRAMMEN ZU VERMEIDEN
/WERDEN HIER FUER DEN LINKER ALLE PLAETZE 0000-0007 ALLER FELDER MIT EINER
/DUMMY-A SECTION VERSEHEN.
/IM AUFRUF VON SPERRE MUESSEN LEDIGLICH DIE FELDNUMMERN DER FELDER
/ANGEGEBEN WERDEN.

/DIE DUMMY A-SECTION SIND WIE FOLGT GEKENNZEICHNET:
/		DUMM\FELDNR\A-SECTION
/		Z.B.:SPERRE 3  ==>  DUMM3A

/FUER JEDE ZU SPERRENDE SECTION IST IM HAUPTPROGRAMM EINE FREIGABE DER
/A-SECTION VORZUNEHMEN.ES EMPFIEHLT SICH , DIESES IM HAUPT-MACREL-FILE
/ZU MACHEN.
/DAS MACRO SPERRE SOLLTE VOR EINEM OPEN-CLOSE-ZYKLUS AUFGERUFEN WERDEN.



/AUFRUF: SPERRE 0,1,2.......

.MACRO	SETDUM B
	.IF BL B <
		  .MEXIT>
	MKDUMM=B
	.ASECT DUMM\<MKDUMM>A
	FIELD MKDUMM
	*0000
	ZBLOCK 8.
.ENDM	SETDUM

.MACRO	SPERRE A,B,C,D,E,F,G,H
	SETDUM "A"
	SETDUM "B"
	SETDUM "C"
	SETDUM "D"
	SETDUM "E"
	SETDUM "F"
	SETDUM "G"
	SETDUM "H"
.ENDM	SPERRE 

										 			/PAGE   7

/=========  O P E N ===========
/27.08.81 PMO


/DAS MACRO OPEN EROEFFNET EINE PROGRAMMSECTION

/AUFRUF:	OPEN "NAME","SECT",STARTFELD,STARTADRESSE

/			NAME: PROGRAMMNAME (ES WERDEN MAX.5 ZEICHEN
/			      BERUECKSICHTIGT
/			SECT: ANGABE DER SECTION (EIN ZEICHEN)
/			STARTFELD: STARTFELD DER SECTION (0...7)
/			STARTADRESSE: STARTADRESSE DER SECTION
/				      OKTALZAHL ODER LABELANGABE.
/				      (NUR EINMAL VERWENDEN,DA ANGABE
/				      FUER DEN LINKER!).

/			DIE ANGABEN VON SECT,STARTFELD UND STARTADRESSE
/			SIND OPTIONAL.
/			WIRD KEINE SECTION ANGEGEBEN, SO WIRD AUTOMATISCH
/			EINE R-SECTION EROEFFNET.

/			DER AUFRUF VON OPEN EROEFFNET AUTOMATISCH
/			EINE SECTION MIT EINER ZEICHENLAENGE
/			VON 5 ZEICHEN ZUR KENNUNG UND EINEM 6.
/			ZEICHEN ZUR SECTIONSERKENNUNG.
/			DAS 6.ZEICHEN ENTSPRICHT DER SECTION
/			(GILT NUR FUR NAMEN MIT 5 ODER MEHR ZEICHEN)
/			DER SECTION-NAME SOLL MAX 5 ZEICHEN LANG SEIN!


.MACRO	OPEN A,B,C,D
	.IF NB B <.SECT A[1:5]B,B>
	.IF BL B <.RSECT A[1:5]R>
	.IF NB D <.START D>
	.IF NB C <FIELD C>
	MACMER=0
.ENDM	OPEN


										 			/PAGE   8

/========= C L O S E =============
/27.08.81 PMO


/DAS MACRO CLOSE SCHLIESST EINE PROGRAMMSECTION AB
/UND EROEFFNET EINE D-SECTION FALLS INNERHALB DER
/VORHERGEHENDEN SECTIONEN MACROS MIT D-SECTIONS
/AUTOMATISCH (SIEHE Z.B. PRINT) DEFINIERT WORDEN
/SIND. 



/AUFRUF:	CLOSE "NAME",ZUSATZ

/			NAME:	PROGRAMMNAME (ES WERDEN
/				MAX. 5 ZEICHEN BERUECKSICHTIGT)
/			ZUSATZ:	SOLL NACH DEM ANLEGEN DER AUTO-
/				MATISCHEN D-SECTION NOCH EINE
/				WEITERE DEFINITON VON DATEN
/				ERFOLGEN, SO MUSS DER ZUSATZ
/				MIT 0 ANGEGEBEN WERDEN.
/				SIND KEINE WEITEREN DATEN EIN-
/				ZUGEBEN, SO KANN DER ZUSATZ ENT-
/				FALLEN.

/				DER AUFRUF VON CLOSE EROEFFNET AUTO-
/				MATISCH EINE SECTION MIT EINER
/				ZEICHENLAENGE VON 5 ZEICHEN ZUR KENNUNG
/				UND EINEM 6.ZEICHEN ZUR SECTIONSERKENNUNG.
/				DAS 6.ZEICHEN ENTSPRICHT DER SECTION
/				(GILT NUR FUER NAMEN MIT 5 ODER MEHR ZEICHEN).


.MACRO	CLOSE A,B
	CLOPG NOPAGE
	.IF GT MACNBR-MACNB <
		.DSECT A[1:5]T
			.REPT MACNBR-MACNB
			MACNB=MACNB+1
			MAC\MACNB
			.IF EQ DRLNR-3 <EXPUNGE MAC\MACNB,MAD\MACNB>
			.ENDR
		.MEXIT >
	.IF EQ MACNBR-MACNB <
		.IF NB B <
			.DSECT A[1:5]T >>
.ENDM	CLOSE

										 			/PAGE  9

/========= P R I N T ==========
/27.08.81 PMO


/DAS MACRO PRINT DIENT ZUR AUSGABE BELIEBIGER TEXTE
/AUF DEM DATENSICHTGERAET ODER GLEICHZEITIG DEM
/DRUCKER.

/SOLL NUR DAS DATENSICHTGERAET VERWENDET WERDEN,
/SO SETZE SPHSR=0

/DATENSICHTGERAET UND DRUCKER GLEICHZEITIG
/SO SETZE SPHSR=1

/SOLL NUR DER DRUCKER VERWENDET WERDEN,
/SO SETZE SPHSR=-1

/AUFRUF:	PRINT "TEXT",DRUCKART

/			DER TEXT KANN EIN BELIEBIGET ASCII-TEXT
/			MIT EINER ZEILE LAENGE SEIN.
/			ALS CR/LF KANN DER 'UNDERWRITER' VER-
/			WENDET WERDEN.

/			SOLL EIN IM TEXT GEPACKTER TEXT (INTER-
/			ESSANT BEI MEHR ALS 4 GLEICHEN ZEICHEN
/			HINTEREINANDER) VERWENDET WERDEN, SO
/			MUSS DIESER IM FOLGENDEN FORMAT EINEGEBEN
/			WERDEN: ^  ZUR EROEFFNUNG DES GEP. TEXTES
/				X  ASCII-ZEICHEN, DAS IM 6 BIT-CODE
/				   OKTAL DIE ANZAHL DER AUSZUGEBENDEN
/				   ZEICHEN ENTHAELT
/				Y  ZU WIEDERHOLENDES ZEICHEN
/			BEISP.: ^J=   DRUCKE 10 MAL = HINTEREINANDER AUS

/			DIE ANWAHL DER DRUCKART MUSS NUR ERFOLGEN, WENN
/			EINE ANDERE DRUCKART ALS 0 VERWENDET WERDEN
/			SOLL.
/			DRUCKARTEN:	0 : 6 BIT ASCII TEXT
/					1 : WIE 0,GEPACKTER TEXT
/					    & WIRD FUER BELL VERWENDET
/					2 : WIE 1,ZEICHEN # UND $ WERDEN
/					    FUER AUSDRUCK DER ZAEHLER
/					    COUNA0,1 VERGA0,1
/					    HIERBEI IST #0,#1 VERGA0,1
/					    UND         $0,$1 COUNA0,1


.MACRO	PRINT A,B
	MACNBR=MACNBR+1
	TEXAUS B
	CDF MAD\MACNBR
	MAD\MACNBR
	.MACRO	MAC\MACNBR
		MAD\MACNB,	TEXT "A"
	.ENDM
.ENDM	PRINT

										 			/PAGE  10

/========= T E X A U S ==========
/27.08.81 PMO


/DAS MACRO TEXAUS DIENT ZUR AUSGABE BELIEBIGER TEXTE
/AUF DEM DATENSICHTGERAET ODER GLEICHZEITIG DEM DRUCKER

/ANWAHL DER AUSGABE: SPHSR=0   : NUR SICHTGERAET
/                    SPHSR=1   : SICHTGERAET UND DRUCKER GLEICHZEITIG
/                    SPHSR=-1  : NUR DRUCKER

/AUFRUF:	TEXAUS DRUCKART,TEXTNUMMER


/			DER TEXT SOLLTE IN EINER D-SECTION STEHEN
/			UND WIE FOLGT AUFGEBAUT SEIN:
/			TEXTNUMMER, TEXT "TEXT" (SIEHE TEXT DIRECTIVE)

/			DIE ANGABE DER TEXTNUMMER ALS ARGUMENT IST OPTIONAL.
/			WIRD KEINE TEXTNUMMER ANGEGEBEN, SO MUSS FELD UND
/			TEXTNUMMER WIE IN KLAMMERN EINGEGEBEN WERDEN.

/			DER TEXT KANN EIN BELIEBIGER ASCII-TEXT
/			MIT EINER ZEILE LAENGE SEIN.
/			ALS CR/LF KANN DER 'UNDERWRITER' VER-
/			WENDET WERDEN.

/			SOLL EIN IM TEXT GEPACKTER TEXT (INTER-
/			ESSANT BEI MEHR ALS 4 GLEICHEN ZEICHEN
/			HINTEREINANDER) VERWENDET WERDEN, SO
/			MUSS DIESER IM FOLGENDEN FORMAT EINEGEBEN
/			WERDEN: ^  ZUR EROEFFNUNG DES GEP. TEXTES
/				X  ASCII-ZEICHEN, DAS IM 6 BIT-CODE
/				   OKTAL DIE ANZAHL DER AUSZUGEBENDEN
/				   ZEICHEN ENTHAELT
/				Y  ZU WIEDERHOLENDES ZEICHEN
/			BEISP.: ^J=   DRUCKE 10 MAL = HINTEREINANDER AUS

/			DEI ANWAHL DER DRUCKART MUSS NUR ERFOLGEN, WENN
/			EINE ANDERE DRUCKART ALS 0 VERWENDET WERDEN
/			SOLL.
/			DRUCKARTEN:	0 : 6 BIT ASCII TEXT
/					1 : WIE 0,GEPACKTER TEXT
/					    & WIRD FUER BELL VERWENDET
/					2 : WIE 1,ZEICHEN # UND $ WERDEN
/					    FUER AUSDRUCK DER ZAEHLER
/					    COUNA0,1 VERGA0,1
/					    HIERBEI IST #0,#1 VERGA0,1
/					    UND         $0,$1 COUNA0,1


.MACRO	TEXAUS A,B
	.EXTERNAL STEXAU
	CALL STEXAU,A+0
	.IF BL B < .MEXIT >
	CDF B
	B
.ENDM	TEXAUS

										 			/PAGE  11

/========= C A L L ==============
/31.08.81 PMO


/DAS MACRO CALL DIENT ZUM AUFRUF BELIEBIGER RELOCATABLE
/SUBROUTINES


/AUFRUF:	CALL NAME,ARG.1,ARG.2,....ARG.7
/		(ARG.1)
/		(ARG.2)
/		   .
/		   .	   DIESE ARGUMENTE WERDEN AUTOMATISCH ANGELEGT
/		   .
/		(ARG.7)

/		 NAME:	LABEL-NAME DER AUFZURUFENDEN SUBROUTINE
/		 ARG.:	MOEGLICHE ZUZUFUEGENDE ARGUMENTE.
/			ES KOENNEN BIS ZU 7 ARGUMENTE DEM AUFRUF CALL
/			HINZUGEFUEGT WERDEN.
/			DIESE ARGUMENTE WERDEN DER REIHENFOLGE NACH
/			HINTER DEN AUFRUF DER SUBROUTINE GESETZT.
/			DIE ANGABE VON ARGUMENTEN IST OPTIONAL.

.MACRO	CALL A,B,C,D,E,F,G,H
	CIF A
	JMS A
	B
	C
	D
	E
	F
	G
	H
.ENDM	CALL
										 			/PAGE  12

/=== M E M O R Y - I N S T R. FUER  V A R I A B L E =
/01.09.81 PMO


/DIE MACROS MEMORY-INSTRUCTION FUER VARIABLE DIENEN ZUR BEARBEITUNG
/DER ALLGEMEINEN VARIABLEN.
/DIE VARIABLEN KOENNEN IN BELIEBIGEN FELDERN STEHEN.
/EBENSO KOENNEN HIERMIT DIE ALLGEMEINEN VARIABLEN (ALLVA)
/BEARBEITET WERDEN.
/ES WIRD EIN AUTOMATISCHER FELDWECHSEL VORGENOMMEN.
/DIE MACROS ARBEITEN WIE DIE ENTSPRECHENDEN NORMALEN MEMORY-
/INSTRUKTIONEN.

/AUFBAU DER NAMEN:  VA(RIABLE)MEM.INSTR.  BEISPIEL: VATAD = TAD

/AUFRUF:	VA MEM.INSTR. (S.O.) NAME
/			NAME IST DIE BEZEICHNUNG DER VARIABLEN

/VATAD
.MACRO	VATAD A
	CDF A
	TAD I (A)
	CDF .FLD
.ENDM	VATAD

/VADCA

.MACRO	VADCA A
	CDF A
	DCA I (A)
	CDF .FLD
.ENDM	VADCA


/VAINC
/VAINC ARBEITET GRUNDSAETZLICH MIT EINEM NOP NACH DEM
/INCREMENT!

.MACRO	VAINC A
	CDF A
	ISZ I (A)
	NOP
	CDF .FLD
.ENDM	VAINC


/VAISZ

.MACRO	VAISZ A
	CDF A
	ISZ I (A)
	JMP .+3
	CDF .FLD
	JMP .+3
	CDF .FLD
.ENDM	VAISZ

										 			/PAGE  12-1

/FORTSETZUNG MEMORY-INSTR. FUER VARIABLE


/VADEC   ACHTUNG:  AC WIRD 0!
/DECREMENT 


.MACRO	VADEC A
	CDF A
	CLA CMA
	TAD I (A)
	DCA I (A)
	CDF .FLD
.ENDM	VADEC


/VADSZ   ACHTUNG:  AC WIRD 0!
/DECREMENT UND SKIP IF ZERO


.MACRO	VADSZ A
	CDF A
	CLA CMA
	TAD I (A)
	DCA I (A)
	TAD I (A)
	CDF .FLD
	SZA CLA
.ENDM	VADSZ


										 			/PAGE  13

/====== M E M O R Y - I N S T R.  INC DEC DSZ =====
/01.09.81 PMO



/DIESE MACROS DIENEN ZUR VEREINFACHUNG DER SCHREIBWEISEN


/INC IST EIN EINFACHES INCREMENT OHNE SKIP (HIER WIRD AUTOMATISCH
/EIN NOP ANGEHAENGT).
/WIRD AN DEN SPEICHER NOCH EIN WEITERES ARG. ANGEHANGT, SO WIRD
/DAS NOP AUSGELASSEN -SOLLTE SONDERFALL BLEIBEN!


/DEC DIENT ZUM DECREMENTIEREN
/ACHTUNG:  AC GEHT VERLOREN!


/DSZ IST EIN DECREMENT MIT ANSCHLIESSENDEM SKIP IF ZERO-
/AEQUIVALENT ZUM ISZ
/ACHTUNG:  AC GEHT VERLOREN!

/AUFRUF:	MEM.INSTRUKTION  SPEICHER




/INC

.MACRO	INC A,B
	ISZ A
	.IF BL B <NOP>
.ENDM	INC



/DEC  ACHTUNG: AC WIRD 0!

.MACRO	DEC A
	CLA CMA
	TAD A
	DCA A
.ENDM	DEC



/DSZ  ACHTUNG: AC WIRD 0!

.MACRO	DSZ A
	CLA CMA
	TAD A
	DCA A
	TAD A
	SZA CLA
.ENDM	DSZ


										 			/PAGE  14

/========= S P R U N G   J M X  ==========
/28.12.81 PMO




/DAS MACRO JMX FRAGT DEN AC-INHALT AB UND ERZEUGT ABHAENGIG DAVON,
/OB DER AC NULL IST ODER NICHT EINEN SPRUNG.
/DER AC KANN ZUSAETZLICH MIT EINER VARIABLEN ANGEGEBEN WERDEN (OPTIONAL).


/AUFRUF:	JMX A,B,C


/BEDEUTUNG:	A: ANGABE AC FUER AC,BZW AC+...... FUER AC UND VARIABLE ODER NUR VARIABLE
/		B UND C: DIE BEIDEN MOEGLICHEN SPRUNGZIELE
/			 1) EQ:......  SPRUNGZIEL BEI INHALT NULL
/			 2) NE:......  SPRUNGZIEL BEI INHALT UNGLEICH NULL
/			    IN BEIDEN FAELLEN WIRD DER AC-INHALT NULL !





.MACRO	JMX A,B,C
	EXPUNGE EQMAC,NEMAC
	TADAU1 <A>
	TESMAC "B",0
	TESMAC "C",1
	.IF DF NEMAC <	SZA CLA
			TESSPR NEMAC,"B","C"
			.IF DF EQMAC <	TESSPR EQMAC,"B","C" >
			.MEXIT >
	SNA CLA
	TESSPR EQMAC,"B"
.ENDM	JMX
										 			/PAGE  15

/========= T Y P E =================
/27.08.81 PMO



/DAS MACRO TYPE DIENT ZUM AUSDRUCK EINES IM AC STEHENDEN
/ZEICHENS UEBER DAS ANGEWAEHLTE DEVICE


/ALS BESONDERHEIT KANN EIN ASCII ZEICHEN AUSGEDRUCKT WERDEN.
/AUSSER "/",DER ALS KOMMENTAR WIRKT


/AUFRUF:	TYPE DEVICE,ACCLR,<ASCII>
/		     DEVICE:	ANWAHL DES DEVICES
/				PTP:	LANGSAMER DRUCKER
/				LPT:	SCHNELLER DRUCKER
/				TTY:	DATENSICHTGERAET
/		     ACCLR:	0=AC BEI AUSTRITT CLEAR
/				1=AC BEI AUSTRITT ERHALTEN
/				WIRD ACCLR NICHT DEFINIERT,
/				SO IST IMMER AC ERHALTEN.
/		     ASCII:	FREI WAEHLBARES ASCII-ZEICHEN
/				ODER SPEICHERPLATZ


/		ACCLR UND ASCII SIND OPTIONAL



.MACRO	TYPE A,B,C
	.IF NB C < TADAU1 <C>>
	PSF+A
	JMP .-1
	PLS+A
	.IF BL B <
		.MEXIT >
	.IF EQ B <
		CAL >
.ENDM	TYPE

										 			/PAGE  16

/========= L I E S ===============
/27.08.81 PMO


/DAS MACRO LIES DIENT ZUR ZEICHENAUFNAHME EINES ZEICHEN VON
/EINEM GEWAEHLTEN DEVICE.
/DER VORHERIGE AC-INHALT WIRD GELOESCHT.

/AUFRUF:	LIES DEVICE

/		     DEVICE  :   PTP  LANGSAME EINGABE
/				 LPT  SCHNELLE EINGABE
/				 TTY  DATENSICHTGERAET



.MACRO	LIES A
	RSF+A
	JMP .-1
	RRB RFC+A
.ENDM	LIES

										 			/PAGE  17

/======= D E C P R T ==============
/27.08.81 PMO


/DAS MACRO DECPRT WANDELT EINEN OKTALEN SPEICHER ODER AC
/INHALT IN EINE AUSGEDRUCKTE DEZIMALE ZAHL UM.

/FUEHRENDE NULLEN WERDEN UNTERDRUECKT.
/HIERBEI WERDEN ANSTELLE DER NULLEN SPACES GEDRUCKT.
/SOLLEN BEI 2 STELLIGEM AUSDRUCK KEINE SPACES AUSGEGEBEN WERDEN, MUSS
/ANSTELLE EINER 2 'A2' EINGEGEBEN WERDEN.


/DER AUSDRUCK ERFOLGT UEBER DAS DATENSICHTGERAET UND WAHLWEISE
/UEBER DEN SCHNELLDRUCKER. DIESE ANWAHL ERFOLGT UEBER
/DEN SPEICHER SPHSR; HIERBEI IST SPHSR=0   NUR TTY
/				 SPHSR=1   TTY UND LPT
/				 SPHSR=-1  NUR LPT

/ES KANN ZWISCHEN 2,4 UND 5 STELLIGEM AUSDRUCK GEWAEHLT WERDEN.
/BEI 2 UND VIERSTELLIGEM AUSDRUCK IST DIE AUSZUDRUCKENDE ZAHL
/IM AC ABZULEGEN.

/BEI 5 STELLIGEM AUSDRUCK MUSS DIE ZAHL IN DEN ALLVA'S
/ZAHIGH UND ZALOW ABGELEGT WERDEN.


/VERFUEGBARE ZAHLENBEREICHE:
/				2-STELLIG:  0-99
/				4-STELLIG:  0-4095
/				5-STELLIG:  0-99999




/AUFRUF:	DECPRT STELLENZAHL

/		       DIE STELLENZAHL KANN HIER 2,4 ODER 5
/		       BETRAGEN. ANDERE ANGABEN SIND NICHT ZULAESSIG



.MACRO	DECPRT A
	.IF IDN A,A2<.EXTERNAL SDAU2A
		     CALL SDAU2A
		     .MEXIT >
	.IF DIF A,A2<.EXTERNAL SDAUS\A
		       CALL SDAUS\A >
.ENDM	DECPRT
										 			/PAGE  18

/======== L I E S T T =============
/27.08.81 PMO


/DAS MACRO LIESTT DIENT ZUR AUFNAHME VON ZEICHEN VOM
/TTY (DATENSICHTGERAET) MIT ECHO.
/DAS ECHO KANN ZUSAETZLICH UEBER DEN DRUCKER (LPT)
/AUSGEGEBEN WERDEN. DIESE MOEGLICHKEIT IST UEBER
/SPHSR ANWAEHLBAR. HIERBEI IST SPHSR=0  NUR TTY
/			      SPHSR=1  TTY UND LPT
/			      SPHSR=-1 NUR LPT


/DER ALTE AC-INHALT WIRD GELOESCHT.

/DAS ZEICHEN STEHT IM AC UND IST ZUSAETZLICH IM ALLVA SPTTY
/ABGELEGT.

/BEIM ECHO WERDEN ALLE CONTROL-ZEICHEN UNTERDRUECKT.



/JEDES EINGEGEBENE ZEICHEN (AUSSER CONTROL-ZEICHEN!)
/ZAEHLT DEN ALLVA SPRUB UM EINS WEITER.



.MACRO	LIESTT
	.EXTERNAL SLIEST
	CALL SLIEST
.ENDM	LIESTT
										 			/PAGE  19

/======= T Y P E C L ==============
/01.09.81 PMO



/DAS MACRO TYPECL DIENT ZUM AUSDRUCK EINES ZEICHENS UEBER
/DAS DATENSICHTGERAET (TTY) UND DEN DRUCKER (LPT).


/DAS AUSZUDRUCKENDE ZEICHEN MUSS IM AC STEHEN.


/BEI RUECKKEHR IST DER AC-INHALT 0


/DIE ANWAHL DES AUSDRUCKES ERFOLGT MIT SPHSR;
/		HIERBEI IST SPHSR=0   NUR TTY
/			    SPHSR=1   TTY UND LPT
/			    SPHSR=-1  NUR LPT


/OPTIONAL KANN DER AUSDRUCK EINES ASCII ZEICHENS ODER EIN
/SPEICHERPLATZ EINGEGEBEN WERDEN
/AUSSER "/",DER ALS KOMMENTAR WIRKT



/AUFRUF:	TYPECL <ASCII>

/			HIERBEI IST ASCII DAS AUSZUDRUCKENDE ASCII-
/			ZEICHEN



.MACRO	TYPECL A
	.EXTERNAL STYPEC
	.IF NB A < TADAU1 <A> >
	CALL STYPEC
.ENDM	TYPECL
										 			/PAGE  20

/====== R U B O U T ================
/27.08.81 PMO



/DAS MACRO RUBOUT DIENT ZUM LOESCHEN EINES AUF DEM DATEN-
/SICHTGERAET AUSGEGEBENEN ZEICHENS.

/ES IST DARAUF ZU ACHTEN, DASS NICHT UEBER DIE ZEILEN DES DATEN-
/SICHTGERAETES GELOESCHT WERDEN KANN.

/RUBOUT DECREMENTIERT DEN ALLVA SPRUB UND SETZT DEN ALLVA
/SPTTY AUF 0



.MACRO	RUBOUT
	.EXTERNAL SRUBOU
	CALL SRUBOU
.ENDM	RUBOUT
										 			/PAGE  21

/========= W A I T =================
/02.09.81 PMO



/DAS MACRO WAIT DIENT ZUM STOP EINER AUSGABE AUF TTY UND TTY UND DRUCKER
/DIE BEDIENUNG ERFOLGT UEBER CONTROL-ZEICHEN.


/HIERBEI BEDEUTEN:
/			CTR D	STOP AUSDRUCK
/			CTR E	RUECKKEHR ZUR AUSDRUCKFORTS.
/			CTR F	RUECKKEHR ZUM RUECKKEHRPUNKT



/AUFRUF:	WAIT RUECKKEHRPUNKT,AUSDRUCKFORTS.

/			HIERBEI IST ZU BEACHTEN, DASS DER RUECKKEHR-
/			PUNKT UND DIE AUSDRUCKFORTS. INNERHALB DER
/			SEKTION LIEGEN MUESSEN, IN DER DAS WAIT
/			AUFGERUFEN WURDE. ES SIND KEINE FELDSPRUENGE
/			MIT DIESEN PUNKTEN MOEGLICH.
/			SOLL DIE AUSDRUCKFORTS. IM ANSCHLUSS AN DEN
/			WAIT-AUFRUF ERFOLGEN, SO KANN DIE DEFINITION
/			DER AUSDRUCKFORTS. ENTFALLEN. WAIT KOMMT DANN
/			MIT DER EINGABE CTR E AN DEN NAECHSTEN FREIEN
/			PLATZ NACH DEM AUFRUF UND FAEHRT DORT FORT.




.MACRO	WAIT A,B
	.EXTERNAL SWAIT
	CALL SWAIT "JMP A"
	.IF NB B <JMP B>
.ENDM	WAIT



										 			/PAGE  22

/======= D E C A U F ===============
/04.09.81 PMO


/DAS MACRO DECAUF DIENT ZUR AUFNAHME UND UMWANDLUNG VON
/UEBER DIE TASTATUR DES TTY EINGEGEBENE DEZIMALZAHLEN
/IN OKTALZAHLEN.


/DURCH EINGABE EINES RUBOUT'S WIRD DIE EINGABE GELOESCHT;
/EIN ZWEITES RUBOUT VEURSACHT EINEN VORZEITIGEN RUECK-
/SPRUNG.


/DER NORMALE RUECKSPRUNG ERFOLGT DURCH EINGABE EINES
/ZEICHENS, DAS NICHT ZIFFER IST, ODER BEI ERREICHEN DER MAX.
/ZAHLENLAENGE


/NACH ERFOLGTER EINGABE STEHEN DIE UMGEWANDELTEN ZAHLEN
/IN ZAHIGH UND ZALOW , SPMARK IST > 0 UND DAS ZULETZT
/EINGEGEBENE ZEICHEN STEHT IN SPTTY


/DAS ECHO KANN UEBER TTY ODER TTY+LPT ERFOLGEN.
/				SPHSR=0  NUR TTY
/				SPHSR=1  TTY UND LPT
/				SPHSR=-1 NUR LPT


/AUFRUF:	DECAUF ZAHLENLAENGE,ADRESSE BEI 2.RUBOUT,WAHL MIT/OHNE LIESTT

/			ZAHLENLAENGE:1..5
/			WAHL MIT/OHNE LIESTT: OHNE EINGABE
/				WIRD SPRUB AUF 0 GESETZT
/				UND LIESTT VOR DECAUF GESETZT.
/				KOMMT MAN VON ROUTINEN,NACH DENEN
/				DAS 1. ZEICHEN SCHON IN SPTTY
/				STEHT, SO GEBE 0 EIN.



.MACRO	DECAUF A,B,C
	.EXTERNAL SDECAU
	.IF BL C <
		CAL
		VADCA SPRUB
		LIESTT >
	CALL SDECAU,-A-1
	.IF NB B <JMP B
		.MEXIT>
		NOP
.ENDM	DECAUF
										 			/PAGE  23

/======= M U L T I P ===============
/04.09.81 VHE


/DAS MACRO MULTIP WIRD ZUM MULTIPLIZIREN ZWEIER 12-BIT
/OKTALZAHLEN VERWENDET.
/DAS ERGEBNIS HAT 24-BIT

/DIE ZAHLEN SIND VORZEICHENBEHAFTET!


/DIE ERSTE ZAHL STEHT IM AC
/DIE ZWEITE ZAHL ALS SPEICHERANGABE HINTER DEN AUFRUF
/DAS ERGEBNIS STEHT MIT DEM HOEHERWERTIGEN TEIL IM MQ
/		    MIT DEM NIEDERWERTIGEN TEIL IM AC


/AUFRUF:	MULTIP SPEICHERBEZ.



.MACRO	MULTIP A
	.EXTERNAL SIMULT
	CALL SIMULT,"CDF A","A"
.ENDM	MULTIP

										 			/PAGE  24

/======= D I V I D E ===============
/04.09.81 VHE



/DAS MACRO DIVIDE DIENT ZUM DIVIDIEREN EINER 24-BIT
/OKTALZAHL DURCH EINE 12-BIT OKTALZAHL MIT VORZEICHEN


/DER DIVIDEND UND DER DIVISOR WERDEN AUS SPEICHERN
/AUFGERUFEN.
/DER DIVIDEND LOW MUSS IM DEN DIVIDEND HIGH FOLGENDEN
/SPEICHER STEHEN.


/BEIM ERGEBNIS STEHT DER QUOTIENT IM AC UND DER REST IM MQ


/AUFRUF:	DIVIDE <DIVIDEND HIGH>,<DIVISOR>



.MACRO	DIVIDE A,B
	.EXTERNAL SDIVIS
	CALL SDIVIS,"CDF A","A","CDF B","B"
.ENDM	DIVIDE

										 			/PAGE  25

/========== V E R Z W G =============
/04.09.81 PMO


/DAS MACRO VERZWG DIENT ZUM VERGLEICH UND ERGEBNISSPRUNG EINER
/ARGUMENTENLISTE MIT EINEM IM AC STEHENDEN ARGUMENT.

/DER AUSTRITT AUS DEM MACRO ERFOLGT ENTWEDER UEBER DIE SPRUNGLISTE (BEI
/AC-ARG=LISTENARG.)ODER IM ANSCHLUSS AN DEN AUFRUF (KEIN ARG. RICHTIG).

/BEI ARG. GEFUNDEN AC=0
/KEIN ARG. GEFUNDEN AC-INHALT=EINTRITTSINHALT

/AUFRUF:	VERZWG <ARG.1>,.......,<ARG.8>
/		SPRUNG (1.A),.........,(8.A)

/D.H. ES WIRD IMMER ZU DER UNTER DEM ARGUMENT STEHENDEN ADRESSE GESPRUNGEN

.MACRO	VERZWG A,B,C,D,E,F,G,H
	.EXTERNAL SVERZW
	MACNBR=MACNBR+1
	CALL SVERZW,"CDF MAD\MACNBR","MAD\MACNBR","MAD\<MACNBR+1>"
	.MACRO	MAC\MACNBR
		MAD\MACNB,	A
				B
				C
				D
				E
				F
				G
				H
	.ENDM
.ENDM	VERZWG

.MACRO	SPRUNG A,B,C,D,E,F,G,H
	MACNBR=MACNBR+1
	.MACRO	MAC\MACNBR
		MAD\MACNB,	A
				B
				C
				D
				E
				F
				G
				H
			SETFLD "A"
			SETFLD "B"
			SETFLD "C"
			SETFLD "D"
			SETFLD "E"
			SETFLD "F"
			SETFLD "G"
			SETFLD "H"
	.ENDM
.ENDM	SPRUNG

										 			/PAGE 25-1

/FORTSETZUNG VERZWG


.MACRO SETFLD A
	.IF BL A <.MEXIT>
	CDF CIF A
.ENDM SETFLD
										 			/PAGE  26

/========= V E R G L E ==============
/09.10.81 JBU


/DAS MACRO VERGLE VERGLEICHT ZWEI 12-BIT ZAHLEN VON DENEN EINE IM AC
/STEHEN KANN.

/AUFRUF:	VERGLE A,B,C,D,E

/BEDEUTUNG:		A:ADR. DER ERSTEN ZU VERGLEICHENDEN ZAHL,
/			  WENN "AC" EINGESETZT WIRD;VERGL. MIT AC-INHALT
/			B:ADR. DER ZWEITEN ZAHL
/			C-E:1-3 SPRUNGZIELE JE NACH AUFRUF
/			DIE ANGABE IST WIE FOLGT ZU MACHEN
/			1) EQ:......	SPRUNGZIEL BEI GLEICHHEIT
/			2) NE:......	SPRUNGZIEL BEI UNGLEICHHEIT
/			3) LT:......	SPRUNGZIEL BEI A<B
/			4) GT:......	SPRUNGZIEL BEI A>B
/			   SIND A ODER/UND B MIT VA:..... BEZEICHNET,
/			   SO IST ES GLEICH IN WELCHEM FELD SIE STEHEN.
/			   (SIEHE MACLIB.MA "VATAD" USW.)
/			DER AC-INHALT IST NACH DEM AUSSPRUNG 0 !



.MACRO	TADAUS A
	.IF IDN A[1:3],VA:<
			VATAD A[4:9.]
			.MEXIT>
	.IF DIF A[1],"<.IF DIF A[1:2],-"<
					.IF DIF A[1],'<
							.IF DIF A[1:2],-'<
									 .IF DIF A[1],^<
										 	.IF DIF A[1:2],-^<TAD A
										 			 .MEXIT >>>>>>
	TAD (A)
.ENDM	TADAUS



.MACRO	TADAU1 A
	.IF IDN A,AC< .MEXIT >
	.IF DIF A[1:3],AC+< CAL
			    TADAUS <A>
			    .MEXIT >
	TADAUS <A[4:12.]>
.ENDM	TADAU1
										 			/PAGE  26-1

/FORTSETZUNG VERGLE


.MACRO	TESMAC A,B
	.IF BL A < .MEXIT >
	.IF DIF A[3],:< .MEXIT >
	A[1:2]MAC=B
.ENDM	TESMAC


.MACRO	TESSPR A,B,C,D
	.IF EQ A <	JMP B[4:9.]
			.MEXIT >
	.IF EQ A-1 <	JMP C[4:9.]
			.MEXIT >
	JMP D[4:9.]
.ENDM	TESSPR


.MACRO	VERGLE A,B,C,D,E
	EXPUNGE EQMAC,NEMAC,GTMAC,LTMAC
	TADAU1 <A>
	CIA CLL
	TADAUS <B>
	TESMAC "C",0
	TESMAC "D",1
	TESMAC "E",2
	.IF DF NEMAC <	SZA CLA
			TESSPR NEMAC,"C","D","E"
			.IF DF EQMAC <	TESSPR EQMAC,"C","D","E" >
			.MEXIT >
	SNA CLA
	.IF DF EQMAC <	TESSPR EQMAC,"C","D","E" >
	.IF NDF EQMAC <	NRMAC=2
			.IF DF GTMAC <	NRMAC=NRMAC+1 >
			.IF DF LTMAC <	NRMAC=NRMAC+1 >
			JMP .+NRMAC >
	.IF DF LTMAC <	SZL
			TESSPR LTMAC,"C","D","E"
			.IF DF GTMAC <	TESSPR GTMAC,"C","D","E" >
			.MEXIT >
	.IF DF GTMAC <  SNL
			TESSPR GTMAC,"C","D","E" >
.ENDM	VERGLE

										 			/PAGE  27

/========== T A E L L ===============
/24.02.82 PMO




/DAS MACRO TAELL LIEFERT DEN INHALT EINES TABELLENPLATZES IM AKKU ODER SPEICHER



/AUFRUF:	TAELL ABSPEICHERADR,ANFANGSADR TABELLE,ZEIGER AUF TABELLENPLATZ,KONSTANTE
/	ODER:	TAELL ABSPEICHERADR,PNTR(DER ANFANGSADRESSE):FELD(TABELLE ALS LABEL),ZEIGER,KONSTANTE



/ERLAEUTERUNG:	BEI ANGABE AC WIRD IM AKKU ABGESPEICHERT,
/		SONST UNTER DEM ANGEGEBENEN SPEICHERPLATZ.(A)
/		DIE ADRESSE BERECHNET SICH AUS
/		ANFANGSADRESSE DER TABELLE (B)
/		+INHALT ZEIGER AUF TABELLENPLATZ (C)
/		+KONSTANTE (OPTIONAL).(D)
/		DIE FELDUMSCHALTUNG WIRD MIT "CDF ANFANGSADRESSE TABELLE"
/		UND CDF .FLD VORGENOMMEN.


.MACRO TAELL A,B,C,D
	CLA
	TAELL0 "B","C","D"
	SETF "B"
	TAD I HILF0$
	.IF IDN A[1:3],VA:<CDF A[4:9.]
			   DCA I (A[4:9.])>
	CDF .FLD
	.IF IDN A,AC<.MEXIT>
	.IF DIF A[1:3],VA:<DCA A>
.ENDM	TAELL

.MACRO TAELL0 B,C,D
	SEHIME HILF0$,$HILF0
	SUDP "B"
	.IF EQ MACDPK <TAD (B)>
	.IF GT MACDPK <TAD B[1:MACDPK]
			   MACDPK=MACDPK+2>
	TAD C
	.IF NB D <TAD (D)>
	DCA HILF0$
.ENDM TAELL0

.MACRO SETF B
	.IF EQ MACDPK <CDF B
			.MEXIT>
	CDF B[MACDPK:14.]
.ENDM SETF

										 			/PAGE  28

/========== T A E L S ===============
/24.02.82 PMO



/DAS MACRO TAELS SCHREIBT DEN INHALT DES AKKUS ODER EINES SPEICHERS
/IN EINEN TABELLENPLATZ


/AUFRUF:	TAELS HOLADR,ANFANGSADR TABELLE,ZEIGER AUF TABELLENPLATZ,KONSTANTE
/	ODER	TAELS HOLADR,PNTR(DER ANFANGSADRESSE):FELD DER TABELLE ALS LABEL,ZEIGER,KONSTANTE


/ERLAEUTERUNG:	BEI ANGABE AC WIRD VOM AKKU WEGGESPEICHERT,
/		SONST VOM ANGEGEBENEN SPEICHERPLATZ.(A)
/		DIE ADRESSE BERECHNET SICH AUS
/		ANFANGSADRESSE DER TABELLE (B)
/		+INHALT ZEIGER AUF TABELLENPLATZ (C)
/		+KONSTANTE (OPTIONAL).(D)
/		DIE FELDUMSCHALTUNG WIRD MIT CDF ANFANGSADRESSE TABELLE
/		UND CDF .FLD VORGENOMMEN.

.MACRO TAELS A,B,C,D
	SEHIME HILF1$,$HILF1
	DCA HILF1$
	TAELL0 "B","C","D"
	.IF IDN A,AC<TAD HILF1$>
	.IF IDN A,-AC<TAD HILF1$
		      CIA>
	.IF DIF A,AC<.IF DIF A,-AC<TADAUS "A">>
	SETF "B"
	DCA I HILF0$
	CDF .FLD
.ENDM	TAELS

.MACRO SEHIME A,B
	.IF NDF B < B=1
		    MACMER=MACMER+1
		    MACA "A:HLT" >
.ENDM SEHIME
										 			/PAGE  29

/=========== M S P A C E ============
/22.10.81   HEBR



/DAS MACRO MSPACE GIBT WAHLWEISE AUF DATENSICHTGERAET ODER SCHNELLDRUCKER
/SPACES AUS. DIE ANWAHL ERFOLGT UEBER DEN SPEICHER SPHSR.
/HIERBEI IST  SPHSR = 0   NUR TTY
/	      SPHSR = 1   TTY + LPT
/	      SPHSR =-1   NUR LPT

/DIE ANZAHL DER SPACES MUSS ANGEGEBEN WERDEN .


/AUFRUF:	MSPACE SPACEANZAHL



.MACRO MSPACE A
	.EXTERNAL SSPACE
	CLA
	TAD (A)
	CALL SSPACE
.ENDM MSPACE

										 			/PAGE  30

/========== J A N E I N ==============
/08.10.81 JBU



/DAS MACRO JANEIN FRAGT DIE TASTATUR AB NACH "J" FUER "JA"
/UND "N" FUER "NEIN".
/ZUM EINLESEN WIRD LIESTT (SIEHE MACLIB.MA) VERWENDET,DAHER AUCH
/ECHO AUF LPT MOEGLICH.
/WIRD EINE ANDERE TASTE ALS "J" ODER "N" GEDRUECKT,WIRD DER HINWEIS:
/"ANTWORTE BITTE MIT JA ODER NEIN!" GEGEBEN UND DIE TASTATUR
/ERNEUT ABGEFRAGT.



/AUFRUF:	JANEIN RUECKKEHRADR FUER NEIN,RUECKKEHRADR FUER JA


/DIE RUECKKEHRADR FUER NEIN MUSS ANGEGEBEN WERDEN,DIEJENIGE FUER
/JA IST OPTIONAL.


.MACRO	JANEIN A,B
	.EXTERNAL SJANEI
	CALL SJANEI,<JMP A>
	.IF BL B <
			.MEXIT>
	JMP B
.ENDM	JANEIN


										 			/PAGE  31

/========== C R L F =================
/22.10.81  HEBR




/DAS MACRO CRLF GIBT WAHLWEISE AUF DATENSICHTGERAET ODER SCHNELLDRUCKER
/ZEILENWECHSEL AUS.DIE ANWAHL ERFOLGT UEBER DEN SPEICHER SPHSR.
/HIERBEI IST  SPHSR = 0  NUR TTY
/	      SPHSR = 1  TTY + LPT
/	      SPHSR =-1  NUR LPT
/DIE ANZAHL DER ZEILENWECHSEL KANN OPTIONAL ANGEGEBEN WERDEN , MUSS BEI
/ANGABE ABER > 0 SEIN !!!




/AUFRUF:	CRLF ANZAHL ZEILENWECHSEL


.MACRO CRLF A
	.EXTERNAL SCRLF
	CALL SCRLF
	.IF NB A <A>
	.IF BL A <1>
.ENDM CRLF

										 			/PAGE  32

/=========== F U E L L ==============
/22.10.81   HEBR



/DAS MACRO FUELL FUELLT EINEN ,IN EINEM FELD, ANGEGEBENEN TEXT(2 ZEICHEN/WORT)
/MIT ZEICHEN AUF.
/DER TEXTNAME UND DIE GESAMTLAENGE MUESSEN ANGEGEBEN WERDEN.
/NACH DEM AUFFUELLEN STEHT DIE ANZAHL DER AUFGEFUELLTEN SPACES IM AKKU.
/ES KANN OPTIONAL ZUGELASSEN WERDEN,OB DIE SPACES AUSGEGEBEN WERDEN SOLLEN
/ODER NICHT (WENN D ALS ANGABE FEHLT WERDEN KEINE SPACES AUSGEGEBEN).



/AUFRUF:	FUELL TEXTNAME,LAENGE,ASCII-ZEICHEN,OPTION



.MACRO FUELL A,B,C,D
	.EXTERNAL SFUELL
	CALL SFUELL "CDF A",A,B,C&^O77
	.IF NB D <.EXTERNAL SSPACE
		  CALL SSPACE >
.ENDM FUELL
										 			/PAGE  33

/========== B E R A U S =============
/26.11.81 PMO


/DAS MACRO BERAUS ERKENNT,OB EIN VORGEGEBENES ZEICHEN
/INNERHALB EINES AUSGEWAEHLTEN BEREICHES LIEGT.


/AUFRUF:	BERAUS A,<B>,<C>,D


/BEDEUTUNG:
/A:DAS ZU VERGLEICHENDE ZEICHEN
/B UND C:DIE BEREICHSGRENZEN 
/ES IST GLEICHGUELTIG,OB B ODER C DEN
/GROESSEREN GRENZWERT ENTHAELT.
/D:DAS SPRUNGZIEL,WENN DAS ZEICHEN INNERHALB DES BEREICHES
/LIEGT.
/IST DAS ZEICHEN NICHT IM BEREICH SO STEHT ES HINTER
/DEM AUFRUF IM AC ZUR VERFUEGUNG.


.MACRO	BERAUS A,B,C,D
	SEHIME HILF0$,$HILF0
	TADAU1 <A>
	.IF IDN A,AC< CLL >
	DCA HILF0$
	TAD HILF0$
	.IF EQ B-C <	TAD (-B)
			SNA CLA
			JMP D
			TAD HILF0$
			.MEXIT >
	.IF LT B-C <	TAD (-B) >
	.IF GT B-C <	TAD (-C) >
	SNL CLA
	JMP .+5
	TAD HILF0$
	.IF LT B-C <	TAD (-C) >
	.IF GT B-C <	TAD (-B) >
	SNA SZL CLA
	JMP D
	TAD HILF0$
.ENDM	BERAUS
										 			/PAGE  34

/======== A D D , D C A A D D ============
/01.12.81 PMO


/DAS MACRO ADD ADDIERT 1-8 ZAHLEN IN DEN AC.
/DER AC-INHALT STEHT HINTER DEM AUFRUF ZUR VERFUEGUNG

/AUFRUF:	ADD A,B,C,D,E,F,G,H

/BEDEUTUNG:	A-H:SUMMAND1-SUMMAND8 (POS ODER NEG ZAHLEN)
/		NEGATIVE ZAHLEN WERDEN ERKANNT UND SUBTRAHIERT

/DAS MACRO DCAADD ADDIERT 1-7 ZAHLEN IN DEN AC
/UND LEGT DAS ERGEBNIS ANSCHLIESSEND UNTER A AB.

/AUFRUF:	DCAADD A,B,C,D,E,F,G,H

/BEDEUTUNG:	A:ERGEBNISADRESSE
/		B-H:SUMMAND1-SUMMAND7 (POS ODER NEG ZAHLEN)


.MACRO	TADAU A
	.IF BL A <.MEXIT >
	.IF DIF A[1],-< TADAUS <A>
			.MEXIT >
	SEHIME HILF0$,$HILF0
	DCA HILF0$
	TADAUS <A[2:10.]>
	CIA
	TAD HILF0$
.ENDM	TADAU

.MACRO	ADD A,B,C,D,E,F,G,H
	.IF DIF A,AC<
		     .IF DIF A,-AC<
				   .IF DIF A[1],-< TADAU1 <A> >
				   .IF IDN A[1],-<
						  .IF DIF A[1:4],-AC+< TADAUS <A[2:15.]> >
						  .IF IDN A[1:4],-AC+< TADAU <A[2:15.]> >>>>
	.IF IDN A[1],-<
		       .IF DIF A[1:3],-AC< CIA >>
	TADAU <B>
	TADAU <C>
	TADAU <D>
	TADAU <E>
	TADAU <F>
	TADAU <G>
	TADAU <H>
.ENDM	ADD

.MACRO	DCAADD A,B,C,D,E,F,G,H
	ADD <B>,<C>,<D>,<E>,<F>,<G>,<H>
	MACDCA "A"
.ENDM	DCAADD
										 			/PAGE  35

/========== M U L T I 2 =============
/30.11.81 RMO


/DAS MACRO MULTI2 MULTIPLIZIERT EINE 24 BIT LANGE
/ZAHL MIT 2.
/EIN LOW- UND EIN HIGH-TEIL ZU JE 12 BIT WERDEN
/WERDEN UM EINE STELLE NACH LINKS VERSCHOBEN UND
/WIEDER ABGELEGT.


/AUFRUF:	MULTI2 A,B

/BEDEUTUNG:
/A:LOW-TEIL
/B:HIGH-TEIL


.MACRO	MULTI2 A,B
	CLA
	TAD I A
	CLL RAL
	DCA I A
	.IF BL B <.MEXIT >
	TAD I B
	RAL
	DCA I B
.ENDM	MULTI2

										 			/PAGE  36

/=========== Z U W E I S ============
/11.12.81 JBU


/DAS MACRO ZUWEIS PRUEFT, OB DER AC-INHALT MIT EINEM DER ARG. VON ZUWEIS
/IDENTISCH IST. WENN JA, DANN WIRD EIN ALS ARG. VON BITMUS
/(AN DER ENTSPRECHENDEN STELLE) ANGEGEBENES BITMUSTER IN DEN AC GELADEN
/UND DAS MACRO ZUM ERSTEN RUECKKEHRPUNKT VERLASSEN.

/FINDET SICH KEINE UEBEREINSTIMMUNG, WIRD DAS MACRO MIT DEM ALTEN
/AC-INHALT ZUM ZWEITEN RUECKKEHRPUNKT VERLASSEN. (DADURCH
/KASKADIERUNG MOEGLICH!)

/AUFRUF:	ZUWEIS <ARG.1>,.......,<ARG.8>
/		BITMUS (1.A)  ,.......,(8.A)
/		HIER RUECKKEHR WENN AC-INHALT EINEM DER ARG. VON ZUWEIS
/		  ENTSPRACH MIT DEM ENTSPRECHENDEM BITMUSTER ALS NEUEM
/		  AC-INHALT

/		ZWEITER RUECKKEHRPUNKT MIT URSPRUENGLICHEM AC-INHALT 
/		  ENN DIESER KEINEM ARG. VON ZUWEIS ENTSPRACH

/DIE BITMUSTER (ARGUMENTE VON BITMUS) WERDEN DABEI DEN ARGUMENTEN VON
/ZUWEIS ZUGEWIESEN.


.MACRO	ZUWEIS A,B,C,D,E,F,G,H
	.EXTERNAL SZUWEI
	MACNBR=MACNBR+1
	CALL SZUWEI,"CDF MAD\MACNBR","MAD\MACNBR","MAD\<MACNBR+1>"
	.MACRO	MAC\MACNBR
		MAD\MACNB,	A
				B
				C
				D
				E
				F
				G
				H
	.ENDM
.ENDM	ZUWEIS
.MACRO	BITMUS A,B,C,D,E,F,G,H
	MACNBR=MACNBR+1
	.MACRO	MAC\MACNBR
		MAD\MACNB,	A
				B
				C
				D
				E
				F
				G
				H
	.ENDM
.ENDM	BITMUS
										 			/PAGE  37

/=========== O P N S U B ===========
/18.12.81 PMO


/DAS MACRO OPNSUB EROEFFNET SUBROUTINES UND SICHERT DIE
/ERFORDERLICHEN DATEN.


/AUFRUF:	OPNSUB A,B,C,D,E,F,G,H

/BEDEUTUNG:	A: DIE ANGABE RT:RUECKSPRUNGADRESSE ERLAUBT EINEN
/		   FELDFREIEN RUECKSPRUNG.
/		   BEI ANGABE AC: WIRD EIN MERKER MIT AC-INHALT
/		   EROEFFNET.
/		   IST DAS ARGUMENT OHNE ZUSATZ ANGEGEBEN,SO WIRD
/		   EIN NORMALER MERKER ANGELEGT.
/		B: AC:MERKER MIT AC-INHALT ODER POINTER
/	      C-H: POINTERINHALTE DIE GESICHERT WERDEN MUESSEN

.MACRO	SUBGET A
	.IF BL A < .MEXIT >
	TAD I .-SUBPNT
	DCA A
	SUBPNT=SUBPNT+2
	ISZ .-SUBPNT
	SUBPNT=SUBPNT+1
.ENDM	SUBGET

.MACRO	OPNSUB A,B,C,D,E,F,G,H
	HLT
	.IF BL A < .MEXIT >
	.IF IDN A[1:3],RT:<SUBPNT=5
			   POINST "B"
			   TAD (CDI)
			   RDF
			   DCA A[4:9.]
			   .IF NB B <.IF DIF B[1:3],AC:<SUBGET "B">>>
	.IF DIF A[1:3],RT:<SUBPNT=2
			   POINST "A"
			   SUBGET "B">
	SUBGET "C"
	SUBGET "D"
	SUBGET "E"
	SUBGET "F"
	SUBGET "G"
	SUBGET "H"
	.IF IDN A[1:3],RT:<CDF .FLD>
.ENDM	OPNSUB

.MACRO	POINST A
	.IF BL A <CLA
		  .MEXIT>
	.IF DIF A[1:3],AC:<CLA
			   .MEXIT>
	DCA A[4:9.]
.ENDM	POINST
										         	 	/PAGE 38

/==================== O P S T R =======================
/11.4.83 VHE




/DAS MACRO OPSTR EROEFFNET EINE TABELLE, IN DER DIE ASCII-WERTE DER
/STRINGS HINTERLEGT WERDEN
/DER NAME DER TABELLE IST FREI WAEHLBAR
/AN DEN NAMEN DER TABELLE WIRD EIN 'T' ANGEHAENGT
/ES KANN DAS FELD ANGEGEBEN WERDEN,IN DEM DIE TABELLE ANGELEGT WERDEN SOLL

/DAS MACRO OPSTR MUSS MIT DEN MACROS TABERZ UND CLOSTR GEMEINSAM BENUTZT
/WERDEN

/DIE 3 MACROS WERDEN FUER DIE BENUTZUNG DES MACROS STRING BENOETIGT

/BENUTZUNG:	OPSTR  <NAME DER STRINGTABELLE>,<FELD DER TABELLE(OPTIONAL)>
/		TABERZ  <STRING>,<SUBROUTINE>,<BEFEHLSWORTLAENGE>,<TRENNZEICHEN>
/		..............
/		..............
/		CLOSTR <NAME DER STRINGTABELLE>,<FELD DER TABELLEN>




.MACRO OPSTR A,C
	.SECT A[1:4]TD,D
	.IF NB C <FIELD C>
	.ENTRY A[1:5]T
	.MACRO OPESTR B
		A[1:5]T,	  B
	.ENDM
	STRANF=1
	SUBCFL=0
.ENDM

		                                                                    	 	/PAGE 39

/===================== T A B E R Z ====================
/11.4.83 VHE




/DAS MACRO TABERZ DIENT DAZU EINEN STRING IN EINE TABELLE EINZUTRAGEN
/AUSSERDEM WIRD FUER DAS MACRO CLOSTR DAS FELD,DIE ADRESSE DER ENTSPRECHENDEN
/SUBROUTINE UND DIE BEFEHLSWORTLAENGE GEMERKT

/BEFEHLSWORTLAENGE = 0 :ES WIRD KEINE BEFEHLSWORTLAENGE GEMERKT BZW. ABGESPEICHERT
/		   > 0 :ES WIRD DIE ANGEGEBENE BEFEHLSWORTLAENGE HINTER DEN SUBROUTINENADRESSEN ABGESPEICHERT

/DIE STRINGLAENGE DARF MAXIMAL 6 ZEICHEN BETRAGEN
/ES KANN OPTIONAL EIN SPEZIELLES TRENNZEICHEN ANGEGEBEN WERDEN
/WIRD KEIN TRENNZEICHEN ANGEGEBEN,DANN WIRD CR ALS TRENNZEICHEN ANGENOMMEN

/WIRD ANSTELLE EINES SUBROUTINENNAMENS <"0> ANGEGEBEN, BEKOMMT DIESER STRING
/DIE SELBE KENNZAHL,WIE DER VORHERGEHENDE STRING.AUSSERDEM WIRD DIE SUBROUTINE
/DES VORHERGEHENDEN STRINGS BENUTZT

/EINE POSITIVE ZAHL KENNZEICHNET DEN ANFANG UND DIE LAENGE DES STRINGES
/EINE NEGATIVE ZAHL KENNZEICHNET DEN ANFANG UND DIE LAENGE EINES GLEICHEN STRINGES
/EIN 0000 KENNZEICHNET DAS ENDE DER TABELLE (VON CLOSTR)



/TABELLENAUFBAU:	XXXX	STRINGLAENGE
/			****	ERSTER BUCHSTABE
/			****	ZWEITER  -"-
/			....
/		       -XXXX	2.STRING MIT GLEICHER BEDEUTUNG,NEGATIVE STRINGLAENGE
/			....
/			....
/			XXXX	3.STRINGLAENGE
/			....
/			0000	TABELLENENDE



/AUFRUF:	TABERZ  "STRING",SUBROUTINE,WORTLAENGE,TRENNZEICHEN(OPTIONAL)
										  		/PAGE 39-1



.MACRO TABERZ A,B,C,D
	STRZAE=2
	.IF NB A[2]< STRZAE=STRZAE+1>
	.IF NB A[3]< STRZAE=STRZAE+1>
	.IF NB A[4]< STRZAE=STRZAE+1>
	.IF NB A[5]< STRZAE=STRZAE+1>

	.IF NE STRANF-1 < .IF IDN B,"0< -STRZAE >
			  .IF DIF B,"0< STRZAE >>
	.IF EQ STRANF-1 < .IF IDN B,"0< OPESTR -STRZAE >
			  .IF DIF B,"0< OPESTR STRZAE >
			  STRANF=STRANF+1 >

	  	   "A[1]
	.IF NB A[2]<  "A[2] >
	.IF NB A[3]<  "A[3] >
	.IF NB A[4]<  "A[4] >
	.IF NB A[5]<  "A[5] >
	.IF NB A[6]< "A[6]>
	.IF BL D < .IF BL A[6] < CR >>
	.IF NB D < .IF BL A[6] <D >>

	.IF DIF B,"0< .EXTERNAL B
		SUBCFL=SUBCFL+1
		.MACRO SFE\SUBCFL
			CIF B
		.ENDM

		.MACRO SAD\SUBCFL
			B
		.ENDM
		>
	.IF NE C < 
		   .MACRO SWL\SUBCFL
			C
		   .ENDM
		 >
.ENDM


										    		/PAGE 40

/====================== C L O S T R ===================
/11.4.83 VHE


/DAS MACRO CLOSTR ERZEUGT EINE TABELLE ,IN DER DIE FELDER UND DIE ADRESSEN
/DER SUBROUTINEN ABGELEGT WERDEN
/DIE REIHENFOLGE RICHTET SICH NACH DER REIHENFOLGE DER STRINGDEFINITION
/IN TABERZ
/DER NAME DER TABELLE MUSS DER SELBE WIE DER VOM MACRO OPSTR SEIN
/ES WIRD AUTOMATISCH EIN 'S' AN DEN NAMEN GEHAENGT
/DIE TABELLE KANN MIT EXTERNAL VON UEBERALL AUFGERUFEN WERDEN
/ES KANN DAS FELD ANGEGEBEN WERDEN,IN DEM DIE TABELLE ANGELEGT WERDEN SOLL

/AUFBAU:	FELDTABELLE<S>:	XXXX		/ANZAHL DER SUBROUTINEN
/				CDF SUB1	/ERSTE STRINGDEFINITION
/				CDF SUB2	/ZWEITE    -"-
/				........
/				SUB1		/ADRESSE ERSTE SUBROUTINE
/				SUB2
/				....
/				WLG1		/BEFEHLSWORTLAENGE VOM 1.BEFEHL
/				WLG2
/				....

/AUFRUF:	CLOSTR <TABELLE<S>>,<FELD(OPTIONAL)>



.MACRO CLOSTR A,B
			0000
	.ENTRY A[1:5]S
	.SECT A[1:4]SD,D
	.IF NB B <FIELD B>
		A[1:5]S,	SUBCFL
		SUBNBA=0
		.REPT SUBCFL
			SUBNBA=SUBNBA+1
			SFE\SUBNBA
		.ENDR

		SUBNBA=0
		.REPT SUBCFL
			SUBNBA=SUBNBA+1
			SAD\SUBNBA
		.ENDR

		.IF DF SWL1<SUBNBA=0
			.REPT SUBCFL
				SUBNBA=SUBNBA+1
				SWL\SUBNBA
			.ENDR
			>

		.IF EQ DRLNR-3< SUBNBA=1
				 .REPT SUBCFL
					EXPUNGE SAD\SUBNBA,SFE\SUBNBA,SWL\SUBNBA
					SUBNBA=SUBNBA+1
				.ENDR
				>
.ENDM




										 			/PAGE  41

/================= S T R I N G ===============
/10.5.83 VH


/DAS MACRO STRING ERMOEGLICHT DIE AUFNAHME EINES TEXTSTRINGS DER MAX 50 ZEICHEN LANG SEIN DARF.
/DIE  SUBROUTINE SZEIL UEBERNIMMT DEN STRING IN EINEN ANZUGEBENDEN PUFFER
/DIE SUBROUTINE SBEWER UEBERPRUEFT,OB DER EINGABEFORMALISMUS EINGEHALTEN WURDE (FEHLERRUECKSPRUNG).
/AUSSERDEM LEGT DIE SUBROUTINE ZU JEDEM TEILSTRING IHRE KENNUNG IN DEN BUFFERN
/KENNH,KENNL,BUFFH UND BUFFL AB

/KENNH : BIT 0:   0-STRING
/                 1-ZAHL
/        BIT 1:   0-POSITIVE ZAHL
/                 1-NEGATIVE ZAHL
/        BIT 9-11:STRINGLAENGE(OHNE TRENNZEICHEN)
/KENNL : ANFANGSADRESSE DES TEILSTRINGS IM GESAMTSTRING
/BUFFH : UEBERTRAG EINER ZAHL
/BUFFL : ZAHL(POSITIV) ODER STRINGNUMMER AUS DER STRINGTABELLE

/DAS FELD UND DIE ADRESSE DER SUBROUTINE DES ERSTEN STRINGS WERDEN IN SUBFLD
/UND SUBADR HINTERLEGT. DAS MACRO WIRD IN DEM FALL GANZ NORMAL BEENDET.

/DER STRING MUSS FOLGENDES FORMAT HABEN:
/TEILSTR.1/TRENNZ./TEILSTR.2/TRENNZ./....../TEILSTR.6/ENDZ.

/EIN TEILSTRING KANN SEIN:
/A)BUCHSTABENSTRING AUS MAX 6 BUCHSTABEN
/WOBEI FOLGENDE ZEICHEN WIE BUCHSTABEN BEHANDELT WERDEN:
/:,;,<,=,>,?,[,\,],^,_,!,",#,$,%,&,',(,),*,.,/

/B)ZAHLENSTRING AUS 1 VORZ. UND MAX 6 ZIFFERN.

/UEBERSCHREITEN DER MAX TEILSTRINGANZAHL (6) SOWIE DER MAX BUCHSTABEN- UND
/ZIFFERNANZAHL (6) FUEHRT ZUM FEHLERRUECKSPRUNG
/ALS TRENNUNGSZEICHEN DIENEN "SPACE","KOMMA" ODER "-"
/DER ABSCHLUSS EINER ZEILE MUSS <CR> ODER <ESCAPE> SEIN


/AUFRUF:	STRING A,B,C,D,E,F

/A-BUFFER,IN DEM DER GESAMTE STRING HINTERLEGT WERDEN SOLL
/B-STRINGDEFINITIONSTABELLE
/C-RUECKSPRUNGADRESSE,WENN NUR CR,ESCAPE,RUBOUT ODER EIN CONTROL-ZEICHEN EINGEGEBEN WIRD.
/D-FEHLERRUECKSPRUNG
/E-EINGEGEBENER STRING NICHT DEFINIERT
/F-NUR ZAHLEN EINGEGEBEN

.MACRO	STRING A,B,C,D,E,F
	.EXTERNAL SZEIL,SBEWER,SAM10,KENNH,KENNL,BUFFH,BUFFL,STRMU
	.EXTERNAL STRBEW,A,B[1:5]T,B[1:5]S
	CALL SZEIL <CDF A>,A,<JMP C>
	CALL SBEWER <CDF A>,A,<CDF B[1:5]T>,B[1:5]T,<CDF B[1:5]S>,B[1:5]S
	JMP D
	JMP E
	JMP F
.ENDM	STRING

										 			/PAGE  42

/=========== R E S M E R ===========
/30.12.81 RMO


/DAS MACRO RESMER SETZT MERKER ZURUECK

/AUFRUF:	RESMER MERKER1,MERKER2, ... ,MERKER8


/VOR DEM ERSTEN MERKER KANN GEWAEHLT WERDEN,OB:
/A)  NUR DER LETZTE AC-INHALT GELOESCHT WERDEN SOLL (ANGABE CLA:......)
/B)  DER LETZTE LINK- UND AC-INHALT GELOESCHT WERDEN SOLLEN (ANGABE CAL:......)
/C)  DER AC-INHALT IM ERSTEN MERKER ABZUSPEICHERN IST (ANGABE AC+......)



.MACRO	RESMER A,B,C,D,E,F,G,H
	EXPUNGE SUBPNT
	.IF IDN A[1:4],CLA:< CLA 
	SUBPNT=1 >
	.IF IDN A[1:4],CAL:< CAL
	SUBPNT=1 >
	.IF IDN A[1:3],AC+< SUBPNT=2 >
	.IF NDF SUBPNT < .MEXIT >
	.IF EQ SUBPNT-1 < MACDCA "A[5:15.]" >
	.IF EQ SUBPNT-2 < MACDCA "A[4:15.]" >
	MACDCA "B"
	MACDCA "C"
	MACDCA "D"
	MACDCA "E"
	MACDCA "F"
	MACDCA "G"
	MACDCA "H"
.ENDM	RESMER

.MACRO	MACDCA A
	.IF BL A < .MEXIT >
	.IF DIF A[1:3],VA:<DCA A
			   .MEXIT >
	CDF A[4:10.]
	DCA I (A[4:10.])
	CDF .FLD
.ENDM	MACDCA

										 			/PAGE  43

/=========== D E F M E R ============
/07.01.82 PMO


/DAS MACRO DEFMER DIENT ZUM DEFINIEREN VON MERKERN
/DEFMER MUSS IMMER INNERHALB EINES  OPEN ......CLOSE ZYKLUSSES AUF-
/GERUFEN WERDEN.


/AUFRUF:	DEFMER MERKER1,MERKER2, ... ,MERKER8


/AUFBAU DER MERKER:	MERKER			(ERGIBT MERKER:HLT)
/			MERKER:100.		(ERGIBT MERKER:144)
/			MERKER:PNTR		(ERGIBT MERKER:PNTR)
/			MERKE$			(ERGIBT MERKE$:HLT)

.MACRO	DEFMER A,B,C,D,E,F,G,H
	MERSET "A"
	MERSET "B"
	MERSET "C"
	MERSET "D"
	MERSET "E"
	MERSET "F"
	MERSET "G"
	MERSET "H"
.ENDM	DEFMER


.MACRO	MERSET A
	.IF BL A <.MEXIT>
	SUDP "A"
	MACMER=MACMER+1
	.IF EQ MACDPK < MACA "A[1:7]:HLT"
			.MEXIT >
	MACA "A"
.ENDM	MERSET


.MACRO	SUDPK A,B
	.IF BL A <.MEXIT>
	.IF IDN A,:<MACDPK=B>
.ENDM	SUDPK


.MACRO	MACA A
	.MACRO	MACG\MACMER
		A
	.ENDM
.ENDM	MACA
										 			/PAGE 43-1

/FORTSETZUNG DEFMER

.MACRO SUDP A
	MACDPK=0
	SUDPK "A[2]",1
	SUDPK "A[3]",2
	SUDPK "A[4]",3
	SUDPK "A[5]",4
	SUDPK "A[6]",5
	SUDPK "A[7]",6
.ENDM SUDP
										 			/PAGE  44

/=========== E N D P R =============
/04.02.82 PMO



/DAS MACRO ENDPR LOESCHT NACH DEM DRITTEN 
/ASSEMBLIERUNGSDURCHLAUF DIE PERMANENTEN
/SYMBOLNAMEN VON DER SYMBOL TABLE.
/DIE SUBROUTINES UND NAMEN, DIE UEBER DIE MACLIB
/ALS EXTERNALS DEKLARIERT SIND, BLEIBEN
/DAVON AUSGENOMMEN.


/AUFRUF:	ENDPR


/DAS MACRO ENDPR MUSS AM ENDE EINER FILE STEHEN



.MACRO	ENDPR
	.IF EQ DRLNR-3 < XLIST
			.INCLUDE SYS:MACEND.MA
			XLIST
			>
.ENDM ENDPR
										 			/PAGE 45

/============ C L O P G ================
/16.03.82 PMO



/DAS MACRO CLOPG MUSS AM ENDE EINER PAGE AUFGERUFEN WERDEN, WENN DAS
/PROGRAMM AUF DER NAECHSTEN PAGE FORTGEFUEHRT WERDEN SOLL.
/DAS MACRO LEGT DIE DEFINIERTEN MERKER AB UND MACHT AUTOMATISCH EINEN
/PAGEWECHSEL (OPTIONAL ABSCHALTBAR).
/DIE VARIABLEN HILF0$ UND HILF1$ DER MACROS TAELL,TAELS,BERAUS,ADD
/UND DCAADD WERDEN GELOESCHT.


/AUFRUF:		CLOPG NOPAGE


.MACRO CLOPG A
	.IF GT MACMER <.REPT MACMER
			MACG\MACMER
			.IF EQ DRLNR-3<EXPUNGE MACG\MACMER>
			MACMER=MACMER-1
			.ENDR
		      >
	.IF DIF A,NOPAGE<PAGE>

	EXPUNGE $HILF0,$HILF1

.ENDM CLOPG
										 			/PAGE 46

/============ J M F ====================
/30.03.82 PMO



/DAS MACRO JMF DIENT ZUM FELDFREIEN SPRUNG



/AUFRUF:   JMF ADRESSE



.MACRO	JMF A
	CDF CIF A
	JMP A
.ENDM	JMF