The IBM/360 Macro Assembly language was quite powerful, allowing non-trivial compile-time string manipulation.
Did macro packages exist which would facilitate programming at a (slightly) higher level, like writing expressions in an infix form, allowing a form of structured programming, standardizing subroutine calling conventions, accessing bit-fields conveniently, etc?
The reason I'm asking it that one of the BESM-6 assembly languages was a syntax-level port of the IBM/360 assembler, including the macro language, e.g.
macro
mnop &a,&b,&c,&d,&e,&f,&g,&h
aif (&a eq '').x
gbla &cnt global arith. variable
mnote * comment &cnt
&cnt seta &cnt+1
nop &a
mnop &b,&c,&d,&e,&f,&g,&h
.x anop
mend
MNOP FIRST,SECOND,THIRD,FOURTH
expands to
0001 0001 MACRO
0002 0002 MNOP &A,&B,&C,&D,&E,&F,&G,&H
0003 0003 AIF (&A EQ ’’).X
0004 0004 GBLA &CNT GLOBAL ARITH. VARIABLE
0005 0005 MNOTE * COMMENT &CNT
0006 0006 &CNT SETA &CNT+1
0007 0007 NOP &A
0008 0008 MNOP &B,&C,&D,&E,&F,&G,&H
0009 0009 .X ANOP
0010 0010 MEND
0011 0011 MNOP FIRST,SECOND,THIRD,FOURTH
0012 0005 * COMMENT 0
0013 +0007+ NOP FIRST
0014 0005 * COMMENT 1
0015 +0007+ NOP SECOND
0016 0005 * COMMENT 2
0017 +0007+ NOP THIRD
0018 0005 * COMMENT 3
0019 +0007+ NOP FOURTH
But the precompiled macro package for "higher-level" programming (likely also ported from IBM/360 with the appropriate architecture-dependent modifications) is missing.
Here's a few examples of using the macros from the package:
RЕG (М1 = 1,М2 = 2,М3 = 3,М4 = 4,М5 = 5)
КТ1 ВINDА (А(PAGE1)+KMD+М14)
FКТ3 SТRIТ (NCMD,0,0,8),(NARCH,0,40,8),(SND,0,16,8)
ЕХРR (FNM = $) FILE NAME
ЕХРR (SND = (OWNER,ADDR)) SENDER
ЕХРR (NUMREQ = (OWNER,REQ)) REQUEST NUMBER
IFА (QUEUE),Z=DISCRD NO REQUEST
Searching the web for the most distinctive macro names BINDA and STRIT doesn't help.
If a macro package with those or similar macros existed for the IBM/360 Macro Assembler, getting access to its source code would be of great help.
BINDA,STRITandEXPR- then with a high probability it would be the prototype of the one I need to compile a program written in it. – Leo B. Nov 20 '20 at 22:53N'syntax for the number of operands. If there was no standard macro package, then I'm out of luck unless someone recognizes familiar macro names and has access to the source code for the package. – Leo B. Nov 20 '20 at 23:20(A = 1,(B = 2,(C = 3)),D = 4)I get(A,=,1,(B,=,2,(C,=,3)),D,=,4)which means that spaces in lists were treated as element separators. Then it makes sense to write tokens separated by spaces for easier parsing. – Leo B. Nov 21 '20 at 00:01ЕХРR (FNM = $) FILE NAMEwould takeEXPRas macro name,(FNMas operand and the rest as comment. To make it a calid source line it must have been written asЕХРR (FNM=$),FILE,NAME. So I would assume that these macros are not taken from any /360 package, at least not literal. But the whole syntax is odd. So I wouldn't wonder if it's a genuine Sovjet development since it relies on the workings of this specific assembler. Not to mention that communicationon a /360 woudl be most likely CICS and CICS macro level looks quite different. – Raffzahn Nov 21 '20 at 00:39FILE NAMEwas indeed a comment; the rest is a pity (this is a more specific indication that spaces were not allowed even in sublists (although, demonstrably, it would not be hard to implement). Then my only remaining hope is that some "higher level programming" macro package with similar macro names existed to try figuring out the meaning of the macros and replacing them manually. – Leo B. Nov 21 '20 at 04:56'and only then are spaces allowed. Sublists do not differ. /360 assembler is very straight forward and handling of spaces is fundamental for compatibility, so I simply picked the first reference. Also, as mentioned, the names are very un-IBM, at least for additional packages. Usually all macros belonging to a package always start with the same prefix (Like DFH for CICS). OS is an exception. so it's rather third party - if at all, sure it's assembler, not just some other language? – Raffzahn Nov 21 '20 at 10:57