!IMP driver %EXTERNALROUTINESPEC concf(%STRING (255) s) %ROUTINE cross reference printstring("Cross reference not available") newline %END {cross reference} %OWNINTEGER cross=0 %OWNSTRING (25) pass1= "ercm09:dimp11y.pass1y", pass2 = "ercm09:dimp11y.ass11y", pass3 = "ercm09:dimp11y.Gen11Y", prim file = "ercm09:dimp11y.PRIMS" %EXTERNALROUTINE nIMP11(%STRING (255) File) %EXTERNALINTEGERFUNCTIONSPEC exist %ALIAS "S#EXIST"(%STRING (255) file) %ROUTINE destroy(%STRING (255) s) %EXTERNALROUTINESPEC emas3(%STRINGNAME command,params, %INTEGERNAME flag) %INTEGER flag emas3("DESTROY",s,flag) %END; ! Of %ROUTINE destroy. %EXTERNALSTRINGFUNCTIONSPEC date %ALIAS "S#DATE" %EXTERNALSTRINGFUNCTIONSPEC time %ALIAS "S#TIME" %ROUTINE run(%STRING (255) s) %EXTERNALROUTINESPEC emas3(%STRINGNAME command,params, %INTEGERNAME flag) %INTEGER flag emas3("RUN",s,flag) %END; ! Of %ROUTINE run. %ROUTINE define(%STRING (255) s) %EXTERNALROUTINESPEC emas3(%STRINGNAME command,params, %INTEGERNAME flag) %INTEGER flag emas3("DEFINE",s,flag) %END; ! Of %ROUTINE define. %EXTERNALINTEGER IMPFLAG= 0 %INTEGER Statements %STRING (63) source,object,listing %ROUTINE Delete(%STRING (63) File) Destroy(File) %IF Exist(File)#0 %END %ROUTINE fspec(%STRING (255) s, %STRING (33) %NAME sfile,ofile,lfile) %STRING (7) fu %STRING (15) pd %STRING (255) f1,f2,f3 %STRING (15) ext %STRING (15) fn %CONSTSTRING (4) dfext="#imp" s = s."," s -> f1.(",").f2 %UNLESS s->f1.("/").f2 %IF f1->fu.(":").f1 %THEN fu = fu.":" %ELSE fu = "" %IF f1->pd.("_").f1 %THEN pd = pd."_" %ELSE pd = "" %IF f1->f1.("#").ext %THEN ext = "#".ext %ELSE ext = "" %IF exist(fu.pd.f1.ext)=0 %START %IF ext="" %AND exist(fu.pd.f1.dfext)=0 %START printstring("Source file does not exist or no access") newline %STOP %FINISHELSE ext = dfext %FINISH %IF f2#"" %START %IF f2->f2.(",").f3 %START; %FINISH %IF f2="" %THEN f2 = ".NULL" %IF f3->f3.(",") %START; %FINISH %IF f3="" %THEN f3 = ".NULL" %FINISHELSESTART f2 = f1."#REL" f3 = f1."#LST" %FINISH sfile = fu.pd.f1.ext ofile = f2 lfile = f3 %END fspec(file,source,object,listing) Define("1,".source); Define("2,".Prim File) Define("3,T#1"); Define("4,".listing) select output(4) printstring("Source file: "); printstring(source) printstring(" compiled on ") printstring(date); printstring(" at "); printstring(time) newlines(2) run(pass1) select input(0); select output(0) printstring("Pass 1 completed"); newline close stream(1); close stream(2); close stream(3) Statements = IMPFLAG ->BANG %IF Statements<=0 %IF cross=1 %START selectinput(3); selectoutput(4) newpage newlines(2) cross reference selectinput(0); selectoutput(0) closestream(3) %FINISH closestream(4) Define("1,T#1") Define("2,T#2"); Define("3,T#3") IMPFLAG = 0 run(pass2) Select input(0); select output(0) printstring("Pass 2 completed"); newline Close stream(1); close stream(2); close stream(3) %IF IMPFLAG#0 %START Fail: Printstring("Compilation failed"); Newline ->Done %FINISH Define("1,T#2"); Define("2,T#3"); Define("3,".object) IMPFLAG = 0 run(pass3) select input(0); select output(0) printstring("Pass 3 completed"); newline Close stream(1); Close Stream(2); Close Stream(3) ->Fail %IF IMPFLAG#0 Bang: %IF Statements<=0 %START Printstring("Program contains") write(~Statements,1) Printstring(" fault"); printsymbol('s') %IF Statements#-2 %FINISHELSESTART concf(object.",t#1/".object) Write(Statements,4) printstring(" statements compiled") %FINISH newline Done: { Delete("T#1"); Delete("T#2"); Delete("T#3")} %END %EXTERNALROUTINE DIMP11 %alias "c#dimp11"(%STRING (63) File) prim file = "ercm09:dimp11y.DPRIMS" nIMP11(File) %END %EXTERNALROUTINE XIMP11(%STRING (63) File) cross = 1 nIMP11(File) %END %EXTERNALROUTINE XDIMP11(%STRING (63) file) Prim file = "ercm09:dimp11y.DPRIMS" cross = 1 nIMP11(file) %END %EXTERNALROUTINE TIMP11(%STRING (63) file) prim file = "ercm09:dimp11y.DPRIMS" pass3 = "ercm09:dimp11y.gen11newy" nimp11(file) %END %ENDOFFILE