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