Ein Compiler für Simula/370 ist Bestandteil der Distribution MVS 3.8j Turnkey System, die mit dem Emulator hercules unter verschiedenen Betriebssystemen ausführbar ist.
Für die Verwendung des MVS 3.8j Turnkey Systems unter Linux werden die folgenden Programme benötigt:
....
Dieses Beispiel zeigt einen einfachen Stapelverarbeitungsauftrag, der ein Programm compiliert, bindet und ausführt:
//TESTSIM JOB 'S322-0C4','BG', // CLASS=B,MSGCLASS=A,MSGLEVEL=(1,1), // REGION=1000K,TIME=(1,0),PRTY=8 //CLG EXEC SIMCLG, // PARM.SIM='', // PARM.LKED='MAP,LIST,LET', // PARM.GO='LINECNT=64' //SIM.SYSIN DD * simulation begin real durationOfExperiment; integer seedUniform; process class Generator; begin integer cnt; cnt := 0; while true do begin Activate New Customer(cnt + 1, Time); Hold(Uniform(2, 15, seedUniform)); cnt := cnt + 1; end; end generator; process class Customer(Id, ArrivalTime); integer Id; real ArrivalTime; begin Outtext("Eintreffen Kunde "); OutInt(Id, 6); Outtext(" zur Zeit "); OutFix(ArrivalTime, 3, 10); OutImage; end Customer; durationOfExperiment := 600.0; seedUniform := 7; Activate New Generator; Hold(durationOfExperiment); OutText("-----------------------------"); OutImage; end /* //GO.SYSOUT DD SYSOUT=*,OUTLIM=5000 //GO.SYSIN DD * 4 1 /* //
In SYS2.PROCLIB werden einige Kommandoprozeduren bereitgehalten, die die Vorbereitung einfacher Jobs mit Simula vereinfachen. Es sind dies:
SYS2.SIMULA.LINKLIB enthält die Funktionen der Simula Laufzeitumgebung sowie den Compiler SIMULA.
Die Verwendung derartiger Prozeduren für die Ausführung einfacher Verarbeitungsaufträge ist allgemein üblich, um dem gelegentlichen Anwender die Einarbeitung in die Feinheiten der MVS Job Control Language zu ersparen.
Im folgenden wird der Code der katalogisierten Prozeduren angegeben ,wie er im Handbuch für Simula/370 angegeben ist.
Prozedur SIMC
//SIMC PROC //SIM EXEC PGM=SIMULA,REGION=86K //SYSPRINT DD SYSOUT=A //SYSUT1 DD UNIT=SYSDA,SPACE=(2@@@,(2@,2@)) //SYSUT2 DD UNIT=(SYSDA,SEP=SYSUT1),SPACE=(2@@@,(2@,2@)) //SYSUT3 DD UNIT=(SYSDA,SEP=(SYSUT1,SYSUT2)),SPACE=(2@@@,(2@,1@)) //SYSUT4 DD UNIT=(SYSDA,SEP=(SYSUT1,SYSUT2)),SPACE=(1@32,256), // DCB=DSORG=DA //SYSGO DD DSN=&&LOADSET,DISP=(MOD,PASS),UNIT=(SYSDA,SEP=SYSUT1), // SPACE=(16@@,(3@,3@)),DCB=BLKSIZE=16@@ // PEND
Prozedur SIMCL
//SIMC PROC PROG=GO,LIB='&GOSET'EXLIB=SIMLIB,LDISP=MOD //SIM EXEC PGM=SIMULA,REGION=86K //SYSPRINT DD SYSOUT=A //SYSUT1 DD UNIT=SYSDA,SPACE=(2@@@,(2@,2@)) //SYSUT2 DD UNIT=(SYSDA,SEP=SYSUT1),SPACE=(2@@@,(2@,2@)) //SYSUT3 DD UNIT=(SYSDA,SEP=(SYSUT1,SYSUT2)),SPACE=(2@@@,(2@,1@)) //SYSUT4 DD UNIT=(SYSDA,SEP=(SYSUT1,SYSUT2)),SPACE=(1@32,256), // DCB=DSORG=DA //SYSGO DD DSN=&&LOADSET,DISP=(MOD,PASS),UNIT=(SYSDA,SEP=SYSUT1), // SPACE=(16@@,(3@,3@)),DCB=BLKSIZE=16@@ //LKED EXEC PGM=IEWL,PARM='MAP,LIST,LET',COND=(4,LT,SIM), // REGION=1@4K //SYSPRINT DD SYSOUT=A //SYSLIB DD DSN=&EXLIB,DISP=SHR //SYSLMOD DD DSN=&LIB,(&PROG),DISP=(&LDISP,PASS),UNIT=SYSDA, // SPACE=(1@24,(4@@,5@,1)) //SYSLIN DD DSN=&&LOADSET,DIsP=(OLD;PASS) // DD DDNAME=SYSIN // PEND
Prozedur SIMCLG
//SIMCLG PROC EXLIB=SIMLIB //SIM EXEC PRG=SIMULA,REGION=86K //SYSPRINT DD SYSOUT=A //SYSUT1 DD UNIT=SYSDA,SPACE=(2@@@,(2@,2@)) //SYSUT2 DD UNIT=(SYSDA,SEP=SYSUT1),SPACE=(2@@@,(2@,2@)) //SYSUT3 DD UNIT=(SYSDA,SEP=(SYSUT1,SYSUT2)),SPACE=(2@@@,(2@,1@)) //SYSUT4 DD UNIT=(SYSDA,SEP=(SYSUT1,SYSUT2)),SPACE=(1@32,256), // DCB=DSORG=DA //SYSGO DD DSN=&&LOADSET,DISP=(MOD,PASS),UNIT=(SYSDA,SEP=SYSUT1), // SPACE=(16@@,(3@,3@)),DCB=BLKSIZE=16@@ //LKED EXEC PGM=IEWL,PARM='MAP,LIST,LET',COND=(4,LT,SIM), // REGION=1@4K //SYSPRINT DD SYSOUT=A //SYSLIB DD DSN=&EXLIB,DISP=SHR // DD DSN=SIMLIB,DISP=SHR //SYSUT1 DD UNIT=SYSDA,SPACE=(2@@@,(2@,2@)) //SYSLMOD DD DSN=&LIB,(&PROG),DISP=(&LDISP,PASS),UNIT=SYSDA, // SPACE=(1@24,(4@@,5@,1)) //SYSLIN DD DSN=&&LOADSET,DIsP=(OLD;PASS) // DD DDNAME=SYSIN //GO EXEC PGM=*.LKED.SYSLMOD,COND=((4.LT,SIM)),(4,LT,LKED)) //SYSOUT DD SYSOUT=A // PEND
Prozedur SIMG
//SIMG PROC PROG=GO,LIB='&&GOSET' //GO EXEC PRG=&PROG //STEPLIB DD DSN=&LIB,DISP=(OLD,PASS) //SYSOUT DD SYSOUT=A // PEND
Prozedur SIMCG
//SIMCLG PROC EXLIB=SIMLIB;GOPARM= //SIM EXEC PRG=SIMULA,REGION=86K //SYSPRINT DD SYSOUT=A //SYSUT1 DD UNIT=SYSDA,SPACE=(2@@@,(2@,2@)) //SYSUT2 DD UNIT=(SYSDA,SEP=SYSUT1),SPACE=(2@@@,(2@,2@)) //SYSUT3 DD UNIT=(SYSDA,SEP=(SYSUT1,SYSUT2)),SPACE=(2@@@,(2@,1@)) //SYSUT4 DD UNIT=(SYSDA,SEP=(SYSUT1,SYSUT2)),SPACE=(1@32,256), // DCB=DSORG=DA //SYSGO DD DSN=&&LOADSET,DISP=(MOD,PASS),UNIT=(SYSDA,SEP=SYSUT1), // SPACE=(16@@,(3@,3@)),DCB=BLKSIZE=16@@ //GO EXEC PGM=LOADER,PARM='MAP,PRINT,LET,EP=ZYQENT/&GOPARM', // COND=(4,LT,SIM) //SYSLIN DD DSN=&&LOADSET,DISP=(OLD,PASS) //SYSLIB DD DSN=&EXLIB,DISP=SHR // DD DSN=SIMLIB,DISP=SHR //SYSLOUT DD SYSOUT=A //SYSOUT DD SYSOUT=A // PEND
Prozedur SIM
//SIM PROC P=,CP=,LP=,RP=,GP= //GO EXEC PGM=SIMCNT,COND=EVEN, // PARM='&P/&CP/&LP/TIME=1000,&RP/&GP' //STEPLIB DD DSN=simlib,DISP=SHR //SYSPRINT DD SYSOUT=A //SYSUT1 DD UNIT=SYSDA,SPACE=(2048,(20,20)) //SYSUT2 DD UNIT=SYSDA,SPACE=(2048,(20,20)) //SYSUT3 DD UNIT=SYSDA,SPACE=(1632,(30,15)) //SYSUT4 DD UNIT=SYSDA,SPACE(1032,256),DCB=DSORG=DA //SYSGO DD UNIT=SYSDA,SPACE=(1600,(100,50)), // DCB=(LRECL=80,RECFM=FB,BLKSIZE=1600) // PEND
Overlays sind eine Technik, die die sparsame Verwendung des Hauptspeichers dadurch ermöglicht, das Teile eines Programms erst dann in den Hauptspeicher geladen werden, wenn sie benötigt werden.