//$ JOB (JOB),
//             'INSTALL $',
//             CLASS=A,
//             MSGCLASS=A,
//             MSGLEVEL=(1,1),
//             USER=IBMUSER,
//             PASSWORD=SYS1
//BUILD  EXEC ASMFCL,PARM.ASM='OBJECT,NODECK,XREF',
//             MAC1='SYS1.MACLIB',MAC2='SYS1.AMODGEN'
//*                                          
//ASM.SYSIN DD DATA,DLM=@@ 
*)F       THE $ COMMAND CAN BE USED IN PLACE OF THE CALL COMMAND        00001
*         FOR PROGRAMS THAT ARE IN THE 'SYS1.LINKLIB' DATA SETS;        00002
*         THIS INCLUDES ALL COMPILERS AND UTILITIES AS WELL AS          00003
*         SPNB PROGRAMS SUCH AS MRCLEAN AND LISTPDS#.                   00004
*                                                                       00005
*         ADVANTAGES OF THE $ COMMAND OVER CALL:                        00006
*         1) THE $ COMMAND REQUIRES NO DYNAMIC DD CARD NOR              00007
*            ALLOCATION AND IS, THEREFORE, CONSIDERABLY FASTER;         00008
*         2) THE $ COMMAND SIMPLIFIES SYNTAX AND REQUIRES LESS TYPING;  00009
*         3) THE $ COMMAND ALLOWS USE OF PROGRAMS IN ANY OF THE LINKLIB 00010
*            DATA SETS, WITHOUT KNOWING WHICH OF THE DATA SETS THE      00011
*            PROGRAM IS IN.                                             00012
*         DISADVANTAGES OF THE $ COMMAND:                               00013
*         THE ONLY DISADVANTAGE OF THE $ COMMAND IS THAT THE PROGRAM    00014
*         BEING CALLED MUST BE IN A LINKLIST DATA SET OR IN HIS STEPLIB 00015
*         TO CALL A USER'S PROGRAM FROM HIS LIBRARY, THE CALL COMMAND   00016
*         MUST STILL BE USED.                                           00017
*)X       THE SYNTAX OF THE $ COMMAND IS AS FOLLOWS:                    00018
*         $ PROGRAM 'PARM'                                              00019
*         WHERE PROGRAM IS THE NAME OF THE PROGRAM TO BE EXECUTED AND   00020
*         'PARM' IS AN OPTIONAL PARM FIELD OF UP TO 100 CHARACTERS      00021
*         WHICH IS TO BE PASSED TO THE PROGRAM.                         00022
*)O       THE OPERANDS OF THE $ COMMAND ARE:                            00023
*         PROGRAM - THE 1 TO 8 CHARACTER NAME OF THE PROGRAM TO BE      00024
*                   EXECUTED.                                           00025
*         'PARM'  - THE OPTIONAL 0 TO 100 CHARACTER STRING, ENCLOSED IN 00026
*                   QUOTES, REPRESENTING THE PARAMETER TO BE PASSED TO  00027
*                   THE PROGRAM.                                        00028
*                                                                       00029
*         EXAMPLE - INVOKING MRCLEAN FOR VOLS PUBDA1 AND TSODA1         00030
*         $ MRCLEAN 'PUBDA1,TSODA1'                                     00031
*                                                                       00032
*         EXAMPLE - INVOKING ASSEMBLER F WITH PARMS OF TEST AND RENT    00033
*         $ IEUASM 'TEST,RENT'                                          00034
         MACRO                                                          00035
         TSWORK                                                         00036
DOUBLE   DC    D'0'                     FOR CONVERSIONS                 00037
ATTLIST  ATTACH DE=0,SF=L               PHONEY ATTACH LIST              00038
ATTLISTL EQU   *-ATTLIST                LENGTH                          00039
ATTTCB   DC    A(0)                     TCB ADDRESS                     00040
ATTECB   DC    F'0'                     ECB ADDRESS                     00041
STAECMP  DC    F'0'                     CMP FOR STAI                    00042
BLDL     DC    2H'0',CL58' '            BLDL LIST                       00043
PARM     DC    H'0',CL100' '            PARM FIELD                      00044
PARMPTR  DC    A(0)                     POINTER TO PARM                 00045
         DC    3A(0)                    FAKE REST OF CPPL               00046
         DS    0D           SPACE TO GROW......                         00047
         MEND                                                           00048
         PRINT OFF                 MACRO DEFINITIONS FOLLOW             00049
         MACRO                                                          00050
         USNGX  &ADDR,&REG                                              00051
         GBLC  &REGADDR(16),&REGREG(16)                                 00052
         LCLA  &LOOP                                                    00053
&LOOP    SETA  1                                                        00054
         USING &ADDR,&REG                                               00055
.FIND    AIF   ('&REGADDR(&LOOP)' EQ '').GOT                            00056
&LOOP    SETA  &LOOP+1                                                  00057
         AIF   (&LOOP LE 16).FIND                                       00058
         MNOTE *,'REGISTER TABLE OVERFLOW'                              00059
         MEXIT                                                          00060
.GOT     ANOP                                                           00061
&REGADDR(&LOOP) SETC '&ADDR'                                            00062
&REGREG(&LOOP) SETC '&REG'                                              00063
         MEND                                                           00064
         MACRO                                                          00065
         DROPX &REG                                                     00066
         GBLC  &REGADDR(16),&REGREG(16)                                 00067
         LCLA  &LOOP                                                    00068
&LOOP    SETA  1                                                        00069
         AIF   (T'&REG EQ 'O').ALLDROP                                  00070
         DROP  &REG                                                     00071
.FIND    AIF   ('&REGREG(&LOOP)' EQ '&REG').GOTIT                       00072
&LOOP    SETA  &LOOP+1                                                  00073
         AIF   (&LOOP LE 16).FIND                                       00074
         MNOTE 8,'REGISTER &REG WAS NOT AN OPERAND ON A USNGX '         00075
         MEXIT                                                          00076
.GOTIT   ANOP                                                           00077
&REGADDR(&LOOP) SETC ''                                                 00078
&REGREG(&LOOP) SETC ''                                                  00079
         MEXIT                                                          00080
.ALLDROP AIF   ('&REGREG(&LOOP)'  EQ '').SKIP                           00081
         DROP  &REGREG(&LOOP)                                           00082
&REGADDR(&LOOP) SETC ''                                                 00083
&REGREG(&LOOP) SETC ''                                                  00084
.SKIP    ANOP                                                           00085
&LOOP    SETA  &LOOP+1                                                  00086
         AIF   (&LOOP                   LE 16).ALLDROP                  00087
         MEND                                                           00088
         MACRO                                                          00089
         INUSE                                                          00090
         GBLC  &REGADDR(16),&REGREG(16)                                 00091
         LCLA  &LOOP                                                    00092
&LOOP    SETA  1                                                        00093
         SPACE                                                          00094
         MNOTE *,'THE FOLLOWING REGISTERS ARE IN USE:'                  00095
.LOOK    AIF   ('&REGADDR(&LOOP)' EQ '').SKIP                           00096
         MNOTE *,'          &REGADDR(&LOOP),&REGREG(&LOOP)'             00097
.SKIP    ANOP                                                           00098
&LOOP    SETA  &LOOP+1                                                  00099
         AIF   (&LOOP LE 16).LOOK                                       00100
         MNOTE *,'**********'                                           00101
         SPACE                                                          00102
         MEND                                                           00103
         PRINT ON         END OF INLINE MACROS                          00104
$CAL     TITLE '$ - TSO CALL FUNCTION FOR LINKLIB MODULES'              00105
*                                                                       00106
*        LAST UPDATED 09 MAY 73 - BMD (*BMD*)                           00107
*                     FIX PARM OF '' AND SHARE                          00108
*                     SUBPOOL 78 FOR IKJPUTGT                           00109
*                                                                       00110
*        MOD A - K TRUE - 29 MAY 80 - REMOVED/CONVERTED TSO MACROS      00111
*                TO INLINE EXPANTIONS                                   00112
*                                                                       00113
         SPACE 2                                                        00114
*$       TSENTRY  PL=(PARSE),MACRO=YES             FCI                  00115
TSDSECT  DSECT                                                          00116
TSAVE    DS    18F                      SAVE AREA                       00117
    SPACE                                                               00118
*********************************************************************** 00119
*    THE COMMAND PROCESSOR PARAMETER LIST (CPPL) IS A LIST OF         * 00120
*    ADDRESSES PASSED FROM THE TMP TO THE CP VIA REGISTER 1           * 00121
*********************************************************************** 00122
    SPACE                                                               00123
CPPL     DS    0A                                                       00124
CPPLCBUF DS    A        PTR TO COMMAND BUFFER                           00125
CPPLUPT  DS    A        PTR TO UPT                                      00126
CPPLPSCB DS    A        PTR TO PSCB                                     00127
CPPLECT  DS    A        PTR TO ECT                                      00128
CPPLL    EQU   *-CPPL                                                   00129
TSECB    DS    F                        ECB FOR THE TSO SERVICES        00130
    SPACE                                                               00131
*********************************************************************** 00132
*    THE PARSE PARAMETER LIST (PPL) IS A LIST OF ADDRESSES PASSED     * 00133
*    FROM THE INVOKER TO PARSE VIA REGISTER 1                         * 00134
*********************************************************************** 00135
    SPACE                                                               00136
PPL      DS    0A                                                       00137
PPLUPT   DS    A        PTR TO UPT                                      00138
PPLECT   DS    A        PTR TO ECT                                      00139
PPLECB   DS    A        PTR TO CP'S ECB                                 00140
PPLPCL   DS    A        PTR TO PCL                                      00141
PPLANS   DS    A        PTR TO ANS PLACE                                00142
PPLCBUF  DS    A        PTR TO CMD BUFFER                               00143
PPLUWA   DS    A        PTR TO USER WORK AREA (FOR VALIDITY CK RTNS)    00144
PPLL     EQU   *-PPL                                                    00145
TSPARANS DS    F                        PARSE RETURNS PTR TO PDL HERE   00146
*********************************************************************** 00147
*                                                                     * 00148
*        DYNAMIC STORAGE DEFINED BY USER TSWORK MACRO                 * 00149
*                                                                     * 00150
*********************************************************************** 00151
    SPACE                                                               00152
         DS    0D                       BEGIN ON DOUBLE WORD BOUNDARY   00153
         TSWORK                                                         00154
TSDSECTL DS    0D                                                       00155
         EJECT                                                          00156
         SPACE                                                          00157
*********************************************************************** 00158
*                                                                     * 00159
*                   DEFINE SYMBOLIC REGISTERS                         * 00160
*                                                                     * 00161
*********************************************************************** 00162
         SPACE                                                          00163
R0       EQU   0                        THE SYMBOLIC REGISTERS          00164
R1       EQU   1                                                        00165
R2       EQU   2                                                        00166
R3       EQU   3                                                        00167
R4       EQU   4                                                        00168
R5       EQU   5                                                        00169
R6       EQU   6                                                        00170
R7       EQU   7                                                        00171
R8       EQU   8                                                        00172
R9       EQU   9                                                        00173
R10      EQU   10                                                       00174
R11      EQU   11                                                       00175
R12      EQU   12                                                       00176
R13      EQU   13                                                       00177
R14      EQU   14                                                       00178
R15      EQU   15                                                       00179
         EJECT                                                          00180
$        CSECT                                                          00181
         SAVE  (14,12),,$_&SYSDATE               BRANCH AROUND ID       00182
         SPACE                                                          00183
         USNGX $,12                                                     00184
         LR    12,15                    ESTABLISH ADDRESSABILITY        00185
         LR    5,1                      SAVE PTR TO CPPL                00186
         GETMAIN R,LV=TSDSECTL-TSDSECT,SP=1                             00187
         ST    13,4(1)                  DO SAVE AREA CHAINING           00188
         ST    1,8(13)                                                  00189
         LR    13,1                     ESTABLISH ADDRESSABILITY        00190
         USNGX TSDSECT,13                                               00191
         MVC   CPPL(CPPLL),0(5)         COPY CPPL TO TS AREA            00192
         L     1,CPPLUPT                GET PTR TO UPT                  00193
         L     2,CPPLECT                GET PTR TO ECT                  00194
         LA    3,TSECB                  GET PTR TO ECB                  00195
         SR    0,0                      CLEAR ECB                       00196
         ST    0,TSECB                                                  00197
         STM   1,3,PPL                  INITIALIZE PPL. UPT,ECT,ECB     00198
         LA    4,TSPARANS               ADRS OF PARSE ANSWER PLACE      00199
         ST    4,PPLANS                 POINTER TO ADRS OF PARSE ANSWER 00200
         ST    13,PPLUWA                PARSE USER WORK AREA POINTER    00201
         XC    TSPARANS(4),TSPARANS     TO AVOID DUPLICATE IKJRLSA      00202
         INUSE                                                          00203
    SPACE                                                               00204
$        CSECT                                                          00205
         TITLE '$ - INITIALIZATION CODE'                                00206
         MVC   BLDL(4),=AL2(1,58)       NUMBER/LEN                      00207
         XC    TSPARANS(4),TSPARANS     CLEAR ANSWER FIELD              00208
         XC    TSECB(4),TSECB           AND ECB                         00209
         MVC   STAECMP(4),TSECB         CLEAR IT THIS WAY               00210
*TRTPARS TSPARSE  CBUF=(CPPLCBUF,I),PCL=(=V(PCL),I)  INVOKE PARSE       00211
STRTPARS L     0,=V(PCL)                                                00212
         ST    0,PPLPCL                                                 00213
         L     0,CPPLCBUF                                               00214
         ST    0,PPLCBUF                                                00215
         LA    1,PPL                                                    00216
         LINK  EP=IKJPARS                                               00217
FINPARS  LTR   R15,R15                  TEST RETURN CODE                00218
         BZ    ANALYZE                  OK, CONTINUE                    00219
BADPARSE LA    R0,L'MSG01               LOAD MESSAGE SIZE               00220
         LA    R1,MSG01                 AND MESSAGE ADDR                00221
         B     PRELEAVX                 DONE, FORGET IT                 00222
         TITLE '$ - ANALYZE INPUT'                                      00223
         USNGX PDL,R11                  TELL ASSEMBLER                  00224
ANALYZE  L     R11,TSPARANS             LOAD ANSWER AREA                00225
         L     R1,MODNAME               GET MODULE NAME ENTRY           00226
         TM    MODNAME+6,X'80'          IS IT THERE                     00227
         BNO   BADPARSE                 NO, STOP HERE                   00228
         MVC   BLDL+4(8),=8C' '         CLEAR MODULE NAME               00229
         LH    R15,MODNAME+4            GET LEN                         00230
         BCTR  R15,0                    -1 FOR EXECUTE                  00231
         EX    R15,MVCMOD               DO IT                           00232
         LH    R2,PDLPARM+4             GET LENGTH                      00233
         L     R3,PDLPARM               GET ADDRESS                     00234
         CH    R2,=H'100'               CHECK IT                        00235
         BNH   LENOK                    OK, SO FAR                      00236
         LA    R1,MSG02                 GET MESSAGE                     00237
         LA    R0,L'MSG02               AND LENGTH                      00238
         TPUT  (1),(0),R                DO IT                           00239
         LA    R2,100                   SET AT MAXIMUM                  00240
LENOK    LTR   R2,R2                    TEST FOR NON-ZERO LEN *BMD*     00241
         STH   R2,PARM                  SAVE IN LENGTH                  00242
         BCTR  R2,0                     SUBTRACT ONE                    00243
         BNP   *+12                     NOT THERE, NO MOVE *BMD*        00244
         EX    R2,MVCPARM               DO THAT                         00245
         B     *+10                     AROUND XC                       00246
         XC    PARM+2(40),PARM+2        CLEAR IT FOR ACCIDENTAL PARSE   00247
         LA    R1,PARM                  LOAD PARM FIELD                 00248
         ST    R1,PARMPTR               SAVE IT THERE                   00249
         MVI   PARMPTR,X'80'            FLAG AS LAST                    00250
         MVC   PARMPTR+4(12),CPPLUPT    JUST IN CASE CALL CP            00251
         SPACE 3                                                        00252
         XR    R1,R1                    CLEAR DCB ADDRESS               00253
         BLDL  (1),BLDL                 DO IT                           00254
         CH    R15,=H'8'                CHECK JUST IN CASE              00255
         BNH   *+8                      OK                              00256
         LA    R15,12                   LOAD ERROR CODE                 00257
         B     *+4(R15)                 DO BRANCH                       00258
         B     DOATTACH                 RETURN CODE=0                   00259
         B     NONESUCH                 NO SUCH MODULE                  00260
         B     IOERR                    I/O ERROR IN SEARCH             00261
         LA    R1,MSG03                 BAD RETURN CODE FROM BLDL       00262
         LA    R0,L'MSG03               AND LEN                         00263
         B     PRELEAVX                 DIE RIGHT NOW                   00264
         TITLE '$ - ERROR AND RETURN CODE'                              00265
NONESUCH MVC   PARM(L'NOMOD),NOMOD      MOVE IN MESSAGE                 00266
         MVC   PARM+MODOFF(8),BLDL+4    MOVE IN MODULE NAME             00267
         LA    R1,PARM                  LOAD PLACE                      00268
         LA    R0,L'NOMOD               LEN                             00269
         B     PRELEAVX                 DO IT                           00270
         SPACE 2                                                        00271
IOERR    LA    R1,IOERRMSG              LOAD MESSAGE                    00272
         LA    R0,L'IOERRMSG            LENGTH                          00273
         SPACE 2                                                        00274
PRELEAVX MVI   STAECMP+3,20             ERROR CODE                      00275
PRELEAVE TPUT  (1),(0),R                DO IT                           00276
RELEASEA IKJRLSA TSPARANS                                               00277
         L     R2,STAECMP               TEST CMP CODE                   00278
         LTR   R2,R2                    TEST IT                         00279
         BP    *+6                      AROUND CLEAR                    00280
         XR    R2,R2                    CLEAR IT                        00281
         SPACE                                                          00282
*        EXIT     RC=(R2),LV=TSDSECTL-TSDSECT  SPLIT                    00283
         LR    1,13                     SAVE FREEMAIN ADD               00284
         L     13,4(13)                 UNCHAIN                         00285
         ST    R2,16(13)                 SAVE RETURN CODE               00286
         FREEMAIN R,LV=TSDSECTL-TSDSECT,A=(1),SP=1                      00287
         LM    14,12,12(13)                                             00288
         BR    14                                                       00289
         TITLE '$ - SOME CONSTANTS'                                     00290
MSG01    DC    C'MISSING PROGRAM NAME OR PARSE ERROR, PLEASE RE-ENTER C+00291
               OMMAND'                                                  00292
MSG02    DC    C'PARM FIELD TOO LONG, TRUNCATED AT 100 CHARACTERS'      00293
MSG03    DC    C'** ERROR IN BLDL ** CONTACT SYSTEMS PERSONNEL'         00294
MSG10    DC    C'** ATTACH ERROR ** CONTACT SYSTEMS PERSONNEL'          00295
IOERRMSG DC    C'** I/O ERROR DURING BLDL ** CONTACT SYSTEMS PERSONNEL' 00296
NOMOD    DC    C'PROGRAM 12345678 NOT FOUND, PLEASE RE-ENTER COMMAND'   00297
ABCODE   DC    C'PROGRAM 12345678 ABENDED, SYS=000, USER=0000'          00298
NONZERO  DC    C'PROGRAM 12345678 ENDED, COND. CODE=00000000 '          00299
MODOFF   EQU   8                                                        00300
ABSYS    EQU   30                                                       00301
ABUSER   EQU   40                                                       00302
NONCODE  EQU   35                                                       00303
TRT      EQU   *-C'0'                                                   00304
         DC    C'0123456789ABCDEF'                                      00305
         TITLE '$ - PARSE PCL'                                          00306
         PRINT NOGEN                                                    00307
PCL      IKJPARM DSECT=PDL                                              00308
MODNAME  IKJIDENT 'PROGRAM',MAXLNTH=8,FIRST=ALPHANUM,                  +00309
               OTHER=ALPHANUM,PROMPT='PROGRAM NAME',                   +00310
               HELP='NAME OF PROGRAM TO BE CALLED'                      00311
         SPACE 2                                                        00312
PDLPARM  IKJPOSIT QSTRING,HELP='PARM FIELD FOR PROGRAM'                 00313
         IKJENDP                                                        00314
         PRINT GEN                                                      00315
         TITLE '$ - SET UP AND ATTACH PROGRAM'                          00316
DOATTACH TM    CPPLCBUF,X'80'           CALL ON ME?                     00317
         BO    NOECTCHG                 RIGHT, DON'T CHANGE ECT         00318
         L     R1,CPPLECT               LOAD ECT ADDR                   00319
         MVC   12(8,R1),BLDL+4          MOVE IN MODULE NAME             00320
NOECTCHG LA    R1,PARMPTR               LOAD PARM POINTER               00321
         SPACE 3                                                        00322
         XC    ATTLIST(ATTLISTL),ATTLIST  CLEAR ATTACH LIST             00323
         XC    ATTECB(4),ATTECB         CLEAR IT                        00324
ATTACH   ATTACH DE=BLDL+4,DCB=0,ECB=ATTECB,SZERO=NO,                   +00325
               STAI=(STAI,(R13)),PURGE=NONE,ASYNCH=YES,                +00326
               MF=(E,(1)),SF=(E,ATTLIST),SHSPV=78  *BMD*                00327
         LTR   R15,R15                  TEST RETURN CODE                00328
         BZ    ATTWAIT                  OK, SAVE TCB AND WAIT           00329
         LA    R1,MSG10                 MESSAGE ADDRESS                 00330
         LA    R0,L'MSG10               AND LEN                         00331
         B     PRELEAVX                 DONE FOR                        00332
         SPACE 3                                                        00333
ATTWAIT  ST    R1,ATTTCB                SAVE TCB ADDRESS                00334
         WAIT  1,ECB=ATTECB             WAIT FOR SUBTASK                00335
         OC    STAECMP(4),STAECMP       GET CMP FROM TASK               00336
         BZ    GETRC                    OK, GET RETURN CODE             00337
         MVI   STAECMP,X'00'            CLEAR HIGH BYTE                 00338
         L     R1,STAECMP               GET IT                          00339
         SLL   R1,4                     NOW HAVE 0SSSUUU0               00340
         ST    R1,ATTECB                SAVE IT                         00341
         MVC   PARM(L'ABCODE),ABCODE                                    00342
         MVC   PARM+MODOFF(8),BLDL+4    MOVE IN MOD NAME                00343
         UNPK  DOUBLE(4),ATTECB(3)      GET FOR HEX                     00344
         MVC   PARM+ABSYS(3),DOUBLE     DO THAT                         00345
         TR    PARM+ABSYS(3),TRT        GET IN PRINTABLE                00346
         MVC   ATTECB(2),STAECMP+2      GET LOW 2 BYTES                 00347
         NI    ATTECB,X'0F'             OFF LOW SYSTEM BYTE             00348
         LH    R15,ATTECB               LOAD CMP CODE                   00349
         CVD   R15,DOUBLE               CONVERT IT                      00350
         UNPK  PARM+ABUSER(4),DOUBLE+5(3)                               00351
         OI    PARM+ABUSER+3,C'0'       PRINTABLE                       00352
         B     DETACH                   DO DETACH                       00353
         SPACE 3                                                        00354
GETRC    L     R15,ATTECB               GET ECB                         00355
         LA    R15,0(,R15)              OFF POST FLAGS                  00356
         LTR   R15,R15                  TEST RETURN CODE                00357
         ST    R15,STAECMP              SAVE IT IN RIGHT FIELD          00358
         MVI   STAECMP,X'FF'            SET NO-FLAG                     00359
         BZ    DETACH                   NO FORMAT TO DO                 00360
         MVI   STAECMP,X'00'            OFF FLAG                        00361
         CVD   R15,DOUBLE               CONVERT IT                      00362
         MVC   PARM(L'NONZERO),NONZERO  MOVE IN CODE                    00363
         MVC   PARM+MODOFF(8),BLDL+4    MOVE IN NAME                    00364
         UNPK  PARM+NONCODE(8),DOUBLE+3(5)                              00365
         OI    PARM+NONCODE+7,C'0'      PRINTABLE                       00366
         EJECT                                                          00367
DETACH   DETACH ATTTCB,STAE=NO          NO CHANCE                       00368
         LA    R1,PARM                  LOAD ADDRESS OF ROUTINE         00369
         LA    R0,L'NONZERO             BOTH SAME LEN                   00370
         CLI   STAECMP,X'FF'            CMP ZERO?                       00371
         BE    RELEASEA                 YES, NO MESSAGE                 00372
         B     PRELEAVE                 DIE NOW                         00373
         TITLE '$ - STAI EXIT ROUTINE'                                  00374
         DROPX                                                          00375
         USNGX STAI,R15                 TELL ASSEMBLER                  00376
STAI     CH    R0,=H'12'                CODE FOR NO CORE?               00377
         BE    STAINCOR                 NO CORE, OK                     00378
         L     R2,0(,R1)                GET ADDR OF PARM                00379
         USNGX TSDSECT,R2               TELL ASSEMBLER                  00380
         OC    STAECMP(4),STAECMP       SET CONDITION CODE              00381
         BNZ   STAIDIE                  RECURSION-DIE                   00382
         MVC   STAECMP(4),4(R1)         COPY STAE ABCODE                00383
         B     STAIDO                   GO TO RETRY ROUTINE             00384
         SPACE 3                                                        00385
STAINCOR OC    STAECMP(4),STAECMP       SET CONDITION CODE              00386
         BNZ   STAIDIE                  STAI-RECURSION DIE              00387
         ST    R1,STAECMP               SAVE CMP AS PUT THERE           00388
STAIDO   LA    R0,STAITRY               LOAD STAE RETRY ROUTINE         00389
         LA    R15,4                    LOAD RETRY CODE                 00390
         SVC   3                        RETURN TO ASIR                  00391
         SPACE 1                                                        00392
STAIDIE  LR    R3,R1                    SAVE POINTER                    00393
         POST  ATTECB,0                 POST MY MOTHER                  00394
         XC    DOUBLE(4),DOUBLE         CLEAR IT                        00395
         WAIT  1,ECB=DOUBLE             STOP HERE                       00396
         DROPX                                                          00397
STAITRY  STAE  0,CT                     CLEAR ANY STAE CB'S             00398
         SVC   3                        RETURN UP ANOTHER LEVEL         00399
         EJECT                                                          00400
         USNGX TSDSECT,R13              RE-ESTABLIST FOR THESE ISNS     00401
MVCMOD   MVC   BLDL+4(0),0(R1)          <<EXECUTED>>                    00402
MVCPARM  MVC   PARM+2(0),0(R3)          <<EXECUTED>>                    00403
         SPACE 2                                                        00404
HERMAN   LTORG                                                          00405
         END                                                            00406
@@
//LKED.SYSLMOD DD DSN=SYS2.LINKLIB,DISP=SHR  <== TARGET
//LKED.SYSIN DD *
  SETCODE AC(1)
  NAME $(R)
//*
//HELPFILE  EXEC PGM=PDSLOAD
//STEPLIB  DD  DSN=SYSC.LINKLIB,DISP=SHR
//SYSPRINT DD  SYSOUT=*
//SYSUT2   DD  DISP=SHR,DSN=SYS2.HELP
//SYSUT1   DD DATA,DLM=@@
./ ADD NAME=$
)F       THE $ COMMAND CAN BE USED IN PLACE OF THE CALL COMMAND        
         FOR PROGRAMS THAT ARE IN THE 'SYS1.LINKLIB' DATA SETS;        
         THIS INCLUDES ALL COMPILERS AND UTILITIES AS WELL AS          
         SPNB PROGRAMS SUCH AS MRCLEAN AND LISTPDS#.                   
                                                                       
         ADVANTAGES OF THE $ COMMAND OVER CALL:                        
         1) THE $ COMMAND REQUIRES NO DYNAMIC DD CARD NOR              
            ALLOCATION AND IS, THEREFORE, CONSIDERABLY FASTER;         
         2) THE $ COMMAND SIMPLIFIES SYNTAX AND REQUIRES LESS TYPING;  
         3) THE $ COMMAND ALLOWS USE OF PROGRAMS IN ANY OF THE LINKLIB 
            DATA SETS, WITHOUT KNOWING WHICH OF THE DATA SETS THE      
            PROGRAM IS IN.                                             
         DISADVANTAGES OF THE $ COMMAND:                               
         THE ONLY DISADVANTAGE OF THE $ COMMAND IS THAT THE PROGRAM    
         BEING CALLED MUST BE IN A LINKLIST DATA SET OR IN HIS STEPLIB 
         TO CALL A USER'S PROGRAM FROM HIS LIBRARY, THE CALL COMMAND   
         MUST STILL BE USED.                                           
)X       THE SYNTAX OF THE $ COMMAND IS AS FOLLOWS:                    
         $ PROGRAM 'PARM'                                              
         WHERE PROGRAM IS THE NAME OF THE PROGRAM TO BE EXECUTED AND   
         'PARM' IS AN OPTIONAL PARM FIELD OF UP TO 100 CHARACTERS      
         WHICH IS TO BE PASSED TO THE PROGRAM.                         
)O       THE OPERANDS OF THE $ COMMAND ARE:                            
         PROGRAM - THE 1 TO 8 CHARACTER NAME OF THE PROGRAM TO BE      
                   EXECUTED.                                           
         'PARM'  - THE OPTIONAL 0 TO 100 CHARACTER STRING, ENCLOSED IN 
                   QUOTES, REPRESENTING THE PARAMETER TO BE PASSED TO  
                   THE PROGRAM.                                        
                                                                       
         EXAMPLE - INVOKING MRCLEAN FOR VOLS PUBDA1 AND TSODA1         
         $ MRCLEAN 'PUBDA1,TSODA1'                                     
                                                                       
         EXAMPLE - INVOKING ASSEMBLER F WITH PARMS OF TEST AND RENT    
         $ IEUASM 'TEST,RENT'                                          
@@