; NM.MID ; This file provides useful macros for hand-coded MIDAS programs designed ; to be loaded with C programs. CL=PUSHJ P, RTN=POPJ P, .VCALL=2_33 .ACALL=3_33 .XCALL=4_33 DEFINE SYSCAL NAME,ARGS,DUMMY,LABEL SETZ A, .CALL [SETZ .1STWD SIXBIT /NAME/ ARGS 403000,,A ] IFSN [LABEL][]GO LABEL IFSE [LABEL][]MOVN A,A TERMIN DEFINE INFORM A,B IF1,[PRINTX \ A = B \] TERMIN ; SUPPORT ROUTINES DEFINE %LEN [LIST] %COUNT==0 IRP ELEM,,LIST %COUNT==%COUNT+1 TERMIN TERMIN DEFINE DEFVAR NAME,#OFFSET DEFINE NAME &262143.(P)TERMIN TERMIN ; DEFINE C-CALLABLE PROCEDURE (C NAME) DEFINE CENTRY NAME,[ARGS],[VARS] PROLOG Z!NAME,NAME,ARGS,VARS TERMIN ; DEFINE C-CALLABLE PROCEDURE (MIDAS NAME) DEFINE MENTRY NAME,[ARGS],[VARS] PROLOG NAME,NAME,ARGS,VARS TERMIN ; DEFINE MIDAS ENTRY POINT (NOT PROCEDURE) DEFINE IENTRY NAME NAME": TERMIN ; PROLOG MACRO DEFINE PROLOG MNAME,PNAME,[ARGS],[VARS] %LEN ARGS %A==%COUNT %LEN VARS %V==%COUNT %OFF== -<%A+%V> IRP ARGNAM,,ARGS DEFVAR ARGNAM,%OFF %OFF==%OFF+1 TERMIN %OFF==%OFF+1 IRP VARNAM,,VARS DEFVAR VARNAM,%OFF %OFF==%OFF+1 TERMIN %A,,[ASCIZ/PNAME/] MNAME": IFN %V,[ADDI P,%V] TERMIN ; DEFINE SYNONYM FOR C-CALLABLE ENTRY POINT DEFINE XENTRY NEWNAME,OLDNAME Z!NEWNAME"=Z!OLDNAME" TERMIN ; DEFINE MIDAS-ACCESSIBLE DATA DEFINE MDATA NAME NAME":TERMIN ; FATAL ERROR DEFINE CROAK STRING/ PUSH P,[ HRROI 1,[ASCIZ \; STRING \] PSOUT HALTF ] TERMIN ; RETURN STATEMENT DEFINE RETURN IFE %A,[ IFN %V,[SUBI P,%V] POPJ P, ] IFN %A,[ SUBI P,%V+%A+1 JRST @<%A+1>(P) ] TERMIN ; CALL STATEMENT DEFINE CALL NAME,[ARGS] NN==0 IRP ARG,,ARGS PPUSH ARG NN==NN+1 TERMIN ICALL NN,NAME TERMIN ; MIDAS-CALL STATEMENT DEFINE MCALL NAME,[ARGS] NN==0 IRP ARG,,ARGS PPUSH ARG NN==NN+1 TERMIN CCALL NN,NAME" TERMIN ; VARIABLE-CALL STATEMENT DEFINE VCALL F,[ARGS] NN==0 IRP ARG,,ARGS PPUSH ARG NN==NN+1 TERMIN CCALL NN,F TERMIN ; INTERNAL CALL DEFINE ICALL N,NAME CCALL N,Z!NAME" TERMIN ; HACK FOR CONSTANTS EQUALS NM%EN END EXPUNGE END DEFINE END ENDLOC .CODE ; INSCODE .PDATA CONSTANTS NM%EN ENDLOC TERMIN .CODE