Skip to content

Commit

Permalink
Merge pull request #116 from mainframed/master
Browse files Browse the repository at this point in the history
fixing codepage extraction issue, fixed square brackets
  • Loading branch information
Peter-Jacob authored Apr 26, 2024
2 parents bfb7790 + 4f5daa2 commit 56b18a2
Show file tree
Hide file tree
Showing 100 changed files with 2,122 additions and 1,849 deletions.
11 changes: 11 additions & 0 deletions build/01_asemble.nam
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
RXIKJ441 call_rxikj441
RXABEND call_rxabend
RXINIT call_rxinit
RXTERM call_rxterm
RXVSAM call_rxvsam
RXTSO call_rxtso
RXSVC call_rxsvc
RXCPUTIM cputime
RXCPCMD systemCP
RXSETJMP _setjmp_estae
RXECANC _setjmp_ecanc
135 changes: 135 additions & 0 deletions build/assemble.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
import sys
import logging
from string import Formatter
from pathlib import Path
import socket

# This python script assembles the required objects for BREXX/370
logname = 'assemble.log'
logging.basicConfig(filename=logname,
filemode='w',
format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
datefmt='%H:%M:%S',
level=logging.DEBUG)

class assemble:

def __init__(self,system='MVSCE'):
self.system = system
logging.debug("Building")



def jobcard(self, jobname, title, jclass='A', msgclass='A',user='IBMUSER',password='SYS1'):
'''
This function generates the jobcard needed to submit the jobs
'''

if self.system != 'MVSCE':
user = 'HERC01'
password = 'CUL8TR'

with open('templates/jobcard.template', 'r') as template:
jobcard = template.read()

if jobcard[-1] != "\n":
jobcard += "\n"

return jobcard.format(
jobname=jobname.upper(),
title=title,
jclass=jclass,
msgclass=msgclass,
user=user,
password=password
)

def punch_out(self, jes_class='B'):
'''
This function returns the JCL to write &&OBJ to the punchcard writer
jes_class: The class that sends the output to the card writer, usually 'B'
'''
with open('templates/punchcard.template', 'r') as template:
punch_jcl = template.read()

return punch_jcl.format(jes_class=jes_class)

def brexx_maclib(self):
linklib = 'SYSC.LINKLIB'

if self.system != 'MVSCE':
linklib = 'SYS2.LINKLIB'


with open('templates/maclib.template', 'r') as template:
logging.debug("reading: templates/maclib.template")
maclib = template.read()

p = Path("../maclib").glob('**/*.hlasm')
files = [x for x in p if x.is_file()]
dd = ''
for macro in sorted(files):
dd += "./ ADD NAME=" +macro.stem + "\n"
with open(macro,'r') as mfile:
dd += mfile.read()
if dd[-1] != "\n":
dd += "\n"
return(maclib.format(steplib=linklib,maclibs=dd))

def RXMVSEXT_jcl(self):
'''
Generates the rxmvsext object file
'''

logging.debug("Building rxmvsext.obj")

with open('templates/rxmvsext.template', 'r') as template:
logging.debug("reading: templates/rxmvsext.template")
punch_jcl = template.read()

files = [i[1] for i in Formatter().parse(punch_jcl) if i[1] is not None]

fpath = "../asm/"
file_contents = {}
for fname in files:
hlasm_file = fpath + fname + ".hlasm"
logging.debug("reading:" + hlasm_file)
print("reading:",hlasm_file)
with open(hlasm_file, 'r') as infile:
hlasm = infile.read()

# if hlasm[-1] != "\n":
# hlasm += "\n"
file_contents[fname] = hlasm
rxmvsext_jcl = (self.jobcard("rxmvsex",'RXMVSEXT') + self.brexx_maclib() + punch_jcl.format(**file_contents) +
self.punch_out()
)
# +
#self.brexx_maclib() +
# punch_jcl.format(**file_contents) +
# self.punch_out()
#

print("*" * 100)
with open('test.jcl','w') as outf:
outf.write(rxmvsext_jcl)
#self.submit(rxmvsext_jcl)

def submit(self,jcl, host='127.0.0.1',port=3505):
'''submits a job (in ASCII) to hercules listener'''

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
# Connect to server and send data
sock.connect((host, port))
sock.send(jcl.encode())
finally:
sock.close()

go = assemble(system='MVSCE')
go.RXMVSEXT_jcl()



3 changes: 3 additions & 0 deletions build/templates/jobcard.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
//{jobname} JOB (BREXX),'{title}',CLASS={jclass},MSGCLASS={msgclass},
// REGION=8M,MSGLEVEL=(1,1),USER={user},PASSWORD={password}
//********************************************************************
12 changes: 12 additions & 0 deletions build/templates/maclib.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//MACLIB EXEC PGM=PDSLOAD
//*
//* Either SYSC.LINKLIB for MVS/CE or SYS2.LINKLIB for TK4-/TK5
//*
//STEPLIB DD DSN={steplib},DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUT2 DD DSN=&&MACLIB,DISP=(,PASS),
// UNIT=VIO,SPACE=(TRK,(44,14,17)),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=19040)
//SYSUT1 DD DATA,DLM=@@
{maclibs}
@@
8 changes: 8 additions & 0 deletions build/templates/punchcard.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
//********************************************************************
//* Now to output the temp dataset &&OBJ to Class B which is the
//* punch out (pch00d.txt)
//PUNCHOUT EXEC PGM=IEBGENER
//SYSIN DD DUMMY
//SYSUT1 DD DSN=&&OBJ,DISP=SHR
//SYSUT2 DD SYSOUT={jes_class}
//SYSPRINT DD SYSOUT=*
104 changes: 104 additions & 0 deletions build/templates/rxmvsext.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
//********************************************************************
//*
//* BUILDING BREXX INTERNAL ASSEMBLER MODULES
//*
//********************************************************************
//RXSVC EXEC ASMFC,PARM.ASM=(OBJ,NODECK)
//ASM.SYSLIB DD DSN=SYS2.MACLIB,DISP=SHR
// DD DSN=SYS1.AMODGEN,DISP=SHR
// DD DSN=&&MACLIB,DISP=(MOD,PASS)
//ASM.SYSIN DD DATA,DLM=@@
{rxsvc}
@@
//ASM.SYSGO DD DSN=&&OBJ,DISP=(,PASS),SPACE=(TRK,3),UNIT=VIO,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)
//********************************************************************
//RXABEND EXEC ASMFC,PARM.ASM=(OBJ,NODECK)
//ASM.SYSLIB DD DSN=SYS2.MACLIB,DISP=SHR
// DD DSN=SYS1.AMODGEN,DISP=SHR
// DD DSN=&&MACLIB,DISP=(MOD,PASS)
//ASM.SYSIN DD DATA,DLM=@@
{rxabend}
@@
//ASM.SYSGO DD DSN=&&OBJ,DISP=(MOD,PASS)
//********************************************************************
//RXIKJ441 EXEC ASMFC,PARM.ASM=(OBJ,NODECK)
//ASM.SYSLIB DD DSN=SYS2.MACLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
// DD DSN=SYS1.AMODGEN,DISP=SHR
// DD DSN=&&MACLIB,DISP=(MOD,PASS)
//ASM.SYSIN DD DATA,DLM=@@
{rxikj441}
@@
//ASM.SYSGO DD DSN=&&OBJ,DISP=(MOD,PASS)
//********************************************************************
//RXINIT EXEC ASMFC,PARM.ASM=(OBJ,NODECK)
//ASM.SYSLIB DD DSN=SYS2.MACLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
// DD DSN=SYS1.AMODGEN,DISP=SHR
// DD DSN=SYS1.APVTMACS,DISP=SHR
// DD DSN=&&MACLIB,DISP=(MOD,PASS)
//ASM.SYSIN DD DATA,DLM=@@
{rxinit}
@@
//ASM.SYSGO DD DSN=&&OBJ,DISP=(MOD,PASS)
//********************************************************************
//RXTERM EXEC ASMFC,PARM.ASM=(OBJ,NODECK)
//ASM.SYSLIB DD DSN=SYS2.MACLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
// DD DSN=SYS1.AMODGEN,DISP=SHR
// DD DSN=&&MACLIB,DISP=(MOD,PASS)
//ASM.SYSIN DD DATA,DLM=@@
{rxterm}
@@
//ASM.SYSGO DD DSN=&&OBJ,DISP=(MOD,PASS)
//********************************************************************
//RXTSO EXEC ASMFC,PARM.ASM=(OBJ,NODECK)
//ASM.SYSLIB DD DSN=SYS2.MACLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
// DD DSN=SYS1.AMODGEN,DISP=SHR
// DD DSN=&&MACLIB,DISP=(MOD,PASS)
//ASM.SYSIN DD DATA,DLM=@@
{rxtso}
@@
//ASM.SYSGO DD DSN=&&OBJ,DISP=(MOD,PASS)
//********************************************************************
//RXVSAM EXEC ASMFC,PARM.ASM=(OBJ,NODECK)
//ASM.SYSLIB DD DSN=SYS2.MACLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
// DD DSN=SYS1.AMODGEN,DISP=SHR
// DD DSN=&&MACLIB,DISP=(MOD,PASS)
//ASM.SYSIN DD DATA,DLM=@@
{rxvsam}
@@
//ASM.SYSGO DD DSN=&&OBJ,DISP=(MOD,PASS)
//********************************************************************
//RXCPUTIM EXEC ASMFC,PARM.ASM=(OBJ,NODECK)
//ASM.SYSLIB DD DSN=SYS2.MACLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
// DD DSN=SYS1.AMODGEN,DISP=SHR
// DD DSN=&&MACLIB,DISP=(MOD,PASS)
//ASM.SYSIN DD DATA,DLM=@@
{rxcputim}
@@
//ASM.SYSGO DD DSN=&&OBJ,DISP=(MOD,PASS)
//********************************************************************
//RXCPCMD EXEC ASMFC,PARM.ASM=(OBJ,NODECK)
//ASM.SYSLIB DD DSN=SYS2.MACLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
// DD DSN=SYS1.AMODGEN,DISP=SHR
// DD DSN=&&MACLIB,DISP=(MOD,PASS)
//ASM.SYSIN DD DATA,DLM=@@
{rxcpcmd}
@@
//ASM.SYSGO DD DSN=&&OBJ,DISP=(MOD,PASS)
//********************************************************************
//RXESTAE EXEC ASMFC,PARM.ASM=(OBJ,NODECK)
//ASM.SYSLIB DD DSN=SYS2.MACLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
// DD DSN=SYS1.AMODGEN,DISP=SHR
// DD DSN=&&MACLIB,DISP=(MOD,PASS)
//ASM.SYSIN DD DATA,DLM=@@
{rxestae}
@@
//ASM.SYSGO DD DSN=&&OBJ,DISP=(MOD,PASS)
4 changes: 2 additions & 2 deletions inc/compile.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,10 @@ enum mnemonic_type {
,OP_PUSH /* push lstring */
,OP_PUSHTMP /* push a temporary lstring */
,OP_POP /* pop lstring */
,OP_DUP /* DUP Ýrelative¨ duplicates something from stack */
,OP_DUP /* DUP [relative] duplicates something from stack */
,OP_COPY /* COPY to previous (Lstrcpy)*/
,OP_COPY2TMP /* COPY a value to temporary */
,OP_PATCH /* PATCH Ýrelative¨ Ýbyte¨ in code */
,OP_PATCH /* PATCH [relative] [byte] in code */
,OP_RAISE /* raise a condition error */

,OP_LOADARG /* load argument */
Expand Down
6 changes: 3 additions & 3 deletions inc/dbginfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
typedef struct T_DebugInfo_st {
dword magic_eye;
char *message;
dword pointerÝMAX_POINTER_ELEMENTS¨;
dword pointer[MAX_POINTER_ELEMENTS];
} DebugInfo;

typedef DebugInfo *P_DebugInfo;
Expand All @@ -39,12 +39,12 @@ static void updateDebugInfo (char *message, int num, ...)

/* zero out all old values */
for (ii=0; ii < MAX_POINTER_ELEMENTS; ii++) {
debugInfo->pointerÝii¨ = 0;
debugInfo->pointer[ii] = 0;
}

/* set new values */
for (jj=0; jj < MIN(num,MAX_POINTER_ELEMENTS); jj++) {
debugInfo->pointerÝjj¨ = va_arg(args,dword);
debugInfo->pointer[jj] = va_arg(args,dword);
}

/* clean up */
Expand Down
20 changes: 10 additions & 10 deletions inc/dynit.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,29 @@ typedef struct __DYNstruct {
char *__ddname; /* DDNAME */
char *__dsname; /* DSNAME, dataset name */
char __sysout; /* system output dataset */
char __01__Ý7¨;
char __01__[7];
char *__sysoutname; /* program name for sysout */
char *__member; /* member of a PDS */
char __status; /* dataset status */
char __normdisp; /* dataset's normal disp */
char __conddisp; /* dataset's cond disp */
char __02__Ý5¨;
char __02__[5];
char *__unit; /* unit name of dataset */
char *__volser; /* volume serial number */
short __dsorg; /* dataset organization */
char __alcunit; /* unit of space allocation */
char __03__Ý1¨;
char __03__[1];
int __primary; /* primary space allocation */
int __secondary; /* secondary space alloc'n */
short __recfm; /* the record format */
short __blksize; /* the block size */
unsigned short __lrecl; /* record length */
char __04__Ý6¨;
char __04__[6];
char *__volrefds; /* volume serial reference */
char *__dcbrefds; /* dsname for DCB reference */
char *__dcbrefdd; /* ddname for DCB reference */
unsigned char __misc_flags; /* attribute flags */
char __05__Ý7¨;
char __05__[7];
char *__password; /* password */
char **__miscitems; /* all remaining text units */
short __infocode; /* SVC 99 info code */
Expand All @@ -43,17 +43,17 @@ typedef struct __DYNstruct {
char *__mgntclass; /* SMS management class */
char *__dataclass; /* SMS data class */
unsigned char __recorg; /* Vsam dataset organization */
char __06__Ý1¨;
char __06__[1];
short __keylength; /* Vsam key length */
short __keyoffset; /* Vsam key offset */
char __07__Ý2¨;
char __07__[2];
char *__refdd; /* copy attributes of ref. dd*/
char *__like; /* copy attributes of like dsn */
unsigned char __dsntype; /* type att. of pds or pdse */
char __08__Ý7¨;
char __09__Ý4¨;
char __08__[7];
char __09__[4];
struct __S99rbx * __rbx; /* to the req. block extension */
char __10__Ý4¨;
char __10__[4];
struct __S99emparms * __emsgparmlist; /* @ of error msg parms*/
} __DYNstruct, __dyn_t;

Expand Down
Loading

0 comments on commit 56b18a2

Please sign in to comment.