From 9b10503ab1fc6e66a2c304f0f0fbca778b5b34a3 Mon Sep 17 00:00:00 2001 From: Moshix Date: Mon, 5 Jun 2017 02:14:44 -0500 Subject: [PATCH] updated vimrc for line numbers and better cursor --- PC370_orig/Diskette/full/BAT/BLDLIB.BAT | 30 + PC370_orig/Diskette/full/BAT/BLDUTIL.BAT | 22 + PC370_orig/Diskette/full/BAT/INSTALL.BAT | 41 + PC370_orig/Diskette/full/BAT/RUNCBL.BAT | 85 + PC370_orig/Diskette/full/BAT/RUNDEMO.BAT | 158 + PC370_orig/Diskette/full/BAT/RUNMAC.BAT | 34 + PC370_orig/Diskette/full/BAT/RUNUTIL.BAT | 25 + PC370_orig/Diskette/full/CBL/CALL370.CBL | 25 + PC370_orig/Diskette/full/CBL/CALL370.IDY | Bin 0 -> 3584 bytes PC370_orig/Diskette/full/CBL/CALL370.INT | Bin 0 -> 2304 bytes PC370_orig/Diskette/full/CBL/CALLCIO.CBL | 23 + PC370_orig/Diskette/full/CBL/CALLCIO.IDY | Bin 0 -> 3584 bytes PC370_orig/Diskette/full/CBL/CALLCIO.INT | Bin 0 -> 2304 bytes PC370_orig/Diskette/full/CBL/CALLSQA.CBL | 25 + PC370_orig/Diskette/full/CBL/CALLSQA.IDY | Bin 0 -> 3584 bytes PC370_orig/Diskette/full/CBL/CALLSQA.INT | Bin 0 -> 2304 bytes PC370_orig/Diskette/full/CBL/COBOL.DIR | 1 + PC370_orig/Diskette/full/CBL/TEST370.ALC | 82 + PC370_orig/Diskette/full/CBL/TEST370.BIN | Bin 0 -> 896 bytes PC370_orig/Diskette/full/CBL/TESTCIO.ALC | 330 ++ PC370_orig/Diskette/full/CBL/TESTCIO.BIN | Bin 0 -> 3072 bytes PC370_orig/Diskette/full/CBL/TESTCOM.ALC | 7 + PC370_orig/Diskette/full/CBL/TESTSQA.ALC | 44 + PC370_orig/Diskette/full/CBL/TESTSQA.BIN | Bin 0 -> 640 bytes PC370_orig/Diskette/full/CPY/EQUREGS.CPY | 20 + PC370_orig/Diskette/full/CPY/EQUSVCS.CPY | 46 + PC370_orig/Diskette/full/CPY/IHADCB.CPY | 49 + PC370_orig/Diskette/full/CPY/IHAPCB.CPY | 18 + PC370_orig/Diskette/full/CPY/IHAPIE.CPY | 29 + PC370_orig/Diskette/full/CPY/IHAPSW.CPY | 18 + PC370_orig/Diskette/full/CPY/IHASCB.CPY | 24 + PC370_orig/Diskette/full/CPY/MVS.CPY | 172 ++ PC370_orig/Diskette/full/DEALER.TXT | 544 ++++ PC370_orig/Diskette/full/DEMO/CLOCK.ALC | 122 + PC370_orig/Diskette/full/DEMO/DEMO8Q.ALC | 117 + PC370_orig/Diskette/full/DEMO/DEMOAST1.ALC | 33 + PC370_orig/Diskette/full/DEMO/DEMOAST1.DAT | 4 + PC370_orig/Diskette/full/DEMO/DEMOAST2.ALC | 50 + PC370_orig/Diskette/full/DEMO/DEMOAST2.DAT | 8 + PC370_orig/Diskette/full/DEMO/DEMOAST3.ALC | 6 + PC370_orig/Diskette/full/DEMO/DEMOAST4.ALC | 35 + PC370_orig/Diskette/full/DEMO/DEMOHATS.ALC | 197 ++ PC370_orig/Diskette/full/DEMO/DEMOINT.ALC | 53 + PC370_orig/Diskette/full/DEMO/DEMOMVS.ALC | 229 ++ PC370_orig/Diskette/full/DEMO/DEMOPD2.ALC | 21 + PC370_orig/Diskette/full/DEMO/DEMOPNUM.ALC | 119 + PC370_orig/Diskette/full/DEMO/DEMOPSW.ALC | 60 + PC370_orig/Diskette/full/DEMO/DEMOSRC.ALC | 328 ++ PC370_orig/Diskette/full/DEMO/DEMOSSP.ALC | 439 +++ PC370_orig/Diskette/full/DEMO/DEMOSVC.ALC | 272 ++ PC370_orig/Diskette/full/DEMO/DEMOTRAP.ALC | 57 + PC370_orig/Diskette/full/DEMO/IGC0011.ALC | 96 + PC370_orig/Diskette/full/DEMO/IGC1013.ALC | 66 + PC370_orig/Diskette/full/DEMO/INS0156.ALC | 93 + PC370_orig/Diskette/full/DEMO/MVS.ALC | 660 ++++ PC370_orig/Diskette/full/DEMO/PLOTXY.ALC | 121 + PC370_orig/Diskette/full/DEMO/SIEVE.ALC | 161 + PC370_orig/Diskette/full/DEMO/Z86SUB.ASM | 22 + PC370_orig/Diskette/full/DEMO/Z86SUB.COM | Bin 0 -> 33 bytes PC370_orig/Diskette/full/DOC/HELP.DOC | 183 ++ PC370_orig/Diskette/full/DOC/HISTORY.DOC | 430 +++ PC370_orig/Diskette/full/DOC/INTRO.DOC | 160 + PC370_orig/Diskette/full/DOC/MACRO.DOC | 483 +++ PC370_orig/Diskette/full/DOC/PTF.DOC | 110 + PC370_orig/Diskette/full/DOC/SYSTEM.DOC | 635 ++++ PC370_orig/Diskette/full/DOC/USER.DOC | 955 ++++++ PC370_orig/Diskette/full/DOC/UTILITY.DOC | 352 +++ PC370_orig/Diskette/full/FILE1352.TXT | 32 + PC370_orig/Diskette/full/FILES402.TXT | 70 + PC370_orig/Diskette/full/FILES859.TXT | 33 + PC370_orig/Diskette/full/GO.BAT | 5 + PC370_orig/Diskette/full/GO.TXT | 7 + PC370_orig/Diskette/full/LIB/DAT.ALC | 85 + PC370_orig/Diskette/full/LIB/DTIME.ALC | 79 + PC370_orig/Diskette/full/LIB/PET.ALC | 72 + PC370_orig/Diskette/full/LIB/SSP.ALC | 197 ++ PC370_orig/Diskette/full/LIB/SYNERROR.ALC | 135 + PC370_orig/Diskette/full/LIB/TIMER.ALC | 29 + PC370_orig/Diskette/full/MAC/API.MLC | 446 +++ PC370_orig/Diskette/full/MAC/BEGIN.MAC | 27 + PC370_orig/Diskette/full/MAC/CALL.MAC | 6 + PC370_orig/Diskette/full/MAC/CLOSE.MAC | 10 + PC370_orig/Diskette/full/MAC/DCB.MAC | 36 + PC370_orig/Diskette/full/MAC/DEMOMAC1.MLC | 5 + PC370_orig/Diskette/full/MAC/DEMOMAC2.DAT | 17 + PC370_orig/Diskette/full/MAC/DEMOMAC2.MLC | 17 + PC370_orig/Diskette/full/MAC/DISPLAY.MAC | 8 + PC370_orig/Diskette/full/MAC/FREEMAIN.MAC | 28 + PC370_orig/Diskette/full/MAC/GET.MAC | 18 + PC370_orig/Diskette/full/MAC/GETMAIN.MAC | 40 + PC370_orig/Diskette/full/MAC/LINK.MAC | 28 + PC370_orig/Diskette/full/MAC/LOAD.MAC | 22 + PC370_orig/Diskette/full/MAC/OPEN.MAC | 10 + PC370_orig/Diskette/full/MAC/PUT.MAC | 15 + PC370_orig/Diskette/full/MAC/READ.MAC | 36 + PC370_orig/Diskette/full/MAC/REGS.MAC | 18 + PC370_orig/Diskette/full/MAC/RETURN.MAC | 11 + PC370_orig/Diskette/full/MAC/SI500API.MLC | 145 + PC370_orig/Diskette/full/MAC/TEST.MAC | 23 + PC370_orig/Diskette/full/MAC/WRITE.MAC | 33 + PC370_orig/Diskette/full/MAC/WTO.MAC | 14 + PC370_orig/Diskette/full/MAC/WTOR.MAC | 47 + PC370_orig/Diskette/full/MAC/WTORPC.MAC | 34 + PC370_orig/Diskette/full/MANUAL.BAT | 9 + PC370_orig/Diskette/full/R42/A370.EXE | Bin 0 -> 56530 bytes PC370_orig/Diskette/full/R42/E370P42.EXE | Bin 0 -> 40514 bytes PC370_orig/Diskette/full/R42/E370R42.EXE | Bin 0 -> 50546 bytes PC370_orig/Diskette/full/R42/L370.EXE | Bin 0 -> 35602 bytes PC370_orig/Diskette/full/R42/L370.LIB | Bin 0 -> 3584 bytes PC370_orig/Diskette/full/R42/M370.COM | Bin 0 -> 6272 bytes PC370_orig/Diskette/full/R42/PRINTDOC.COM | Bin 0 -> 1664 bytes PC370_orig/Diskette/full/R42/READ.ME2 | 11 + PC370_orig/Diskette/full/R42/SEE.COM | Bin 0 -> 16768 bytes PC370_orig/Diskette/full/R42/T370.COM | Bin 0 -> 4864 bytes PC370_orig/Diskette/full/READ.ME | 170 ++ PC370_orig/Diskette/full/UTIL/DEMOSEE1.KSF | 1 + PC370_orig/Diskette/full/UTIL/DEMOSEE2.KSF | 1 + PC370_orig/Diskette/full/UTIL/ONEBLANK.ALC | 2 + PC370_orig/Diskette/full/UTIL/PRINTDOC.ALC | 263 ++ PC370_orig/Diskette/full/UTIL/SEE.ALC | 3227 ++++++++++++++++++++ PC370_orig/Diskette/full/UTIL/T370.ALC | 954 ++++++ PC370_orig/Diskette/min/A370.EXE | Bin 0 -> 56530 bytes PC370_orig/Diskette/min/ASM.BAT | 7 + PC370_orig/Diskette/min/BEGIN.MAC | 27 + PC370_orig/Diskette/min/BROWSE.COM | Bin 0 -> 958 bytes PC370_orig/Diskette/min/CALL.MAC | 6 + PC370_orig/Diskette/min/CLEANUP.BAT | 7 + PC370_orig/Diskette/min/CLOSE.MAC | 10 + PC370_orig/Diskette/min/COGS.CPY | 17 + PC370_orig/Diskette/min/COGS.DAT | 4 + PC370_orig/Diskette/min/COURSE.DAT | 9 + PC370_orig/Diskette/min/CVD.MLC | 15 + PC370_orig/Diskette/min/DCB.MAC | 36 + PC370_orig/Diskette/min/DISPLAY.MAC | 8 + PC370_orig/Diskette/min/DIVISION.CPY | 5 + PC370_orig/Diskette/min/E370P42.EXE | Bin 0 -> 40514 bytes PC370_orig/Diskette/min/E370R42.EXE | Bin 0 -> 50546 bytes PC370_orig/Diskette/min/FREEMAIN.MAC | 28 + PC370_orig/Diskette/min/GET.MAC | 18 + PC370_orig/Diskette/min/GETMAIN.MAC | 40 + PC370_orig/Diskette/min/GRADE.DAT | 23 + PC370_orig/Diskette/min/KIT.DAT | 6 + PC370_orig/Diskette/min/L370.EXE | Bin 0 -> 35602 bytes PC370_orig/Diskette/min/L370.LIB | Bin 0 -> 3584 bytes PC370_orig/Diskette/min/LINK.MAC | 28 + PC370_orig/Diskette/min/LOAD.MAC | 22 + PC370_orig/Diskette/min/M370.COM | Bin 0 -> 6272 bytes PC370_orig/Diskette/min/MAKEUP.DAT | 23 + PC370_orig/Diskette/min/OFFER.DAT | 15 + PC370_orig/Diskette/min/OPEN.MAC | 10 + PC370_orig/Diskette/min/PRINTDOC.COM | Bin 0 -> 1664 bytes PC370_orig/Diskette/min/PROD.DAT | 9 + PC370_orig/Diskette/min/PUT.MAC | 15 + PC370_orig/Diskette/min/READ.MAC | 36 + PC370_orig/Diskette/min/REGS.MAC | 18 + PC370_orig/Diskette/min/RETURN.MAC | 11 + PC370_orig/Diskette/min/RUN.BAT | 3 + PC370_orig/Diskette/min/SALES.DAT | 7 + PC370_orig/Diskette/min/SEE.COM | Bin 0 -> 16768 bytes PC370_orig/Diskette/min/STUDENT.DAT | 9 + PC370_orig/Diskette/min/T370.COM | Bin 0 -> 4864 bytes PC370_orig/Diskette/min/TEACHER.DAT | 5 + PC370_orig/Diskette/min/TOOL.DAT | 17 + PC370_orig/Diskette/min/WRITE.MAC | 33 + PC370_orig/Diskette/min/WTO.MAC | 14 + PC370_orig/Diskette/min/WTOR.MAC | 47 + PC370_orig/Diskette/min/WTORPC.MAC | 34 + PC370_orig/Diskette/read.me | 44 + PC370_orig/Diskette/source/BAL4A.MLC | 24 + PC370_orig/Diskette/source/BAL4B.MLC | 25 + PC370_orig/Diskette/source/BAL4C.MLC | 25 + PC370_orig/Diskette/source/BAL4D.MLC | 25 + PC370_orig/Diskette/source/BAL4E.MLC | 31 + PC370_orig/Diskette/source/BAL4F.MLC | 31 + PC370_orig/Diskette/source/BINARY.MLC | 14 + PC370_orig/Diskette/source/BITOPS.MLC | 109 + PC370_orig/Diskette/source/BQSFU.MLC | 589 ++++ PC370_orig/Diskette/source/BQSFUMST.DAT | 11 + PC370_orig/Diskette/source/BQSFUTRN.DAT | 7 + PC370_orig/Diskette/source/COGS.CPY | 17 + PC370_orig/Diskette/source/COGS13A.MLC | 129 + PC370_orig/Diskette/source/COGS13B.MLC | 221 ++ PC370_orig/Diskette/source/COGS14A.MLC | 165 + PC370_orig/Diskette/source/COGS14B.MLC | 217 ++ PC370_orig/Diskette/source/COGS16A.MLC | 119 + PC370_orig/Diskette/source/COGS16B.MLC | 238 ++ PC370_orig/Diskette/source/COGS7A.MLC | 212 ++ PC370_orig/Diskette/source/COGS7B.MLC | 252 ++ PC370_orig/Diskette/source/COGS9A.MLC | 219 ++ PC370_orig/Diskette/source/COGS9B.MLC | 256 ++ PC370_orig/Diskette/source/DATA5A.MLC | 22 + PC370_orig/Diskette/source/DATE370.MLC | 88 + PC370_orig/Diskette/source/DIVISION.CPY | 9 + PC370_orig/Diskette/source/DP.MLC | 13 + PC370_orig/Diskette/source/DP2.MLC | 7 + PC370_orig/Diskette/source/EDITS9.MLC | 113 + PC370_orig/Diskette/source/HELLO.MLC | 15 + PC370_orig/Diskette/source/MOVE2A.MLC | 34 + PC370_orig/Diskette/source/MOVE2B.MLC | 32 + PC370_orig/Diskette/source/MOVE2C.MLC | 32 + PC370_orig/Diskette/source/MOVE2D.MLC | 34 + PC370_orig/Diskette/source/MP.MLC | 10 + PC370_orig/Diskette/source/OFFER10A.MLC | 211 ++ PC370_orig/Diskette/source/OFFER10B.MLC | 260 ++ PC370_orig/Diskette/source/OFFER10C.MLC | 309 ++ PC370_orig/Diskette/source/OFFER10D.MLC | 284 ++ PC370_orig/Diskette/source/OFFER2A.MLC | 41 + PC370_orig/Diskette/source/OVERFLOW.MLC | 13 + PC370_orig/Diskette/source/S0C7.MLC | 15 + PC370_orig/Diskette/source/STUFF6A.MLC | 21 + PC370_orig/Diskette/source/STUFF6B.MLC | 17 + PC370_orig/Diskette/source/STUFF6C.MLC | 15 + PC370_orig/Diskette/source/STUFF6D.MLC | 14 + PC370_orig/Diskette/source/STUFF6E.MLC | 15 + PC370_orig/Diskette/source/STUFF7A.MLC | 16 + PC370_orig/Diskette/source/STUFF7B.MLC | 14 + PC370_orig/Diskette/source/TEACH11A.MLC | 316 ++ PC370_orig/Diskette/source/TEACH15A.MLC | 139 + PC370_orig/Diskette/source/TEACH1A.MLC | 39 + PC370_orig/Diskette/source/TEACH1B.MLC | 41 + PC370_orig/Diskette/source/TEACH1C.MLC | 47 + PC370_orig/Diskette/source/TEACH1D.MLC | 50 + PC370_orig/Diskette/source/TEACH2A.MLC | 75 + PC370_orig/Diskette/source/TEACH2B.MLC | 52 + PC370_orig/Diskette/source/TEACH2C.MLC | 98 + PC370_orig/Diskette/source/TEACH3A.MLC | 107 + PC370_orig/Diskette/source/TEACH4A.MLC | 128 + PC370_orig/Diskette/source/TEACH4B.MLC | 176 ++ PC370_orig/Diskette/source/TEACH4C.MLC | 184 ++ PC370_orig/Diskette/source/TEACH8A.MLC | 202 ++ PC370_orig/Diskette/source/TRANSCR.BAT | 20 + PC370_orig/Diskette/source/TRANSCR1.MLC | 165 + PC370_orig/Diskette/source/TRANSCR2.MLC | 434 +++ README.md | 2 + blocksize | Bin 1848656 -> 1848656 bytes blocksize.go | 40 +- vimrc | 27 + 237 files changed, 22585 insertions(+), 18 deletions(-) create mode 100644 PC370_orig/Diskette/full/BAT/BLDLIB.BAT create mode 100644 PC370_orig/Diskette/full/BAT/BLDUTIL.BAT create mode 100644 PC370_orig/Diskette/full/BAT/INSTALL.BAT create mode 100644 PC370_orig/Diskette/full/BAT/RUNCBL.BAT create mode 100644 PC370_orig/Diskette/full/BAT/RUNDEMO.BAT create mode 100644 PC370_orig/Diskette/full/BAT/RUNMAC.BAT create mode 100644 PC370_orig/Diskette/full/BAT/RUNUTIL.BAT create mode 100644 PC370_orig/Diskette/full/CBL/CALL370.CBL create mode 100644 PC370_orig/Diskette/full/CBL/CALL370.IDY create mode 100644 PC370_orig/Diskette/full/CBL/CALL370.INT create mode 100644 PC370_orig/Diskette/full/CBL/CALLCIO.CBL create mode 100644 PC370_orig/Diskette/full/CBL/CALLCIO.IDY create mode 100644 PC370_orig/Diskette/full/CBL/CALLCIO.INT create mode 100644 PC370_orig/Diskette/full/CBL/CALLSQA.CBL create mode 100644 PC370_orig/Diskette/full/CBL/CALLSQA.IDY create mode 100644 PC370_orig/Diskette/full/CBL/CALLSQA.INT create mode 100644 PC370_orig/Diskette/full/CBL/COBOL.DIR create mode 100644 PC370_orig/Diskette/full/CBL/TEST370.ALC create mode 100644 PC370_orig/Diskette/full/CBL/TEST370.BIN create mode 100644 PC370_orig/Diskette/full/CBL/TESTCIO.ALC create mode 100644 PC370_orig/Diskette/full/CBL/TESTCIO.BIN create mode 100644 PC370_orig/Diskette/full/CBL/TESTCOM.ALC create mode 100644 PC370_orig/Diskette/full/CBL/TESTSQA.ALC create mode 100644 PC370_orig/Diskette/full/CBL/TESTSQA.BIN create mode 100644 PC370_orig/Diskette/full/CPY/EQUREGS.CPY create mode 100644 PC370_orig/Diskette/full/CPY/EQUSVCS.CPY create mode 100644 PC370_orig/Diskette/full/CPY/IHADCB.CPY create mode 100644 PC370_orig/Diskette/full/CPY/IHAPCB.CPY create mode 100644 PC370_orig/Diskette/full/CPY/IHAPIE.CPY create mode 100644 PC370_orig/Diskette/full/CPY/IHAPSW.CPY create mode 100644 PC370_orig/Diskette/full/CPY/IHASCB.CPY create mode 100644 PC370_orig/Diskette/full/CPY/MVS.CPY create mode 100644 PC370_orig/Diskette/full/DEALER.TXT create mode 100644 PC370_orig/Diskette/full/DEMO/CLOCK.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMO8Q.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOAST1.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOAST1.DAT create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOAST2.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOAST2.DAT create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOAST3.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOAST4.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOHATS.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOINT.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOMVS.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOPD2.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOPNUM.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOPSW.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOSRC.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOSSP.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOSVC.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/DEMOTRAP.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/IGC0011.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/IGC1013.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/INS0156.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/MVS.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/PLOTXY.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/SIEVE.ALC create mode 100644 PC370_orig/Diskette/full/DEMO/Z86SUB.ASM create mode 100644 PC370_orig/Diskette/full/DEMO/Z86SUB.COM create mode 100644 PC370_orig/Diskette/full/DOC/HELP.DOC create mode 100644 PC370_orig/Diskette/full/DOC/HISTORY.DOC create mode 100644 PC370_orig/Diskette/full/DOC/INTRO.DOC create mode 100644 PC370_orig/Diskette/full/DOC/MACRO.DOC create mode 100644 PC370_orig/Diskette/full/DOC/PTF.DOC create mode 100644 PC370_orig/Diskette/full/DOC/SYSTEM.DOC create mode 100644 PC370_orig/Diskette/full/DOC/USER.DOC create mode 100644 PC370_orig/Diskette/full/DOC/UTILITY.DOC create mode 100644 PC370_orig/Diskette/full/FILE1352.TXT create mode 100644 PC370_orig/Diskette/full/FILES402.TXT create mode 100644 PC370_orig/Diskette/full/FILES859.TXT create mode 100644 PC370_orig/Diskette/full/GO.BAT create mode 100644 PC370_orig/Diskette/full/GO.TXT create mode 100644 PC370_orig/Diskette/full/LIB/DAT.ALC create mode 100644 PC370_orig/Diskette/full/LIB/DTIME.ALC create mode 100644 PC370_orig/Diskette/full/LIB/PET.ALC create mode 100644 PC370_orig/Diskette/full/LIB/SSP.ALC create mode 100644 PC370_orig/Diskette/full/LIB/SYNERROR.ALC create mode 100644 PC370_orig/Diskette/full/LIB/TIMER.ALC create mode 100644 PC370_orig/Diskette/full/MAC/API.MLC create mode 100644 PC370_orig/Diskette/full/MAC/BEGIN.MAC create mode 100644 PC370_orig/Diskette/full/MAC/CALL.MAC create mode 100644 PC370_orig/Diskette/full/MAC/CLOSE.MAC create mode 100644 PC370_orig/Diskette/full/MAC/DCB.MAC create mode 100644 PC370_orig/Diskette/full/MAC/DEMOMAC1.MLC create mode 100644 PC370_orig/Diskette/full/MAC/DEMOMAC2.DAT create mode 100644 PC370_orig/Diskette/full/MAC/DEMOMAC2.MLC create mode 100644 PC370_orig/Diskette/full/MAC/DISPLAY.MAC create mode 100644 PC370_orig/Diskette/full/MAC/FREEMAIN.MAC create mode 100644 PC370_orig/Diskette/full/MAC/GET.MAC create mode 100644 PC370_orig/Diskette/full/MAC/GETMAIN.MAC create mode 100644 PC370_orig/Diskette/full/MAC/LINK.MAC create mode 100644 PC370_orig/Diskette/full/MAC/LOAD.MAC create mode 100644 PC370_orig/Diskette/full/MAC/OPEN.MAC create mode 100644 PC370_orig/Diskette/full/MAC/PUT.MAC create mode 100644 PC370_orig/Diskette/full/MAC/READ.MAC create mode 100644 PC370_orig/Diskette/full/MAC/REGS.MAC create mode 100644 PC370_orig/Diskette/full/MAC/RETURN.MAC create mode 100644 PC370_orig/Diskette/full/MAC/SI500API.MLC create mode 100644 PC370_orig/Diskette/full/MAC/TEST.MAC create mode 100644 PC370_orig/Diskette/full/MAC/WRITE.MAC create mode 100644 PC370_orig/Diskette/full/MAC/WTO.MAC create mode 100644 PC370_orig/Diskette/full/MAC/WTOR.MAC create mode 100644 PC370_orig/Diskette/full/MAC/WTORPC.MAC create mode 100644 PC370_orig/Diskette/full/MANUAL.BAT create mode 100644 PC370_orig/Diskette/full/R42/A370.EXE create mode 100644 PC370_orig/Diskette/full/R42/E370P42.EXE create mode 100644 PC370_orig/Diskette/full/R42/E370R42.EXE create mode 100644 PC370_orig/Diskette/full/R42/L370.EXE create mode 100644 PC370_orig/Diskette/full/R42/L370.LIB create mode 100644 PC370_orig/Diskette/full/R42/M370.COM create mode 100644 PC370_orig/Diskette/full/R42/PRINTDOC.COM create mode 100644 PC370_orig/Diskette/full/R42/READ.ME2 create mode 100644 PC370_orig/Diskette/full/R42/SEE.COM create mode 100644 PC370_orig/Diskette/full/R42/T370.COM create mode 100644 PC370_orig/Diskette/full/READ.ME create mode 100644 PC370_orig/Diskette/full/UTIL/DEMOSEE1.KSF create mode 100644 PC370_orig/Diskette/full/UTIL/DEMOSEE2.KSF create mode 100644 PC370_orig/Diskette/full/UTIL/ONEBLANK.ALC create mode 100644 PC370_orig/Diskette/full/UTIL/PRINTDOC.ALC create mode 100644 PC370_orig/Diskette/full/UTIL/SEE.ALC create mode 100644 PC370_orig/Diskette/full/UTIL/T370.ALC create mode 100644 PC370_orig/Diskette/min/A370.EXE create mode 100644 PC370_orig/Diskette/min/ASM.BAT create mode 100644 PC370_orig/Diskette/min/BEGIN.MAC create mode 100644 PC370_orig/Diskette/min/BROWSE.COM create mode 100644 PC370_orig/Diskette/min/CALL.MAC create mode 100644 PC370_orig/Diskette/min/CLEANUP.BAT create mode 100644 PC370_orig/Diskette/min/CLOSE.MAC create mode 100644 PC370_orig/Diskette/min/COGS.CPY create mode 100644 PC370_orig/Diskette/min/COGS.DAT create mode 100644 PC370_orig/Diskette/min/COURSE.DAT create mode 100644 PC370_orig/Diskette/min/CVD.MLC create mode 100644 PC370_orig/Diskette/min/DCB.MAC create mode 100644 PC370_orig/Diskette/min/DISPLAY.MAC create mode 100644 PC370_orig/Diskette/min/DIVISION.CPY create mode 100644 PC370_orig/Diskette/min/E370P42.EXE create mode 100644 PC370_orig/Diskette/min/E370R42.EXE create mode 100644 PC370_orig/Diskette/min/FREEMAIN.MAC create mode 100644 PC370_orig/Diskette/min/GET.MAC create mode 100644 PC370_orig/Diskette/min/GETMAIN.MAC create mode 100644 PC370_orig/Diskette/min/GRADE.DAT create mode 100644 PC370_orig/Diskette/min/KIT.DAT create mode 100644 PC370_orig/Diskette/min/L370.EXE create mode 100644 PC370_orig/Diskette/min/L370.LIB create mode 100644 PC370_orig/Diskette/min/LINK.MAC create mode 100644 PC370_orig/Diskette/min/LOAD.MAC create mode 100644 PC370_orig/Diskette/min/M370.COM create mode 100644 PC370_orig/Diskette/min/MAKEUP.DAT create mode 100644 PC370_orig/Diskette/min/OFFER.DAT create mode 100644 PC370_orig/Diskette/min/OPEN.MAC create mode 100644 PC370_orig/Diskette/min/PRINTDOC.COM create mode 100644 PC370_orig/Diskette/min/PROD.DAT create mode 100644 PC370_orig/Diskette/min/PUT.MAC create mode 100644 PC370_orig/Diskette/min/READ.MAC create mode 100644 PC370_orig/Diskette/min/REGS.MAC create mode 100644 PC370_orig/Diskette/min/RETURN.MAC create mode 100644 PC370_orig/Diskette/min/RUN.BAT create mode 100644 PC370_orig/Diskette/min/SALES.DAT create mode 100644 PC370_orig/Diskette/min/SEE.COM create mode 100644 PC370_orig/Diskette/min/STUDENT.DAT create mode 100644 PC370_orig/Diskette/min/T370.COM create mode 100644 PC370_orig/Diskette/min/TEACHER.DAT create mode 100644 PC370_orig/Diskette/min/TOOL.DAT create mode 100644 PC370_orig/Diskette/min/WRITE.MAC create mode 100644 PC370_orig/Diskette/min/WTO.MAC create mode 100644 PC370_orig/Diskette/min/WTOR.MAC create mode 100644 PC370_orig/Diskette/min/WTORPC.MAC create mode 100644 PC370_orig/Diskette/read.me create mode 100644 PC370_orig/Diskette/source/BAL4A.MLC create mode 100644 PC370_orig/Diskette/source/BAL4B.MLC create mode 100644 PC370_orig/Diskette/source/BAL4C.MLC create mode 100644 PC370_orig/Diskette/source/BAL4D.MLC create mode 100644 PC370_orig/Diskette/source/BAL4E.MLC create mode 100644 PC370_orig/Diskette/source/BAL4F.MLC create mode 100644 PC370_orig/Diskette/source/BINARY.MLC create mode 100644 PC370_orig/Diskette/source/BITOPS.MLC create mode 100644 PC370_orig/Diskette/source/BQSFU.MLC create mode 100644 PC370_orig/Diskette/source/BQSFUMST.DAT create mode 100644 PC370_orig/Diskette/source/BQSFUTRN.DAT create mode 100644 PC370_orig/Diskette/source/COGS.CPY create mode 100644 PC370_orig/Diskette/source/COGS13A.MLC create mode 100644 PC370_orig/Diskette/source/COGS13B.MLC create mode 100644 PC370_orig/Diskette/source/COGS14A.MLC create mode 100644 PC370_orig/Diskette/source/COGS14B.MLC create mode 100644 PC370_orig/Diskette/source/COGS16A.MLC create mode 100644 PC370_orig/Diskette/source/COGS16B.MLC create mode 100644 PC370_orig/Diskette/source/COGS7A.MLC create mode 100644 PC370_orig/Diskette/source/COGS7B.MLC create mode 100644 PC370_orig/Diskette/source/COGS9A.MLC create mode 100644 PC370_orig/Diskette/source/COGS9B.MLC create mode 100644 PC370_orig/Diskette/source/DATA5A.MLC create mode 100644 PC370_orig/Diskette/source/DATE370.MLC create mode 100644 PC370_orig/Diskette/source/DIVISION.CPY create mode 100644 PC370_orig/Diskette/source/DP.MLC create mode 100644 PC370_orig/Diskette/source/DP2.MLC create mode 100644 PC370_orig/Diskette/source/EDITS9.MLC create mode 100644 PC370_orig/Diskette/source/HELLO.MLC create mode 100644 PC370_orig/Diskette/source/MOVE2A.MLC create mode 100644 PC370_orig/Diskette/source/MOVE2B.MLC create mode 100644 PC370_orig/Diskette/source/MOVE2C.MLC create mode 100644 PC370_orig/Diskette/source/MOVE2D.MLC create mode 100644 PC370_orig/Diskette/source/MP.MLC create mode 100644 PC370_orig/Diskette/source/OFFER10A.MLC create mode 100644 PC370_orig/Diskette/source/OFFER10B.MLC create mode 100644 PC370_orig/Diskette/source/OFFER10C.MLC create mode 100644 PC370_orig/Diskette/source/OFFER10D.MLC create mode 100644 PC370_orig/Diskette/source/OFFER2A.MLC create mode 100644 PC370_orig/Diskette/source/OVERFLOW.MLC create mode 100644 PC370_orig/Diskette/source/S0C7.MLC create mode 100644 PC370_orig/Diskette/source/STUFF6A.MLC create mode 100644 PC370_orig/Diskette/source/STUFF6B.MLC create mode 100644 PC370_orig/Diskette/source/STUFF6C.MLC create mode 100644 PC370_orig/Diskette/source/STUFF6D.MLC create mode 100644 PC370_orig/Diskette/source/STUFF6E.MLC create mode 100644 PC370_orig/Diskette/source/STUFF7A.MLC create mode 100644 PC370_orig/Diskette/source/STUFF7B.MLC create mode 100644 PC370_orig/Diskette/source/TEACH11A.MLC create mode 100644 PC370_orig/Diskette/source/TEACH15A.MLC create mode 100644 PC370_orig/Diskette/source/TEACH1A.MLC create mode 100644 PC370_orig/Diskette/source/TEACH1B.MLC create mode 100644 PC370_orig/Diskette/source/TEACH1C.MLC create mode 100644 PC370_orig/Diskette/source/TEACH1D.MLC create mode 100644 PC370_orig/Diskette/source/TEACH2A.MLC create mode 100644 PC370_orig/Diskette/source/TEACH2B.MLC create mode 100644 PC370_orig/Diskette/source/TEACH2C.MLC create mode 100644 PC370_orig/Diskette/source/TEACH3A.MLC create mode 100644 PC370_orig/Diskette/source/TEACH4A.MLC create mode 100644 PC370_orig/Diskette/source/TEACH4B.MLC create mode 100644 PC370_orig/Diskette/source/TEACH4C.MLC create mode 100644 PC370_orig/Diskette/source/TEACH8A.MLC create mode 100644 PC370_orig/Diskette/source/TRANSCR.BAT create mode 100644 PC370_orig/Diskette/source/TRANSCR1.MLC create mode 100644 PC370_orig/Diskette/source/TRANSCR2.MLC diff --git a/PC370_orig/Diskette/full/BAT/BLDLIB.BAT b/PC370_orig/Diskette/full/BAT/BLDLIB.BAT new file mode 100644 index 0000000..de4e0fb --- /dev/null +++ b/PC370_orig/Diskette/full/BAT/BLDLIB.BAT @@ -0,0 +1,30 @@ +REM BUILD SYSTEM SUBROUTINE LIBRARY L370.LIB +REM PC/370 SYSTEM PROGRAMS MUST BE IN CURRENT DIRECTORY +REM +REM NOTE THAT IN BUILDING OBJECT LIBRARIES, MODULES MUST +REM BE PLACED IN SEQUENCE SUCH THAT NO MODULE GENERATES THE ONLY +REM REFERENCE TO A PREVIOUS MODULE SINCE ALL EXTERNAL REFERENCES +REM MUST BE RESOLVED IN FIRST SEQUENTIAL PASS OF LIBRARY. +REM +PAUSE +A370 LIB\PET +A370 LIB\TIMER +A370 LIB\DAT +A370 LIB\DTIME +A370 LIB\SYNERROR +COPY LIB\PET.OBJ/B L370.LIB +COPY L370.LIB/B+LIB\TIMER.OBJ/B +COPY L370.LIB/B+LIB\DAT.OBJ/B +COPY L370.LIB/B+LIB\DTIME.OBJ/B +COPY L370.LIB/B+LIB\SYNERROR.OBJ/B +ERASE LIB\PET.OBJ +ERASE LIB\TIMER.OBJ +ERASE LIB\DAT.OBJ +ERASE LIB\DTIME.OBJ +ERASE LIB\SYNERROR.OBJ +REM ADD SCIENTIFIC ROUTINES TO L370.LIB IF 80X87 CO-PROCESSOR AVAILABLE +PAUSE PRESS ENTER OR BREAK TO STOP +A370 LIB\SSP +COPY L370.LIB/B+LIB\SSP.OBJ/B +ERASE LIB\SSP.OBJ + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/BAT/BLDUTIL.BAT b/PC370_orig/Diskette/full/BAT/BLDUTIL.BAT new file mode 100644 index 0000000..569c82c --- /dev/null +++ b/PC370_orig/Diskette/full/BAT/BLDUTIL.BAT @@ -0,0 +1,22 @@ +REM ASSEMBLE AND LINK UTILITIES FROM SOURCE CODE +REM PC/370 SYSTEM PROGRAMS MUST BE IN CURRENT DIRECTORY +REM UTILITY SOUCE MUST BE IN UTIL DIRECTORY +PAUSE CREATE SEE.COM FULL SCREEN COLOR TEXT EDITOR +A370 UTIL\SEE +L370 UTIL\SEE +COPY UTIL\SEE.COM +ERASE UTIL\SEE.OBJ +ERASE UTIL\SEE.COM +REM CREATE PRINTDOC.COM FORMATTED PRINT UTILITY +A370 UTIL\PRINTDOC +L370 UTIL\PRINTDOC +COPY UTIL\PRINTDOC.COM +ERASE UTIL\PRINTDOC.OBJ +ERASE UTIL\PRINTDOC.COM +REM CREATE T370.COM OBJECT CODE TRANSLATOR FOR UPLOAD TO OS/VS LKED +A370 UTIL\T370 +L370 UTIL\T370 +COPY UTIL\T370.COM +ERASE UTIL\T370.OBJ +ERASE UTIL\T370.COM + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/BAT/INSTALL.BAT b/PC370_orig/Diskette/full/BAT/INSTALL.BAT new file mode 100644 index 0000000..cbe5260 --- /dev/null +++ b/PC370_orig/Diskette/full/BAT/INSTALL.BAT @@ -0,0 +1,41 @@ +rem PC/370 installation command file to create %2:\R42 from %1. +rem This command requires two parameters as follows: +rem 1. Source floppy disk drive (usually A or B). +rem 2. Target hard disk drive (usually C or D). +rem Source drive = %1 and destination drive = %2 +rem If the above source and destinations are wrong, enter CTL-BREAK +pause If ok, press enter to create directories +%2: +mkdir R42 +cd R42 +mkdir BAT +mkdir LIB +mkdir CPY +mkdir MAC +mkdir CBL +mkdir DOC +mkdir DEMO +mkdir UTIL +pause Insert PC/370 distribution disk with \R42 directory in drive %1 and enter +copy %1:\read.me +copy %1:\R42\*.* +copy %1:\BAT\*.* BAT +copy %1:\CPY\*.* CPY +copy %1:\LIB\*.* LIB +pause Insert PC/370 distribution disk with \DEMO directory in drive %1 and enter +copy %1:\DEMO\*.* DEMO +copy %1:\DOC\*.* DOC +copy %1:\MAC\*.* MAC +pause Insert PC/370 distribution disk with \CBL directory in drive %1 and enter +copy %1:\UTIL\*.* UTIL +copy %1:\CBL\*.* CBL +rem The PC/370 system is now installed. +rem The batch commands can be run using the current directory. +rem To run the macro preprocessor demo enter, bat\runmac. +rem To run the Micro Focus COBOL/2 subroutine demo enter, bat\runcbl. +rem To run the utility demos enter, bat\runutil. +rem To rebuild the subroutine library from source, enter bat\bldlib. +rem To rebuild the utilities from source, enter bat\bldutil. +pause Now to run the PC/370 demo programs, press enter. +bat\rundemo + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/BAT/RUNCBL.BAT b/PC370_orig/Diskette/full/BAT/RUNCBL.BAT new file mode 100644 index 0000000..8f13b32 --- /dev/null +++ b/PC370_orig/Diskette/full/BAT/RUNCBL.BAT @@ -0,0 +1,85 @@ +REM This is a demo of PC/370 subroutines called from Micro Focus COBOL. +REM The COBOL programs are included in CBL source and INT object form. +REM The Micro Focus runtime program RUN.EXE is required to execute demo. +REM The Micro Focus extended memory shell XM.EXE is required to demo +REM execution of same programs in extended memory protect mode. +REM Note the following COBOL directive file was used to set IBM 370 +PAUSE data format compatability. +COPY CBL\COBOL.DIR CON: +REM The following COBOL program and ALC subroutine tests 4 different +PAUSE data formats being passed using standard linkage conventions. +COPY CBL\CALL370.CBL CON: +PAUSE Next assemble the ALC program. +A370 CBL\TEST370/LX +COPY CBL\TEST370.PRN CON: +PAUSE Next link the ALC program. +L370 CBL\TEST370/LXB +COPY CBL\TEST370.LST CON: +PAUSE Now make PC/370 resident +E370R42 +PAUSE Now execute the COBOL program in real mode and then extended mode +CD CBL +C:\C2WB\RUN CALL370 +C:\C2WB\XM C:\C2WB\RUN CALL370 +CD .. +PAUSE To remove the current resident emulator, execute it again as follows. +E370R42 +erase cbl\test370.obj +erase cbl\test370.lst +erase cbl\test370.prn +REM The following COBOL program and ALC subroutine tests file I/O within +REM ALC subroutine using system queue area (SQA) memory allocated in the +PAUSE emulator region for dynamic file buffer. +COPY CBL\CALLCIO.CBL CON: +PAUSE Next assemble the ALC program. +A370 CBL\TESTCIO/LX +COPY CBL\TESTCIO.PRN CON: +PAUSE Next link the ALC program. +L370 CBL\TESTCIO/LXB +COPY CBL\TESTCIO.LST CON: +PAUSE Now make PC/370 resident and request 8k byte SQA (x'200' paragraphs) +E370R42.EXE 200 +PAUSE Next execute the COBOL program in real and then extended mode +CD CBL +C:\C2WB\RUN CALLCIO +C:\C2WB\XM C:\C2WB\RUN CALLCIO +CD .. +PAUSE To remove the current resident emulator, execute it again as follows. +E370R42 +erase cbl\testcio.obj +erase cbl\testcio.lst +erase cbl\testcio.prn +REM The following COBOL program and ALC subroutine tests SQA memory allocation. +COPY CBL\CALLSQA.CBL CON: +PAUSE Next assemble the ALC program. +A370 CBL\TESTSQA/LX +COPY CBL\TESTSQA.PRN CON: +PAUSE Next link the ALC program. +L370 CBL\TESTSQA/LXB +COPY CBL\TESTSQA.LST CON: +PAUSE Now make PC/370 resident and request 2k byte SQA (x'80' paragraphs) +E370R42 80 +CD CBL +PAUSE Now execute the COBOL program once to allocate first half of SQA. +C:\C2WB\RUN CALLSQA +REM Now run simple echo message COM program in separate address space +PAUSE to verify SQA memory is isolated and preserved across COM executions. +CD .. +A370 CBL\TESTCOM +L370 CBL\TESTCOM/G +ERASE CBL\TESTCOM.OBJ +CD CBL +PAUSE Now execute the COBOL program again to allocate last half of SQA. +C:\C2WB\XM C:\C2WB\RUN CALLSQA +PAUSE Now execute the COBOL program again to show SQA allocated and RC = 1. +C:\C2WB\RUN CALLSQA +CD .. +PAUSE To remove the current resident emulator, execute it again as follows. +E370R42 +erase cbl\testsqa.obj +erase cbl\testsqa.lst +erase cbl\testsqa.prn +REM That's the end of the demo. Remember to make PC/370 resident before +REM starting the Micro Focus Workbench or calls to PC/370 BIN files will +REM result in error message and exit from call. + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/BAT/RUNDEMO.BAT b/PC370_orig/Diskette/full/BAT/RUNDEMO.BAT new file mode 100644 index 0000000..c973a38 --- /dev/null +++ b/PC370_orig/Diskette/full/BAT/RUNDEMO.BAT @@ -0,0 +1,158 @@ +REM ASSEMBLE AND EXECUTE PC/370 DEMO PROGRAMS +REM +REM THE DEMO PROGRAMS PROVIDE BENCHMARK STATISTICS ON EXECUTION +REM SPEED ON DIFFERENT MACHINES AND ILLUSTRATE FUNCTIONS +REM +REM THE PC/370 SYSTEM PROGRAMS MUST BE IN THE CURRENT DIRECTORY AND THE +REM DEMO PROGRAMS MUST BE IN DEMO DIRECTORY. +REM +PAUSE PRESS ENTER TO PROCEED +REM SIEVE CALCULATES PRIMES ENDING IN 9 UP TO 100,000 USING 100K TABLE +A370 DEMO\SIEVE +L370 DEMO\SIEVE +DEMO\SIEVE +ERASE DEMO\SIEVE.OBJ +ERASE DEMO\SIEVE.COM +REM DEMOPNUM CALCULATES FIRST 100 PRIMES (OLD BENCHMARK DEMO) +A370 DEMO\DEMOPNUM +L370 DEMO\DEMOPNUM +DEMO\DEMOPNUM +ERASE DEMO\DEMOPNUM.OBJ +ERASE DEMO\DEMOPNUM.COM +REM DEMO8Q CALCULATES SOLUTIONS TO 8 QUEENS PROBLEM USING RECURSION +A370 DEMO\DEMO8Q +L370 DEMO\DEMO8Q +DEMO\DEMO8Q +ERASE DEMO\DEMO8Q.OBJ +ERASE DEMO\DEMO8Q.COM +REM DEMOAST1 USES ASSIST TO READ AND WRITE FILE +COPY DEMO\DEMOAST1.DAT +A370 DEMO\DEMOAST1 +L370 DEMO\DEMOAST1 +DEMO\DEMOAST1 +COPY DEMOAST1.LOG CON: +ERASE DEMO\DEMOAST1.OBJ +ERASE DEMO\DEMOAST1.COM +ERASE DEMOAST1.LOG +ERASE DEMOAST1.DAT +REM DEMOAST2 USES ASSIST TO CALC BIGGEST AND SMALLEST NUMBER IN FILE +A370 DEMO\DEMOAST2 +L370 DEMO\DEMOAST2 +COPY DEMO\DEMOAST2.DAT +DEMO\DEMOAST2 +COPY DEMOAST2.LOG CON: +ERASE DEMO\DEMOAST2.OBJ +ERASE DEMO\DEMOAST2.COM +ERASE DEMOAST2.LOG +ERASE DEMOAST2.DAT +REM DEMOAST3 USES VERY SHORT ASSIST (4 LINES) TO OUTPUT TO DEFAULT FILE +A370 DEMO\DEMOAST3 +L370 DEMO\DEMOAST3 +DEMO\DEMOAST3 +COPY ASSIST.PRN CON: +ERASE DEMO\DEMOAST3.OBJ +ERASE DEMO\DEMOAST3.COM +ERASE ASSIST.PRN +REM DEMOAST4 USES NEW ASSIST FILE REDIRECTION TO INPUT/OUTPUT FILE/CONSOLE +A370 DEMO\DEMOAST4 +L370 DEMO\DEMOAST4 +DEMO\DEMOAST4 +ERASE DEMO\DEMOAST4.OBJ +ERASE DEMO\DEMOAST4.COM +ERASE DEMOAST4.LOG +REM RUN DEMO TO CALCULATE E USING DETERMINISTIC ROUTINE +A370 DEMO\DEMOHATS +L370 DEMO\DEMOHATS +DEMO\DEMOHATS +ERASE DEMO\DEMOHATS.OBJ +ERASE DEMO\DEMOHATS.COM +REM RUN DEMO TO LIST ALL ALC FILES AND RECORD COUNTS IN SEQ. +A370 DEMO\DEMOSRC +L370 DEMO\DEMOSRC +DEMO\DEMOSRC *.ME +ERASE DEMO\DEMOSRC.OBJ +ERASE DEMO\DEMOSRC.COM +REM DEMOSVC TESTS GMAIN/FMAIN, 8086 USER EXIT, SPIE, CHAR I/O +COPY DEMO\Z86SUB.COM +A370 DEMO\DEMOSVC +L370 DEMO\DEMOSVC +DEMO\DEMOSVC +ERASE DEMO\DEMOSVC.OBJ +ERASE DEMO\DEMOSVC.COM +REM DEMOPSW LOADS CLOCK EXTERNAL INTERRUPT HANDLER TO DISPLAY TIME +A370 LIB\DTIME +COPY LIB\DTIME.OBJ DEMO\DEMOPSW.LIB +COPY LIB\DTIME.OBJ DEMO\CLOCK.LIB +A370 DEMO\DEMOPSW +L370 DEMO\DEMOPSW +A370 DEMO\CLOCK +L370 DEMO\CLOCK/M +COPY DEMO\CLOCK.MOD CLOCK.MOD +DEMO\DEMOPSW +ERASE LIB\DTIME.OBJ +ERASE DEMO\DEMOPSW.OBJ +ERASE DEMO\DEMOPSW.LIB +ERASE DEMO\DEMOPSW.COM +ERASE DEMO\CLOCK.OBJ +ERASE CLOCK.MOD +ERASE DEMO\CLOCK.MOD +ERASE DEMO\CLOCK.LIB +REM DEMO SVC'S 28-34 FOR ASCII WTO AND USE OF GENERAL INTERRUPT SVC 34 +A370 DEMO\DEMOINT +L370 DEMO\DEMOINT +DEMO\DEMOINT +ERASE DEMO\DEMOINT.OBJ +ERASE DEMO\DEMOINT.COM +REM DEMO SVC TRAP FACILITY VIA USE OF SVC 37 SVC TABLE AND LPSW +A370 DEMO\DEMOTRAP +L370 DEMO\DEMOTRAP +DEMO\DEMOTRAP +ERASE DEMO\DEMOTRAP.OBJ +ERASE DEMO\DEMOTRAP.COM +REM DEMO MVS SHELL +A370 DEMO\MVS +L370 DEMO\MVS/M +A370 DEMO\IGC0011 +L370 DEMO\IGC0011/M +A370 DEMO\IGC1013 +L370 DEMO\IGC1013/M +A370 DEMO\INS0156 +L370 DEMO\INS0156/M +A370 DEMO\DEMOMVS +L370 DEMO\DEMOMVS +COPY DEMO\*.MOD +DEMO\DEMOMVS +ERASE DEMO\MVS.OBJ +ERASE DEMO\IGC0011.OBJ +ERASE DEMO\IGC1013.OBJ +ERASE DEMO\INS0156.OBJ +ERASE DEMO\DEMOMVS.OBJ +ERASE DEMO\MVS.MOD +ERASE MVS.MOD +ERASE DEMO\IGC0011.MOD +ERASE DEMO\IGC1013.MOD +ERASE DEMO\INS0156.MOD +ERASE DEMO\DEMOMVS.COM +ERASE IGC0011.MOD +ERASE IGC1013.MOD +ERASE INS0156.MOD +ERASE Z86SUB.COM +REM TEST AND DEMO SCIENTIFIC SUBROUTINES USING 80X87 +PAUSE PRESS ENTER TO PROCEED OR BREAK TO STOP NOW +A370 LIB\SSP +COPY LIB\SSP.OBJ DEMO\DEMOSSP.LIB +COPY LIB\SSP.OBJ DEMO\PLOTXY.LIB +ERASE LIB\SSP.OBJ +A370 DEMO\DEMOSSP +L370 DEMO\DEMOSSP +DEMO\DEMOSSP +ERASE DEMO\DEMOSSP.OBJ +ERASE DEMO\DEMOSSP.LIB +ERASE DEMO\DEMOSSP.COM +A370 DEMO\PLOTXY +L370 DEMO\PLOTXY +DEMO\PLOTXY +ERASE DEMO\PLOTXY.OBJ +ERASE DEMO\PLOTXY.LIB +ERASE DEMO\PLOTXY.COM + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/BAT/RUNMAC.BAT b/PC370_orig/Diskette/full/BAT/RUNMAC.BAT new file mode 100644 index 0000000..b5addca --- /dev/null +++ b/PC370_orig/Diskette/full/BAT/RUNMAC.BAT @@ -0,0 +1,34 @@ +REM ASSEMBLE LINK AND EXECUTE DEMO MACRO PROGRAMS +REM PC/370 SYSTEM PROGRAMS MUST BE IN CURRENT DIRECTORY +REM MACROS AND MACRO SOURCE PROGRAMS MUST BE IN MAC DIRECTORY +REM M370 REQUIRES MACROS IN CURRENT DIRECTORY +COPY M370.COM MAC +COPY E370*.EXE MAC +CD MAC +M370 DEMOMAC1 +CD .. +A370 MAC\DEMOMAC1 +L370 MAC\DEMOMAC1 +PAUSE NOW RUN DEMOMAC1 +MAC\DEMOMAC1 +PAUSE NOW PRE-PROCESS, ASSEMBLE, AND LINK DEMOMAC2 +ERASE MAC\DEMOMAC1.ALC +ERASE MAC\DEMOMAC1.OBJ +ERASE MAC\DEMOMAC1.COM +CD MAC +M370 DEMOMAC2 +CD .. +A370 MAC\DEMOMAC2 +L370 MAC\DEMOMAC2 +COPY MAC\DEMOMAC2.MLC DEMOMAC2.DAT +PAUSE NOW RUN DEMOMAC2 +MAC\DEMOMAC2 +COMP DEMOMAC2.DAT DEMOMAC2.TST +ERASE DEMOMAC2.DAT +ERASE DEMOMAC2.TST +ERASE MAC\DEMOMAC2.ALC +ERASE MAC\DEMOMAC2.OBJ +ERASE MAC\DEMOMAC2.COM +ERASE MAC\E370*.EXE +ERASE MAC\M370.COM + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/BAT/RUNUTIL.BAT b/PC370_orig/Diskette/full/BAT/RUNUTIL.BAT new file mode 100644 index 0000000..808190a --- /dev/null +++ b/PC370_orig/Diskette/full/BAT/RUNUTIL.BAT @@ -0,0 +1,25 @@ +REM RUN UTILITY DEMO'S +REM PC/370 SYSTEM PROGRAMS MUST BE IN CURRENT DIRECTORY +PAUSE DEMO SEE.COM FULL SCREEN EDITOR +COPY UTIL\ONEBLANK.ALC DEMOSEE1.ALC +COPY UTIL\DEMOSEE1.KSF DEMOSEE1.KSF +SEE DEMOSEE1 DEMOSEE1 +ERASE DEMOSEE1.ALC +ERASE DEMOSEE1.BAK +ERASE DEMOSEE1.KSF +COPY UTIL\ONEBLANK.ALC DEMOSEE2.ALC +COPY UTIL\DEMOSEE2.KSF DEMOSEE2.KSF +SEE DEMOSEE2 DEMOSEE2 +ERASE DEMOSEE2.ALC +ERASE DEMOSEE2.BAK +ERASE DEMOSEE2.KSF +REM DEMO PRINTDOC.COM TO PRINT READ.ME +PRINTDOC READ.ME +REM DEMO T370.COM OBJECT CODE TRANSLATOR +A370 DEMO\DEMOPD2 +T370 DEMO\DEMOPD2/L +TYPE DEMO\DEMOPD2.HEX +ERASE DEMO\DEMOPD2.OBJ +ERASE DEMO\DEMOPD2.370 +ERASE DEMO\DEMOPD2.HEX + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/CBL/CALL370.CBL b/PC370_orig/Diskette/full/CBL/CALL370.CBL new file mode 100644 index 0000000..cd4005f --- /dev/null +++ b/PC370_orig/Diskette/full/CBL/CALL370.CBL @@ -0,0 +1,25 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. CALL370. + **************************************************************** + * CALL370 is a test program for the subprogram "TEST370". * + **************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 D-DATE PIC 9(6) VALUE 082987. + 01 X-DATE PIC X(6) VALUE '082987'. + 01 P-DATE PIC 9(15) USAGE COMP-3 VALUE 082987. + 01 C-DATE PIC 9(6) USAGE COMP VALUE 082987. + PROCEDURE DIVISION. + SET-UP. + DISPLAY "CALL370.CBL STARTING TEST OF TEST370.BIN". + CALL-370. + CALL "TEST370" USING D-DATE, X-DATE, P-DATE, C-DATE. + DISPLAY "BACK FROM FIRST CALL RC=" RETURN-CODE. + CALL "TEST370" USING D-DATE, X-DATE, P-DATE, C-DATE. + DISPLAY "BACK FROM SECOND CALL RC=" RETURN-CODE. + END-JOB. + DISPLAY "THAT'S ALL FOR NOW". + EXIT PROGRAM. + STOP RUN. diff --git a/PC370_orig/Diskette/full/CBL/CALL370.IDY b/PC370_orig/Diskette/full/CBL/CALL370.IDY new file mode 100644 index 0000000000000000000000000000000000000000..0e4a0bdd932e161be6dcd184150b41b005e804d2 GIT binary patch literal 3584 zcmds3ZA?>F7=G`)c#DPhfx!JPtrtx$?6Mgx>mq1aMvi!l5%5e#ITEC}2FxRjX~ zN|WvWS>m!O9rK4-GNV71%$YbpqG8FB4dai6Fk{rX+mS3zqfVW&=iJ^(J8;p&?1!g$ z?s?C1p7Wmbo_p@wsj*_-ETS=MCR%Um|b&WMv+q$*3wd>LED4V&vN`WFOw{$CnxRDR=7jN-n!7zq2X}B5GMSqG8j{&mo5P8F z`k~W4kJJIr-{Sh8f6PlYVnq7#uypQ%_{)3>RempVeH?2<^%z-RW9glxcJ?Nahba@t z0*x%k%Rm8uEXX6P^EO~DPyuWLssRU31JnaefC{t%Zvb7uJ3t?BS_iY=2SUIgpa2Je zC~yQg27C*g0KPL9R7G+lUVb=KG$B1YbXS~^xPD=Bo}%16AA&JgQHDe235h?XDIOl$ zl-?^$E?1PtqkDzPN=3PUXYAtG*l=Rt6*f+-VR6$s_F(y$B=&ffJv443v#@mH%bWSypT0&|ItPSnWO}6NS7+E?l3gbC6G9iXxMz4Um zEUp<}Oe0soTo%u%W=QSP>*%-|mtIH5RWYi9xe=GDU~WKqZAWvHCyMnfH5oJ?k|7N9 zi#)@|(N?@ND!*jVFCExx7WC|8W#UhVb#FJ_`WbBC8rf6yiUf_NFQZ z#a3OBp(z#+MN<@(55*>3!Oq?v$JwRqY>FgzKy>O76C|DNw(wK3;$Cut77b+hUBPC5 zqt)rF)f4`;Y|1At|KGZR&mXkL#c+%QolIPHiY{khP7t@k*W-!~92KrBMX+cfv&rvn z3|a#%?x3?iuG>M&h*MH^gPGcdURNOCsMA-rf|e6^GDWv^z^v&uyFD&zz}==Rf6Jx< z;%>|;^&-+F>Gf>948Cwysnh3AmcnZhR-98H23$dFGrnQ%dzb^xsJ&~}w8-h~s913` zCd$U$1lK@rG*>pb8f&c$KAa{CBMldC9us5V{23F-TQ93+j-p83{#$E)xO*Yg$KM-^ ztUE4+bHW~8wbzGp!(M)m5c{l3iG6+(0~%#nYed1OkXEM%W@_lY4 z_OV-S>G1kx_1A_YSx54mjPULS@`Hn!7R~>AK9+e7C52-^gp`glme&nchM8+&8MPakW=37cD6n^vAErdw59yBpn$HauTR#=vwlBh|SWuc^$t+2MF9@>O7ftZNWYP<<} z(4)s5J$h>Nrk*hM;K_rv3EUdPp~prKT~9cJ3)(bIJV+1iH@o}Zd^7LcH_6+#GsS$l zMB}CW!xgIPQ9b38>D+R8rC7R0{a(rI57CtDm1ueSQL#fxvg~rs<+NGFx3D1j0+JMv z6`Dv#uSwyc6r5n|N`M}K%c&}Bgx|0+ zBeHwIn%kLmSUxwn!yc0WWSq||3|jG{U4mJ{?lBg69^BSoG8X_Y@;z+}aH;FH+hYX* z5MfAQv3I8LR`|Z7Lba9?cg^oV&Alr29Da0w+S(Hvkl59#P;)@mIABy=pW?vxbr} zlIa9Bw5&n(c*nAm_ePWHMyoEgD()5$p#>sokW&Y&A9UcnI@M+t)%!5cV<3Py1XXK@E}xP%3~kE>W` zV-+7`1)t*!T*H_63SZ+}e24G*RjYl`4Z|RuhRYC!>rf!9pPek&H$H4`{@B|+S*PBA dS|TncGq=-}v&7Nuf1N4Vc`xI?ZN7L6@eAYac@h8s literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/CBL/CALLCIO.CBL b/PC370_orig/Diskette/full/CBL/CALLCIO.CBL new file mode 100644 index 0000000..d05fc17 --- /dev/null +++ b/PC370_orig/Diskette/full/CBL/CALLCIO.CBL @@ -0,0 +1,23 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. CALL370. + **************************************************************** + * CALLCIO is a test program for the subprogram "TESTCIO". * + **************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 FILE-NAME1 PIC X(64) VALUE 'CALLCIO.CBL '. + 01 FILE-NAME2 PIC X(64) VALUE 'TESTCIO.ALC '. + PROCEDURE DIVISION. + SET-UP. + DISPLAY "CALLCIO.CBL STARTING TEST OF TESTCIO.BIN". + CALL-CIO. + CALL "TESTCIO" USING FILE-NAME1. + DISPLAY "BACK FROM TESTCIO.BIN RC=" RETURN-CODE. + CALL "TESTCIO" USING FILE-NAME2. + DISPLAY "BACK FROM TESTCIO.BIN RC=" RETURN-CODE. + END-JOB. + DISPLAY "THAT'S ALL FOR NOW". + EXIT PROGRAM. + STOP RUN. diff --git a/PC370_orig/Diskette/full/CBL/CALLCIO.IDY b/PC370_orig/Diskette/full/CBL/CALLCIO.IDY new file mode 100644 index 0000000000000000000000000000000000000000..9eb0567fac611a83aee0149d67066ef98f3773c6 GIT binary patch literal 3584 zcmds3UrbY182@fB++v|EAhZgKcay0T3#EwSpD3kPEw&U}5T-ARXht?ACTg4yo}1q} z-}%n(obP<+p6|QYdAQ}!zK+&5x#jS|);5SOt%v1+`#alZm%qyIEpf=Z4z#uN11l}I7nhdHUPrNA zZaZ+KMOE4z4x?dLqr28wvU|6^q|9zFb2#N~HB~nIn$`BzYccLDd-Rlz25z`)t^LuV zxTd1QUW%up9E+5%)mTQu8ngvm{yU)vsos&wfd6FW%VW`O$Z&zy#UWfld+bp_ zKLafZS7xU9d5~QB;3%F{B62uz^h>Z#C4hIuFFrRd@XOD)!9gUeHC-CcjQ8W+m!lTc z`#Q%LoncP*i8`k=mhjIL(O&>by-F{@4mTlunZ%HgNT*50;;Pwbcr1hH$HXN}#!^XGp8x+%3>Op#-LXt&B{m^2NepfJ&Mb7E*9`K!#?w1b?L7Q> zI?n(ypYKq0UKSOwUD)j$QX5vT;5KozhZsEvOGbd8Wd0e(dv^EtSz8wJLJKLG@j zZW3cD0Bnjm0Bnkj0pwHN7r@u1!p-5_uusbotCV)tS!TTyOb3_+NuDE%SR zs9D#iGVb?nOluQkOBH4M(or$CNl_+l4gWGc+@F{@#^65S@Q-;DOt3DEye%Lf2v3K^mYPU?@ z91L5mdT{%lMZfyDdC?}(< z+$S-|q$uyHHOr=`X^Le~)H1~+VoNESKgEJmmm2ZPsQj{C`{}@0bAOYU6^V}yAKq*H zOHdC;<>nnXZ1s5Ewi>6;T}s50Yh*M3sXF#p8a_+uaoPf+j~=Fd^KggqyV3*hy81wk z&E?1D={X zTd=`X=fZX7Wgp2T)X(J|&rl8e+`*u8o3^v%xIaQ@4zHlgr1I1Q3VL>H%-^%)kb5Y}I~Ti5#xfzfUwDF@XroL35ob7i9d^S5W;qlcWMnCo_;S1^CcZ$(&j}raR!y1}>0h#?)eL54D8P}8DF9W|H zgOPh@rD*qkR^D6##<^;B$!PvgR@m%^;*6$Pypzpu4tfLZQ%$jCC(|_tYkll^b!5<7 zc)pkQy2ZlHhKmD(=F>8)7!`$Ei_U|QsqLz0f~fOEdAh3vP>{t;@UaCs4^0PA7Mim} z*=WwikKu0Ie;l9%jw4}M%|A=uj!0jn(d5m~*wH3;qa!+UmvuC`>I1!q%`oDz2N@tV zLD+^GpbPZ~a)Y9TEeq8l#PSf+6DuLs0BK!QeXTu_8%Aa0T5kmVLGn@u;(6?pRlnh1Va8+m literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/CBL/CALLCIO.INT b/PC370_orig/Diskette/full/CBL/CALLCIO.INT new file mode 100644 index 0000000000000000000000000000000000000000..aded833aad76e03d3a7dcc4a44dfe4b9a0c64f9c GIT binary patch literal 2304 zcmd^9OKTHR6h3qAOcK(EE%<<#$`zumqRHePP%)D+NkgWYnv6BnMTJl>2nJJhoy3KI z!QbGbzacdWx;0j&;3BkHx)2nag%Iyer?paCX+qKO&Yg44ch76!&RHmzsuh~5l%A|n zRZr-eFF==8t83-TBkK3cUVoTs0k2G}t53@VQVs+roJ+;zqT*X#mVH544h9sO&LytO zk&qmUvU4R!k6^;7Dw-CI%12HtA{LYVY{kMXNjPee6VBhc{}mo61whyXVM1ctX4!To z9hS}o(by{vAe`csg-I*^(muhY!1f#qJp(Rlu{17#v)rd|0cQ5Ke*f}I5fEWoWU=?M z4{O|SRH!$KW37#LyY=p4w)LtVZ-nAwJ8!mkxV_PCal0-y9B}Z|9S5oa!t+t}IjlO{ zB>?y9`+aaX-ve~a59t+Ezm+T`4FVTo7Eb@dT;R+W2xeys#7<9Y&hlHWW^}Kb&}hL> z@@t}#Hu#2DZ8-6Du87C)+o6L}N!@8$K z%Nv17I05G&0@vUH><+EYF->ge!|&_vmt)%ANZJyll}!Flj`CuHV}Je)OtAA=#%9=_ J#XbHl`~ae$hARL7 literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/CBL/CALLSQA.CBL b/PC370_orig/Diskette/full/CBL/CALLSQA.CBL new file mode 100644 index 0000000..0a4582a --- /dev/null +++ b/PC370_orig/Diskette/full/CBL/CALLSQA.CBL @@ -0,0 +1,25 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. CALL370. + **************************************************************** + * CALLSQA is a test program for the subprogram "TESTSQA". * + **************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 ADDR-MEMORY PIC 9(9) USAGE COMP VALUE 0. + 01 LENGTH-MEMORY PIC 9(9) USAGE COMP VALUE 0. + 01 REQUEST-MEMORY PIC 9(9) USAGE COMP VALUE 1024. + PROCEDURE DIVISION. + SET-UP. + DISPLAY "CALL TESTSQA.BIN TO GET NEXT FREE SQA BLOCK". + CALL-370. + MOVE REQUEST-MEMORY TO LENGTH-MEMORY. + CALL "TESTSQA" USING ADDR-MEMORY LENGTH-MEMORY. + DISPLAY "RETURN CODE =" RETURN-CODE + DISPLAY "MEMORY ADDRESS =" ADDR-MEMORY. + DISPLAY "MEMORY LENGTH =" LENGTH-MEMORY. + END-JOB. + DISPLAY "EXITING TESTSQA NOW". + EXIT PROGRAM. + STOP RUN. diff --git a/PC370_orig/Diskette/full/CBL/CALLSQA.IDY b/PC370_orig/Diskette/full/CBL/CALLSQA.IDY new file mode 100644 index 0000000000000000000000000000000000000000..0cd2ad4e59236e1ca755992b4b08023d8d90c7cf GIT binary patch literal 3584 zcmds3ZA?>F7=G`)dW*&OfmL)SWS>kD) zd*1V$=e*~~#(c1^Jr+2Tsqi6Sa`8h4qx+qb&WkiPGbem|d zPES_Zbxw~b(CRF!tMw2G=e<4K`g-LJz1#Nhlk0r7K2Nz_-n6}MAKS2sGFw?irR=en z+2p?Mul8u9&2BdtH+8sLoaLRJwsMEf=CC{EhUQwUZPiNK%GKz1Ix=_JWMmUNR@*YW z5=>Qgj-}w+*PXbemQDC?1Q6I0tL##jKC7 zOcJO$U>SxMP@(>Vn|Va@nPx&SRFt$PCSJ6Q#PgIp4P#&0xGThT$?{C%oOD9d*rV_rb}2_V_Ar$c6R+)I-d#T zfJQcEcY!YfmI5mPWH5duPz9_5)&owU7H9-ofKi|W*aGYXb^~APVD`(v>p%!N3@E_6 zKnyqmoB~b*p8;Q)OKPI|Q7=CbDjks?9=j`!NZfv5e3qizy%>TqLs14o<`IcMrYRmA zTbI=*j4x7@N0$!>3vWLd4W!5f$%jm<$n1fgyB{ z`i1eCin7)+*YKJ!Zd8;gEY@}KK3z}^q?VJ~4r@(UTZ=6=B1VgbMPWFP21mpQ%-ATH zYvS_Z`7}5R=9+jxHA8BTjiKXuLOOtaj=b2A}T!Q6!O#@4nLPYmlRG8r@HWYc0NYmworw8#hhJaYEyMuK&`mAil8REj}y2CTI3B9gBz}cX$Yze(U+^1=}qOe)hZE$;B)_}WHSN@ty zi-`MaN~sr-rbx$fsRZx#DW!Ejf2tH-7h}13C1Su8w6@{WYPVoIIHUIGvZh7OVrRpO zFH)8dkc~y+&g9DmS986!$%o@(VPsk}mkd{Kof6|;{2mv`+bF9JXKA$H(Cy{l-Mtj* z=l>jvt~xD6@**BywKqocBVK-=5P!c$iGOel1Da)7UQQi>ZM$Gf5nvKN55?@6K6Io2c^+#gLMfD2N zEL3k2%|?X`l!xjDQNBc6K2ZUxw2QcfjLU-_wcWR+aA#w0PCSO|g?w$+;uy5tmR>W4t(cQaT}H7L%f|+2S)W P$-_p?G{fZG*n@unbMsiQ literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/CBL/CALLSQA.INT b/PC370_orig/Diskette/full/CBL/CALLSQA.INT new file mode 100644 index 0000000000000000000000000000000000000000..fbd4927d80fb959aa81c4a4602574f1374b2e697 GIT binary patch literal 2304 zcmds1&ubGw6n^uv+pNJ<1EOG48Nna5XtLQ&(trwXl4&+H*{z#xjrGt%C^WPfO;J21 z@t{YK9zA+0>d9lJ9z0tM$t_6!0KtQ~#o2aKDpfBnE$ufu`)1yI-+OQ1&E(6aYK4wh zN>7$)%1oNMutKNjtIOreLmCOmp-7D8l#ooT^H0m0N?B3-zUd;H)WS0}a#)pRRnch1 zNZyd+Q8_xs?V3t=!S73HxtuyC@3OdxL_&`6k%*~^lIREU`~Ky=FM6O90AULrE<`>D z+`X4e$z3}F+x&MKfT+&S#h}ZN^%YzaKCf}=IT&&W4|5(M==k(pz=i&**Bey^01*NL z=RTNNtT}!Mg?eLwA6$UC(2!vJt4rHU0_4R(6>|uAzLx-oKhO1Gc=anlyZJ3Mn=;d^ zz-$j(g%LRWhvtf-X#r`rTOhQ%;_9f=)zoGMyKq+vC9?*#O`2ggHCWN6;}&C-8)!0T zrY4#V9d*)K#ZE2QAv*9$x&x-g>?zCOmoLqnroP=+3wWPD7K$D*u(KE^^-xz71Ww7b zylLI1S~_j9LV;6skT~JQ-w4tULXH_3TX%BkgGlibj^K5aF^UPig?CWHBK}Zx)7{}k+x9j9eF+>;?Y%>rG6}X~ShajHmD4M#W(Bq~U=uvq9z;n8e3qD^mv@kWLmbxY&O7$aoCvh3ByJwmI!lh+Xl zw2dKSkPz=17w8W}Xg{mcXKC{qH8;-KE#riQ>j8C#uqc(%H9iQY7o*(?%ToEU#{-K` zN{7O;gv4K0-ZsdTuS6L-w`%%hELfGk9?B;70Y_VZR3eiGV9S?8yH%e44TX10q+B_7 z3eIsb!NCP5&JPs6}DdjFJ>mzGrFG1E@LGt<6IgiWjU|tI@U6J0WW0=Sjp#e`JlP` zYj1Za6_S$$rHVG}!8dy#+k>R0VX8{vbVku+Tu}6aj`i(Sin^q?wL8HTMbmOPozJaT OlD~J%VEHZo*Z&W{1%SB# literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/CBL/TESTCIO.ALC b/PC370_orig/Diskette/full/CBL/TESTCIO.ALC new file mode 100644 index 0000000..202c2ee --- /dev/null +++ b/PC370_orig/Diskette/full/CBL/TESTCIO.ALC @@ -0,0 +1,330 @@ + TITLE 'TESTCIO - PC/370 TEST COBOL SUBROUTINE I/O' +* +* AUTHOR. Don Higgins. +* DATE. 11/13/87. (Copied and modified from PRINTDOC.ALC) +* REMARKS. PC/370 COBOL SUBROUTINE TO READ FILE NAME PASSED FROM +* COBOL and print it with page control. +* +* COPYRIGHT. None. This is a public domain program. +* +* MAINTENANCE. +* +* 11/20/87 ADD SYNERROR CALL TO DISPLAY ANY I/O ERRORS AND EXIT +* RELOCATE ROUTINE REQUIRED TO CONVERT DCB AND EXTERNAL +* ADDRESS CONSTANTS TO V=R. CLEAR R15 RETURN CODE. +* INPUT +* +* 1. CALL 'TESTCIO' USING FILE-NAME. +* +* FILE-NAME = MS-DOS DRIVE\PATH\FILENAME WITH TRAILING BLANKS. +* +* OUTPUT +* +* 1. File will be printed on the standard printer device with +* page control added via TITLE, EJECT, and SPACE statements as +* defined in standard OS/VS assembler. +* +TESTCIO CSECT + STM R14,R12,12(R13) + LR R10,R15 + USING TESTCIO,R10 + L R1,0(R1) + MVC DSNUT1,0(R1) MOVE FILE NAME TO WORK AREA + LA R2,=C'PC/370 TESTCIO FILE PRINT SUBROUTINE$' + SVC WTO + LA R2,=C' $' + SVC WTO + BAL R14,RELOCATE ADJUST DCB ADDRESSES TO ABS. ADDR. + BAL R14,GETPARM + LTR R15,R15 + BNZ EOJ + BAL R12,OPENFILE + LTR R15,R15 + BNZ EOJ + LA R1,ASCTITLE + LA R2,L'ASCTITLE+L'ASCEJECT+L'ASCSPACE + SVC EBCASC + LA R2,=C'ENTER P FOR PRINTER OUTPUT OR ANY KEY FOR CONSOLE$' + SVC WTO + SVC READKEY + STC R0,OPTION +MAINLOOP EQU * + BAL R12,GETREC + LTR R15,R15 TEST FOR END OF FILE + BNZ ENDFILE + BAL R14,SCAN + LTR R15,R15 TEST FOR COMMAND AND SKIP PRINTING IT + BNZ MAINLOOP + AP LINE,=P'1' + CP LINE,MAXLINE + BNH NEXTLINE + BAL R11,NEWPAGE +NEXTLINE EQU * + LA R0,RECORD + BAL R12,PUTREC + B MAINLOOP +ENDFILE EQU * + BAL R12,CLOSEFIL +EOJ EQU * + LM R14,R12,12(R13) + XR R15,R15 + BR R14 + TITLE 'GETPARM - MOVE PARM TO DCB' +GETPARM EQU * + LA R1,DSNUT1 + LA R2,L'DSNUT1 +FNDBLK EQU * + CLI 0(R1),C' ' FIND FIRST BLANK + BE HITBLK + LA R1,1(R1) + BCT R2,FNDBLK + LA R2,=C'NO BLANK FOUND AFTER FILENAME$' + SVC WTO + LA R15,16 + BR R14 +HITBLK EQU * + MVI 0(R1),0 PLACE TRAILING NULL FOR OPEN + SR R15,R15 + BR R14 + TITLE 'SCAN FOR TITLE, EJECT, AND SPACE COMMANDS' +SCAN EQU * + CLI RECORD,ASCBLK + BE SCANOP + CLI RECORD,ASCTAB + BNE SCANEXIT EXIT IF FIRST CHAR. NOT BLANK OR TAB +SCANOP EQU * + LA R4,RECORD+1 +SKIPBLK EQU * + CLI 0(R4),ASCLF + BE SCANEXIT + CLI 0(R4),ASCBLK + LA R4,1(R4) + BE SKIPBLK + BCTR R4,0 + CLC 0(5,R4),ASCTITLE + BE TITLE + CLC 0(5,R4),ASCEJECT + BE EJECT + CLC 0(5,R4),ASCSPACE + BE SPACE +SCANEXIT EQU * + SR R15,R15 + BR R14 +TITLE EQU * + LA R4,5(R4) +FINDQ1 EQU * + CLI 0(R4),ASCBLK + BL SCANEXIT IGNORE TITLE IF FIRST QUOTE NOT FOUND + CLI 0(R4),ASCQ + LA R4,1(R4) + BNE FINDQ1 + LA R3,TITLEMSG + LA R5,TITLEMSG+L'TITLEMSG +FINDQ2 EQU * + CLI 0(R4),ASCBLK + BL SETTITLE TRUNCATE IF SECOND QUOTE NOT FOUND + CLI 0(R4),ASCQ + BE SETTITLE + CLR R3,R5 + BNL SETTITLE TRUNCATE IF TOO LONG + MVC 0(1,R3),0(R4) COPY TITLE + LA R3,1(R3) + LA R4,1(R4) + B FINDQ2 +SETTITLE EQU * + CLR R3,R5 + BNL EJECT + MVI 0(R3),ASCBLK PAD WITH BLANKS + LA R3,1(R3) + B SETTITLE +EJECT EQU * + BAL R11,NEWPAGE + LA R15,1 + BR R14 +SPACE EQU * + LA R0,SPACEMSG + BAL R12,PUTREC + LA R0,SPACEMSG + BAL R12,PUTREC + AP LINE,=P'2' + LA R15,1 + BR R14 + TITLE 'NEWPAGE - PRINT HEADING' +NEWPAGE EQU * + AP PAGE,=P'1' + ZAP LINE,=P'0' + MVC DPAGE,MASK + ED DPAGE,PAGE + MVC PAGEMSG,PAGEWORK + LA R1,PAGEMSG + LA R2,L'PAGEMSG + SVC EBCASC + LA R0,HEADING + BAL R12,PUTREC + MVI HEADCC,ASCFF FORCE FORM FEED AFTER FIRST PAGE + LA R0,SPACEMSG + BAL R12,PUTREC SKIP SPACE AFTER TITLE + BR R11 + TITLE 'OPEN/CLOSE FILE ROUTINES' +* +* NOTE SYNAD EXIT WILL CALL SYNERROR TO FORMAT ERROR AND EXIT TO R12 +* +OPENFILE EQU * + LA R2,SYSUT1 + SVC OPEN + BR R12 +CLOSEFIL EQU * + LA R2,SYSUT1 + SVC CLOSE + BR R12 + TITLE 'GETREC - GET NEXT TEXT RECORD OR SET EOF' +GETREC EQU * + LA R2,SYSUT1 + LA R1,RECORD + SVC GET + SR R15,R15 + BR R12 +EOFRTN EQU * + LA R15,1 + BR R12 +SYNRTN EQU * + L R15,ASYNERR + BALR R14,R15 + LA R15,16 + BR R12 + TITLE 'PUTREC - PUT RECORD TO STD. PRINT DEVICE' +PUTREC EQU * + LR R4,R0 +PUTLOOP EQU * + IC R2,0(R4) + CLI 0(R4),ASCTAB + LA R3,1 + BNE PUTCHAR + LA R3,9 + LA R2,ASCBLK +PUTCHAR EQU * + SVC CONSOLEC PRINT ON CONSOLE + CLI OPTION,ASCP + BE ISUSVC + CLI OPTION,ASCPL + BE ISUSVC + B PUTSKPP +ISUSVC SVC PRINTC PRINT ON STD. OUTPUT DEVICE ALSO +PUTSKPP EQU * + BCT R3,PUTCHAR + CLI 0(R4),ASCLF + LA R4,1(R4) + BNE PUTLOOP +PUTEXIT EQU * + SR R15,R15 + BR R12 +RELOCATE EQU * CONVERT DCB ADDRESSES TO ABSOLUTE ADDR. + CLI RESET,TRUE ONLY RELOCATE ONCE + BER R14 + MVI RESET,TRUE + LR R1,R10 + SH R1,=AL2(X'200') R1 = ORIGIN USED BY L370 (BIN+X'10') + LA R2,SYSUT1 + USING IHADCB,R2 + LR R0,R1 + A R0,ASYNERR R0 = ABS. ADDR. OF SYNERROR ROUTINE + ST R0,ASYNERR + LR R0,R1 + A R0,DCBDSN R0 = ABS. ADDR. OF DSN + ST R0,DCBDSN + LR R0,R1 + A R0,SYNAD + ST R0,SYNAD + LR R0,R1 + A R0,EODAD + ST R0,EODAD + LR R0,R1 + A R0,RCD + ST R0,RCD + DROP R2 + BR R14 + TITLE 'DATA SECTION' + LTORG +* +* REGISTER USAGE +* +R0 EQU 0 SVC RETURN CODE +R1 EQU 1 SVC ARGUMENT +R2 EQU 2 SVC ARGUMENT (DCB ADDRESS, DMA, MSG, ETC.) +R3 EQU 3 POINTER FOR MOVING TITLE +R4 EQU 4 OUTPUT BYTE PTR FOR PUTREC +R5 EQU 5 END OF TITLE AREA +R10 EQU 10 BASE +R11 EQU 11 LINK FOR NEWPAGE +R12 EQU 12 LINK FOR GETREC AND PUTREC +R13 EQU 13 SAVE +R14 EQU 14 LINK FROM MAINLINE TO ROUTINES +R15 EQU 15 RETURN CODE FROM ROUTINES +* +* PC/370 SVC'S +* +EXIT EQU 0 +OPEN EQU 1 +CLOSE EQU 2 +GET EQU 5 +PUT EQU 6 +TRACE EQU 9 +GMAIN EQU 10 +FMAIN EQU 11 +ASCEBC EQU 12 +EBCASC EQU 13 +READKEY EQU 200+1 MS-DOS SVC 1 READ KEY +CONSOLEC EQU 200+2 MS-DOS SVC 2 DISPLAY CHAR IN R2 ON CONSOLE +PRINTC EQU 200+5 MS-DOS SVC 5 PRINT CHAR IN R2 ON STD. PRINTER +WTO EQU 200+9 MS-DOS SVC 9 PRINT STRING WITH ENDING $ ON CON. +* +* DATA AREAS +* +RESET DC AL1(FALSE) SWITCH TO RELOCATE CODE ONLY ONCE +TRUE EQU 1 +FALSE EQU 0 +TBUFF EQU X'80' BUFFER FOR DIRECTORY SEARCH +ASYNERR DC V(SYNERROR) SYNAD ERROR MESSAGE ROUTINE +RECORD DS XL256 LOGICAL RECORD AREA +ASCLF EQU X'0A' ASCII LINE FEED +ASCCR EQU X'0D' ASCII CARRIAGE RETURN +ASCASK EQU X'2A' ASCII ASTERISK FOR ALC COMMENT CHECK +ASCBLK EQU X'20' ASCII SPACE +ASCQ EQU X'27' ASCII QUOTE +ASCTAB EQU X'09' ASCII TAB +ASCFF EQU X'0C' ASCII FORM FEED +ASCP EQU X'50' UPPERCASE ASCII P +ASCPL EQU X'70' LOWER CASE ASCII P +OPTION DC X'00' +ASCTITLE DC C'TITLE' +ASCEJECT DC C'EJECT' +ASCSPACE DC C'SPACE' +PAGE DC PL2'0' +LINE DC PL2'50' +MAXLINE DC PL2'50' +MASK DC X'40202020' EDIT MASK FOR PL2 +HEADING EQU * +HEADCC DC AL1(ASCBLK) +TITLEMSG DC 0CL65' ',65AL1(ASCBLK),2AL1(ASCBLK) +PAGEMSG DC 0CL8' ',9AL1(ASCBLK) +SPACEMSG DC AL1(ASCCR,ASCLF) END OF HEADING +WORK DC 0CL20' ' +PAGEWORK DC 0CL8' ',C'PAGE' +DPAGE DC CL4' ZZZ' +DSNUT1 DC CL64' ' + COPY CPY\IHADCB +TESTCIO CSECT +SYSUT1 DC 0F'0',C'ADCB' + DC A(DSNUT1) PATH/FILE NAME IN PARM + DC X'FFFF' + DC X'00' + DC C'SGT' SEQ. GET TEXT + DC X'0A1A' + DC H'255' LRECL + DC H'8192' BLKSZ + DC A(EOFRTN) EODAD + DC A(SYNRTN) SYNAD + DC A(RECORD) RECORD AREA + DC XL(SYSUT1+LDCB-*)'00' + END TESTCIO + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/CBL/TESTCIO.BIN b/PC370_orig/Diskette/full/CBL/TESTCIO.BIN new file mode 100644 index 0000000000000000000000000000000000000000..77156939a741fa49e8134631763546177826e12d GIT binary patch literal 3072 zcmd^AUu;uV7(b`CUD;(wfjJu>4p3c2phnMjis*3$x z2ZheAL;H6@oP)6>-hlA*`8;E|S1csORWqT$)0jV?U4HDJey zwvoxD(E+ab84^dPmrj1bm0lOc;g$~k6&`|qbMi`s8*l%xHPNwd;&c2qSNs@>7otyB z&bQhzcayu>K5TCvK5SVU8Q@B%Me$0dQqL~EDgwLx>^2T{?>x;JU=uX7?8fm1J8mm-<%P8pf4tG;{IYiiLdosYfCIUOP?n#8KFQB`Zik-r+zy;y zS@HG<&Uq$-lO}RIB%516%lT!%3-B|%x&uj8(BEMCGhp*IL%u&8QcEcF`wFQ=a(ZtB zPI)c|&$&^Uat*H$@WD8J31;v_#a;%l1K^eTi352D17EmTAlxYgMj^&In2~`T_VOrl zpf$kt3t=m8;{HY$`vYY+3ETWUp?07n$h`|;z}FgxW+h0nc?W|QhIl|n7+MbKHR=nv zHfrM~VEbg%wm;b5c1i2p-O^E07xYmb*!Ujb>b)HFC6NmOcQe8)mJwXf_Zkd`5ll&mF5JX6qOM2_o9j>OfJqRDBc zPtoXS7L?HERQ8oA=-Gl!Kq70iB&p0YZ8W3hGbyEy^ff)RHXA+m>u(0pmAoERGt8Z7 zPV$9F4jibO(uY{HJIwKa-0P~IQj{4bs^_zER6$KPc!=;Hw`F`*o>EA$SS0_lL8;_e zG=fmWK&686Q#!vIRRoZ7x8N-x1b>Hr*hH&w(d{zsy9sLfc9jcGyzvyA@}^E=G`R)i zJ$~jAFzn@|-T203-HVKOeH^kl9qtuBUrMer;&6kyjN4${+`AH4=`8^gxXI{E;Rg)< zPJpldqkV8s2*#)UjMp&M!(^NDvzi~8jBcKY>NZ`l9-Obo=^h_ z1bI$@`J)|7o>z22&~}EI99!{sz`2`Kbp;V7XBgWoyFflg`MAMy5imX51lzeLz%eBS zcnQOC6|M)|$Z!s(N#qoDJqrn-UuK(@wOC4F+0zOsFop)SXo{qCl2+$=g*;pYV6#xyEPh!Oi$EJ)s$5!rznIjAg!b`x!Gz}{vxjFp%#%%53avtzPMn1 zrtDGP{N8wdDsb-UFHu+S!C`?mAD5j-vzoOcR%^<5e**FQzAyj) literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/CBL/TESTCOM.ALC b/PC370_orig/Diskette/full/CBL/TESTCOM.ALC new file mode 100644 index 0000000..52b5938 --- /dev/null +++ b/PC370_orig/Diskette/full/CBL/TESTCOM.ALC @@ -0,0 +1,7 @@ +TESTCOM CSECT + USING *,15 + LA 2,=C'HELLO FROM 6 LINE COM PROGRAM$' + SVC 209 + SVC 0 + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/CBL/TESTSQA.ALC b/PC370_orig/Diskette/full/CBL/TESTSQA.ALC new file mode 100644 index 0000000..65c1e3c --- /dev/null +++ b/PC370_orig/Diskette/full/CBL/TESTSQA.ALC @@ -0,0 +1,44 @@ + TITLE 'TEST SYSTEM QUEUE AREA MEMORY ALLOCATION' +* PGM-ID. TESTSQA.ALC +* AUTHOR. DON HIGGINS. +* DATE. 11/20/87. +* REMARKS. +* THIS PROGRAM MUST BE LINKED USING L370 OPTION B AND +* MUST THEN BE CALLED FROM MICRO FOCUS COBOL PROGRAM WITH +* THE FOLLOWING FULL WORD BINARY ARGUMENTS: +* +* 01 ADDR-MEMORY PIC 9(6) USAGE COMP. +* 01 LENGTH-MEMORY PIC 9(6) USAGE COMP. +* +* CALL "TESTSQA" USING ADDR-MEMORY LENGTH-MEMORY. +* +* AT ENTRY TO TEST370 THE 370 REGISTERS ARE SET AS FOLLOWS: +* +* R1 = ADDRESS OF ADDRESS LIST WITH HIGH BIT SET IN LAST +* WORD OF LIST. +* +* R13 = STANDARD SAVE AREA +* R14 = RETURN ADDRESS +* R15 = ENTRY ADDRESS +* +* IF SQA MEMORY IS AVAILABLE IN THE RESIDENT EMULATOR REGION, +* THE ADDRESS OF THE NEXT FREE BLOCK WILL BE RETURNED IN THE +* FIRST ARGUMENT AND THE LENGTH WILL BE RETURNED IN THE SECOND. +* THE SECOND ARGUMENT MUST BE SET TO REQUESTED LENGTH BEFORE +* CALL. A SHORT BLOCK WILL BE RETURNED IF REQUESTED LENGTH +* IS NOT AVAILABLE. +* +* +TESTSQA CSECT NAME CONTROL SECTION + USING *,R15 DEFINE BASE REGISER + LM R3,R4,0(R1) LOAD ADDRESS LIST PASSED FROM CALLSQA.CBL + L R1,0(R4) LOAD REQUESTED SQA BLOCK LENGTH IN R1 + SVC GMAIN ALLOCATE SQA BLOCK (R0=RC,R1=LENGTH,R2=ADDRESS) + ST R1,0(R4) STORE LENGTH IN LENGTH-MEMORY + ST R2,0(R3) STORE ADDRESS IN ADDR-MEMORY + LR R15,R0 SET RETURN CODE + BR R14 EXIT VIA RETURN ADDRESS TO DETACH AND CALLSQA + COPY CPY\EQUREGS COPY STANDARD R0-R15 REGISTER EQUATES + COPY CPY\EQUSVCS COPY ALL PC/370 SVC NUMBER EQUATES + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/CBL/TESTSQA.BIN b/PC370_orig/Diskette/full/CBL/TESTSQA.BIN new file mode 100644 index 0000000000000000000000000000000000000000..bc816a621f90e45b40d23e3901c3fb663091bfa1 GIT binary patch literal 640 zcmcIhKS.o2o&n4<}n8zhKAyhFL6gC|MEL2%I%v`Ox`_$Oiqhc4}A8*vddIGuOM z*QIo9$!LdCZn#{Q&=gVRK-xvf-$gw ztUGgh2A$cDJo=K|PIvZ5a0b-ANVgA2_=-|1qu^IGSABmv%WInea5#Wcn9>f z^DI8e@<_U*D_gv5ZF1>vdnBw;+Kl7J?C>RJY`MNbKwqqpaGg^5(-2g2i_LRoU)$Yz zW*&|`w)7}9Gr-&t13NlTDhQ`-XSEf_zGP;z80<$6!f{Hy_xFFh&G%Z8OLlLQ6<2^O z`{qGb{|zD=eK(@@5QJV6XVsV3ZW#C?qCI9~1REl@L~JJDXGl5?0b2rkD|nvdQ3^;j axT_BZ0jeVasg%y5J_#`Ti)XC=<^Ko49Mix6 literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/CPY/EQUREGS.CPY b/PC370_orig/Diskette/full/CPY/EQUREGS.CPY new file mode 100644 index 0000000..d96eea0 --- /dev/null +++ b/PC370_orig/Diskette/full/CPY/EQUREGS.CPY @@ -0,0 +1,20 @@ +* +* PC/370 REGISTER EQUATES +* +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +R3 EQU 3 +R4 EQU 4 +R5 EQU 5 +R6 EQU 6 +R7 EQU 7 +R8 EQU 8 +R9 EQU 9 +R10 EQU 10 +R11 EQU 11 +R12 EQU 12 +R13 EQU 13 +R14 EQU 14 +R15 EQU 15 + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/CPY/EQUSVCS.CPY b/PC370_orig/Diskette/full/CPY/EQUSVCS.CPY new file mode 100644 index 0000000..b19bab5 --- /dev/null +++ b/PC370_orig/Diskette/full/CPY/EQUSVCS.CPY @@ -0,0 +1,46 @@ +* +* PC/370 SVC EQUATES (SEE SVC.DOC FOR MORE INFORMATION) +* +EXIT EQU 0 +OPEN EQU 1 +CLOSE EQU 2 +READ EQU 3 +WRITE EQU 4 +GET EQU 5 +PUT EQU 6 +DELETE EQU 7 +SEARCH EQU 8 +TRACE EQU 9 +GMAIN EQU 10 +FMAIN EQU 11 +ASCEBC EQU 12 +EBCASC EQU 13 +SPIE EQU 14 +USERSVC EQU 15 +INSCOUNT EQU 16 +LOAD86 EQU 17 +TIME EQU 18 +ALLOCATE EQU 19 +DEALLOC EQU 20 +INBYTE EQU 21 +OUTBYTE EQU 22 +RENAME EQU 23 +DISPLINE EQU 24 +LOAD EQU 25 +ATTACH EQU 26 +DETACH EQU 27 +WTOEBC EQU 28 +WTOASC EQU 29 +WTOCR EQU 30 +WTONOCR EQU 31 +CVVASG EQU 32 +CVSGVA EQU 33 +INT86 EQU 34 +FPSSP EQU 35 +RELOAD EQU 36 +SVCTRAP EQU 37 +* +* MS-DOS SVC'S MAPPED INTO 200+ +* +WTO EQU 200+9 + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/CPY/IHADCB.CPY b/PC370_orig/Diskette/full/CPY/IHADCB.CPY new file mode 100644 index 0000000..b2c5eb7 --- /dev/null +++ b/PC370_orig/Diskette/full/CPY/IHADCB.CPY @@ -0,0 +1,49 @@ +**************************************************************************** +* +* IHADCB - I HAD A DCB DSECT FOR PC/370 RELEASE 2.0+ FILE DATA CONTROL BLOCK +* +* FOR MORE INFORMATION SEE SVC.DOC +* +**************************************************************************** +IHADCB DSECT +DCBDCB DS CL4 CONSTANT EBCDIC C'ADCB' DCB IDENTIFIER +DCBDSN DS A ADDRESS OF UP TO 64 BYTE PATH/FILE SPEC FOLLOWED BY ZERO +DCBFID DS H FILE HANDLE ASSIGNED BY MS-DOS AT OPEN (X'FFFF'DEFAULT) +DCBFLG DS X DATA CONTROL BLOCK FLAGS (ONLY DFTRAN MAY BE SET BY USER) +DFOPEN EQU X'80' FILE OPEN +DFUBUF EQU X'40' USER DEFINED BLOCK AREA (NO DYNAMIC ALLOC/DEALLOC) +DFOUT EQU X'20' OPEN FOR OUTPUT +DFGEOF EQU X'10' END OF FILE PENDING ON SHORT BLOCK +DFTRAN EQU X'08' TRANSLATE GET/PUT RECORDS FOR ASCII FILE +DFADCB EQU X'01' ASSIST DCB - DO NOT TRANSLATE 370 ADDRESSES +DSORG DS C DATA SET ORGANIZATION (R=RANDOM, S=SEQUENTIAL) +MACRF DS C DATA SET ACCESS MODE (R=READ, W=WRITE, G=GET, P=PUT) +RECFM DS C DATA SET RECORD FORMAT (F=FIXED, V=VAR, T=TEXT) +EOR DS X END OF RECORD CODE (DEFAULT IS LINE FEED X'0A') +EOF DS X END OF FILE CODE (DEFAULT IS CTL-Z X'1A') +LRECL DS H RECORD LENGTH (20 DUE TO EXCEPTION + STE FR0,WE0 + NI WE0,X'7F' + CLC WE0,=X'7F800000' ABS COMPARE WITH FP87 MAX CONSTANT + BAL R14,CCE + LA DE,=C'TESTSSP STARTING RANGE TESTS$' + SVC WTO +* SIN/COS/TAN RANGE TEST -2*PI,2*PI,PI/6 + LA DE,=C'TESTSSP STARTING SIN/COS RANGE TESTS$' + SVC WTO + LA R1,FPPI + SVC FPSVC FR0=PI + LDR FR6,FR0 + DD FR6,=D'6' FR6=PI/6 INCR ARG. + LDR FR4,FR0 + ADR FR4,FR4 FR4=2*PI MAX. ARG. + LNDR FR2,FR4 FR2=-2*PI CURRENT ARG. + LA R2,1 +SLOOP EQU * + LER FR0,FR2 + L R15,=V(SIN) + BALR R14,R15 FR0=SIN(X) + STD FR0,SAVSIN + LDR FR0,FR2 + SDR FR0,FR6 + SDR FR0,FR6 + SDR FR0,FR6 + L R15,=V(COS) + BALR R14,R15 FR0=COS(X-PI/2) + SD FR0,SAVSIN + LPDR FR0,FR0 + CD FR0,DERR VERFIFY SIN(X)=COS(X-PI/2) WITHIN DERR + BAL R14,CCL + SP PTAN,=P'1' DEC SKIP COUNTER + BNZ TSTTAN + ZAP PTAN,=P'6' RESET COUNTER TO SKIP AGAIN AT +PI + B SKPTAN +TSTTAN EQU * + LER FR0,FR2 + L R15,=V(COS) + BALR R14,R15 FR0=COS(X) + STD FR0,SAVCOS + LD FR0,SAVSIN + DD FR0,SAVCOS + STD FR0,SAVTAN SIN(X)/COS(X) + LER FR0,FR2 + L R15,=V(TAN) + BALR R14,R15 FR0=TAN(X) + SD FR0,SAVTAN + LPDR FR0,FR0 + CD FR0,DERR VERFIFY TAN(X)=SIN(X)/COS(X) WITHIN DERR + BAL R14,CCL +SKPTAN EQU * SKIP TAN TEST FOR COS(X)=0 + LA R2,1(R2) + ADR FR2,FR6 + CDR FR2,FR4 + BL SLOOP +* EXP AND ALOG RANGE TEST 0.1 TO 10 BY 0.1 + LA DE,=C'TESTSSP STARTING EXP/ALOG 0.1,10,0.1 RANGE TESTS$' + SVC WTO + LE FR2,=E'0.1' X + LA R2,1 +XLOOP EQU * + LER FR0,FR2 + L R15,=V(ALOG) + BALR R14,R15 FR0=LOGE(X) CALC'ED + L R15,=V(EXP) + BALR R14,R15 FR0=E**(LOGE(X)) CALC'ED + SER FR0,FR2 + LPER FR0,FR0 + CD FR0,DERR VERFIFY RESULT WITHIN DERR + BAL R14,CCL + LA R2,1(R2) + AE FR2,=E'0.1' + CE FR2,=E'10' + BL XLOOP +TESTEOJ EQU * + LA DE,CMSG + SVC WTO + LA DE,=C'TESTSSP END$' + SVC WTO + SVC TRACE + DC C'ERX ' + SVC EXIT +CCE BE CCOK +CCBAD SVC TRACE + DC C'BUG' +CCOK LA R12,1(R12) + ST R14,SAVELINK + L R13,SAVELINK + LA R4,DCOUNT+2 + LA R3,0 +CLOOP IC R3,0(R4) + O R3,=X'000000F0' CHANGE BLANK TO DIGIT + A R3,=F'1' + C R3,=X'000000FA' + BL CDONE + L R3,=X'000000F0' + STC R3,0(R4) + S R4,=F'1' + B CLOOP +CDONE STC R3,0(R4) + B 0(R14) +CCL BL CCOK + B CCBAD +CCH BH CCOK + B CCBAD +CCNE BNE CCOK + B CCBAD +CC3 BO CCOK + B CCBAD +SAVELINK DC A(0) +* +* DATA +* +FR0 EQU 0 +FR2 EQU 2 +FR4 EQU 4 +FR6 EQU 6 +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +R3 EQU 3 +R4 EQU 4 +R10 EQU 10 BASE 1 +R11 EQU 11 BASE 2 +R12 EQU 12 +R13 EQU 13 +R14 EQU 14 +R15 EQU 15 +WE0 DC E'0' +WD0 DC D'0' +NAN DC X'E060000000000000' +CMSG DC C'TOTAL TESTS = ' +DCOUNT DC C' ' + DC C'$' + DC 0F'0',C'* FWORD*' +FWORD DC F'0' +HWORD DC H'0' +SPIE EQU 14 SET SPIE +TRACE EQU 9 TRACE SVC - MUST BE FOLLOWED BY 3 CHAR. ID +WTO EQU 209 CPM WRITE TO OPERATOR (CPM SVC 9) +EXIT EQU 0 EXIT EMULTOR SVC +DE EQU 2 REG. 2 MAPS TO DE FOR CP/M SVC'S +FPSVC EQU 35 +FPLT2 EQU 1 +FPLE2 EQU 2 +FPL2E EQU 3 +FPL2T EQU 4 +FPPI EQU 5 +DERR DC D'1E-12' ERROR THRESHOLD +SAVSIN DC D'0' +SAVCOS DC D'0' +SAVTAN DC D'0' +PTAN DC P'4' SET TO SKIP TAN TEST AT PI/2 + END TESTSSP + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DEMO/DEMOSVC.ALC b/PC370_orig/Diskette/full/DEMO/DEMOSVC.ALC new file mode 100644 index 0000000..af32cba --- /dev/null +++ b/PC370_orig/Diskette/full/DEMO/DEMOSVC.ALC @@ -0,0 +1,272 @@ + TITLE 'DEMOSVC - TEST E370 SVCS' +* +* CONVERTED TO 8086 BY DON HIGGINS 03/30/85 +* +* 04/06/85 CHANGE LINKED Z80SUB TO LOADED Z86SUB +* 04/07/85 ADD TEST FOR TIMER SVC AND LIBRARY SUBROUTINES +* 04/08/85 ADD TEST FOR ALLOC/DEALLOC SECONDARY MAIN MEMORY +* 04/14/85 ADD TEST FOR IN/OUT SVCS BY GETTING CURSOR ADDRESS +* 04/12/87 CONVERT FOR R2.0 +* 1. DROP ALLOC/DEALLOC TESTS SINCE ALL OF DYNAMIC +* MEMORY IS ALLOCATED TO VIRTUAL FREE SPACE. +* 2. CHANGE Z86SUB.EXE TO Z86SUB.COM FORMAT WITH +* FAR RETURN AND USE NEW SVC 17 AND 15 LOGIC WHICH +* LOADS 8086 CODE FILE IN FREE MEMORY JUST LIKE 370 +* LOAD DOES. +* 3. FIX SPIE ROUTINE TO RETURN PSW IN R0-R1 INSTEAD OF +* ADDDRESS OF PSW IN R1. +* 05/16/87 TEST SVC 8 FOR GANNON +* 11/11/87 EXPAND FREE MEMORY DISPLAY +* 12/26/87 ADD TEST OF ENHANCED SPIE WITH R2=A(PIE) PLUS +* CORRECT HANDLING OF PGM CHK ON EX'D INSTR. +* 01/07/88 USE COPY EQUS +* +* CONSOLE IO TEST REQUIRES ENTERING ANY CHARACTERS AND RETURN +* MEMORY TEST DISPLAYS AVAILABLE MEMORY FOR GMAIN'S +* +DEMOSVC CSECT + LR R12,R15 + USING DEMOSVC,R12 + LA R2,=C'TESTSVC START$' + SVC WTO + L R15,=V(PET) + BALR R14,R15 + L R1,=A(1000000) + SVC GMAIN + CLM R0,1,=X'01' + BNE GMAINERR A=1 MEMORY NOT AVAIL + LR R5,R1 SVE R1 FOR CHECK AFTER 2G+2F + CVD R1,PWORK + ED DMEM,PWORK+4 + LA R2,DMEMMSG + SVC WTO + LA R1,2000 + SVC GMAIN + CLM R0,1,=X'00' + BNZ GMAINERR + LR R4,R2 R4 = FIRST AREA + LA R1,2000 + SVC GMAIN + CLM R0,1,=X'00' + BNZ GMAINERR + LR R6,R2 R6 = SECOND AREA + LR R0,R4 + AH R0,=H'2000' + CLR R0,R6 + BNE GMAINERR + LA R1,2000 + LR R2,R4 + SVC FMAIN + CLM R0,1,=X'00' + BNE FMAINERR + LA R1,2000 + LR R2,R6 + SVC FMAIN + CLM R0,1,=X'00' + BNE FMAINERR + L R1,=A(1000000) + SVC GMAIN + CLR R1,R5 + BNE FMAINERR VERIFY MEMORY BACK TO ORIG. + LA R1,USERSPI1 + SVC SPIE + LM R14,R2,=A(14,15,0,1,2) +INVOP1 DC X'0123' INVALID OP 0C1 + LA R1,USERSPI2 + SVC SPIE + LM R14,R2,=A(14,15,0,1,2) +INVOP2 CP =P'1',=X'00' INVALID DATA 0C7 + LA R1,USERSPI3 + SVC SPIE + LM R14,R2,=A(X'14ABCDEF',15,X'00ABCDEF',1,2) +INVOP3 EX 0,INVOPEX INVALID DATA 0C4 + SR R1,R1 + SVC SPIE + L R15,=V(USER370A) + BALR R14,R15 + L R15,=V(USER370B) + BALR R14,R15 + LA R1,=C'Z86SUB.COM' + SVC LOADSVC LOAD Z86SUB.COM IN FREE MEMORY + ST R0,LOADADDR + CLM R15,1,=X'00' + BNE LOADERR + L R15,LOADADDR + SVC CALLZ86 EXEC Z86SUB IN FREE MEMORY + LA R2,=C'CONSOLE ECHO TEST UNTIL $' + SVC WTO +ECHO EQU * + SVC READCON + CLM R0,1,=AL1(CR) + BE ECHODONE + LR R2,R0 + SVC WRITECON + B ECHO +ECHODONE EQU * + LA R2,=C'CONSOLE ECHO DONE$' + SVC WTO + SR R1,R1 + SVC SPIE REMOVE SPIE + LA R2,=C'START CURSOR ADDRESS ROUTINE$' + SVC WTO + LA R0,X'0E' + LA R1,X'3D4' + SVC PORTOUT SET CURSOR HIGH BYTE INDEX POINTER + LA R1,X'3D5' + SVC PORTIN READ HIGH BYTE + LR R3,R0 SAVE IN R3 + LA R0,X'0F' + LA R1,X'3D4' + SVC PORTOUT SET CURSOR LOW BYTE INDEX POINTER + LA R1,X'3D5' + SVC PORTIN READ LOW BYTE + SLL R3,8 + OR R0,R3 + CVD R0,PWORK + ED DCUR,PWORK+5 + LA R2,DCURMSG + SVC WTO + L R15,=V(PET) + BALR R14,R15 + LA R2,=C'TESTSVC ENDED$' + SVC WTO + SVC EXIT +LOADERR EQU * + LA R2,=C' LOAD ERROR ON Z86SUB.EXE$' + SVC WTO + SVC TRACE + DC C'BUG' + SVC EXIT +GMAINERR EQU * + LR R3,R0 + LA R2,=C'GMAIN ERROR$' + SVC WTO + SVC TRACE + DC C'BUG' + SVC EXIT +FMAINERR EQU * + LR R3,R0 + LA R2,=C'FMAIN ERROR$' + SVC WTO + SVC TRACE + DC C'BUG' + SVC EXIT +USERSPI1 EQU * 0C1 ON X'123' + LR R3,R0 + LR R4,R1 + LR R5,R2 + USING IHAPIE,R5 + LA R2,=C'USER SPIE EXIT 1 TAKEN$' + SVC WTO + CL R3,=AL2(4,1) R0 = INS LNG + INT. CODE + BNE SPIERR + CL R4,=A(INVOP1) R1 = INSTR. ADDR + BNE SPIERR + CLC PIEPSW+4(4),=A(INVOP1) + BNE SPIERR + LA R6,32(R5) R4 = PIE (SET R6 TO PICA) + CL R6,PIEPICA + BNE SPIERR + CLC PICEXT,=A(USERSPI1) + BNE SPIERR + CLC PIEGR14,=A(14) + BNE SPIERR + CLC PIEGR15,=A(15) + BNE SPIERR + CLC PIEGR0,=A(0) + BNE SPIERR + CLC PIEGR1,=A(1) + BNE SPIERR + CLC PIEGR2,=A(2) + BNE SPIERR + B 2(R4) +USERSPI2 EQU * 0C7 ON CP =P'1',=X'00' + LR R3,R0 + LR R4,R1 + LR R5,R2 + LA R2,=C'USER SPIE EXIT 2 TAKEN$' + SVC WTO + CL R3,=AL2(6,7) R0 = INS LNG + INT. CODE + BNE SPIERR + CL R4,=A(INVOP2+6) R1 = INSTR. ADDR + BNE SPIERR + LA R6,32(R5) R4 = PIE (SET R6 TO PICA) + CL R6,0(R5) VERIFY PIE POINTS TO PICA + BNE SPIERR + CLC 12(20,R5),=A(14,15,0,1,2) + BNE SPIERR + B 0(R4) +USERSPI3 EQU * 0C5 ON EX 0,INVOPEX = MVCL 0,14 + LR R3,R0 + LR R4,R1 + LR R5,R2 + LA R2,=C'USER SPIE EXIT 3 TAKEN$' + SVC WTO + CL R3,=AL2(4,5) R0 = INS LNG + INT. CODE + BNE SPIERR + CL R4,=A(INVOP3+4) R1 = INSTR. ADDR + BNE SPIERR + LA R6,32(R5) R4 = PIE (SET R6 TO PICA) + CL R6,0(R5) VERIFY PIE POINTS TO PICA + BNE SPIERR + CLC 12(20,R5),=A(X'14ABCDEF',15,X'00ABCDEF',1,2) + BNE SPIERR + B 0(R4) +SPIERR EQU * + LA R2,=C'SPIE PSW / ADDR BAD$' + SVC WTO + SVC TRACE + DC C'BUG' + SVC EXIT +INVOPEX MVCL 0,14 FORCE 0C4 VIA EX + DC C'*** SAVE PSW ***' +SAVEPSW DC D'0' + COPY CPY/EQUREGS.CPY + COPY CPY/EQUSVCS.CPY +WRITECON EQU 202 +READCON EQU 208 +PORTIN EQU INBYTE +PORTOUT EQU OUTBYTE +CALLZ86 EQU USERSVC +LOADSVC EQU LOAD86 +LOADADDR DC A(0) VIRTUAL LOAD ADDRESS SET BY SVC NOW +CR EQU X'0D' +PWORK DC D'0' +DMEMMSG DC C'FREE MEMORY =' +DMEM DC X'40206B2020206B202020',C'$' +DSMASK DC X'4020',C',',X'202020',C',',X'202020' +DSMMSG DC C' SECONDARY MEMORY START =' +DSMEMS DC CL10' Z,ZZZ,ZZZ',C' LENGTH =' +DSMEML DC CL10' Z,ZZZ,ZZZ',C'$' +DCURMSG DC C' CURSOR ADDRESS =' +DCUR DC X'402020202020',C'$' + LTORG +USER370A CSECT + DROP + USING *,R15 + LA R2,MSGA1 + SVC WTO +USER370B CSECT + DROP + USING *,R15 + LA R2,MSGB1 + SVC WTO +USER370A CSECT + DROP + USING USER370A,R15 + LA R2,=C'USER 370 A MSG 2$' + SVC WTO + BR R14 +MSGA1 DC C'USER 370 A MSG 1$' + LTORG +USER370B CSECT + DROP + USING USER370B,R15 + LA R2,=C'USER 370 B MSG 2$' + SVC WTO + BR R14 +MSGB1 DC C'USER 370 B MSG 1$' + LTORG + COPY CPY/IHAPIE.CPY + END DEMOSVC + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DEMO/DEMOTRAP.ALC b/PC370_orig/Diskette/full/DEMO/DEMOTRAP.ALC new file mode 100644 index 0000000..09320b5 --- /dev/null +++ b/PC370_orig/Diskette/full/DEMO/DEMOTRAP.ALC @@ -0,0 +1,57 @@ + TITLE 'TESTM37.ALC - TEST SVT TRAP FACILITY FOR PC/370 REL 4.2' +* PGM-ID. TESTM37.ALC +* AUTHOR. DON HIGGINS +* DATE. 01/05/88 +* REMARKS. TEST NEW SVC TRAP FACILITY - SEE DOC\SYSTEM.DOC FOR MORE INFO. +* 1. SVC 37 DEFINES SVC TRAP TABLE VIA R1 (R1=0 CANCELS TRAP MODE). +* 2. SVC WITH NON-ZERO TRAP TABLE ENTRY CAUSES CURRENT PSW TO BE STORED +* IN OLD SVC INTERRUPTION PSW IN LOW VIRTUAL MEMORY X'20', SETS +* TRAP ACTIVE MODE IN PC/370 EMULATOR, AND BRANCHES TO TRAP ADDRESS. +* 3. SVC WITH ZERO TRAP TABLE ENTRY RESULTS IN REAL SVC EXECUTION. +* 3. SVC TRAP TABLE NOT USED IN TRAP ACTIVE MODE (ALL SVCS ARE REAL). +* 4. LPSW INSTRUCTION TURNS OFF TRAP ACTIVE MODE. +* +* THIS FACILITY CAN BE USED TO CODE MORE EFFICIENT PC/370 SVC SUPERVISOR SHELL. +* IT CAN BE USED DIRECTLY OR WITH PROBLEM STATE FACILITY TO REDUCE OVERHEAD +* ASSOCIATED WITH EMULATOR OF 370 SVC FIRST LEVEL INTERRUPT HANDLER. IT CAN +* BE USED TO SIMPLY ADD USER EXIT TO SELECTED PC/370 SVC'S SUCH AS I/O OPEN, +* CLOSE, ETC. +* +TESTM37 CSECT + LR R12,R15 + USING TESTM37,R12 + LA R2,=C'TESTM37 STARTED$' + SVC WTO + LA R1,SVCTAB + SVC SVCTRAP SET TRAP SVC TABLE (ALL 0'S) + LA R2,=C'TEST SVC 209 #1 VIA REAL - ENTRY 0$' + SVC WTO USE REAL SVC SINCE ENTRY 0 + MVC SVCTAB+4*WTO,=A(WTOTRAP) SET TRAP ADDRESS IN TABLE + LA R2,=C'TEST SVC 209 #2 VIA TRAP - ENTRY NOT ZERO$' + SVC WTO USE WTOTRAP THIS TIME + SR R1,R1 + SVC SVCTRAP CANCEL SVC TRAP FACILITY + LA R2,=C'TEST SVC 209 #3 VIA REAL - TRAP CANCELLED$' + SVC WTO USE REAL SVC - NOT TRAPS + LA R1,SVCTAB + SVC SVCTRAP SET TRAP ON AGAIN + LA R2,=C'TEST SVC 209 #4 VIA TRAP - TRAP BACK ON$' + SVC WTO USE TRAP AGAIN + SVC EXIT USE REAL - NO SVC 0 TRAP ENTRY +WTOTRAP EQU * ENTERED VIA SVC WTO WITH SVCTAB+4*WTO CONTAINING ENTRY + LR R3,R2 SAVE MSG ADDR FOR SVC CAUSING TRAP ENTRY + LA R2,=C'TRAP ENTERED$' + SVC WTO USE REAL - TRAP ACTIVE MODE + LR R2,R3 + SVC WTO USE REAL - TRAP ACTIVE MODE + LA R2,=C'EXITING WTOTRAP NOW$' + SVC WTO USE REAL - TRAP ACTIVE MODE + USING IHAPSW,0 + LPSW OLDSVC RETURN AND RESET ACTIVE MODE + LTORG + COPY CPY/EQUREGS R1-R15 EQU'S + COPY CPY/EQUSVCS PC/370 REAL SVC EQU'S +SVCTAB DC 256A(0) TABLE OF TRAP ADDRESSES FOR SVC 0-255 + COPY CPY/IHAPSW IHAPSW DSECT OF LOW STORAGE PSW AREAS + END TESTM37 + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DEMO/IGC0011.ALC b/PC370_orig/Diskette/full/DEMO/IGC0011.ALC new file mode 100644 index 0000000..c09e2b4 --- /dev/null +++ b/PC370_orig/Diskette/full/DEMO/IGC0011.ALC @@ -0,0 +1,96 @@ + TITLE 'IGC0011 - PC/370 MVS TIMER TYPE 4 SVC' +* PGMID. IGC0011.ALC (LINKED AS IGC0011.MOD) +* AUTHOR. DON HIGGINS. +* DATE. 06/03/87 +* REMARKS. PC/370 MVS SHELL TIMER TYPE 4 SVC MODULE DYNAMICALLY +* LOADED AND EXECUTED BY SVC HANDLER +* +* MAINTENANCE. +* +* 06/03/87 COPIED FROM IGC1013 AND CODED +* 06/06/87 FINISH CODING OPTIONS +* +IGC0011 CSECT + USING *,R6 + ST R14,IGCSAV + LR R3,R0 SAVE ADDR TO STORE TOD/TIME IN MICROSECONDS + STC R1,OPTIONS + NI OPTIONS,X'0F' + BZ TUNITS R0 = TOD TIMER UNITS (26. MICROSECONDS) + CLI OPTIONS,X'01' + BE T01SEC R0 = TOD 0.01 SECONDS + CLI OPTIONS,X'02' + BE TPDEC R0 = TOD PACKED (HHMMSSTH) + CLI OPTIONS,X'03' + BE TMICRO A(R0) = DOUBLE WORD TOD (BIT 51 = MSEC) + CLI OPTIONS,X'04' + BE TCLOCK A(R0) = TOD CLOCK + LA R15,4 EXIT WITH ERROR IF NO OPTION MATCH + L R14,IGCSAV + BR R14 +TUNITS EQU * + L R15,=V(TIMER) USE L370.LIB TIMER.ALC SUBROUTINE + AR R15,R6 RELOCATE + BALR R14,R15 + LR R1,R0 + SR R0,R0 + M R0,=A(1000000/26) CONVERT 0.01 SEC TO TU'S (CRUDE!) + LR R0,R1 + B IGCEXT +T01SEC EQU * + L R15,=V(TIMER) USE L370.LIB TIMER.ALC SUBROUTINE + AR R15,R6 RELOCATE + BALR R14,R15 + B IGCEXT +TPDEC EQU * + SVC PCTIME + ST R0,WORK + SR R0,R0 + IC R0,WORK HOURS + BAL R1,CVT + STC R0,WORK + IC R0,WORK+1 MINUTES + BAL R1,CVT + STC R0,WORK+1 + IC R0,WORK+2 SECONDS + BAL R1,CVT + STC R0,WORK+2 + IC R0,WORK+3 100TH SECONDS + BAL R1,CVT + STC R0,WORK+3 + L R0,WORK + B IGCEXT +CVT EQU * CONVERT R0 NN BINARY TO NN DEC + CVD R0,PWORK + MP PWORK,=P'10' + IC R0,PWORK+6 + BR R1 +TMICRO EQU * + MVC 0(8,R3),=XL8'00' STORE ZEROS FOR NOW + B IGCEXT +TCLOCK EQU * + MVC 0(8,R3),=XL8'00' STORE ZEROS FOR NOW + B IGCEXT +IGCEXT EQU * + SR R15,R15 + L R14,IGCSAV + BR R14 +* +* DATA +* +PWORK DC D'0' +WORK DC F'0' +PCTIME EQU 18 +IGCSAV DC A(0) SAVE RETURN +OPTIONS DC X'00' +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +R3 EQU 3 +R4 EQU 4 +R5 EQU 5 +R6 EQU 6 +R14 EQU 14 +R15 EQU 15 + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DEMO/IGC1013.ALC b/PC370_orig/Diskette/full/DEMO/IGC1013.ALC new file mode 100644 index 0000000..bf9496b --- /dev/null +++ b/PC370_orig/Diskette/full/DEMO/IGC1013.ALC @@ -0,0 +1,66 @@ + TITLE 'IGC1013 - PC/370 MVS ABEND FORMATED DUMP TYPE 4 SVC' +* PGMID. IGC1013.ALC (LINKED AS IGC1013.MOD) +* AUTHOR. DON HIGGINS. +* DATE. 05/31/87 +* REMARKS. PC/370 MVS SHELL ABEND TYPE 4 SVC MODULE DYNAMICALLY +* LOADED AND EXECUTED BY TYPE 1 ABEND SVC ROUTINE IF +* PATH TO MODULE AND SUFFICIENT MEMORY IS AVAILABLE. +* IGC013 TYPE 1 ROUTINE JUST PRINTS ABEND CODE AND PSW. +* THIS MODULE FORMATS THE FOLLOWING: +* +* 1. GENERAL REGISTERS +* +IGC1013 CSECT + USING *,R6 + STM R0,R15,SAVREGS + LA R3,SAVREGS + LA R4,DREGS + LA R5,8 FORMAT FIRST 8 +FMTR07 EQU * + BAL R14,FMTREG + LA R3,4(R3) + LA R4,9(R4) + BCT R5,FMTR07 + LA R2,BLKLINE + SVC WTO + LA R2,DLINE + SVC WTO + LA R4,DREGS + LA R5,8 FORMAT LAST 8 +FMTR8F EQU * + BAL R14,FMTREG + LA R3,4(R3) + LA R4,9(R4) + BCT R5,FMTR8F + LA R2,DLINE + SVC WTO + LA R2,BLKLINE + SVC WTO + L R14,SAVREGS+4*14 + SR R15,R15 + BR R14 +FMTREG EQU * + UNPK 0(9,R4),0(5,R3) + TR 0(8,R4),HEXTAB-240 + MVI 8(R4),C' ' + BR R14 +* +* DATA +* +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +R3 EQU 3 +R4 EQU 4 +R5 EQU 5 +R6 EQU 6 +R14 EQU 14 +R15 EQU 15 +WTO EQU 209 +BLKLINE DC C' $' +DLINE DC C' R0-R7 ' +DREGS DC 8CL9' ',C'$' +SAVREGS DC 16F'0' +HEXTAB DC C'0123456789ABCDEF' + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DEMO/INS0156.ALC b/PC370_orig/Diskette/full/DEMO/INS0156.ALC new file mode 100644 index 0000000..33a8535 --- /dev/null +++ b/PC370_orig/Diskette/full/DEMO/INS0156.ALC @@ -0,0 +1,93 @@ + TITLE 'INS0156 - PC/370 MVS SIO TYPE 4 MACRO INSTRUCTION' +* PGMID. INS0156.ALC (LINKED AS INS0156.MOD) +* AUTHOR. DON HIGGINS. +* DATE. 05/31/87 +* REMARKS. PC/370 MVS SIO (START I/O) TYPE 4 MACRO INSTRUCTION TO +* SUPPORT SIMULATED CAHNNEL PROGRAMS TO CONSOLE X'01F' +* MAINTENANCE. +* +* 06/02/87 ADD TIC AND DEVICE END LOGIC +* 06/06/87 ADD CR,LF AFTER READ +* +INS0156 CSECT + USING *,R6 + L R3,OLDPGM+4 + CLC 0(4,R3),=X'9C00001F' IF NOT EXPLICIT X'01F' + BNE NOTOPER SET CC=3 = NOT OPERATIONAL + L R3,CAW +CCWEXEC EQU * EXEC CCW AT R3 + CLI 0(R3),CCREAD + BE INSREAD + CLI 0(R3),CCWRITE + BE INSWRITE + CLI 0(R3),CCTIC + BE INSTIC +CCWERR EQU * CCW INVALID OP CODE + MVC CSW+4,=X'0C20' CE, DE, PGM CHECK + LH R0,6(R3) + STH R0,CSW+6 CCW RESIDUAL COUNT + B CSWSTOR +INSREAD EQU * CCW READ VIA ASSIST XREAD + L R4,0(R3) + LH R5,6(R3) + XREAD 0(R4),0(R5) + LA R2,LF + SVC WRITECHR FORCE LF,CR AFTER READ + LA R2,CR + SVC WRITECHR + MVC CSW+4(4),=X'0C000000' + BZ CCWNEXT + MVC CSW+4(2),=X'0D00' CCW CE, DE, UNIT EXCEPTION + LH R0,6(R3) + STH R0,CSW+6 + B CSWSTOR +INSWRITE EQU * CCW WRITE VIA ASSIST XPRNT + L R4,0(R3) + LH R5,6(R3) + XPRNT 0(R4),0(R5) + MVC CSW+4(4),=X'0C000000' + B CCWNEXT +INSTIC EQU * CCW TRANSFER TO CCW + L R3,0(R3) + B CCWEXEC +CCWNEXT EQU * + TM 4(R3),X'40' IS CHAIN COMMAND ON + BZ CSWSTOR NO, STORE CSW AND EXIT + LA R3,8(R3) YES, GO TO NEXT CCW + B CCWEXEC +NOTOPER EQU * + OI OLDPGM+2,X'30' SET CC=3 + B INSEXT +CSWSTOR EQU * + NI OLDPGM+2,X'CF' SET CC=0 STARTED + OI OLDPGM+2,X'10' SET CC=1 CSW STORED + ST R3,CSW CCW ADDRESS +INSEXT EQU * + L R15,OLDPGM+4 + LA R15,4(R15) SKIP OVER SIO INSTR. + ST R15,OLDPGM+4 + SR R15,R15 + BR R14 +* +* DATA +* +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +R3 EQU 3 +R4 EQU 4 +R5 EQU 5 +R6 EQU 6 +R14 EQU 14 +R15 EQU 15 +OLDPGM EQU X'28' OLD PGM PSW +CSW EQU X'40' CHANNEL STATUS WORD +CAW EQU X'48' CHANNEL ADDRESS WORD +CCREAD EQU X'02' CCW READ +CCWRITE EQU X'01' CCW WRITE +CCTIC EQU X'08' CCW TIC +WRITECHR EQU 200+2 WRITE CHR TO CONSOLE FROM R2 +CR EQU X'0D' ASCII CARRIAGE RETURN +LF EQU X'0A' ASCII LINE FEED + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DEMO/MVS.ALC b/PC370_orig/Diskette/full/DEMO/MVS.ALC new file mode 100644 index 0000000..c20bf15 --- /dev/null +++ b/PC370_orig/Diskette/full/DEMO/MVS.ALC @@ -0,0 +1,660 @@ +********* +* +* PGMID. MVS.ALC (LINKED TO MVS.MOD FOR DYNMAIC LOAD AND EXEC) +* AUTHOR. DON HIGGINS +* DATE. 05/26/87 +* REMARKS. +* THIS MODULE DEFINES MVS SVC HANDLER AND EXTERNAL +* INTERRUPT HANDLER TO SUPPORT EXECUTION OF MODULES WITH +* MVS SVC'S. RETRUN FROM THIS MODULE IS VIA LPSW WHICH +* PLACES CALLING PROGRAM IN PROBLEM STATE WITH SUPERVISOR +* AND NO EXTERNAL INTERRUPTS ENABLED (EXTERNAL CAN BE TURNED +* ON LATER IF DESIRED). FOR MVS SVC EQU'S SEE MVS.DOC. +* +* MAINTENANCE. +* +* 05/30/87 CHANGE SVC 3 EXIT TO RETURN IN SUPR STATE, ADD SVC 10 +* 05/31/87 ADD IGC013 ABEND T1/T4 +* 06/01/87 USE SVCR15 TO SIMPLIFY RTN SAVE/RESTORE, CHANGE IGC NAMES +* 06/04/87 SAVE R14,R1 ACROSS EXECRTN FOR SVC'S AND INS'S +* 06/06/87 FIX WTOR TO CLEAR R15 AND USE EXTERNAL INTERRUPT TO POST +********* +* +* MVS NUCLEUS INITIALIZATION PROGRAM (NIP) +* +********* +MVS CSECT + USING MVS,R15 + STM R14,R6,12(R13) + LR R6,R15 + DROP R15 + USING MVS,R6 + SVC TRACE + DC C'IOF' TURN OFF INTERRUPTS FOR WTOR FACILITY +* +* INIT CVT +* + LA R1,CVT + USING IHACVT,R1 + ST R1,16 STORE CVT ADDRESS IN LOW MEMORY + LA R0,TCB + ST R0,CVTTCBP CVT TCB PTR + LA R0,SMCA + ST R0,CVTSMCA CVT SMCA PTR + L R0,ASCASL + ST R0,CVTMZ00 CVT END OF REAL MEMORY +* +* INIT SVC TABLE +* + LA R1,4*256 + SVC GMAIN + LTR R0,R0 + BNZ ABEND80A NO MEMORY FOR SVC TABLE + ST R2,ASVCTAB + LR R0,R2 + LA R1,4*256 + SR R14,R14 + SR R15,R15 + MVCL R0,R14 CLEAR SVC TABLE + LA R0,IGC0001 + ST R0,4*1(R2) INIT SVC 1 WAIT + LA R0,IGC0002 + ST R0,4*2(R2) INIT SVC 2 POST + LA R0,IGC0003 + ST R0,4*3(R2) INIT SVC 3 EXIT + LA R0,IGC0010 + ST R0,4*10(R2) INIT SVC 10 GMAINR/FMAINR + LA R0,IGC0013 + ST R0,4*13(R2) INIT SVC 13 ABEND T1 + LA R0,IGC0035 + ST R0,4*35(R2) INIT SVC 35 WTO/WTOR +* +* INIT INS TABLE +* + LA R1,4*256 + SVC GMAIN + LTR R0,R0 + BNZ ABEND80A NO MEMORY FOR INS TABLE + ST R2,AINSTAB + LR R0,R2 + LA R1,4*256 + SR R14,R14 + SR R15,R15 + MVCL R0,R14 CLEAR SVC TABLE +* +* INIT SVC, PGM, AND EXT NEW PSW'S +* + LA R0,SVCRTN + ST R0,SVCPSW+4 INIT NEW SVC PSW ADDR + LA R0,PGMRTN + ST R0,PGMPSW+4 INIT NEW PGM PSW ADDR + LA R0,EXTRTN + ST R0,EXTPSW+4 INIT NEW EXT PSW ADDR + MVC NEWSVC(8),SVCPSW SET NEW SVC PSW + MVC NEWPGM(8),PGMPSW SET NEW PGM PSW + MVC NEWEXT(8),EXTPSW SET NEW EXT PSW + LM R14,R6,12(R13) RESTORE CALLER'S REG'S + DROP R6 + USING MVS,R15 + ST R14,PRBPSW+4 INIT PROBLEM STATE EXIT PSW ADDR +* +* EXIT TO CALLER IN PROBLEM STATE TO ACTIVATE MVS SHELL ENVIRONMENT +* + LPSW PRBPSW EXIT WITH NEW PROBLEM PSW + DROP +SVCPSW DS 0D + DC X'060C0000',A(*-*) ENTER SVC HANDLER IN SUPR STATE +PGMPSW DS 0D + DC X'060C0000',A(*-*) ENTER PGM HANDLER IN SUPR STATE +EXTPSW DS 0D + DC X'060C0000',A(*-*) ENTER EXT HANDLER IN SUPR STATE +PRBPSW DS 0D + DC X'070D0000',A(*-*) RETURN WITH PROB. STATE AND EXT. INT. +********* +* +* MVS SVC INTERRUPT HANDLER +* +********* +SVCRTN EQU * + SVC TRACE + DC C'SVC' + DROP + ST R15,SVCR15 + L R15,NEWSVC+4 + USING SVCRTN,R15 + STM R0,R14,SVCSAV + L R14,SVCR15 + ST R14,SVCSAV+15*4 + L R14,OLDSVC+4 R14 = ADDR SVC + 2 + BCTR R14,0 + SR R2,R2 + IC R2,0(R14) R2=SVC# + L R3,ASVCTAB + LA R4,IGC0NNN + BAL R14,EXECRTN EXECUTE SVC + USING *,R14 + LTR R15,R15 WAS EXEC OK + BNZ ABEND106 + LM R2,R13,SVCSAV+2*4 RESTORE USER REGS (2-13 ONLY) + LPSW OLDSVC EXIT TO INSTR AFTER ORIG SVC IN PROB STATE +ABEND106 EQU * + L R1,=X'80106000' NO, ABEND 106 WITH DUMP + LA R2,13 + L R3,ASVCTAB + LA R4,IGC0NNN + BAL R14,EXECRTN EXECUTE ABEND SVC + DROP + USING *,R14 + OI OLDSVC+1,X'02' TURN ON WAIT BIT IN OLD SVC PSW + LM R0,R15,SVCSAV RESTORE ALL REGS TO ORIG. + LPSW OLDSVC IF IT RETURN'S, LOAD WAIT STATE OLD PSW + DROP +SVCSAV DC 16F'0' +******** +* +* PROGRAM INTERRUPT ROUTINE +* +******** +PGMRTN EQU * + SVC TRACE + DC C'PGM' + DROP + ST R15,PGMR15 TEMP SAVE R15 IN LOW MEMORY + L R15,NEWPGM+4 + USING PGMRTN,R15 + STM R0,R14,PGMSAV SAVE REGS + L R14,PGMR15 + ST R14,PGMSAV+4*15 + CLI OLDPGM+3,2 IS THIS PRIVILEGED OR OPERATION EXCEPTION + BH ABEND0CX NO, ABEND 0CX WITH DUMP + L R14,OLDPGM+4 YES, TRY TO LOAD INS0NNN MACRO INSTRUCTION + SR R2,R2 + IC R2,0(R14) R2 = OPERATION CODE + L R3,AINSTAB + LA R4,INS0NNN + BAL R14,EXECRTN EXECUTE INS RTN IF FOUND + USING *,R14 + LTR R15,R15 WAS MACRO INSTR. EXEC OK + BNZ ABEND0CX NO, ABEND 0CX WITH DUMP + LM R0,R15,PGMSAV RESTORE ALL REGS + LPSW OLDPGM EXIT TO NEXT INSTR IN PROB STATE + DROP +ABEND0CX EQU * + BALR R15,0 + USING *,R15 + SR R1,R1 + IC R1,OLDPGM+3 + SLL R1,12 + O R1,=X'800C0000' R1=0CX SYSTEM ABEND WITH DUMP + LA R2,13 + L R3,ASVCTAB + LA R4,IGC0NNN + BAL R14,EXECRTN EXECUTE ABEND SVC + DROP + USING *,R14 + OI OLDPGM+1,X'02' TURN ON WAIT BIT IN OLD PGM PSW + LM R0,R15,PGMSAV + LPSW OLDPGM IF IT RETURN'S, LOAD WAIT STATE OLD PSW + DROP +PGMSAV DC 16F'0' SAVE R0-R15 +******** +* +* EXTERNAL INTERRUPT ROUTINE +* +* 1. CURRENTLY ONLY FUNCTION IMPLEMENTED VIA EXTERNAL INTERRUPT IS +* ENTRY OF WTOR REPLY WITH POST OF ECB WHEN DONE. ONLY ONE WTOR +* ACTIVE AT A TIME IS SUPPORTED IN THIS SINGLE USER SHELL. +* PC/370 RELEASE 2.0 EXECUTES EXTERNAL INTERRUPT ROUTINE EVERY +* 256 INSTRUCTIONS IF ENABLED AND PROBLEM STATE. THIS WILL +* CAUSE HESITATION ON SLOWER PC'S AND HAVING EXTERNAL INTERRUPT +* ENABLED FOR THIS FACILITY INTRODUCES AROUND 10% OVERHEAD (25 +* EXTRA INSTRUCTIONS EVERY 256 INSTRUCTIONS). +* +******** +EXTRTN EQU * + SVC TRACE + DC C'EXT' + DROP + ST R15,EXTR15 TEMP SAV R15 + L R15,NEWEXT+4 + USING EXTRTN,R15 + STM R0,R14,EXTSAV SAVE REGS + L R14,EXTR15 + ST R14,EXTSAV+4*15 + CLI WTORPEND,TRUE EXIT IF NO WTOR PENDING + BNE EXTEXT + SVC KEYSTAT IS THERE KEYBOARD INPUT PENDING + LTR R0,R0 EXIT IF NO KEY PENDING + BZ EXTEXT + L R3,WTORCCNT + L R4,WTORCRPY +WTORLOOP EQU * + SVC KEYSTAT IS THERE KEYBOARD INPUT PENDING + LTR R0,R0 + BZ WTORSAVE + SVC KEYREAD + CLM R0,1,=AL1(CR) + BE WTORDONE STOP AT CARRIAGE RETURN + STC R0,0(R4) + LA R4,1(R4) + BCT R3,WTORLOOP REPEAT UNTIL NO MORE CHAR OR FULL +WTORDONE EQU * + MVI WTORPEND,FALSE + LA R2,LF + SVC WRITECHR + LA R2,CR + SVC WRITECHR + L R2,WTORTCNT + SR R2,R3 + BZ WTORSKIP SKIP CONVERT IF NO CHAR. + L R1,WTORARPY + SVC ASCEBC CONVERT REPLY TO EBCDIC +WTORSKIP EQU * + L R1,WTORAECB + LA R6,IGC0002 + BALR R14,R6 POST WTOR ECB VIA BRANCH ENTRY TO POST + USING *,R14 + LM R0,R15,EXTSAV RESTORE ALL REGS + LPSW OLDEXT EXIT TO NEXT INSTR. OR EXIT FROM WAIT + DROP R14 +WTORSAVE EQU * + ST R3,WTORCCNT + ST R4,WTORCRPY +EXTEXT EQU * + LM R0,R15,EXTSAV RESTORE ALL REGS + LPSW OLDEXT EXIT TO NEXT INSTR + DROP +EXTSAV DC 16F'0' SAVE R0-R15 +******** +* +* EXECUTE SVC/INS ROUTINE FROM SVC, PGM, OR EXT INTERRUPT HANDLER +* +* NOTE THIS ROUTINE ALONG WITH INTERRUPT HANDLERS IS CURRENTLY ONLY +* SERIALLY REUSABLE SO NO SVC CAN ISSUE MVS SVC ETC. (PC/370 SVC'S OK). +* THIS IS A SINGLE USER NON-MULTI-TASKING VERSION OF MVS. +* +* R2 = NUMBER OF SVC OR USER DEFINED INSTRUCTION OP CODE +* R3 = SVC/INS TABLE +* R4 = ADDRES OF MODULE NAME 'IGC0NNN' OR 'INS0NNN' +* R14 = RETURN ADDRESS +* R15 = NZ IF LOAD FAILED ELSE ZERO FOR SUCCESSFUL EXECUTION +* +EXECRTN EQU * + BALR R7,0 + USING *,R7 + CLI LOCK,BUSY + BE ABENDFXX ABEND FXX FOR INVALID RECURSIVE ENTRY + MVI LOCK,BUSY + ST R14,EXECEXT + AR R2,R2 + AR R2,R2 R2=4*SVC# + L R6,0(R2,R3) R6=A(SVC RTN ENTRY) + LTR R6,R6 + BNZ CALLRTN + BAL R14,LOADRTN LOAD SVC/INS IF NO ADDR IN TABLE + BNZ EXITRTN +CALLRTN EQU * + LA R3,CVT + LA R4,TCB + LA R5,RB + LA R7,ASCB + BALR R14,R6 CALL SVC ROUTINE +EXITRTN EQU * + BALR R14,0 + USING *,R14 + MVI LOCK,FREE + L R14,EXECEXT + BR R14 + DROP R14 +LOCK DC AL1(FREE) PREVENT RECURSIVE CALLS +FREE EQU 0 +BUSY EQU 1 +EXECEXT DC A(0) +LOADRTN EQU * + ST R14,LOADEXT + STM R0,R1,LOADSAV SAVE R0-R1 ACROSS LOAD + LA R3,0(R2,R3) SAVE TABLE ENTRY ADDR IN R3 + SRL R2,2 + CVD R2,PWORK + MVC 3(4,R4),=X'F0202020' + ED 3(4,R4),PWORK+6 + LR R1,R4 + SVC LOAD LOAD TYPE 3/4 DYNAMIC SVC ROUTINE + L R14,LOADEXT + LTR R15,R15 + BNZR R14 + ST R0,0(R3) SAVE SVC ENTRY IN SVC TABLE + LR R6,R0 + LM R0,R1,LOADSAV + BR R14 RETURN FROM LOAD SVC + DROP +LOADEXT DC A(0) +LOADSAV DC 2F'0' +IGC0NNN DC C'IGC0NNN.MOD' TYPE 3/4 SVC MODULE +INS0NNN DC C'INS0NNN.MOD' TYPE 3/4 USER DEFINED OPCODE ROUTINE +ASVCTAB DC A(*-*) ADDRESS OF SVC TABLE +AINSTAB DC A(*-*) USER DEFINED INSTRUCTION RTN TABLE +********* +* +* WAIT STATE ERRORS +* +********* +ABEND80A EQU * MEMORY ERROR DURING NIP + SVC TRACE + DC C'80A' + SVC TRACE + DC C'BUG' +ABENDFXX EQU * RECURSIVE CALL TO EXECRTN + SVC TRACE + DC C'FXX' + SVC TRACE + DC C'BUG' +********* +* +* IGC0001 - WAIT +* +********* +IGC0001 DS 0H + USING *,R6 + SR R15,R15 + LTR R1,R1 + BZ IGC0001E EXIT WITH ERROR IF ECBLIST + TM 0(R1),X'40' + BOR R14 EXIT OK IF POSTED ALREADY + OI 0(R1),X'80' TURN ON WAIT BIT FOR EXT. INT. POST + LA R0,IGC0001L + ST R0,WAITLOOP+4 + LPSW WAITLOOP ENTER ENABLED PROB. STATE AND LOOP +IGC0001L B * LOOP UNTIL POST OCCURS VIA EXT. INT. +IGC0001E EQU * + LA R15,4 + BR R14 +WAITLOOP DC 0D'0',X'070D0000',A(*-*) PROB STATE LOOP +********* +* +* IGC0002 - POST +* +********* +IGC0002 DS 0H + USING *,R6 + SR R15,R15 + LTR R1,R1 + BM IGC0002E EXIT WITH ERROR IF ECBLIST + OI 0(R1),X'40' TURN ON ECB POST BIT + TM 0(R1),X'80' IS WAIT BIT ON + BZR R14 EXIT NOW IF TASK NOT WAITING + NI OLDEXT+1,X'FE' TURN OFF PROB. STATE IF WAITING + LA R0,IGC0002P FORCE EXIT FROM WAIT SVC LOOP + ST R0,OLDEXT+4 RESET EXT RETURN ADDR. TO BR R14 +IGC0002P EQU * + BR R14 EXIT IN SUPERVISOR STATE +IGC0002E EQU * + LA R15,4 + BR R14 +********* +* +* IGC0003 - EXIT +* +********* +IGC0003 DS 0H + USING *,R6 + NI OLDSVC+1,X'FE' TURN OFF PROBLEM STATE + SR R15,R15 + BR R14 EXIT IN SUPERVISOR STATE +********* +* +* IGC0010 - GMAINR/FMAINR R0=SPL,LENGTH, R1=NEG GMAIN/POS. FMAIN ADDR. +* +********* +IGC0010 DS 0H + USING *,R6 + LTR R1,R1 + BNM IGC0010F +IGC0010G EQU * + LR R1,R0 + SVC GMAIN + LR R0,R1 + LR R1,R2 + SR R15,R15 + BR R14 +IGC0010F EQU * + LR R2,R1 + LR R1,R0 + SVC FMAIN + SR R15,R15 + BR R14 +********* +* +* IGC0013 - ABEND R1 = COMPLETION CODE +* +********* +IGC0013 DS 0H + USING *,R6 + STM R14,R2,IGC0013S + ST R1,PWORK + UNPK DWORK(9),PWORK(5) + TR DWORK(8),HEXTAB-240 + MVC DCMP,DWORK + UNPK DWORK(9),OLDSVC(5) + TR DWORK(8),HEXTAB-240 + MVC DPSW(8),DWORK + UNPK DWORK(9),OLDSVC+4(5) + TR DWORK(8),HEXTAB-240 + MVC DPSW+8(8),DWORK + LA R2,DABEND + SVC WTO DISPLAY COMPLETION CODE AND PSW + LTR R1,R1 + BP IGC0013N NO DUMP REQUESTED + L R0,AIGC1013 + LTR R0,R0 + BNZ IGC0013D + LA R1,=C'IGC1013.MOD' + SVC LOAD + LTR R15,R15 + BNZ IGC0013A EXIT WITH ERROR TO FORCE ABEND 106 + ST R0,AIGC1013 SAVE ADDRESS OF TYPE 4 ABEND FORMATTED DUMP +IGC0013D EQU * TYPE 4 FOUND, GO PRINT FORMATTED DUMP + LM R14,R2,IGC0013S + L R6,AIGC1013 + BR R6 LINK TO TYPE 4 FORMATTED ABEND DUMP ROUTINE +IGC0013N EQU * NO DUMP REQUESTED, EXIT NORMALLY + LM R14,R2,IGC0013S + SR R15,R15 CLEAR R15 TO PREVENT 106 ABEND FOR IGC1013 ONLY + BR R14 EXIT NORMALLY +IGC0013A EQU * + LM R14,R2,IGC0013S + LA R15,4 SET ERROR TO FORCE 106 ABEND FOR IGC1013 NOT FOUND + BR R14 EXIT NORMALLY +AIGC1013 DC A(0) ADDRESS OF TYPE 4 ABEND FORMATTED DUMP ROUTINE +IGC0013S DC 5F'0' SAVE R14,R2 ACROSS LOAD +DABEND DC C'IGC0013A ABEND = ' +DCMP DC CL8'XXSSSUUU',C' PSW = ' +DPSW DC CL16' ',C'$' +********* +* +* IGC0035 - WTO/WTOR +* +********* +IGC0035 DS 0H + USING *,R6 + SR R2,R2 + CLI 0(R1),0 + BNE IGCWTOR +IGCWTO EQU * + IC R2,1(R1) + SH R2,=H'4' + EX R2,MVCWTO MOVE WTO TEXT + LA R2,WTOMSG(R2) + MVI 0(R2),C'$' ADD MS-DOS END OF TEXT + LA R2,WTOMSG + SVC WTO ISSUE MS-DOS WTO + SR R15,R15 + BR R14 +IGCWTOR EQU * + SR R15,R15 + IC R15,9(R1) + EX R15,MVCWTORM + LA R2,WTOMSG-4(R15) + MVI 0(R2),C'$' + LA R2,WTOMSG + SVC WTO + CLI WTORPEND,TRUE ONLY ONE AT A TIME ALLOWED + BE WTORERR + IC R15,0(R1) R15 = REPLY LENGTH + ST R15,WTORTCNT SAVE COUNT FOR EXT. INT. RTN. + ST R15,WTORCCNT + L R0,0(R1) + ST R0,WTORARPY SAVE REPLY ADDR. + ST R0,WTORCRPY + L R15,4(R1) + ST R15,WTORAECB SAVE ECB ADDR. + SR R0,R0 + ST R0,0(R15) CLEAR ECB + MVI WTORPEND,TRUE ENABLE EXT. INT. REPLY ROUTINE + SR R15,R15 + BR R14 EXIT WITH REPLY PENDING +WTORERR EQU * + LA R15,4 + BR R14 +WTOMSG DC CL256' ',C' ' +MVCWTO MVC WTOMSG(0),4(R1) +MVCWTORM MVC WTOMSG(0),12(R1) +WTORPEND DC AL1(FALSE) +TRUE EQU 1 +FALSE EQU 0 +WTORTCNT DC A(*-*) TOTAL REPLY CHAR ALLOWED +WTORCCNT DC A(*-*) CURRENT REPLY COUNTER DEC BY EXT. INT. RTN. +WTORARPY DC A(*-*) ADDRESS OF REPLY FIELD +WTORCRPY DC A(*-*) CURRENT REPLY CHAR. ADDR. INC BY EXT. INT. RTN. +WTORAECB DC A(*-*) ADDRESS OF ECB +******** +* +* COMMON DATA +* +******** +* +* PC/370 SVC'S +* +PWORK DC D'0' +DWORK DC CL9' ' +HEXTAB DC C'0123456789ABCDEF' +EXIT EQU 0 +TRACE EQU 9 +GMAIN EQU 10 +FMAIN EQU 11 +EBCASC EQU 12 +ASCEBC EQU 12 +LOAD EQU 25 +WTO EQU 200+9 MS-DOS PRINT TEXT +WRITECHR EQU 200+2 MS-DOS PRINT CHAR +KEYREAD EQU 200+1 MS-DOS READ CHAR WITH ECHO +KEYSTAT EQU 200+11 MS-DOS TEST KEYBOARD +CR EQU X'0D' ASCII CARRIAGE RETURN +LF EQU X'0A' ASCII LINE FEED +* +* GENERAL REGISTERS +* +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +R3 EQU 3 +R4 EQU 4 +R5 EQU 5 +R6 EQU 6 +R7 EQU 7 +R8 EQU 8 +R9 EQU 9 +R10 EQU 10 +R11 EQU 11 +R12 EQU 12 +R13 EQU 13 +R14 EQU 14 +R15 EQU 15 +********* +* +* CVT - MVS COMMUNICATIONS VECTOR TABLE +* +********* + DS 0F + DC CL16'PC/370 MVS CVT' + DC X'8386' MACHINE # + DC C'2.0A' PC/370 RELEASE 2.0A +CVT DS 0F + DC A(*-*) CVTTCBP ACCRESS OF NEXT TCB + ORG CVT+56 + DC PL4'87200' CVTDATE PACKED DECIMAL DATE + ORG CVT+116 + DC X'93' MVS/XA OS OPTIONS + ORG CVT+128 + DC A(X'200') CVTNUCB END OF NUCLEUS + ORG CVT+164 + DC A(*-*) CVTMZ00 HIGHEST ADDRESS IN MACHINE + ORG CVT+196 + DC A(*-*) CVTSMCA SMF COMMON AREA + DC A(*-*) CVTUSER USER POINTER +********* +* +* MISC. MVS CONTROL BLOCKS +* +********* +TCB DS 0F TASK CONTROL BLOCK +RB DS 0F +ASCB DS 0F ADDRESS SPACE CONTROL BLOCK +SMCA DS 0F SMF COMMON AREA +********* +* +* PSW.DOC LOW MEMORY PSW EQUATES +* +********* +OLDEXT EQU X'18' OLD EXTERNAL PSW +OLDSVC EQU X'20' OLD SUPERVISOR CALL PSW +OLDPGM EQU X'28' OLD PROGRAM CHECK PSW +OLDMCK EQU X'30' OLD MACHINE CHECK PSW +OLDIOS EQU X'38' OLD I/O INTERRUPT PSW +CSW EQU X'40' CHANNEL STATUS WORD +CAW EQU X'48' CHANNEL ADDRESS WORD +ITIMER EQU X'50' INTERVAL TIMER +NEWEXT EQU X'58' NEW EXTERNAL PSW +NEWSVC EQU X'60' NEW SUPERVISOR CALL PSW +NEWPGM EQU X'68' NEW PROGRAM CHECK PSW +NEWMCK EQU X'70' NEW MACHINE CHECK PSW +NEWIOS EQU X'78' NEW I/O INTERRUPT PSW +SVCR15 EQU X'190' SVC TEMP SAV R15 +PGMR15 EQU X'194' PGM TEMP SAV R15 +EXTR15 EQU X'198' EXT TEMP SAV R15 +IHACVT DSECT +CVTTCBP DS A NEXT TCB + ORG IHACVT+56 +CVTDATE DS PL4 PACKED DATE + ORG IHACVT+128 +CVTNUCB DS A END OF NUCLEUS + ORG IHACVT+164 +CVTMZ00 DS A END OF REAL MEMORY + ORG IHACVT+196 +CVTSMCA DS A SMF COMMON AREA +CVTABEND DS A SECONDARY CVT +CVTUSER DS A USER POINTER +********************************************************************* +* +* ASCB - ADDRESS SPACE CONTROL BLOCK FOR PC/370 RELEASE 2.0+ +* +********************************************************************* +* +* THIS CONTROL BLOCK IS INITIALIZED BY THE PC/370 EMULATOR AT EXECUTION +* TIME FOR THE MAIN PROGRAM COM FILE AND IS LOCATED AT VIRTUAL MEMORY +* ADDRESS X'104'. THIS CONTROL BLOCK IS ALSO CREATED FOR EACH ATTACHED +* COM PROGRAM ADDRESS SPACE DURING ATTACH SVC 26 EXECUTION (SEE SVC.DOC). +* +********************************************************************* +ASCB DSECT +ASCIDR DS CL4 ASCB IDENTIFIER C'ASCB' +ASCNXT DS A ABSOLUTE ADDRESS OF NEXT DAUGHTER TASK ASCB +ASCPRV DS A ABSOLUTE ADDRESS OF PREVIOUS MOTHER TASK ASCB +ASCASO DS A ABSOLUTE ADDRESS OF ADDRESS SPACE ORIGIN +ASCASL DS F LENGTH OF ADDRESS SPACE (USED FOR ADDRESS PROTECTION) +ASCASF DS A RELATIVE ADDRESS OF FIRST FREE QUEUE ELEMENT (FQE) +ASCENT DS A RELATIVE ADDRESS OF ENTRY POINT (FROM COM PREFIX) +ASCEXT DS A RELATIVE ADDRESS OF RETURN IN MOTHER TASK ASCB +LASCB EQU *-ASCB + END MVS + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DEMO/PLOTXY.ALC b/PC370_orig/Diskette/full/DEMO/PLOTXY.ALC new file mode 100644 index 0000000..b11f36d --- /dev/null +++ b/PC370_orig/Diskette/full/DEMO/PLOTXY.ALC @@ -0,0 +1,121 @@ + TITLE 'PLOTXY.ALC - PLOT Y=SIN(X) USING 320 X 200 COLOR SCREEN' +* +* PGM-ID. GRAPH.ALC +* AUTHOR. DON HIGGINS +* DATE. 08/20/87 +* REMARKS. PLOT SIN WAVE ON 320X200 SCREEN USING 80X87 SCIENTIFIC +* SUBROUTINE PACKAGE SIN FUNCTION. +* +PLOTXY CSECT + LR R12,R15 + USING PLOTXY,R12 + LA R2,=C' PLOTXY.ALC GRAPH OF SIN WAVE$' + SVC WTO + LA R2,=C' THIS PGM REQUIRES COLOR 320X200 MONITOR AND 80X87$' + SVC WTO + LA R2,=C' HIT ANY KEY TO START$' + SVC WTO + SVC READCON + ICM R0,B'0011',=AL1(VIOSETM,VIOM320) + SVC VIDEOIO SET GRAPHIC 320 X 200 MODE + LD FR0,=D'0' + STD FR0,XMIN XMIN=0. + STD FR0,X X=XMIN + L R15,=V(PI) + BALR R14,R15 + MD FR0,=D'2' + STD FR0,XMAX XMAX=2*PI + SD FR0,XMIN + DD FR0,XPIXILS + STD FR0,XINC XINC=(XMAX-XMIN)/XPIXILS + LD FR2,=D'1' + DDR FR2,FR0 + STD FR2,XSCALE XSCALE=XPIXILS/(XMAX-XMIN) + LD FR0,=D'-1' + STD FR0,YMIN YMIN=-1 FOR SIN + LD FR0,=D'1' + STD FR0,YMAX YMAX=1 FOR SIN + SD FR0,YMIN + LD FR2,YPIXILS + DDR FR2,FR0 + STD FR2,YSCALE YSCALE=YPIXILS/(YMAX-YMIN) +LOOP EQU * PLOT Y=F(X) FOR X=XMIN,XMAX,XINC + LD FR0,X + LDR FR2,FR0 SAVE X IN FR2 FOR DEBUG + L R15,=V(SIN) + BALR R14,R15 FR0=SIN(X) + LDR FR4,FR0 SAVE SIN(X) IN FR4 FOR DEBUG + STD FR0,Y + BAL R14,PLOT + LD FR0,X + AD FR0,XINC + STD FR0,X + CD FR0,XMAX + BL LOOP +EOJ EQU * + SVC READCON HOLD SCREEN UNTIL NEXT KEY + ICM R0,B'0011',=AL1(VIOSETM,VIOM2480) + SVC VIDEOIO SET 24X80 CHARACTER MODE + SVC EXIT EXIT TO MS-DOS +PLOT EQU * PLOT (X,Y) SCALED TO 320X200 SCREEN + ST R14,SAVE14 + LD FR0,Y + SD FR0,YMIN + MD FR0,YSCALE + L R15,=V(INT) + BALR R14,R15 R0=INT((Y-YMIN)*YSCALE) + ST R0,IY + LR R4,R0 SAVE IY IN R4 FOR DEBUG + LD FR0,X + SD FR0,XMIN + MD FR0,XSCALE + L R15,=V(INT) + BALR R14,R15 R0=INT((X-XMIN)*XSCALE) + ST R0,IX + LR R2,R0 SAVE IX IN R2 FOR DEBUG + ICM R0,B'0011',=AL1(VIOPSET,VIOPCV) + L R14,IX + L R15,IYPIXILS + S R15,IY + SVC VIDEOIO SET PIXIL AT (IX,IY) + L R14,SAVE14 + BR R14 +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +R3 EQU 3 +R4 EQU 4 +R5 EQU 5 +R12 EQU 12 +R14 EQU 14 +R15 EQU 15 +FR0 EQU 0 FLOATING POINT REG 0 +FR2 EQU 2 +FR4 EQU 4 +FR6 EQU 6 +VIOSETM EQU 0 AH VALUE FOR VIDEOIO SET MODE (SEE A-48) +VIOM320 EQU 4 AL VALUE FOR 320 X 200 MODE +VIOM2480 EQU 2 AL VALUE FOR 24 X 80 BW CHARACTER MODE +VIOPSET EQU 12 AH VALUE FOR VIDEOIO SET BIT (SEE A-49) +VIOPCV EQU 1 AL VALUE FOR COLOR VALUE +VIDEOIO EQU X'80'+X'10' 8086 VIDEO BIOS INTERRUPT SVC +EXIT EQU 0 EXIT TO MS-DOS +WTO EQU 209 WRITE TO OPERATOR +READCON EQU 207 READ KEYBOARD CHARACTER INTO R0 +XPIXILS DC D'318' 320-2 TO AVOID MISSING PIXILS AT EDGE +YPIXILS DC D'198' 200-2 TO AVOID MISSING PIXILS AT EDGE +IYPIXILS DC F'199' REVERSE IY TO MOVE ORIGIN FROM UPPER LEFT TO LOWER +X DC D'0' +XMAX DC D'0' +XMIN DC D'0' +XINC DC D'0' CALC (XMAX-XMIN)/XPIXILS +XSCALE DC D'0' CALC XPIXILS/(XMAX-XMIN) +Y DC D'0' +YMAX DC D'0' +YMIN DC D'0' +YSCALE DC D'0' CALC YPIXILS/(YMAX-YMIN) +IX DC F'0' +IY DC F'0' +SAVE14 DC A(0) + END PLOTXY + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DEMO/SIEVE.ALC b/PC370_orig/Diskette/full/DEMO/SIEVE.ALC new file mode 100644 index 0000000..d72c74b --- /dev/null +++ b/PC370_orig/Diskette/full/DEMO/SIEVE.ALC @@ -0,0 +1,161 @@ + TITLE 'SIEVE.ALC - FIND PRIME NUMBERS USING SIEVE' +* +* AUTHOR. DON HIGGINS. +* DATE. 12/19/86. +* REMARKS. LIST PRIMES ENDING IN 999 UP TO 100,000 (MAXPRIME VALUE) +* USING 100,000 BYTE TABLE AND SIEVE ROUTINE +* +* 01/16/87 MODIFY TO USE BXLE AND CLCL SCAN FOR NEXT PRIME +* 03/01/87 MODIFY TO USE GMAIN INSTEAD OF DIRECT FQE ACCESS +* 05/20/87 UPDATE TIMINGS FOR PC/370 R2.0 +* +SIEVE CSECT + LR BASE,ENTRY + USING SIEVE,BASE + LA R2,=C' $' + SVC WTO + LA R2,=C'SIEVE.ALC PROGRAM TO PRINT PRIMES ENDING$' + SVC WTO + LA R2,=C'IN 999 UP TO 100,000 USING 100,000 BYTE TABLE$' + SVC WTO + LA R2,=C'AND SIEVE ROUTINE. START AND ENDING TIME,$' + SVC WTO + LA R2,=C'AND 370 INSTRUCTION COUNT ARE ALSO PRINTED.$' + SVC WTO + LA R2,=C'TIME = 176 SECONDS ON 4.77 MHZ 8088 PC.$' + SVC WTO + LA R2,=C'TIME = 63 SECONDS ON 6 MHZ 80286 PC/AT.$' + SVC WTO + LA R2,=C'TIME = 37 SECONDS ON 10 MHZ 80286 PS/2-50.$' + SVC WTO + LA R2,=C'TIME = 31 SECONDS ON 12 MHZ 80286 COMPAQ.$' + SVC WTO + LA R2,=C'TIME = 20 SECONDS ON 16 MHZ 80386 COMPAQ.$' + SVC WTO + LA R2,=C' $' + SVC WTO + L ENTRY,=V(PET) + BALR LINK,ENTRY PRINT STARTING TIME + BAL LINK,INIT INIT REGS AND TABLE WITH 2,3 MARKED + LA NUMBER,5 + LA NEXT,999 NEXT TARGET NUMBER WITH 999'S +MAINLOOP EQU * + BAL LINK,MARKDUP MARK DUPLICATES OF NUMBER + BAL LINK,FINDNEXT FIND NEXT PRIME + BZ MAINEOJ EXIT IF NONE FOUND + CLR NUMBER,NEXT + BL MAINLOOP LOOP IF NUMBER < NEXT TARGET + LA NEXT,1000(NEXT) + BNE CHKEOJ + BAL LINK,PRTNUM PRINT NUMBER IF EQUAL TO TARGET +CHKEOJ EQU * + CL NUMBER,=A(MAXPRIME) + BL MAINLOOP LOOP IF NUMBER < MAXPRIME +MAINEOJ EQU * + L ENTRY,=V(PET) + BALR LINK,ENTRY PRINT ENDING TIME + SVC EXIT + TITLE 'INIT - INITIALIZE TABLE WITH PRIME INDICATORS' +INIT EQU * + L R1,=A(MAXPRIME) + SVC GMAIN ALLOCATE TABLE FROM FREE MEMORY + LTR R0,R0 + BNZ INITERR + LR TABS,R2 + LR TABE,R2 + A TABE,=A(MAXPRIME) + MVC 0(6,TABS),INITDATA + LRA R3,0(TABS) + L R2,=A(MAXPRIME-6) + MVCP 6(R2,TABS),0,R3 INIT TABLE WITH 2,3 DUP. MARKED + BR LINK +INITERR EQU * + LA R2,=C'INSUFFICIENT MEMORY FOR TABLE$' + SVC WTO + SVC TRACE + DC C'BUG ' + SVC EXIT + TITLE 'PRTNUM - PRINT PRIME NUMBER' +PRTNUM EQU * + CVD NUMBER,PWORK + MVC DNUM,DMASK + ED DNUM,PWORK+4 + LA R2,DNUM + SVC WTO + BR LINK + TITLE 'MARKDUP - MARK DUPLICATES IN TABLE' +MARKDUP EQU * + LA DUP,0(NUMBER,TABS) + BXH DUP,NUMBER,MARKEXIT EXIT IF DUP > TABE +MARKLOOP EQU * + MVI 0(DUP),NOTPRIME + BXLE DUP,NUMBER,MARKLOOP LOOP IF DUP <= TABE +MARKEXIT EQU * + BR LINK + TITLE 'FINDNEXT - FIND NEXT PRIME IN TABLE' +FINDNEXT EQU * + LA R0,1(NUMBER,TABS) + LR R1,TABE + SR R1,R0 + BNH FINDEOF EOF IF SCAN LENGTH NOT > 0 + LM R2,R3,=A(0,NOTPRIME*X'1000000') + CLCL R0,R2 SCAN FOR NEXT PRIME + BE FINDEOF EOF IF NO PRIME FOUND + SR R0,TABS + LR NUMBER,R0 + BR LINK EXIT WITH NZ FOR PRIME +FINDEOF EQU * + SR R0,R0 FORCE ZERO CC FOR END OF TABLE + BR LINK + TITLE 'COMMON DATA' + LTORG +* +* SVC'S +* +EXIT EQU 0 +TRACE EQU 9 +GMAIN EQU 10 R1=LENGTH, R2=ADDRESS, R0=RC (0=OK) +WTO EQU 209 +* +* REGISTERS +* +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +R3 EQU 3 +DUP EQU 4 +TABS EQU 5 +NUMBER EQU 6 R6/R7 USED IN BXLE/BXH +TABE EQU 7 +TWO EQU 9 +NEXT EQU 10 +BASE EQU 12 +LINK EQU 14 +ENTRY EQU 15 +* +* DATA +* +MAXPRIME EQU 100000 (100,000=200 SEC, 10,000=20 SEC FOR QUICK TEST) +PRIME EQU 0 +NOTPRIME EQU 1 +PWORK DC D'0' +DMASK DC X'40206B2020206B202020' +DNUM DC CL10' Z,ZZZ,ZZZ',C'$' +* +* INITDATA ELIMINATES 2'S AND 3'S FROM TABLE +* +INITDATA DC AL1(NOTPRIME,PRIME,NOTPRIME,NOTPRIME,NOTPRIME,PRIME) +* +* DSECTS +* +ASCB DSECT +ASCBIDR DS CL4 +ASCBNEXT DS A NEXT ASCB OR ZERO +ASCBPREV DS A PREVIOUS ASCB OR ZERO +ASCBASO DS A VIRTUAL ADDRESS SPACE ORIGIN +ASCBASL DS A VIRTUAL ADDRESS SPACE LENGTH +ASCBASF DS A RELATIVE ADDRESS OF FREE SPACE QUEUE OR ZERO +ASCBASE DS A RELATIVE ADDRESS OF ENTRY POINT USED BY ATTACH +ASCBEXIT DS A RELATIVE ADDRESS OF EXIT IN PREV. ADDR. SPACE + END SIEVE + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DEMO/Z86SUB.ASM b/PC370_orig/Diskette/full/DEMO/Z86SUB.ASM new file mode 100644 index 0000000..e43996b --- /dev/null +++ b/PC370_orig/Diskette/full/DEMO/Z86SUB.ASM @@ -0,0 +1,22 @@ + TITLE 'Z86SUB - 8086 USER EXIT' +; +; PGMID. Z86SUB.ASM LINKED TO Z86SUB.EXE +; AUTHOR. DON HIGGINS +; DATE. 04/12/87 CONVERTED TO MASM V4 STD. EXE CONVENTIONS WITH FAR EXIT +; +CODE SEGMENT PUBLIC + ASSUME CS:CODE +PRTMSG PROC FAR + PUSH DS ;SAVE DS + PUSH CS + POP DS ;MOVE CS TO DS + MOV DX,OFFSET MSG + MOV AH,9 + INT 21H + POP DS ;RESTORE DS + RET +PRTMSG ENDP +MSG DB 'HELLO FROM Z86 SUB',0DH,0AH,'$' +CODE ENDS + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DEMO/Z86SUB.COM b/PC370_orig/Diskette/full/DEMO/Z86SUB.COM new file mode 100644 index 0000000000000000000000000000000000000000..6164abe90409f7cd49a71cb92bc26ce7582a8126 GIT binary patch literal 33 ocmb2+li$U|u!ZxiqWozOS05jL1-Br7Uxg?OGlk$#CtfZU0GtpAoB#j- literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/DOC/HELP.DOC b/PC370_orig/Diskette/full/DOC/HELP.DOC new file mode 100644 index 0000000..d92b870 --- /dev/null +++ b/PC370_orig/Diskette/full/DOC/HELP.DOC @@ -0,0 +1,183 @@ + +PC/370 help documentation + +So you've successfully installed PC/370 using the BAT\INSTALL.BAT +command, have run the demo programs, and have read the documentation +files, but you still have some questions. Well, here are some of the +most frequently asked questions and some answers which may help: + + 1. Where can I get more help? + + Send letter and/or diskette with problem to me at the address + listed below and I will reply. Subscribe to Compu-Serve + electronic mail survice adn send me EASY mail message + using ID# 73047,1113. + + 2. The A370.EXE cross assembler gets I/O error reading my source + ALC program file? + + The file must be in ASCII text form with line feed (X'0A') + character ending each line of text. This is standard PC format + used by most text editors including EDLIN and SEE. If the ALC + file was downloaded from an IBM mainframe, it may need to be + translated from EBCDIC to ASCII. Most mainframe to PC link + facilities have this translation option as a default. + + 3. The A370.EXE cross assembler did not recognize some statements? + + See USER.DOC for OS/VS assembler features not supported by + A370.EXE such as macros, and see the reference section for + additional texts on OS/VS assembler and ASSIST. If the program + has macros, you must use the M370.COM macro preprocessor to + expand macros into basic assembler first. If the program has + floating point E, D, or L type DC constants, an 80x87 math co- + processor must be installed for the assembler to correctly + assemble the floating point constants. + + 4. The L370.EXE linkage editor keeps getting unresolved external + references even though I've checked that all subroutines have + been added to system or program LIB file with correct /B option + of MS-DOS copy command as shown in BAT\BLDLIB.BAT? + + The linkage editor scans the program LIB file first and then the + system LIB file in sequential order attempting to resolve all + external references in one pass. If any module selected for + inclusion calls a module previously scanned and not selected, + then the link will fail as a result of the backward reference. + You must sequence the libraries to eliminate backward references + or force loading of required modules with explicit external + address constants. To allow unresolved references use option U. + + 5. My first program will not run. How do I debug it? + + Specify an upper case T as only parameter when executing program + to start in debug mode or link it with option D specified. At + the interactive debug prompt, type T to trace instructions up to + point of failure. You can stop trace at any point by hitting + any key and then typing T again to restart. If no entry point + name was specified on END statement, the program will start at + first byte of code. If there are too many instructions before + failure to trace, enter Q for quiet mode execution up to point + of failure and then enter N for list of last 20 instructions + executed. See debug chapter of USER.DOC for more information. + + 6. My write to operator message printed garbage after message?. + + Add $ character to tell MS-DOS where end of text is. + + 7. My first file I/O operation caused an I/O error? + + Make sure that file is in current directory or that complete + MS-DOS file path was specified in DCBDSN field of DCB with a + trailing null character (X'00'). Make sure that record length + (LRECL) includes room for carriage return and line feed + characters in each text record. Text record processing on the + PC is quite different from the normal fixed length text record + processing on an IBM mainframe. Text records on the PC created + by the SEE.COM full screen editor or most other PC editors such + as EDLIN store text records in variable length ASCII form with a + carriage return (X'0D') and line feed (X'0A') character + indicating the end of each record and an end of file (X'1F') + character after the last line feed. If the file being read or + written has 80 data characters, then the record length needs to + be 82 bytes for text type files. See SYSTEM.DOC for more + information on file DCB options including translation between + EBCDIC and ASCII. The ASSIST extended instructions XREAD and + XPRNT make the translation between ASCII text file format and + EBCDIC fixed length record format automatically. See the ASSIST + demo programs DEMOAST1.ALC through DEMOAST4.ALC and the ASSIST + section of USER.DOC for more information. + + 8. The records read from my input file appear to be in ASCII + instead of EBCDIC as expected by the 370 program? + + The default for DCB text file processing is not to translate + between ASCII and EBCDIC. There is an option bit in the DCBFLG + byte named DBTRAN which can be set prior to open to request that + each record be translated such that file is in ASCII and record + processed by program is in EBCDIC. The ASSIST extended + instructions XREAD and XPRNT automatically make this + translation. + + 9. Why don't you have an option to let all character strings + default to ASCII instead of EBCDIC code in an assembler program? + + Release 1 did have option E to specify either ASCII or EBCDIC + for DC character strings and self defining character strings + such as immediate data in CLI instruction. This created non- + standard 370 code by default when the ASCII mode was selected + and was very confusing when mixing subprograms with different + options. Release 2 removed the E option and added option to + define ASCII character strings using double quotes. This + solution also allows both types of character strings to be + easily used in a single program. + + 10. Can I download and use the MVS, VM, or VSE macro's? + + No. First they are copyright by IBM and licensed only on the + mainframe they reside on. Second, they would not work without + changing them to use PC/370 supervisor calls and the limited + syntax of the macro pre-processor. The common MVS macros + included such as DCB, OPEN, CLOSE, GET, and PUT have been coded + from scratch for the PC environment. Several different users + are developing additional macros to provide compatible unit test + environments for each of the above operating systems. + + 11. Can I download load modules from an IBM mainframe and run + them using PC/370? + + Yes, but only if you also complete a PC/370 shell such as the + MVS demo shell to intercept all SVC's and supervisor state + instructions used. The demo shell will support a native 370 + mainframe MVS load module that only uses problem state + instructions and the WTO and WTOR svc's. The actual load module + file would have to be processed to remove all the extraneous + fetch control records leaving just the 370 object code in a MOD + type file which could be loaded and executed by the shell + program. The object code would have to be self relocating (i.e. + no relocation records in the load module file). + + 12. Can I download fixed blocked files and read them directly with a + PC/370 program? + + Yes, one of the DCB file processing options is fixed blocked. + This mode assumes that the file contains fixed length binary + and/or EBCDIC data records with no carriage returns or line + feeds. Text files are not normally stored in this format on + PC's because it wastes so much space compared to the variable + length ASCII text format. + + 13. Can I upload source, object, or load modules to the mainframe + and execute them? + + Yes, with the following restrictions: + + a. Source code must be translated back to EBCDIC and any SVC's + or macros used must be compatible with the mainframe + operating system and macro assembler. + + b. Object code can be uploaded after it is converted from + compressed bit stream format (OBJ) to OS/VS linkage editor + 80 byte fixed blocked format (370) using the utility + T370.COM which is included in both object and source form. + This is being used by some software developers who unit + test code on a PC and then upload tested object code to + mainframe. + + c. Load module code can be uploaded but with the following + restrictions. Only MOD format code would make sense to + upload since the loader code in COM format files is unique + to PC MS-DOS environments. An application interface on + the mainframe would have to be written to read the MOD + file code into memory and link to it. Of course, the + supervisor instructions would have to be compatible with + the mainframe operating environment. + +Please send additional questions and answers you think would be +helpful to other users. I will add them with appropriate credits. +This file was first added in release 4.2 at the suggestion of BIll +Earle. + +Don Higgins +6365 - 32 Avenue North +St. Petersburg, Florida 33710 \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DOC/HISTORY.DOC b/PC370_orig/Diskette/full/DOC/HISTORY.DOC new file mode 100644 index 0000000..3e1f947 --- /dev/null +++ b/PC370_orig/Diskette/full/DOC/HISTORY.DOC @@ -0,0 +1,430 @@ + +HISTORY.DOC Summary PC/370 Release History + + MMS/370 R1.0 12/28/81 first beta test demo for Z80 CP/M-80 + + Successful demo program assembly, link, and execute + completed on the following systems: + + 1. Radio Shack Model II with Lifeboat CP/M v2.2. + 2. Cromemco system with Tarbell CP/M v1.4. + + MMS/370 R1.1 01/04/82 first Distributor evaluation version + sent to Lifeboat Assoc. for evaluation + + MMS/370 R1.2 12/20/82 second beta test + + MMS/370 R1.3 02/12/83 first user release + + A370 + 1. Add XREAD, XPRNT, XDECI, XDECO, XFILI, XFILO, XDUMP + 2. Fix location 0 overlay processing missing END. + 3. Force E22 length error for 0 length program. + L370 + 1. Force E08 memory error for 0 length segment. + 2. Fix incorrect SEARCH return code due to DEQ. + 3. Fix ORG error at end if no literals. + 4. Fix bad stack address at program entry with option G. + 5. Fix object code error when control Z is first byte of + physical block in concatenated object file. + 6. Allow alternate disk drive A for L370.LIB if not found + on specified drive for object file. + E370 + 1. Add ASSIST support plus interactive debug log option. + 2. Add 370 instruction trace and instruction address stop. + 3. Add 370 address protection for CP/M and E370 areas. + + MMS/370 R2.2 05/04/83 second user release with new XA extensions + + A370 + 1. 27 new instructions added including BAS, BASR, MVCIN, + BSM, and BASSM. + 2. Fix made to handle explicit 256 byte SS instructions + correctly. + 3. Fix DC logic to surpress duplicate references to *. + 4. FIX SVC interface to save IX and IY for NEC PC MSDOS. + L370 + 1. Fix stack pointer for execution for option G to prevent + initial call from storing address in program area. Also + changed call in prefix to simple jump to emulator entry. + E370 + 1. 5 new non-privileged instructions supported along with + PSW address mode bit 17. + 2. The existing instructions LA, BAL, BALR, EDMK, and TRT + all have been modified to function correctly in both + 24 and 31 bit addressing modes. + 3. Fix incorrect instruction length code in BAL 24 bit + mode . + 4. Fix incorrect EDMK address for single byte PD fields. + 5. Fix incorrect SS instruction processing when length is + over 128. + 6. Fix fixed point multiply and divided overflow when + result is negative. + 7. Fix sign of remainder for fixed and packed divide. + 8. Fix packed decimal compare for negative zero. + 9. Fix condition codes for multiply and divide exceptions. + 10. Fix Assist XREAD to correctly support 1 byte area. + 11. Fix arithmetic shift left overflow logic. + 12. Fix packed decimal divide to correctly detect overflow. + + MMS/370 R2.3 06/30/83 third user release with updated XA + extensions + + A370 + 1. Add IPM and other new XA supervisor instructions + L370 + E370 + 1. Add IPM instruction + 2. Change XA mode PSW bit to 32 and display extended mode PSW + when in XA mode. + 3. Correct BSM logic to skip save when first register is 0. + 4. Add option to update 370 registers to MMDBUG command Y. + 5. Reduce size of E370 by 500 bytes by changing logic macros + to common subroutines for logical RR and RX instructions. + + MMS/370 R3.1 03/08/84 maintenance release with corrections + + A370 + 1. Fix error created by V type address constant referencing + CSECT defined later in same assembly. + 2. Fix length attribute of CSECT/DSECT to always be 1. + L370 + E370 + 1. Fix error in XR and X exclusive OR logic introduced in R2.3 + when logic was combined in 1 routine to save memory. + 2. Fix DP overflow logic to cause divide exception 0CB instead + of divide overflow. Note divide exception cannot be masked + like overflow but SPIE can be used to handle it. + 3. Check for interrupt every 256 instructions even in kill + mode. + 4. Only trace IFL entries in 370 mode for N command. + 5. Fix NODBUG minimum storage replacement module for MMDBUG to + correctly NOP 370 TRACE calls. + + PC/370 R1.0 06/08/85 first freeware release for 8086 MSDOS systems + + A370 + L370 + 1. Force option F to always dynamically load E370.EXE. The + emulator can no longer be linked with 370 code since L370 + does not process native 8086 assembler object code format. + E370 + 1. Add SVC's 17-22 to handle extended MSDOS functions such as + time. + + PC/370 R1.1 11/11/85 maintenance release + + A370 + 1. Allow lower case command line. + 2. Fix error for zero length data in DC for alignment. + L370 + 1. Allow lower case command line. + E370 + 1. Allow lower case debug command entry. + 2. Initialize register 13 to standard save area. + 3. Support 370 instruction address reset via J command. + 4. Only stop at IFL trace in 370 address stop mode. + 5. Attempt to close all files when exiting via command. + DOC + 1. Add documentation files describing trace id points. + + PC/370 R1.2 07/18/86 maintenance release plus SEE editor utility + + A370 + 1. Drop form feed on first page heading. + 2. Translate lower case ASCII comments to upper case. + 3. Align column headings for cross reference and repeat + headings. + 4. Fix error when DC F coded without data - now issues error. + 5. Rearrange opening of files in pass 2 to insure that no more + memory is required in pass 2 than in pass 1. This allows + number of symbols to directly determine maximum assembly + possible (SEE is within 30 symbols of maximum now). Note + debug was removed from A370 (8k) to provide more symbol + space. Also note in pass 2, ALC file buffer will be smaller + to provide room for object and print file buffers if + necessary to not exceed pass 1 memory usage. + 6. Tighten TITLE syntax to require correct leading quote. + L370 + 1. Drop form feed on first page heading. + 2. Align column headings with data lines. + 3. Correct bug causing CSECT reference labels to be truncated. + E370 + 1. Correct bug in XDECI ASSIST instruction to correctly input + negative numbers. + 2. Translate DDNAME to ASCII for SEARCH and DELETE SVC's. + 3. Reverse DMAS, DMAE, BLKE addresses during OPEN/CLOSE along + with EODAD and SYNAD addresses to support user defined + buffer. + 4. Change debug trace to only trace first ID after IFL in 370 + mode. + 5. Support trace ID's IOF and ION to turn interrupts off and + on. + 6. Fix bug in IOS get text record routine which caused + premature end of file when DCB was within 128 bytes of + buffer area due to uninitialized register picking up DCB + address instead of DMA address during pending EOF + processing. + 7. Fix bug in IOS random write routine to increment block + pointer when writing blocks larger than 128 bytes. + 8. Change debug to not kill SVC 9 trace entries from 370 code. + 9. Add SVC 23 to perform RENAME using DCB with EBCDIC names. + (See SEE.ALC for example use and IHADCB extensions.) + 10. Add SVC 24 to microcode printing line of ASCII text on + screen with attribute colors. (used to more than double SEE + speed). + 11. Fix memory management to not allocate from last FQE unless + there is room for a remaining smaller FQE pointer. Force + end of memory at x'FF00' to leave room for stack. + 12. Support S save/unsave debug command to protect current trace + ID while running in kill mode. (very useful to obtain high + speed execution up to selected point in program). + 13. Save 8086 flags in high R0 for BIOS SVC's such as KEYBOARD. + 14. Add explicit EBCDIC/ASCII translation and line control + options to SVC's 0-24 via high bits of R2: + bit 0 - explicit control if on, else use option E + bit 1 - force EBCDIC translation if on, else use ASCII + bit 2 - force addition of line control, else none + + (For example ICM R2,8,=X'80' would force no translation + and no line control regardless of option E setting.) + 15. Fix debug N trace listing to translate SVC 9 EBCDIC Id's. + + DOC + 1. Add SEE.ALC source code utility to edit or browse an ASCII + text file in full screen color mode. Keystrokes are + compatible with Turbo Pascal and PFS:WRITE. The editor + supports files up to 512k. SEE includes character graphics + to support line drawings and organizational chart drawings. + SEE also supports creation of session keystroke file (.KSF) + which can be reused to recreate SEE session with full screen + colors and with keyboard pause and wait control. + 2. Add PRINT.ALC source code utility to print source programs + and PC370.DOC documentation file with page control. + 3. Add information on electronic bulletin board and PC-SIG + distribution via disk #402. + 4. Add DW3NUM.ALC source code utility to insert line numbers on + all non-blank lines in a Displaywrite III text document. + Numbers are placed in left margin and reset at beginning of + each page. This program serves as a model for other + utilities that could be written to process Displaywrite III + document files directly. This utility squeezes file and + lists file on console in the process of inserting line + numbers. + 5. Drop form feed on first page heading for PRINTDOC.ALC. + + PC/370 R2.0 05/16/87 major update with 512 address space support + + A370 + 1. Converted to EXE format with 64k data segment and buffer + segment. + 2. Now supports 3 times as many labels and literals. + 3. File handle I/O with pathing much more efficient. + 4. Fix error if DSECT's contain anything but DS instructions. + 5. Allow references to ENTRY symbols within same module. + L370 + 1. Converted to EXE format with 64k data segment and buffers + segment. + 2. Now supports code modules up to 50k. + 3. File handle I/O with pathing much more efficient. + 4. New option M creates 370 MOD file without COM prefix. + E370 + 1. Converted to EXE format running in high 64k segment. + 2. The standard instruction set plus ASSIST now supports + direct addressing up to the maximum available memory + under MS-DOS 2.0+ (512k+). + 3. Error in one byte overlapped pack instruction corrected. + 4. Error in BXH and BXLE with negative updated index values + fixed. + 5. Memory management now supports the full address space + using 8 byte free queue elements (4 byte address and + 4 byte length). ASCASF FQE chain pointer is located at + X'118'in new address space control block. The same + registers for SVC 10 and 11 are used. + 6. File management support has been rewritten using MS-DOS + file handle I/O to support pathing and random or + sequential access to multiple files. Each file can + have up to 64K buffer. Maximum files open is + controlled by CONFIG.SYS FILES= parameter. See + DOC\SYSTEM.DOC and CPY\IHADCB.CPY for more information. + 7. The interactive debug facility has been expanded to + provide additional support for virtual address space + separate from emulator address space. The Z command + determines which address space functions refer to. The + debug facility is included in A370 and L370 as well as + E370. A new "I" command added, dumps full word counter + which is source record count in A370, logical object record + in L370, and 370 instruction counter in E370. Address stop + on this word can be used to stop execution at any desired + point. However, note that in kill mode, the counter may be + incremented more than once between trace ids preventing + address stop on equal from triggering. + 8. The interface between linked COM modules and the E370.EXE + emulator has been redesigned to use the MS-DOS standard EXEC + function instead of somewhat non-standard overlay load. Now + the first 16 bytes of each linked COM module contains the + EXEC mainline which links to E370.EXE in the high 64k of + available memory. E370.EXE initializes the virtual address + space origin 16 bytes past the beginning of the COM module + with executable code starting at X'210' into module or + relative X'200'. COM mainline will abort if there is not + room for COM module plus 64k for E370.EXE. + 9. E370.EXE now supports SVC 25 to load any kind of file + including linked COM files into free memory. See + DOC\SYSTEM.DOC and CPY\IHASCB.CPY. + 10. E370.EXE now supports SVC 26 an 27 for attach and detach of + COM 370 programs which run in their own relative address + spaces. See DEMO\DEMOPSW series of demo programs for + example. + 11. Fix trace and PSW address of EX target instructions. + + PC/370 R2.0A 05/24/87 fixes to 2.0 + + A370 + 1. EQU's preceeding first CSECT caused 0 length blank CSECT + error. + L370 + E370 + 1. Error in Freemain svc 11 when releasing block between two + existing free blocks chained to third free block. + 2. I/O supervisor now takes SYNAD exit if bad RBA causes random + read or write to fail due to pointing beyond disk capacity. + + PC/370 R3.0 08/30/87 new macro preprocessor, floating point, + scientific subroutines, generic interrupt SVC, ASCII string + constants, MVS shell demo with SIO channel simulator + A370 + 1. Support for E, D, and L floating point constants added. + 2. ASCII string constants in double quotes added and self + defining string constants fixed to handle C'''' etc. + 3. Error in DS or DC destroyed location counter causing + additional erroneous base errors in following instructions. + 4. Treat blank lines like comments instead of syntax errors. + L370 + 1. Error in concatenating object files when previous file ends + exactly on 128 block boundary. + 2. Add option I to surpress all interrupts during execution. + 3. Add option P to surpress floating point even if 80x87 avail. + E370 + 1. Floating point instructions added using 80x87. + 2. SVC's 28-35 added to assist use of ASCII strings, generic + interrupt to issue any MS-DOS or BIOS interrupt with user + defined PC registers, plus scientific subroutine assist + using 80x87 routines for square root, 2**X, tangent, + arctangent, logs. + 3. Fixed ASCII file output translation option (was translating + after write) in PUT svc. + 4. Correct ASCII/EBCDIC translation of left bracket and GE + symbols. + 5. Correct debug jump command to handle addresses over 64k in + 370 mode. + 6. Correct MP to return specification error if L'A LE L'B, L'B + GT 8, or high bytes of A for length L'B not zero. + + PC/370 R3.1 09/02/87 maintenance to R3.0 based on user feedback + + A370 + 1. Fix error in object code ORG when DS is used in multiple + CSECT module causing L370 link error due to ORG exceeding + length of CSECT (offset to start of non-zero CSECT was not + being subtracted to calculate relative CSECT ORG address). + Explicit ORG's worked fine, only a DS generated ORG caused + error. + L370 + E370 + + PC/370 R3.2 09/07/87 maintenance to R3.1 based on user feedback + + A370 + 1. Allow maximum 80 character ALC source with seq. #. + 2. Fix label equated to CSECT/DSECT which caused L370 errors. + 3. Flag DC error for RLD's for DSECT labels which caused L370 + errors. + L370 + E370 + 1. Fix ZAP to correct regression bug with R2.0 where any number + with zero in low nibble gives positive sign and zero + condition. + + PC/370 R4.0 11/08/87 maintenance to R3.1 based on user feedback + + A370 + 1. Add support for COPY statement to include source code from + any MS-DOS path\filename. The default suffix is CPY. + L370 + 1. Add option B to create file identical to COM file but with + suffix BIN for use with Micro Focus COBOL. + E370 + 1. Support resident option invoked by directly executing the + emulator EXE module. + 2. Support calls from Micro Focus COBOL in resident mode using + standard linkage conventions and V=R addressing mode. + 3. Modify OPEN logic to allow use of SYNAD exit even though + file may not be open due to error such as file not found. + Add error and function codes in R0 and R1 for use by SYNAD + exit in determining error (see LIB\SYNERROR.ALC). + + PC/370 R4.1 11/20/87 maintenance to R4.0 based on user feedback + + A370 + 1. Correct ORG to correctly handle CSECT or DSECT name as well + as any relative expression (The code was only allowing + relative expression operand rather than special label type). + L370 + + E370 + 1. Correct serious bug in release 4.0 which stores 8 byte free + queue element directly after the end of each BIN module. + (This code to build free area behind COM modules can cause + COBOL run time system to crash after exiting from + subroutine depending on use of area overlayed). + 2. Add optional parameter to define size of system queue area + (SQA) memory in the resident emulator address space for use + by COBOL subroutines. Size is in hex paragraphs and default + is 10 or 256 bytes. Through use of SQA, COBOL subroutines + can now perform standard file I/O with dynamic buffer + allocation (See BAT\RUNCBL.BAT demo for example SQA and + I/O use). + 3. Enhance interactive debug to support resident reusability by + restoring all traces at beginning of each COM execution and + at beginning of all COBOL subroutines called with option D + specified at link edit. Also toggle command K can be used + to restore traces at any point in program execution (This + allows quickly reaching a selected point in program and then + restoring traces for complete instruction tracing). + 3. Support user defined standard COBOL return code using value + in register 15 (low 16 bits) at exit. + + PC/370 R4.2 01/05/88 Micro Focus XM protected mode support + + A370 + L370 + 1. Add option U to allow undefined external references. + E370 + 1. Support Micro Focus XM COBOL protected mode call to PC/370 + assembler subroutine in BIN file (See USER.DOC for more). + The resident interrupt was moved from hex DC to hex 60. + (See PTF.DOC for fix to change interrupt # if it conflicts.) + 2. Fix 0C9 on CVB with negative zero packed decimal input. + 3. Correct EBCDIC to ASCII translate tables to handle + > { and [ conversion in both directions (half fixed in 3.0). + 4. Flag error for text file with LRECL<2. + 5. Fix SRP to use only low 6 bits in second operand for shift. + (If the 6 bit number was positive, 8 bits were used.) + 6. MVS standard parm list with address, half word count, and + EBCDIC parm field is now pointed to by R1 at entry. + 7. If floating point option is on and 80X87 is installed, + hardware assist is used for CVB and CVD to speed up + instruction by up to 4 times for large numbers. + 8. Add MVS program interruption element (PIE) control block + pointed to by R2 at entry to SPIE trap. This allows full + recovery from trap without losing content of registers. + (See CPY\IHAPIE.CPY for more information.) + 9. Fix incorrect PSW on exception of executed instruction. + 10. Add SVC 36 to load overlay file at specified virtual + address. + 11. Add SVC 37 to define SVC user exit table. + See DEMO\DEMOTRAP.ALC for examples. + 12. Add production version of emulator E370P42.EXE without + interactive debug or ASSIST facility to save 10k. +  \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DOC/INTRO.DOC b/PC370_orig/Diskette/full/DOC/INTRO.DOC new file mode 100644 index 0000000..ecc8cb3 --- /dev/null +++ b/PC370_orig/Diskette/full/DOC/INTRO.DOC @@ -0,0 +1,160 @@ + +INTRO.DOC Introduction to PC/370 + +Copyright 1988 Donald S. Higgins + +Don Higgins +6365 - 32 Avenue North +St. Petersburg, Florida 33710 + +E-MAIL via CompuServe 73047,1113 + +The PC/370 package is a PC shareware package which supports the +assembly, link edit, and execution of IBM 370 assembler programs +on a PC with 256k and MS-DOS release 2.0+. See READ.ME file in +root directory for registration information. + +The PC/370 package consists of four main programs: + + 1. M370.COM macro preprocessor which reads macro assembler file + and produces expanded basic assembler source code. + + 2. A370.EXE is an IBM 370 cross assembler which reads 370 source + code file and produces object code file plus optional listing + file. + + 3. L370.EXE is an IBM 370 cross linkage editor which reads object + code and produces a directly executable 370 native machine code + file plus optional CSECT listing file. + + 4. E370R42.EXE is an IBM 370 machine code emulator which is + dynamically invoked at execution time to support execution of + 370 native machine code including the standard problem state + instruction set plus packed decimal and floating point + instructions. Direct execution of E370 makes it resident to + eliminate the time required to dynamically load it at each 370 + program execution time, and to also support calls to 370 + subroutines from Micro Focus COBOL/2 programs running under + the default real MS-DOS mode on any 80x86 machine or the + extendedmemory XM protected mode on 80286 or 80386 machines. + +The package also comes with several 370 assembler language utilities +including: + + 1. SEE.COM - full screen text editor with PFS:Write and + Wordstar keystroke compatibility. + 2. PRINTDOC.COM - format utility to print documentation with + page numbers. + 3. T370.COM - object code translator to allow uploading 370 + object code files for direct OS/VS linkage + editing on 370 mainframe without reassembly. + +The PC/370 package consists of the following component directories: + + 1. R42 - root directory containing all PC/370 executable code. + 2. DOC - documentation ASCII text files. + 3. BAT - demo command procedures plus install procedure. + 4. LIB - 370 source code for L370.LIB system subroutine library. + 5. CPY - 370 source code for copy members. + 6. MAC - 370 source code for macros. + 7. CBL - 370 source code for COBOL 370 subroutine demo. + 8. DEMO - 370 source code for demo programs. + 9. UTIL - 370 source code for utilities SEE, PRINTDOC, and T370. + +On 3.5" diskette, all of the above directories are on single disk. +On 5.25" diskettes, 3 volumes are required starting with the +R42 volume which contains BAT\INSTALL.BAT command file. + +The PC/370 documentation consists for the following machine readable +files which can be printed via the utility PRINTDOC.COM: + + 1. INTRO.DOC - overview of product. + 2. HELP.DOC - common questions and answers + 3. USER.DOC - program options required to use all of the PC/370 + facilities at the application programmer level. + 4. SYSTEM.DOC - program options available for use by system + programmers. + 5. MACRO.DOC - macro preprocessor options plus included macros. + 6. UTILITY.DOC - utility program options. + 7. HISTORY.DOC - history of PC/370 releases and features + 8. PTF.DOC - private temporary fixes for previous releases. + +The PC/370 command procedures in the \BAT directory are as follows: + + 1. INSTALL - copy all PC/370 directories to hard disk with R42 + as root and all others as sub-directories. + 2. RUNDEMO - run all the demo programs in the \DEMO directory. + This will verify installation and illustrate the + PC/370 facilities. Note last section of demo + requires 80x87 math co-processor for floating point + demo. This section can be skipped if no co-processor + is installed. + 3. RUNUTIL - run demo of the SEE text editor, PRINTDOC print + utility, and T370 object code format utility. + 4. RUNMAC - run demo of macro pre-processor facility. + 5. RUNCBL - run demo of Micro Focus VS COBOL 370 subroutine. + 6. BLDLIB - rebuild L370.LIB system relocatable subroutine + library from source code in \LIB. + 7. BLDUTIL - rebuild utilities from source code in \UTIL. + + +All of the above commands are designed assuming that the current +directory is R42 and that all of the other 8 directories are defined +in the R42 directory. No parameters are required. + +To code and execute a simple sample program, type the following after +running the installation procedure file INSTALL.BAT and setting the +current directory to \R42: + + STEP COMMAND COMMENTS + + 1 SEE DEMO invoke full screen editor to + create DEMO.ALC 370 assembler + source file. + 2 DEMO CSECT first line - define section + 3 USING *,15 second - define base register + 4 LA 2,=C'HELLO$' third - address of msg. text + 5 SVC 209 fourth - request console msg. + 6 BR 14 fifth - exit to MS-DOS + 7 END sixth - end of program + + 8 enter escape key to save DEMO.ALC + and exit to MS-DOS + 9 A370 DEMO/LX assemble DEMO.ALC and create + DEMO.OBJ object code file and + DEMO.PRN listing with symbol + cross reference. + 10 L370 DEMO/LX link DEMO.OBJ object file and + create DEMO.COM executable file + and DEMO.LST CSECT listing file. + 11 DEMO.COM execute DEMO.COM which will load + E370R42.EXE to execute 370 machine + code in DEMO.COM and print "HELLO" + on the console. + 12 DEMO.COM T execute DEMO.COM again with test + parameter which invokes debug + facility. + 13. T At debug prompt, enter T to trace + each instruction while executing + the demo program. + + 14. TYPE DEMO.PRN print assembly listing. + + 15. TYPE DEMO.LST print link edit listing. + +I hope you find the PC/370 package useful. Please send feedback on +your usage of the product and suggestions you may have. Please +register if you want assistance with the current product and want +to support future development and enhancements. + +If you are not familiar with IBM 370 assembler language, I recommend +you obtain the text, "IBM 370 Assembler Language with ASSIST, +Structured Concepts, and Advanced Topics", by Charles J. Kacmar at +Texas A&M University, and published by Prentice Hall in September +1987, ISBN 0-13-455742-5. + +____________ + +IBM - trademark of International Business Machines +MS-DOS - trademark of Microsoft +VS COBOL - trademark of Micro Focus Inc. \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DOC/MACRO.DOC b/PC370_orig/Diskette/full/DOC/MACRO.DOC new file mode 100644 index 0000000..bfcfec8 --- /dev/null +++ b/PC370_orig/Diskette/full/DOC/MACRO.DOC @@ -0,0 +1,483 @@ + +MACRO.DOC PC/370 macro pre-processor documentation + +Resolution of macros in a PC370 Assembler source program is achieved +by means of a preprocessor. To invoke the preprocessor, just type the +following: + +M370 filespec + +"filespec" is in the standard DOS format for file specification. The +file extension is optional: if one is specified, it can be just +anything; if none is specified, MLC is the default. To indicate a file +with no extension, you must terminate the name by a period with +nothing behind. + +The source program will be examined, with all references to macro +instructions causing the appropriate expansion to be performed. A new +file with the same file name and ALC as the extension will be created +on the same drive as the input, ready to be passed to A370. For +instance, typing M370 MYPROG will cause MYPROG.MLC to be read from the +default drive and MYPROG.ALC to be written on the same drive. + +Macros themselves must each constitute one separate file with the +filename equal to the macro name and the extension equal to MAC, for +instance OPEN.MAC. Macros will always be read from the default drive +(if this drive is a RAM disk, access is extremely fast). + +Macros can have both positional and keyword parameters. In a macro, +references to parameters is via the & character: + + - &n ("n" being replaced by one digit from 1 to 9) refers to the + nth positional parameter; + + - &xxxxxxxx ("xxxxxxxx" being replaced by a name from one to eight + letters and/or digits) refers to keyword parameter xxxxxxxx. + +There are two predefined and system-maintained keyword parameters: + + - &LABEL$$ refers to the label; it always returns an eight- + character label padded with blanks if necessary; + + - &N$ references an internal three-digit counter incremented by one + at every occurrence of a macro instruction in the source program: + it can be appended to labels generated in the macro expansion to + make them unique. + +References to parameters may be inserted anywhere: between commas, +parentheses or quotes, and even in comments. If a parameter is to be +immediately followed by letters or digits, a separating period must be +used, for instance &PARM.DATA (the period will be dropped at expansion +time). In other cases, the period is optional: for instance, one may +code &PARM(R1) or &PARM.(R1) indifferently. If a parameter is to be +followed by a period, two consecutive periods must be coded, for +instance &NAME..COM. + +The length of a parameter can be tested in a AIF instruction by coding +K'&xxxxxxxx as the subject; the complement must then be a numeric +value. + +Macros may contain five special opcodes: + + MACRO which, if present, must be in the very first line of the + macro. It is used to supply the default values of the parameters. + The MACRO statement may extend on multiple lines. + + SETC which is used to set a new value in an existing parameter or + in a macro work-parameter. The first execution of a SETC instruction + for a new parameter name creates that parameter: no prior definition + is needed. The format of the SETC instruction is as follows: + + xxxxxxxx SETC value + + "xxxxxxxx" is the name of the parameter, without the leading & + character. "value" is any value; if it is enclosed in quotes, these + quotes will not be returned when the parameter is referenced. + + AIF in which only one condition can be tested. The relation signs + supported are = # > <. If, after resolution of all ¶meters, the + two sides of the equation are composed of digits only, regardless of + the respective numbers of digits, the comparison is numeric + (negative values are not supported). If K'¶meter is coded as + the first member and the second member is composed of digits only, + the comparison is also numeric. Otherwise, the comparison is + alphanumeric and the length of the complement determines the number + of characters compared from the subject. Both the subject and the + complement may be coded as is, quotes being optional. The + complement may contain any character except the period because the + period indicates the end of the complement. At the same time, the + period is the first character of the label where to go if the + condition is true. + + AGO in which you code a label where to proceed unconditionally. + This label should begin with a period. + + ANOP which is a no-op. + +Labels start with a period and can be 2 to 8 characters long. They +can be attached to a AIF, AGO or ANOP instruction or to any regular +Assembler statement in which case the label is erased during the +expansion process. All AIF and AGO statements referencing a label +must come before this label; in other words, branching backward is not +permitted. + +Lines of comments may be inserted in a macro simply by coding .* in +the first two positions. These lines will be ignored during the +expansion of the macro. + + ***************************** + +In the input source program, references to macros can freely be coded. +Parameters may extend on multiple lines. Each of these input lines is +changed into a comment line on the output. + +If continuation lines are used, the continued line must stop on a +comma as the last character or followed by at least one blank and +optional comments; the continuation line may restart in any position. +No continuation indicator in column 72 is needed. + +Positional and keyword parameters may be intermixed. If the value of +a parameter is a literal in quotes, these quotes are passed as an +integral part of the value: if necessary, you can get rid of them by +issuing a SETC statement moving the parameter into itself. +Consecutive commas can be coded to skip a positional parameter and +keep its default value. + + ***************************** + +Here are two examples of macros: + +DCB MACRO DSORG=S,RECFM=F,MACRF=G,LRECL=80,BLKSIZE=0, + EODAD=0,SYNAD=&EODAD,RECORD=0 +&LABEL$$ DS 0F,0CL86 + DC C'ADCB' + AIF &DDNAME=(.DDX format DDNAME=(FIELD) ? + DC A(DCBDD&N$) no, use generated ddname field + AGO .DDZ +.DDX DC A(&DDNAME) +.DDZ AIF &MACRF>P.BDAM is MACRF equal to R or W ? + DC X'FFFF',X'00' + DC CL1'&DSORG',CL1'&MACRF',CL1'&RECFM' + DC X'0A1A' + DC H'&LRECL',H'&BLKSIZE' + DC A(&EODAD,&SYNAD,&RECORD) + DC 54X'00' + AGO .DDN +.BDAM AIF '&RECORD'='0'.NOREC has RECORD parameter been omitted ? + DC X'FFFF',X'40' + AGO .DSORG +.NOREC DC X'FFFF',X'00' +.DSORG DC CL1'&DSORG',CL1'&MACRF',CL1'&RECFM' + DC X'0A1A' + AIF '&BLKSIZE'='0'.NOBLK has BLKSIZE been omitted ? + DC H'&BLKSIZE',H'&BLKSIZE' + AGO .ADRS +.NOBLK DC H'&LRECL',H'&LRECL' +.ADRS DC A(&EODAD,&SYNAD,0,&RECORD) + DC 50X'00' +.DDN AIF &DDNAME=(.END is DDNAME a field name ? +DDNAME SETC &DDNAME to remove quotes if any +DCBDD&N$ DC C'&DDNAME',X'00' +.END ANOP + +Note in the above example that the default value for SYNAD is that +specified or assumed for EODAD. + + + +OPEN MACRO + AIF '&LABEL$$'=' '.GO is label field blank? +&LABEL$$ EQU * +.GO AIF &1=(.REG is it OPEN (register) ? + LA 2,&1 + AGO .SVC +.REG AIF &1=(2).SVC is it OPEN (2) ? + LR 2,&1 +.SVC SVC 1 + + + +Here is an example of a program using the BEGIN, WTO, OPEN, GET, PUT, +CLOSE, RETURN and DCB macros: + + +TEST BEGIN + WTO 'DEMONSTRATING THE USE OF MACROS' + OPEN FILE1 + OPEN FILE2 +LOOP GET FILE1,RECORD + PUT FILE2,RECORD + B LOOP +EOJ CLOSE FILE1 + CLOSE FILE2 + RETURN +FILE1 DCB LRECL=256,RECFM=T,MACRF=G,EODAD=EOJ, + DDNAME='MYFILE.IN' +FILE2 DCB LRECL=256,RECFM=T,MACRF=P, + DDNAME='MYFILE.OUT' +RECORD DS CL256 + END + +Run BAT\RUNMAC.BAT for macro demo programs. + +******************************************************************** + + If you find the macro preprocessor useful and want to support + future enhancements, please send $20.00 to: + + Jacques Roy + XL SOFTWARE INC. + 1000 St-Jean-Baptiste #120 + Quebec City CANADA G2E 5G5 + +******************************************************************** + +The following macros are included in the MAC directory for use with +the M370.COM preprocessor. For more information on M370, see +DOC\USER.DOC and BAT\RUNMAC.BAT. + +BEGIN SAVE={YES|NO},BASES={1|2} + + Generate CSECT and standard program beginning. + Parameters are optional. Defaults are SAVE=YES,BASES=1. + Unless SAVE=NO is specified, a save area is defined and register 13 + is established as the first base register. Register 12 will be + established as the second base register if BASES=2 is specified. + If SAVE=NO is specified, register 12 is established as the only base + register: in this case, the program should not modify the contents + of register 13. + +CALL pgm + + Load address of external subroutine pgm into register 15 and + branch and link via register 14 to address in register 15. + +CLOSE dcb + + Close a file. The parameter is mandatory and must be either the + name of a DCB, or a register in brackets pointing to a DCB. + + +DCB DDNAME=ddname + DSORG=org + RECFM=format + MACRF=macro + LRECL=reclength + BLKSIZE=blklength + EODAD=eof + SYNAD=err + RECORD=fieldname + + Generate a DCB for PC/370 file access. See DOC\SYSTEM.DOC for more + information. Only DDNAME is required; all other parameters have + default values. Parameters can be specified in any order. + + "ddname" can be: - a filename of one to eight characters only (no + device specification, no extension); + - a literal in quotes of 1 to 64 characters that represents a + valid DOS file specification; + - the name in brackets of a 1 to 64-character field + containing a valid DOS file specification, in EBCDIC. + "org" can be S or R; the default is S. + "format" can be F, V or T; the default is F. + "macro" can be G, P, R or W; the default is G. + "reclength" is a number representing the record length; the default + is 80. + "blklength" is a number representing the block size; the default is + 0. + "eof" is the address where to go at end of file; default is 0; + must be + supplied for an input file. + "eof" is the address where to go in case of an error while + attempting to handle the file; default is the same as for + EODAD. + "record" is the address of a field where data will be read into + or written from; default is no such field: record area will be + specified in GET, PUT, READ or WRITE macros. + +DISPLAY fieldname + + Display text contained in fieldname on console. Text must be in + ASCII with ending line feed X'0A'. + + +FREEMAIN R,LV=length,A=address + E,LV=length,A=address + V,A=values + + Release dynamically allocated memory. + Use only one of the three possible formats. + + If R or E (register or elementary format) is coded as the first + parameter, both LV and A are mandatory. "length" is either the + number of bytes to be released or a register in brackets containing + the number of bytes to be released. "address" is either the name of + a full word or a register in brackets containing the address of the + memory area to be released. + + If V (variable format) is coded as the first parameter, only A is + mandatory. "values" must be the name of two consecutive full words + that must respectively contain the address and the size of the + memory area to be released. + + +GET dcb,record + + Read next sequential fixed, variable, or text record from buffered + file. The first parameter is mandatory and must be either the name + of a DCB, or a register in brackets pointing to a DCB. + The second parameter is optional and may be either the name of a + field or a register in brackets pointing to a field into which the + record will be read. If the second parameter is omitted, the area + pointed to by the RECORD parameter in the DCB will be used and its + address will be passed in register 1. + + +GETMAIN RU,LV=length + EU,LV=length,A=fieldname + VU,LA=sizes,A=values + + Dynamically allocate memory. + Use only one of the three possible formats. + + If RU (unconditional register request) is coded as the first + parameter, LV is mandatory and "length" is either the number of + bytes requested or a register in brackets containing the number of + bytes requested. The address of the allocated memory will be + returned in register 1. + + If EU (unconditional elementary request) is coded as the first + parameter, both LV and A are mandatory. "length" is either the + number of bytes requested or a register in brackets containing the + number of bytes requested. "fieldname" must be the name of a full + word into which the address of the allocated memory will be + returned. + + If VU (unconditional variable request) is coded as the first + parameter, both LA and A are mandatory. "sizes" must be the name of + two consecutive full words that must respectively contain the + minimum and the maximum number of bytes requested. "values" must + be the name of two consecutive full words that will respectively be + used to receive the address and the size of the allocated memory. + + +LINK EP=filename + EP='literal' + EPLOC=fieldname + EPLOC=(register) + + Dynamically load a module, branch and link to it, and then release + memory. Module's entry point is assumed to be at X'210'. + Use only one of the four forms for parameters. "filename" is one to + eight characters only: the default drive and the extension of COM + are assumed. "literal', or "fieldname", or field pointed to by + "register", must contain an EBCDIC character string representing a + valid DOS file specification. + + +LOAD EP=filename + EP='literal' + EPLOC=fieldname + EPLOC=(register) + + Dynamically load a module (can be any file type). Register 15 will + contain the address where the module was loaded and register 1 will + contain the module's length. Register 0 will contain the module's + entry point assumed to be at X'210' from the beginning (only + applicable if loading a COM module generated by PC370). + Use only one of the four forms for parameters. "filename" is one to + eight characters only: the default drive and the extension of COM + are assumed. "literal', or "fieldname", or field pointed to by + "register", must contain an EBCDIC character string representing a + valid DOS file specification. + + +OPEN dcb + + Open a file. The parameter is mandatory and must be either the name + of a DCB, or a register in brackets pointing to a DCB. + + +PUT dcb,record + + Write next sequential fixed, variable, or text record to buffered + file. The first parameter is mandatory and must be either the name + of a DCB, or a register in brackets pointing to a DCB. + The second parameter is optional and may be either the name of a + field or a register in brackets pointing to a field from which the + record will be written. If the second parameter is omitted, the + area pointed to by the RECORD parameter in the DCB will be used. + + +READ dcb,record,{rbn | RBN=rbn | RBA=rba} + + Read a block from a file. The first parameter is mandatory and must + be either the name of a DCB, or a register in brackets pointing to a + DCB. The second parameter is optional and may be either the name of + a field or a register in brackets pointing to a field into which the + record will be read. If the second parameter is skipped (by coding + two consecutive commas), the area pointed to by the RECORD parameter + in the DCB will be used and its address will be passed in register + 1. The third parameter is mandatory and may be either positional or + the keyword RBN or RBA. The value may be either a number, or the + name of a full-word containing the number, or a register in brackets + containing the number. "rbn" is the relative block number of the + record (first block is 0). "rba" is the relative byte address of + the record (first byte is 0). + + +REGS + + Generate R0 through R15 register equates. + +RETURN RC=nnnn,SAVE={YES|NO} + + Exit using standard linkage conventions. Parameters are optional; + default is SAVE=YES. If RC is specified, return code nnnn is placed + in register 15; otherwise, register 15 is restored like all other + registers. Specify SAVE=NO if SAVE=NO was specified in the BEGIN + macro. + + +WRITE dcb,record,{rbn | RBN=rbn | RBA=rba} + + Write a block to a file. The first parameter is mandatory and must + be either the name of a DCB, or a register in brackets pointing to a + DCB. The second parameter is optional and may be either the name of + a field or a register in brackets pointing to a field from which the + record will be written. If the second parameter is skipped (by + coding two consecutive commas), the area pointed to by the RECORD + parameter in the DCB will be used. The third parameter is mandatory + and may be either positional or the keyword RBN or RBA. The value + may be either a number, or the name of a full-word containing the + number, or a register in brackets containing the number. "rbn" is + the relative block number of the record (first block is 0). "rba" + is the relative byte address of the record (first byte is 0). + + +WTO message,length + + Display a message to the console. The first parameter is mandatory + and must be either a literal in quotes or the name of a field + containing the message to be displayed, in EBCDIC. The second + parameter is optional and applies only if the first parameter is a + field name. It is used to indicate the number of characters to be + displayed if this number is other than the field's length. + + +WTOR message,reply + + Display a message to the console and wait for reply. The first + parameter is optional and may be either a literal in quotes or + the name of a field containing the message to be displayed, in + EBCDIC. The first parameter may be skipped (by coding WTOR ,reply) + if no message need be displayed and only a reply is to be + solicited. The second parameter is mandatory and must be the name + of a field into which the reply will be placed, in EBCDIC and padded + with blanks if necessary. Operator needs not issue a carriage + return when reply field is full. + + +WTORPC message,reply + + Display a message to the console and wait for reply. Exactly the + same coding as for WTOR above, except that it is achieved using + typical PC features and that the reply's maximum length is 16 + characters. When entering the reply, the backspace and left-arrow + can be used to correct typing errors. Moreover, if the same WTORPC + is executed again, the right-arrow as well as the F1-F3 keys can be + used to repeat characters from the previous reply. The carriage + return must always be issued to transmit the reply. + + + *********************************** + +Feel free to develop your own macros in addition to those supplied +with the system. If you would like to make other users benefit from +general-purpose macros you have written, please send your macro +definitions, documentation and example of use to: + + Jacques Roy + XL SOFTWARE INC. + 1000 St-Jean-Baptiste #120 + Quebec City CANADA G2E 5G5 \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DOC/PTF.DOC b/PC370_orig/Diskette/full/DOC/PTF.DOC new file mode 100644 index 0000000..8df4c15 --- /dev/null +++ b/PC370_orig/Diskette/full/DOC/PTF.DOC @@ -0,0 +1,110 @@ +PTF.DOC private temporary fixes for PC/370 + +It is a violation of copyright to duplicate and distribute modified +versions of PC/370. However, users are free to apply PTF's for their +own use on their own systems. The following PTF's may be useful: + + 1. Change R1.2 A370.COM lines per page from 50 to some other value. + + a. Backup A370.COM to separate disk. + b. Rename A370.COM TO A370.TMP + c. VER 0A39 C606F80332 MOV BYTE PTR [03F8],32H + d. VER 0A3D 32 + e. REP 0A3D xx + f. Save modified file and rename. + + 2. Change R2.0A A370.EXE lines per page from 50 to some other + value. + + a. Backup A370.EXE to separate disk. + b. Rename A370.EXE TO A370.TMP + c. VER 0920 C6064E0532 MOV BYTE PTR [054E],32H + d. VER 0924 32 + e. REP 0924 xx + f. Save modified file and rename. + + 3. Change R3.0 path and/or filename of E370R20.EXE generated in + each 370 COM module by L370.EXE. For example changing name to + C:\E370R20.EXE allows one copy of emulator to be stored in + root directory of hard drive. + + a. Backup L370.EXE to separate disk. + b. Rename L370.EXE to L370.TMP to make debug process it as data + file. + c. Start DEBUG L370.TMP + d. Use ENTER debug command to change 64 byte path/filename at + offset X'342'. Name must be followed with zero byte. + e. Enter W command to output modified file. + f. Rename L370.TMP to L370.EXE. + + Note name can also be changed in individual 370 COM module at + X'140' if for wish to have only selected COM programs use a + different emulator. + + 4. Note ASCII translation table has been expanded to 256 bytes in + release 3.0 to allow special characters to be added for ASCII to + EBCDIC and EBCDIC to ASCII translation. This facility has been + requested by both French and German users who have extended + character sets. + + MODULE TABLE ADDRESS EXAMPLES + + A370 EBCDIC 85D0 +X'40'=X'20' FOR EBCDIC SPACE TO ASCII + SPACE + A370 ASCII 86F0 +X'20'=X'40' FOR ASCII SPACE TO EBCDIC + SPACE + E370R30 EBCDIC 7AB0 + E370R30 ASCII 7C50 + + 5. PTF for release 2.0A to fix blank errors in L370 due to module + in concatenated library ending on 128 block boundary. Low + frequency bug in PC/370 since 1985 identified thanks to Jim Gray + of CONVAL Software. Erroneous call was added in 1983 CP/M + version to skip CTL-Z added to each concatenated module. + + RENAME L370.EXE L370.TMP + DEBUG L370.TMP + -S 0000 FFFF 4C 54 46 E8 B9 00 (VER 2CD1 'LTF', CALL GBYTE) + -E 2CD4 90 90 90 (REP 2CD4 NOP,NOP,NOP - NOP + CALL) + -W + RENAME L370.TMP L370.EXE + + 6. PTF for release 4.0 to prevent erroneous FQE from overlaying 8 + bytes beyond end of BIN subroutine module. Result is + unpredictable errors after exiting PC/370 BIN subroutine back to + COBOL run time system. + + RENAME E370R40.EXE E370R40.TMP + DEBUG E370R40.TMP + -E 55D 26.EB 89.05 + -E 56B 26.EB 88.0E + -W + -Q + RENAME E370R40.TMP E370R40.EXE + + 7. PTF for release 4.2 to change resident emulator interrupt # in + case it conflicts with interrupts installed. Note Micro Focus + extended memory facility XM requires that PC/370 interrupt be + within the range hex 60-6F. The installation default in rel. + 4.2 is hex 60 (in rel. 4.1 without XM support is was hex DC). + To change the interrupt to 61 for example: + + a. RENAME E370R42.EXE E370R42.TXT change emulator + DEBUG E370R42.TXT + -E 46F 60.61 + -W + -Q + RENAME E370R42.TXT E370R42.EXE + + b. RENAME L370.EXE L370.TXT change linker for COM + DEBUG L370.TXT output + -E 307 60.61 + -W + -Q + RENAME L370.TXT L370.EXE + + c. RENAME SEE.COM change existing COM module + -E 107 60.61 (after fixing L370, you can + -W run BAT\BLDUTIL to fix all + -Q utilities) \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DOC/SYSTEM.DOC b/PC370_orig/Diskette/full/DOC/SYSTEM.DOC new file mode 100644 index 0000000..9fc3890 --- /dev/null +++ b/PC370_orig/Diskette/full/DOC/SYSTEM.DOC @@ -0,0 +1,635 @@ +SYSTEM.DOC PC/370 release 4.1 system services documentation + +Chapter table of contents: + + 1. Introduction + 2. File input and output services + 3. Program load and execution services + 4. SVC documentation in SVC # order + 4. Floating point system documentation + +********* + +Chapter 1. Introduction + +********* + +The PC/370 system supports a number of supervisor services through +the standard 370 SVC interface. In supervisor state, each SVC invokes +pseudo microcode which performs the function requested at native +processor speed. In problem state each SVC causes a standard SVC +interrupt storing the current PSW at location X'20' and loading the +new PSW from location X'60'. Supervisor call routines can be user +written to map any SVC into any desired function in problem state. + +In supervisor state, svc's 1-7 provide a set of input and output +facilities using MS-DOS file handle I/O and an extended data control +block defined by the user which allows access to sequential and random +files. Svc's 10-11 provide virtual memory dynamic management. In +addition to the other misc. functions provided, svc 34 provides a +general purpose interrupt interface which can be used to map PC/370 +area into PC registers and issue any MS-DOS function call or BIOS +interrupt. Svc's 128-191 map into BIOS interrupts using simple +register to register mapping. Svc's 200-241 map into MS-DOS function +calls 0-41 using simple register to register mapping. Note function +calls above 41 can be issued using svc 34 interface which is the +preferred method for future releases. + +********* + +Chapter 2. File input and output services + +********* + +The PC/370 supervisor calls to the I/O supervisor all require register +2 to point to the DCB. The SVC's are as follows: + + SVC FUNCTION OPTIONS + + 1 OPEN + 2 CLOSE + 3 READ register 1 must be address of block or zero + 4 WRITE register 1 must be address of block or zero + 5 GET register 1 must be address of area or zero + 6 PUT register 1 must be address of area or zero + 7 DELETE + 8 SEARCH + 23 RENAME + +The PC/370 system supports sequential and random access to +files using MS-DOS file handle I/O with directory pathing. +To access a file, a data control block (DCB) must be defined +in the program with fields defined as shown in the dummy +section (DSECT) called IHADCB found in CPY\IHADCB.CPY and +demonstrated in UTIL\PRINTDOC.ALC. All fields must be defined +prior to open and cannot be changed while the file is open +with the exception of RCD, BUF, and RBA as described below. + +An explanation of each field in the DCB follows: + + 1. DCBDCB - DCB identifier consisting of the four EBCDIC + characters ADCB. These characters are + verified each time an I/O routine is called + with the address of the DCB in register 2. + An attempt is made to exit to the synchronous + error exit address if there is no match. + + 2. DCBDSN - address of up to 64 character EBCDIC path and + file name followed by a zero byte. This field + is automatically translated to ASCII as + required. + + 3. DCBFID - MS-DOS assigned file handle at open time. + This field must be initialized to high values + or open routine will assume file is already + open and take SYNAD exit. + + 4. DCBFLG - file condition flags used by I/O routines. + This field must be initialized to zero except + user defined buffer bit DFUBUF and user + requested ASCII file conversion bit DFTRAN may + be turned on. No other bits may be modified + by user. If the DFTRAN (X'08') bit is set, input + records are translated to EBCDIC in the record area. + Output records are translated to ASCII in the record + area, written, and then translated back to EBCDIC. + The entire LRECL area is translated. For text mode, + each record must end with EBCDIC line feed. + + 5. DSORG - data set organization EBCDIC code: + + S for sequential + R for random file access. + + 6. MACRF - data set access EBCDIC code: + + R for read block with length of BLKSZ + W for write block with length of BLKSZ + (note PRECL can override BLKSZ on write) + G for get logical record into RCD area + P for put logical record form RCD area + + 7. RECFM - data set record format EBCDIC code: + + F - fixed length records with length LRECL + for get/put sequential access or length + BLKSZ for read/write random or + sequential access. + V - variable length records with length + stored in first 2 bytes (valid lengths + range from 3 to 64k). Maximum length + allowed for a file is LRECL and only + sequential get/put modes supported. + T - text records ending with end of record + code (EOR usually X'0A' line feed). + Maximum length allowed for a file is + LRECL and only sequential get/put modes + supported. + + 8. EOR - end of record code for text (default NL X'0A') + + 9. EOF - end of file code for text (default X'1A') + + 10. LRECL - length of logical record. Maximum is 64K less 17 bytes. + Minimum is 3 for RECFM=V, 2 for RECFM=T or 1 for + RECFM=F. + + 11. BLKSZ - length of block. Maximum is 64K less 17 bytes + and minimum is 3. If zero is specified, a + default block of 8k will be dynamically + allocated and deallocated at open and close + respectively. BLKSZ should be specified for + read/write access. For sequential access, + larger block size reduces contention between + multiple files by reading or writing entire + blocks at one time rather than for each + record. If insufficient memory is available, + the maximum available will be allocated. + + 12. EODAD - end of file exit address. This cannot be changed + while file is open. + + 13. SYNAD - synchronous error exit. This cannot be changed while + file is open. If register 2 does not point to a valid + DCBDCB ID field not exit is taken and interactive debug + is invoked. If exit is taken, register 0 contains + error code and register 1 contains function code which + can be used by to produce error message by calling + subroutine LIB\SYNERROR.ALC which is in the default + system relocatable library L370.LIB. + + 14. RCD - record area address for get/put only. This + address may be changed on each get or put by + placing new address in register 1. If register 1 + contains zero, then current DCB area will be used. + + 15. BLK - block area address used for direct I/O via MS- + DOS. If DFUBUF is not set at open, this area + is dynamically allocated and deallocated using + BLKSZ or default for length. If DFUBUF is set, then + new block address can be set for each read or write + by placing new address in register 1. If register 1 + contains zero, then current DCB block will be used. + + 16. RBA - relative byte address for random access + read/write. First byte of file is zero. This field + must be reset for each random read or write. + + 17. REN - address of file rename followed by zero. + Only used by RENAME SVC. Both DCBDSN and REN must be + initialized in a closed DCB prior to RENAME SVC 23. + + 18. IOCNT - physical I/O count since open. Larger + BLKSZ will reduce physical I/O count for + sequential file access. + + 19. PRECL - physical record length on last read or + write. This field is initialized to zero + at open. On write, BLKSZ will be calculated + if this field is zero, else this field will + override length allowing short blocks to be + written. This is useful in processing files + of unknown length with fixed block logic. + The last block read may be short, and the + corresponding last block written may be short. + +Do not modify the reserved areas which are only used by +PC/370 IOS while file is open. See UTIL\PRINTDOC.ALC for +example of file access method. + +********* + +Chapter 3. Program load and execution services + +********* + + SVC FUNCTION OPTIONS + + 15 USEREXIT Transfer control to native code user exit at + relative address in reg 15 via far call + + 25 LOAD Reg 1 points to ASCIIZ path/filename + on return, reg 0 has file address, reg 1 has length + + 26 ATTACH Reg 0 must have file address of COM file and + reg 1 must have desired length of attached addr. + space + + 27 DETACH If in attached address space, exit to next + instruction after attach in mother address space + else exit to MS-DOS + + 36 RELOAD Reload file int memory at location in reg 0. + Reg 1 must have file address and reg 15 must have + maximum length of file allowed to be loaded into + preallocated area. + +The PC/370 system includes support for dynamic loading and execution +of 370 modules assembled and linked by A370.EXE and L370.EXE. +Any file including COM and MOD type files can be loaded into free +memory by use of the LOAD SVC 25. The only argument required is +the address of the path and file name in register 1. The file name +must end with a suffix of the form .XXX or a zero byte. The largest +free memory area will be allocated and the file loaded into it. +Register 0 will be set to the address of the area, and register 1 will +be set to the length of the file. The unused portion of the allocated +area will be freed. If the load operation was successful, register 15 +will be set to zero, else it will be set to 1. Demo test program +DEMOSVC.ALC illustrates the use of the load function to load an 8086 +assembly language subroutine and execute it via user exit SVC 15. + +Any 370 COM file created by L370.EXE and loaded via the load SVC 25 +above, can be executed it its own address space via the attach SVC 26. +Register 0 must be set to point to the COM file (set by load SVC 25) +and register 1 must be set to address space size (minimum set by load +SVC 25), If additional space is to be included in the attached +address space for dynamic use via GETMAIN/FREEMAIN SVC's 10/11, then +the area to be added must be allocated in the mother address space +prior to issuing attach SVC 26 and the total length of the COM file +plus the allocated free space placed in register 1. A COM file can be +executed multiple times via attach by reloading registers 0 and 1 and +reissuing SVC 26. On second and following calls, the same address +space control block built on the first call in the COM prefix area +is reused (See CPY\IHASCB.CPY for layout) since it overlays original +COM prefix data. + +Execution of the attached address space can be terminated via a detach +SVC 27 which restores the mother address space and continues execution +at the next instruction following the attach SVC 26. The only other +way to terminate the attached address space normally is to issue an +exit SVC 0 which exits directly to MS-DOS. A detach SVC 27 in an +address space which has no mother, will cause exit to MS-DOS. + +An alternative to using attach/detach to execute dynamically loaded +370 code is to use simple branch and link. For 370 code linked into +COM file, the 370 code starts X'210' from the beginning of the COM +file. For code linked into MOD type file by L370.EXE using option M, +the 370 code starts immediately at the beginning of the file (i.e. the +file load address returned in register 0 by load SVC 25). + +For example of each type program loading and execution, see +DEMO\MVS.ALC and DEMO\DEMOPSW.ALC demo programs. + +The virtual address space established for the execution of COM files +created by L370.EXE has the following memory layout. For a sample +DSECT of the address space control block, see CPY\IHASCB.CPY. + + 000 INITIAL PROGRAM LOAD PSW + 008 INITIAL PROGRAM LOAD CCW1 + 010 INITIAL PROGRAM LOAD CCW2 + 018 EXTERNAL OLD PSW + 020 SUPERVISOR CALL OLD PSW + 028 PROGRAM OLD PSW + 030 MACHINE CHECK OLD PSW + 038 INPUT/OUTPUT OLD PSW + 040 CHANNEL STATUS WORD + 048 CHANNEL ADDRESS WORD + 050 INTERVAL TIMER + 058 EXTERNAL NEW PSW + 060 SUPERVISOR CALL NEW PSW + 068 PROGRAM NEW PSW + 070 MACHINE CHECK NEW PSW + 078 INPUT/OUTPUT NEW PSW + 080 MVS PARM AREA POINTED TO BY REGISTER 1 AT ENTRY (A,H,EBCDIC TEXT) + 100 SVC ATTACH INSTRUCTION + 102 SVC DETACH INSTRUCTION POINTED TO BY REG 14 AT ENTRY + 104 ADDRESS SPACE CONTROL BLOCK ASCB FOR CURRENT COM PROGRAM + 124 RESERVED + 138 SAVE AREA POINTED TO BY REG 13 AT ENTRY + 180 PC/370 PACKAGE IDENTIFICATION RECORD + 200 BEGINNING OF 370 CODE AND DEFAULT ENTRY POINTED TO BY REG 15 + AT ENTRY IF NO OTHER ENTRY POINT SPECIFIED ON ALC END STATEMENT. + +********* + +Chapter 4. All PC/370 supervisor services in SVC order + +********* + + SVC FUNCTION REGISTERS input/output + + 0 exit to MS-DOS none + 1 open file reg 2 = DCB address (see I/O section + documentation) + 2 close file reg 2 = DCB address + 3 read block reg 2 = DCB, reg 1 must be address of block + or zero + 4 write block reg 2 = DCB, reg 1 must be address of block + or zero + 5 get record reg 2 = DCB, reg 1 must be address of area or + zero + 6 put record reg 2 = DCB, reg 1 must be address of area or + zero + 7 delete file reg 2 = DCB address + 8 search file reg 2 = DCB address + /reg 0 = return code 0 if found + 9 program trace 3 character trace ID follows SVC + 10 get memory reg 1 = length + /reg 2 = address, reg 0 = 0 if ok + if reg 0 > 0, then reg 1 = maximum memory + available + 11 free memory reg 1 = length and reg 2 = address + /reg 0 = 0 if ok + 12 ASCII to EBCDIC reg 1 = address and reg 2 = length + 13 EBCDIC to ASCII reg 1 = address and reg 2 = length + 14 set SPIE if reg 1 = 0, remove SPIE else set SPIE exit + to reg 1 + at SPIE entry, reg 0 contains instruction + length in high 16 bits, interruption code in + low 16 bits, reg 1 contains interruption + address, and reg 2 contains program + interruption element block (see + CPY\IHAPIE.CPY). + 15 user exit reg 15 = entry point to COM 80x86 code via + far call + 16 instr. count /reg 1 = current 370 instruction count + 17 load user exit reg 1 = ASCIIZ path/file name + /reg 0=addr.reg 1=len. + 18 time of date /reg 0 = hour, minute, second, 100th second, + reg 1 = year, reg 2 = day, month, day of week + 19 allocate memory reg 1 = address of MS-DOS real block, reg 2 = + length + /if reg 0 not zero, then reg 2 = max. + available + 20 deallocate mem. reg 1 = address of MS-DOS real block + 21 input byte reg 1 = device address, reg 0 = byte + 22 output byte reg 1 = device, reg 0 = byte + 23 rename file reg 2 = DCB address + 24 display line reg 1 = attributes, reg 2 = address, reg 15 = + row/col + 25 load file reg 1 = path/filename + /reg 0 = address, reg 1 = length + 26 attach program reg 0 = COM file address, reg 1 = address + space length + 27 detach program none (return to instruction after attach) + 28 svc 209 EBCDIC set EBCDIC to ASCII trans. for WTO svc 209 + (default) + 29 svc 209 ASCII turn off EBCDIC to ASCII translation + 30 svc 209 CR turn on carriage return and line feed + (default) + 31 svc 209 no CR turn off carriage return and line feed + 32 VA to SEG:OFF convert virtual address in R1 to + segment:offset in R0 + 33 SEG:OFF to VA convert segment:offset in R0 to virtual + address in R1 + 34 interrupt general purpose interrupt facility which + supports all MS-DOS and BIOS interrupts using + PC register vector table pointed to by R1 + must be defined as follows (see + CPY\IHAPCB.CPY): + + 0 PCVT DC C'PCVT' ID REQUIRED BY SVC 34 + 4 PCIN DS H INTERRUPT # (0-255) + 6 PCPF DS H PF FLAGS REGISTER + 8 PCAX DS H AX + 10 PCBX DS H BX + 12 PCCX DS H CX + 14 PCDX DS H DX + 16 PCDS DS H DS + 18 PCSI DS H SI + 20 PCES DS H ES + 22 PCDI DS H DI + + PC registers are loaded from PCVT for + interrupt. PC register results are also + stored in PCVT area immediately after + interrupt. Note segment:offset addresses + such as DS:DX, DS:SI, or ES:DI required + by interrupts can be calculated via SVC 32. + Likewise returned segment:offset results can + be translated back to PC/370 virtual + addresses via SVC 33. This is a very + powerful and therefore dangerous instruction. + SVC's 128-191 and SVC's 200-241 should be + used in place of this more general SVC when + possible since they are a little faster (they + don't load and store all PC registers and + don't require PCVT setup). They are also + much safer since an error in PCVT setup could + invoke wrong interrupt or pass bad registers + to any function including reboot interrupt, + write to disk, etc SVC 34 does verify PCVT + identifier and range of PCIN within 0-255. + If verify fails, program interruption + 19 occurs. If carry bit is set by interrupt, + condition code 3 is set, else condition code + 0 is set. + + 35 80x87 assist Scientific subroutine function assist via + 80x87. Register 1 contains function # and + values are passed via floating point + registers. See chapter on floating + point for more information. + + 36 RELOAD Load file into memory at address in reg 0. + Reg 1 must have file address and reg 15 must + have maximum file length allowed to be loaded + in preallocated area. + + 37 SVCTRAP Define svc trap table via register 1 which + contains address of user exit routine to be + used with each svc. If register 1 is zero + current svc trap table is cancelled. After + table is defined, each svc call functions as + follows: + + 1. If table+4*(svc #) contains zero, + execute real PC/370 svc normally. + 2. If svc trap active mode is set, + execute real PC/370 svc normally. + 3. If table+4*(svc #) is not zero, + store current psw at old svc psw x'20', + set trap active mode, and branch to + trap exit address in table entry. + + LPSW instruction will always reset trap + active mode, and normal exit from trap + is via LPSW OLDSVC. All svc calls within + trap routine including the svc which + invoked trap will process as real svcs + normally without storing psw. See DEMO\ + DEMOTRAP.ALC program for examples. + + 128 - 191 issue BIOS interrupt number = svc # - X'80' with PC + registers mapped as follows before and after interrupt: + + AX - low bytes of register 0 + BX - low bytes of register 1 + CX - low bytes of register 14 + DX - low bytes of register 15 + + If carry set by call, then CC =3 else CC = 0. + 8086 flags returned in high bytes of R0. + + 200 - 241 issue interrupt 21H with PC registers mapped as follows: + + For all svc's 200-241: + + AH - MS-DOS function call number = svc number -200 + AL - low byte of register 0 + BX - low bytes of register 1 + + for svc # 201-208, 211, 213, 214, and 225: + + DL - low byte register 2 + + for svc 209, 210, 212, and 215-241: + + DS:DS - segment:offset from virtual address in register 2 + CX - returned in register 14 + DX - returned in register 15 + + One of the most frequently used SVC's is 209 (write to + operator). For example, to print message on standard output + device via MS-DOS function call 9, the following 2 PC/370 + instructions can be used: + + LA R2,=C'THIS IS A DEMO WTO MESSAGE$' + SVC 209 + + The above example will print message on console and issue + carriage return and line feed following message ending with + $. To turn off automatic carriage return and line feed, + issue SVC 31 prior to SVC 209. To eliminate overhead of + converting from default EBCDIC strings to ASCII for 209, + issue SVC 29 prior to SVC 209 and use PC/370 assembler + extension for ASCII strings in double quotes. For + example, this is the most efficient method of issuing + messages: + + SVC 29 TURN OFF EBCDIC TO ASCII CONVERSION FOR 209 + . + . + LA R2,=C"THIS IS A DEMO WTO MESSAGE$" + SVC 209 + +********* + +Chapter 5. Floating Point System Documentation + +********* + + A. Introduction + + PC/370 release 4.0 contains support for the entire 370 floating + point instruction set using the Intel 80x87 co-processor. If the + co-processor is not installed, all floating point instructions + cause operation exceptions as they would on a 370 without the + floating point option. There is a new option in the L370 linkage + editor (option P) which can be used to force turning off floating + point option even when co-processor is installed. Default is to + support floating point if it is installed and 370 module has been + linked using release 3.0+ linkage editor. In addition to the + standard floating point instructions, two additional levels of + support have been added. Section F describes a set of SVC's + which invoke extended microcode functions on the 80x87 chip such + as square root, logs, etc. These SVC's are fast but most require + special scaling of arguments. DOC\USER.DOC describes a set of + scientific subroutines written in ALC which can be called to + efficiently calculate functions over extended range of real + numbers. + + B. Data formats + + The Intel 80x87 actually only supports one IEEE floating point + format which has 64 bit mantissa and exponent range of 10**4932 + which exceeds both the 370 short and long (double precision) + formats of 24 and 56 bit mantissa's. Therefore, both the short + and long operations are done with extra precision. The 370 + extended format instructions are all supported but the precision + actually available is only 64 bits versus the 112 on a 370. When + short and long numbers are loaded into the 80x87, they are padded + with zeros to the 64 bit length required. When an extended + number is loaded into the 80x87, the last 8 bits are obtained + from the second register in the specified extended register pair. + The PC/370 cross assembler now supports E, D, and L data formats + when the 80x87 is installed. + + C. Data exceptions + + The standard 370 exponent overflow, exponent underflow, and + floating point divide exceptions are all supported. The program + mask can be set to control whether program exception is allowed. + One deviation from standard 370 convention, is to return the + maximum floating point number with correct sign when overflow + occurs instead of an invalid number. This is consistent with + IEEE standard. + + D. Floating point instructions + + 1. Note that all operations are normalized using 80x87 and that + the 370 unnormalized function identical to normalized + instructions. + + 2. Compare short and long include all 64 bits in comparison. To + round number to specific number of bits in short or long + format, use the LRER or LRDR instruction prior to compare. + + E. Interactive debug facilities for floating point + + 1. When floating point support is active (i.e. option P is on + and the 80x87 co-processor is installed), the R command will + display third line with floating point register contents in + hex. Note that the actual floating point register areas in + memory are stored in 80x87 temporary real format to allow + register to register instructions to execute faster since no + conversion from or to 370 format is required. + + F. Extended 80x87 microcoded arithmetic functions + + The following extended arithmetic floating point functions are + supported via SVC 35 with the function number in register 1. + Arguments and results are in the floating point registers F0 and + F2. + + # Formula: Notes: + + 1. F0 = LOG10(2) constant + 2. F0 = LOGE(2) constant + 3. F0 = LOG2(E) constant + 4. F0 = LOG2(10) constant + 5. F0 = PI constant 3.14159.... + 6. F0 = ARCTAN(F2/F0) 0 <= F2 <= F0 < IFI (infinity) + 7. F2/F0 = TAN(F0) 0 <= F0 <= PI/4 (sets F0 and F2) + 8. F0 = SQRT(F0) 0 <= F0 < IFI + 9. F0 = F2 * LOG2(F0) 0 < F0 < IFI, -IFI < F2 < IFI + 10. F0 = F2 * LOG2(F0+1) 0 <= F0 < (1-(SQRT(2)/2)), _IFI < F2 + < IFI + 11. F0 = 2**F0 -IFI < F0 < IFI (note 1) + 12. F0 = R0 convert to real + 13. R0 = F0 convert to integer + 14. F0 = MOD(F0/F2) return fraction of F0 mod F2 in F0 + (note 2) + 15. F0 = SIN(F0) argument may be any real radian value + (note 3) + 16. F0 = COS(F0) argument may be any real radian value + (note 3) + 17. F0 = TAN(F0) argument may be any real radian value + (note 3) + + Notes: + + 1. This function uses equivalence expression to derive 2**F0 for + all values of F0 rather than just the 0.0-0.5 range supported + via the F2XM1 80x87 instruction. + + 2. Note this uses FPREM 80x87 instruction repeatedly to + calculate exact remainder via successive subtraction. + + 3. Note 15-17 perform scaling of argument via FPREM 80x87 + instruction and use FPTAN 80x87 instruction to derive + tangent, sine and cosine. + + Register 15 is set to one of the following values at exit from svc: + + hex + + 00 - no errors detected + 80 - 80x87 not operational + 40 - invalid function number in register 1 + 20 - 80x87 precision error (inexact result such as 1/3 etc.) + 10 - 80x87 underflow error (zero returned) + 08 - 80x87 overflow error (max 370 value returned) + 04 - 80x87 zero divide (max 370 value returned) + 02 - 80x87 denormalized operand error (should not occur) + 01 - 80x87 invalid operation error (should not occur) \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DOC/USER.DOC b/PC370_orig/Diskette/full/DOC/USER.DOC new file mode 100644 index 0000000..e2396f4 --- /dev/null +++ b/PC370_orig/Diskette/full/DOC/USER.DOC @@ -0,0 +1,955 @@ + +USER.DOC PC/370 User Documentation + +Copyright 1987 Donald S. Higgins + +Don Higgins +6365 - 32 Avenue North +St. Petersburg, Florida 33710 + +E-mail CompuServe 73047,1113 + +PC/370 users: + +This is the user documentation for the PC/370 cross assembler, +linkage editor, and emulator for 370 assembly language users. +The PC/370 package provides the capability to assemble, link, +and execute IBM 370 assembler programs on any 80x86 MSDOS 2.0+ micro +computer such as the IBM PC, XT, AT, PS/2, Compaq, etc. + +Chapter table of contents: + + 1. M370.COM macro preprocessor + + 2. A370.EXE cross 370 assembler + + 3. L370.EXE cross 370 linkage editor + + 4. E370R42.EXE run time 370 emulator + + 5. Technical hardware and software specifications + + 6. ASSIST extended instructions for student use + + 7. DEBUG interactive debugging facility + + 8. Floating point instructions and scientific subroutines + + 9. XA extended architecture instructions + +10. System subroutine library + +11. COBOL call interface + +12. Reference publications + +********* + +Chapter 1. M370.COM macro preprocessor + +********* + +The M370 macro preprocessor has the following command format: + +A>M370 file + +where file is the name of a source macro program file which has the +suffix (.MLC). The source file must be in ASCII text format with +each line terminated by a line feed character. The only output from +this program is a source basic assembler file with expanded macro +statements. The suffix of the output file is (.ALC). + +Any number of macros can be used by M370 input files and must be +defined in individual source macro files with the file name equal to +the macro name and a suffix of (.MAC). These macros must be placed on +the default drive for access by M370. For more speed, these files may +be moved to RAM disk. + +********* + +Chapter 2. A370.EXE cross 370 assembler + +********* + +The A370 assembler has the following command format: + +A>A370 file/options + +where file is the name of a source program file which has the +suffix (.ALC). The source file must be in ASCII text +format with each line terminated by a line feed character. +Any number of editors including SEE can be used to create ALC files. +An optional drive and path may be specified such as B:\dir\file. +The options which can be specified are as follows: + + A - alignment option. Default is on. + C - object code option. Default is on. + L - produce listing file (.PRN). Default is none. + T - trace assembler execution. Default is off. + X - produce symbol and literal cross reference. Default is none. + +If an option is on by default, specifying it will turn it off. +For example: + +A>A370 B:DEMOPNUM/LX + +will read the source file B:DEMOPNUM.ALC and produce the object +code file B:DEMOPNUM.OBJ and the listing file B:DEMOPNUM.PRN. + +The A370 assembler conforms to the OS/VS IBM 370 Assembly +Language as defined in the IBM manual GC33-4010 with the +following limitations: + + 1. No continuation lines. + 2. Maximum control sections and dummy sections is 255. + 3. Macros and system variable symbols are not supported (see M370). + 4. OPSYN statement not supported. + 5. EQU third operand (type attribute) not supported. + 6. Scale, exponent, and bit length data modifiers not supported. + +Extended features include the following: + + 1. Data constant types F and H may use arithmetic expressions. + + 2. Extended ASSIST instruction set including XREAD, XPRNT, + XDECI, XDECO, AND XDUMP as defined in the book Assembler + Language with ASSIST by Ross A. Overbeek. Also 2 more + instructions XFILI and XFILO are added to allow changing + default ASSIST input and output files at execution time. + + 3. ASCII character strings may be defining by using double + quotes instead of single quotes in DC and self defining + character constants. + +********* + +Chapter 3. L370.EXE cross 370 linage editor + +********* + +The L370 linkage editor has the following command format: + +A>L370 file/options + +where file is the name of an A370 object code file (.OBJ) and +may specify a specific drive. The options supported by the +linkage editor are as follows: + + B - create VS COBOL callable subroutine file (type .BIN). + D - set debug mode for emulator. Default is off. When option D + is on, interactive debug is entered at beginning of each + COM or BIN file execution. + G - load and execute with no file output. Default is off. + I - turn off all interrupts from keyboard. + L - list CSECT addresses and lengths. Default is off. + M - create 370 code module without COM prefix code. + O - dump input object code records in hex. Default is off. + P - force floating point option off even if 80x87 installed. + X - cross reference of external symbols. Default is off. + U - allow unresolved external references + +For example: + +A>L370 B:DEMOPNUM/LX + +will read the object code file B:DEMOPNUM.OBJ and produce the binary +command file B:DEMOPNUM.COM, and the listing and cross-reference file +B:DEMOPNUM.LST. Note that since DEMOPNUM calls the external +subroutine PET, the subroutine library L370.LIB must be available. +The binary command file B:DEMOPNUM.COM may be directly executed by the +MSDOS command: + +A>B:DEMOPNUM + +When the above command is executed, the program will load at X'0200' +and the fetch routine linked with the program will load the +emulator E370.EXE in high memory and transfer control to it. + +The linkage editor uses two concatenated subroutine library +files. The first file is named file.LIB and may contain +any number of A370 subroutine object modules which are called by the +modules in file.obj. This file is optional and only called modules +are included. The second file is named L370.LIB and may contain any +number of A370 subroutine object modules which are commonly used by +multiple programs. An L370.OBJ file is included with the PC/370 +package and contains sample time and date routines. The MS-DOS COPY +command with option /B may be used to concatenate A370 object modules +in either library file. Note module references must be resolved in +one sequential pass of library so backward module references may cause +unresolved entry. + +The linkage editor listing file (.LST) shows relative entry point +and segment lengths and optional cross reference by segment. The +last line of the listing contains ENT/LNG which is the 370 relative +entry point of the module and the length of the entire module. + +********* + +Chapter 4. E370R42.EXE run time 370 native machine code emulator + +********* + +The emulator is transparent to the user when using A370 and L370 to +create MSDOS command files. The emulator is dynamically executed by +the 80x86 COM file prefix generated by L370. The 370 machine code +starts at X'210' from the beginning of the COM file. The origin of +the 370 virtual address space for a COM program starts at X'10' from +the beginning of the COM file. The execution of the 370 machine code +will start at the specified relative start address plus hex 200 with +that absolute address in register 15. Register 1 will point to +standard MVS parameter list address at location X'80' with EBCDIC text +passed from MS-DOS command line. Register 13 will point to standard +save area in ASCB and register 14 points to return to detach +instruction in ASCB to exit to MS-DOS. If a program check occurs, the +interactive debug facility will be invoked and will initially display +the general registers and the program status word at the time of the +interruption. See DOC\SYSTEM.DOC SPIE supervisor call for facility to +handle program checks. Also see MAC\MVS.MLC for example of how to run +programs in problem state with your own supervisor shell. + +A new facility with PC/370 release 4 is the ability to make the +emulator resident by simply executing it directly. The resident +emulator reserves about 50k for code and uses an 80x86 hardware +interrupt to transfer control when needed at execution time. To +remove the current resident emulator, simply execute it directly +again. Release 4.0 and 4.1 used interrupt hex DC. Release 4.2 uses +hex 60 within the Micro Focus Extended Memory (XM) real interrupt +handler range of hex 60-6F. See DOC\PTF.DOC for pathc to change +interrupt in case it conflicts with another user installed software +package. + +With release 4.1 a new system queue area (SQA) memory option has been +added to define a memory which can be shared by all COBOL subroutines +and which is allocated in the resident emulator address space. The +size of the SQA is specified by a single hex parm when making the +emulator resident. The size is in hex paragraphs and the default is +10 or 256 bytes. For example, the following command would make the +emulator resident with an 8k byte SQA: + + C>E370R42 200 + +With the SQA facility, COBOL assembler subroutines can issue standard +file I/O with dynamic buffers allocate from SQA. See BAT\RUNCBL.BAT +for demo. + +With release 4.2, PC/370 supports Micro Focus COBOL/2 assembler +subroutine calles in normal MS-DOS mode or in extended memory XM mode. +In both cases the emulator must be resident before starting the COBOL +program via workbench or run time executive with or without XM. In +XM mode, the emulator still runs in real mode after requesting XM to +mode the called subroutine code (BIN file) and the argument data +segments to base memory area for access in V=R real mode. This +creates the XM restriction that there must be sufficient base memory +for called BIN file and data segment at the time of the call. Also, +the emulator must not attempt to access memory beyond end of BIN or +data segments in real memory. The emulator can use SQA in XM mode. +See BAT\RUNCBL.BAT for demo of XM mode subroutines (requires XM.EXE +and RUN.EXE from Micro Focus). + +There are five distinctly different ways to execute the E370 emulator: + + 1. Direct execution to make it resident if not currently resident. + + 2. Direct execution again to remove current resident copy. If + another software package is using interrupt, an error message + will display. See DOC\PTF.DOC to change interrupt number. + + 3. Execution of a 370 COM module without E370 resident causes + dynamic loading of E370 in high 64k of MS-DOS memory to support + execution of 370 code in the COM module. + + 4. Execution of a 370 COM module with E370 module resident causes + execution of resident copy via cross memory interrupt facility. + + 5. Execution of a 370 BIN module from within Micro Focus COBOL run + time environment causes execution of resident copy via cross + memory interrupt facility. In XM mode, a protected interface + routine in the emulator is called directly by the BIN module + which in turn issues interrupt to execute emulator in real mode. + + +********* + +Chapter 5. Technical specifications + +********* + + 1. A370.EXE requires 256k memory to execute and can handle source + programs with over 1000 labels. + + 2. L370.EXE requires 256k memory and can handle load modules up to + 50k bytes long. + + 3. E370R42.EXE requires 50k plus SQA which includes the emulator, + and the extended SVC support functions, and interactive debug. + A production only copy of the emulator named E370P42.EXE is + included which only requires 40k but does not include + interactive debug facility or the ASSIST extended instructions. + This version saves resident base memory, but should only be + used for fully tested programs or programs with their own + program check handlers for error recovery. + + 4. E370R42 supports all the non-supervisor state IBM 370 + instructions as defined in the IBM/370 XA Principals + of Operation manual SA22-7085 except the conditional + swapping feature instructions. Short, long, and extended + floating point instructions are supported provided 80x87 + is installed. + + 5. The minimum configuration for PC/370 is as follows: + a. 80x86 processor. XM only supported on 80286/80386. + b. 256k RAM memory which allows execution of 370 program in + 128k virtual address space. Maximum virtual address space + is about 512k on 640k machine. + c. 1 floppy disk drive. + d. 80x87 only required for floating point instructions. + + 6. A benchmark program consisting of calculating the first + 100 prime numbers was run in interpretive BASIC using + 16 bit integer arithmetic. It took 67 seconds on a + 4.77 MHZ 8086 system. The same program was rewritten in + 370 assembler using 32 bit fixed point arithmetic. It + took 25 seconds to execute on the same system. This + benchmark program is included as a demo called DEMOPNUM.ALC. + + The demo may be run with the following commands: + + A>A370 DEMO\DEMOPNUM/LX (create DEMOPNUM.OBJ) + A>L370 DEMO\DEMOPNUM/LX (create DEMOPNUM.COM) + A>DEMO\DEMOPNUM + + 7. The following error messages are supported: + + A370/L370 + + E01 - DUPLICATE LABEL + E02 - INVALID LABEL + E03 - SYMBOL TABLE FULL + E04 - INVALID OPERATION CODE + E05 - UNDEFINED OPERATION CODE + E06 - UNDEFINED LABEL + E07 - INVALID OPERAND + E08 - MEMORY FULL + E09 - EXPRESSION INVALID + E10 - SELF DEFINING TERM INVALID + E11 - ARITHMETIC OVERFLOW IN EXPRESSION + E12 - TOO MANY EXTERNAL SYMBOLS + E13 - NO BASE REGISTER AVAILABLE + E14 - LENGTH ERROR + E15 - OPERAND ERROR + E16 - DATA CONSTANT DUPLICATION FACTOR ERROR + E17 - DATA CONSTANT TYPE ERROR + E18 - DATA CONSTANT LENGTH ERROR + E19 - DATA CONSTANT DATA ERROR + E20 - START SEQUENCE ERROR + E21 - LTORG SEQUENCE ERROR + E22 - LOCATION COUNTER ERROR BETWEEN PASS 1 AND 2 + + 8. IOS LOGICAL ACCESS METHOD USED BY A370, L370, AND E370 + + IOS001 - NO DISK SPACE + IOS001 - FILE NOT FOUND + IOS001 - NO BUFFER SPACE + IOS001 - OPEN FAILED + IOS002 - CLOSE FAILED + IOS003 - READING UNWRITTEN DATA + IOS003 - INVALID REQUEST + IOS004 - ERROR IN EXTENDING FILE + IOS004 - END OF DISK DATA AREA + IOS004 - NO MORE DIRECTORY SPACE + IOS004 - INVALID REQUEST + IOS005 - INVALID RECORD TYPE + IOS005 - INVALID RECORD LENGTH + IOS006 - INVALID RECORD TYPE + IOS006 - INVALID RECORD LENGTH + IOS007 - DELETE FAILED + +********* + +Chapter 6. ASSIST extended instructions for student use + +********* + + A. Overview + + The book, "Assembler Language With ASSIST", by Ross A. Overbeek + and W. E. Singletary published by Science Research Associates, + Inc. in 1976 describes a set of 370 extended instructions to + greatly simplify input and output for students learning to write + 370 assembler programs. A new book with also covers ASSIST is, + "IBM 370 Assembly Language with ASSIST, Structured Concepts, and + Advanced Topics", Charles J. Kacmar, Prentice Hall, September + 1987, ISBN 0-13-455742-5. + + PC/370 implements these instructions to allow students to + code, assemble, and execute ASSIST 370 programs on any 80x86 MS- + DOS based micro-computer rather than having to use an IBM 370 + mainframe. This was the original objective for which PC/370 was + developed back in 1981. The first students to use PC/370 with + ASSIST were volunteers at the University of South Florida, + College of Engineering. The students used a CP/M based Z80 + micro-computer with the original version of PC/370 instead of + the IBM 3033 mainframe ASSIST system accessed via RJE using + keypunched card decks. + + B. ASSIST extended instructions + + 1. XFILI =C'filename' + + This extended instruction redirects input source for XREAD. + If open, the current input source file is closed. The new + filename can be any standard MS-DOS path/filename ending + with suffix .xxx or a zero byte. If the filename is CON: + then the input source is the console with a ? prompt. To + set the ASSIST end of file condition code for XREAD from the + console, use the escape (ESC) key. See DEMOAST3.ALC for + demo of redirection. + + 2. XFILO =C'filename' + + This extended instruction redirects the output from XPRNT. + If open, the current output file is closed. The new file + name can be any standard MS-DOS path/filename ending with + suffix .xxx or a zero byte. If the filename is CON: then + the output from XPRNT is directed to the console. The first + byte which is printer control code is also printed on + console. + + 3. XREAD area [,length] + + Read record into area with default length of 80 padded with + blanks. If the input is coming from console, the first + carriage return defines end of record, and single ESC + character defines end of file. Note ASCII characters from + console or file are automatically translated to EBCDIC in + record area. Condition code set as follows: + + 0 - read successful + 1 - end of file + + Default input source is file named ASSIST.DAT. If the file + is not found, the input and output source is switched to + console. + + 4. XPRNT area [,length] + + Print record from area with default length of 132. Trailing + blanks are stripped off. The first character is used as + standard ASCII print control character: + + ' ' - space means skip one line + '/' - slash means skip two lines + '1' - one means skip a page + '+' - means skip no lines + '-' - dash means skip three lines + + Output to console includes print control character. Default + output is to file named ASSIST.PRN which is also used by + interactive debug X logging command and XDUMP. + + 5. XDECI reg,area + + Read ASCII integer number from area and store into register. + Leading plus or minus signs may be present. Condition code + is set as follows: + + 0 - number is zero + 1 - number less than zero + 2 - number is greater than zero + 3 - no number found in area + + Register 1 is set to address of first character after number + read. + + 6. XDECO reg,area + + Convert binary integer number in register to 12 character + display field with numeric value including sign. + + 7. XDUMP [area start, area end] + + Dump general purpose registers (default with no args) or + dump area of memory to output file. + +********* + +Chapter 7. Interactive Debug Facility + +********* + + A. Overview + + The PC/370 interactive debug facility is designed to provide a + tool to help debug program errors in either 80x86 code or 370 + code. The facility provides the basic tools namely tracing + program flow via breakpoints defined by calls, and displaying + register and memory contents upon request. In addition, the + facility provides a data and address stop option which is very + useful for locating errors. + + B. Program Interface + + The PC/370 interactive debug facility is implemented via a single + module named MMDBUG which is linked into A370, L370 and E370 + programs and is called with a single 3 byte ASCII argument + located immediately after the near call instruction. In the + E370 emulator environment, the interactive debugger can be called + directly from 370 programs through SVC 9 which must be followed + by 3 byte EBCDIC argument and a 1 byte filler to keep + instructions on half word boundary. + + There are several special calling arguments as follows: + + 1. 'OFF' - turn off (kill) trace facility for speed + (a trace is killed by replacing call with jump over + the trace ID to the next instruction) + 2. 'ON ' - turn trace facility back on (stop killing traces) + 3. 'BUG' - force interactive debug mode + 4. 'IOF' - interrupts off (unsolicited keys queued for input) + 5. 'ION' - interrupts on (any key stroke invokes user + interface) + 6. 'IFL' - instruction fetch loop (special trace used in E370 + to identify next trace id as 370 operation trace to + be stored in trace table) + + The first call to MMDBUG in A370, L370, and E370 is with 'OFF' + unless the trace option was requested via COM file parm or if the + debug option D was specified on link edit of COM or BIN file. + + C. User Interface + + When MMDBUG is called without the 'OFF' argument, or when a key + is hit without the 'IOF' argument being issued previously, the + user interface mode is invoked and the following commands may + be entered in upper or lower case from the console: + + A - ADDRESS STOP (PROMPTS FOR ADDRESS, LENGTH, TYPE) + C - CONTINUE TO NEXT TRACE ENTRY + D - DUMP MEMORY (PROMPTS FOR ADDRESS) + F - FIND TRACE ENTRY (PROMPTS FOR TRACE ID) + H - HELP LIST MMDBUG COMMANDS (THIS LIST) + I - INSTRUCTION COUNTER WORD + J - RESET NEXT 370 OR 8086 INSTRUCTION ADDRESS + K - KILL MODE SET/RESET (kills or restores traces) + L - SET/RESET TRACE LIMIT FOR Q/T MODE + M - MODIFY MEMORY (PROMPTS FOR ADDRESS AND DATA) + N - LIST LAST 20 TRACE ENTRIES (NOTE K,Z AFFECT THIS LIST) + P - SET/RESET PRINT COPY OF ALL MMDBUG I/O + Q - SET QUIET MODE (USED WITH F, L, AND 'BUG' OPTIONS) + R - DISPLAY REGISTERS (SEE Z OPTION) + S - SAVE/UNSAVE CURRENT TRACE ID FROM KILL MODE + T - SET TRACE MODE (USED WITH OPTIONS F AND L) + W - LIST FREE MEMORY QUEUE + X - SET/RESET ASSIST LOGGING OF INTERACTIVE DEBUG OUTPUT + Y - MODIFY 8086/370 REGISTER (PROMPTS FOR REGISTER/DATA) + Z - SET/RESET 8086/370 MODE + IN 8086 MODE, R DUMPS 8086 REGISTERS AND D PRINTS + PRINTABLE ASCII CHARACTERS IN DUMP. + IN PC/370 MODE, R DUMPS 370 REGISTERS AND PSW + AND D DUMPS PRINTABLE EBCDIC CHARACTERS IN DUMP. + - dump same address again as defined in D command + - dump forward until any key hit + - dump backwards until any key hit + - exit to MSDOS after attempting to close files + + Memory addresses may be entered in xxxx:xxxx or xxxxxx hex format + without leading zeros required. In 370 mode, the xxxxxx format + always refers to the relative address within the current address + space. In 80x86 mode, the xxxxxx format refers to the offset + using the current segment. The segment:offset is initialized to + the emulator data segment area containing the 370 registers. + + D. User Guide + + The PC/370 interactive debug facility can assist you in locating + errors within your 370 assembler programs. But first there are + some more basic things to check: + + 1. Are you sure that you are executing the latest version of + the source program. To be absolutely sure, code the date + and time in a print statement at the beginning of the program + and then reassemble (A370) and relink (L370) and execute the + program again. + + 2. Does the program run to normal termination? If so then you + can run the program again specifying a T as the only parameter + on the execute command to initiate the interactive debug + facility. Another way to invoke the interactive debug option + is to specify option D in the linkage editor. This method + should be used if the program requires a parameter other than + T. + + 3. If the program terminated abnormally, the interactive debug + facility is automatically initiated along with a display of + the PSW and the failing instruction. To calculate the + relative address of the failing instruction in the program, + subtract the program load address of X'0200' (Note you will + have to look at the link edit listing to get the starting + address if the failing instruction is in a subroutine. + + 4. To trace execution of the program, enter K once or twice to + restore all traces and then enter T. To stop the trace at any + point hit any key. + + 5. To continue execution of the program normally, enter Q. + For fast execution, use K command to set kill trace mode + first. + + 6. To dump the current contents of the registers, enter R. + + 7. To dump any 32 byte area in memory, enter A followed by + the starting address in hex xxxx. + + 8. To continue to dump memory from the current location forward, + hit the space key. To dump backwards, hit the backspace key. + To stop the dump, hit any key. + + 9. To stop the program at a specific address, enter A followed + by the address in hex xxxx followed by the option code A. + Then use Q or T to continue execution until the address is + found. + + 10. To stop the program when a specific data field in memory is + changed, enter A followed by the address in xxxx followed by + the option code E for equal data or N for not-equal data. + Next entry the length of the data compare in hex when + prompted. If option E is selected, enter the hex value of the + data you want to search for when prompted. Next press Q or T + to continue execution until the data compare specified + triggers debug user interface again. To stop at a specific + instruction count in a 370 program, use the I command to + display the instruction counter word and then use data equal + address stop on the word. To obtain detail instruction trace + up to point of failure, either use Q or T from beginning of + the program or set address stop at previous multiple of 256 + on instruction count field and then restore traces with K + command and then use Q or T proceed to point of failure. At + point of failure, use N command to list last 20 instruction + trace points. + + 11. To turn off any address stop option, enter A. + + 12. To list the last 20 instruction trace table entries, enter N. + If running in 370 mode (option Z toggles mode), only the 370 + instruction traces will be stored and listed via option N. + In 80x86 mode, all traces will be stored and listed. + Note that this list may be incomplete if the program + was running with K option active to kill traces for speed. + Option K kills each trace entry to debug the first time debug + is entered for that trace point. Option K makes the program + run much faster at the expense of losing repeated trace + points until K reset is issued. However, you can use Find to + locate selected trace id's and use Save to protect id from + kill mode. This option allows much faster execution while + still being able to trace selected id's. A very useful id to + save is IFL which will then trace each 370 instruction during + kill mode while killing all of the lower level ID's for + reasonable speed yet full visibility of 370 instructions. + Faster still is to save only one 370 instruction id such as + TRT. This is very useful in conjunction with address stop, + since the address stop overhead is only incurred for the + selected saved id's. Note that the trace table only contains + addresses of instructions, and as a result if instruction + modification or overlays are used, the data listed for a + previous instruction may be different from what it was at the + time it was executed. In this case it may be helpful to rerun + program with address stop to see what was in memory at the + time an instruction was executed. + + 13. To set a fixed limit on the number of trace entries before + entering debug command mode again, enter L and count in hex + xxxx. Next enter Q or T to continue until count reached zero. + If zero count is entered, the limit is not checked. + + 14. To modify memory, enter M followed by address in hex xxxx. + Next enter hex data bytes followed by return key. + + 15. To display the 8086 registers, type Z to switch to 8086 mode. + Now type R. In 8086 mode, storage dumps translate data to + ASCII instead of EBCDIC for character display. In 8086 mode, + N lists all trace entries instead of just IFL 370 instruction + traces. In 8086 mode, Y changes 8086 registers instead of 370 + registers. To return to 370 mode, type Z again. + + 16. The W command displays free memory in the 8086 data segment + for 8086 mode and the free memory in the current address + space in 370 mode. Note these are two totally separate free + areas. The 8086 free area is limited to <= 64k addressable by + the DS register and uses 4 byte free queue elements + (next,length). The 370 free area extends from the end of 370 + code in COM module to the end of free memory and uses 8 byte + 370 format free queue elements (next,length) on 8 byte + boundaries. For BIN file execution, the free area is the SQA + area allocated in the emulator address space. The first free + queue element in a 370 address space is pointed to by ASCASF + field in address space control block located at X'104' in low + memory (may be zero if no free memory currently available). + The ASCB for BIN modules can be located by subtracting + (X'200'-X'104') from the entry point address in register 15 at + entry (trace ID 370). + + 17. The J jump command may be used to modify either the emulator + or the 370 current instruction address depending on the + current Z mode. In 370 mode, the address entered is a virtual + address. In 80x86 mode, the address entered is a code segment + offset (This is a very dangerous function and not + recommended). + +********* + +Chapter 8. Floating Point Support + +********* + + A. Register formats + + 1. General purpose registers + + The general purpose 370 registers are located at the beginning + of the data segment of the E370 emulator (DS:0). They are + stored in 80x86/80x87 long integer format with least + significant byte first starting with register 0. For example, + the high byte of register 0 is at DS:3 and the low byte of + register 1 is at DS:4. This area can be used with address + stop to detect a specific register value or change in register + value (although remembering reverse format is always a + challenge). This format is used to allow native loads and + stores without reversing bytes which speeds up register to + register operations and allows addition of registers directly + from memory without conversion. + + 2. Floating point registers + + If the 80x87 co-processor is installed, the R command displays + the four 8 byte floating point register values numbered 0, 2, + 4, and 6. This is one way (other than 123 /WS screen) to tell + if 80x87 is installed. The floating point registers are + stored in 80x87 temporary real format which is 10 bytes long. + The first 8 bytes contain the normalized 64 bit unsigned + mantissa with the high bit always on stored in reverse order + (like a double long integer with the least significant byte at + low address. The last 2 bytes contain the base two exponent + and the sign stored as an integer. The 15 bit exponent is + stored in excess 3FFFH format. True zero is represented by + plus or minus sign and all other bits zero. This format + exceeds 370 double precision 8 byte format for both mantissa + and exponent range. This format is used to significantly + speed up floating point register to register operations since + numbers can be directly transferred to/from 80x87 in this + format. A conversion routine must be used to convert floating + point numbers when moved to/from memory to the floating point + registers. The conversion routine is quite efficient but does + involve shifting entire number up to 3 bits left or right to + convert from normalized base 2 to base 16. The floating point + register memory area can be dumped to see the real format and + can be used with address stop to detect specific value or + change in value. + + B. Floating Point Scientific Subroutine Package + + Using floating point 370 instructions plus extended 80x87 function + SVC's described in SYSTEM.DOC, a set of efficient scientific + subroutines have been coded in SSP.ALC and are stored in the + L370.LIB subroutine library. The argument and result is in F0 or + R0 unless noted otherwise. The SSP functions are similar to the + FORTRAN IV intrinsic functions. + + FUNCTION DESCRIPTION RANGE LIMITATIONS NOTES + + ATAN ARCTAN + ALOG LOG BASE E 0 < F0 + ALOG10 LOG BASE 10 0 < F0 + COS COSINE + EXP E ** X + REAL CVT TO REAL -2**32 <= R0 < 2**32 ARG. IN R0 + INT CVT TO INT -2**32 <= F0 < 2**32 RESULT IN R0 + MOD MOD(F0,F2) REMAINDER R0 + PI PI 3.14159............. + SIN SINE + SQRT SQUARE ROOT 0 <= F0 + TAN TANGENT + + C. Floating point co-processor assisted standard 370 instructions. + + 1. If the floating point option is on and an 80x87 co-processor + is installed, then it is used to assist the CVB and CVD + instructions for speed. In the case of large numbers, the + speed improvement can be up to 4 times. For numbers close + to zero, there is no improvement in speed. Depending on + user demand, this type assist may be added for other packed + decimal instructions in the future. + +********* + +Chapter 9. XA Extended Architecture Support + +********* + + 1. A370 supports the XA instructions as defined in the + IBM System/370 XA Principles of Operation manual version + SA22-7085. + + 2. E370 supports the 6 XA non-privileged instructions + BAS, BASR, MVCIN, BASSM, IPM, and BSM. When the emulator is in + 31 bit mode, the PSW format displayed by MMDBUG is extended mode + with the high address bit on. The emulator defaults to 24 bit + mode and the 370 basic PSW format. + + 3. The standard instructions LA, BAL, BALR, EDMK, and TRT + now support both the 24 bit and 31 bit addressing modes + as set by BASSM or BSM using the PSW address mode bit. + Note that in 31 bit addressing mode the LA instruction + adds all 31 bits of the index and base register plus + displacement and clears only the high bit of the result. This + means the high byte of the index and base must be cleared when + using 24 bit addresses in 31 bit mode. + +********** + +Chapter 10. System subroutine library + +********** + +The following subroutines are included in the default system +subroutine relocatable library L370.LIB in the root directory: + + # SUBROUTINE ENTRY FUNCTION ARGUMENTS + + 1 DAT print date and time none + + 2 TIMER return current time none + of day in R0 in 100th + of a second units + + 3 PET print elapsed time since none + last call plus date and + time and 370 instruction + count interval statistics + + 4 DTIME print time in upper left none + corner of screen in format + HH:MM:SS + + 5 SYNERROR print PC/370 input/output R0 = error code + error message based on R1 = function code + return codes passed in + registers R0-R1 at entry + to SYNAD DCB exit routine + + 6 SSP scientific subroutines + (see chapter 8 for entry + points to this module) + + 7 API support application using + application program interface + (API) with IBM PC 3270 + emulation via interrupt 7A + +The 370 source code for all of the above modules is in the LIB +directory, and the BAT\BLDLIB.BAT command file will rebuild library +from the source. Remember when adding subroutines to a relocatable +library that there cannot be any backward references to prior modules +in the library since L370.EXE uses serial one pass search for external +references in the library. + +********** + +Chapter 11. COBOL call interface support + +********** + +To call a PC/370 assembler subroutine from a Micro Focus COBOL program +requires that the PC/370 emulator E370R42.EXE be made resident by +executing it directly (see BAT\RUNCBL.BAT for demo). Each subroutine +to be called must be assembled and linked using option B to create a +BIN type file which will be dynamically loaded on the first call. + +The interface performs the following functions prior to transferring +control to the assembler subroutine: + + 1. The address space control block at X'104' in the BIN file is + initialized to a virtual equals real (V=R) region in order to + address the arguments passed. The ASCASF free memory pointer + is initialized to point to the current first free queue element + in the common system queue area (SQA) memory allocated along + with the resident emulator. The SQA is used to dynamically + allocate buffers for subroutine file I/O and any other dynamic + memory requests via GETMAIN/FREEMAIN svc's. Note that SQA is + shared by all subroutines and each subroutine must release any + memory it uses prior to exit or SQA will eventually be depleted + (just like MVS). + + 2. The segment and offset argument addresses on the stack are + converted into a standard 370 calling list of 32 bit absolute + addresses located at X'80' in the BIN file (normally the command + line area). Up to 32 arguments can be passed. + + 3. The 370 registers are set as follows: + + R1 = absolute address of argument list at X'80' in BIN file + + R14 = absolute return address to exit subroutine at X'102' in + BIN file via detach SVC. + + R15 = absolute address of entry point (normally X'210' in BIN + file. At exit from called BIN module, the low 16 bits of + register 15 are used to set special Micro Focus COBOL return + code value called RETURN-CODE. If emulator is not resident + when a BIN module is called, a return code of 16 is passed. + + 4. If option D was specified in the L370 link of the BIN module + being called, the emulator interactive debug facility will be + invoked at entry with all traces restored. If option D was + not specified, execution will proceed without interruption and + no traces will be restored to provide fast execution of one or + more BIN modules. + + 5. Note that BIN modules are dynamically loaded by COBOL run time + system at unknown addresses. Since BIN subroutines run in + V=R address mode in order to address COBOL data areas, all 370 + subroutine code must be self relocating. See CBL\TESTCIO.ALC + for example of how to relocate any address constants required + such as subroutine entry points and DCB addresses. The A370 + assembler lists all relocation addresses in PRN listing created + with the /L option. + +********** + +Chapter 12. Technical References: + +********** + + 1. For information on 370 machine instructions see + IBM System 370 XA Principles of Operation manual SA22-7085. + 2. For information on 370 assembler language see: + a. IBM OS/VS Assembler Language manual GC33-4010. + b. Assembler Language Programming by G. W. Struble. + 3. For information on how the assembler, linkage editor, and + operating system software works see: + a. Systems Programming by John J. Donovan. + b. Operating Systems by S. E. Madnick and J. J. Donovan. + 4. For information on the 80x86 processors see: + a. The 8086 Book by George Alexy. + b. Intel iAPX 286 Programmer's Reference Manual 210498-003. + c. Intel 80386 Programmer's Reference Manual 230985-001. + 5. For information on the MSDOS operating system and utilities + see: + a. Disk Operating System Version 3.2 Reference 68X2405. + b. Disk Operating System Technical Reference 6139658. + c. Advanced MS-DOS by Microsoft Press ISBN 0-914845-77-2 + 6. For information on usage of ASSIST extensions see: + a. Assembler Language with Assist by Ross A. Overbeek and W. + E. Singletary. Published by Science Research Associates, + Inc., Chicago, Copyright 1976, ISBN 0-574-21085-7. + b. IBM 370 Assembly Language with ASSIST, Structured Concepts, + and Advanced Topics by Charles J. Kacmar. Published by + Prentice Hall, September 1987, ISBN 0-13-455742-5. + 7. For summary article on how PC/370 was developed see ACM + Sigsmall Newsletter Volume 8 Number 3, August 1982. + 8. For article on conversion of PC/370 from CP/M to MS-DOS see + ACM SIGSMALL/PC Newsletter Volume 11 Number 3, August 1985. + 9. For information on 80x87 see Intel iAPX 286 Programmer's + Reference Manual #210498-003. Also book by designer titled, + "The 8087 Primer" by John F. Palmer and Stephen P. Morse, + published by John Wiley & Sons, inc. Copyright 1984, ISBN 0- + 471-87569-4. \ No newline at end of file diff --git a/PC370_orig/Diskette/full/DOC/UTILITY.DOC b/PC370_orig/Diskette/full/DOC/UTILITY.DOC new file mode 100644 index 0000000..14fd502 --- /dev/null +++ b/PC370_orig/Diskette/full/DOC/UTILITY.DOC @@ -0,0 +1,352 @@ + +UTILITY.DOC PC/370 utility documentation + +A. Summary + + 1. SEE.ALC - this utility will support full screen editing of an + ASCII text file. The size of the file is only limited by the + amount of MS-DOS memory available (up to 640K less MS-DOS and + PC/370). The program is modeled after the TURBO PASCAL full + screen editor with compatible commands. In addition to the + expanded memory support, SEE supports full color selection, + character graphics, and session emulation. + + 2. PRINTDOC.ALC - this utility will read an ASCII text file and + print it on the standard printer device with headings and page + numbers set by standard ALC TITLE, EJECT, and SPACE commands. + + 3. T370.ALC - this utility reads A370 relocatable object files + which are in compressed bit stream format and creates standard + IBM 370 linkage editor input in standard 80 byte fixed record + format with ESD, TXT, RLD, and END type records. This utility + also has option to generate ascii hex listing file if desired. + The 370 object files have a suffix of .370 and the listing + file has a suffix for .HEX. + +To run demo of utility programs, execute BAT\RUNUTIL.BAT. To rebuild +executable utility modules from source run BAT\BLDUTIL.BAT. + +B. SEE - Screen Editor and Emulator Documentation + +SEE.ALC is a full screen ASCII text editor for PC's with MS-DOS 2.0+ +and at least 256k. SEE is designed to be keystroke compatible with +both PFS:WRITE and the TURBO PASCAL (ie WORDSTAR like) editors. SEE +supports text files up to 512k on a 640k system. Note SEE.ALC itself +is about 90k which some editors can't handle. To conserve space SEE +strips trailing blanks from each line of text, and replaces 9 leading +blanks with a single tab character. Each line is terminated with a +carriage return and line feed. + +SEE also supports session emulation by optionally creating a file +(.KSF) with all of the session's keystrokes which can be replayed to +emulate the session with full color control. SEE also supports line +and block drawing with graphic characters in full color. + +The distribution diskettes or ARC file contains SEE.COM which can be +used to edit the source code UTIL\SEE.ALC. TO edit an existing ASCII +text file: + + A>SEE file1 + +E370R42.EXE is dynamically loaded by SEE.COM to execute the 370 code +so it must be accessible on the current path as SEE.COM. If you wish +to run SEE using the emulator on a separate directory, you can use +DEBUG to insert path in front of emulator name at X'140' in SEE.COM, +or you can make the emulator resident by directly executing it. +The default file type is ALC. (Note with PC/370 you can change the +default in SEE.ALC and reassemble and link it in about 90 seconds on a +standard PC.) If the file doesn't exist, it will create an empty file +ready for editing. If the file does exist, it will be renamed +file1.BAK before saving the new file if it is changed. Be sure there +is room on the same disk for both the new file and the backup file +before spending a lot of time editing a file. Note SEE.ALC itself +requires at least 110k free space before you can save it. + +To capture all the keystrokes in a session for replay later, type: + + A>SEE file1 file2 + +The default file type for file2 is KSF. If file2 does not exist, it +will be created with all the keystrokes entered during the session +which edits file1. If file2 already exists, SEE will use it as the +keyboard input to emulate the original session. Note two special keys +act different in live editing versus emulation. ALT-F1 key causes +emulation to stop until a real key is entered. ALT-F2 key causes a 1 +second wait in emulation mode to slow it down for visual effects. +Additional controls could be easily added to SEE. + +SEE is designed to be fast and easy to use. To change a drive +specification in an autoexec.bat file a sequence of less than 25 +characters including the filename may be required. For example, +assuming autoexec.bat contains: + +RECORD/COLUMN 1...5...10...15...20 + 1 ver + 2 astclock + 3 c: + 4 123 + +The following keystrokes would change drive c to drive a: + +keystrokes ascii characters comments + + 1-19 see autoexec.bat[enter] start up SEE and display text + 20-21 [arrow down][arrow down] move down to third line + 22 a replace c with a + 23 [esc] rename old file and save new + file + +To learn the keystrokes available with SEE, use F1 and F2 to display +help screens. After reading help screens type any character to return +to text display. + +To see the capability of SEE and to verify that the version you have +is working correctly on your system, run the batch file RUNUTIL.BAT. +This file executes the following emulation sessions: + + 1. DEMOSEE1.KSF - test both native and alternate keys as defined on + F2. + 2. DEMOSEE2.KSF - test full color character graphics by drawing + colored organizational chart boxes and a full + color U.S. flag with blinking stars. Press enter + to end session. + +One of the unique features of SEE is that the entire 370 assembler +source code is being distributed along with the object code. Because +of this, the SEE editor can be customized as required. The SEE.ALC +source program is about 3000 lines and requires no external +subroutines. On a RAM disk, it assembles in about 60 seconds via the +command A370 SEE. The link edit takes another 10 seconds via the +command L370 SEE. A listing of the source can be generated via the +command A370 SEE/L if you have a hard disk. The listing is too big to +fit on a 360k floppy disk. + +SEE has several special keys which may need additional explanation. +The ALT-F3 key enters PC/370 debug mode where you can display the 370 +registers via the R command, dump memory via the D command, trace +instructions, etc. To return to the SEE editor, type Q. Since the +default is to kill all trace ids and disable the PC/370 interactive +debug interrupt, you must either link SEE with the debug option D, or +press a key during loading of the SEE program to get into PC/370 debug +at the beginning of SEE where you can select ids to save and trace. + +The ALT-F4 key toggles an internal audit mode which was very useful +during debugging and may be useful to others making changes to SEE. +In audit mode the critical pointers and control blocks are verified +for consistency after each operation that modifies them. For large +text files, these audits may take several seconds so be patient. Via +the audit mode, data corruption can be detected immediately after it +occurs rather than later such as when a save is attempted. The +following block diagram shows the critical blocks and their +relationships: + + ****************************************************************** + * MS-DOS 64k segment * + ****************************************************************** + * SEE.COM 512k segment (code and data in 370 address space) * + * * + * SCB screen control block * + * ************************* <<<<< ASCB pointer to screen * + * X>>*SCBADDR DS A addr LB * control block with 25 * + * ^ *SCBPREV DS A prev LB * lines of text * + * ^ *SCBNEXT DS A next LB * * + * ^ *SCBLINE DS CL80 text * * + * ^ ************************* <<<<< R5 relative index to * + * ^ *SCBADDR DS A addr LB * current row in ASCB * + * ^ *SCBPREV DS A prev LB * times X'100' * + * ^ *SCBNEXT DS A next LB * (X'0000' to X'1700') * + * ^ *SCBLINE DS CL80 text * * + * ^ ************************* R6 relative column (0-79) * + * ^ R7 address of SCB for row * + * ^ * + * ^ GLBLAST DS A last LB >>>>>>>X * + * X<<<<<<<<<<<<<<<<<<<<<<<< GLBCUR DS A current LB >>>>>X v * + * (matches SCBADDR for GLBFIRST DS A first LB >>>> v v * + * row 0 at all times) v v v * + * v v v * + * v v v * + * (Dynamic memory allocated via SVC 10) v v v * + * v v v * + * LB line control block v v v * + * *************************** v v v * + * 0 * LBPREV DS A prev LB *<<<<<<<<<<<<<<<<<<<<<<<<<>*************************** v v * + * * LBPREV DS A prev LB *<<<<<<<<<<<<<<<<<<<<<<<<<<<>*************************** v * + * * LBPREV DS A prev LB *<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Contains CBL Micro Focus VS COBOL demo program source + code along with demo PC/370 assembler subroutine + source code. +UTIL Contains utility program ALC source code. + +PC-SIG +1030D E Duane Avenue +Sunnyvale Ca. 94086 +(408) 730-9291 +(c) Copyright 1987,88,89 PC-SIG, Inc. + + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/FILES402.TXT b/PC370_orig/Diskette/full/FILES402.TXT new file mode 100644 index 0000000..252407d --- /dev/null +++ b/PC370_orig/Diskette/full/FILES402.TXT @@ -0,0 +1,70 @@ +Disk No: 402 +Program Title: CROSS ASSEMBLER for the IBM 370 version 4.2 (Disk 1 of 3) +PC-SIG version: 3.3 + +PC/370 is a cross assembler that runs on the IBM-PC, AT, or XT and lets +you compile and run IBM 370 assembly language programs. + +These programs are well-documented with an excellent example demo set up +to be run by a batch file. This is the most complete emulation of the +VM370 assembler that can be found. A generous debugging and erase +facility is also given to ease complete development cycles without the +big blue box. + +Version 4.2 is loaded with new features, here are just a few: + + o PC/370 assembler subroutines may now be called from Micro + Focus COBAL/2 programs running either in extended memory + protected mode or normal MS-DOS real mode. Standard linkage + conventions are supported. The + + o PC/370 run time emulator can now be made resident to + eliminate loading it from disk storage for each program or + subroutine execution. As part of making the emulator + reusable, debug now supports restoring traces. + + o An optional hardware assist for the CVB and CVD 370 + instructions using the 80x87 math co-processor can speed up + the instructions by up to a factor of 4. + + o Two new supervisor calls have been added. SVC 36 will load a + program or file into a predefined area of memory (useful for + overlays), SVC 37 defines user SVC exits for modifying native + SVC support without requireing the overhead of an emulated + interrupt driven shell. + + o The cross assembler now supports the copy statement to allow + includeing source code files. + + o The linkage editor now supports option U to allow external + unresolved references. + +Please note that all three disks are required to run this program, the +other numbers in the set are #859 and #1352. + +Usage: For beginning through advanced S/370 assembly language +programmers. + +Special Requirements: None. + +How to Start: Type GO and press (press enter). + +Suggested Registration: $45.00 + +File Descriptions: + +BAT Contains batch files which can be executed without any + parameters after setting current directory to R42. +CPY Contains CPY source code for ALC source COPY includes. +LIB Contains ALC source code for PC/370 system subroutines. +R42 Contains all of the executable programs and system files + required by the PC/370 facilities. +READ ME Introductory text file. + +PC-SIG +1030D E Duane Avenue +Sunnyvale Ca. 94086 +(408) 730-9291 +(c) Copyright 1987,88,89 PC-SIG, Inc. + + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/FILES859.TXT b/PC370_orig/Diskette/full/FILES859.TXT new file mode 100644 index 0000000..e0b87d5 --- /dev/null +++ b/PC370_orig/Diskette/full/FILES859.TXT @@ -0,0 +1,33 @@ +Disk No: 859 +Program Title: CROSS ASSEMBLER for the IBM 370 version 4.2 (Disk 2 of 3) +PC-SIG version: 3.3 + +PC/370 VIRTUAL MACHINE is a cross assembler that runs on the IBM-PC, AT, +or XT and lets you compile and run IBM 370 assembly language programs. +Please note that this is the second disk of a three disk set. The other +two disks are #402 and 1352. + +Usage: For beginning through advanced S/370 assembly language +programmers. + +Special Requirements: None. + +How to Start: Type GO and press (press enter). + +Suggested Registration: $45.00 + +File Descriptions: + +DEMO Contains demo program ALC source code. +DOC Contains machine readable PC/370 documentation. Read + DOC\INTRO.DOC for PC/370 overview and more information on + the other component of the package. +MAC Contains MAC and MLC source code for macro pre-processor. + +PC-SIG +1030D E Duane Avenue +Sunnyvale Ca. 94086 +(408) 730-9291 +(c) Copyright 1987,88,89 PC-SIG, Inc. + + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/GO.BAT b/PC370_orig/Diskette/full/GO.BAT new file mode 100644 index 0000000..64b00be --- /dev/null +++ b/PC370_orig/Diskette/full/GO.BAT @@ -0,0 +1,5 @@ +ECHO OFF +CLS +TYPE GO.TXT +ECHO ON + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/GO.TXT b/PC370_orig/Diskette/full/GO.TXT new file mode 100644 index 0000000..9f04b9b --- /dev/null +++ b/PC370_orig/Diskette/full/GO.TXT @@ -0,0 +1,7 @@ +ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +º <<<< Disk #402 CROSS ASSEMBLER 370 >>>> º +ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +º To copy the documentation to your printer, type: º +º MANUAL (press enter) º +ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/LIB/DAT.ALC b/PC370_orig/Diskette/full/LIB/DAT.ALC new file mode 100644 index 0000000..ac44f6f --- /dev/null +++ b/PC370_orig/Diskette/full/LIB/DAT.ALC @@ -0,0 +1,85 @@ + TITLE 'DAT - DATE AND TIME SUBROUTINE' +* +* AUTHOR. DON HIGGINS. +* DATE. 04/01/85. +* REMARKS. +* +* THIS SUBROUTINE PRINTS DATE AND TIME ON STD. OUTPUT DEVICE. +* THE DATE AND TIME IS OBTAINED FROM MSDOS. +* +* REGISTER USAGE. +* +* 0 - WORK +* 1 - WORK +* 2 - WORK +* 14 - RETURN ADDRESS (USUALLY SET BY BALR 14,15) +* 15 - ENTRY POINT +* +DAT CSECT + USING *,R15 + SVC TIMER + CVD R1,PWORK YEAR + MVC DYEAR,=X'402020202020' + ED DYEAR,PWORK+5 + ST R0,WORK + SR R0,R0 + IC R0,WORK HOURS + BAL R1,CVT + MVC DHH,DWORK+2 + IC R0,WORK+1 MINUTES + BAL R1,CVT + MVC DMM,DWORK+2 + IC R0,WORK+2 SECONDS + BAL R1,CVT + MVC DSS,DWORK+2 + IC R0,WORK+3 100TH SECONDS + BAL R1,CVT + MVC DTH,DWORK+2 + ST R2,WORK + IC R0,WORK MONTH + LR R1,R0 + MH R1,=H'3' + LA R1,MMTAB-3(R1) + MVC MONTH,0(R1) + IC R0,WORK+1 DAY + MVI MASK+1,X'20' SET ZERO SURPRESS + BAL R1,CVT + MVI MASK+1,X'21' RESET + MVC DDD,DWORK+2 + IC R0,WORK+2 DAY OF WEEK + LR R1,R0 + MH R1,=H'3' + LA R1,DOWTAB(R1) + MVC DAY,0(R1) + LA R2,TODMSG + SVC WTO PRINT DATE AND TIME + BR R14 +CVT EQU * CONVERT BINARY TO DECIMAL + CVD R0,PWORK + MVC DWORK,MASK + ED DWORK,PWORK+6 + BR R1 +TIMER EQU 18 SVC FOR TIME AND DATE +WTO EQU 209 SVC FOR WRITE TO OPERATOR +R15 EQU 15 +R14 EQU 14 +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +TODMSG DC C' DATE = ' +DAY DC C'XXX',C' ' +MONTH DC C'XXX',C' ' +DDD DC C'ZZ',C',' +DYEAR DC C' ZZZZZ',C' TIME = ' +DHH DC C'ZZ',C':' +DMM DC C'ZZ',C':' +DSS DC C'ZZ',C':' +DTH DC C'ZZ',C'$' +DOWTAB DC C'SUNMONTUEWEDTHUFRISAT' +MMTAB DC C'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC' +WORK DC F'0' +PWORK DC D'0' +DWORK DC C' Z99' +MASK DC X'40212020' + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/LIB/DTIME.ALC b/PC370_orig/Diskette/full/LIB/DTIME.ALC new file mode 100644 index 0000000..d0256cf --- /dev/null +++ b/PC370_orig/Diskette/full/LIB/DTIME.ALC @@ -0,0 +1,79 @@ + TITLE 'DTIME - DISPLAY TIME IN UPPER LEFT CORNER' +DTIME CSECT + USING DTIME,R15 + STM R14,R4,SAVE + LR R4,R15 + DROP R15 + USING DTIME,R4 + SVC GETTIME R0 = HOURS, MINUTES, SECONDS, 100TH SEC + ST R0,WORK + SR R0,R0 + IC R0,WORK R0=HOURS + CVD R0,PWORK + MVC DWORK,=X'40212020' + ED DWORK,PWORK+6 + MVC DHH,DWORK+2 + IC R0,WORK+1 R0=MINUTES + CVD R0,PWORK + MVC DWORK,=X'40212020' + ED DWORK,PWORK+6 + MVC DMM,DWORK+2 + IC R0,WORK+2 R0=SECONDS + CVD R0,PWORK + MVC DWORK,=X'40212020' + ED DWORK,PWORK+6 + MVC DSS,DWORK+2 + MVI DHH+2,C':' + MVI DMM+2,C':' + LA R1,DHHMMSS + LA R2,8 + SVC EBCASC CONVERT TO ASCII + LA R0,X'0300' READ CURSOR - ADV. MS-DOS PG 403 + LA R1,0 BX=0 PAGE # + SVC VIDEO GET CURSOR ROW,COL IN R15 + ST R15,SAVCUR + LA R0,X'0200' SET CURSOR - ADV. MS-DOS PG 402 + LA R1,0 BX = 0 PAGE # + L R15,=A(ROW*256+COL) DX = ROW,COL FOR CURSUR SET + SVC VIDEO SET CURSOR FOR DISPLAY + LA R2,8 + LA R3,DHHMMSS +LOOP EQU * + LA R0,X'0E00' WRITE TEXT IN TELETYPE MODE - ADV. MS-DOS PG 414 + IC R0,0(R3) CHAR TO DISPLAY + LA R3,1(R3) + LA R1,0 PAGE 0 + SVC VIDEO + BCT R2,LOOP + LA R0,X'0200' SET CURSOR + L R15,SAVCUR + LA R1,0 + SVC VIDEO RESTORE CURSOR + LM R14,R4,SAVE + BR R14 +* +* PC/370 SUPR STATE SVC'S +* +EBCASC EQU 13 CONVERT TO ASCII +GETTIME EQU 18 GET TIME IN R0 +VIDEO EQU 128+16 ROM BIOS VIDEO DRIVER (TECH. REF. A-48) +SAVE DC 9D'0' +SAVCUR DC F'0' +ROW EQU 0 TOP LINE +COL EQU 72 LAST 8 COLUMNS +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +R3 EQU 3 +R4 EQU 4 BASE +R14 EQU 14 +R15 EQU 15 +DWORK DC CL4' Z99' +WORK DC F'0' +PWORK DC D'0' +DHHMMSS DS 0CL8 +DHH DC C'HH',C':' +DMM DC C'MM',C':' +DSS DC C'SS' + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/LIB/PET.ALC b/PC370_orig/Diskette/full/LIB/PET.ALC new file mode 100644 index 0000000..9795df9 --- /dev/null +++ b/PC370_orig/Diskette/full/LIB/PET.ALC @@ -0,0 +1,72 @@ + TITLE 'PET - PRINT ELAPSED TIME IN SECONDS SINCE LAST CALL' +* +* +* 04/08/85 CODED +* 04/28/85 ADD DISPLAY OF DATE, TIME, INSTRUCTION COUNTER, INS/SEC +* 01/01/87 CHANGE SVC 16 TO USE CONTENTS OF R1 FOR COUNT IN R2.0 +* +PET CSECT + USING *,R15 + STM R14,R15,RSAVE + L R15,=V(DAT) DISPLAY DATE AND TIME + BALR R14,R15 + USING *,R14 + LM R14,R15,RSAVE + DROP R14 + SVC ICNTSVC + LR R0,R1 + L R1,INSCOUNT + ST R0,INSCOUNT SAVE LAST INSTR. COUNT + CVD R0,PWORK + MVC DCOUNT,MASKCNT + ED DCOUNT,PWORK+4 + LA R2,DCNTMSG + SVC WTO DISPLAY CURRENT INSTRUCTION COUNTER + SR R0,R1 + ST R0,INSDIFF SAVE TOTAL SINCE LAST CALL + L R15,=V(TIMER) + BALR R14,R15 + USING *,R14 + LM R14,R15,RSAVE + DROP R14 + L R1,TSAVE + ST R0,TSAVE SAVE CURRENT TIMER VALUE IN 100TH SEC. + LTR R1,R1 + BZR R14 EXIT NOW IF FIRST CALL + SR R0,R1 + ST R0,SEC100 SAVE ELAPSED TIME IN 100TH SEC + CVD R0,PWORK + MVC DTIME,MASKSEC + ED DTIME,PWORK+4 + L R1,INSDIFF + MH R1,=H'100' SET R0-R1 = 100 * INSTRUCTIONS IN INTERVAL + SR R0,R0 + D R0,SEC100 SET R1 = INSTRUCTIONS PER SECOND + CVD R1,PWORK + MVC DIPS,MASKCNT + ED DIPS,PWORK+4 + LA R2,DTIMEMSG + SVC WTO + BR R14 +R15 EQU 15 +R14 EQU 14 +R2 EQU 2 +R1 EQU 1 +R0 EQU 0 +RSAVE DC 2F'0' +TSAVE DC F'0' +INSCOUNT DC F'0' +INSDIFF DC F'0' +SEC100 DC F'0' +PWORK DC D'0' +MASKSEC DC X'402020',C',',X'202120',C'.',X'2020' +MASKCNT DC X'4020',C',',X'202020',C',',X'202020' +DCNTMSG DC C' INSTRUCTION COUNTER =' +DCOUNT DC CL10' Z,ZZZ,ZZZ',C'$' +DTIMEMSG DC C' ELAPSED TIME =' +DTIME DC CL10' ZZ,ZZ9.99',C' SEC INSTR/SEC = ' +DIPS DC CL10' Z,ZZZ,ZZZ',C'$' +ICNTSVC EQU 16 +WTO EQU 209 + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/LIB/SSP.ALC b/PC370_orig/Diskette/full/LIB/SSP.ALC new file mode 100644 index 0000000..7bc729c --- /dev/null +++ b/PC370_orig/Diskette/full/LIB/SSP.ALC @@ -0,0 +1,197 @@ + TITLE 'SSP - PC/370 SCIENTIFIC SUBROUTINE PACKAGE' +* +* PGMID. SSP.ALC +* AUTHOR. DON HIGGINS. +* DATE. 07/22/87 +* REMARKS. +* +* THIS MODULE CONTAINS SCIENTIFIC SUBROUTINES SIMILIAR +* TO FORTRAN LIBRARY FUNCTIONS. THESE ROUTINES REQUIRE +* PC/370 FLOATING POINT SUPPORT VIA 80X87 AND TAKE FULL +* ADVANTAGE OF 80X87 EXTENDED HARDWARE FUNCTIONS SUCH AS +* SQUARE ROOT, TANGENT, LOG, AND EXPONENT VIA SVC 35 +* MICROCODE INSTRUCTION. SEE SSP.DOC FOR MORE INFORMATION. +* +* ARGUMENT IN F0 AND RESULT IN F0 UNLESS OTHERWISE NOTED. +* R15 SET TO 0 FOR NORMAL EXIT ELSE NOT ZERO FOR ERROR. +* +* MAINTENANCE: +* +* 08/08/87 ADD MOD, SIN, COS +* 08/20/87 ADD PI +* +SSP CSECT +ALOG EQU * F0=LOGE(F0) + ENTRY ALOG + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + STD F0,SAVEF0 + STD F2,SAVEF2 + LA R1,FPLE2 F0=LOGE(2) + SVC FPSVC + LDR F2,F0 + LD F0,SAVEF0 + LA R1,FPYL2X F0=LOG2(F2*F0) + SVC FPSVC + LD F2,SAVEF2 + L R10,SAVE10 + BR R14 +ALOG10 EQU * F0=LOG10(F0) + ENTRY ALOG10 + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + STD F0,SAVEF0 + STD F2,SAVEF2 + LA R1,FPLT2 F0=LOG10(2) + SVC FPSVC + LDR F2,F0 + LD F0,SAVEF0 + LA R1,FPYL2X F0=LOG2(F2*F0) + SVC FPSVC + LD F2,SAVEF2 + L R10,SAVE10 + BR R14 +ATAN EQU * F0=ARCTAN(F0) + ENTRY ATAN + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + STD F2,SAVEF2 + LDR F2,F0 + LE F0,=E'1' + LA R1,FPATAN + SVC FPSVC + LD F2,SAVEF2 + L R10,SAVE10 + BR R14 +COS EQU * F0=COS(F0) + ENTRY COS + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + LA R1,FPCOS + SVC FPSVC + L R10,SAVE10 + BR R14 +EXP EQU * F0=E**(F0) + ENTRY EXP + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + STD F2,SAVEF2 + LDR F2,F0 + LA R1,FPL2E F0=LOG2(E) + SVC FPSVC + MER F0,F2 F0=LOG2(E)*F0 + LA R1,FP2XM1 F0=2**(F0) + SVC FPSVC + LD F2,SAVEF2 + L R10,SAVE10 + BR R14 +INT EQU * R0=F0 + ENTRY INT + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + LA R1,FPIFIX + SVC FPSVC + L R10,SAVE10 + BR R14 +MOD EQU * F0=MOD(F0,F2) + ENTRY MOD + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + LA R1,FPMOD + SVC FPSVC + L R10,SAVE10 + BR R14 +PI EQU * F0=PI + ENTRY PI + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + LA R1,FPPI + SVC FPSVC + L R10,SAVE10 + BR R14 +REAL EQU * F0=R0 + ENTRY REAL + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + LA R1,FPFLOAT + SVC FPSVC + L R10,SAVE10 + BR R14 +SIN EQU * F0=SIN(F0) + ENTRY SIN + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + LA R1,FPSIN + SVC FPSVC + L R10,SAVE10 + BR R14 +SQRT EQU * F0=SQRT(F0) + ENTRY SQRT + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + LA R1,FPSQRT + SVC FPSVC + L R10,SAVE10 + BR R14 +TAN EQU * F0=TAN(F0) + ENTRY TAN + USING *,R15 + ST R10,SAVE10 + BALR R10,0 + USING *,R10 + LA R1,FPTAN + SVC FPSVC + L R10,SAVE10 + BR R14 +SAVE10 DS F +SAVEF0 DS D +SAVEF2 DS D +R0 EQU 0 INTEGER ARGUMENT/RESULT +R1 EQU 1 SVC ARGUMENT +R10 EQU 10 BASE +R14 EQU 14 RETRUN ADDRESS +R15 EQU 15 ENTRY ADDRESS +F0 EQU 0 FLOATING POINT REGISTER 0 +F2 EQU 2 FLOATING POINT REGISTER 2 +FPSVC EQU 35 PC/370 FP MICROCODE ROUTINES USING 80X87 +FPLT2 EQU 1 F0=LOG10(2) +FPLE2 EQU 2 F0=LOGE(2) +FPL2E EQU 3 F0=LOG2(E) +FPL2T EQU 4 F0=LOG2(10) +FPPI EQU 5 F0=PI +FPATAN EQU 6 F0=ARCTAN(F2/F0) +FPTANXY EQU 7 F2/F0=TAN(F0) +FPSQRT EQU 8 F0=SQRT(F0) +FPYL2X EQU 9 F0=F2*LOG2(F0) +FPYL2XM1 EQU 10 F0=F2*LOG2(F0-1) +FP2XM1 EQU 11 F0=2**(F2*F0)-1 +FPFLOAT EQU 12 F0=R0 +FPIFIX EQU 13 R0=F0 +FPMOD EQU 14 F0=MOD(F0,F2) +FPSIN EQU 15 F0=SIN(F0) +FPCOS EQU 16 F0=COS(F0) +FPTAN EQU 17 F0=TAN(F0) + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/LIB/SYNERROR.ALC b/PC370_orig/Diskette/full/LIB/SYNERROR.ALC new file mode 100644 index 0000000..846fd87 --- /dev/null +++ b/PC370_orig/Diskette/full/LIB/SYNERROR.ALC @@ -0,0 +1,135 @@ + TITLE 'SYNERROR - SUBROUTINE TO PRINT ERROR MESSAGE IN SYNAD' +* PGMID. SYNERROR.ALC +* AUTHOR. DON HIGGINS +* DATE. 10/19/87 +* REMARKS. +* THIS SUBROUTINE MAY BE CALLED AT BEGINNING OF SYNAD EXIT TO +* DECODE DCB FUNCTION AND ERROR CODE IN R1 AND R0. +* MAINTENANCE. +* +* 10/21/87 REVERSE R0 AND R1 FOR COMPATABILITY WITH NATIVE DCB SYNAD +* +SYNERROR CSECT + USING *,R15 + STM R0,R4,SAVE04 + LA R3,FUNTAB + LA R4,MAXFUN +FUNSCH EQU * + CLM R1,3,0(R3) + BE FUNHIT + LA R3,12(R3) + BCT R4,FUNSCH + LA R2,=C'SYNAD FUNCTION NOT FOUND$' + SVC WTO +SYNEXT EQU * + LM R0,R4,SAVE04 + BR R14 +FUNHIT EQU * FUNCTION FOUND + MVC DFUN,4(R3) FUNCTION DESCRIPTION + MH R0,=H'20' + AH R0,2(R3) R1 = OFFSET TO ERROR MESSAGE FOR FUNCTION + LR R1,R0 + LA R1,ERRTAB-20(R1) + MVC DERR,0(R1) ERROR DESCRIPTION + LA R3,DFILE + LA R4,L'DFILE + L R1,DCBDSN-IHADCB(R2) +DSNLOOP EQU * + MVC 0(1,R3),0(R1) FILE NAME + LA R1,1(R1) + LA R3,1(R3) + CLI 0(R1),0 + BE DSNEND + BCT R4,DSNLOOP +DSNEND EQU * + MVI 0(R3),C'$' + LA R2,ERRMSG + SVC WTO + B SYNEXT + LTORG +SAVE04 DS 5F +ERRMSG DC C' I/O ERROR OP= ' +DFUN DC CL8' ',C' ERR= ' +DERR DC CL20' ',C' FILE=' +DFILE DC CL20' ',C'$' +FUNTAB DS 0F + DC AL2(X'101',PCOPEN-ERRTAB),CL8'PC-OPEN' + DC AL2(X'03D',MSOPEN-ERRTAB),CL8'MS-OPEN' + DC AL2(X'03C',MSMAKE-ERRTAB),CL8'MS-MAKE' + DC AL2(X'102',PCCLOS-ERRTAB),CL8'PC-CLOSE' + DC AL2(X'03E',MSCLOS-ERRTAB),CL8'MS-CLOSE' + DC AL2(X'103',PCREAD-ERRTAB),CL8'PC-READ' + DC AL2(X'042',MSSETP-ERRTAB),CL8'MS-SET' + DC AL2(X'03F',MSREAD-ERRTAB),CL8'MS-READ' + DC AL2(X'104',PCWRIT-ERRTAB),CL8'PC-WRITE' + DC AL2(X'040',MSWRIT-ERRTAB),CL8'MS-WRITE' + DC AL2(X'105',PCGETR-ERRTAB),CL8'PC-GET' + DC AL2(X'106',PCPUTR-ERRTAB),CL8'PC-PUT' + DC AL2(X'107',PCDELF-ERRTAB),CL8'PC-DEL' + DC AL2(X'108',PCFIND-ERRTAB),CL8'PC-FIND' + DC AL2(X'109',PCRENF-ERRTAB),CL8'PC-REN' +MAXFUN EQU (*-FUNTAB)/8 +ERRTAB EQU * +PCOPEN EQU * + DC CL20'ALREADY OPEN' 1 + DC CL20'HANDLE NOT NULL' 2 + DC CL20'LRECL LT MIN' 3 + DC CL20'USER BUFFER GT MAX' 4 + DC CL20'USER BUFFER LT MIN' 5 + DC CL20'R/W BUFFER LT LRECL' 6 + DC CL20'MIN BUFFER NOT FREE' 7 + DC CL20'GET MEMORY ERROR' 8 + DC CL20'LRECL LT MIN' 9 + DC CL20'LRECL GT MAX' 10 + DC CL20'BLKSZ LT MIN' 11 + DC CL20'BLKSZ GT MAX' 12 +MSOPEN EQU * 03D 1-5 +MSMAKE EQU * 03C 3-5 +MSCLOS EQU * 03E 6 +MSREAD EQU * 03F 5,6 +MSWRIT EQU * 040 5,6 +MSDELF EQU * 041 2,5 +MSSETP EQU * 042 1,6 +MSRENF EQU * 056 2,3,5,11H REN ERR'S + DC CL20'FUNCTION # INVALID' 1 + DC CL20'FILE NOT FOUND' 2 + DC CL20'PATH NOT FOUND' 3 + DC CL20'NO HANDLE AVAILABLE' 4 + DC CL20'ACCESS DENIED' 5 + DC CL20'HANDLE INVALID' 6 +PCCLOS EQU * + DC CL20'FILE NOT OPEN' 1 7 + DC CL20'FREEMAIN ERROR' 2 8 +PCREAD EQU * + DC CL20'FILE NOT OPEN' 1 9 + DC CL20'SHORT BLK/BAD RBA' 2 10 + DC CL20'ACCESS DENIED' 3 11 +PCWRIT EQU * 042 + DC CL20'FILE NOT OPEN' 1 12 + DC CL20'NOT OUTPUT FILE' 2 13 + DC CL20'SHORT BLK/BAD RBA' 3 14 + DC CL20'ZERO BLK/BAD RBA' 4 15 + DC CL20'DISK FULL' 5 16 + DC CL20'NOT SAME DISK' 17 X'11' RENAME ERROR (SAVE SPACE) +PCGETR EQU * + DC CL20'FILE NOT OPEN' 1 + DC CL20'RECFM INVALID' 2 + DC CL20'RCD LNG LT MIN' 3 + DC CL20'RCD LNG GT LRECL' 4 +PCPUTR EQU * + DC CL20'FILE NOT OPEN' 1 + DC CL20'RECFM INVALID' 2 + DC CL20'RCD LNG GT LRECL' 3 + DC CL20'RCD LNG LT MIN' 4 + DC CL20'RCD LNG GT MAX' 5 + DC CL20'NO EOR FOR TEXT' 6 +PCDELF EQU * +PCFIND EQU * +PCRENF EQU * + DC CL20'FILE NOT CLOSED' 7 + DC CL20'INVALID HANDLE' 8 + COPY CPY\IHADCB + COPY CPY\EQUREGS + COPY CPY\EQUSVCS + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/LIB/TIMER.ALC b/PC370_orig/Diskette/full/LIB/TIMER.ALC new file mode 100644 index 0000000..a39f268 --- /dev/null +++ b/PC370_orig/Diskette/full/LIB/TIMER.ALC @@ -0,0 +1,29 @@ + TITLE 'TIMER - TIME OF DAY SUBROUTINE' +* +* THIS SUBROUTINE RETURNS THE TIME OF DAY IN 100TH OF A SECOND +* IN R0 FOLLOWING CALL TO TIMER. +* +TIMER CSECT + USING *,R15 + SVC 18 R0 = HOURS, MINUTES, SECONDS, 100TH SEC + ST R0,WORK + SR R0,R0 + IC R0,WORK R0=HOURS + MH R0,=H'60' + SR R1,R1 + IC R1,WORK+1 + AR R0,R1 R0=60*HOURS+MINUTES + MH R0,=H'60' + IC R1,WORK+2 + AR R0,R1 R0=60*(60*HOURS+MINUTES)+SECONDS + MH R0,=H'100' + IC R1,WORK+3 + AR R0,R1 R0=100*(60*(60*HOURS+MINUTES)+SECONDS)+100TH SEC + BR R14 +R15 EQU 15 +R14 EQU 14 +R1 EQU 1 +R0 EQU 0 +WORK DC F'0' + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/API.MLC b/PC370_orig/Diskette/full/MAC/API.MLC new file mode 100644 index 0000000..b35839f --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/API.MLC @@ -0,0 +1,446 @@ + TITLE 'PC/370 APPLICATION PROGRAM INTERFACE SURBOUTINES' +* PGMID. API.MLC +* AUTHOR. DON HIGGINS. +* DATE. 11/03/87 +* REMARKS. THIS SET OF CALLABLE SUBROUTINES SUPPORTS THE +* IBM PC 3270 APPLICATION PROGRAM INTERFACE (API) TO +* ALLOW PROGRAM SIMULATION OF 3270 TRANSACTIONS. +* +* THE CURRENT ENTRY POINTS AND ARGUMENTS ARE AS FOLLOWS: +* +* ENTRY FUNCTION ARGUMENTS +* +* APISTART START SESSION NONE +* APIAID WRITE AID KEY R1 = AID SCAN CODE +* APIWRITE WRITE KEYBOARD R1 = KEYBOARD PARM LIST WITH LENGTH +* FOLLOWED BY ASCII+SHIFT HWORDS +* APIREAD READ SCREEN R1 = ADDRESS OF 24 X 80 SCREEN AREA +* APIWAIT WAIT A WHILE R1 = SECONDS TO WAIT +* +* MAINTENANCE. +* +* 11/04/87 DSH 1. DEBUG ON LIVE SYSTEM TO FIX REVERSED LIST SEG:OFF, +* MVC'S WITHOUT EXPLICIT LENGTH TO ARG. LISTS, ETC. +* 11/05/87 DSH 1. ADD ARG. LIST RETURN CODE CHECKS TO QID, AID, AND +* COPY FUNCTIONS; FIX CKD ARG MVC, FIX WAIT TIME LOGIC. +* REMOVE TEST HOOKS TO SKIP INT 7A TEST AND SVC NOP +* 2. CHECK IF KEYBOARD ALREADY CONNECTED. +* 3. ADD READ OPERATOR INFORMATION TO DETECT INHIBIT AND +* WAIT FOR AID FUNCTION TO COMPLETE +* 11/09/87 DSH 1. ADD MIDNIGHT CHECK TO ELIMINATE ENDLESS LOOP +* 12/29/87 DSH 1. ADD APITRAN TO ISSUE ASCII CICS TRANSACTION ID +* PASSED IN R1 WITH LENGTH IN R2. +* +API CSECT +* +* START API INTERFACE TO ALLOW FOLLOWING READ/WRITE CALLS +* + ENTRY APISTART +APISTART EQU * + STM R14,R12,12(R13) + BALR R12,0 + USING *,R12 + LA R11,PCB + USING IHAPCB,R11 +* +* VERIFY API INTERRUPT INSTALLED +* + LA R1,4*X'7A' ABSOLUTE ADDRESS OF PC INTERRUPT 7A + LA R2,4 LENGTH + MVCP ADDRAPI(R2),0,R1 COPY ADDRESS TO PC/370 ADDR SPACE + L R0,ADDRAPI + LTR R0,R0 +*** +* B APIOK ******* FORCE OK FOR TEST WITH SVC NOP'D +*** + BNZ APIOK + WTO 'API INTERRUPT 7A NOT INSTALLED' + SVC EXIT +APIOK EQU * + LM R0,R3,=A(BUFFER,2*1920,0,X'20000000') + MVCL R0,R2 +* +* GET GATE ID'S +* + LA R1,=C"SESSMGR " + BAL R14,GETID + MVC SESGID,PCDX SAVE SESSMGR GATE ID + LA R1,=C"KEYBOARD" + BAL R14,GETID + MVC KEYGID,PCDX SAVE KEYBOARD GATE ID + LA R1,=C"COPY " + BAL R14,GETID + MVC CPYGID,PCDX SAVE COPY GATE ID + LA R1,=C"OIAM " + BAL R14,GETID + MVC OIAGID,PCDX SAVE OIAM GATE ID +* +* GET SESSION ID +* + MVC PCAX,=X'0901' SET PARMS TO OBTAIN SESSION ID + MVC PCBX,=X'8020' + MVC PCCX,=X'0000' + MVC PCDX,SESGID + LA R1,QSIDPARM + SVC CVVASG + STCM 0,X'C',PCES + STCM 0,X'3',PCDI SET ES:DI TO QUERY SESSION ID PARM + LA R1,QSNARRAY + SVC CVVASG + STCM 0,X'8',QSIDNASG+1 + STCM 0,X'4',QSIDNASG + STCM 0,X'2',QSIDNAOF+1 SET SEG:OFFSET TO NAME ARRAY IN PARM + STCM 0,X'1',QSIDNAOF SET SEG:OFFSET TO NAME ARRAY IN PARM + SVC TRACE + DC C'QID' + BAL R10,APISVC GET SESSION ID + CLI QSIDPARM,0 CHECK API QID RETURN CODE (SEE 2-18) + BNE APIERR +* +* CONNECT TO KEYBOARD +* + MVC PCAX,=X'0901' SET PARMS TO CONNECT KEYBOARD + MVC PCBX,=X'8020' + MVC PCCX,=X'0000' + MVC PCDX,KEYGID + MVC KEYPARM(10),=XL10'00' CLEAR KEYPARM 2-28 + MVC KEYPARM+2(1),SESSID + LA R1,KEYPARM + SVC CVVASG + STCM 0,X'C',PCES + STCM 0,X'3',PCDI SET ES:DI TO CONNECT KEY PARM + SVC TRACE + DC C'CKD' + BAL R10,APISVC CONNECT KEYBOARD + CLI KEYPARM,4 IS KEYBOARD ALREADY CONNECTED + BE CKDOK + CLI KEYPARM,0 CHECK CKD RETURN CODE (SEE 2-28) + BNE APIERR +CKDOK EQU * + LM R14,R12,12(R13) + SR R15,R15 + BR R14 +* +* WRITE AID CODE IN R1 +* + ENTRY APIAID +APIAID EQU * + STM R14,R12,12(R13) + BALR R12,0 + USING *,R12 + LA R11,PCB + BAL R14,UNLOCK UNLOCK KEYBOARD + MVC PCAX,=X'0904' SET PARMS TO WRITE TO KEYBOARD + MVC PCBX,=X'8020' + MVC PCCX,=X'0000' + MVC PCDX,KEYGID + MVC KEYPARM(12),=XL12'00' CLEAR KEYPARM 2-37 + MVC KEYPARM+2(1),SESSID + MVI KEYPARM+6,X'20' SINGLE KEY OPTION + STC R1,KEYPARM+8 STORE AID CHARACTER + MVI KEYPARM+9,X'00' SET AID SHIFT CODE TO ZERO (A-2) + LA R1,KEYPARM + SVC CVVASG + STCM 0,X'C',PCES + STCM 0,X'3',PCDI SET ES:DI TO CONNECT KEY PARM + SVC TRACE + DC C'AID' + BAL R10,APISVC WRITE KEYBOARD + CLI KEYPARM,X'12' CHECK API AID RC FOR AID GENERATED (2-39) + BNE APIERR + LM R14,R12,12(R13) + SR R15,R15 + BR R14 +* +* WRITE ASCII TRANSACTION (R1=ADDRESS AND R2=LENGTH) +* + ENTRY APITRAN +APITRAN EQU * + STM R14,R12,12(R13) + BALR R12,0 + USING *,R12 + LA R0,1(R2) R0 = NUMBER OF CHAR +1 (FOR ENTER KEY) + MH R0,=H'2' + STCM R0,X'2',WTRAN+1 + STCM R0,X'1',WTRAN+0 + LA R3,WTRAN+2 +WMOVE EQU * + MVC 0(1,R3),0(R1) MOVE ASCII TRANACTION BYTE + MVI 1(R3),ASCICODE MOVE ASCII SHIFT BYTE + LA R1,1(R1) + LA R3,2(R3) + BCT R2,WMOVE + MVC 0(2,R3),=AL1(ENTERKEY,SCANCODE) + LA R1,WTRAN + B APIWRBE +* +* WRITE THE KEYBOARD STRING POINTED TO BY R1 (SEE 2-37) +* +* R1 MUST POINT TO 2 BYTE LENGTH CONTAINING 2*(NUMBER OF KEYS) FOLLOWED +* BY PAIRS OF ASCII CHARACTERS PLUS SHIFT CODES. +* + ENTRY APIWRITE +APIWRITE EQU * + STM R14,R12,12(R13) +APIWRBE EQU * BRANCH ENTRY FROM APITRAN + BALR R12,0 + USING *,R12 + LA R11,PCB + BAL R14,UNLOCK UNLOCK KEYBOARD + MVC PCAX,=X'0904' SET PARMS TO WRITE TO KEYBOARD + MVC PCBX,=X'8020' + MVC PCCX,=X'0000' + MVC PCDX,KEYGID + MVC KEYPARM(12),=XL12'00' CLEAR KEYPARM 2-37 + MVC KEYPARM+2(1),SESSID + MVI KEYPARM+6,X'30' MULTIPLE KEY OPTION + SVC CVVASG CONVERT R1 KEY LIST ADDR TO SEG:OFFSET + STCM 0,X'8',KEYPARM+10+1 + STCM 0,X'4',KEYPARM+10 + STCM 0,X'2',KEYPARM+8+1 STORE SEGlOFF TO KEY LIST PARM + STCM 0,X'1',KEYPARM+8 STORE SEGlOFF TO KEY LIST PARM + LA R1,KEYPARM + SVC CVVASG + STCM 0,X'C',PCES + STCM 0,X'3',PCDI SET ES:DI TO CONNECT KEY PARM + SVC TRACE + DC C'WKL' + BAL R10,APISVC WRITE KEYBOARD + CLI KEYPARM,X'12' AID KEY GENERATED + BE APIWROK + CLI KEYPARM,0 CHECK API WKL WRITE RETURN CODE + BNE APIERR +APIWROK EQU * + LM R14,R12,12(R13) + SR R15,R15 + BR R14 +* +* READ CURRENT 24 X 80 3270 SCREEN INTO AREA AT R1 +* + ENTRY APIREAD +APIREAD EQU * + STM R14,R12,12(R13) + BALR R12,0 + USING *,R12 + LA R11,PCB + BAL R14,UNLOCK + LR R9,R1 SAVE SCREEN ADDRESS + MVC PCAX,=X'0901' SET PARMS TO READ SCREEN + MVC PCBX,=X'8020' + MVC PCCX,=X'00FF' + MVC PCDX,CPYGID + MVC CPYPARM(26),=XL26'00' CLEAR COPY PARM 2-60 + MVC CPYPARM+2(1),SESSID + L R1,=A(BUFFER) + SVC CVVASG CONVERT BUFFER TO SEG:OFFSET + STCM 0,X'8',CPYPARM+18+1 + STCM 0,X'4',CPYPARM+18 + STCM 0,X'2',CPYPARM+16+1 STORE SEG:OFF TO BUFFER + STCM 0,X'1',CPYPARM+16 STORE SEG:OFF TO BUFFER + MVI CPYPARM+9,X'02' SET SOURCE TYPE + LA R0,1919 + STCM R0,2,CPYPARM+13 + STC R0,CPYPARM+12 SET SOURCE ENDING CHARACTER OFFSET + MVI CPYPARM+21,X'05' SET TARGET TYPE TO PC ASCII BUFFER + MVI CPYPARM+24,X'00' SET NO 3270 ATTRIBUTES (SEE 2-62) + LA R1,CPYPARM + SVC CVVASG + STCM 0,X'C',PCES + STCM 0,X'3',PCDI SET ES:DI TO CONNECT KEY PARM + SVC TRACE + DC C'CPY' + BAL R10,APISVC READ SCREEN + CLI CPYPARM,0 CHECK READ OK + BNE APIERR + L R2,=A(BUFFER) + LA R3,24 +ROWLOOP EQU * + LA R1,80 + LR R4,R9 SAVE STARTING ROW ADDRESS OF SCREEN +COLLOOP EQU * COPY ASCII TO SCREEN AREA FROM BUFFER + MVC 0(1,R9),0(R2) + LA R9,1(R9) + LA R2,2(R2) SKIP ATTIRBUTES + BCT R1,COLLOOP + TR 0(80,R4),TRTTAB CONVERT X'00' TO ASCII BLANKS + MVC 78(2,R4),=X'0D0A' FORCE CR AND LINE FEED ON EACH LINE + BCT R3,ROWLOOP + LM R14,R12,12(R13) + SR R15,R15 + BR R14 +* +* WAIT FOR (R1) SECONDS +* + ENTRY APIWAIT +APIWAIT EQU * + STM R14,R12,12(R13) + BALR R12,0 + USING *,R12 + LA R11,PCB + MH R1,=H'100' CONVERT TO 100TH SEC + ST R1,TARGET + LA R15,APISAVE CONNECT STD. SAVE AREA FOR CALL TO TIMER + ST R13,APISAVE+4 + ST R15,8(R13) + LR R13,R15 + CALL TIMER + ST R0,NOW TIME NOW + A R0,TARGET + ST R0,TARGET TIME AT END OF WAIT IN 100TH SEC. +WAITLOOP EQU * + CALL TIMER + CL R0,NOW CHECK IF TIME LESS DUE TO MIDNIGHT RESET + BL WAITEXIT YES, EXIT WAIT NOW + CL R0,TARGET + BL WAITLOOP +WAITEXIT EQU * + L R13,4(R13) + LM R14,R12,12(R13) + SR R15,R15 + BR R14 +* +* COMMON SUPPORT ROUTINES +* +* GETID - R1 = GATE NAME IN ASCII PADDED TO 8 CHARACTERS/ DX SET TO GATE ID +* +GETID EQU * + BALR R8,0 + USING *,R8 + ST R14,RTNSAV14 + SVC CVVASG CONVERT R1=VA TO R0=SEG:OFF + STCM 0,X'C',PCES + STCM 0,X'3',PCDI SET ES:DI TO NAME ID REQUEST PARM + MVC PCAX,=X'8100' + LA 1,PCB + SVC TRACE + DC C'GID' + BAL R10,APISVC ISSUE 7AH API INTERRUPT WITH PCB REGS VIA SVC + L R14,RTNSAV14 + BR R14 +* +* UNLOCK KEYBOARD WAIT LOOP +* +UNLOCK EQU * RETRY READ ON KEYBAORD INHIBIT +* +* CHECK IF INPUT INHIBITED AND REPEAT UNTIL CLEAR +* + BALR R8,0 + USING *,R8 + ST R14,RTNSAV14 + STM R1,R2,UNLKSAVE +UNLKLOOP EQU * + SVC TRACE + DC C'ULK' + MVC PCAX,=X'0902' SET PARMS TO OBTAIN OIAM INHIBIT STATUS + MVC PCBX,=X'8020' + MVC PCCX,=X'00FF' + MVC PCDX,OIAGID + LA R1,OIAMPARM + SVC CVVASG + STCM 0,X'C',PCES + STCM 0,X'3',PCDI SET ES:DI TO OIAM PARM + MVC OIAMPARM(9),=XL9'00' CLEAR PARM + MVC OIAMPARM+2(1),SESSID + LA R1,OIABUF + SVC CVVASG CONVERT BUFFER TO SEG:OFFSET + STCM 0,X'8',OIAMPARM+6+1 + STCM 0,X'4',OIAMPARM+6 + STCM 0,X'2',OIAMPARM+4+1 STORE SEG:OFF TO BUFFER + STCM 0,X'1',OIAMPARM+4 STORE SEG:OFF TO BUFFER + MVI OIAMPARM+8,X'08' SET REQUIRED PARM + SVC TRACE + DC C'OIA' + BAL R10,APISVC GET OIA INHIBIT STATUS + CLI OIAMPARM,0 CHECK API OIA RETURN CODE (SEE 2-74) + BNE APIERR + TM OIABUF,X'38' TEST FOR ANY CHECK + BNZ APIERR + TM OIABUF,X'07' TEST FOR INHIBIT + BNZ UNLKLOOP YES, RETRY + LM R1,R2,UNLKSAVE + L R14,RTNSAV14 EXIT WHEN KEYBOARD UNLOCKED + BR R14 +* +* API SVC +* +APISVC EQU * + BALR R7,0 + USING *,R7 + LR R1,R11 + SVC TRACE + DC C'API ' +*** + SVC INT86 +*** ******* NOP SVC FOR TEST ********** +* MVC PCCX,=X'1200' ******* FORCE RC FOR TEST ********** +*** + SR R15,R15 + IC R15,PCCX+1 SET R15 = RC + CLC PCCX,=X'1200' CHECK API ID AND SYSTEM RETURN CODE + BNE APIERR + BR R10 +* +* FORCE INTERACTIVE DEBUG ON API ERROR FOR NOW +* +APIERR EQU * + SVC TRACE + DC C'BUG ' + SVC EXIT +* +* COMMON DATA +* + LTORG +SESGID DC H'0' SESSMGR GATE ID +KEYGID DC H'0' KEYBOARD GATE ID +CPYGID DC H'0' COPY GATE ID +OIAGID DC H'0' OIAM GATE ID + DC C'*** OIAMPARM ***' +OIAMPARM DC XL9'00' + DC C'*** OIABUF ***' +OIABUF DC XL5'00' + DC C'*** QSIDPARM ***' +QSIDPARM DS 0X QUERY SESSION ID PARMLIST 2-12 + DC X'00' RETURN CODE + DC X'00' FUNCTION CODE + DC X'01' OPTION CODE + DC X'45' DATA CODE +QSIDNAOF DC AL2(0) OFFSET TO NAME ARRAY +QSIDNASG DC AL2(0) SEGMENT FOR NAME ARRAY + DC CL8"SESSION" SESSION LONG NAME + DC C'*** QSNARRAY ***' +QSNARRAY DS 0X QUERY SESSION ID NAME ARRAY 2-13 + DC X'0E' NAME ARRAY LENGTH (MANUAL SHOWS X'14' ?) + DC X'00' NUMBER OF MATCHING SESSIONS + DC X'00' SHORT NAME OF SESSION + DC X'00' TYPE OF SESSION +SESSID DC X'00' SESSION ID + DC X'00' RESERVED + DC CL8"SESSION" LONG NAME OF SESSION + DC C'*** KEYPARM ***' +KEYPARM DC XL12'00' KEYBOARD AID AND WRITE LIST PARM + DC C'*** CPYPARM ***' +CPYPARM DC XL26'00' SCREEN COPY PARM +ADDRAPI DC A(0) API INTERRUPT ADDRESS TESTED FOR NOT ZERO +TARGET DC F'0' TIME IN 100TH SECONDS AT END OF WAIT INTERVAL +NOW DC F'0' CURRENT TIME FOR MIDNIGHT CHECK +APISAVE DC 18F'0' +RTNSAV14 DC A(0) +UNLKSAVE DC 2F'0' +PCB DS 0F PC REGISTER AREA FOR MS-DOS INTERRUPTS VIA SVC 34 + DC C'PCVT' IDENTIFIER REQUIRED BY SVC 34 + DC X'007A' INTERRUPT FOR API COMMUNICATION WITH PC 3270 EMULATION + DC H'0' FLAG STATUS AFTER INTERRUPT + DC 4H'0' AX-DX + DC 4H'0' DS,SI,ES,DI + DC C'*** BUFFER ***' +TRTTAB DC X'20',255AL1(*-TRTTAB) CVT X'00' TO ASCII BLANK +ASCICODE EQU X'40' ASCII SHIFT CODE (SEE A-2) +SCANCODE EQU X'00' SCAN SHIFT CODE +ENTERKEY EQU X'58' SCANCODE ENTER KEY +WTRAN DS XL(2*1920+2+2) WORK AREA FOR ASCII TRANSACTION WITH SCANCODES +BUFFER DS XL(2*1920) WORK AREA FOR PC ASCII AND ATTRIBUTES COPY OF SCREEN + COPY CPY\EQUREGS + COPY CPY\EQUSVCS + COPY CPY\IHAPCB + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/BEGIN.MAC b/PC370_orig/Diskette/full/MAC/BEGIN.MAC new file mode 100644 index 0000000..a251e4b --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/BEGIN.MAC @@ -0,0 +1,27 @@ +BEGIN MACRO SAVE=YES,BASES=1 +&LABEL$$ CSECT + USING *,15 + AIF /&LABEL$$=/ .NOIDENT + B KZHQX&N$ + DC AL1(11) + DC CL11'&LABEL$$' +.NOIDENT AIF &SAVE=NO.NOSAVE +HZQKX&N$ DC 18F'0' +KZHQX&N$ STM 14,12,12(13) + ST 13,HZQKX&N$+4 + LR 14,13 + LA 13,HZQKX&N$ + ST 13,8(0,14) + DROP 15 + USING HZQKX&N$,13 + AIF &BASES<2.END + LA 12,4094(0,13) + USING HZQKX&N$+4094,12 + AGO .END +.NOSAVE ANOP +KZHQX&N$ STM 14,12,12(13) + DROP 15 + BALR 12,0 + USING *,12 +.END ANOP + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/CALL.MAC b/PC370_orig/Diskette/full/MAC/CALL.MAC new file mode 100644 index 0000000..637d39d --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/CALL.MAC @@ -0,0 +1,6 @@ +CALL MACRO PGM? + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO L 15,=V(&1) + BALR 14,15 + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/CLOSE.MAC b/PC370_orig/Diskette/full/MAC/CLOSE.MAC new file mode 100644 index 0000000..2a44b89 --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/CLOSE.MAC @@ -0,0 +1,10 @@ +CLOSE MACRO DCB? + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG + LA 2,&1 + AGO .SVC +.REG AIF &1=(2).SVC + LR 2,&1 +.SVC SVC 2 + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/DCB.MAC b/PC370_orig/Diskette/full/MAC/DCB.MAC new file mode 100644 index 0000000..34bae7f --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/DCB.MAC @@ -0,0 +1,36 @@ +DCB MACRO DSORG=S,RECFM=F,MACRF=G,LRECL=80,BLKSIZE=0, + EODAD=0,SYNAD=&EODAD,RECORD=0 +&LABEL$$ DS 0F,0CL86 + DC C'ADCB' + AIF &DDNAME=(.DDX + DC A(DCBDD&N$) + AGO .DDZ +.DDX DC A(&DDNAME) +.DDZ AIF &MACRF>P.BDAM + DC X'FFFF',X'00' + DC CL1'&DSORG',CL1'&MACRF',CL1'&RECFM' + DC X'0A1A' + DC H'&LRECL',H'&BLKSIZE' + DC A(&EODAD,&SYNAD,&RECORD) + DC 54X'00' + AGO .DDN +.BDAM AIF '&RECORD'='0'.NOREC + DC X'FFFF',X'40' + AGO .DSORG +.NOREC DC X'FFFF',X'00' +.DSORG DC CL1'&DSORG',CL1'&MACRF',CL1'&RECFM' + DC X'0A1A' + AIF '&BLKSIZE'='0'.NOBLK + DC H'&BLKSIZE',H'&BLKSIZE' + AGO .ADRS +.NOBLK DC H'&LRECL',H'&LRECL' +.ADRS DC A(&EODAD,&SYNAD,0,&RECORD) + DC 50X'00' +.DDN AIF &DDNAME='.LIT + AIF &DDNAME=(.END +DCBDD&N$ DC C'&DDNAME',X'00' + AGO .END +.LIT ANOP +DCBDD&N$ DC C&DDNAME,X'00' +.END ANOP + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/DEMOMAC1.MLC b/PC370_orig/Diskette/full/MAC/DEMOMAC1.MLC new file mode 100644 index 0000000..1abe603 --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/DEMOMAC1.MLC @@ -0,0 +1,5 @@ +DEMOMAC1 BEGIN + WTO 'HELLO FROM THE PC/370 WORLD OF MACROS' + RETURN + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/DEMOMAC2.DAT b/PC370_orig/Diskette/full/MAC/DEMOMAC2.DAT new file mode 100644 index 0000000..339578e --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/DEMOMAC2.DAT @@ -0,0 +1,17 @@ +DEMOMAC2 BEGIN + WTO 'DEMOMAC2 COPY DEMOMAC2.DAT TO DEMOMAC2.TST' + OPEN SYSUT1 + OPEN SYSUT2 +LOOP GET SYSUT1,RECORD + PUT SYSUT2,RECORD + B LOOP +EOJ CLOSE SYSUT1 + CLOSE SYSUT2 + RETURN +RECORD DS XL256 +SYSUT1 DCB LRECL=1,RECFM=T,MACRF=G,EODAD=EOJ, + DDNAME='DEMOMAC2.DAT' +SYSUT2 DCB LRECL=1,RECFM=T,MACRF=P, + DDNAME='DEMOMAC2.TST' + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/DEMOMAC2.MLC b/PC370_orig/Diskette/full/MAC/DEMOMAC2.MLC new file mode 100644 index 0000000..34af2d2 --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/DEMOMAC2.MLC @@ -0,0 +1,17 @@ +DEMOMAC2 BEGIN + WTO 'DEMOMAC2 COPY DEMOMAC2.DAT TO DEMOMAC2.TST' + OPEN SYSUT1 + OPEN SYSUT2 +LOOP GET SYSUT1,RECORD + PUT SYSUT2,RECORD + B LOOP +EOJ CLOSE SYSUT1 + CLOSE SYSUT2 + RETURN +RECORD DS XL256 +SYSUT1 DCB LRECL=256,RECFM=T,MACRF=G,EODAD=EOJ, + DDNAME='DEMOMAC2.DAT' +SYSUT2 DCB LRECL=256,RECFM=T,MACRF=P, + DDNAME='DEMOMAC2.TST' + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/DISPLAY.MAC b/PC370_orig/Diskette/full/MAC/DISPLAY.MAC new file mode 100644 index 0000000..74a3cf3 --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/DISPLAY.MAC @@ -0,0 +1,8 @@ +DISPLAY MACRO +&LABEL$$ LA 15,&1 +LOOP&N$ IC 2,0(15) + SVC 202 + CLI 0(15),X'0A' + LA 15,1(0,15) + BNE LOOP&N$ + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/FREEMAIN.MAC b/PC370_orig/Diskette/full/MAC/FREEMAIN.MAC new file mode 100644 index 0000000..afd6c41 --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/FREEMAIN.MAC @@ -0,0 +1,28 @@ +FREEMAIN MACRO RU,LV=(1),A=(2) + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=V.TYPEV + AIF &LV=(.REG + AIF &LV>4095.L + LA 1,&LV + AGO .A +.L L 1,=F'&LV' + AGO .A +.REG AIF &LV=(1).A + LR 1,&LV +.A AIF &A=(.AREG + L 2,&A + AGO .SVC +.AREG AIF &A=(2).SVC + LR 2,&A + AGO .SVC +.TYPEV L 1,&A+4 + L 2,&A +.SVC SVC 11 + LTR 0,0 + BZ *+16 + LA 2,=C'ABEND 90A$' + SVC 209 + SVC 9 + DC C'BUG ' + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/GET.MAC b/PC370_orig/Diskette/full/MAC/GET.MAC new file mode 100644 index 0000000..5c2adc6 --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/GET.MAC @@ -0,0 +1,18 @@ +GET MACRO DCB?,0 + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG + LA 2,&1 + AGO .AREA +.REG AIF &1=(2).AREA + LR 2,&1 +.AREA AIF &2=(.REG2 + LA 1,&2 + AGO .SVC +.REG2 AIF &2=(1).SVC + LR 1,&2 +.SVC SVC 5 + AIF '&2'#'0'.END + L 1,28(0,2) +.END ANOP + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/GETMAIN.MAC b/PC370_orig/Diskette/full/MAC/GETMAIN.MAC new file mode 100644 index 0000000..c3e425d --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/GETMAIN.MAC @@ -0,0 +1,40 @@ +GETMAIN MACRO RU,LV=(1),A=? + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=V.TYPEV + AIF &LV=(.REG + AIF &LV>4095.L + LA 1,&LV + AGO .SVC +.L L 1,=F'&LV' + AGO .SVC +.REG AIF &LV=(1).SVC + LR 1,&LV +.SVC SVC 10 + LTR 0,0 + BZ *+16 + LA 2,=C'ABEND 80A$' + SVC 209 + SVC 9 + DC C'BUG ' + AIF &1=R.STORE + AIF &A=?.STORE + ST 2,&A + AGO .END +.STORE LR 1,2 + AGO .END +.TYPEV L 1,&LA+4 + SVC 10 + LTR 0,0 + BZ *+26 + C 1,&LA + BNL *+16 + LA 2,=C'ABEND 80A$' + SVC 209 + SVC 9 + DC C'BUG ' + SVC 10 + ST 1,&A+4 + ST 2,&A +.END ANOP + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/LINK.MAC b/PC370_orig/Diskette/full/MAC/LINK.MAC new file mode 100644 index 0000000..190eb3e --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/LINK.MAC @@ -0,0 +1,28 @@ +LINK MACRO EP=? + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &EP=?.EPLOC + AIF &EP='.EPLIT + LA 1,=C'&EP..COM' + AGO .SVC +.EPLIT LA 1,=C&EP + AGO .SVC +.EPLOC AIF &EPLOC=(.EPREG + LA 1,&EPLOC + AGO .SVC +.EPREG AIF &EPLOC=(1).SVC + LR 1,&EPLOC +.SVC SVC 25 + LTR 15,15 + BZ *+34 + SVC 9 + DC C'BUG MODULE NOT FOUND' + DC 8X'00' + STM 0,1,*-8 + LR 15,0 + LA 15,X'0210'(0,15) + BALR 14,15 + L 2,*-20 + L 1,*-20 + SVC 11 + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/LOAD.MAC b/PC370_orig/Diskette/full/MAC/LOAD.MAC new file mode 100644 index 0000000..5ffc843 --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/LOAD.MAC @@ -0,0 +1,22 @@ +LOAD MACRO EP=? + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &EP=?.EPLOC + AIF &EP='.EPLIT + LA 1,=C'&EP..COM' + AGO .SVC +.EPLIT LA 1,=C&EP + AGO .SVC +.EPLOC AIF &EPLOC=(.EPREG + LA 1,&EPLOC + AGO .SVC +.EPREG AIF &EPLOC=(1).SVC + LR 1,&EPLOC +.SVC SVC 25 + LTR 15,15 + BZ *+26 + SVC 9 + DC C'BUG MODULE NOT FOUND' + LR 15,0 + LA 0,X'0210'(0,15) + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/OPEN.MAC b/PC370_orig/Diskette/full/MAC/OPEN.MAC new file mode 100644 index 0000000..f7733e0 --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/OPEN.MAC @@ -0,0 +1,10 @@ +OPEN MACRO DCB? + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG + LA 2,&1 + AGO .SVC +.REG AIF &1=(2).SVC + LR 2,&1 +.SVC SVC 1 + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/PUT.MAC b/PC370_orig/Diskette/full/MAC/PUT.MAC new file mode 100644 index 0000000..eac1d12 --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/PUT.MAC @@ -0,0 +1,15 @@ +PUT MACRO DCB?,0 + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG + LA 2,&1 + AGO .AREA +.REG AIF &1=(2).AREA + LR 2,&1 +.AREA AIF &2=(.REG2 + LA 1,&2 + AGO .SVC +.REG2 AIF &2=(1).SVC + LR 1,&2 +.SVC SVC 6 + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/MAC/READ.MAC b/PC370_orig/Diskette/full/MAC/READ.MAC new file mode 100644 index 0000000..1c093fc --- /dev/null +++ b/PC370_orig/Diskette/full/MAC/READ.MAC @@ -0,0 +1,36 @@ +READ MACRO DCB?,0,RBN?,RBA=?,RBN=&3 + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG1 + LA 2,&1 + AGO .RBA +.REG1 AIF &1=(2).RBA + LR 2,&1 +.RBA AIF &RBA=?.RBN + AIF &RBA=(.REG2 + AIF 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 literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/R42/E370P42.EXE b/PC370_orig/Diskette/full/R42/E370P42.EXE new file mode 100644 index 0000000000000000000000000000000000000000..6de1c989bb7d18723ac8832840f4c76303096851 GIT binary patch literal 40514 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 SzH)A;bOdkKAbq881OEpq?hShY literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/R42/E370R42.EXE b/PC370_orig/Diskette/full/R42/E370R42.EXE new file mode 100644 index 0000000000000000000000000000000000000000..66be23717889a8879800e7912c1a75bb13c55594 GIT binary patch literal 50546 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 ZA2s>Eyw0z*@(z2c^#7L;_%G1i{{rvqxUc{K literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/R42/L370.LIB b/PC370_orig/Diskette/full/R42/L370.LIB new file mode 100644 index 0000000000000000000000000000000000000000..d745a9444a3301e066469efc78db2003828bfe4c GIT binary patch literal 3584 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

_JX=P{5NwK{4`SU(X;6(q0S?Ny1=M$ zmDcRD)WbGDaX5HZdn-I2(vY?vT5ZVg5J{sXeaFw66=Z8qiVO4MjtyqkVBQBMft7m7 zRA(%i=#+$n;3-{9nGnW($(y?q?^0hWUU6QK)2-sf5T=)4Lf%HqTfNA)xx;J?bg0W( zvG!W#F0ztjOhJ>(vU`J(WFlP7qdLii_gJ=+=l--8_($GrR3W>Aw?Vhi424k>k|A$L zFqGUR)kL_kfXN$9?${KGlm@M2-RCtjGk0qaK%8OicDQa7T}tkwE^QDZp2f?8V)86e zOBTb|nV^t-SFO)DW#%nZ<*Ki#^`k7~gr_s0uT|$%OxP&%3nsj4x1|E_C~|BH^FiyK z8W?Bp)WA5S{B~=C4to3GcPyLxBJ^Y`h1u z^*s9&6@gVwvUo0AZ?Q`_JD{cN$6dVlC4b1Q3WoF}-nG@MT|Spj=Q^2r7@S=$U!yOx zGid3r`+cTBI#`#VSd`fVn_8?t`sZtzotf>>I0}y6KWc9BR^YVb4$HbSTj-2Z4sD%@ zH>qp>PID!^yf1mv9bo~x67=`6|6BLl4V_Wys{R@60G=!ZvxfW8?zK^2OGEl+Hg8(f z#nY@)-@V_THN&Ddaku-%Tj>63)Mmro?ilwF;V z>6F34LOMftZeT>mNwKMU1l^PN$#J;9P;p1d3=lVr&ScK~rA|1ff~K1%-EQu&;VW5Y zF=a4|&q~VR-$R-076aVb39EE_rh%-|?c^uju0zLSL8eX2{p-nz;FK~}w#;H>_-kuF z+Z&6I)*p>)ZEa$*Ur8D2&n?T++XfPs4c#zv@w{T$%KZfUuMp5|kOF2B21JbF6{92p zNQqH}NClFplD7ePapJ{^M_!^=2qRZf7>Lm%VM)StC<4Gjhav!B%w73|BE&!O6t*B5|3MHgyU?|!E0Yp>$p5|vzB$tyRoZRJKx6!9N`+{8#FMk=usEMhsrNI6bA@mNw7<2umz)$0Ib;9VI& zssm&@pdcD0AZk=?jUs836=fl6I+3&w&CJ~tDJfCQ8>!1$9w=#uNm5Qy22@Bfc>`Vn zOaeIo>?nCdCxDR28`wVx01B={DAFbgq(llPQVm6eqy|Z;ngEwY(d<`Lk+vr0C}fVd zkfY3VlzC2z^%Kwlz|2vqIm#+$BF!9m$)!jyMS3aHOOalVq31~BU zYEqt}5lf_v1HdFt$z0b>RlJ@X&@WS6#W5I&W0d$9=@n>N3;&M~o%6XD!nZV4fWBhh z`InVa-| z=+67_Y}VP(@PkB;DF4wt2M=@qJ&H}8Ih(T&`3w_3JkG+uMQ479#V9-))%aS?bUc;9 z2kTV4KZXyk^c_r03~2GT{+JSFtn%R06w6)Cd#YFqW$oO7_YKC%_k7hoO#6+KUvtK< z?faeof#28f&9@ZaM4d11-?E+LG_is@~1iK%NQ- Kl^HH+((`ZP8;>^t literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/R42/PRINTDOC.COM b/PC370_orig/Diskette/full/R42/PRINTDOC.COM new file mode 100644 index 0000000000000000000000000000000000000000..c16e297fe0eed9a3e763714106e9bbeccdf4d3c5 GIT binary patch literal 1664 zcmd^6Uuaup6hB|?O=E6by%i~8lXxQ|vOlb$o%2B$_uAfuZEbHz*R2|H2KAwRigUx4 zfvtj)C5-DJK8YxOoP#2vq^U^S?6$@kxqoP4EcmDCLqdFrimbYk>$$h-oPF?N_~!TV zopZkP|NKsU2{LfH`0|DR42%?g05F4Z&vAf*b$DnXq;1GflLjqk-yvyt(U%^XXNx{@ z;F&=9SpQLRQrr{W{)Pto(1jZnN2T!doOD(U506Oax|suQ!{3GC-qQcZ3=i^UuJ?k|~@<#;b(bwcXN z)@nx|fvdUnsU_1a`r=+MslVB}7r0-Rvme;lMqE}(s(|;Wj`0i&x02u93!A+I9Jc;? zOP*~2Yb8maD*A9YsC=;{Tb^@|kvWbmab%GOqe128ShB>D>`AiP;Uc~|)!Mr&&kq8p zA7M14UW*#J$sPcq2dEIs(F_q-BP4L}2-7Wa+Ru!}6rKY^5_8(+N6lbNofdyoFWA!Y zKUpKHAO54qh#Id1RrMutUOORxZux!~Y^ukt+>C>P6sJqU8TIXy8+lC43cMalF+89y zo8ov7hJc{_ZU?_k^I(Kf{=$|ff-{=OmR>;V$^E9Qg}zQJCdgy#Q|;K8x*`OO=^edB zTYB`TCjwe6IIqz<1OPn;fY_Cq>UV96=NcEV^}(h_+ub*TU=1)9tQmH>J?A08wxN7p zKfG;Ceo&{3&yClZ2c&GLGU*Oi)W&6n0UONJ8RBZU&LR4S!P zr0dAz<$UzF+s&O&eydtA3e_54`So;@Z~h+rWjnfkJF;8sf6J?ds-Y;FlCN%-m-7mA zIq~w`e|)-`^75L(*X#A=oB0(4`#sZy&9y4C4@?ff)D?U(04+V}BL2PM2e1DZ>YncO literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/R42/READ.ME2 b/PC370_orig/Diskette/full/R42/READ.ME2 new file mode 100644 index 0000000..adb69d3 --- /dev/null +++ b/PC370_orig/Diskette/full/R42/READ.ME2 @@ -0,0 +1,11 @@ +PC/370 Users: + +This version distributed on one 3.5 DS/DD diskette instead of +three 5.25 DS/DD diskettes has E370P42.EXE removed along with +SEE.COM and PRINTDOC.COM. SEE.COM and PRINTDOC.COM can be +created by running BAT\BLDUTIL.BAT after running INSTALL.BAT. + +Don Higgins 11/28/88 + + + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/R42/SEE.COM b/PC370_orig/Diskette/full/R42/SEE.COM new file mode 100644 index 0000000000000000000000000000000000000000..ae4aabbf38824d3edb2227ff985eb98c347ce28d GIT binary patch literal 16768 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 literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/R42/T370.COM b/PC370_orig/Diskette/full/R42/T370.COM new file mode 100644 index 0000000000000000000000000000000000000000..88b3e12548e1e764a441360003fedebe3fe17049 GIT binary patch literal 4864 zcmds3eQZx@`axg1rv4dxBiwLjphpEuX8USGZCDgCpV zg^ks9-0JGh8>?nc)tWc0tuk+{o1U%Tz?o}nt7~zl`70}#)}j?mi!VCiG^Q>$yf_Z9Wn8E~}r&v!Mc$A9W@v=l98-e;O|ERUX_RCkviCD%FU}3w<8U+=0Y+z-vDS$|{&EJ6xVqN$PELkR%_Sww*sBv$ zhDL{@=a^huo0hs%6a4)(e^WOLq1MY&W(WTP976xagyY~iu+&M{y08iN1}C>pIH=~y z#mq^L>E)R78i^@4 z?hqRLw+nXA2#)^k=27=UoUJpDdR81?L^@Xq0K!6GgmPdUD1Wuk!n;b%qXEv6c9j}d zHkScIZHjWZ55FC`WU;%NFwWchLDV}(HRjfxwl6L(F0Zd771X!(p1_4)*Q?qY(u8O{ z0(Xg%rTr*HP`aR3p?6L{sE7K60Bi90S|L(miMV$OCQut#Ls|Pa4lH(etMCjkt65jt zu&9c4@5OG%en>EdE20_>!cE9sq1>fn!E|Yl%>4;{FVPPQ9I?|;;SrDSLnhK;X~Y;5 z9iyOgH^}Iygy`Ha$>$u>kA&&Yqs(BEh1yBYe9CGBO~Rf^Ac4W<5b?Rhfw7@-nK zTOCMMxMxm_-S;t8@zrUR-U8)J(vhCQqLtHJR7*}sOQULXT;kW3Ngr7_@1eqS9M=eC zprg_2S#mskGis1uU50BcIU#VM(-+A2?cQTbzP`l@M&E0Q7w?`lkb}Z0<2>4@4(^IF z!Iz|9R2$q)PB}!d(ry=OQVlfEX||hPohldj3`C5 zp^M~1J&;rKTwds$7((ftjP!vRLcI%8zrcn%(9dytfB#K%6-Lhw?u#_ein)94m{E)+ zd2svyM;gPG8w2y&CH2k7j+x4i585*rw84Y3qJ1=Xw3!*^M7@w3HFHMJV%(C5PWE&b zt6Ykwf>!%kdO8d&o{tJENWnJ%RCTQM-8WdsFJe|fa4FXO8{{-1T0C8I|9dkK{aln3 zznMMwp&|#DQg7?_!Mi?lVfpCE+beeVJV&_8m*J)p&!Ow0q^RM!xnzG>--8`M=;OUc{AsmPWDDVA2mF zzhBn6phqnLD8N3WrSJUx?!8Yw{p|DmZjaaJ56oEn9|-*aW6RW0^8&z(z7s&lK5ECK z2C2KBrTO?sio}PL{C<9f=WSDalr7xUgv=E9aMK^=&Z+#vJ{~6&{VdH|KRQh-&814j zd{63&+E4lOCv*J$7x1NSrIdWBuP67%kI}}{Do(ejzHXZq9*a}FP1P{h_6s=8V9Qo8 z*IN$%sE!qHw0@7*w$4`HiV>|(*m&iE68p&$I{KpKv*Qm&V?)F7k;{p!!({6EjhnY_ zk16u>%c{tD<({Zncs0_g(mhsm}$?@uJ+2^%kK&%QH{D&zY;^~RIo8}1nK@v+n= z4Y5>!Px!s@gpW_%9`W1gEA3AxUXwmxv%1OKL!NkykNJniR6iexC(!zy4Yb+ySSpRa z?#}Q9y6kFz#QglQd&qCYPZ1-3pSsa(F`10es*odofxt~!XI;|$PGV#=TqK8Qv6L! cKgkcrQ@lGCi{JG7crq*p!^>pTz<-MWPjFPq?*IS* literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/full/READ.ME b/PC370_orig/Diskette/full/READ.ME new file mode 100644 index 0000000..15862a4 --- /dev/null +++ b/PC370_orig/Diskette/full/READ.ME @@ -0,0 +1,170 @@ + +READ.ME PC/370 Release 4.2 Installation Guide + +Copyright 1988 Donald S. Higgins + + Don Higgins + 6365 - 32 Avenue North + St. Petersburg, Florida 33710 + January 5, 1988 + +PC/370 users: + +Welcome to release 4.2 of the PC/370 cross assembler and emulator +package! You are encouraged to copy and share this package with other +users on the condition that the package is not distributed in modified +form, and that no fee is charged. If you find the PC/370 product +useful, send 45 dollars to the address above to register as a user and +to support continued shareware maintenance and enhancements. +Registered users will receive notices of future releases. The product +is distributed on an as is basis with no implied warranties. However, +requests for fixes and enhancements from registered users are given +priority for inclusion in future releases. Currently planned future +enhancements are as follows: + + 1. Assembler H support with integrated macros. + + 2. Expanded memory support using protected mode on 80286/80386 + running under native OS/2. + + 3. Improved 370 emulation performance using additional math co- + processor assists for packed decimal and native 80386 32 bit + instructions. (Note the current speed of the PC/370 emulator on + a 16 MHZ 80386 is in the range of 25,000 IBM 370 instructions + per second or 0.025 MIP's.) + +The major features included since PC/370 release 3.2 are as follows: + + 1. Micro Focus COBOL/2 Extended Memory (XM) protected mode calls to + PC/370 assembler subroutines are supported on 80286 and 80386 + systems. XM supports up to 16MB of real memory usable by COBOL + and PC/370 assembler subroutines. See USER.DOC for more + information. This facility requires use of new resident option + of emulator, and option B of linker to create BIN type module. + + 2. The following PC/370 supervisor calls have been added: + + a. Svc 36 reloads program into specified area of memory. + b. Svc 37 defines user exits for supervisor calls. + + 3. The SPIE svc 14 has been enhanced to create program + interruption element control block and to pass sufficient + information to support transparent program check recovery. + + 4. At entry to main programs, register 1 now points to standard + MVS parameter list address, which in turn points to half + word parm length followed by EBCDIC parameters passed from + MS-DOS command line. + + 5. An optional hardware assist for the CVB and CVD instructions + is included which requires the 80x87 math co-processor and + can speed up the instructions by up to a factor of 4 for + large numbers. The floating point option P controls whether + the assist is activated when 80x87 is installed. + + 6. The L370 linkage editor now supports option U to allow + unresolved references. + + 7. The emulator debug facility now has option to restore all + trace points at any point during execution by repeated use + of K command. An optional version of emulator is also included + with the name E370P42.EXE which does not include interactive + debug or ASSIST facilities. This version saves space, but + should only be used with fully tested production programs. + To use this version, make it resident by executing it. + + 8. The PC/370 emulator E370R42.EXE can now be made resident by + simply executing it directly. This eliminates the time required + to load the emulator for each execution of a PC/370 assembler + program. In addition, a common system queue area (SQA) memory + can be allocated in the resident emulator address space to be + shared by assembler subroutines called from COBOL. The size of + the SQA is specified in hex paragraphs as the only parm. The + default is 10 hex or 256 byte SQA. Assembler subroutines called + from COBOL can now perform file I/O and dynamic memory + management using the common SQA memory. + + 9. The 370 cross assembler A370.EXE now supports the COPY statement + to include commonly used DSECT's, EQU's, or code. Common copy + files such as IHADCB.CPY for a DSECT of a DCB, EQUREGS.CPY for + R0-R15, and EQUSVCS.CPY for equates for all of the PC/370 + supervisor calls are included. + + 10. The following fixes have been included: + + a. CVB error when input field contained negative 0. + b. SRP error when second field contained more than 6 bit #. + c. Program check on executed instruction did not store + correct address of next instruction following execute. + d. EBCDIC to ASCII translate table did not correctly handle > { + and [ characters. + e. Text file with LRECL=1 caused incorrect record move. + f. Operand of ORG statement can now be CSECT or DSECT as + well as relative symbol within CSECT or DSECT. + g. File open svc 1 now takes error exit for file not found and + reg 0 and 1 now contain error code at entry to error exit + (See LIB\SYNERROR.ALC for subroutine to decode errors). + +For brief description of changes in previous releases since 1981, +see DOC\HISTORY.DOC. Thanks to Jacques Roy, a macro preprocessor +M370.COM (written in 370 assembler) has been included since PC/370 +release 3.2 along with a set of MVS compatible macros including DCB, +OPEN, CLOSE, GET, PUT, READ, WRITE, WTO, WTOR, LINK, LOAD, GETMAIN, +etc. If you use the macro preprocessor, register as a macro user and +support future enhancements, by sending a registration fee of $20. to: + + Jacques Roy + XL Software Inc. + 1000 St-Jean Baptiste #120 + Quebec, Canada G2E-5G5 + +To install the PC/370 system on a hard disk and run the demo programs, +copy the file BAT\INSTALL.BAT to separate hard disk directory and +execute it. INSTALL requires two parameters, the first is the drive +containing the distributed floppy disk and the second is the hard disk +drive. Command C>INSTALL B C will install the system on hard disk C +reading files from drive B with prompts for each volume if more than +one. The install file defines a root directory \R42 which contains +all of the executable programs and system files required by the PC/370 +facilities. The following sub-directories are also created: + + 1. \BAT - contains batch files which can be executed without + any parameters after setting current directory to + R42. + + 2. \LIB - contains ALC source code for PC/370 system + subroutines. + + 3. \CPY - contains CPY source code for ALC source COPY + includes. + + 4. \MAC - contains MAC and MLC source code for macro pre- + processor. + + 5. \CBL - contains CBL Micro Focus VS COBOL demo program source + code along with demo PC/370 assembler subroutine + source code. + + 6. \DOC - contains machine readable PC/370 documentation. Read + DOC\INTRO.DOC for PC/370 overview and more + information on the other component of the package. + + 7. \DEMO - contains demo program ALC source code. + + 8. \UTIL - contains utility program ALC source code. + + +Hope you enjoy PC/370! Feedback on your usage and/or +evaluation of the product is highly encouraged. + +Sincerely, + + + +Don Higgins, CCP, CDP + +___________ + +IBM - trademark of International Business Machines +COBOL/2, XM - trademarks of Micro Focus Inc. +MS-DOS - trademark of Microsoft \ No newline at end of file diff --git a/PC370_orig/Diskette/full/UTIL/DEMOSEE1.KSF b/PC370_orig/Diskette/full/UTIL/DEMOSEE1.KSF new file mode 100644 index 0000000..666177c --- /dev/null +++ b/PC370_orig/Diskette/full/UTIL/DEMOSEE1.KSF @@ -0,0 +1 @@ +hELLOHello! This is a test of all the SEE.COM sceenreen editor and emulatorÒ keys. First help menu F1 now.» ÐÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍNow F2 for the keys to be tested.¼ ÐÐÍ We will test ESC last to save this emulaottion session for repeated tests. We woill not test ctl-break or ctl-q K Q susince they both exit without svave. They do work so be careful not to use them. Now lets add lines aA - Z WITH with texleterter. aA B C DE E F G H I J K L M N O P Q R S T U V W X Y ZÉÐÐÐÐÐÐÐÍÍnOW now letes t's add A in column 80 and test ending column operations AÈÐÍÍLets positon on A and use ctlF3/fF4 to jump back and forthȽ¾½¾ÐËËËËËËËËËËËËËËËËËËËËËËË. OK, lets useÒ ÍÍctl-Q S?D f/dD for same functionsÈÈÐÐËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËË. Now lets page-up and down with bothnative keys ÍÍand with ctl-R or Cctl-CÉÑÍÍÈÈÈÐÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍË. OK, lets use ctl-S/D/E/X arrow keysÍË. OK, now ÍÍlets go homea and end via native and ctl-Q R/C.ÇÏrÈÈÈÈÈÈÈÈÈÈÐÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍOK,lets inserttoggle insert ÍÍvia native and ctl-U. KÒËOËÓÒoËOÓÍ, lets now delete char via native and ctl-G. ÍÍOKËÓKKËËÍ, now lets delteete lnine H via native and ctl-Y.ÐÈshft-F6 and ctl-Y.ÐÙÒ H HÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍOK lets turn on auto ÒÙÍÍtab and go to line I tabbed ËËnow. ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËË via ctl-Q I.Í OK, turn off tabbling and use manual tab to same col. on J. Ok, use ctl-nN enter and tab to next line. OK, lets go nhome and search to line L.ÇÁlL n OK, now replace KEY on line M from home.ÇÁKEY gREP ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍLÍÍÍÍÍÍÍÍÍÍÍÍLine L that is. OK, delete N-P bolockпÐÐÈÐÓÐÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ. \OK, copy X-Z where O-P was½ÐÐÐÐÐÐпÐпÈÈÈÈÈÈÈÈÀÐо. OK, thats's it for now.now replace KEY on line M from home.ÇÁKEY gREP ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍLÍÍÍÍÍÍÍÍÍÍÍÍLine L th \ No newline at end of file diff --git a/PC370_orig/Diskette/full/UTIL/DEMOSEE2.KSF b/PC370_orig/Diskette/full/UTIL/DEMOSEE2.KSF new file mode 100644 index 0000000..c9e9a58 --- /dev/null +++ b/PC370_orig/Diskette/full/UTIL/DEMOSEE2.KSF @@ -0,0 +1 @@ +ÒHello, this is a demonstration of the SEE.COM grpahics capability. Firtst lets create a blank page in insert mode since graphics turns off insert. ÒÇÐÐÍÍÍÍÍÍÍÍOK, now lets draw a red double line box. ÐÍÃÍÐÐÐ ÄÍÍÍÍÍÍÍÍÍÐÐÐÐÐËËËËËËËËËÈÈÈÈÈÍÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËËËËËNow lets make a yellow single lnine box.ÍÍÃÍÐÐÐÈÈÈÈÈÈÈÈÈÈÈÈÈ ÝÍÍËËÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÐÐÐÐÐÐËËËËËËËËËËËËËËËÈÈÈÈÈÈÍÄËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÐAnd lets connect boxieÒ ÒËËs with arrowsËËËËËËorange arrowsÐÐÃÍÈÈÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÈÈÈÈÈ ÝÝÄËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÄÐÐÍÍÍAnd now lets make a miniture flag withÐËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËblinking stars.ÐÐËËËËËËËËËÐÐÃÍf9 * * * *ÐËËËËËËËËËËËËËÍÍ*ÍÍÍ*ÍÍÍ*ÐËËËËËËËËËËË*ÍÍÍ*ÍÍÍ*ÍÍÍ*ÐËËËËËËËËËËËËÍ*ÍÍÍ*ÍÍÍ*ÍÐËËËËËËËËËËËËËËËËËÍÍÍÍÍÍ*ËË* ÍÍ*ÍÍÍ*ÍÍÍ*ÍÍÈÈÈÈÃ144 ÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÐÐËÄËËËËËËËËËËËËËËËËËËËËËËËÄÐÐÍÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÐÐËÄËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÄÐÐÍÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÈËÃÈ77 ÄËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÄÈÈÍÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÈÈËÄËËËËËËËËËËËËËËËËËËËËËËËÄÈÈÍÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÍÍÍÃÈ1f9 Hope you likedÐËËËËËËËËËËËËËËËËËËÍÍÍÍthe demo. HappyÐËËËËËËËËËËËËËËËËJuly 4, 1986.ÐËËËÈÍÍ!ÐÐËËËËËËËËËËè77 ÄËËËËËËËËËËËËËËËËËËËËËËË \ No newline at end of file diff --git a/PC370_orig/Diskette/full/UTIL/ONEBLANK.ALC b/PC370_orig/Diskette/full/UTIL/ONEBLANK.ALC new file mode 100644 index 0000000..2b83c5b --- /dev/null +++ b/PC370_orig/Diskette/full/UTIL/ONEBLANK.ALC @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/UTIL/PRINTDOC.ALC b/PC370_orig/Diskette/full/UTIL/PRINTDOC.ALC new file mode 100644 index 0000000..ceaf47f --- /dev/null +++ b/PC370_orig/Diskette/full/UTIL/PRINTDOC.ALC @@ -0,0 +1,263 @@ + TITLE 'PRINT - PC/370 PRINT UTILITY' +* +* AUTHOR. Don Higgins. +* DATE. 03/29/86. (Copied and modified from DEMOSRC.ALC) +* REMARKS. PC/370 utility program to read selected text file +* and print it with page control. +* +* COPYRIGHT. None. This is a public domain program. +* +* MAINTENANCE. +* +* 05/18/87 CONVERTED TO RELEASE 2 DCB FORMAT +* +* INPUT +* +* 1. A>PRINT drive:file +* +* OUTPUT +* +* 1. File will be printed on the standard printer device with +* page control added via TITLE, EJECT, and SPACE statements as +* defined in standard OS/VS assembler. +* +PRINT CSECT + LR R13,R15 + USING PRINT,R13 + LA R2,=C'PC/370 PRINT UTILITY R2.0 05/18/87$' + SVC WTO + LA R2,=C' $' + SVC WTO + LA R2,SYSUT1 + USING IHADCB,R2 + L R1,0(R1) ADDR PARM LENGTH + LA R1,3(R1) SET R1 = FILENAME IN PARM+1 + ST R1,DCBDSN SET FILENAME ADDR IN DCB + DROP R2 + SVC OPEN + LA R1,ASCTITLE + LA R2,L'ASCTITLE+L'ASCEJECT+L'ASCSPACE + SVC EBCASC + LA R2,=C'ENTER P FOR PRINTER OUTPUT OR ANY KEY FOR CONSOLE$' + SVC WTO + SVC READKEY + STC R0,OPTION +MAINLOOP EQU * + BAL R12,GETREC + LTR R15,R15 TEST FOR END OF FILE + BNZ EOJ + BAL R14,SCAN + LTR R15,R15 TEST FOR COMMAND AND SKIP PRINTING IT + BNZ MAINLOOP + AP LINE,=P'1' + CP LINE,MAXLINE + BNH NEXTLINE + BAL R11,NEWPAGE +NEXTLINE EQU * + LA R0,RECORD + BAL R12,PUTREC + B MAINLOOP +EOJ EQU * + LA R2,SYSUT1 + SVC CLOSE + SVC EXIT + TITLE 'SCAN FOR TITLE, EJECT, AND SPACE COMMANDS' +SCAN EQU * + CLI RECORD,ASCBLK + BE SCANOP + CLI RECORD,ASCTAB + BNE SCANEXIT EXIT IF FIRST CHAR. NOT BLANK OR TAB +SCANOP EQU * + LA R4,RECORD+1 +SKIPBLK EQU * + CLI 0(R4),ASCLF + BE SCANEXIT + CLI 0(R4),ASCBLK + LA R4,1(R4) + BE SKIPBLK + BCTR R4,0 + CLC 0(5,R4),ASCTITLE + BE TITLE + CLC 0(5,R4),ASCEJECT + BE EJECT + CLC 0(5,R4),ASCSPACE + BE SPACE +SCANEXIT EQU * + SR R15,R15 + BR R14 +TITLE EQU * + LA R4,5(R4) +FINDQ1 EQU * + CLI 0(R4),ASCBLK + BL SCANEXIT IGNORE TITLE IF FIRST QUOTE NOT FOUND + CLI 0(R4),ASCQ + LA R4,1(R4) + BNE FINDQ1 + LA R3,TITLEMSG +FINDQ2 EQU * + CLI 0(R4),ASCBLK + BL SETTITLE TRUNCATE IF SECOND QUOTE NOT FOUND + CLI 0(R4),ASCQ + BE SETTITLE + CL R3,=A(TITLEMSG+L'TITLEMSG) + BNL SETTITLE TRUNCATE IF TOO LONG + MVC 0(1,R3),0(R4) COPY TITLE + LA R3,1(R3) + LA R4,1(R4) + B FINDQ2 +SETTITLE EQU * + CL R3,=A(TITLEMSG+L'TITLEMSG) + BNL EJECT + MVI 0(R3),ASCBLK PAD WITH BLANKS + LA R3,1(R3) + B SETTITLE +EJECT EQU * + BAL R11,NEWPAGE + LA R15,1 + BR R14 +SPACE EQU * + LA R0,SPACEMSG + BAL R12,PUTREC + LA R0,SPACEMSG + BAL R12,PUTREC + AP LINE,=P'2' + LA R15,1 + BR R14 + TITLE 'NEWPAGE - PRINT HEADING' +NEWPAGE EQU * + AP PAGE,=P'1' + ZAP LINE,=P'0' + MVC DPAGE,MASK + ED DPAGE,PAGE + MVC PAGEMSG,PAGEWORK + LA R1,PAGEMSG + LA R2,L'PAGEMSG + SVC EBCASC + LA R0,HEADING + BAL R12,PUTREC + MVI HEADCC,ASCFF FORCE FORM FEED AFTER FIRST PAGE + LA R0,SPACEMSG + BAL R12,PUTREC SKIP SPACE AFTER TITLE + BR R11 + TITLE 'GETREC - GET NEXT TEXT RECORD OR SET EOF' +GETREC EQU * + LA R2,SYSUT1 + LA R1,RECORD + SVC GET + SR R15,R15 + BR R12 +EOFRTN EQU * + LA R15,1 + BR R12 +SYNRTN EQU * + LA R2,=C'IO ERROR$' + SVC WTO + SVC TRACE + DC C'BUG ' + TITLE 'PUTREC - PUT RECORD TO STD. PRINT DEVICE' +PUTREC EQU * + LR R4,R0 +PUTLOOP EQU * + IC R2,0(R4) + CLI 0(R4),ASCTAB + LA R3,1 + BNE PUTCHAR + LA R3,9 + LA R2,ASCBLK +PUTCHAR EQU * + SVC CONSOLEC PRINT ON CONSOLE + CLI OPTION,ASCP + BE ISUSVC + CLI OPTION,ASCPL + BE ISUSVC + B PUTSKPP +ISUSVC SVC PRINTC PRINT ON STD. OUTPUT DEVICE ALSO +PUTSKPP EQU * + BCT R3,PUTCHAR + CLI 0(R4),ASCLF + LA R4,1(R4) + BNE PUTLOOP +PUTEXIT EQU * + SR R15,R15 + BR R12 + TITLE 'DATA SECTION' + LTORG +* +* REGISTER USAGE +* +R0 EQU 0 SVC RETURN CODE +R1 EQU 1 SVC ARGUMENT +R2 EQU 2 SVC ARGUMENT (DCB ADDRESS, DMA, MSG, ETC.) +R3 EQU 3 POINTER FOR MOVING TITLE +R4 EQU 4 OUTPUT BYTE PTR FOR PUTREC +R11 EQU 11 LINK FOR NEWPAGE +R12 EQU 12 LINK FOR GETREC AND PUTREC +R13 EQU 13 BASE +R14 EQU 14 LINK FROM MAINLINE TO ROUTINES +R15 EQU 15 RETURN CODE FROM ROUTINES +* +* PC/370 SVC'S +* +EXIT EQU 0 +OPEN EQU 1 +CLOSE EQU 2 +GET EQU 5 +PUT EQU 6 +TRACE EQU 9 +GMAIN EQU 10 +FMAIN EQU 11 +ASCEBC EQU 12 +EBCASC EQU 13 +READKEY EQU 200+1 MS-DOS SVC 1 READ KEY +CONSOLEC EQU 200+2 MS-DOS SVC 2 DISPLAY CHAR IN R2 ON CONSOLE +PRINTC EQU 200+5 MS-DOS SVC 5 PRINT CHAR IN R2 ON STD. PRINTER +WTO EQU 200+9 MS-DOS SVC 9 PRINT STRING WITH ENDING $ ON CON. +* +* DATA AREAS +* +TBUFF EQU X'80' BUFFER FOR DIRECTORY SEARCH +RECORD DS XL256 LOGICAL RECORD AREA +ASCLF EQU X'0A' ASCII LINE FEED +ASCCR EQU X'0D' ASCII CARRIAGE RETURN +ASCASK EQU X'2A' ASCII ASTERISK FOR ALC COMMENT CHECK +ASCBLK EQU X'20' ASCII SPACE +ASCQ EQU X'27' ASCII QUOTE +ASCTAB EQU X'09' ASCII TAB +ASCFF EQU X'0C' ASCII FORM FEED +ASCP EQU X'50' UPPERCASE ASCII P +ASCPL EQU X'70' LOWER CASE ASCII P +OPTION DC X'00' +ASCTITLE DC C'TITLE' +ASCEJECT DC C'EJECT' +ASCSPACE DC C'SPACE' +PAGE DC PL2'0' +LINE DC PL2'50' +MAXLINE DC PL2'50' +MASK DC X'40202020' EDIT MASK FOR PL2 +HEADING EQU * +HEADCC DC AL1(ASCBLK) +TITLEMSG DC 0CL65' ',65AL1(ASCBLK),2AL1(ASCBLK) +PAGEMSG DC 0CL8' ',9AL1(ASCBLK) +SPACEMSG DC AL1(ASCCR,ASCLF) END OF HEADING +WORK DC 0CL20' ' +PAGEWORK DC 0CL8' ',C'PAGE' +DPAGE DC CL4' ZZZ' + COPY CPY/IHADCB +* +* END OF DSECT +* +PRINT CSECT +SYSUT1 DC 0F'0',C'ADCB' + DC A(TBUFF+7) PATH/FILE NAME IN OS/VS PARM + DC X'FFFF' + DC X'00' + DC C'SGT' SEQ. GET TEXT + DC X'0A1A' + DC H'255' LRECL + DC H'8192' BLKSZ + DC A(EOFRTN) EODAD + DC A(SYNRTN) SYNAD + DC A(RECORD) RECORD AREA + DC XL(SYSUT1+LDCB-*)'00' + END PRINT + \ No newline at end of file diff --git a/PC370_orig/Diskette/full/UTIL/SEE.ALC b/PC370_orig/Diskette/full/UTIL/SEE.ALC new file mode 100644 index 0000000..8c7995e --- /dev/null +++ b/PC370_orig/Diskette/full/UTIL/SEE.ALC @@ -0,0 +1,3227 @@ + TITLE 'SEE.ALC - PC/370 SCREEN EDITOR AND EMULATOR' +* +* AUTHOR. Don Higgins. +* +* DATE. 04/06/86. +* +* REMARKS. PC/370 screen editor and emulator. +* +* COPYRIGHT. Copyright (c) 1988 Donald S. Higgins. +* +* This source program and its derivative object and +* machine code programs may be freely copied and +* distributed provided this copyright message in the +* source program and in the object program help screen +* is not removed or modified, and that no fee is charged. +* The remainder of the program may be modified as you see +* fit to customize it to your specific needs. If you send +* me useful enhancements, I will include them in the next +* release of PC/370 with appropriate credits. If you find +* PC/370 of value, support continued updates by registering +* as a PC/370 user. +* +* Don Higgins +* 6365 - 32 Avenue North +* St. Petersburg, Florida 33710 +* +* MAINTENANCE +* +* 07/19/86 DSH TESTING OF SEE R1.0 VERSION COMPLETED AND READY FOR SHIP WITH +* RELEASE R1.2 OF PC/370. +* 09/11/86 DSH SEE RELEASE 1.1 +* 1. ADD BOX MODE LOGIC TO CONNECT SINGLE AND DOUBLE LINES AT +* INTERSECTIONS. +* 2. MODIFY F1 SCREEN FOR FPC HELP # FOR INTERNAL USE. +* 3. SET FILE DEFAULT TO TEST.ALC INSTEAD OF BLANK NAME. +* 09/16/86 DSH SEE RELEASE 1.2 +* 1. ADD ALT-F10 BOX CONNECT MODE TOGGLE KEY. +* 09/19/86 DSH SEE RELEASE 1.3 +* 1. FIX SINGLE LINE CROSSING VERTICAL DOUBLE LT TO RT. +* 04/28/87 DSH SEE RELEASE 1.4 +* 1. FIX SEARCH AND REPLACE TO SET FILEMOD IF MATCH. +* 2. STARTUP IN INSERT MODE FOR NEW FILE. +* 3. ALLOW 132 BYTE INPUT RECORDS TRUNCATED TO 80. +* 04/29/87 DSH SEE RELEASE 2.0 +* 1. CONVERT TO PC/370 RELEASE 2.0 WITH NEW FILE PATHING +* I/O SUPPORT WITH NEW DCB. +* 2. USE GETMAIN/FREEMAIN IN VIRTUAL ADDRESS SPACE INSTEAD +* OF CROSS MEMORY MVCP/MVCS. +* 05/21/87 DSH - UPDATE SOURCE AND HELP SCREEN MESSAGES +* +* 07/12/87 DSH SEE RELEASE 2.1 +* 1. SUPPORT TABS FOR COL. 10, 16, AND 5 BLKS IN TEXT +* 2. UPDATE FROM SCREEN BEFORE F8 SEARCH STARTS +* 01/03/88 DSH SEE RELEASE 2.2 +* 1. USE STANDARD EBCDIC PARM LIST AT X'80' +* +* INPUT +* +* 1. A>SEE file1 file2 +* +* file1 - Name of new or existing ASCII text file to edit. +* Maximum size is about 512k with 640k memory. +* The default suffix is ALC. +* +* file2 - Optional name of new or existing keyboard simulator file. +* The default suffix is KSF. If the file is new all keystrokes +* entered during the current edit session will be recorded in +* the file. If the file is old, the entire edit session will +* be simulated using the keystrokes in the file. This feature +* is used to run validation tests on the editor. It can also +* be used to create animated displays for demonstrations. +* +* OUTPUT +* +* 1. Input file1 will be replaced with new file with changes. +* 2. Old file1 will be renamed with suffix of (.BAK). +* 3. Keyboard controls are designed to be compatible with +* both TURBO PASCAL and PFS:WRITE. For definitions see +* F1 and F2 help screen text in data section of program. +* (you can search via (F7) for label F1SC and F2SC) +* +* +SEE CSECT + USING *,R15 + STM R14,R12,12(R13) + BAL R15,START + DROP R15 + DC 18F'0' +START EQU * + ST R13,4(R15) + ST R15,8(R13) + LR R13,R15 + USING SEE+8,R13 + LA R8,2048(R13) + LA R8,2048(R8) + USING SEE+8+4096,R8 + LA R9,2048(R8) + LA R9,2048(R9) + USING SEE+8+4096+4096,R9 + LA R10,2048(R9) + LA R10,2048(R10) + USING SEE+8+4096+4096+4096,R10 + BAL R14,GETPARM PROCESS PARM FILE NAMES + LTR R15,R15 + BNZ SEEEND + BAL R14,INIT INITIALIZE SCREEN AND POINTERS + LTR R15,R15 + BNZ SEEEND + BAL R14,LOADFILE LOAD FILE INTO EXTENDED STORAGE + CLI EOJ,TRUE + BE SEEEND + BAL R14,EDITFILE EDIT FILE IN FULL SCREEN MODE + BAL R14,SAVEFILE SAVE FILE IF MODIFIED + BAL R14,TERMKSF TERMINATE KSF IF ACTIVE +SEEEND EQU * + LA R0,X'0003' AH=0,AL=2 FOR 25X80 COLOR MODE + SVC VIDEO SET MODE AND CLEAR SCREEN (TECH. A-48) + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + LA R15,X'0000' DH=ROW,DL=COL + SVC VIDEO SET CURSOR TO UPPER LEFT CORNER + LA R0,X'0920' AH=10, AL=SPACE + LA R1,X'0000' BH=0 PAGE,BL=ATTRIB. + LA R1,X'07' CLEAR SCREEN WITH BLACK ON WHITE + LA R14,25*80 CHARACTERS ON DATA LINES + SVC VIDEO CLEAR DATA LINES + LA R0,X'0B00' + SR R1,R1 + SVC VIDEO RESET BACKGROUND TO MS-DOS BLACK + SVC EXIT EXIT TO MS-DOS + TITLE 'GETPARM - MOVE PARM TO DCB' +GETPARM EQU * + TM 0(R1),X'80' VERIFY STD. OS/VS SINGLE ADDR. PARM + BZ GETPERR + L R1,0(R1) USE STD OS/VS PARM - DSH 01/03/88 + LH R4,0(R1) +GETDSN1 EQU * + LA R3,2(R1) R3 = ADDRESS COMMAND PATH/FILENAME + CH R4,=H'1' + BL GETDSN2 USE DEFAULT IF NO FILENAME + LA R5,DSN1 R5 = SYSUT1 PATH/FILENAME + SR R6,R6 R6 = ADDR OF SUFFIX . IF ANY +SKPLSP1 EQU * SKIP LEADING SPACES + CLI 0(R3),C' ' + BNE MVCDSN1 + LA R3,1(R3) + BCT R4,SKPLSP1 + B KSDONE USE DEFAULT IF ALL BLANKS +MVCDSN1 EQU * + CLI 0(R3),C' ' IF SPACE, CHK SUFFIX + BE CHKALC + MVC 0(1,R5),0(R3) + CLI 0(R5),C'.' + BNE SKPPD1 + LR R6,R5 + ST R6,ATYPE1 SAVE ADDRESS OF .XXX IN DSN1 +SKPPD1 EQU * + LA R5,1(R5) +SKPBLK1 LA R3,1(R3) + BCT R4,MVCDSN1 +CHKALC EQU * + MVI 0(R5),X'00' ADD ZERO BYTE + LTR R6,R6 + BZ ADDALC + CLC 0(4,R6),=C'.ALC' + BE GETDSN2 + MVI ALC,FALSE + B GETDSN2 +ADDALC EQU * + ST R5,ATYPE1 SAVE ADDRESS OF .ALC ADDED TO DSN1 + MVC 0(4,R5),=C'.ALC' + MVI 4(R5),X'00' ADD ZERO BYTE +* +* PROCESS SECOND FILE PARM IF PRESENT AS KEYBOARD SIMULATOR FILE +* +GETDSN2 EQU * + CH R4,=H'1' + BL KSDONE IF NO SECOND FILE, EXIT NOW + LA R5,DSN2 R5 = SYSUT2 PATH/FILENAME + SR R6,R6 R6 = ADDR OF SUFFIX . IF ANY +MVCDSN2 EQU * + CLI 0(R3),C' ' IF SPACE, CHK SUFFIX + BE SKPBLK2 + MVC 0(1,R5),0(R3) + CLI 0(R5),C'.' + BNE SKPPD2 + LR R6,R5 +SKPPD2 EQU * + LA R5,1(R5) +SKPBLK2 LA R3,1(R3) + BCT R4,MVCDSN2 +CHKKSF EQU * + MVI 0(R5),X'00' ADD ZERO BYTE + LTR R6,R6 + BNZ SKPTYP2 +ADDKSF EQU * + MVC 0(4,R5),=C'.KSF' + MVI 4(R5),X'00' ADD ZERO BYTE +SKPTYP2 EQU * + MVI KSMODE,KSREAD ASSUME READ MODE + LA R2,SYSUT2 + USING IHADCB,R2 + SVC SEARCH + CLM R0,1,=X'00' + BE KSOPEN + MVI KSMODE,KSWRITE IF NOT FOUND, SET WRITE MODE + MVC KSNEXT,=A(KSREC) RESET POINTER FOR WRITE + MVI MACRF,C'P' RESET DCB TO PUT + DROP R2 +KSOPEN EQU * +******* MVI AUDIT,TRUE SET DEFAULT AUDIT MODE FOR EMULATION + LA R2,SYSUT2 + SVC OPEN +KSDONE EQU * + CLI KSMODE,KSREAD + BE KSSKPOFF + SVC TRACE + DC C'IOF ' TURN KEYBOARD INTERRUPTS OFF +KSSKPOFF EQU * + SR R15,R15 + BR R14 +GETPERR EQU * INVALID PARM ERROR + LA R2,=C'INVALID PARM LIST$' + SVC WTO + LA R15,16 + BR R14 + TITLE 'INIT - INITIALIZE SCREEN AND POINTERS' +INIT EQU * + ST R14,INITSV14 + LA R0,X'0003' AH=0,AL=2 FOR 25X80 COLOR MODE + SVC VIDEO SET MODE AND CLEAR SCREEN (TECH. A-48) + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + LA R15,X'0000' DH=ROW,DL=COL + SVC VIDEO SET CURSOR TO UPPER LEFT CORNER + LA R0,X'0920' AH=10, AL=SPACE + LA R1,X'0000' BH=0 PAGE,BL=ATTRIB. + IC R1,ATTRIB + LA R14,25*80 CHARACTERS ON DATA LINES + SVC VIDEO CLEAR DATA LINES + LA R0,X'0B00' AH=11 FOR SET COLOR PALETTE (TECH. A-49) + SR R1,R1 + IC R1,ATTRIB + SRL R1,4 + N R1,=X'00000007' TURN OFF BLINK BIT + SVC VIDEO SET BACKGROUND COLOR TO SAME AS ATTRIB + L R1,=X'00FFFFFF' + SVC GETMAIN + CLM R0,1,=X'00' + BE E02 VERIFY MAX. MEMORY SET IN R1 + SH R1,=AL2(LBUFFS) REDUCE ALLOCATED MEMORY FOR BUFFERS + BNP E02 + SVC GETMAIN ALLOCATE IT + ST R2,ASCB ALLOCATE AREA FOR SCREEN + SH R1,=AL2(24*LSCB) REDUCE ALLOCATED BY SCB'S + BNP E02 + AH R2,=AL2(23*LSCB) + ST R2,MAXSCB ADDR OF LAST SCB + AH R2,=AL2(LSCB) UPDATE R2 TO START TO TEXT AREA + ST R1,GFQEL SET LENGTH OF EXTENDED STORAGE + ST R2,GFQEA SET ADDRESS + ST R2,MINMEM SAVE LOW LIMIT + AR R2,R1 + ST R2,MAXMEM SAVE MAX LIMIT + SR R0,R0 + D R0,=A(LLB) + ST R1,FMAXLINE SET MAX LINES POSSIBLE + LA R1,F1SC + LA R2,F1SCEND-F1SC + SVC EBCASC + L R1,=A(F2SC) + LA R2,F2SCEND-F2SC + SVC EBCASC + L R14,INITSV14 + BR R14 + TITLE 'LOADFILE - READ FILE INTO LB CHAIN IN EXTENDED MEMORY' +LOADFILE EQU * + ST R14,LOADSV14 + MVI EOF1,FALSE + MVC STATNAME,DSN1 MOVE DSN TO STATUS LINE + LA R3,STATLINE + LA R4,L'STATLINE + BAL R14,PUTSTAT PRINT ENTIRE STATUS LINE ONCE + BAL R14,KEYSTATS + BAL R14,CLEAR + LA R2,F1SC + L R3,=A(F1SCEND) + BAL R14,HELPSCRN + LA R2,SYSUT1 + SVC SEARCH + CLM R0,1,=X'00' DOES FILE EXIST + BNE NULLFILE NO, GO BUILD NEW FILE + LA R2,SYSUT1 + SVC OPEN + MVC WLBPREV,=A(0) + L R12,MINMEM + USING LB,R12 + ST R12,GLBFIRST + LA R5,100 +LOADLOOP EQU * + LA R3,LLB(R12) + ST R3,WLBNEXT + CL R3,MAXMEM VERIFY NOT OUT OF MEMORY + BNL LOADERR + LA R1,WLBLINE + LA R2,SYSUT1 + SVC GET READ RECORD INTO LB + LA R1,WLBLINE +LOADTABS EQU * EXPAND TABS + TRT 0(80,R1),FINDTAB FIND TAB OR EOR + BZ LOADSKPT EXIT IF NONE + CLM R2,1,=AL1(ASCLF) IS IT EOR + BE LOADSKPT EXIT IF EOR + MVC SAVETEXT,1(R1) SAVE REMAINING TEXT AFTER TAB + MVC 0(9,R1),=9AL1(ASCBLK) INSERT MAX BLANKS + CL R1,=A(WLBLINE+9) IS THIS TAB TO COL. 10 + BNL LOADCK16 + LA R1,WLBLINE+9 YES, SKIP TO COL. 10 + B LOADREM +LOADCK16 EQU * + CL R1,=A(WLBLINE+15) IS THIS TAB TO COL. 16 + BNL LOADSKP5 + LA R1,WLBLINE+15 YES, SKIP TO COL. 16 + B LOADREM +LOADSKP5 EQU * NO, SKIP 5 COLUMNS + LA R1,5(R1) +LOADREM EQU * + MVC 0(80,R1),SAVETEXT CONCATENATE REMAINING TEXT + B LOADTABS CONTINUE SCAN FOR TABS +LOADSKPT EQU * + MVC LB(LLB),WLB MOVE LB TO MEMORY + ST R12,WLBPREV + LR R12,R3 + BCT R5,LOADLOOP + AP PTOTAL,=P'100' + MVC STATREC,=X'402020202020' + ED STATREC,PTOTAL + LA R3,STATREC + LA R4,L'STATREC + BAL R14,PUTSTAT + ZAP PLSTLINE,PTOTAL + BAL R14,PUTPCT + LA R1,WLBLINE + LA R2,SYSUT1 + LA R5,100 + B LOADLOOP +NULLFILE EQU * + MVI KBINS,INSSTATE START IN INSERT FOR NEW FILE + BAL R14,NEWFILE + LA R1,=CL20'NEW FILE' + BAL R14,PUTMSG + B LOADSKPC +LOADERR EQU * + MVI EOJ,TRUE SHUT DOWN IF LOAD ERR + LA R1,=CL20'* OUT OF MEMORY *' + BAL R14,PUTMSG + BAL R14,GETKEY + B LOADSKPC +EOFUT1 EQU * NORMAL END OF FILE ON INPUT + CVD R5,PWORK + ZAP PLSTLINE,=P'100' + SP PLSTLINE,PWORK + AP PLSTLINE,PTOTAL CALC TOTAL LINES LOADED + L R12,WLBPREV + MVC LBNEXT,=A(0) RESET NEXT IN LAST LB + ST R12,GLBLAST + ST R3,GFQEA UPDATE FREE MEMORY START + L R4,MAXMEM + SR R4,R3 + ST R4,GFQEL UPDATE REMAINING FREE LENGTH + ZAP PCUR,=P'1' + MVC GLBCUR,GLBFIRST RESET TO FIRST LB + LA R2,SYSUT1 + SVC CLOSE + BAL R14,PUTPCT +LOADSKPC EQU * + BAL R14,AUDITMS + L R14,LOADSV14 + BR R14 + TITLE 'EDITFILE ENTER FULL SCREEN MODE TO BROWZE/CHANGE FILE' +EDITFILE EQU * + ST R14,EDITSV14 + LA R1,=CL20'EDIT' + BAL R14,PUTMSG + BAL R14,DISPLAY DISPLAY 24 LINES PLUS STATUS +EDITLOOP EQU * + BAL R14,GETKEY GET NEXT KEY INPUT + SR R2,R2 CLEAR FUNCTION CODE REG. + TRT KEY,KEYTAB + L R0,WAITLOOP LOOP ON BCT FOR COUNT IN WAITLOOP + BCT R0,* + L R15,KRTAB(R2) + BALR R14,R15 PROCESS KEY + BAL R14,AUDITSCB AUDIT SCB'S IF AUDIT ON + CLI EOJ,TRUE IS IT END OF JOB (ESCAPE KEY) + BNE EDITLOOP + L R14,EDITSV14 + BR R14 + TITLE 'SAVEFILE RENAME OLD FILE AND WRITE NEW FILE IF CHANGED' +SAVEFILE EQU * + ST R14,SAVESV14 + ST R5,SAVEROW + ST R6,SAVECOL + ST R7,SAVESCB + LA R1,=CL20'SAVING' + BAL R14,PUTMSG + BAL R14,UPDATE UPDATE FILE WITH ANY CHANGES ON SCREEN + CLI FILEMOD,TRUE HAS FILE CHANGED + BNE SAVESKIP NO, EXIT NOW + MVI EOF1,FALSE + MVI SYSUT1+(MACRF-IHADCB),C'P' CHANGE DCB FROM GET TO PUT + CLI FIRSTSAV,TRUE + BNE SAVESKPR IF NOT FIRST SAVE, SKIP RENAME + MVI FIRSTSAV,FALSE + LA R2,SYSUT1 + USING IHADCB,R2 + SVC SEARCH + CLM R0,1,=X'00' + BNE SAVESKPR IF NO OLD FILE, SKIP + L R1,ATYPE1 + MVC SAVETYPE,1(R1) SAVE ORIG. TYPE + MVC 1(3,R1),=C'BAK' + SVC SEARCH + CLM R0,1,=X'00' + BNE SKPDEL IF NO BKP, SKIP DELETE + SVC DELETE DELETE OLD BACKUP IF PRESENT +SKPDEL EQU * + MVC REN1(64),DSN1 COPY FILE NAME TO RENAME + L R1,ATYPE1 + MVC 1(3,R1),SAVETYPE RESTORE OLD FILE NAME + SVC RENAME RENAME OLD FILE TO BKP +SAVESKPR EQU * + LA R2,SYSUT1 + SVC OPEN + L R12,GLBFIRST + USING LB,R12 + LA R5,100 + ZAP PTOTAL,=P'0' + XC FINDKEY,FINDKEY + MVI FINDKEY+ASCCR,X'FF' +SAVELOOP EQU * + LTR R12,R12 + BZ SAVEEXIT + MVC WLB(LLB),LB MOVE NEXT LB TO WORKING STORAGE + MVC WLBLINE+L'WLBLINE(2),=AL1(ASCCR,ASCLF) RESET PAD + TRT WLBLINE(81),FINDKEY FIND END OF RECORD + LA R2,1(R1) + S R2,=A(WLBLINE) +SAVEBLKL EQU * + BCTR R1,0 BACKUP TO FIRST NON-BLANK + CLI 0(R1),ASCBLK + BNE SAVEBLKE + BCT R2,SAVEBLKL +SAVEBLKE EQU * + MVC 1(2,R1),=AL1(ASCCR,ASCLF) PUT CR,LF AFTER LAST CHAR + LA R1,WLBLINE + CLI ALC,TRUE IS FILE TYPE ALC + BNE SAVESKPT + CLC WLBLINE(9),=9AL1(ASCBLK) ARE THERE 9 LEADING BLANKS + BNE SAVESKPT + MVI WLBLINE+8,ASCTAB INSERT TAB + LA R1,WLBLINE+8 WRITE FROM TAB +SAVESKPT EQU * + LA R2,SYSUT1 + SVC PUT PUT RECORD + L R12,WLBNEXT + BCT R5,SAVELOOP REPEAT 100 TIMES + AP PTOTAL,=P'100' + MVC STATREC,=X'402020202020' + ED STATREC,PTOTAL + LA R3,STATREC + LA R4,L'STATREC + BAL R14,PUTSTAT PRINT RECORD # EVERY 100 RECORDS + LA R5,100 + B SAVELOOP +SAVEEXIT EQU * + LA R2,SYSUT1 + SVC CLOSE + MVI FILEMOD,FALSE +SAVESKIP EQU * + L R5,SAVEROW + L R6,SAVECOL + L R7,SAVESCB + L R14,SAVESV14 + BR R14 + TITLE 'DISPLAY - DISPLAY 24 LINES AT CURRENT POINT IN FILE' +DISPLAY EQU * + ST R14,DISPSV14 + MVC SAVBLKLB,BLKLABEL SAVE BLKLABEL MODE + BAL R14,UPDATE UPDATE SCREEN LINES IN EXTENDED STORAGE + BAL R14,CLEAR CLEAR DISPLAY AND RESET CURSOR + L R12,GLBCUR R12=A(CURRENT LB IN EXTENDED MEMORY) + LTR R12,R12 + BNZ DISPOK + BAL R14,NEWFILE INITIALIZE EMPTY FILE + L R12,GLBCUR +DISPOK EQU * + SR R5,R5 RESET ROW + USING LB,R12 + L R7,ASCB SCREEN TABLE + USING SCB,R7 +DISPLINE EQU * + LTR R12,R12 IS LB ADDRESS GT 0 + BZ DISPEXIT NO, GO EXIT + ST R12,SCBADDR SAVE ADDRESS OF LB + MVC SCBLB(LLB),LB MOVE CURRENT LINE TO SCB + MVI SCBMOD,FALSE SET MODIFY FALSE + SR R3,R3 SET STARTING COL. + BAL R14,PUTLINE + MVI BLKLABEL,FALSE TEMP TURN OFF BLKLABEL AFTER FIRST +NEXTLINE EQU * LINE TO ONLY MARK FIRST LINE + ST R5,LASTROW SET LAST ROW + ST R7,LASTSCB SET LAST SCB ADDR + LA R0,X'0100' + SVC KEYBOARD + STCM R0,4,KEY PUT LOW FLAGS BYTE IN KEY + TM KEY,X'40' IS THERE A KEY WAITING + BZ DISPEXIT YES, EXIT NOW WITH SHORT SCREEN + LA R5,X'100'(R5) INCR ROW + LA R6,X'00' RESET COL + L R12,SCBNEXT ADDRESS OF NEXT LB + LA R7,LSCB(R7) INCR SCREEN CONTROL BLOCK + CL R5,MAXROW + BNH DISPLINE +DISPEXIT EQU * + MVC BLKLABEL,SAVBLKLB RESTORE BLKLABEL MODE + LA R5,0 RESET ROW,COL TO 0,0 + LA R6,0 + L R7,ASCB RESET SCB ADDRESS + ZAP PCURLINE,PCUR + ZAP PCOL,=P'1' + BAL R14,SETCUR RESET CURSOR + L R14,DISPSV14 + BR R14 + TITLE 'SETCUR - SET CURSOR ON NEW DISPLAY' +SETCUR EQU * + ST R14,SETCSV14 + CLC PCURLINE,PCURLAST + BE SCSKPREC + MVC PCURLAST,PCURLINE + MVC STATREC,=X'402020202120' + ED STATREC,PCURLINE + LA R3,STATREC + LA R4,L'STATREC + BAL R14,PUTSTAT +SCSKPREC EQU * + CLC PCOL,PCOLLAST + BE SCSKPCOL + MVC PCOLLAST,PCOL + MVC STATCOL,=X'40202120' + ED STATCOL,PCOL + LA R3,STATCOL + LA R4,L'STATCOL + BAL R14,PUTSTAT +SCSKPCOL EQU * + LA R15,0(R5,R6) + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + SVC VIDEO + L R14,SETCSV14 + BR R14 + TITLE 'NEWFILE - INITIALIZE NEW FILE IN MEMORY' +NEWFILE EQU * + ST R14,NEWFSV14 + BAL R14,GETNEWLB + LTR R15,R15 + BZ E03 + L R12,ANEWLB + ST R12,GLBCUR + ST R12,GLBFIRST + ST R12,GLBLAST + ZAP PCUR,=P'1' + ZAP PLSTLINE,=P'1' + MVC WLBPREV,=A(0) + MVC WLBNEXT,=A(0) + MVC WLBLINE,=AL1(ASCCR,ASCLF) + BAL R14,CHKADDR + MVC LB(LLB),WLB INITIALIZE EMPTY LINE IN MEMORY + L R14,NEWFSV14 + SR R15,R15 + BR R14 + TITLE 'PUTLINE - DISPLAY CURRENT LINE' +* +* R3 = STARTING COLUMN +* +* IF IN MARKING MODE, USE REVERSE VIDEO AND SET ENDING BLOCK +* +PUTLINE EQU * + ST R14,PUTLSV14 + IC R0,ATTRIB + STC R0,ATTSAVE + CLI BLKLABEL,MARK + BNE PUTLINE1 + MVC BLK2LB,SCBADDR UPDATE ENDING BLOCK + SLL R0,4 + LR R1,R0 + N R1,=X'00000070' BG=FG (TURN OFF HIGH INTENSITY/BLINK) + SRL R0,8 + N R0,=X'00000007' FG=BG + OR R1,R0 + STC R1,ATTRIB + OI ATTRIB,X'08' TURN ON INTENSITY FOR REVVERSE FG +PUTLINE1 EQU * +**************************************************************** +*DISPCHAR EQU * * +* CLI 0(R2),ASCBLK IS IT END OF LINE * +* BL DSLNEXIT * +* MICRO LA R0,X'0200' AH=2 SET CURSOR * +* CODED LA R1,0 BH=0 PAGE * +* AS LA R15,0(R5,R3) DH=ROW,DL=COL * +* PC/370 SVC VIDEO * +* SVC 24 LA R0,X'0900' AH=9 * +* FOR LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.(WHITE ON BLUE) * +* SPEED IC R1,ATTRIB BL=ATRIBUTE OF CHAR. * +* ON LA R14,1 CX=(COUNT OF CHAR TO WRITE) * +* MOST IC R0,0(R2) AL=CHAR * +* FREQ. SVC VIDEO DISPLAY CHAR * +* VIDEO LA R3,1(R3) INCR COL * +* FUNCT. LA R2,1(R2) INCR CHAR * +* B DISPCHAR REPEAT FOR LINE * +*DSLNEXIT EQU * * +**************************************************************** + LA R2,SCBLINE(R3) + SR R1,R1 + IC R1,ATTRIB PUT BH=0 AND BL=ATTIRBUTE IN R1 + LA R15,0(R5,R3) PUT ROW AND COL IN R15 +***************************************************************** + SVC PRINTTXT PRINT LINE AT (R2) AT (R15) ON SCREEN +***************************************************************** + STC R15,SCBCOL UPDATE ENDING COL. (NOTE SVC USES R15 + SR R1,R1 INSETEAD OF R3) + IC R1,SCBCOL + LA R1,SCBLINE(R1) + MVC 0(2,R1),=AL1(ASCCR,ASCLF) ADD CR,LF + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + LA R15,0(R5,R6) DH=ROW,DL=COL + SVC VIDEO + MVC ATTRIB,ATTSAVE RESET COLORS + L R14,PUTLSV14 + BR R14 + TITLE 'PUTMSG - DISPLAY 20 CHAR MSG AT R1' +PUTMSG EQU * + MVC STATMSG,0(R1) + LA R3,STATMSG + LA R4,L'STATMSG + B PUTSTAT + TITLE 'PUTSTAT - DISPLAY DATA ON STATUS LINE' +* +* R3 = START OF TEXT IN STATUS LINE +* R4 = LENGTH OF TEXT +* +PUTSTAT EQU * + ST R14,PUTSSV14 + LR R1,R3 + LR R2,R4 + SVC EBCASC + LR R2,R3 + SR R1,R1 + STC R1,0(R3,R4) SET EOR FOR PRINTTXT + IC R1,ATTRIB + LR R15,R3 + S R15,=A(STATLINE-STATRC0) + SVC PRINTTXT + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + LA R15,0(R5,R6) DH=ROW,DL=COL + SVC VIDEO + L R14,PUTSSV14 + BR R14 + TITLE 'NEWSTAT - REFRESH STATUS LINE WITH CURRENT ATTRIBUTE' +NEWSTAT EQU * + ST R14,PUTSSV14 + LA R2,STATLINE + LA R1,L'STATLINE +NEWSTAT1 EQU * + CLI 0(R2),ASCBLK + BNL NEWSTAT2 + MVI 0(R2),ASCBLK CLEAR OUT INDIVIDUAL FIELD STOPS +NEWSTAT2 EQU * + LA R2,1(R2) + BCT R1,NEWSTAT1 + SR R1,R1 + IC R1,ATTRIB + LA R2,STATLINE + L R15,=A(STATRC0) + SVC PRINTTXT + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + LA R15,0(R5,R6) DH=ROW,DL=COL + SVC VIDEO + L R14,PUTSSV14 + BR R14 + TITLE 'PUTPCT - UPDATE % OF MEMORY CAPACITY IN USE' +PUTPCT EQU * + ST R14,PPCTSV14 + ZAP PWORK,PLSTLINE + CVB R1,PWORK + MH R1,=H'100' + SR R0,R0 + D R0,FMAXLINE + CVD R1,PWORK + MVC STATPCT,=X'40202120' + ED STATPCT,PWORK+6 + LA R3,STATPCT + LA R4,L'STATPCT+1 + MVI STATPCT+L'STATPCT,C'%' + BAL R14,PUTSTAT + L R14,PPCTSV14 + BR R14 + TITLE 'CLEAR - CLEAR SCREEN AND SET CURSOR TO UPPER LEFT' +CLEAR EQU * + ST R14,CLRSV14 + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + LA R15,X'0000' DH=ROW,DL=COL + SVC VIDEO SET CURSOR TO UPPER LEFT CORNER + LA R0,X'0920' AH=10, AL=SPACE + LA R1,X'0000' BH=0 PAGE,BL=ATTRIB. + IC R1,ATTRIB + LA R14,24*80 CHARACTERS ON DATA LINES + SVC VIDEO CLEAR DATA LINES + L R14,CLRSV14 + BR R14 + TITLE 'GETKEY - GET NEXT KEY INPUT' +GETKEY EQU * + ST R14,GETKSV14 + MVC LASTKEY,KEY SAVE LAST KEY + CLI KSMODE,KSREAD + BE KSGET +CHKNOW EQU * + LA R0,X'0100' + SVC KEYBOARD + STCM R0,4,KEY PUT LOW FLAGS BYTE IN KEY + TM KEY,X'40' IS THERE A KEY WAITING + BZ GETNOW YES, GO GET KEY NOW + BAL R14,KEYSTATS NO, GO UPDATE KEY STATUS FIRST + B CHKNOW +GETNOW EQU * + LA R0,X'0000' + SVC KEYBOARD GET KEY FROM KEYBOARD BIA BIOS + STC R0,KEY + CLI KEY,X'00' IS IT NULL CODE + BE KEYEXT YES, GET EXTENDED CODE + CLI KEY,X'80' IS IT ASCII 0-127 + BL KEYOK YES, OK + MVI KEY,X'00' NO, MAKE IT NULL + B KEYOK +KEYEXT EQU * + STCM R0,2,KEY STORE AH EXTENDED CODE + OI KEY,X'80' FORCE EXTENDED CODES TO 128+ +KEYOK EQU * + CLI KSMODE,KSWRITE IS KEYBOARD FILE BEING WRITTEN + BNE GETKEXIT NO, EXIT +KSPUT EQU * YES, PUT KEY + L R1,KSNEXT + MVC 0(1,R1),KEY MOVE KEY TO KS OUTPUT RECORD + LA R1,1(R1) + ST R1,KSNEXT + CL R1,=A(KSRECEND) + BL GETKEXIT + LA R1,KSREC + ST R1,KSNEXT RESET NEXT POINTER + LA R2,SYSUT2 + SVC PUT WRITE KS RECORD + B GETKEXIT +KSGET EQU * + L R1,KSNEXT + LA R1,1(R1) + ST R1,KSNEXT + CL R1,=A(KSRECEND) + BL KSGETOK + LA R1,KSREC + ST R1,KSNEXT + LA R2,SYSUT2 + SVC GET READ KS RECORD +KSGETOK EQU * + MVC KEY,0(R1) +GETKEXIT EQU * + L R14,GETKSV14 + BR R14 + TITLE 'AUDITSCB - AUDIT SCB'S AGAINST LB'S' +AUDITSCB EQU * + CLI AUDIT,TRUE + BNER R14 + STM R0,R3,SAVER0R3 + LA R0,0 ERR 0 + LTR R5,R5 + BM AUDITBUG ROW LT 0 + CL R5,MAXROW + BH AUDITBUG ROW GT 23 + LA R0,10 ERR 10 + LA R1,LASTROW + LA R2,LASTSCB + CL R5,LASTROW + BH AUDITBUG ROW GT LASTROW + CL R7,LASTSCB + BH AUDITBUG ASCB GT LASTSCB + LA R0,11 ERR 11 + LR R1,R5 + SRL R1,8 + MH R1,=AL2(LSCB) + A R1,ASCB + CLR R1,R7 ROW NE ASCB + BNE AUDITBUG + L R1,ASCB + SR R2,R2 +AUDITL EQU * + L R12,SCBADDR-SCB(R1) + MVC WLB(8),LB + CLC SCBLB-SCB(8,R1),WLB CHECK LB POINTERS + LA R0,1 ERR 1 + BNE AUDITBUG SCB PREV/NEXT NE LB PREV/NEXT + LR R3,R1 + LA R2,ROWINC(R2) + LA R1,LSCB(R1) + CL R2,LASTROW + BH AUDITE + CLC SCBNEXT-SCB(4,R3),SCBADDR-SCB(R1) + LA R0,2 ERR 2 + BNE AUDITBUG SCBNEXT EQ SCBADDR OF NEXT + CLC SCBPREV-SCB(4,R1),SCBADDR-SCB(R3) + BNE AUDITBUG SCBPREV EQ SCBADDR OF PREV + B AUDITL +AUDITE EQU * + LM R0,R3,SAVER0R3 + BR R14 +AUDITBUG EQU * ENTER PC/370 DEBUG WITH ERR IN R0 + SVC TRACE + DC C'BUG ' + B * + TITLE 'AUDITMS - AUDIT MAIN STORAGE LBS' +AUDITMS EQU * + CLI AUDIT,TRUE + BNER R14 + STM R0,R3,SAVER0R3 + ZAP PCHKLINE,=P'0' + MVC WLBADDR,GLBFIRST + L R12,WLBADDR + LTR R12,R12 + BZ AUDITMSE + MVC WLB(LLB),LB + LA R0,3 ERR 3 + LA R1,WLBADDR + CLC WLBPREV,=A(0) + BNE AUDITBUG FIRST LBPREV EQ 0 + LA R0,4 ERR 4 + LA R3,TLBADDR +AUDITMSL EQU * + AP PCHKLINE,=P'1' + MVC TLBADDR,WLBNEXT + L R12,TLBADDR + LTR R12,R12 + BZ AUDITMSE + MVC TLB(LLB),LB + CLC WLBADDR,TLBPREV + BNE AUDITBUG LP(I) EQ LPREV(I+1) + MVC WLBADDR,TLBADDR + MVC WLB(LLB),TLB + B AUDITMSL +AUDITMSE EQU * + LA R0,5 ERR 5 + L R1,WLBADDR + L R3,GLBLAST + CLC WLBADDR,GLBLAST + BNE AUDITBUG GLBLAST EQ LP(LAST) + LA R0,6 ERR 6 + LA R1,PCHKLINE + LA R3,PLSTLINE + CP PCHKLINE,PLSTLINE + BNE AUDITBUG PLSTLINE EQ LB COUNT + LM R0,R3,SAVER0R3 + BR R14 + TITLE 'TERMKSF - FLUSH AND CLOSE KSF FILE IF ACTIVE' +TERMKSF EQU * + ST R14,TERMSV14 + CLI KSMODE,KSOFF IS KEYBOARD FILE IN USE + BE TERMKSFE NO, EXIT NOW + CLI KSMODE,KSWRITE IS IT WRITE + BNE TERMKSFC NO, GO CLOSE IT + L R1,KSNEXT + CL R1,=A(KSREC) IS THERE DATA IN LAST RECORD + BE TERMKSFC NO, GO CLOSE IT + LA R1,KSREC + LA R2,SYSUT2 + SVC PUT YES, WRITE LAST KS RECORD +TERMKSFC EQU * + LA R2,SYSUT2 + SVC CLOSE CLOSE KS FILE +TERMKSFE EQU * + L R14,TERMSV14 + BR R14 + TITLE 'KEYSTATS - UPDATE CAPS, INSERT, NUMLOCK STATUS' +KEYSTATS EQU * + ST R14,KEYSSV14 + LA R0,X'0200' AH=2 RETURN SHIFT STATUS + SVC KEYBOARD READ SHIFT STATUS INTO AL (TECH. A-26) +****** +* +* NOTE INS STATE IS TOGGLED BY KEY ROUTINE ALWAYS STARTING IN OFF +* STATE RATHER THAN USING MS-DOS TOGGLED STATUS WHICH MAY OR MAY +* NOT BE OFF AT START OF PROGRAM. (USER MAY CHANGE OPTION. IF YOU +* DO REMEMBER TO DISABLE TOGGLE IN KRINS ROUTINE.) +* +* STC R0,KBINS +* NI KBINS,INSSTATE +* +***** + STC R0,KBCAP SET CAP STATUS + NI KBCAP,CAPSTATE + STC R0,KBNUM SET NUM STATUS + NI KBNUM,NUMSTATE +KEYSINS EQU * + CLC KBINS,KBINSLST + BE KEYSCAP + CLI KBINS,INSSTATE + MVC STATINS,=C'INS' + BE KEYSINSU + MVC STATINS,=C' ' +KEYSINSU EQU * + MVC KBINSLST,KBINS + LA R3,STATINS + LA R4,L'STATINS + BAL R14,PUTSTAT +KEYSCAP EQU * + CLC KBCAP,KBCAPLST + BE KEYSNUM + CLI KBCAP,CAPSTATE + MVI KBCAP,CAPSTATE + MVC STATCAP,=C'CAP' + BE KEYSCAPU + MVI KBCAP,0 + MVC STATCAP,=C' ' +KEYSCAPU EQU * + MVC KBCAPLST,KBCAP + LA R3,STATCAP + LA R4,L'STATCAP + BAL R14,PUTSTAT +KEYSNUM EQU * + CLC KBNUM,KBNUMLST + BE KEYSEXIT + CLI KBNUM,NUMSTATE + MVI KBNUM,NUMSTATE + MVC STATNUM,=C'NUM' + BE KEYSNUMU + MVI KBNUM,0 + MVC STATNUM,=C' ' +KEYSNUMU EQU * + MVC KBNUMLST,KBNUM + LA R3,STATNUM + LA R4,L'STATNUM + BAL R14,PUTSTAT +KEYSEXIT EQU * + L R14,KEYSSV14 + BR R14 + TITLE 'KR - KEY CONTROL ROUTINES' +* +* ALL ROUTINES STARTING WITH KR..... ARE ACCESSED VIA BALR FROM EDIT +* BASED ON USE OF EXTENDED ASCII KEYBOARD INPUT BYTE USED AS INDEX +* INTO KEYTAB TO OFFSET TO KRTAB ADDRESS TABLE POINTER TO KR ROUTINE. +* THIS IDEXING SCEME CAN HANDLE UP TO 63 KR ROUTINES. +* +KRUND EQU * PROCESS UNDEFINED KEY + BR R14 +KRCHAR EQU * PROCESS ASCII CHARACTER + ST R14,KRSV14 + BAL R14,KRSETCHR + LA R6,1(R6) INCR COL + AP PCOL,=P'1' + MVC STATCOL,=X'40202020' + ED STATCOL,PCOL + LA R3,STATCOL+2 + LA R4,2 + BAL R14,PUTSTAT + MVC PCOLLAST,PCOL + CH R6,=H'80' WRAP IF END OF LINE + BL KRCHARS2 + LA R6,0 RESET COL + ZAP PCOL,=P'1' + LA R5,ROWINC(R5) INCR ROW + AP PCURLINE,=P'1' + LA R7,LSCB(R7) INCR SCB LINE + CL R5,LASTROW WRAP IF LAST LINE + BNH KRCHARS1 + LA R5,0 RESET ROW + ZAP PCURLINE,PCUR + L R7,ASCB RESET SCB +KRCHARS1 EQU * UPDATE CURSOR ON SCREEN + BAL R14,SETCUR +KRCHARS2 EQU * + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + LA R15,0(R5,R6) DH=ROW,DL=COL + SVC VIDEO + L R14,KRSV14 + BR R14 +KRSETCHR EQU * STORE KEY AT CURSOR + ST R14,SCHRSV14 + MVI SCBMOD,TRUE SET MOD SWITCH FOR CURRENT LINE + MVI SCRMOD,TRUE SET MOD SWITCH FOR CURRENT SCREEN + CLM R6,1,SCBCOL IS NEW CHAR PAST END OF LINE + BL KRCHARCI NO, GO CHECK INSERT MODE + SR R2,R2 + IC R2,SCBCOL R2 = OLD COL + LR R1,R6 + SR R1,R2 + LA R2,SCBLINE(R2) + MVI 0(R2),ASCBLK INIT PAD + EX R1,MVCPAD EXTEND PAD TO NEW COLUMN + LA R1,1(R6) + STC R1,SCBCOL SET NEW ENDING COL + LA R2,SCBLINE(R1) + MVC 0(2,R2),=AL1(ASCCR,ASCLF) ADD CR,NL +KRCHAROK EQU * + LA R0,X'0900' AH=9 + LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.(WHITE ON BLUE) + IC R1,ATTRIB BL=ATRIBUTE OF CHAR. + LA R14,1 CX=(COUNT OF CHAR TO WRITE) + IC R0,KEY AL=CHAR. + STC R0,SCBLINE(R6) STORE CHARACTER IN SCREEN TEXT + SVC VIDEO DISPLAY ASCII CHAR + L R14,SCHRSV14 + BR R14 +MVCPAD MVC 1(0,R2),0(R2) PAD TO NEW COLUMN +KRCHARCI EQU * CHECK INSERT MODE + CLI KBINS,INSSTATE + BNE KRCHAROK NO, GO STORE CHAR AND EXIT + CLM R6,1,=AL1(79) IS THIS LAST CHAR + BE KRCHAROK YES, GO STORE CHAR AND EXIT + LA R2,SCBLINE(R6) + SR R1,R1 + IC R1,SCBCOL + LA R1,1(R1) + STC R1,SCBCOL UPDATE ENDING COL + SR R1,R6 R1 = LENGTH OF TEXT + 2 - 1 + EX R1,INSMVC1 SAVE TEXT TO BE SHIFTED + EX R1,INSMVC2 MOVE TEXT BACK SHIFTED RIGHT + IC R2,KEY + STC R2,SCBLINE(R6) STORE CHARACTER IN SCREEN TEXT + LR R3,R6 + BAL R14,PUTLINE UPDATE SHIFTED LINE + L R14,SCHRSV14 + BR R14 +INSMVC1 MVC WLBLINE(0),0(R2) MOVE TEXT TO BE SHIFTED RIGHT +INSMVC2 MVC 1(0,R2),WLBLINE MOVE TEXT BACK SHIFTED RIGHT 1 +KRESC EQU * PROCESS ESCAPE KEY + MVI EOJ,TRUE + BR R14 +KRPGUP EQU * PROCESS PAGE UP KEY + ST R14,KRSV14 + L R12,GLBCUR + USING LB,R12 + LA R3,12 +KRPGUPL EQU * + MVC WLBPREV,LBPREV + L R12,WLBPREV + LTR R12,R12 + BZ KRPGUPE + ST R12,GLBCUR + SP PCUR,=P'1' + BCT R3,KRPGUPL +KRPGUPE EQU * + BAL R14,DISPLAY + L R14,KRSV14 + BR R14 +KRPGDN EQU * PROCESS PAGE DOWN KEY + ST R14,KRSV14 + L R12,GLBCUR + LA R3,12 +KRPGDNL EQU * + MVC WLBNEXT,LBNEXT + L R12,WLBNEXT + LTR R12,R12 + BZ KRPGDNE + ST R12,GLBCUR + AP PCUR,=P'1' + BCT R3,KRPGDNL +KRPGDNE EQU * + BAL R14,DISPLAY + L R14,KRSV14 + BR R14 +KRF1 EQU * F1 FOR HELP SCREEN 1 + ST R14,KRSV14 + BAL R14,CLEAR + LA R2,F1SC + L R3,=A(F1SCEND) + BAL R14,HELPSCRN + BAL R14,GETKEY WAIT FOR ANY KEY + L R14,KRSV14 + CLI KEY,ASCF2 + BE KRF2 SWITCH HELP SCREEN WITHOUT DISPLAY +KRF1COM EQU * + LA R15,KRALTF1 + CLI KEY,ASCALTF1 + BE KRF1WAIT + LA R15,KRALTF2 + CLI KEY,ASCALTF2 + BNE KRF1SKPW +KRF1WAIT EQU * + BALR R14,R15 GO WAIT FOR ALT-F1 OR F2 +KRF1SKPW EQU * NOW CLEAR HELP SCREEN + BAL R14,DISPLAY + L R14,KRSV14 + BR R14 +HELPSCRN EQU * DISPLAY HELP SCREEN + LA R4,0 +HELPLOOP EQU * + ST R14,HELPSV14 + SR R1,R1 + IC R1,ATTRIB + LR R15,R4 + SVC PRINTTXT + LA R4,ROWINC(R4) + CLR R2,R3 + BL HELPLOOP + L R14,HELPSV14 + BR R14 +KRF2 EQU * F2 FOR HELP SCREEN 2 + ST R14,KRSV14 + BAL R14,CLEAR + L R2,=A(F2SC) + L R3,=A(F2SCEND) + BAL R14,HELPSCRN + BAL R14,GETKEY WAIT FOR ANY KEY + L R14,KRSV14 + CLI KEY,ASCF1 + BE KRF1 SWITCH HELP SCREEN WITHOUT DISPLAY + B KRF1COM +KRUP EQU * CURSOR UP + ST R14,KRSV14 + MVI DIRNEW,DIRUP + BAL R14,KRCHKBOX + LTR R5,R5 + BNZ KRUPROW + L R12,SCBPREV + LTR R12,R12 + BZ KRUPEXIT + ST R12,GLBCUR + SP PCUR,=P'1' + ZAP PCURLINE,PCUR + BAL R14,CHKMARK + BAL R14,SCRLDOWN + L R12,GLBCUR + MVC SCBLB(LLB),LB MOVE NEW CURRENT LB TO FIRST LINE + ST R12,SCBADDR + ST R12,GLBCUR + SR R3,R3 + BAL R14,PUTLINE + MVI SCBMOD,FALSE + B KRUPEXIT +KRUPROW EQU * + BAL R14,CHKMARK + SP PCURLINE,=P'1' + SH R5,=AL2(ROWINC) + SH R7,=AL2(LSCB) +KRUPEXIT EQU * + BAL R14,SETCUR + L R14,KRSV14 + BR R14 +KRDOWN EQU * CURSOR DOWN + ST R14,KRSV14 + MVI DIRNEW,DIRDOWN + BAL R14,KRCHKBOX + CL R5,LASTROW + BL KRDOWNRW + L R12,SCBNEXT + LTR R12,R12 IS THERE A NEXT LINE + BZ KRDOWNXT NO, EXIT NOW + CL R5,MAXROW IS THERE ANOTHER LINE ON SCREEN + BL KRDOWNAR YES, GO ADD IT + ST R12,WLBNEXT + SR R3,R3 + LR R4,R5 + L R7,ASCB + BAL R14,SCRLUP NO, SCROLL SCREEN UP + L R7,ASCB + MVC GLBCUR,SCBADDR UPDATE SCREEN CURRENCY + AP PCUR,=P'1' + L R7,MAXSCB + L R12,WLBNEXT +KRDOWNNR EQU * UPDATE NEW ROW + MVC SCBLB(LLB),LB + ST R12,SCBADDR + SR R3,R3 + BAL R14,PUTLINE + MVI SCBMOD,FALSE + AP PCURLINE,=P'1' + B KRDOWNXT +KRDOWNAR EQU * + AH R5,=AL2(ROWINC) + AH R7,=AL2(LSCB) + ST R5,LASTROW + ST R7,LASTSCB + B KRDOWNNR +KRDOWNRW EQU * MOVE CURSOR DOWN ROW + AP PCURLINE,=P'1' + AH R5,=AL2(ROWINC) + AH R7,=AL2(LSCB) +KRDOWNXT EQU * + BAL R14,SETCUR + BAL R14,CHKMARK + L R14,KRSV14 + BR R14 +KRLEFT EQU * CURSOR LEFT + ST R14,KRSV14 + MVI DIRNEW,DIRLEFT + BAL R14,KRCHKBOX + BCTR R6,0 + SP PCOL,=P'1' + BNZ KRLEFT1 + LA R6,79 + ZAP PCOL,=P'80' +KRLEFT1 EQU * + BAL R14,SETCUR + L R14,KRSV14 + BR R14 +KRRIGHT EQU * CURSOR RIGHT + ST R14,KRSV14 + MVI DIRNEW,DIRRIGHT + BAL R14,KRCHKBOX + AP PCOL,=P'1' + LA R6,1(R6) + CH R6,=AL2(79) + BNH KRRIGHT1 + ZAP PCOL,=P'1' + LA R6,0 +KRRIGHT1 EQU * + BAL R14,SETCUR + L R14,KRSV14 + BR R14 +KRCHKBOX EQU * SET BOX CHAR AT CURSOR IF BOX MODE + SR R1,R1 + IC R1,DIRLAST + MVC DIRLAST,DIRNEW + CLI BOX,TRUE + BNER R14 + ST R14,KRBXSV14 + IC R0,REVDIR(R1) + STC R0,REVLAST SAVE REVERSE OF LAST DIRECTION + SLL R1,2 + LA R2,DIRTAB(R1) SELECT TABLE ROW BASED ON 4*DIRLAST + IC R1,DIRNEW + IC R1,0(R1,R2) R1 = DIRECTION KEY INDEX + L R2,BOXSETA + IC R1,0(R1,R2) R1 = KEY FROM INDEXED SET + STC R1,KEY SELECT KEY FROM BOXSET(NEWDIR,OLDDIR) + CLI CONNECT,TRUE + BNE KRCHKBOK KEY OK IF NOT IN CONNECT MODE + CLM R6,1,SCBCOL + BNL KRCHKBOK KEY OK IF NO PREVIOUS CHARACTER AT CURSOR + SR R0,R0 + IC R0,SCBLINE(R6) + SH R0,=AL2(179) R0 = GRAPHIC CHAR. INDEX + BM KRCHKBOK KEY OK IF CHAR AT CURSOR < FIRST GRAPHIC + CLM R0,1,=AL1(218-179) + BH KRCHKBOK KEY OK IF CHAR AT CURSOR > LAST GRAPHIC + CL R2,=A(BOXSET1) IS CURRENT BOX SET SINGLE LINE + BNE KRCHKBS2 + LA R2,BOXCON R2 = BOXCON( SINGLE BOX SET) + B KRCHKBCN +KRCHKBS2 EQU * + CL R2,=A(BOXSET2) IS CURRENT BOX SET DOUBLE LINE + BNE KRCHKBOK NO, KEY OK AS IS + LA R2,BOXCON+4 R2 = BOXCON( DOUBLE BOX SET) +KRCHKBCN EQU * USE BOX CONNECT TABLE TO CONNECT NEW DIR + SLL R0,3 + LR R1,R2 + AR R1,R0 R1 = A(BOXCON(S/D SET, OLD CHAR)) + SR R0,R0 + IC R0,DIRNEW + AR R1,R0 R1 = A(BOXCON(S/D SET, OLD CHAR, NEWDIR)) + IC R0,0(R1) + SH R0,=AL2(179) CONVERT NEW KEY TO INDEX + SLL R0,3 REPEAT PROCESS TO CONNECT OLD DIR LINE + LR R1,R2 + AR R1,R0 + SR R0,R0 + IC R0,REVLAST USE REVERSE OF OLD DIR TO SHARE BOXCON + AR R1,R0 + IC R0,0(R1) + STC R0,KEY SET NEW GRAPHIC CHAR WITH CONNECTIONS +KRCHKBOK EQU * + BAL R14,KRSETCHR STORE KEY AT CURSOR +KRCHKBX1 EQU * + LA R0,X'0100' + SVC KEYBOARD + STCM R0,4,PWORK + TM PWORK,X'40' IS THERE ANOTHER KEY WAITING + BNZ KRCHKBX2 NO, PROCEED + LA R0,X'0000' + SVC KEYBOARD YES, FLUSH KEY AND TRY AGAIN + B KRCHKBX1 +KRCHKBX2 EQU * + L R14,KRBXSV14 + BR R14 +KRINS EQU * INSERT KEY TOGGLED - UPDATE STATUS LINE + ST R14,KRSV14 + XI KBINS,INSSTATE TOGGLE INS (IGNORE INS STATUS LINE) + BAL R14,KEYSTATS + L R14,KRSV14 + BR R14 +KRDEL EQU * DELETE CHAR OR BLOCK VIA DEL KEY + ST R14,KRSV14 + CLI BLKLABEL,FALSE IS THERE A LABELED BLOCK + BNE KRDELBLK YES, GO DELETE IT +KRDELCHR EQU * + CLM R6,1,SCBCOL IS CURSOR PAST END OF LINE + BNLR R14 YES, IGNORE DELETE KEY + MVI SCBMOD,TRUE LINE MOD + MVI SCRMOD,TRUE SCREEN MOD + SR R1,R1 + IC R1,SCBCOL + BCTR R1,0 + STC R1,SCBCOL UPDATE ENDING COL + LR R4,R1 SAVE COL TO BLANK ON SCREEN + LA R1,2(R1) + SR R1,R6 + LA R2,SCBLINE(R6) + EX R1,MVCLEFT SHIFT TEXT ONLY TO OVERLAY DEL CHAR + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + LA R15,0(R5,R4) DH=ROW,DL=COL OLD LAST CHAR + SVC VIDEO UPDATE CURSOR + LA R0,X'0920' AH=9, AL= ASCII BLANK + LA R1,X'0000' BH=0 PAGE,BL=ATTRIB. + IC R1,ATTRIB BL=ATRIBUTE OF CHAR. + LA R14,1 CX=(COUNT OF CHAR TO WRITE) + SVC VIDEO DISPLAY CHAR + LR R3,R6 + BAL R14,PUTLINE REFRESH LINE TO NEW END OF LINE + BAL R14,SETCUR + L R14,KRSV14 + BR R14 +MVCLEFT MVC 0(0,R2),1(R2) +KRCTLKY EQU * DELETE LABELED BLOCK VIA CTL-K Y + ST R14,KRSV14 + CLI BLKLABEL,FALSE + BER R14 +KRDELBLK EQU * DELETE LABELED BLOCK + LA R1,=CL20'DELETE BLOCK' + BAL R14,PUTMSG + MVI CURDEL,FALSE RESET CURRENT LB DELETE SWITCH + ZAP PBLKCNT,=P'0' + L R12,BLK1LB +KRDELBK1 EQU * CHECK IF CURRENT LB IN BLOCK + AP PBLKCNT,=P'1' + CL R12,GLBCUR IS CURRENT LINE BEING DELETED + BNE KRDELBKC + MVI CURDEL,TRUE YES, SET SWITCH +KRDELBKC EQU * + CL R12,BLK2LB + BE KRDELBK2 OK, GO DELETE BLOCK + MVC WLBNEXT,LBNEXT GET NEXT LB TO DUP. + L R12,WLBNEXT + LTR R12,R12 + BNZ KRDELBK1 + LA R1,=CL20'BLOCK NOT FOUND' + BAL R14,PUTMSG + B KRDEXIT +KRDELBK2 EQU * OK TO DELETE BLOCK + MVI SCRMOD,TRUE SET SCREEN MOD + L R12,BLK1LB + MVC WLBPREV,LBPREV GET PREV. FROM FIRST BLOCK + L R12,BLK2LB + BAL R14,CHKADDR + MVC WLBNEXT,LBNEXT GET NEXT FROM LAST BLOCK + MVC LBNEXT,AFREELB CHAIN FREE QUEUE TO LAST + MVC AFREELB,BLK1LB SET FREE QUEUE TO FIRST + L R12,WLBPREV + LTR R12,R12 + BZ KRDELFST GO SET NEW FIRST LB + BAL R14,CHKADDR + MVC LBNEXT,WLBNEXT CHAIN PREV TO NEXT + B KRDELCKL +KRDELFST EQU * + MVC GLBFIRST,WLBNEXT RESET FIRST PAST BLOCK +KRDELCKL EQU * + L R12,WLBNEXT + LTR R12,R12 + BZ KRDELLST + SP PLSTLINE,PBLKCNT + BAL R14,CHKADDR + MVC LBPREV,WLBPREV CHAIN NEXT TO PREV + B KRDELCUR +KRDELLST EQU * + MVC GLBLAST,WLBPREV RESET LAST TO PREV + ZAP PLSTLINE,PCURBLK1 + SP PLSTLINE,=P'1' +KRDELCUR EQU * + CLI CURDEL,TRUE IS CURRENT LB DELETED + BNE KRDEXIT NO, EXIT WITH DISPLAY REQ. + ZAP PCUR,PCURBLK1 + SP PCUR,=P'1' + MVC GLBCUR,WLBPREV YES, TRY PREV + CLC GLBCUR,=A(0) IS PREV ZERO + BNE KRDEXIT NO, EXIT + ZAP PCUR,=P'1' + MVC GLBCUR,WLBNEXT YES, TRY NEXT +KRDEXIT EQU * + MVI BLKLABEL,FALSE RESET LABEL + MVC STATBLK,=C' ' + LA R3,STATBLK + LA R4,L'STATBLK + BAL R14,PUTSTAT + BAL R14,AUDITMS + BAL R14,PUTPCT + BAL R14,DISPLAY + L R14,KRSV14 + BR R14 +KRCR EQU * CARRIAGE RETURN (ENTER) + ST R14,KRCRSV14 + CLI KBINS,INSSTATE INSERT MODE + BE KRINSLN YES GO INSERT LINE + BAL R14,KRDOWN NO, MOVE DOWN LINE + B KRINSEXT EXIT +KRINSLN EQU * INSERT LINE + L R12,SCBADDR + BAL R14,GETNEWLB GET FREE LB IN EXT. MEMORY + L R14,KRCRSV14 + LTR R15,R15 + BNZR R14 IGNORE REQUEST IF NO ROOM + AP PLSTLINE,=P'1' + MVI FILEMOD,TRUE SET FILE CHANGE + MVI SCRMOD,TRUE SET SCREEN MODE + LTR R6,R6 + BNZ KRINSAFT IF NOT COL 0, INSERT AFTER CURRENT LINE + L R12,SCBPREV + LTR R12,R12 + BNZ KRINSPRE IF NOT FIRST, INSERT AFTER PREV. LINE +KRINSFST EQU * ELSE MAKE NEW LINE FIRST LINE + MVC GLBFIRST,ANEWLB RESET FIRST LB POINTER + MVC GLBCUR,ANEWLB RESET CURRENT LB POINTER + MVC WLBPREV,=A(0) SET NO PREV. + MVC WLBNEXT,SCBADDR CHAIN OLD CURRENT TO NEW + BAL R14,SCRLDOWN SCROLL DOWN AND ADJUST SCB'S + BAL R14,KRINSWLB CREATE NULL LB AND UPDATE SCB'S + B KRINSEXT +KRINSPRE EQU * + LTR R5,R5 IS THIS FIRST LINE + BNZ KRINSSKC NO, LEAVE CURRENT LINE ON SCREEN + SP PCUR,=P'1' + SP PCURLINE,=P'1' + MVC GLBCUR,SCBPREV YES, MOVE PREV. LINE TO TOP LINE + MVC WLBPREV,SCBPREV CHAIN NEW LINE TO PREV. LB + MVC WLBNEXT,SCBADDR + BAL R14,SCRLDOWN MOVE FIRST TWO LINES DOWN + BAL R14,SCRLDOWN + L R12,GLBCUR + MVC SCBLB(LLB),LB + ST R12,SCBADDR + SR R3,R3 + BAL R14,PUTLINE + MVI SCBMOD,FALSE + LA R5,ROWINC(R5) RESET CURSOR TO SECOND LINE + LA R7,LSCB(R7) + BAL R14,KRINSWLB INSERT NEW LB AND UPDATE SCB + B KRINSEXT +KRINSSKC EQU * LINK BETWEEN PREV AND CURRENT + MVC WLBPREV,SCBPREV + MVC WLBNEXT,SCBADDR + BAL R14,SCRLDOWN SCROLL DOWN + BAL R14,KRINSWLB INSERT NEW LB AND UPDATE SCB + B KRINSEXT +KRINSAFT EQU * LINK BETWEEN CURRENT AND NEXT + CLC SCBNEXT,=A(0) IS NEW LINE AT END + BNE KRINSANL NO, SKIP UPDATE TO LAST + MVC GLBLAST,ANEWLB +KRINSANL EQU * + MVC WLBPREV,SCBADDR + MVC WLBNEXT,SCBNEXT + CL R5,MAXROW + BL KRINSASD IF NOT LAST ROW, SCROLL DOWN +KRINSASU EQU * SCROLL UP FOR NEW LINE ON LAST ROW + LA R3,0 + LR R4,R5 + ST R7,SAVESCB + L R7,ASCB + BAL R14,SCRLUP IF LAST LINE, SCROLL UP + L R7,SAVESCB + AP PCURLINE,=P'1' + BAL R14,KRINSWLB INSERT NEW LB AND UPDATE SCB + B KRINSEXT +KRINSASD EQU * SCROLL DOWN AND INSERT NEW ROW + LA R5,ROWINC(R5) MOVE TO NEXT ROW + AP PCURLINE,=P'1' + LA R7,LSCB(R7) + BAL R14,SCRLDOWN + BAL R14,KRINSWLB +KRINSEXT EQU * + LA R6,0 + ZAP PCOL,=P'1' + CLI HTMODE,TRUE + BNE KRSKPHT + BAL R14,KRHT TAB +KRSKPHT EQU * + BAL R14,PUTPCT + BAL R14,SETCUR RESET CURSOR ON NEW INSERTED LINE + CLI KBINS,INSSTATE IS INSERT ON + BNE KRSKPDN NO, SKIP EXTRA DOWN + CLC LASTKEY,KEY WAS LAST KEY ALSO CR TO INSERT + BNE KRSKPDN YES, MOVE CURSOR DOWN TO PREV INSERT + BAL R14,KRDOWN +KRSKPDN EQU * + BAL R14,AUDITMS + L R14,KRCRSV14 + BR R14 + TITLE 'KRINSWLB - CREATE NULL WLB AND UPDATE LB'S AND SCB' +KRINSWLB EQU * + ST R14,INSCSV14 + MVC WLBLINE,=AL1(ASCCR,ASCLF) SET TEXT TO NULL LINE + MVC SCBADDR,ANEWLB + MVC SCBLB,WLB MOVE NEW LB INTO CURRENT SCB + MVI SCBCOL,0 + MVI SCBMOD,FALSE + L R12,ANEWLB + BAL R14,CHKADDR + MVC LB(LLB),WLB INIT NEW LB +KRINSWLN EQU * + L R12,WLBNEXT + LTR R12,R12 + BZ KRINSWLP + BAL R14,CHKADDR + MVC LBPREV,ANEWLB CHAIN NEXT LB BACK TO NEW LB + LA R1,LSCB(R7) + CL R1,MAXSCB IS THERE A NEXT SCB + BH KRINSWLP + MVC SCBPREV-SCB(4,R1),ANEWLB ALSO UPDATE NEXT SCB +KRINSWLP EQU * + L R12,WLBPREV + LTR R12,R12 + BZ KRINSWLE + BAL R14,CHKADDR + MVC LBNEXT,ANEWLB CHAIN PREV LB TO NEW LB + LR R1,R7 + SH R1,=AL2(LSCB) + CL R1,ASCB IS THERE A PREV SCB + BL KRINSWLE + MVC SCBNEXT-SCB(4,R1),ANEWLB ALSO UPDATE PREV SCB +KRINSWLE EQU * + L R14,INSCSV14 + BR R14 + TITLE 'SCRLDOWN - SCROLL SCREEN DOWN 1 LINE' +* +* SCROLL SCREEN DOWN FROM CURRENT ROW TO MAXROW +* +SCRLDOWN EQU * + ST R14,SCRLSV14 + CL R5,MAXROW IS CURRENT ROW = LAST ROW + BE SCRLDWN1 YES, GO CLEAR LINE + LA R0,X'0701' SCROLL DOWN 1 LINE + LR R14,R5 CX = STARTING ROW,COL + L R15,=A(SCRLEND) DX = ENDING ROW,COL + LA R1,0 + ICM R1,B'0010',ATTRIB + SVC VIDEO + L R1,MAXSCB + B SCRLDWNS +SCRLDWN1 EQU * + LR R3,R5 + BAL R14,CLRLINE +SCRLDWNS EQU * + CLC LASTROW,MAXROW IS LAST ROW ACTIVE + BL SCRLSKPU NO, IGNORE + CLI SCBMOD-SCB(R1),TRUE HAS IT CHANGED + BNE SCRLSKPU NO, THROW AWAY + L R12,SCBADDR-SCB(R1) YES, UPDATE MEMORY + BAL R14,CHKADDR + MVC LB(LLB),SCBLB-SCB(R1) SAVE UPDATED LAST LINE +SCRLSKPU EQU * + L R2,=A(22*ROWINC) ROW BEING MOVED DOWN + SH R1,=AL2(LSCB) +SCRLSHFT EQU * + CR R2,R5 + BL SCRLUPLT + MVC LSCB(LSCB,R1),0(R1) MOVE SCB DOWN ONE + SH R1,=AL2(LSCB) + SH R2,=AL2(ROWINC) + B SCRLSHFT +SCRLUPLT EQU * UPDATE LAST ROW + L R1,LASTROW + LA R1,ROWINC(R1) + CL R1,MAXROW + BH SCRLEXIT + ST R1,LASTROW + L R1,LASTSCB + LA R1,LSCB(R1) + ST R1,LASTSCB +SCRLEXIT EQU * + L R14,SCRLSV14 + BR R14 + TITLE 'SCRLUP - SCROLL SCREEN UP 1 LINE' +* +* R3 - STARTING ROW +* R4 - ENDING ROW +* R7 - STARTING SCB +* +SCRLUP EQU * + ST R14,SCRLSV14 + CLR R3,R4 DON'T SCROLL 1 LINE + BE SCRLUP1 + LA R0,X'0601' SCROLL DOWN 1 LINE + LA R14,0(R3) CX = STARTING ROW,COL + LA R15,79(R4) DX = ENDING ROW,COL + LA R1,0 + ICM R1,B'0010',ATTRIB + SVC VIDEO + B SCRLUPSS +SCRLUP1 EQU * + BAL R14,CLRLINE CLEAR ROW R3 ON SCREEN +SCRLUPSS EQU * + CLI SCBMOD,TRUE HAS IT CHANGED + BNE SCRLUPSK NO, THROW AWAY + L R12,SCBADDR YES, UPDATE MEMORY + BAL R14,CHKADDR + MVC LB(LLB),SCBLB SAVE UPDATED FIRST LINE +SCRLUPSK EQU * + LA R2,ROWINC(R3) ROW BEING MOVED UP +SCRLUPSH EQU * + CR R2,R4 + BH SCRLUPEX + MVC 0(LSCB,R7),LSCB(R7) MOVE SCB UP ONE + LA R7,LSCB(R7) + LA R2,ROWINC(R2) + B SCRLUPSH +SCRLUPEX EQU * + L R14,SCRLSV14 + BR R14 + TITLE 'CLRLINE - CLEAR ROW R3 ON SCREEN' +CLRLINE EQU * + ST R14,CLRLSV14 + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + LR R15,R3 DH=ROW,DL=COL + SVC VIDEO SET CURSOR TO UPPER LEFT CORNER + LA R0,X'0920' AH=10, AL=SPACE + LA R1,X'0000' BH=0 PAGE,BL=ATTRIB. + IC R1,ATTRIB + LA R14,80 CHARACTERS ON DATA LINES + SVC VIDEO CLEAR DATA LINES + L R14,CLRLSV14 + BR R14 +KRHOME EQU * HOME + ST R14,KRSV14 + MVC GLBCUR,GLBFIRST + ZAP PCUR,=P'1' + BAL R14,DISPLAY + L R14,KRSV14 + BR R14 +KREND EQU * END + MVC GLBCUR,GLBLAST + ZAP PCUR,PLSTLINE + B KRPGUP +KRSHF6 EQU * SHIFT F6 (DELETE LINE) + ST R14,KRSV14 + SP PLSTLINE,=P'1' + MVI FILEMOD,TRUE + L R12,SCBADDR ERR 8 + MVC WLB(8),LB + LA R0,12 ************************* + LA R1,WLB VALIDATE SCB/LB MATCH + LA R2,SCBLB ************************* + CLC WLB(8),SCBLB + BNE AUDITBUG SCB PREV/NEXT NE LB PREV/NEXT + BAL R14,CHKADDR + MVC LBNEXT,AFREELB CHAIN FREE QUEUE TO LB + ST R12,AFREELB POINT TO DELETED LB + L R12,WLBPREV + LTR R12,R12 + BZ KRSHF6F GO UPDATE FIRST LB POINTER + BAL R14,CHKADDR + MVC LBNEXT,WLBNEXT SET NEXT IN PREV. LB + LTR R5,R5 + BZ KRSHF6N GO UDATE PREV POINTER + LR R1,R7 + SH R1,=AL2(LSCB) + MVC SCBNEXT-SCB(4,R1),WLBNEXT + B KRSHF6N +KRSHF6F EQU * + MVC GLBFIRST,WLBNEXT UPDATE FIRST LB POINTER +KRSHF6N EQU * + L R12,WLBNEXT + LTR R12,R12 + BZ KRSHF6L IF LAST GO UPDATE LAST LB POINTER + BAL R14,CHKADDR + MVC LBPREV,WLBPREV SET PREV IN NEXT LB + CL R5,MAXROW + BNL KRSHF6E + LA R1,LSCB(R7) + MVC SCBPREV-SCB(4,R1),WLBPREV + B KRSHF6E +KRSHF6L EQU * + MVC GLBLAST,WLBPREV UPDATE LAST LB POINTER +KRSHF6E EQU * + CLC GLBCUR,SCBADDR IS CURRENT LINE BEING DELETED + BNE KRSHF6EX NO, EXIT + MVC GLBCUR,WLBNEXT YES, TRY NEXT + CLC GLBCUR,=A(0) IS NEXT NULL + BNE KRSHF6EX NO, EXIT + SP PCUR,=P'1' + MVC GLBCUR,WLBPREV YES, TRY PREV. + CLC GLBCUR,=A(0) IS FILE NOW EMPTY + BNE KRSHF6ND NO, GO DISPLAY PREV. LINE + BAL R14,NEWFILE YES, CREATE NULL FILE +KRSHF6ND EQU * + BAL R14,DISPLAY + B KRSHF6SC +KRSHF6EX EQU * + ST R5,SAVEROW + ST R7,SAVESCB + LR R3,R5 + L R4,MAXROW + BAL R14,SCRLUP SCROLL SCREEN UP OVERLAYING DEL LINE + LA R6,0 RESET COLUMN + ZAP PCOL,=P'1' + CLC LASTSCB,MAXSCB WAS LAST ROW ACTIVE + BL KRSHF6NL NO, GO REDUCE LAST ROW POINTER + L R7,MAXSCB + L R12,SCBNEXT + LTR R12,R12 IS THERE NEW LINE FOR LAST ROW + BZ KRSHF6NL NO, GO DECREMENT LAST ROW + MVC SCBLB(LLB),LB MOVE IN NEW LAST LINE + ST R12,SCBADDR + MVI SCBMOD,FALSE + SR R3,R3 + L R5,MAXROW + BAL R14,PUTLINE DISPLAY NEW LAST LINE + B KRSHF6XT +KRSHF6NL EQU * UPDATE NEW LAST ROW + L R5,LASTROW + L R7,LASTSCB + SH R5,=AL2(ROWINC) + SH R7,=AL2(LSCB) + ST R5,LASTROW + ST R7,LASTSCB +KRSHF6XT EQU * + L R5,SAVEROW + L R7,SAVESCB + CL R5,LASTROW + BNH KRSHF6SC + SP PCURLINE,=P'1' + L R5,LASTROW + L R7,LASTSCB +KRSHF6SC EQU * + BAL R14,AUDITMS + BAL R14,PUTPCT + BAL R14,SETCUR + L R14,KRSV14 + BR R14 +KRF3 EQU * F3 (START OF LINE) + ST R14,KRSV14 + LA R6,0 + ZAP PCOL,=P'1' + BAL R14,SETCUR + L R14,KRSV14 + BR R14 +KRF4 EQU * F4 (END OF LINE) + ST R14,KRSV14 + IC R6,SCBCOL + CH R6,=AL2(79) + BNH KRF4SKPL + BCTR R6,0 +KRF4SKPL EQU * + CVD R6,PWORK + ZAP PCOL,PWORK + AP PCOL,=P'1' + BAL R14,SETCUR + L R14,KRSV14 + BR R14 +KRF5 EQU * F5 (LABEL BLOCK) + ST R14,KRSV14 + CLI BLKLABEL,FALSE + BE KRF5MARK IF FALSE, SET MARK + CLI BLKLABEL,MARK IF MARK, SET TRUE + BE KRF5TRUE + MVI BLKLABEL,FALSE ELSE, TURN BLOCK LABEL BACK OFF + MVC STATBLK,=C' ' + LA R3,STATBLK + LA R4,L'STATBLK + BAL R14,PUTSTAT + BAL R14,DISPLAY REMOVE MARKED LINES FROM SCREEN +KRF5EXIT EQU * + L R14,KRSV14 + BR R14 +KRF5MARK EQU * + LA R1,=CL20'MARKING BLOCK' + BAL R14,PUTMSG + MVI BOX,FALSE TURN OFF BOX GRAPHICS + MVI BLKLABEL,MARK + MVC STATBLK,=C'BLK' + LA R3,STATBLK + LA R4,L'STATBLK + BAL R14,PUTSTAT + BAL R14,CHKMARK + MVC BLK1LB,SCBADDR + ZAP PCURBLK1,PCURLINE + B KRF5EXIT +KRF5TRUE EQU * + LA R1,=CL20'POSITIONING BLOCK' + BAL R14,PUTMSG + MVI BLKLABEL,TRUE + MVC BLK2LB,SCBADDR + B KRF5EXIT +KRF6 EQU * F6 (DUPLICATE BLOCK) + ST R14,KRSV14 + CLI BLKLABEL,TRUE + BNE KRF6NOTD NO DUP IF NO BLOCK DEFINED CURRENTLY + MVC PREVDUP,SCBPREV + L R12,BLK1LB +KRF6L1 EQU * CHECK IF CHAINED LB IN BLOCK + CL R12,BLK2LB + BE KRF6OK OK, GO DUPLICATE + CL R12,PREVDUP + BE KRF6NOTD NO DUP IF INSIDE BLOCK + MVC WLBNEXT,LBNEXT GET NEXT LB TO DUP. + L R12,WLBNEXT + LTR R12,R12 + BNZ KRF6L1 +KRF6NOTD EQU * NO DUP DUE TO NO BLK OR INSIDE BLK + LA R1,=CL20'NO DUP - INV. REQ.' + BAL R14,PUTMSG + L R14,KRSV14 + BR R14 +KRF6OK EQU * OK TO DUPLICATE + LA R1,=CL20'DUPLICATING BLOCK' + BAL R14,PUTMSG + MVC STATBLK,=C' ' + LA R3,STATBLK + LA R4,L'STATBLK + BAL R14,PUTSTAT + MVI BLKLABEL,FALSE TURN OFF BLOCK + MVI FILEMOD,TRUE SET FILE CHANGE + BAL R14,UPDATE UPDATE MS FROM SCREEN BEFORE COPY + MVC SAVENEXT,SCBADDR SAVE NEXT TO STORE IN LAST + MVC NEXTBLK,BLK1LB +KRF6DUP EQU * + BAL R14,GETNEWLB + LTR R15,R15 + BNZ KRF6LAST IF NO MORE LB'S, GO FINISH LAST LB + AP PLSTLINE,=P'1' + LTR R5,R5 + BNZ KRF6SKPC IF INSERTING BEFORE FIRST LINE, + AP PCUR,=P'1' INCR CURRENT LINE COUNTERS + AP PCURLINE,=P'1' +KRF6SKPC EQU * + L R12,NEXTBLK + MVC WLB(LLB),LB GET FIRST LB TO DUP + MVC WLBPREV,PREVDUP + L R12,ANEWLB + BAL R14,CHKADDR + MVC LB(LLB),WLB COPY TO NEW LB + L R12,WLBPREV + LTR R12,R12 + BNZ KRF6DUPP + MVC GLBFIRST,ANEWLB RESET FIRST LB + B KRF6DUPN +KRF6DUPP EQU * CHAIN PREVIOUS + BAL R14,CHKADDR + MVC LBNEXT,ANEWLB SET NEXT IN PREV LB +KRF6DUPN EQU * + MVC PREVDUP,ANEWLB + L R12,NEXTBLK + CL R12,BLK2LB IS THIS LAST BLOCK + BE KRF6LAST YES, GO SET NEXT POINTER + MVC NEXTBLK,LBNEXT NEXT BLOCK TO DUP + B KRF6DUP +KRF6LAST EQU * + L R12,PREVDUP + BAL R14,CHKADDR + MVC LBNEXT,SAVENEXT SET NEXT IN LAST LB + L R12,SAVENEXT + BAL R14,CHKADDR + MVC LBPREV,PREVDUP SET PREV IN NEXT LB + BAL R14,AUDITMS + BAL R14,PUTPCT + BAL R14,DISPLAY + L R14,KRSV14 + BR R14 +KRF7 EQU * F7 (SEARCH) + ST R14,KRSV14 + LA R1,=CL20'KEY=' + BAL R14,PUTMSG + LA R1,4 SET STARTING COL IN STATMSG + BAL R14,GETWORD GET SEARCH KEY + CLI LWORD,L'WORD + BNL KRF7ABT2 EXIT NOW IF LENGTH ZERO OR ABORTED + MVC LKEYWORD,LWORD + MVC KEYWORD,WORD + XC FINDKEY,FINDKEY CLEAR TRT TABLE + MVI FINDKEY+ASCLF,ASCLF SET END OF RECORD TRAP + SR R1,R1 + IC R1,KEYWORD + STC R1,FINDKEY(R1) SET TRAP FOR FIRST CHAR. + LA R6,20 + BAL R14,SETCUR + LA R1,=CL20'REPLACE Y/N/G (CR=N)' + BAL R14,PUTMSG + BAL R14,GETKEY + MVC WLBNEXT,SCBADDR + MVC PCURSRCH,PCURLINE + SP PCURSRCH,=P'1' + MVI REPLACE,FALSE ASSUME NO REPLACE + MVI GLOBAL,FALSE ASSUME NO GLOBAL REPLACE + OI KEY,X'20' + CLI KEY,X'79' IS THIS A Y + BE KRF7REP YES, GO GET REPLACE WORD + CLI KEY,X'67' IS THIS A G (GLOBAL SERACH AND REPLACE) + BNE KRF7STRT NO, GO SEARCH ONLY + MVI GLOBAL,TRUE YES, SET GLOBAL REPLACE +KRF7REP EQU * + LA R1,=CL20'REP=' + BAL R14,PUTMSG + LA R1,4 + BAL R14,GETWORD GET REPLACE WORD IN WORD + CLI LWORD,X'AB' + BE KRF7ABT2 EXIT IF GETWORD ABORT + MVC LREPWORD,LWORD + MVC REPWORD,WORD SAVE IN REPWORD + MVI REPLACE,TRUE SET REPLACE MODE +KRF7STRT EQU * + BAL R14,UPDATE UPDATE FROM SCREEN BEFORE SEARCH + LA R1,=CL20'SEARCHING' + CLI REPLACE,TRUE + BNE KRF7SRCH + LA R1,=CL20'REPLACING' +KRF7SRCH EQU * + BAL R14,PUTMSG + LA R7,100 +KRF7NXTL EQU * START SEARCH OF NEXT LINE + L R12,WLBNEXT + LTR R12,R12 + BZ KRF7NOTF EXIT IF NOT FOUND + AP PCURSRCH,=P'1' + MVC WLB(LLB),LB MOVE NEXT LB TO WLB + SR R3,R3 + LA R1,WLBLINE + BCT R7,KRF7NXTC + LA R0,X'0100' + SVC KEYBOARD + STCM R0,4,PWORK STORE LOW FLAGS + TM PWORK,X'40' IS THERE A KEY WAITING + BZ KRF7ABT1 YES, ABORT NOT FOUND + LA R7,100 + MVC STATREC,=X'402020202020' UPDATE LINE BEING SEARCHED + ED STATREC,PCURSRCH + ZAP PCURLINE,PCURSRCH + LA R3,STATREC + LA R4,L'STATREC + BAL R14,PUTSTAT + SR R3,R3 + LA R1,WLBLINE +KRF7NXTC EQU * SEARCH TO NEXT MATCHING FIRST CHAR. + TRT 0(L'WLBLINE,R1),FINDKEY FIRST CHAR. FOUND + CLM R2,1,=AL1(ASCLF) IS THIS END OF RECORD + BE KRF7NXTL YES, NEXT LINE + IC R3,LKEYWORD + EX R3,CLCKEYW DOES ENTIRE KEYWORD MATCH + BE KRF7HIT YES, EXIT WITH MATCHING LINE AT TOP + LA R1,1(R1) NO, SKIP MATCHING CHARACTER + B KRF7NXTC REPEAT SEARCH TO END OF LINE +KRF7HIT EQU * KEY FOUND + ST R12,GLBCUR MOVE LINE TO TOP OF SCREEN + MVC PCUR,PCURSRCH + CLI REPLACE,TRUE + BNE KRF7EXIT + MVI FILEMOD,TRUE RELEASE 1.4 FIX **************** + LA R4,1(R1,R3) R4=A(TEXT BEYOND KEY IN WLBLINE) + MVC SAVETEXT,0(R4) + LA R2,WLBLINE+L'WLBLINE-2 + SR R2,R1 R2 = L'REMAINING TEXT IN WLBLINE-2 + LR R4,R1 ASSUME NO REP + CLI LREPWORD,X'FF' IS THERE ANY REP + BE KRF7MTXT NO, GO OVERLAY KEY WTTH TEXT + IC R3,LREPWORD + SR R2,R3 R2 = L'TEXT BEYOND REP IN WLBLINE-1 + BM KRF7HITE DON'T REPLACE IF IT WON'T FIT + EX R3,MVCREP MOVE REP OVER KEY + LA R4,1(R1,R3) R4 = A(TEXT BEYOND REP) +KRF7MTXT EQU * + EX R2,MVCTXT MOVE REMAINING TEXT BEHIND REP + BAL R14,CHKADDR + MVC LB(LLB),WLB UPDATE LB WITH REPLACEMENT +KRF7HITE EQU * + CLI GLOBAL,TRUE + BNE KRF7EXIT + LA R1,1(R1) + B KRF7NXTC +KRF7ABT1 EQU * + LA R0,X'0000' FLUSH INTERRUPT KEY + SVC KEYBOARD +KRF7ABT2 EQU * + LA R1,=CL20'ABORT SEARCH' + BAL R14,PUTMSG + B KRF7EXIT +KRF7NOTF EQU * + LA R1,=CL20'NOT FOUND' + BAL R14,PUTMSG +KRF7EXIT EQU * + BAL R14,AUDITMS + BAL R14,DISPLAY + L R14,KRSV14 + BR R14 +CLCKEYW CLC 0(0,R1),KEYWORD COMPARE ENTIRE KEYWORD +MVCREP MVC 0(0,R1),REPWORD MOVE REP OVERLAYING KEY +MVCTXT MVC 0(0,R4),SAVETEXT MOVE REMAINING TEXT BEHIND REP + TITLE 'GETWORD - READ STRING FROM KEYBOARD WORD' +* +* R1 = STARTING COL IN STATMSG +* LWORD = LENGTH - 1 OR X'FF' IF NONE OR X'AB' IF ABORTED +* +GETWORD EQU * + ST R14,GETWSV14 + ST R5,SAVEROW + ST R6,SAVECOL + LR R6,R1 + BAL R14,SETCUR UPDATE LINE AND COL BEFORE CHANGING + L R5,STATROW + LA R3,WORD + LA R4,L'WORD +GETWLOOP EQU * + STM R3,R4,GETWSV34 + BAL R14,SETCUR + LA R0,X'0920' AH=9, AL= ASCII BLANK + LA R1,X'0000' BH=0 PAGE,BL=ATTRIB. + IC R1,ATTRIB BL=ATRIBUTE OF CHAR. + LA R14,1 CX=(COUNT OF CHAR TO WRITE) + SVC VIDEO DISPLAY BLANK AT CURSOR + BAL R14,GETKEY + LM R3,R4,GETWSV34 + CLI KEY,ASCBS + BNE GETWCHKA + CL R3,=A(WORD) + BNH GETWLOOP IGNORE BS IF AT BEGINNING + BCTR R3,0 + LA R4,1(R4) + BCTR R6,0 + B GETWLOOP +GETWCHKA EQU * + CLI KEY,ASCCR + BE GETWOK + CLI KEY,X'20' + BL GETWQUIT + CLI KEY,X'80' + BNL GETWQUIT + LA R1,STATMSG(R6) + MVC 0(1,R1),KEY + LA R0,X'0900' AH=9 + LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.(WHITE ON BLUE) + IC R1,ATTRIB BL=ATRIBUTE OF CHAR. + LA R14,1 CX=(COUNT CHAR) + IC R0,KEY AL=CHAR + SVC VIDEO DISPLAY CHAR + LA R6,1(R6) + MVC 0(1,R3),KEY + LA R3,1(R3) + BCT R4,GETWLOOP +GETWQUIT EQU * + MVI LWORD,X'AB' + B GETWEXIT +GETWOK EQU * + LA R3,L'WORD-1 + SR R3,R4 + STC R3,LWORD SAVE LENGTH (X'FF' = NO CHAR) +GETWEXIT EQU * + L R5,SAVEROW + L R6,SAVECOL + BAL R14,SETCUR + L R14,GETWSV14 + BR R14 +KRF8 EQU * REPEAT F7 SEARCH + ST R14,KRSV14 + MVC WLBNEXT,SCBNEXT + ZAP PCURSRCH,PCURLINE + B KRF7STRT +KRF9 EQU * SELECT COLOR + ST R14,KRSV14 + SR R1,R1 + IC R1,ATTRIB + LR R2,R1 + N R1,=X'000000F0' R1 = LEFT NIBBLE * 16 + N R2,=X'0000000F' R2 = RIGHT NIBBLE + ST R5,SAVEROW + ST R6,SAVECOL + LA R6,15 +KRF9LOOP EQU * + LA R0,0(R1,R2) + STC R0,ATTRIB UPDATE ATTRIB + STM R1,R2,KRF9SV12 SAVE R1-R2 ACROSS I/O + MVC STATMSG,=CL20'COLOR BRGBIRGB' + BAL R14,DHEXATT + LA R3,STATMSG + LA R4,L'STATMSG + BAL R14,PUTSTAT + L R5,STATROW + LA R15,0(R5,R6) + LA R0,X'0200' AH=2 SET CURSOR + LA R1,0 BH=0 PAGE + SVC VIDEO + L R5,SAVEROW + BAL R14,GETKEY GET NEXT KEY (CR,ARROWS,0-9,A-F) + LM R1,R2,KRF9SV12 + CLI KEY,ASCCR CR TO EXIT F9 WITH CURRENT ATTRIB + BE KRF9EXIT + CLI KEY,ASCUP UP ARROW TO INCR CURRENT NIBBLE + BNE KRF9CKDN +KRF9UP EQU * + CLM R6,1,=AL1(15) + BNE KRF9UP2 + LA R1,16(R1) + N R1,=X'000000F0' + B KRF9LOOP +KRF9UP2 EQU * + LA R2,1(R2) + N R2,=X'0000000F' + B KRF9LOOP +KRF9CKDN EQU * + CLI KEY,ASCDOWN DOWN ARROW TO DEC CURRENT NIBBLE + BNE KRF9CHLF + CLM R6,1,=AL1(15) + BNE KRF9DN2 + SH R1,=H'16' + N R1,=X'000000F0' + B KRF9LOOP +KRF9DN2 EQU * + BCTR R2,0 + N R2,=X'0000000F' + B KRF9LOOP +KRF9CHLF EQU * + CLI KEY,ASCLEFT LEFT ARROW TO SELECT LEFT NIBBLE + BNE KRF9CHRG + LA R6,15 + B KRF9LOOP +KRF9CHRG EQU * + CLI KEY,ASCRGHT RIGHT ARROW TO SELECT RIGHT NIBBLE + BNE KRF9HEX + LA R6,16 + B KRF9LOOP +KRF9HEX EQU * + CLI KEY,X'80' + BNL KRF9LOOP + TR KEY,HEXTAB CONVERT ASCII KEY TO 0-F OR FF + CLI KEY,X'FF' + BE KRF9LOOP IGNORE INVALID CHAR. + SR R0,R0 + IC R0,KEY + CLM R6,1,=AL1(15) + BNE KRF9HEX2 + SLL R0,4 + LR R1,R0 SET LEFT NIBBLE + LA R6,16 SWITCH NIBBLE + B KRF9LOOP +KRF9HEX2 EQU * + LR R2,R0 SET RIGHT NIBBLE + LA R6,15 SWITCH NIBBLE + B KRF9LOOP +KRF9EXIT EQU * + LA R0,X'0B00' AH=11 FOR SET COLOR PALETTE (TECH. A-49) + SR R1,R1 + IC R1,ATTRIB + SRL R1,4 + N R1,=X'00000007' SET BACKGROUND T SAME AS ATTRIB + SVC VIDEO + BAL R14,NEWSTAT REFRESH STATUS LINE WITH NEW ATTRIBUTE + L R5,SAVEROW + L R6,SAVECOL + BAL R14,SETCUR + L R14,KRSV14 + BR R14 +DHEXATT EQU * DISPLAY ATTRIBUTE IN HEX + SR R1,R1 + IC R1,ATTRIB + SRL R1,4 + IC R1,HEX(R1) + STC R1,STATMSG+15 + IC R1,ATTRIB + N R1,=X'0000000F' + IC R1,HEX(R1) + STC R1,STATMSG+16 + BR R14 +KRF10 EQU * BOX GRAPHICS + ST R14,KR10SV14 + CLI BOX,TRUE IF BOX MODE ON, TURN IT OFF + BE KRF10OFF ELSE TURN IT ON + MVI BOX,TRUE + MVI BLKLABEL,FALSE TURN OFF BLOCK MODE + MVC STATBLK,=C'BOX' DISPLAY BOX MODE USING BLK IND. + LA R3,STATBLK + LA R4,L'STATBLK + BAL R14,PUTSTAT + CLI KBINS,INSSTATE IF INSERT MODE ON, TURN IT OFF + BNE KRF10EXT + BAL R14,KRINS + B KRF10EXT +KRF10OFF EQU * + MVI BOX,FALSE + MVC STATBLK,=C' ' + LA R3,STATBLK + LA R4,L'STATBLK + BAL R14,PUTSTAT +KRF10EXT EQU * + L R14,KR10SV14 + BR R14 +KRSHF1 EQU * SHIFT F1 (QUICK SAVE) + ST R14,KRSV14 + BAL R14,SAVEFILE SAVE FILE NOW AND RESET FILEMOD + L R14,KRSV14 + BR R14 +KRSHF10 EQU * SWITCH BOX GRAPHIC CHARACTER SET + ST R14,KRSV14 + L R1,BOXSETA ADDRESS OF BOX GRAPHIC CHARACTERS + CLI CONNECT,TRUE + BE KRSHF10A GO TOGGLE SET1/SET2 IN CONNECT MODE + LA R1,8(R1) INCR TO NEXT SET + CL R1,=A(BOXSETE) IS THIS END OF TABLE + BL KRSHF10S + LA R1,BOXSET YES, RESET TO FIRST SET + B KRSHF10S +KRSHF10A EQU * + CL R1,=A(BOXSET1) IF SET1, SWITCH TO SET 2 + BE KRSHF102 +KRSHF101 EQU * + LA R1,BOXSET1 + B KRSHF10S +KRSHF102 EQU * + LA R1,BOXSET2 +KRSHF10S EQU * + ST R1,BOXSETA UPDATE BOX SET POINTER +KRPRTSET EQU * + LA R1,=CL20'BOX CHAR = ' + BAL R14,PUTMSG + L R1,BOXSETA + MVC STATMSG+11(8),0(R1) + MVI STATMSG+19,X'00' + SR R1,R1 + IC R1,ATTRIB + LA R2,STATMSG+11 + L R15,STATROW + LA R15,11(R15) + SVC PRINTTXT PRINT GRAPHIC BOX CHARACTERS + L R14,KRSV14 + BR R14 +KRALTF10 EQU * TOGGLE CONNECT MODE + ST R14,KRSV14 + CLI CONNECT,TRUE + BE KRAF10R + MVI CONNECT,TRUE SET CONNECT ON WITH SINGLE LINE + MVC BOXSETA,=A(BOXSET1) + LA R1,=CL20'CONNECT MODE SET' + BAL R14,PUTMSG + L R14,KRSV14 + BR R14 +KRAF10R EQU * + MVI CONNECT,FALSE + LA R1,=CL20'CONNECT MODE OFF' + BAL R14,PUTMSG + L R14,KRSV14 + BR R14 +KRALTF1 EQU * ALT-F1 PAUSE UNTIL KEY HIT + ST R14,KRWTSV14 + CLI KSMODE,KSREAD + BE KRAF1GET + LA R1,=CL20'PAUSE' + BAL R14,PUTMSG + B KRALTEXT +KRAF1GET EQU * + LA R1,=CL20'PAUSE - PRESS ENTER' + BAL R14,PUTMSG + LA R0,X'0000' + SVC KEYBOARD READ NEXT KEY AND IGNORE +KRALTEXT EQU * + L R14,KRWTSV14 + BR R14 +KRALTF2 EQU * ALT-F2 WAIT A SECOND + ST R14,KRWTSV14 + LA R1,=CL20'WAIT A SECOND' + BAL R14,PUTMSG + CLI KSMODE,KSREAD + BNE KRALTEXT + L R1,=A(3000) SET WAIT LOOP COUNT +KRALTF2L EQU * + BCT R1,KRALTF2L + L R14,KRWTSV14 + BR R14 +KRALTF3 EQU * ENTER DEBUG MODE + ST R14,KRSV14 + SVC TRACE + DC C'BUG ' + BAL R14,NEWSTAT CLEAN UP SCREEN AFTER DEBUG + BAL R14,DISPLAY + L R14,KRSV14 + BR R14 +KRALTF4 EQU * TOGGLE AUDIT MODE + ST R14,KRSV14 + XI AUDIT,TRUE + CLI AUDIT,TRUE + LA R1,=CL20'AUDIT MODE ON' + BE KRAF4MSG + LA R1,=CL20'AUDIT MODE OFF' +KRAF4MSG EQU * + BAL R14,PUTMSG + L R14,KRSV14 + BR R14 +KRALTF5 EQU * GOTO LINE # + ST R14,KRSV14 + LA R1,=CL20'LINE=' + BAL R14,PUTMSG + LA R1,5 + BAL R14,GETWORD + CLI LWORD,L'WORD + BNL KRA5ERR IF LENGTH 0, IGNORE + SR R1,R1 + IC R1,LWORD + EX R1,TRTWORD + BNZ KRA5ERR IF NOT ASCII NUMERIC, IGNORE + EX R1,PCKWORD + OI PWORD+L'PWORD-1,X'0F' CONVERT ASCII DIGIT SIGN + CP PWORD,PLSTLINE IF PAST END, IGNORE + BH KRA5ERR + CP PWORD,=P'1' + BL KRA5ERR IF NOT GE 1, IGNORE + CP PWORD,PCUR + BL KRA5LOW LINE IS BELOW CURRENT LINE + ZAP PWORK,PLSTLINE + SP PWORK,PWORD PWORK IS DISTANCE FROM END + ZAP PWORK1,PWORD + SP PWORK1,PCUR PWORK1 IS DISTANCE FROM CUR + CP PWORK,PWORK1 IS IT SHORTER VIA PCUR OR PLSTLINE + BH KRA5FWD GO FORWARD FROM CURRENT POS. + ZAP PCUR,PLSTLINE + MVC GLBCUR,GLBLAST + B KRA5BAK GO BACKWORD FROM END +TRTWORD TRT WORD(0),NUMERIC TEST WORD FOR NUMERIC LINE # +PCKWORD PACK PWORD,WORD(0) PACK WORD +KRA5LOW EQU * + ZAP PWORK,PCUR + SP PWORK,PWORD PWORK IS DISTANCE FROM CUR + CP PWORK,PWORD IS IT SHORTER FROM START OR CUR + BL KRA5BAK GO BACKWARD FROM CUR + ZAP PCUR,=P'1' + MVC GLBCUR,GLBFIRST +KRA5FWD EQU * GO FORWARD FROM PCUR TO PWORD + CP PCUR,PWORD + BE KRA5EXIT + L R12,GLBCUR + MVC WLBNEXT,LBNEXT + CLC WLBNEXT,=A(0) + BE KRA5ERR ERROR IF EOF FOUND + AP PCUR,=P'1' + MVC GLBCUR,WLBNEXT + B KRA5FWD +KRA5BAK EQU * GO BACKWARD FROM PCUR TO PWORD + CP PCUR,PWORD + BE KRA5EXIT + L R12,GLBCUR + MVC WLBPREV,LBPREV + CLC WLBPREV,=A(0) + BE KRA5ERR ERROR IF EOF FOUND + SP PCUR,=P'1' + MVC GLBCUR,WLBPREV + B KRA5BAK +KRA5ERR EQU * + LA R1,=CL20'INVALID LINE #' + BAL R14,PUTMSG +KRA5EXIT EQU * + BAL R14,DISPLAY + L R14,KRSV14 + BR R14 +KRBS EQU * BACK SPACE + ST R14,KRSV14 + LTR R6,R6 + BZ KRDELCHR + BCTR R6,0 + SP PCOL,=P'1' + BAL R14,SETCUR + L R14,KRSV14 + B KRDELCHR +KRHT EQU * HORIZONTAL TAB + ST R14,KRSV14 + CH R6,=H'9' + BL KRHTC10 + CH R6,=H'15' + BL KRHTC16 + N R6,=X'000000FC' FORCE TO MULTIPLE OF 4 + CVD R6,PWORK + ZAP PCOL,PWORK + AP PCOL,=P'1' + LA R6,4(R6) ADD 4 + AP PCOL,=P'4' + CH R6,=H'79' + BNH KRHTEXIT +KRHTC0 EQU * + SR R6,R6 + ZAP PCOL,=P'1' + B KRHTEXIT +KRHTC10 EQU * + LA R6,10-1 + ZAP PCOL,=P'10' + B KRHTEXIT +KRHTC16 EQU * + LA R6,16-1 + ZAP PCOL,=P'16' +KRHTEXIT EQU * + BAL R14,SETCUR + L R14,KRSV14 + BR R14 +KRHTAUTO EQU * TOGGLE AUTO TAB MODE + XI HTMODE,TRUE + BR R14 +KRCTLK EQU * ROUTE TO CTL-K B,C,D,K,Q,Y + ST R14,KRSV14 + BAL R14,GETKEY + L R14,KRSV14 + OI KEY,X'40' MAKE CTL A-Z = A-Z + CLI KEY,X'42' + BE KRF5 CTL-K B F5 MARK BLOCK BEGIN + CLI KEY,X'43' + BE KRF6 CTL-K C F6 DUPLICATE BLOCK + CLI KEY,X'44' + BE KRESC CTL-K D ESCAPE + CLI KEY,X'4B' + BE KRF5 CTL-K K F5 MARK BLOCK END + CLI KEY,X'51' + BE KRBREAK CTL-K Q CONTROL BREAK + CLI KEY,X'59' + BE KRCTLKY CTL-K Y DELETE BLOCK + BR R14 +KRCTLQ EQU * ROUTE TO CTL-Q A,C,D,F,I,R,S + ST R14,KRSV14 + BAL R14,GETKEY + L R14,KRSV14 + OI KEY,X'40' MAKE CTL A-Z = A-Z + CLI KEY,X'41' + BE KRF7 CTL-Q A F7 SEARCH/REPLACE + CLI KEY,X'43' + BE KREND CTL-Q C END + CLI KEY,X'44' + BE KRF4 CTL-Q D END OF LINE + CLI KEY,X'46' + BE KRF7 CTL-Q F F7 SEARCH/REPLACE + CLI KEY,X'49' + BE KRHTAUTO CTL-Q I AUTO TAB + CLI KEY,X'52' + BE KRHOME CTL-Q R HOME + CLI KEY,X'53' + BE KRF3 CTL-Q S START OF LINE + BR R14 +KRBREAK EQU * CTL-K Q BREAK + SVC EXIT + TITLE 'CHKMARK - IF IN MARK MODE, PRINT IN REVERSE VIDEO' +CHKMARK EQU * + CLI BLKLABEL,MARK + BNER R14 + ST R14,CHKMSV14 + CLI KEY,ASCUP IS CURRENT KEY UP + BNE CHKMARK1 + MVI BLKLABEL,FALSE TURN OFF MARKING ON UP ARROW +CHKMARK1 EQU * + SR R3,R3 + BAL R14,PUTLINE + MVI BLKLABEL,MARK RESET MARKING + L R14,CHKMSV14 + BR R14 + TITLE 'UPDATE - UPDATE SCREEN LINES IN EXTENDED STORAGE' +UPDATE EQU * + ST R14,UPDTSV14 + CLI SCRMOD,TRUE HAS SCREEN BEEN MODIFIED + BNER R14 NO, EXIT NOW + MVI FILEMOD,TRUE SET FILE MODIFY SWITCH + MVI SCRMOD,FALSE RESET SCREEN MODIFY SWITCH + LR R2,R7 SAVE R7 + L R7,ASCB + USING SCB,R7 +UPDTLOOP EQU * + CLI SCBMOD,TRUE + BNE UPDTNEXT + L R12,SCBADDR + BAL R14,CHKADDR + USING LB,R12 + MVC LBLINE(L'SCBLINE),SCBLINE +UPDTNEXT EQU * + LA R7,LSCB(R7) + CL R7,LASTSCB + BNH UPDTLOOP + LR R7,R2 RESTORE R7 + BAL R14,AUDITMS + L R14,UPDTSV14 + BR R14 + TITLE 'CHKADDR - VALIDATE SCB ADDRESS BEFORE WRITE' +CHKADDR EQU * + CL R12,MINMEM + BL E05 + CL R12,MAXMEM + BNL E05 + BR R14 + TITLE 'GETNEWLB - ALLOCATE NEW LB SPACE IN EXT. MEMORY IF AVAIL.' +GETNEWLB EQU * + L R1,GFQEL IS THERE ROOM FOR LB LEFT IN PRIMARY AREA + SH R1,=AL2(LLB) + BM CHKFREE NO, GO CHECK FREE QUEUE + ST R1,GFQEL UDATE LENGTH OF PRIMARY AREA + L R1,GFQEA + ST R1,ANEWLB SET ADDRESS OF ALLOCATED LB + LA R1,LLB(R1) + ST R1,GFQEA UPDATE ADDRESS + B GETMEXIT +CHKFREE EQU * + L R1,AFREELB IS THERE AN LB ON FREE QUEUE + LTR R1,R1 + BZ GETMERR NO, EXIT WITH ERROR + ST R1,ANEWLB SET ADDRESS OF ALLOCATED LB + LR R12,R1 + MVC AFREELB,LBNEXT UPDATE NEXT FREE LB +GETMEXIT EQU * + SR R15,R15 + BR R14 +GETMERR EQU * + ST R14,GETMSV14 + LA R1,=CL20'** OUT OF MEMORY **' + BAL R14,PUTMSG + LA R15,4 + L R14,GETMSV14 + BR R14 + TITLE 'ERROR MESSAGES' +E01 EQU * + LA R2,=C'E01 - I/O ERROR ON INPUT FILE$' +ERR EQU * + SVC WTO + SVC TRACE + DC C'ERR ' + SVC TRACE + DC C'BUG ' + SVC EXIT +E02 EQU * + LA R2,=C'E02 - MS-DOS EXTENDED MEMORY ALLOCATION ERROR$' + B ERR +E03 EQU * + LA R2,=C'E03 - NO MEMORY AVAILABLE FOR ADDITIONAL RECORD$' + LA R15,3 + BR R14 +E04 EQU * +EOFUT2 EQU * + LA R2,=C'E04 - EOF ON KEYBOARD SIMULATOR FILE$' + B ERR +E05 EQU * + LA R2,=C'E05 - INVALID EXTENDED MEMORY ADDRESS$' + B ERR + TITLE 'DATA SECTION' + LTORG +* +* REGISTER USAGE +* +R0 EQU 0 WORK +R1 EQU 1 WORK +R2 EQU 2 WORK +R3 EQU 3 WORK +R4 EQU 4 WORK +R5 EQU 5 ROW IN 3RD BYTE +R6 EQU 6 COL IN 4TH BYTE +R7 EQU 7 BASE FOR SCREEN CONTROL BLOCK SCB +R8 EQU 8 FIRST BASE +R9 EQU 9 SECOND BASE +R10 EQU 10 THIRD BASE +R11 EQU 11 LENGTH FOR CROSS MEMORY MOVE +R12 EQU 12 BASE FOR LB IN EXTENDED STORAGE +R13 EQU 13 SAVE AREA +R14 EQU 14 LINK FROM MAINLINE TO ROUTINES +R15 EQU 15 RETURN CODE FROM ROUTINES +* +* PC/370 SVC'S +* +EXIT EQU 0 +OPEN EQU 1 +CLOSE EQU 2 +GET EQU 5 +PUT EQU 6 +DELETE EQU 7 +SEARCH EQU 8 +TRACE EQU 9 +GETMAIN EQU 10 +FREEMAIN EQU 11 +ASCEBC EQU 12 +EBCASC EQU 13 +RENAME EQU 23 +PRINTTXT EQU 24 MICRO-CODE PRINTING OF TEXT ON ROW VIA PC/370 +VIDEO EQU 128+16 BIOS VIDEO-IO (TECH. REF. A-48) +KEYBOARD EQU 128+22 BIOS KEYBOARD (TECH. REF. A-26) +WRITECHR EQU 200+2 MS-DOS SVC 2 DISPLAY CHAR IN R2 ON CONSOLE +READKEY EQU 200+7 MS-DOS SVC 7 GET KEY WITHOUT ECHO +WTO EQU 200+9 MS-DOS SVC 9 PRINT STRING WITH ENDING $ ON CON. +* +* DATA AREAS +* +ASCBS EQU X'08' ASCII BACKSPACE +ASCLF EQU X'0A' ASCII LINE FEED +ASCCR EQU X'0D' ASCII CARRIAGE RETURN +ASCASK EQU X'2A' ASCII ASTERISK FOR ALC COMMENT CHECK +ASCBLK EQU X'20' ASCII SPACE +ASCTAB EQU X'09' ASCII TAB +ASCRIGHT EQU X'1C' ASCII CURSOR RIGHT +ASCF1 EQU X'BB' EXTENDED ASCII F1 WITH HIGH BIT ON +ASCF2 EQU X'BC' EXTENDED ASCII F2 WITH HIGH BIT ON +ASCALTF1 EQU X'E8' EXTENDED ASCII ALT-F1 WITH HIGH BIT ON +ASCALTF2 EQU X'E9' EXTENDED ASCII ALT-F2 WITH HIGH BIT ON +ASCUP EQU X'C8' EXTENDED ASCII UP ARROW WITH HIGH BIT ON +ASCDOWN EQU X'D0' EXTENDED ASCII DOWN ARROW WITH HIGH BIT +ASCLEFT EQU X'CB' EXTENDED ASCII LEFT ARROW +ASCRGHT EQU X'CD' EXTENDED ASCII RIGHT ARROW +ESCAPE EQU X'1B' ASCII ESCAPE KEY + DC C'**** KEY ****' +KEY DC X'00' KEY FROM KEYBOARD OR EMULATOR FILE + DC C'*** LAST KEY ***' +LASTKEY DC X'00' PREV KEY FROM KEYBOARD + DC C'**** WAITLOOP *****' +WAITLOOP DC F'1' DEFAULT WAIT LOOP IS 1 +PWORD DC PL8'0' +WORD DC CL15' ' WORD READ VIA GET WORD +LWORD DC X'00' LENGTH OF WORD READ-1 OR X'FF' IF ZERO +KEYWORD DC CL15' ' SEARCH KEY WORD +LKEYWORD DC X'00' SAVE LENGTH OF KEYWORD - 1 FOR F8 +REPWORD DC CL15' ' REPLACE WORD +LREPWORD DC X'00' SAVE LENGTH OF REPLACE - 1 FOR F8 +SAVETEXT DC CL80' ' SAVE TEXT FOLLOWING KEY FOR REPLACE +FINDKEY DC XL256'00' TRT TABLE FOR FIRST CHAR. IN KEYWORD +FINDTAB DC 256X'00' TRT TABLE TO FIND TABS OR EOR + ORG FINDTAB+ASCLF + DC AL1(ASCLF) + ORG FINDTAB+ASCTAB + DC AL1(ASCTAB) + ORG FINDTAB+256 +NUMERIC DC 48X'FF',10X'00',198X'FF' TRT ASCII NUMERIC TEST +HEX DC C'0123456789ABCDEF' CONVERT NIBBLE TO EBCDIC +HEXTAB DC 128X'FF' CONVERT ASCII TO NIBBLE + ORG HEXTAB+X'30' + DC AL1(0,1,2,3,4,5,6,7,8,9) ASCII 0-9 + ORG HEXTAB+X'41' + DC AL1(10,11,12,13,14,15) ASCII A-F + ORG HEXTAB+X'61' + DC AL1(10,11,12,13,14,15) ASCII A-F + ORG HEXTAB+128 +* +* KEY ROUTINE ADDRESS TABLE +* +KRTAB DS 0F + DC A(0) ZERO FUNCTION CODE NOT USED +KEYUND DC A(KRUND) KEY UNDEFINED +KEYCHAR DC A(KRCHAR) PROCESS CHARACTER UPDATE ON SCREEN +KEYESC DC A(KRESC) ESCAPE KEY +KEYPGDN DC A(KRPGDN) PAGE DOWN +KEYPGUP DC A(KRPGUP) PAGE UP +KEYUP DC A(KRUP) CURSOR UP +KEYLEFT DC A(KRLEFT) CURSOR LEFT +KEYRIGHT DC A(KRRIGHT) CURSOR RIGHT +KEYDOWN DC A(KRDOWN) CURSOR DOWN +KEYINS DC A(KRINS) INSERT +KEYDEL DC A(KRDEL) DELETE +KEYCR DC A(KRCR) CARRIAGE RETURN +KEYBS DC A(KRBS) BACK SPACE +KEYHT DC A(KRHT) HORIZONTAL TAB +KEYHOME DC A(KRHOME) HOME (TOP OF FILE) +KEYEND DC A(KREND) END (END OF FILE) +KEYALTF1 DC A(KRALTF1) ENTER PAUSE UNTIL KEY HIT FOR EMULATOR +KEYALTF2 DC A(KRALTF2) ENTER WAIT FOR 1 SECOND FOR EMULATOR +KEYALTF3 DC A(KRALTF3) ENTER DEBUG MODE +KEYALTF4 DC A(KRALTF4) TOGGLE AUDIT MODE +KEYALTF5 DC A(KRALTF5) GO TO LINE # +KEYALTFA DC A(KRALTF10) TOGGLE CONNECT BOX GRAPHIC MODE +KEYF1 DC A(KRF1) F1 HELP SCREEN 1 +KEYF2 DC A(KRF2) F2 HELP SCREEN 2 +KEYF3 DC A(KRF3) F3 START OF LINE +KEYF4 DC A(KRF4) F4 END OF LINE +KEYF5 DC A(KRF5) F5 LABEL BLOCK +KEYF6 DC A(KRF6) F6 DUPLICATE BLOCK +KEYF7 DC A(KRF7) F7 SEARCH +KEYF8 DC A(KRF8) F8 REPEAT LAST F7 SEARCH +KEYF9 DC A(KRF9) F9 SELECT COLOR +KEYF10 DC A(KRF10) F10 BOX GRAPHICS +KEYSHF1 DC A(KRSHF1) SHIFT F1 QUICK SAVE +KEYSHF3 EQU KEYF3 SHFT-F3 START OF LINE +KEYSHF4 EQU KEYF4 SHFT-F4 END OF LINE +KEYSHF6 DC A(KRSHF6) SHIFT F6 DELETE LINE +KEYSHF7 DC A(KRHTAUTO) SHIFT F7 AUTO TAB +KEYSHF9 DC A(KRHTAUTO) SHIFT F9 AUTO TAB +KEYSHF10 DC A(KRSHF10) SHIFT F10 (CHANGE BOX GRAPHIC CHAR SET) +KEYCTLC EQU KEYPGDN CTL-C PAGE DOWN +KEYCTLD EQU KEYRIGHT CTL-D CURSOR RIGHT +KEYCTLE EQU KEYUP CTL-E CURSOR UP +KEYCTLG EQU KEYDEL CTL-G DELETE +KEYCTLH EQU KEYBS CTL-H BACKSPACE +KEYCTLI EQU KEYHT CTL-I TAB +KEYCTLK DC A(KRCTLK) CTL-K ROUTE TO B,C,D,K,Q,Y +KEYCTLL EQU KEYF8 CTL-L REPEAT SEARCH +KEYCTLN EQU KEYCR CTL-N CARRIAGE RETURN OR ENTER +KEYCTLQ DC A(KRCTLQ) CTL-Q ROUTE TO A,C,D,F,I,R,S +KEYCTLR EQU KEYPGUP CTL-R PAGE UP +KEYCTLS EQU KEYLEFT CTL-S CURSOR LEFT +KEYCTLU EQU KEYINS CTL-U INSERT +KEYCTLX EQU KEYDOWN CTL-X CURSOR DOWN +KEYCTLY EQU KEYSHF6 CTL-Y DELETE LINE +* +* KEY ROUTINE TRANSLATE TABLE WITH INDEX TO KRTAB +* +KEYTAB DC 32AL1(KEYUND-KRTAB) DEFAULT UNDEFINED 0-31 + DC 96AL1(KEYCHAR-KRTAB) DEFAULT CHAR 32-127 + DC 128AL1(KEYUND-KRTAB) DEFAULT UNDEFINED 128-255 +* +* OVERLAY DEFAULT INDEX VALUES WITH SPECIFIC KEY ROUTINE INDEXES +* (SEE MASIC MANUAL APPENDIX G-7 FOR OFFSETS) +* + ORG KEYTAB+X'03' + DC AL1(KEYCTLC-KRTAB) CTL-C PAGE DOWN + DC AL1(KEYCTLD-KRTAB) CTL-D CURSOR RIGHT + DC AL1(KEYCTLE-KRTAB) CTL-E CURSOR UP + ORG KEYTAB+X'07' + DC AL1(KEYCTLG-KRTAB) CTL-G DELETE + DC AL1(KEYBS-KRTAB) CTL-H BACK SPACE + DC AL1(KEYHT-KRTAB) CTL-I HORIZONTAL TAB + ORG KEYTAB+X'0B' + DC AL1(KEYCTLK-KRTAB) CTL-K ROUTE B,C,D,K,Q,Y + DC AL1(KEYCTLL-KRTAB) CTL-L REPEAT LAST SEARCH + DC AL1(KEYCR-KRTAB) CARRIAGE RETURN (ENTER) + DC AL1(KEYCTLN-KRTAB) CTL-N INSERT LINE + ORG KEYTAB+X'11' + DC AL1(KEYCTLQ-KRTAB) CTL-Q ROUTE A,C,D,F,I,R,S + DC AL1(KEYCTLR-KRTAB) CTL-R PAGE UP + DC AL1(KEYCTLS-KRTAB) CTL-S CURSOR LEFT + ORG KEYTAB+X'15' + DC AL1(KEYCTLU-KRTAB) CTL-U INSERT + ORG KEYTAB+X'18' + DC AL1(KEYCTLX-KRTAB) CTL-X DOWN + DC AL1(KEYCTLY-KRTAB) CTL-Y DELETE LINE + ORG KEYTAB+X'1B' + DC AL1(KEYESC-KRTAB) ESCAPE KEY + ORG KEYTAB+128+59 + DC AL1(KEYF1-KRTAB) F1 HELP SCREEN 1 + DC AL1(KEYF2-KRTAB) F2 HELP SCREEN 2 + DC AL1(KEYF3-KRTAB) F3 START OF LINE + DC AL1(KEYF4-KRTAB) F4 END OF LINE + DC AL1(KEYF5-KRTAB) F5 LABEL BLOCK OF LINES + DC AL1(KEYF6-KRTAB) F6 DUPLICATE BLOCK OF LINES + DC AL1(KEYF7-KRTAB) F7 SEARCH + DC AL1(KEYF8-KRTAB) F8 REPEAT SEARCH + DC AL1(KEYF9-KRTAB) F9 COLOR SELECTION + DC AL1(KEYF10-KRTAB) F10 DISPLAY FREE MEMORY + ORG KEYTAB+128+71 + DC AL1(KEYHOME-KRTAB) HOME + ORG KEYTAB+128+72 + DC AL1(KEYUP-KRTAB) CURSOR UP + ORG KEYTAB+128+73 + DC AL1(KEYPGUP-KRTAB) PAGE UP + ORG KEYTAB+128+75 + DC AL1(KEYLEFT-KRTAB) CURSOR LEFT + ORG KEYTAB+128+77 + DC AL1(KEYRIGHT-KRTAB) CURSOR RIGHT + ORG KEYTAB+128+79 + DC AL1(KEYEND-KRTAB) END + ORG KEYTAB+128+80 + DC AL1(KEYDOWN-KRTAB) CURSOR DOWN + ORG KEYTAB+128+81 + DC AL1(KEYPGDN-KRTAB) PAGE DOWN + ORG KEYTAB+128+82 + DC AL1(KEYINS-KRTAB) INSERT + ORG KEYTAB+128+83 + DC AL1(KEYDEL-KRTAB) DELETE + ORG KEYTAB+128+84 + DC AL1(KEYSHF1-KRTAB) SHFT-F1 QUICK SAVE + ORG KEYTAB+128+86 + DC AL1(KEYSHF3-KRTAB) SHFT-F3 START OF LINE + ORG KEYTAB+128+87 + DC AL1(KEYSHF4-KRTAB) SHFT-F4 END OF LINE + ORG KEYTAB+128+89 + DC AL1(KEYSHF6-KRTAB) SHFT-F6 DELETE LINE + ORG KEYTAB+128+90 + DC AL1(KEYSHF7-KRTAB) SHFT-F7 SET AUTO TAB (INDENT) + ORG KEYTAB+128+92 + DC AL1(KEYSHF9-KRTAB) SHFT-F9 SET AUTO TAB (INDENT) + ORG KEYTAB+128+93 + DC AL1(KEYSHF10-KRTAB) SHFT-F10 CHANGE BOX GRAPHIC SET + ORG KEYTAB+128+104 + DC AL1(KEYALTF1-KRTAB) ALT-F1 PAUSE UNTIL KEY HIT + ORG KEYTAB+128+105 + DC AL1(KEYALTF2-KRTAB) ALT-F2 WAIT ONE SECOND + ORG KEYTAB+128+106 + DC AL1(KEYALTF3-KRTAB) ALT-F3 ENTER DEBUG MODE + ORG KEYTAB+128+107 + DC AL1(KEYALTF4-KRTAB) ALT-F4 TOGGLE AUDIT MODE + ORG KEYTAB+128+108 + DC AL1(KEYALTF5-KRTAB) ALT-F5 GO TO LINE # + ORG KEYTAB+128+113 + DC AL1(KEYALTFA-KRTAB) ALT-F10 TOGGLE BOX CONNECT MODE +* +* END OF KEYTAB +* + ORG KEYTAB+256 +ATTRIB DC X'17' WHITE ON BLUE DEFAULT SCREEN +ATTSAVE DC X'00' SAVE DURING REVERSE VIDEO MARKING +* SEE TECH. HANDBOOK 1-140 FOR COLOR ATTIRBUTES ON IBM COLOR MONITOR +* USE X'0E' FOR TURBO PASCAL DEFAULT YELLOW ON BLACK +SAVEAREA DC 9D'0' +INITSV14 DC A(0) SAVE LINK FOR INIT +HELPSV14 DC A(0) SAVE LINK FOR HELPSCRN +TERMSV14 DC A(0) SAVE LINK FOR TERMKS +LOADSV14 DC A(0) SAVE LINK FOR LOADFILE +EDITSV14 DC A(0) SAVE LINK FOR EDITFILE +SAVESV14 DC A(0) SAVE LINK FOR SAVEFILE +DISPSV14 DC A(0) SAVE LINK FOR DISPLAY +SETCSV14 DC A(0) SAVE LINK FOR SETCUR +CLRSV14 DC A(0) SAVE LINK FOR CLEAR +CLRLSV14 DC A(0) SAVE LINK FOR CLRLINE +GETKSV14 DC A(0) SAVE LINK FOR GETKEY +PUTLSV14 DC A(0) SAVE LINK FOR PUTLINE +PUTSSV14 DC A(0) SAVE LINK FOR PUTSTAT +CHKMSV14 DC A(0) SAVE LINK FOR CHKMARK +NEWFSV14 DC A(0) SAVE LINK FOR NEWFILE +UPDTSV14 DC A(0) SAVE LINK FOR UPDATE +SCRLSV14 DC A(0) SAVE LINK FOR SCRLDOWN, SCRLUP +KRCRSV14 DC A(0) SAVE LINK FOR KRCR +INSCSV14 DC A(0) SAVE LINK FOR KRINSCOM +KEYSSV14 DC A(0) SAVE LINK FOR KEYSTATS +PPCTSV14 DC A(0) SAVE LINK FOR PUTPCT +KR10SV14 DC A(0) SAVE LINK FOR KRF10 +KRBXSV14 DC A(0) SAVE LINK FOR KRCHKBOX +SCHRSV14 DC A(0) SAVE LINK FOR KRSETCHR +GETWSV14 DC A(0) SAVE LINK FOR GETWORD +GETMSV14 DC A(0) SAVE LINK FOR GETNEWLB +KRWTSV14 DC A(0) SAVE LINK FOR KRALTF1/F2 +KRSV14 DC A(0) COMMON SAVE FOR FIRST LEVEL KR ROUTINES +SAVER0R3 DS 4F SAVE AREA FOR AUDIT ROUTINES (REQ'D FOR SEARCH) +KRF9SV12 DS 2F SAVE AREA FOR F9 +GETWSV34 DS 2F SAVE AREA FOR GETWORD ACROSS GETKEY +TRUE EQU 1 +FALSE EQU 0 +MARK EQU 2 MARKING BLK LABEL MODE + DC C'*** AUDIT ***' +ALC DC AL1(TRUE) FILE TYPE ALC (USED FOR TAB PROCESSING) +AUDIT DC AL1(FALSE) AUDIT SWITCH FOR AUDITSCB AND AUDITMS +HTMODE DC AL1(FALSE) AUTO TAB MODE +EOF1 DC AL1(FALSE) END OF FILE +EOJ DC AL1(FALSE) END OF JOB +FILEMOD DC AL1(FALSE) FILE MODIFIED +SCRMOD DC AL1(FALSE) SCREEN MODIFIED +BLKLABEL DC AL1(FALSE) LABELED BLOCK (TRI-STATE FALSE,MARK,TRUE) +SAVBLKLB DC AL1(FALSE) SAVE LABELD BLK MODE DURING DISPLAY +CURDEL DC AL1(FALSE) CURRENT LB DELETED +FIRSTSAV DC AL1(TRUE) FIRST SAVE REQUEST +REPLACE DC AL1(FALSE) SEARCH AND REPLACE +GLOBAL DC AL1(FALSE) GLOBAL REPLACE +BOX DC AL1(FALSE) BOX CHARACTER GRPAHICS MODE +CONNECT DC AL1(FALSE) BOX GRAPHIC CONNECT MODE +DIRUP EQU 0 +DIRRIGHT EQU 1 +DIRDOWN EQU 2 +DIRLEFT EQU 3 +DIRLAST DC AL1(DIRRIGHT) +DIRNEW DC AL1(DIRRIGHT) +DIRTAB DC AL1(BU,BUR,BD,BUL,BRU,BR,BUL,BL) + DC AL1(BU,BLU,BD,BRU,BLU,BR,BUR,BL) +BU EQU 0 UP +BD EQU 1 DOWN +BUR EQU 2 UPPER LEFT +BUL EQU 3 UPPER RIGHT +BRU EQU 4 LOWER RIGHT +BR EQU 5 RIGHT +BL EQU 6 LEFT +BLU EQU 7 LOWER LEFT +REVDIR DC AL1(DIRDOWN,DIRLEFT,DIRUP,DIRRIGHT) REVERSE OF DIRECTION +REVLAST DC AL1(0) SAVE REV OF DIRLAST +BOXSET EQU * +BOXSET2 DC AL1(186,186,201,187,188,205,205,200) GRAPHIC DOUBLE LINE BOX +BOXSET1 DC AL1(179,179,218,191,217,196,196,192) GRAPHIC SINGLE LINE BOX + DC 8AL1(ASCASK) ASCII * PRINTABLE BOX + DC AL1(94,118,88,88,88,62,60,88) ARROWS (SORT OF) + DC 8AL1(ASCBLK) BLANK (FOR BG COLORS) +BOXSETE EQU * +BOXSETA DC A(BOXSET) ADDRESS OF CURRENT BOX SET +BOXCON EQU * TABLE TO CONNECT SINGLE/DOUBLE BOX LINES +* +* SEE IBM TECH. REF. FOR PC PAGES C-7 THRU C-9 FOR GRAPHICS 179-218 +* +* ---- SINGLE --- ---- DOUBLE --- +* UP RT DN LF UP RT DN LF +* + DC AL1(179,195,179,180,186,198,186,181) 179 + DC AL1(180,197,180,180,180,180,180,181) 180 + DC AL1(181,181,181,180,181,216,181,181) 181 + DC AL1(182,215,182,182,182,182,182,185) 182 + DC AL1(183,210,191,183,182,183,183,187) 183 + DC AL1(181,184,184,191,184,209,187,184) 184 + DC AL1(185,185,185,182,185,206,185,185) 185 + DC AL1(179,199,179,182,186,204,186,185) 186 + DC AL1(187,187,184,183,185,203,187,187) 187 + DC AL1(190,188,188,189,188,202,185,188) 188 + DC AL1(217,208,189,189,189,189,182,188) 189 + DC AL1(190,190,181,217,188,207,190,190) 190 + DC AL1(180,194,191,191,191,191,183,184) 191 + DC AL1(192,192,195,193,211,212,192,192) 192 + DC AL1(193,193,197,193,208,193,193,193) 193 + DC AL1(197,194,194,194,194,194,210,194) 194 + DC AL1(195,195,195,197,195,198,195,195) 195 + DC AL1(193,196,194,196,208,205,210,205) 196 + DC AL1(197,197,197,197,197,197,197,197) 197 + DC AL1(198,195,198,198,198,198,198,216) 198 + DC AL1(199,199,199,215,199,204,199,199) 199 + DC AL1(212,211,200,200,200,200,204,202) 200 + DC AL1(201,214,213,201,204,201,201,203) 201 + DC AL1(207,202,202,202,202,202,206,202) 202 + DC AL1(203,203,209,203,206,203,203,203) 203 + DC AL1(204,199,204,204,204,204,204,206) 204 + DC AL1(207,196,209,196,202,205,203,205) 205 + DC AL1(206,206,206,206,206,206,206,206) 206 + DC AL1(207,207,216,207,202,207,207,207) 207 + DC AL1(193,208,208,208,208,208,215,208) 208 + DC AL1(216,209,209,209,209,209,203,209) 209 + DC AL1(210,210,194,210,215,210,210,210) 210 + DC AL1(192,211,211,208,211,200,209,211) 211 + DC AL1(212,192,198,212,200,212,212,207) 212 + DC AL1(198,218,213,213,213,213,201,209) 213 + DC AL1(214,214,218,210,209,201,214,214) 214 + DC AL1(215,215,215,215,215,215,215,215) 215 + DC AL1(216,216,216,216,216,216,216,216) 216 + DC AL1(217,193,180,217,189,217,217,190) 217 + DC AL1(195,218,218,194,218,213,214,218) 218 +SCRLEND EQU 23*256+79 SCROLL ENDING ROW AND COL +SAVETYPE DC CL3' ' SAVE ORIG. FILE TYPE +ROWINC EQU 256 INCREMENT FOR ROW IN R5 REG. (3RD BYTE) +MAXROW DC A(23*ROWINC) LAST ROW ON SCREEN +MAXSCB DC A(0) LAST ROW SCB POINTER +LASTROW DC A(0) LAST ROW CURSOR +LASTSCB DC A(0) LAST SCB ADDR +SAVEROW DC A(0) TEMP SAVE FOR ROW (R5) +SAVECOL DC A(0) TEMP SAVE FOR COL (R6) +SAVESCB DC A(0) TEMP SAVE FOR SCB (R7) +BLK1LB DC A(0) STARTING LB OF BLOCK +BLK2LB DC A(0) ENDING LB OF BLOCK +NEXTBLK DC A(0) NEXT LB TO DUPLICATE +SAVENEXT DC A(0) SAVE NEXT LB FROM CURRENT LB +PREVDUP DC A(0) PREVIOUS LB IN DUPLICATE CHAIN +PTOTAL DC PL3'0' +LOADMSG DC C' LINES LOADED =' +DTOTAL DC CL6' ZZZZZ',C'$' +LBUFF1 EQU 8192 +LBUFF2 EQU 4096 +LBUFFS EQU LBUFF1+LBUFF2 +TBUFF EQU X'80' COMMAND LINE IN LOW MEMORY +ATYPE1 DC A(DSN1+4) DEFAULT ADDR OF .XXX IN DSN +DSN1 DC C'TEST.ALC',64X'00' DSN FROM COMMAND +REN1 DC C'TEST.BKP',64X'00' RENAME DSN FOR SAVE +SYSUT1 DS 0D DCB FOR ASCII TEXT FILE READ/WRITE + DC C'ADCB' + DC A(DSN1) ADDRESS OF UP TO 64 BYTE PATH/FILE + DC X'FFFF' HANDLE ASSIGNED BY MS-DOS AT OPEN + DC X'00' DATA CONTROL BLOCK FLAGS + DC C'S' DATA SET ORGANIZATION + DC C'G' DATA SET ACCESS MODE + DC C'T' DATA SET RECORD FORMAT + DC X'0A' END OF RECORD CODE + DC X'1A' END OF FILE CODE + DC H'135' RECORD LENGTH + DC AL2(LBUFF1) BLOCK LENGTH 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 literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/min/ASM.BAT b/PC370_orig/Diskette/min/ASM.BAT new file mode 100644 index 0000000..287df1d --- /dev/null +++ b/PC370_orig/Diskette/min/ASM.BAT @@ -0,0 +1,7 @@ +del report.txt +m370 %1 +a370 %1/lx +l370 %1/lx +%1 +pause +browse report.txt \ No newline at end of file diff --git a/PC370_orig/Diskette/min/BEGIN.MAC b/PC370_orig/Diskette/min/BEGIN.MAC new file mode 100644 index 0000000..a251e4b --- /dev/null +++ b/PC370_orig/Diskette/min/BEGIN.MAC @@ -0,0 +1,27 @@ +BEGIN MACRO SAVE=YES,BASES=1 +&LABEL$$ CSECT + USING *,15 + AIF /&LABEL$$=/ .NOIDENT + B KZHQX&N$ + DC AL1(11) + DC CL11'&LABEL$$' +.NOIDENT AIF &SAVE=NO.NOSAVE +HZQKX&N$ DC 18F'0' +KZHQX&N$ STM 14,12,12(13) + ST 13,HZQKX&N$+4 + LR 14,13 + LA 13,HZQKX&N$ + ST 13,8(0,14) + DROP 15 + USING HZQKX&N$,13 + AIF &BASES<2.END + LA 12,4094(0,13) + USING HZQKX&N$+4094,12 + AGO .END +.NOSAVE ANOP +KZHQX&N$ STM 14,12,12(13) + DROP 15 + BALR 12,0 + USING *,12 +.END ANOP + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/BROWSE.COM b/PC370_orig/Diskette/min/BROWSE.COM new file mode 100644 index 0000000000000000000000000000000000000000..876d7f4fecd0d085f5212842afcc70d8f4d93e95 GIT binary patch literal 958 zcmYjPZ%h+s7=NDL_1dB$Dj`{xbXQlJ*b*hiv1C0uHVK=UFlkvF_`!(12ns#8KQxRG zXdoGK$v$q`H(dP&GmYtD>4&3o4E%D*1g!E#X+rC78Snvn*@LIcs(!4{H1PbNDQ_~Dleua?Me^d zFZN6FaImGfPvj}wB5A2)@Y|H44Gc)KDkk}%-lQn;{Zdj4`uMtN;|TxZH<+%h+S5SnRaf4zpG8*OY>A?Y%k9Yij?8g>fxhpZ}3#j1K_cX6tw z4?}ObA6S-tiqfWI-K=Nk8omkjAydkx&}~e*0i#PpTrrHBpE%<&FM?Kmo6ozfK+c=5 zw5sx6t7|m-9JKt<}ox3 zR`nGPb{@v<@6ohBMR~t{5@nB2p>5miVCt29Xg_f_cFYxSj5uh{9K`TrBzIF^x2qw# zu5Fw4?;!i^9LP(Q_7CSN<#2Se|Ax80nd7I)vRku6B{Deakp~f4Pj9T0f78uc56pWZaxcf1@9ZvqM$D6^JZ7|E7?snRU1L%f+T-UrzsE3| z7pNLd$12lQz3mJ)f-pW&Gm20&n#l`00h!|jYnmVug6CpaXSp!<+9XZb^r?RpR*$vE ziLwiO1l;TNKhB=qP4+$@RM%f-+cf*uJeO#XuW-ZYIC{+pv2GNpap6+_ODoXTng5*p T!LCRtdRKKbi`ikk@SXWL>cMJ0 literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/min/CALL.MAC b/PC370_orig/Diskette/min/CALL.MAC new file mode 100644 index 0000000..637d39d --- /dev/null +++ b/PC370_orig/Diskette/min/CALL.MAC @@ -0,0 +1,6 @@ +CALL MACRO PGM? + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO L 15,=V(&1) + BALR 14,15 + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/CLEANUP.BAT b/PC370_orig/Diskette/min/CLEANUP.BAT new file mode 100644 index 0000000..56b38c0 --- /dev/null +++ b/PC370_orig/Diskette/min/CLEANUP.BAT @@ -0,0 +1,7 @@ +del %1.alc +del %1.obj +del %1.com +del %1.lst +del %1.prn +del %1.bak + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/CLOSE.MAC b/PC370_orig/Diskette/min/CLOSE.MAC new file mode 100644 index 0000000..2a44b89 --- /dev/null +++ b/PC370_orig/Diskette/min/CLOSE.MAC @@ -0,0 +1,10 @@ +CLOSE MACRO DCB? + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG + LA 2,&1 + AGO .SVC +.REG AIF &1=(2).SVC + LR 2,&1 +.SVC SVC 2 + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/COGS.CPY b/PC370_orig/Diskette/min/COGS.CPY new file mode 100644 index 0000000..5204a96 --- /dev/null +++ b/PC370_orig/Diskette/min/COGS.CPY @@ -0,0 +1,17 @@ +**************************************************************** +* This is COGS.CPY - Cogsworth's Inventory Data * +* Usage: COPY COGS (with COPY in column 10) * +**************************************************************** +IREC DS 0CL41 1-41 Inventory record +IDESC DS CL10 1-10 Product description +ICALIF DS CL3 11-13 Units sold in Calif +IILL DS CL3 14-16 Units sold in Illinois +IUTAH DS CL3 17-19 Units sold in Utah +IWISC DS CL3 20-22 Units sold in Wisconsin +IBEGIN DS CL3 23-25 Beginning inventory +IPURCH DS CL3 26-28 Purchases throughout year +IQOH DS CL3 29-31 Actual quantity on hand +ICOST DS CL4 32-35 Cost (each) 99V99 +ISELL DS CL4 36-39 Sell for (each) 99V99 +ICRLF DS CL2 40-41 PC/370 only - CR/LF + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/COGS.DAT b/PC370_orig/Diskette/min/COGS.DAT new file mode 100644 index 0000000..874f5d6 --- /dev/null +++ b/PC370_orig/Diskette/min/COGS.DAT @@ -0,0 +1,4 @@ +GIZMOS 02003002002001709902312252999 +WIDGETS 01501001000202203401900110025 +JUNQUE 02501501501803005201001550339 + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/COURSE.DAT b/PC370_orig/Diskette/min/COURSE.DAT new file mode 100644 index 0000000..485dd64 --- /dev/null +++ b/PC370_orig/Diskette/min/COURSE.DAT @@ -0,0 +1,9 @@ +AC101ACCOUNTING 3 +BU101BUSINESS 3 +EG101ENGLISH I 3 +EG102ENGLISH II 3 +MA101ALGEBRA 3 +MA107STATISTICS 3 +PE121FIRST AID 1 +PE151AEROBICS 1 + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/CVD.MLC b/PC370_orig/Diskette/min/CVD.MLC new file mode 100644 index 0000000..e5e06ab --- /dev/null +++ b/PC370_orig/Diskette/min/CVD.MLC @@ -0,0 +1,15 @@ + PRINT NOGEN +BEGIN BEGIN + REGS + LH R3,FIVE + AH R3,THREE + CVD R3,DBL + ED RESULT,DBL+6 + WTO RESULT + RETURN + LTORG +FIVE DC H'5' +THREE DC H'3' +RESULT DC X'40202120' +DBL DC D'0' + END BEGIN \ No newline at end of file diff --git a/PC370_orig/Diskette/min/DCB.MAC b/PC370_orig/Diskette/min/DCB.MAC new file mode 100644 index 0000000..34bae7f --- /dev/null +++ b/PC370_orig/Diskette/min/DCB.MAC @@ -0,0 +1,36 @@ +DCB MACRO DSORG=S,RECFM=F,MACRF=G,LRECL=80,BLKSIZE=0, + EODAD=0,SYNAD=&EODAD,RECORD=0 +&LABEL$$ DS 0F,0CL86 + DC C'ADCB' + AIF &DDNAME=(.DDX + DC A(DCBDD&N$) + AGO .DDZ +.DDX DC A(&DDNAME) +.DDZ AIF &MACRF>P.BDAM + DC X'FFFF',X'00' + DC CL1'&DSORG',CL1'&MACRF',CL1'&RECFM' + DC X'0A1A' + DC H'&LRECL',H'&BLKSIZE' + DC A(&EODAD,&SYNAD,&RECORD) + DC 54X'00' + AGO .DDN +.BDAM AIF '&RECORD'='0'.NOREC + DC X'FFFF',X'40' + AGO .DSORG +.NOREC DC X'FFFF',X'00' +.DSORG DC CL1'&DSORG',CL1'&MACRF',CL1'&RECFM' + DC X'0A1A' + AIF '&BLKSIZE'='0'.NOBLK + DC H'&BLKSIZE',H'&BLKSIZE' + AGO .ADRS +.NOBLK DC H'&LRECL',H'&LRECL' +.ADRS DC A(&EODAD,&SYNAD,0,&RECORD) + DC 50X'00' +.DDN AIF &DDNAME='.LIT + AIF &DDNAME=(.END +DCBDD&N$ DC C'&DDNAME',X'00' + AGO .END +.LIT ANOP +DCBDD&N$ DC C&DDNAME,X'00' +.END ANOP + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/DISPLAY.MAC b/PC370_orig/Diskette/min/DISPLAY.MAC new file mode 100644 index 0000000..74a3cf3 --- /dev/null +++ b/PC370_orig/Diskette/min/DISPLAY.MAC @@ -0,0 +1,8 @@ +DISPLAY MACRO +&LABEL$$ LA 15,&1 +LOOP&N$ IC 2,0(15) + SVC 202 + CLI 0(15),X'0A' + LA 15,1(0,15) + BNE LOOP&N$ + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/DIVISION.CPY b/PC370_orig/Diskette/min/DIVISION.CPY new file mode 100644 index 0000000..8d9a4dc --- /dev/null +++ b/PC370_orig/Diskette/min/DIVISION.CPY @@ -0,0 +1,5 @@ +DIVIDEND DS 0PL16 +QUOTIENT DS PL8 +REMAINDR DS PL8 +DIVISOR DS PL8 + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/E370P42.EXE b/PC370_orig/Diskette/min/E370P42.EXE new file mode 100644 index 0000000000000000000000000000000000000000..6de1c989bb7d18723ac8832840f4c76303096851 GIT binary patch literal 40514 zcmeFa33yaR)<1lENhj%aIvpT!gC<~XG(gA#VGDtzyAzUhCrvs)0C5?0bY|T5QIUoy zru)Wt9hVsg#Vn4)I3p7j9SDknhOmjlrb1Xn#B*toKqMptlJ8e_yOV(E%>RA=&+|Rc z_k82fw{F#`b55N)b?V%zQx)gz9Kj{%gaknly1Shbn}k6zGcurem%XAD<&XWXQwM7)-5r9pUDR|*a)xu165zEQW(WD+*&o-+voM+Vt0lKd;iBv(J6 z+BT%JG2Q>DM&2q&X4ZrTL0EBvQZl&VoN7hnwjt?_wDmW|xw$m`zAD{O!Q#pC2m+9d zmL!WW*&_^ZT)jX@YFn<|b=cy&%5#3oBbq=I7~hiMIX*L>l{`mcH0!Kg+a5bmcUV|& z-Y=B#B6ut96zt-3Vbt{hd%W>S1+V!F zVRfzvsx4HSbzt)gCJjL)K^jI#gQaB%v$jjJEXYb!31C2etxIBn^{U!8O_u7Bs@k{k zNLJM@!DE!F_H8^ysA?CRXze|ecN;YhWze3i#U?fgn2edcSxXcO3x!hT4`hn*76*Z- zY4|<)#kqlSiH6>Tj`CzJ;VRP)B{9FzHv&FflA3f&OhU~ULYPTmTr`_icC6lxa$z@rlPq&HUSb_!*)hHo9ztJW|X zmW|;|L-L>@mWtwVOT_~^OGRForQ&WaYeXNmMDtFjf8SP^f3K>@dJ=R72t3cQD^Ov6 z0`KuXq( z7yf?aA_H743FN-TYc4R=IZUgkswfvPPnqhTF|F>WqVafn)>P*)S^DDhnirbto-_HI zbQG%y+0kE7Kb@BM+ z6*lS;;L<>xL-E+CGYj4L9SBbdSr~%sVNrE=tI+6Jox`L;dt-Ia;Q1_`9y}M~`JAc7 zV-k_o!$)0;%HlPrscN1>{z9H_se_ok5VIe&d;iy@TVx7v(!F3ZH0i2LLX++#lc!1d zib>rtN6^G;1#kSzCd|2Ndj3w#3N-)D{9H$uZXdG^<$^>H+?h5eqYc&Bcu$d}HlSlk z*nax(W*FD21#;djcCJ}uS{1>%9$94qO}JTXmDBol>6)2s7z$v^of)GGyL5ZmI~)4( zccx}IyL5ZhWVkcmTD&5Pa_-3tDj0R#fjNy@?*K3BlMRB!cZ-nJt=ZT8*Zt~x&6@pM zWT=w5C-|Yz;0Xl@_3AZ8w1MyOIHnC8#^bm)u(y87njf@*o%LaB?hgxWMdp)Xf%WyO zfJze4;##kXq&r;JLQXadJQZFaYH1SQcF#duZWQSLIenVfr1P5CoN|vqGv=U;MX}_# zBWHRZMb07X9qHpT{0RxY!bgfm-jVGnp(>X+Ky;|(@)LmuJss> zfzN!&Ri^5fOiMk0x<-YK=etw?3T=C>?({sc#$*qCCRrl>;($;Cwj2IuuBog=d=EMah#dO@K;NwHk*bu z)WEP=Bva=S2#X6@y9B~ns)g9YSff1(FGnwMUj9aNZ_jZ%X-$!@-Dj3eZrU7Gpe!Q<3;&WZr6vVGeUSk@ zpY4$3#hvv!`PmB;cU!*8*`O9^mV+L2(t?W+wdcFfD(=%XXoZUSS4{Floz!xx18ttB z;Pq`dxAWYN@^z~69YWfMdEAcZ*Xo<}>mUP6Y#o7LNgZbcb0u1JtD~rdu2rhFZSbIc z9V^O_XvwV(R|$1HIO`|^dw*p`!z3!d)d8N5Iz+8E45Q3zSIa+~r~7Vol$OvJN`;QI zTx@8{{e=>*El)3$#I;diLADl3a&aML-s%LJw;Vl9UpyM{x1zB6JepqKN!Q+51c;{< zl=8k3ioCTL8NUr?94MjoTig)vtYF5W68ioYx64UW9o1E)#6}M`VF;JCO$eb zlxo-Gzy)jUAw8mh-&fu!)sB?JScn#eKOZ=PxC|4 z*PN&NxmIfmpYu?QYVnrJ-lha%BzhHZY3wZl69O%oYcER`vkvRloax&(G}CaI@86rKm25 zev||)3Aiv>+d|hM)n4Mx+{{1|EHu4|tqW8MsK8ah_XN85EH)N>7>Fk^`tK&lJyMrGK zqcvTDgKuUJ-$5UBz2&EUb6mERkVb8Hd(Dy1sHpIuT!MN)vlv1u6y8K7I?(kNS`(1` zv;>vYLJImyZ)HUtLzM^e%0^Unc2RYxvS=I@UfrQvpA{L7+2882U1(h=g*TIqhWZ#?*-zJ^^XwL=pBt)ykDdB3dEPmn5lRq$TsJ)ajP6?Fk2*!> zP66sAW0LTV~_J$0j>^LuR-Ck-!OJ>$tQB(LLJ!dXZbJn6J+B>G6-_~MbhE3 zNszC*NbZY4v8tF@!@_CF>@w#JDDz~^0 zfv8G)1afa1-5|)%o~4VkoHN`s0T^BfhCjtn+q94sA&ns4e3s^4xU5ZEW|cWzyiI2> z$Wh(h83v&{!zj=-dESg8IzI0)gTf5UOPCv9(isFwE2!Lq6__l=K6xRUI*f)afDaPw z>Run3?wggJkU#_SEMm+e*&@zVFFGS;z-J!db*Sm@&X84|Z)am+ik(^20=pz<*(rTi z_S6Jw&b5eFEjlxNb6b<=QT4eUy_N6pshq7mR|21#Ml=~yFmy+)hXVZ_XE3GZw$gza_Ob-txv;S-1jT1nE#Xe=#U=DRo7YUHO5JgjZ$Pc_V@u6NUh}J_y4Ou!jGjs}M$e-&oc7e@ z>Sf`zUxinH9iCjfEPQ2ioQrOrfzL9z`82r!kXHQ_FX807mN33p2cXwPpsRV^M5BOM z@kufJJMHQ6pHJ6oIu!^lGcc7hVx2KX;lmGaQh|d)7X3P_*Kn)AapxM|J`% zkdiU;G?iP$_&>*p#y4Z&t%npF%}YAzr-tbcbm#3r)VDj8ssm5c;^~f(Z2F{I6F)%c zZ;TJ()SRY;)16@8ChISD$hIVO$jjN1yt4%z^3iE>Om~7>YtE(AdVBDU;%cMT9MpQV zg|3@k1TyPTp?7G1HI=l}i;?~JOR{%PrIV#@WWU-syBGJ|9^BninEh#-!tBqMDU!Tq z3Vm4W24k~-ma&AM%IkRLa$fmGR9-NJ9xru6@dx!KE6n|gADCe^2}58mAedLnU~#Hh~MVbYvt=(`gpHE@V+~zY$}Zx z=4%46KeZ*%r>GJD4!T;vGKE9HKzn^xp;Wx9n9gwVEn~kl>5T16YLsbv*KHC1N+YG$z?+a z-fr6l*p%K}Mj4)P+XgJW$Op3&3}Hy`%#uKGf0iU~&!P<_`Bo>lJw8g>tdN5%!N^tE zHTq2osh%7)%VA`Ca#Spbt?l5`laERLCjDkmxfc}MwD?exe+x?YXVIJzhckiNtuV(hunv%I{56RPOR24PwMiavlKwu;IU}F!Hs2<(GiaCTg?vmJSj)6jM9YyUVUJIor1EJ+ z`B3>w;BIAbhb2owG$iq>Ns|2QNi=6#G2qTx`{EnR;8seO2nII+a9NWmeVW^mjoJ7U zlWGYKMpHjw3o!EZN$5%@&g&*gQCk2W1@NmT(MW6cpJNgyb47m{jc6MR9eVRf9{v2(|cw?h>VvwD=H3Va>Pfxn2Aiw$jS zJ(REVZS={$FMMZ`c8-V$tl-_}r)OMlhb_c*LJ!+ZGNp4(0^|FROev}ne7iFx`PNK& zEQfz^?hzz~|5MYm#K+ZH;fAX z*E_!IX&3~-xS_j+z%JSX;Blb_VhsD*#U|hSb4?zB?hZ(X_1H%2wlJZA~| zoE~@b<|-XFtXn=xbO*9}I_&W-c?Xfp$tJerlY0zH(BZq$j#+DIr&KR|6k(|d%ftR+ zyF76`C2)A_WFPfRg^H!dIxDr>Feg6Ji77^fna}6cSSk#;irHqxyIFB*Z?Re_X1&OY zKVrpWdW%&`F*6?~6u-`j<2xl^H1g$mqSqYmQYWQliGdzpmCxk&*}(eA^U8#)%;QDa zL7AcEh8^=z`35Zv`-1L8SaAw$QB1pEUjIE=9i^BT4rKYrGBg}2kv>kEumMl&I7uEg zjuIX4WN1xRkE}?|cv^TK(@U7Az8i9aKIs5_ek`3UEQ5`GIjgUY-DL&18{jF-$bLCi zlJ}0KFA7~HGca|GAo2&3Lx@%uPA{_6tI$q(1hLe|BcQhmvt0?)J(ivukjW<0_s2>= zyLznTTbrpu(_b9RCejIdZP5S)Mbtsu@*o2FPt=$ysOx zzJHFTe<}Fpa(ut*!8eKH8wTLvV=1A~2H=HbX+j+TZm=QScZ?zn?Y0D%f=`)sND$;F zjs;&}+UZ1r-R6YR`IJo~_yV4NjP@d{l%AMaxv#3Za-GFDl7nAllftK_bIPMrd7N58 ze+RUqi%sPps-(Osz=vffKrM#AVhzC)%g32RQTjU-ws$_|)9O}Cj3WaZ*lPqjWuQu` z@>_h`#F$Jygp;O{GSLOhDank&6Q+-H3ta9Z&ZTw>RcuSnDv&o;8R2`2d2qkknY~G_m?@ zO1-XIq7C`(yj+f6y+qb`(?|KX*$JWcz^UTxMypuU<>OtPAgg-_%T(U{Tz601FS_b` zxr2Kqe+r1Z^GjTAF5b>1G&{e{#QGV>bE89w^(|uaso<0ov{8wnkC~(-dxnAhuowqoc6U|%Gr&eGS8nWyNjm&eS zGhRxkr>^4mW>Pw{H-+gTdow7V*_&{%6O~Rvp1Z_FuaBh<6krnvHunIxq%q*;G)X>~ zM!RxLv1#Gliun#I$_;-T6i z6Md5v9A8O|q2Yzk91Je8iSs)T#2!kcU*}FQa?z$V2&z3KDBm96#!!p({!njcC}L{q z5tE@MRD?CA;`$c&o?vIY)T94hWs3v<3ik6|6c*%Pw7X|m zm0jjsRqe4zwk6e+`jNUK`4!j~e4W5XEQfE~8pXsBD3+w^Gf1KZHh7xGW06TGSW-0TxaMP6Y}I4cluRr3&tL6br&B68K?>SK|ao5249LCW-i z?>`FC2oJT}^2cQ)*G?Z+lZy@h0&M0!YZBuTQ+3FeUz)m2ps(>vtIIXLSynd{AwLBs zFCe^t0IJm~^7a(?18fgHnr&9!CeYt9u~}VnhPpHHo*>X0nW0T>sU ztM(zYBX4kZg@Ov!@&o+}H66?QAR3QDdGf$Rv>5w7V;O5^`XaCL(BPz_U@obV2@*m? zgb9-)f=a43()$y=;I7VPl8+vwJFM2xsTG!Eku?t9DO5U9Y&GjbO~{=ncKT2{n4Zk5 z+}8(dl^@gCQxk!OA(Q`nkgl;>vmMpBCdLF6t zL~$yu*VD#a`cf~SIzaa$CyhSP6Xla%FCRESHzOyVs`d1_o{kjIGQGU%0OcWbG>Llp zm!2XW^oCyk@BpPDa|}JMr$c(mb<%TsdC37RDLGRz=ypAA(bHrXJ)oDp2PguWW67Z> zEFjO-%TFAjwrpq0IGUiRcimK|m+v}2N0Bq0tyN+yCD$!XviS1U$+gcVH7rb8r4bMw z*hsOq@5?Gl;aQ3YuV1!6ed2_o9GA8 z=rYlWN!~1k&}ArN3SmfIlz34hAKg!PphoKDHD1X2xf&nrr&QEP3u%jGJR%Q_=y1_i zn`@F^*-!mYoE|C;4;4GCtoYIW)H=oO$`8_;Bm_-(c_${g0Q0AIqZk(EyC@Z+RE9Uw zgPG;s4CooGa>f4;Gi zvRk^lu_GH*(-KwgPrwHVvsJ;!Df!qwx(nn=xXt9`M34|cf)-6u$g(x}&-QTu7~Hq^ zSAWN>B({x4OmSKB%jkK0p(_C@7~gc&6qmgWj*bM6w=B4Z99%JGbnAQ=E0v~=2vpJv z>$8qU(Xq)z_A(X&g-|GkGrIxo8(H`hqM(9VCS>&!&AFzUsiCX^$chh2F$i@vvaV%j z2SYcQH4s^5eAZwi8=*|}!ei6c(9j3YhlWcFM^(Y!E zf25+-NQ_&N1naR{5Gv422IMssm?|=+nJVI4rrKiDiV?Ik$7_V1$3xk|n`sd$jqe!; zPC;yT)5BTWIjJkA($XBd8_Bdes|4ZUFmcmLL1+*VIX0Dv0Xnut+(jt@8zyYH07%@9 zuNbe94Il9Kx4rG`OZ~DRe>+>Ly6neKU6Y(?DI%(hs7f2U>Et9^PO7eI-HLol$O)%| zcujj)a|sJ_-d<`#y;NT3lS%nSsVC?oJklTluX(De!klMfgKF?zS^~H<1_$FwFHb5i zP5ps9iq?{!&a|g~=^@=mF%64q5m+$9T;(*juSHtx*39+iwd^+e}q> z6OoG*)64{H(&D4a%AlCWt%zKu61JJD7n-^nYZsa_i?Q3eL1NIX7TpbW%H;CG9@2r( z7$}flwX$1S-Q7(!<1nr;TW(iLbua3@X4uv$mIZg@Qv|TBD_<9bIGFMyEfd$lAYgB} zJXzF7l$&4FL-H@{z40&UL;Wk7U((mStfzNISL$8^s#o+Oqw|N+Vk?!a>V<~IdMeK> zb``CdM60I256J}CKk8Qr-CpAx`tmGbRXm=FMp2JuOuz;YQoNAIKHS81d{99pH2Cy1 zF4J0QUon~PXQ)mK5;tEm2~yxT4kiMr82^eM(WkHJNuQZ#F9r0JDT4vNPLL+*-q6>* zfltjqDnrY;*O=eX!zy|4R)@CiN$+XP8~U4cqMo;0cEX1JQBNx;S{?2cS@gqX;CNV) zYTnR?#R!Ql;&u(>B0@fp9aB!Gq@FBD9j&{T(GvB;_td3EmAXTC;|7sF#oIS{<8vPUE3MLB^Nqd=093!T3MH!t zz<8uFqs1~UbrCF}RIj4nPADoXU9DBol3?LCC>+QN%_?$EzyeIo0ifNd=f*S?n@Z^u zY;KqQ_b(|4{EiLr`!piUg4~S(Ki}#tqS=UeYlDi#&{EfUYy?5=OV3H%dbX#EtuUuX zm{SAGV1dvG(WbA)XS<70&<_Pc8_Ywy=~EOqSR}RB6b8^lf&Px1+$x3AP*7q4->}QC zr}o%o?|8PzyBcczWwp9pg6Zh9DRV>6R7EJz{op;zJ zAclRu`nzwD-iWkkzLt&qPjC!E=VrUM$rYB`blN%2Wo54e79Dos0rBHeY~W!EM(mV{ zdHoh07F+O)$Fm(zNUCZNo)L=<&k3hLjDw}b$Ak~hH1UMa{ib+}P?d|X6pJ@6qKrRu z%0sU_1^~Ag6tD|7( z8FqhYZ1Z3~mEY2qr=Nlq{K_VHO>m=>l~5;Krs+dz&Zx?@RZVaiaxGrxRPoT|l`pFV z=VH2amZ2QI1tO^ZG2oupvWhppr;f!oY0iC`I|J^@dCX8jGc| zUWlhT#5hTMMiXe3>J7De!+Nt|@FhnYs4yz9u@`b0hr~Ag$yn&E@J!_3w_OZbwZUMC2&aeiWlO4~3_ke$j18E6d;{WBe!>RucprcJ6;=XS z88{BiQ3^_VL4L3x7X_2}axgRLoKs_@0h4B83)+s)G`=K+=+{DvK0I(D)Z`dc(@D#P zdcnUOvy^|i8b35E68!o$B&~fyBmYf>y|3C*gKtMtTMolJyxD7>Zm87FH25~C5iVFe z-%#s;Y_tFw-b_ozl$PYM$(mVq>_l0+HbX8X(eq<$uGz9fMbC_J*xbIgwX+PUJllXU zp++BgO*)w^W-UPX2!@MTK-=TZD(BKpYNUcOvrC*<<0$Uh23#$YQe~D>WfAXDUZozV zKElNKMTXTChL0ks{}`LQWLk-M6}Gx>!4@+j3TLxA7qK^RzV)5iB_f!vo@GEF2X$>g zu=5$Q6Ni1wIs>JJS2fR`GYi`atLXF5HkSh{!HDr&0FLGx=>ABm7P^cc1GqUX(cb}3 z<}*ex+)Ts7jB?flpRrWQnU0(VEC-wSUvs!deK@3(jo#qWIW5tB5x!(a!+4+RH&`md zp%W7})U$5K3{@ZPqxBGcZ*fwipHfEK>}8Y^QLkPe<)@*e-FO?y-Vn1mV6?j^TQrv& zsv`})?MZFu9M$O35@)b)@NsJG+JY9yh}uK=Dhk%sK5t;+qx}LDK#Z?4&`tq5cn6zh z|6rgE>}4!_dEG!O*$a@cmwHKF1b^*S1J(BAzG|rV;5&*{tbZ_Y4-%4r%6p0>L;Y=m z6697H>Ro|+Bzy+ClNH0m6XPolh~^9ts5I1130OEteF_3i#rO&Xjq53{Fw`etwUcpP zZ=ylz*|ur5PZ_FbqhopVpU2SReG5&ax-dVTPqW(GJw*y2>w8vy2<5YMXnvE766;@#jHAQbeQPbANo>{_jYa>iO%UX%KIY?3Va&iF0zuJLt{Y<3 z#9m#^n^_%UsGV@B`X~0PKRT`UdIL^dkt5AL({;%xVQ7M*1ZV&lLK7sz&}fxW#E4vP zpolc5wZxZvJ<|oeCvEU;s%PK1aBJDHVng(tVl`mjFyi*4I$g7&f`!2mH^-Me!9eR$ zouwr~^>H%wVZ%|D=)F|u>=Kw1Sg=b~7N(Fs4y$$>GGScstqR2qr)Pj0)5K$`Oj-XF zrYP&(sZK{u1&FL3W0>alg@=|v>9+zEqJo1BMyz?H)u&=~y4Vpp& zbdT(yU#kM2)7G#@G<36S4p1e=Ao8(q1zN@mC-cG{I%*;CI(?Ip?X>b;=1hPDGGSa1 za>5P*WJcnNC3LD3psbk@ctemVJqv63TLEJtQy0v+899XlzBw~B$U$HMq|6}4BL5}< z`w5vikiv7W6Z}k@*yyA+WdCXn~3lBZgFxKsJH01?Q*sAj<}Z8LkA^KDw=FwkHQ^;sXN5BsDo8Vniq0uFoiPIP0{Y!E<-P!j~( z@+ptCmh@Ua0o5B&gWEQyC@*UI%#q7ggAsTUkf>;s8}sNx8qA|r%|1$uscko8Mq)6+ zhx2U+bzd#C_Nb` zM!H?u=$It!C~_d(gK98PA)nX7a4fo3J1TGhEr+`_P#6{1c{##UK&bRhS|czUJbt<` z!U{HnHhg#soxr=pw_(CsbUJnw;Csbl{T5tGW?Wz&Nb>hF5^Vjpz*aP2LKq;g zm9Q5Q08_chhL(Si6BM)<2vhv^LZ*tO5su=S{(4oWK+lhunl}}jyf^r?Y+E^`kX~47 zoRc?r;Xh#aufk$5)EW&?^Ju1+zQc;P25! z8=@6#Yy~Ybw=ErKnNO!1;V!i!ZoPwbEOZW@4=6;0`{7rr{Mc^B58G=-2h|(=_0fGm zLVCy*m?MViA(W4PCfLAYE6cV)R6KRmw$o^M6? za)J3U_YSu@U2xr!!bc&G<_<@9bZz^+%3p}gYr{tcbqOLMq?UMLeFPO1@!=0t}4nL|#p!!r)w^WSvol(F70OO{f0!hxP0P}sxeWU|P zHdm>yDTLV9f_C_}hp6hCd}lyOnfi7~p-M|psRzGOh{F)<1B6~oa*j)#DcZGl??#Ju zUER`XQCqhx8V8{2>Z56mP=jnU-nZ&6K$Ng5ZQqES()Yn~okK!w7Bf&It3EpF9K;Ie zt7d8Rx$oi5wAUc75qa1dJ!g40TC=DB`SPy>6!+#X3*~x^A4hx5E2F(xA4GdIRzz1f zMDyJ?zN)k`T8#fVx`RAe`~e8kqIm`KK8U9KkhKC?A4K1}=7Z?oGfDKXo1Ej)Fr=Dv z4biGL-QS`;-~@w^z2h4aEXThKlp|4pDeAu)-KJX(7?mHCN2_WZK%yQn%K#Gzn0ml0 zi}s(}b#7<*PN94k6n6SeHYT^Qy7wS9b=^Pkdu0)pszozO;{oT7S_g;Bti~2TI6|@n zu3OgfXy&Hnv1C0@V(rb7^-q>$=K(!g%Xku^zqNx7-k9wuhO56Ux@{xFfLkxb_@&Xq zoAE8A?Wrdt8qbsUH;!!^OD^R}EUi`l6^?rKvS@b7Q~p4Zk~W~?dzfpUztNU54xQ~| zs9TfTeA_E5A4KyNx3>I`t)vJ}> zyb+#ru;)7H1JqQy4mI)dtJEBbng)pHBQ73ew{&U0qDN`}Fk5N{(@He^T*flq`{H)K z(z_yBF6*Y%!))nkA8D5-g!4i_%94@~^tNVmIklGwpt# zYj=83yIE!*6)(6LYEp6iw;sc14RG%&_v0YhXVHv@ zXvK_P77oNcm}Y?wHv^Y3`ibF#3_rx>1@A_G6oIX&SPRx|fPl|kI3L08;W#eW3e zcCKxj2pT92**1~{_QlH=h3TssavUxWQOH=~T+jn(_oY?l@+v#%uQy;}mh}=F*Gz-i zXDfV*4obSf^^{Gj;#L-q%X~7{PL;To9=rk9s_+2F>NU{e&__ZfcZ8TDP<%snj*Zz8 z(YQ2vDGLx_Zq|J;t5{x!UKv+JXKJAd=p62p!#KPyVWC*%wVahS~ssdk^W35Q{K`>1*hNp*B>@`DyWM(ei*b^vX~h zI9u6|x!eYD)@BHC)`RDafqoM$)2DRz(5ZIb+FOQB1PNyxZUyT%eGtEEkmnlcogoev zhg*z{ojIVR>!H)C|L^Gx8Nyj>ysU~m z>=Sx7!BNUv{}vK98X3c7uQYv8lsqYlo=b2-nFgRh(f7@vez`kJKDL_fN>LK43^glsWuBY>Q`S+`-eXv^@ zgr^3(!PNX7v~q~4oroLJ)Aqq`We{#0>;`u;e+u`WUPi3R(!p-f9>-{#811MY+C2!v z_4KS>9;2sc24_!a>vi^}a@;C< zb&vyXcpG(k`hpf-4tH`T-8;w$xF;@woBhk&^$eX65%S+xQqmwNxEu4c+?oDMYzM>T zxhrY^KsM68N07;tyKtTE7bVxjTYNaZ7%m%Dk~q+@DKhnww~dW z6E1h?Xv#phqVQt}y3ypEpJj5;e~C7rlWTP(U+0F+`Vo7~eNWZ;`(v5y11zjxYHSA% zTyzG5s*`O-LPB1QHZR)a)yfI~qPKy`PVe<%;%6Ry&oJHd6HGg=Q?Mwtk9me4Ia?Aw&sQunxVqwZNFF8}%_#?!&pK^|ZZ5xcAf zerDTR<^jR8<1n7Zhb$PShjjHYAc|fOA{D+cTd&P6D_wjb%VS(z?J+K$3+v7y4<}HI9_D#d}W%Hq#~~(--eO9#})4A~|~T zUODg~eSqYc#d`yRrSw-MGhm6fVAf9tiM_3XSLhGO92jGn9Hecz$ zPA;iY%e8oK%i_I+sf1ducBHyPY;i-*Ilman0# zV+7f60)L}70iU*bpAPX*FLhBB-qM52A!L zaj1txfVnh#s2tCN?qT%wRW5fn-66;iUZe+*&Y@QY`Ob@U$5l?`7Ygt!<>?ox6t6k- zd;Xexk?dEwtl3m0$P+Hoc%*aaEkRDcNF%RuBL8s?Huxf$@tQ*m`K#$7#ax9=(8YUu zwU2AcB|ir@2fK%f4KM6N-OH)&ucd!{M73-c&F=e|5=>dYOQ9Y84D%YhvlJJ6Yzw#%1QWox5VMouHGm= zx16qvvld$C^cXpA*fIPONUuVP{jw4)Qi%2l&(Zl4b&HIcrk1eqxC$etlv{b7Z3Ftu z1z2X_mlxRZ#KA2V`nHq}*+=kXAK;JT$wJ-mq*n)Et_b`V`ai&B$4RLwek~_z&{G4j z^$B(!9xxsLz`X-zmlU&NhM)+O7H&D^mz-|2YgtOiej)^1Er_v+TA2fi?FraVqx1oA z60re5Nj&i}4IPk=43mWT;Cc1+2KmYQ`e^x)dPwE|`uZ68H}zPL=Es@j$N$L>G|Bh# zXM+4|{xr$A{F5=l&di^}8qG^4Q@vhJtM{#yN7l0fcEtXxU_pd@O+C9tOo%rKkC;61 z(Soo5cL@rrazx6R{Gk&cF5f21(V-1Y@tUn#xO^L#8yO)9Pnemv3psl z`Pi}S(;yrSPmEzZ3rhQ1a2Dq0Md;hmBg89UK~MZvk}km(5^LH~e$^c=n(0fMAjSMe1}S(zhXaDcqG?=MSO&pY>Sff5cCB$J$F$Lqc2n21Wuxo zf8RrS4+#GPX>>vOZy1g@bm+_f&R{SDlkKOwjM-K@Y={57-j-W@ z;PiiJCa(eqeaHXhw&y?S+RxdZ|D7dR81{>HrpM&nj~k8uH*>_bVgIRlxZ!ca26R7m zRDE{!gteIYTie;e#_!sZp_ki}C^r#C9buBK=Z3X8=g&aikA0stOzT@{C)0*_gvK zoIPw5^7l!=lG;8bZb+~9+_}`a)ZXgbk+u6A52OwLh}f=ZF=5%&Ydm8T5w_57!V0z5c;4g} z<1_ab@>zSAeq1nx(XZLj ze-Da%8@C_!`-8Aod|ak>A=t~aS;P$f5BFv9JNS8>{k+V6D%sBq>}Mg{(8Keoci51n z=!k4<>IB@3j!?6SxSrpy!3mH4xIvv=*pt-FZe(ZwRW{C2!gx+}~tnkup?O|@dr9ocq#Oih6bkH9lQnW=IAM3pH4H*er! zT7uxVo(xNs>C_T@72(WdmFZ9qL`-i6hrkiTP-Kr9_x!T!ewBNE6DQYJnD_yGP=eCp z{tKT8zDT_XPmEO@MC_~g#w%i$qfs5! z0O83Rsoqrk5(xNA9)$ouoY}dAU3Y|w!7crgQ z0p$=F01S@TygRn;t4ok-0^~KzO7p}1Y4fKc`uLo-Xj*FJp{k9at&Cl>K6cgB{HA5_Q*(J!ChFG2!hCID zfq_6Z(fmm)EZ)b``i%9l;I#%b;t0xAh_%_DC>_hulaCn-H}*&xf6fs1>JOz zqpUdsxWizRVXlF8Jg9L@v#-zC&uB8zl*CG25TqK0@n|f~#yk6zr(8|xG`kqTDONOY ziEUfQ&QIJfh1!IYr z>masM7v-id1boESd>otJ_L&OzKcE<2K-=-KBS#IxwqBj;_&(>u{CR;?~M@pI&?9w2f>1Tw<=WcW&VB&i)1Qw zuGOW1T>I;e0eTBlfUi|dA^I^Yo7nqC{s(Q?Aq-%xSqJ0_I9G|So#5jyDoO4TXoV`* z3PE22q=AO?hoUL^!+@V;t>QXGMeO|^RQ^PuCsesbE~X1mi4X*aJM$l*{;|ZEchLLh~+?~ z57}IX_dB70j|sW<%f-hVbvNkXCVdI#5vBnqn`H)hr6^X0kYC0i7E2rHd%NUL05dd6eRd5XKvXU9Hv{@osscbwdD(wjWApLkrkZ7+0DoewzlmZAOp)k*#MZcs7{ zK}+hV+V?FET5Qza*iR7lX5H8iXDJp~ZtORC@B+L{)_?-$PMkbYUeV}QY|VVT81dBg znl@@9)?$@fBSZ@Gk%}@z8)Hndz$HWoSF=C6$Nx7_5cF4F$CF_?{Cy()?HaRym0dv? z5GP!lzzg_Ka^{W0pRx434@peAY2qy-NA+ZkxZ&2U$vtnkO}Ku_ut`IO+kbV(op=5E z?t6YCJk85~`@4JZyZ?a)A9`4r$KRiQUF8bYVg}1kyKGXW+ z*|u}-9Z%ijc=rAWo>{xjzkWm0#!Z`d?A*2c%dfuPv-iliN54DvJ<0DM{`A)Se!pO0 z`E$=NdZEJm@*iG#^|jak_@_5&>)!dxyMJB!H?eqeO*reH|2OHcuD)M9{|oY=`!2Yw z3AHKx8YcI{-8ydx4G**DYeK_c*z-l9I;9^E--Pd>fIKDm8}_iWhlGZx{&@aIXvkvE z+l7XQ*mIW9@D6)U6B@o|&wQalKLF2cp!tir$WOk;nGr~1J-MA75$%!6^=@FQtSXMS<&M%_bk zDwWsrSRDO2mc&kLVX>vnuE!rndL#~OZt^uoiT-WGohT#N-)^!e^WPNwmd}eoLQm$G8D#pBc`046HajWU=Ox^UiYpT^2mbo#u_?l4<6Oix>pO+&i})8X^h!s(nU z*qs6<*5GuwIJZ<#Nb za!RxWBc0L4ubK$l48zS@BHO@&pEE=@NJGTh` zT;L|U6jDOO1Cu&CbcE$GoKs~5xxEGKv=by5xRDpk=q+GJ-Z1&VF4OBBRwwVUNO`!y zvS40GcNb$`4-s8wVCYLV^e|w!;G)pdFyt=Wk>5WWvEFuoIi_?elIJ8w~@`;@cYJ3M>=n=HhKMdSN84nYPDR*3T`Vh<0~z zuEjUZ<;EYx3%3T9pn#64!snD(Du!W?pPE%XTTy&=KUrVSSxcbF9Y5kE)9Q29!d%vw zY?K!16`6{2BdGSAax2K5PWt1ye5;+cCrgpNY|-Oy0~t64^xu4p`iSmsh`vF8xj1e< zmtWE&4vmTuqbUr_9Y2gIlg?hWM;{VDYUVJ zw{}WUj@M#=^p8SKj!E4 zNHk1Euj^^`k9mb9+$3V4Avl61XCT=-80GcsXa>|m9u-cNKj!6@fyWZd`gvItg)?xW ze!zCR+z`(AN7?i&`qhsJNTbisLD}oVsr1LZ8QHAPD%_a3TN#{qvxw1)WQL)O65?<1=v_tBA>H_}l^!@8oLDD@~oa7i&os0$*Cv1oH5)gHu4y z#0|#@jA!Cj7yRDrhMhB7e0RatJyuY;ZapwoHD93qt4nvjT}caF4@fGqp$ z!Hg!=cPixgh$;w_)3;}wGtws{J{tATU|!;VtiVrSoXG<~MOdG#)qooG?sU1ts|!)FjlLl`InD|#?$$(p3$IF5zcGAf7*J* z(eRKmFxXu~t)bB{L`%<}cIB3F{4kL$o`la^!2xhP3bX0&tqQxr5fgiv(pG4DM@$MT z*y+zdLX#fS($Lec89hdh;l^t0Wt!dH;+m07`3i-;qp9zhc}j!NQSQTOaCq-tjl}ie zdznTH3LkxjO)Zey$-ubzRzt70xJrMvrB9$Ro7SGWq@|lKqp$>&L$)Co73@^s3fwPf zeo@W*8HCf)SEX0qFfTZ? zgN$CFDF9Z6^gBn|=M45Ten%khQhrUB@GH;jrU<~KL$5>p(YYU7rK7Jv;1Keak;@6t zzwyrf7#%mTI{6mWKjhnb#zeS^9@WwtKV0IzVNx5WVm@#0$IVq(&f3NeD*ybT zyMMr!2tGpII>Svwc5tR_fj@JP27Ug@Pson>A>Z9YHbO-gH8k`mWb5(y(wA&C@Xb)j zCN*+z_J@;h5Vlg{nZa+m=z_ZJEzBV|s4xY~gMUJE?aBO-qL8N=sUokY?`Ivm?xZg@ zb|{Ys*Gn=x1GgOdmP5~;EU_1@m_aK}^M=k)8p^NMn6H-qfx9hEx@Q&9EOxRD6KeIN zas19&tcTI9YOaQ`8!T=E%l&X|CxrH5MEK7&55?iG#`H$qD_Z?X9InD66I$nj6ET6U z`e{z$&zG>Jg4JQ!J$EeJ9 z%TM6cW6xXN3Aeqp2Pe!A^9?HJj>f-n_?L-)Q}Ayp{^85$(KuX!CE9Ug7#zA1q;QuQ zQl-oR^I(x0(FF}rg63=7y$XHeXhr-Dbew|b2W7?`4SmZwN8{Tkt!nM6DFUu?^JKEh zSVzOM48@+X6*+L@9lyE(hBoAK>36IShq&qs{Y8-R;tpiYL+zZnj&r4x^>+$?MG6jF=p*nX-%b& zH2b`}^DiJ(@*ipQPQLf<`}_O7cfNZ+?%mcU^*lSrF0E%`j)fjwQjZFHu$USahZ{|c z-2|~4agIuWRP)ID)5yDl+{_0H6y>1!CQq?BP0s z*n=mkQ6)Y@jDMb^SNLaq`tH3@>EiRV?cF`plK3aH;L#ko=j5Bz*8|_pIfc$PAT(p9 zT8U=NW55^gJvDTv$I@C{o#sJP{elj@_|aKg7sjY^$3DOq*OZcfIGH`cOkkPPgWou; zeCP|jyj0Pd(7MtXz3)o@fIrN zG3CKBywW1~dLyNsR??SqpHR9e<+l!&jki1@GT?>DaTQfPrNrtS zSL3!WBSyjxD{-A*WgdK%jkij$5(*$`winA>9#+06iJt*A#(_@9ZJikVnNX%3y{=<( zS&l*4mhuVoKG2v5PQVdQPVQL>hNJk?q?W;W!~h@~hupK&U_Kfchym}P=`aL!o(76W zjS8UBz=V0qOYmWY4}6%+Ea;q|yaMBR3zP`Ll6n#COfrg}rVPMCL44+-t<#9sCJ*IL zrWmF?gek)toC^HO;1u!;5r{s`oyZow;cqFyb3a3bhatRSL8VG{9^d)}EX|AyonhL| z+xZ-;YKpm4%sct~R`m3UYKL?cZ}`_S@ta|C7zwskexJh-=JT6zY85Yn4xJ!fL*kip z=)O<_(KOEy^IS1sA?7RdOY%!kolrCOXMV|18iF`Qw}pSns0M(_CvOnwo8s&N0I%C^&`ijEc~SOQM=3b zE9>))llJ#)FIkT``pBfTuw+u&NBYQ^`YH8Hd2yM(>~hJm@~@ShE_Z@lZu`<$aZ}lYNy2&7^d{=Hol+R_~~aR#o2Fb|_ve*btyHh)dkKPsNA ze7hp*wPgB zJoQZVA?;D^ueE>BeyE+-uF_TMnssK~v~EUsMOV6E^9E&&y~bY?u6d@W)-Y&z#PEXQ zxM6**t3KCw)cBh59pn4P3r0ypSwmrCX``u8B9Sb|uzlrivN^Z6Gx)r~f&?(jG%W@0 zwJw4#;7uK}wr#x(vsboP1`SOztLz!sG1=R)_hlDlpWU#Kl(gH0TQ~xjTjyJ<*c~j# zjdXo7q92T@xZ>KMcz|X%3c^kJx1jL3vMjD98-tO?w<~}|?TSJ^(Hqy4$ z!MgeWfhXC`Sehe|RH1QOovFjCjKw;e!34 zSlBzr`A9TG`k|P3gFX@&qR8lwpXw1=M!fys1|iwwj}DPgbchR+ScD5lNGJ$O4$MKH zKkCO(iiLucY!DR;MTyTJiH7|df8=^zrC|Jk<#}P31 z!z7q#AjCXCMqz%M#Se?cFvFsOSU^uA9AJ%2#1{$#ys#0@QDc%?ygpx;i$usyE)d#7 zkvqBm&@e~B+#u}Z!Z3*X#@ivfABl~Ogu+qkX4D^yfr1ax9vUbgw;O^+hPhxA_NBD2 z+0r5iT_6A*{hWU{N2B5I=McVu43>ddGzNj9H({Z+M0lZ;Dl4Tc459TSt7c>orVlb% zHa2W*!sXClByGDnIHV_b_&1a$7D|~cF1Y995TD4-Sa?uRIs>7w-{&O_4bAm+X-3MD SzH)A;bOdkKAbq881OEpq?hShY literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/min/E370R42.EXE b/PC370_orig/Diskette/min/E370R42.EXE new file mode 100644 index 0000000000000000000000000000000000000000..66be23717889a8879800e7912c1a75bb13c55594 GIT binary patch literal 50546 zcmeFadwi2c_CNk4X_Gch)7X}XfT3y$QlQXQ3PLHgX$qxD8=3+I1o7_bs=Hp-D}gFD zd1`%JT~|d*FRqL1$_7Liiee#9Ko*ya7bsT&+4B%C1+-8K?e{(NByB;~-S6k~{phzn0iT$T)1i^y1O4u(X>aRm+1pd#( z|0`93FbBDDk0J8^|M&j^4g@15mu<4po;ojEBa}Ix&;(N@X~xX5m5KVQU6tkmYOi&m z+G}hUD$Tou^7Rp3>$k#6o&G}Aw$C;R?eZWE2YgjKNd2mIu(~Yxk5sR*URAj#)ob~a z3V%LQtxTS~b=YGX*`$(Ez2?6m(fnssY8A5oF8L04ErQBxQK?cz%O?nESm09xB2<-I zycVr0wYFY0@p+BBP>^N<-7*#X`>{&XsA&|BYv>CJ1yG?lTb(L0#IvKNZmw>0#usx-|zu=f^5H{w`CwSC%oo!*Xc;3XXa-k@WsDr2ROU=7C@RJO z?$VOfv0LY?blEs)ZLMm{N|TUUU#n_(O;x$6YS)Trn(GT5MFBf2XfG)#E{WAAKYJA+ zJ2n}KRP@^tyZb^F`bb0{wb#x!F>Ku(IY5#;*^5l7$2Gx0k~C8%q8Bxr@$Y-B8^B~l z`P?m?nS<4xnS<2S`I{1Z*%msFk8P#kpfg??cHc(re3MDosD05S2pk!ByFd!87?E1@ zh-&K%m5mvJ$2Ia6L9(zWGzh|q0ZLB)hI6VF(OYlGXrvE*Q=FeqKUGv|j|f&zwnq?v zYb&vZj2NJ>qfg;;D~6>eXOtRS0#Eas}onG`32E@NZ5LVb>3W!%hnLB2H!9iDjSEI zg!-G*mW&-$&0Vdl(%z)jTC21}gcSu_Z_u$n4M%x{!Md$CunemR9g5LW*<7{DYd#`) zEnf+%^Gy(Kq0*uSnO`w(2r3EOFoGK_EQ6VK9g=lkcCtzU0rDR@BnIeL)xB%7)(lnE zy@yY#s;(NJVXC@C_zY3iEi}>8hv}v{)OaI<_GB+Ku|dFi%=pb(qSP>7C`EcdCK&H= z5U`rGj}#Q=2Xzu%dKew$$*$%i6OWv~y{K;lyiSsuwACh|_A4RMq!2DzEUNOLiLMps zCNUR7azPF3GeSY;4)2Hh2wXMw^36e)sLqfHj-<^jN?5_e@ZR%v$#Wzz?5xxQPh zp)#x+bxcAgKtik)#X4)nBU)?4gh*?}eG#k?J;)L*JDB_(uCP3uEw>PZxMnqgCS%|(?l9oNQ zT*cvE64rPGOBKWhCHjkBrZk>iV%?}k5zwfeF9U@-{ZEq9mzdfk5}Y zwB}yb7lI1aF}$v?2W|uR5SggG-498ch`J0R+7Gu1TphlL0r52;P!)> zmMSf#qLUF;v7fanPfc&##VF@ZQ4m38AKC+bZS}-@YR%{u^v$N2El;Qd8?}khoEx=f z{N)8UYLj5nfSotuvr%giI`Ow3EFmOe2(ph=)!C^+qp#6AOe(bZ8trrVzJRX>-}(5y zXsY#?L?m_5Q9oQ|^;*(ZwJ#!lK2NvSgUw#BIe@ym|7+4NFzK4KFPjWa+A5RKqlCbGaf9+cXVj?Fx^ltNHpoe^bwh@D9*V%>vV^DAx5zDibK>PVuaq9^avDX1d`<0IMF%yrr;1yPL(? z&_De^TBfr@yGu>~dZ55oyds7Um1l(njJ|#Va~gg10BBjCY7nfx*+NREW>4pz_p1Gx zHG3nFpi1c+9e_ZCCS)Y})oTt#1pkH4(TLzde2zr~cl*b$IT;b$;g4MNaAa@`5`PyN zT<=!}Rg#Dn*Lh9!-~%pOA+I(YG!@+e8YZWd_v9X*=Yr1hHEoN~WF`FEg= zMc2^42Xd!Opu6Xg<$;V*nSrFFZssFIQ4i!eN~p>uCW;QVTt1b~{VJy`J zqcV=zcoKJ2t!>pxylY}5Ni@G<5{++~Fk0#K9C4?(=@WrvM}YZEBV(xiFxRtnJg;Al z?pTlE82rMQT4kzv)wI|HsOuzY@pycDlRR5Z0nZNyJU^V`9~MI*Vss!R`y>VXQ(f3!-l?$Tv)liBb{x8$v7<&Z zwdQG9Lk$d@RWh|#gIS!(5!GPM;s~%kk~P|+&~oG=r{zN$b$_ngNo$IH=Y1B*5KbvZ6#zc^3jbL z#DK-H^8CQW1D&PR`|)h1SeZbC#6=!@kzPi*Qi?4Sdx=hU`7za_nxICK3V5@i4pA58 z?(z#PfCkI$?Yv3nLMZ3_3}tgW-EyA|GTq=*Wcq72-E^M~GW}sFA=gdu_vInsE$3pB zf}g(1gq+WCNbI2p!tYHjPOQclzHuH`Q!zfc(0?h zguYS=wEe`{hNe7RDDl$rltM{d8v_z#TcIQu7t*!&I)UarM_1Dq-U9gBky&#AO)qb! zpYACF#Ip)Yc~1!)xu+Nj4}=o-mC(+6++gtZP{M%{T6d4z<)n#@nkrLrqmO)cP4YPX zhPo;fADtNTtTuV`BuV~!5)Xcb;JQiVyT=X8CI@A>!<2tBi7A^mCoyGH1E@D9(cSly z0qR(x(x2~^^w41Rbz$-~K)qCuyxDuT-pqqq@!S{3w9xidS}oJ~B9au{pWaw^LRek?@@-go=_<7vUG0xZIisa`q(mY`r>ki}%1N!ycwQ@-TeX9m`>d_&rSn=6 zbQQ+_IuA2UM zx7(f`0H?3JK;qpt+i*VTp%gujSQ?9s55`IK2x93hmV^m`?zr1tmL_H&)UG+xvu$Yd z8s1nml*R%kU2Z;4x7=-;QsM)hBIxv*2kJb096^_iF%Qx`r3vbp4j#m_FtP%q6KI$~ z(-3OAYl>@ljlv*JbD~gpT{Sg^wv^C(Eg>ej^ z=aJG1(0YJ6YCsP-z%vwP)DF~*(GJqVBoZweoyIa4EYbi-7YgeTjtPZhbOE~UE}O$f zF&$w2FbPr;bYZfXaF@f8MzaJ6@n;?A4|#ouM4z(g>JBDJZ+A#?eFr50ES)l0Iu;cG zdki2esYlaM&r1r9aHmXCVF24qDOy^GW=2eRibIvLREYqiuJV*&G+o ze$fAkNLteo-2ZOQ;O+ED$9n<#^iEga@UTQRPWM`(AyF~95MM%aK+_pQDiq#DA==mR z9$FKW0`xQrr-uc!yt}X>j^V=ncwr+7J3FW*Tv#*?)YY_U*JnrTDD6(0EAQgjr6PJC z6)ggF)dA{zr*o=}zP$Ku%8_s%qbuXJEn3gl0;#7%G_ct5N6OEi^BExo=40By<}=zp z#vio`&mr!Zpdm9LH%XF4L&l!uvjR*VE?(E`pueH)-jk2#zlSo=-7oOJ6feleOJopa z^Ci+^*(At)FOmCFh^;Ed)<_*aeMgydDulT|{pwQiAU$x0E6*Kf$Kz#Pyu6$pu?!1E z2{i5!{r*z$R8L0Se20@UVhLkJfco6woa&KV6h#Iy*BBLT9E?pz9`hGY@I`yvGy@Q!KAyZhTd15GZ|8b}E-$R%g=0}zWvA`8=QuEnpm0~U za=wEaZf9oUf_%{k1JK;V0Nh=*j9kXARwg;yEGHnW$ z7tYeI*}1kPdfy&0auOx!N}Fc-S$XPN@&m4vp0k$^Wfl!AmrkczjEu3f1qQQYGR|IE z?uN7U>}(r4bAr7mSK0hG+lHPRj^v&_B|kHXCe5~?8_bs#I5LScX4|IbQfD3=8lI&_ zzdvWgYW~@*G}$M>V61bpU!z z1iIQcP1GNV6`PbU-R87s$nTu?Yvkw8(5c%B(9x@HR-djSQhxC??Z3?dek`%|;DaI+ z_n)S9w>ff>pn;TxX{V{&CYs-g6OHf2!CDUsHky}mB0zt*&4KQ`1BiNdr&6@vX?pTD zM@bHS)~PWk3JFGY2&d*W&AQDA0tVTBu|u||phI5Ek>njM=#WoN)4rkM3Xn#AA4$Le@@?S1X-Z7Cj&2%IAjh@NfxMy|Y?i|nb zPvdx|f4&?q$!o?_)l4@CoAGZ6OX@1Tju$THgA9aJ22h8l zQ%eu)6$mP3RQ4F%2|AVUUF)F&m2aa@_I>3$ld@w-RB#3Fz5q>|=62+T$xiAbyE;oc*Ca5y z@5+*58bP-^OOkKTq9=0sf^(N3DfFM3k}W=|&K6$~vc)28wm3E7iq<4Z9FrnxS7{EG z9<*bsBQK3N>W*-uwtu(%+pdOz5sVtTPYCX$KLL1DxPchMzVl*}Z~eI@k3jbbzKtS@ zP2vIHLA18rw=djcu?5nw0qquNWqU!d7xa2TuXkz$ThGTd#cU)85Zl>O@~a@k7_6&) z6sA7w(TM6m^<&*(3ih`B#JI&qKX!uJw(s8F z9Q@Yzt?#sND^LG~tv)c9wtfTld>#^u@j%ce7G^FM7=ZFrP{)KJAJmnMru)ZpVc62~ zzYzvb^vxjpAEkLAqKkh<^#1J!IN>|!13--mbuw>+FX%e}AzzQL|oqSs5N6y^Cjg)|P^+?ILHcN%3zcP|ds!sv?vm>dngl&izvo3yswnFC|I#<;! z&m39Rj3T!IWX?#sxx@y1e;Y}ESMbf^_#W)SHKvF3^HKuY;RdeM!t8XX= zzr-em&rRo)PrLFtRZR;3?dV`r`Nt}0LKWa6vyvbdH$Y?EfG@U>vu;H0gDM>Fe9ouU zEtnXG1~;&16gs7!N~#K2eG$oVS$Z%hT_t6q3z$)o6@xESAKft7MpSdyZKV9; zC%nG}M5imSXaKzk(~(EIZQLA z&*XMKfM6}8G}bvytUQ}i`*uoH<8n{P=jhedvc8ifSKf@IaC=}>@phwCtm*Qx4qhQE zdjQ*1cf0c4U1h)O@OM)O^GyC65V@`rmz%S}vAANm&0BJ0WHLM$p%alB$p^qm0Bk!< zDF7&@Ww)^WIP|D5LfxqRv+7~mM|Nz5T>|bG`y#>u!BRIP6`fe*iwOSHFK{3jW5vh{ zwgB-{hiQ9}bLtFwV-&ABj@8`KqvolH$zN0iBk!?M7yoL#F>;BXK+{iE&7Mn`yW~|F z*ay#`SBi=O;$k5BD?#1_$U7PIK#?oQMyE4;5x!kL2=oQ6(u`rCuw%1d=%SssIFu60 zThpUda1$D`^bkcAxzQP~X3#U&a(y#4gXx>XjIh4BK7;8S9mt8vpgm4^iHqJGNy`;r z69=|*0k@3trR{WhI)oKuQiv?(2oIv-|~ zZ$(0`;c9(@YnhBQnJ35PHR7!QS~033zu zRZZFo_UDHfY{=j5a8I=(DP)oj^w{gKc{@hOr}9EJ-zI z5JU^|U}+kUMyH%$PEYGCKgMWwW240yGl5OX10_l8W=k9ud4-uemLcA*<}MJiw(yRK zTy?PKXmr*l&_7R*vOJ*skAgJBLpuu#MrEefO&M65j|2WmILv*)B%0w<)lgVanzmJ- z<@l!8=bPRwtDgv$pGhV!AiRJ8s@22gZNo__WM}BH?67){KyPEkF4tnyB^U7|fxNll zLv6aRP+43BhHRplg*KNnYY=v;a02c-n9}LnrP(7c`d4)4VH#KHbh@(!AdjsfcCiC_ zanTq(at0K-r`r7q^5TQkr_eThxco;IU4uZT&s=0$p{1z1R|ufhFMw8z&c4GXx&LrF zHOV&o)>;?Z2PtgB!oTKaJ?AUN*|N?re$cN@@?y?O{jMT1e?nF=c&bQn5UaK9gAG6E z;n249E^IZy^vQAC#GRJPK-C^3zI|8!nhFIKwB>UB3NWshMSO?BewgH+n;*hRk^1J)~W!eu?KR1g&~vQ*-t+f*m4{-`6fmL9lNue0Qvd- z^j(3CTQoBc&_4=nWo2y6zjr^cH^i)ej2CyZnt&lJ92RYVs=c#ErA#K^Mss`3?W2)M z$)FlN{X=BdDA|+5s9~usHeZ{>BIZzZN2>QK8i)+2zpXa2lRCGetJm!H~4+mSMgM(Zj65h~Qn_w1uDka8>A ztHfAJt)HJ_^-WNx*1ee0Fh6CLMu2-@BQ3iW3jWMXp;sqjpOU;2%gV}9U)9b_ z!JoM)I9nzfDx3GwZzej^hBNlD-b6o$Mwf~D*}U0sq03ap6yqOqyvUJ{?4@j!NV~Gc zQ+fZc#PYplK#BCQw3x@i^T3D>A3Ucn-z2}jmrhJ@re%b)&t-?QkI!b=kME_gCb(S% zq58%OAr)TUjtMTv?5V#Y8ye<^7!|x!1~<~2-11Ha^c;4%%qL^K#+Ddyt=LS}*_B#~ z@mh|?Fw1+AX+b-xgh!m$o&>L`8{x2+%-oUe*3M3x$i~#R#FPh;umEAYD&#pOAKgRa zQC$hwnY=m?Rfwp9p0p{|vOV`N_HY0w-1qj@{J^v%j*WB^T(*KTdLo-mFHD7EeAAhH zm%R*zjs%OhEVPFl+A(JJ*84D4Doq>Vs1zZr&psMMYx9fjWy}W(u22ePb_2*aGWREV zL4}e`NQxIN`KH>5;iN<)nL}I*LG?ybAEtINbVEt~kYvHK1_#-2Wg>UJ%{>ivQivfT zB~bIa35sl@sm5!9#;EmS^i^^Mp~1$TgVtvrjj@Wi-Dnl_k{EKbj18-Mx@dRV?DE^q zbk^=n8_^2i*En?807+UseyGtMa^@oK*ui_WZu+MkN@5FbvX|IP<$Ic;^(OA21{BN` zExXjU&FTf~7r?#QVXB{GlI_j32w5ZLPgL|K0;5)>&}*|-3ql2&$$-4ZNv4X-$)*ak z%T!lvS}}wko$WP3&dm@uT{GQ*LbrB}1E(N1yUA(K$xT}^ktWWjTm;i+t`dYtBgIWC z1))KJ=h#HX2FTc#;!YYauwlZ63xLFJSjBjaZ1{k-4|ktuEA=b>1kSUasw@5kXm_47 zeYl9CB8t+6PTG{0mz$=oTDPKr8fWQf6{6{nYAz!|p0Jy0Q7(;_`D0!|QQC2m@JR;) zyq1Zk3d;l&8&v&w)6;-UXK+xS^y|Fh(zKIw4?gL#dNu|M#o0=|X@&alIDVUN+G?soOhhVnOtX@3NQ*@kruSN|m{&xvQVCm4HSBy zc*Yn-J(@8Z2RsPzOz!(Ih@JSLfJ$ia=_$cxE3~f|M@EL~v>)*ywGnmHEa_TjfxAo9UUc~CrmQA;IwdHO7 zAg!q9Etj3pVSm)q>$x_Edqp;mK!D>>NveHY9~mbkw}{&`;EM?UfOkwdnUH$2!F9B* z535Vm58hS#ivD_>9K4%d-oaW8lP{!FnA|Yg9K5sdrf_NI!OmPenFl-d&BanpUioc} zSFu0XIasJdh8l<|Kbw_Mg-ggeaKx7veEY>hX74N;2a6}4J0xNYJ@vb+RMd}+t7Q>v z6KV4k-#10VWc?(^nVwm*$i(gQIyI;>z!?Wec9FN%??eCY(KDA+c&1WdRHgO+Vq788 zM~Hoo7@za#&!Z{>wcqQj06_j7RmfSLsG`4&VoHl8TI-{jL#bXx_MD=!($x_vstRR( zkIa57)1soAbFcwZyANph=(#ct`=*jHC(rGY|MCq*g5Hr~dY^@7S%|s;py#mODq4*2 zw>GGl4=wE;k1aKbed#%gYfl;}o`pI!LY*2|0&|3hi#9DApW`k@Mm#b?I+(k5(_6@J zFi&c+DH5Q`0xdvFew9+wji`w^d_ylU7}=$l?;g)6ReeJ<$2-$U@g;(M_G@w?b}Nes z@(*9rxbe;m_!42|AbSG{L$B>LtaLx3t*$% zfn08y$*+A)!Ew%vTf*gj%CycK_Z_?Muv35!`&{)8hY{Y0uxD-r8~2~#8idx(PHj^w ztaTam(KwflMH3esbm0T`<5O(lZVE=6l!+7K7aSB@@HOLm9$#>(Y8Spy3l7fI(L>{) zDY2Ni2j6t@xYqryI9sU7$126@oe)*VKU(FZS3Zfr?L`eZg_~v+n>a+gxRHO&mAm-Y zR94oX;z61ngLy(S_PvrZcU69k1;Wc;Q(Lw(V+3u!UVeQioj^E~={&el^I1Hk=t9iG zFlVD(9@kC*K#pwEo{0gZVzDuQYh~ke%?NrwyR^hrscnUo^J5GHQ^~jNq^fLpL2+oB zr?*BxeYy*Zq+#sq5ghAaabi>>C?g*kWBGP4Q|X*iW3&O2 zW^xPKj%6C(5`y<@p;fO79uGG;4#l+6GQlqdmSL6(EK}nTO^*h>z6~jBpVG)5s&MvI zS8DKWPif6%cn3FoEmI7Y+Gz&g1~uFT>*gBjJm5_PKn6F{(^;h@xoom#njI%mwvNr< z3rRF5E6+7UcBp7tmLt#YTU$5XfWk8ja1(0uf!350Ib!xabdO-TgblP^-t2PD?UY6u zkTs*ki9L?uj;+AeA}K|tD@7LY9_2;+xb+b!nim*WR~SBtqLX9t+$EDs#A|WXJsU^N z@F<+Y%3Q+Pz=gB#&nOW=bj@@F966|C1Du`Di0!!SW6>HYU02mSW9D=mE3BeFkI8d6 zuoDa)zj>f&u7MtorW&Ec=rMqrgV_29K$*`N#c(qT6En+M6MV)}C1nay=CKqU-hap8 z8udDGCkMU3xpP{ghoXF`iiGh#({Hd==pYlLH~3k%V}|m_`e;2E-<_S(7@(LjdG<0I z9_3driwV%B(Qd?UWHIEv5)o&5CG9!WuP5!Bn;lgX4&5xXakFkWRW)ww30=Dghl+4ya4vv8wRTD zN`1rN_h22x3i^K&ydMF{K;>Q8lEFVGSc23lgWnY_K)`39yID3YJkeZffH!Bjf=Yvb ze9+24{KMgBDw-<{G^#7R!r)KBZYQJMZ=&R10Bno{}P54?^{S3)kg;C zn_F#p?yf8ako7&wKY;w{S~R~&>oy3Z<+(T#QAwUQxCzRWR1)i7jEp0L&->O|J!9Fd zaSJy6J2rulr+TQ5w<4K>fd_&jt6Vn3>@nT4I$>H(l%a0)<>H^*E&k}Vx|M>%aJzSNtTEFhk;!MDlJ*10fi*|1_m z^qitKpx-d!J|5+C&436NhDO{>U+QQBy*CQ`o+0sZGVx)!b4NKHxfQ5n^$5dcw@(+|0;LB8vZ8>4 z4MyyEzAY6ZJ5Cvn$rz3|8E~$|bPbw9iQ31u)4i(TKWIzjV;Z_mH4~_kgAC7Wm!a_N1* z-h%s~0zHmUia>b+<={>jBG(JR1ZQDNQ{0_n;Tj|mjIbL7nt=QZnYoT>im;%YnM$1u z?UT%eAwc^wbEZw>Dd$*iiDvyYPF>dqUoqA?g@!}&IZyRQyXdqi`dxxi|6!3mamHvKpRl{3GW zNcoX1UU0fntA_f-ISM~ydmXp0)EZRGlGqM9AMpI_e{m8z?P*CeG`4PwP@z}eAAyr; zHudv~buI5gzFFF_nJ#LA2eMSC3L7-kpy3JvkZaBxmI-uBp!-L-U3OMZ(cD^82-S`u zflHyw^cWNzCrZ%Y)O>&hP+`Uh_%4JqAmB`9uwd!fj0%Toz?pqGmqJ$szu{HCBT=&& zslN}U`U2szL}m?8Up1UFB9d{y|LY^YW> z2e{dQb4Z*d@m13)iT;S<#eQ6`4)~5!yNX^$+>RK%a7&IW#}{E$M-HS%5$>u3W=Hs7 z2TTGgYkcIu;2uZ}M-S5}jQ+UP7HIn^KpD5VT{-BOl!#$85aBLV{ecSUyc~vOQJ;um z!F^~s%%y(9u;7j>5uO4k=*KZAOK@&zt0UvydQ&%11J!{9m|1K~DnV@PJ>)QqhAM zj^b$nzbZ?hIT;ftOvEAY0AB<po=S*FGxp56k>w?el}U^dKzbeq!!(=A0e3~4kf9o^Bf^=Vb0 z5Q%+s!-Dds0^OMIbd}cX#N;xYtVfYAME&QWR8M0-U22eG1ETfaC~jHq84iwjWo{#aTg)FRn}_!j*| zuo7CO^?Pws#vW*{a|npdVkSyt`(tCyfvqsUY8S_z`xnfa^R-B8L>f*;&sjf+)$B^R zQ2woe?C#X1;Z(2j(^#)%Wvn-Qd8{{cMQlw&EI)1IyGko#Mf0bzZREk`4?qwWEh~_= zJeD3p(h4LkkG*}(@>p!%hVCTM?}s}_rDI4nX&Yiyt=bP`J)i`Gkj1fv1j*(PfO06x zFGl$fVq3M#0HX?^=37*C4XDBon5BS;28^`6; zdnpfs^|!ats$n^fVwn0%V_P>e40!cIG%t=F+>EtQL{~W(-gutu4>`82EV!5lv9(t7 zXBg@=OJmtBPkFf@rEEaKC75gG49gon3Z3m^sL!Uf`nFYAm&fuQSNCCAhmQ1WxLdYE~<~c{42MP|vl|a+FlM4kfYpRZ8|lNdwsP z31^S7Q@Xrg(WCVD)V#DzCY5ORxy+@!_r+~|r*}oHT-Hf%rsid&e-g1QDcsK1K&NM10bvaFfDS(nuuz6?|Lr z3sRo|n2^--7aP#4oq7zPHNd^IJb;U2U&JyRVih%dg*yR4I)Qc$$;r=~ETRtNhIJcB0$cI&O<`I#B-i2M z5QU5sP6a)Jc3)m(7B8}$<`2QfEbApUu9*b0Wh-opHcGk3<&;gT;uhwQ%WN{%PL;TY z3WwlX74868vj#F8UL-_wLx>pyDMNB{^O!CXjf-O!v(qhRW<4a(E7)F!Tp3ryW<@{} z&^g>Fhb=*m3LumUgkZX2mb0`m0?ia?ga93dOLH_tfN9RHDrVDL1a?CaAfwQ}<*^#< za4?}<5t{(9S{xgo_Xp?XVYdM46j@3eS(ZN*hBI$UfaVR(%gxj5NZ1?*cjx!fA*cFw z){h1_n}T|5xU`A8saLzWh4(H~dtRfT=>b+L7bOTLmmiR#=mkZ0H)&VJn&5xqXV;f8 z)8bB~UxOf=6FnV*pLuIzD)3x@U5Sb?;#V(?rDG|14%Z@hg!dC>+RCasHa&5C^+&9O zqI7FMUyN%NNwTffc$>bo6dYPKl#% zl9CwD5+N`0>Q%8mT^Qu)l$=~gp-&giJ;_As{T}zd%2INslt2ckI0akt6cN90&(MW? zhAiB_cH!9I%pzro-~QSjuP{<;%yOl)j&)vKcVtI6y>#Ry|W_lq=C2BydOH}j!CUBu8x|7 zUEme5xFY&FUAoy}voqHIh(I2FXkzW$eK1UPr$PSIK)Y^sC^h}_W(R7*0~eRoba^$h z^K<(1&5k0DwHkpuaw}NB?}7LOgFMSXb8mLIINXy6Z=j=;xBhnsZl z3u5H4F?9PtCxj^x8H&7b4)@D_G4j#XG=88H-SLz0XW0{DR(&`3LbGy*WVWM`xZ$wXj zvAUH(SZ8&Ex@kX$TcVfYYf^4?qwZ0xZWF6JrmOBQggTtB>g5r7nr6+J!uIQ^$eLqM zq8D)Vbeq~LM({(UJEFbjCyid??~Hhw##sNH(VO~$Qfcaw#vVE%LoXkTCWAF+8b_tE z=Hw+&22ho1t)c@L@VZd4g9S4FmuUA!%dbb%Cj)FC?1$JMSZGt!RS9EMDVpTvXt^w! zo*7^RAxlv7>V&-XpU{ktmamDXi~)I|;I7Lk$iI3~2oq;bmrm&&E&p*9oledJAvgS6 zLN4O+{4X%N3)`1ba=|L9Pj&#?PQ$-z)>7T&gGlbRiXKUJpbd*qrmHV#{*`biR?>uI zC*YpC3~t6RQ`a?ghD6DKSxJ$}PEa@E-%@A#FR|^{$+K3{-)~|g?O$**xq26_)BYmo zx@a@&=oOu8SV{NZZJ)=h4-^cCj5(k1Y}`DJWf!zWiKw`r;GO>RZt<8N}K$+`cQ z$m{=0v_Y+0r=|5bx}mdv#2ItXTeTlwhi$gy*jT?@*?u;1!5Ivyc6JyE4tX)!yl9U% zLQeWSJp)X3TGEY)-+A~I!*u`8Fg-d_!J?Et^eJWCm~X?4NZo>i82LCx#Yt)XGb{k* zQ2#p?&@MRW+mzf=|DZB%)y_3C8xcf!{t;{S=4ok0XMm1n>Kpx7P4a^goX!?%_KdOo)#x7&I}N6- zxX5QD%?!+fM-DiWZ(?duc8H%3?RlO%0Ao6paz24^jc?FH8;Cu8ivVOVvmo({m*K}Tdf17;AMH+LxtLztx zEZl!uzV#v{T<@IzAK;+r4$8)hME#s)N)3?GgYw1pjLjK4;I2Z+p1N{llXkvQDF0!u z=7i?Nyb~&RW3|T}PQ@!08&U9zgE{nxWt<4Ku4n2AOIv*-^EuqUbNe=D@YuW! zo#SFs=NkhH_Y7OO=Mg<0F5?yku9!|9O7o_^XoTfo^P(|i`p@a~J{0e@o8W%xbsD@= z^mzZQpW9}uVWSxvB{+xWu34k;g|x~kSiP(IVQJ?#$}cXX*1onv+srN{#}zwLtm@U$StCQ4n~x7eP9^E5K{g^`E@0E*;+Pw7&h0wkCu_y<4l z_Z#Hj`Teo-V}5YuVZT34{*@p5(fm4-{N&&Gg(mr7{!Nna!nCh;u1NA?A9-q^V`+E(8a{7U_nnjAW4^D3$r!-2!HAh56$$fo50G9#xOHA{Sxp3o5FS48|T{)dKB*J ztqX)v|Id2tx&Mfta(mlL(!xwz{5D1cT%N*D*_L2uImAcb!EML49arP(ab%-OWoMj<{m=ERFx$&AF#nnD_AqBOtW)HFbc9*M-YWYA&Rp3k%9Ddv zmoDE1vZ1DQY^7Gm3Gj_zUsY)E{x1|oWGqt@mn#URpC4BFjMZ2;Fjbu(N$P!`@7UAf zwAKK{@x=cN#o>jQ(0{2gn1aa((D+_CHam1jU`cn&tv*otKU9-CP|$PyU#WZkgRK2K z-SfZG1dqo2qMqqec@N`7%;X8qE;0&vd@Qh}oxh>i4WVbb zP|1x*vYwCb72TZ_hopq_>|IYz)S~i8RrwS(bDfK3uWe}LR=A6^SG`dD>^Vt3cP_10 zT6ghnNc#F5cccyd5pi76V#2no*LcPx!foNa2|LtY;{{Vd?4?N*@eH&>?c0#BJAEVE zwcwQH+sHZdBF<5nq4gji6&a&(R&t>5DuMcjnVMVy^Ci<@fCnD}8hwgS#s&zs;HbfHH=3lhZbH5cLM z-}Vz!IXhW;UidkcP1=hlRn1xD;a=FlHSJ1JBS}zM7fk|X2!U`SkYMKl_d;>16w1Y3 z10LrziRKm){I~GLB(CkWfL)dgNIP%h2jCZwcHV>oaNoah1dbbGWtC!S@>B=i*9n?XttY$P1nXQ5uyg1OJh+kt+gOnKW_YsC^B@iY+i15*Ip02S zQjU-DlM15wjESFbor zde*n?Qvtoe*$SqjQo6Yl^7i6Y`k!?mDnFNrPGl#{!OhCCvcjycMaR#Nm9a?^=A%#M zXJ@Urh4mxE0iB9dVLuz6%G!x6|wcy7R( zeLTKWdosTEoj7G#2T5J&66#yx>yP0|U+C?~mUuP~u7Yoqe3MG5p?JQ~dWXFq;lGBh z@-lHU_`x;I4TKCMxJww;eT*L5_m<;T!QV*qBUvPK zCMH2Nw!~i~JMwJsxWfA+%rnwIz9J%PyrMm6kP(k6ynpC>*?!hPp86VHIeBN7$fM4Z z$!IUmmq(r@9V^YR9}5HdW#l&N@^QF~e8##uCc(WzMY5Hjf8*F0k-gTLaNo)51JV3U z%Ib^HClbF{2KSFn22bchM0uGU-Fjj9)OEaR2}P{Ui6B2c>?Z0|G~n+FQ*=ar7 zfyu^!HgnyFPtEE#5-JZ=ZTuo8Va*!}xQdG-Tj(kL3Pjdv0APTJbKeZ--Yx)`A!Ynk zmh4dXt6sv*wU+n-B%p#@;iAI7$0GR%!e?(~RlLb5-^hWfMluLx8<1E{|!Efr-?uyw}cS2e&V5hD+mi{sa{#aHe@5^dC%+4Jbc%9@UN`0K@j0sWb;?(ulrCoxK$e7zove-gsUC)x(>U&2h#BKA-;o$4pcRJE+R#qa#6Cfdwk3%^;mRSeldM? z7Gy#`Ug@MKn1JyfhPIL)uI5^l<#{{hIn~q()5qh>1DNSp7q-NYVLng?C3*3C-4+_1kIJ#7jm9rwfX`#_ zb1VT3ZuBMK7cZI20dd0iO`(6m?fhR%VDKJ5R5or8{S&u&4z;jH zvH={Rqn(3+v@ehbs3Ho_1&Wq6riKrMG0kBAS~giIH_@RU=>8~sDXyUq?&Kab!N%gR zp?=m`VR^+=kzHx36T5yB!H&(d@#vi)_$J|t(s*yE%9MncmhdrE!rUVhxKbYW#AhKuLz zHKHly2p-1{-(#$)FyTe`r$w&*V`m z;Fs~+tJ(8*_@RjEut!Xfv%uDXjz;SolXI}bzYWLOdHhJ6r6wcQ5n!P{I``xp^ej6p z4;{OCvhmX_>?YlYF{xHI2%(t9WG1r^&(J0`p0p2=>cYgK}Dw{3nr%r+DOJ1 zQ^BFgqRDA|o~%e*^G4#T-dq)ep4uy$GDcgKh+(yXIf4V#7)xa$^!BIH`ph>H$;B#O za&>aC#Y~=yAlE06?_v*Xhog}Ec<0Zkbzj7!a$6^()&}y@1C$ks7c1cW2OG?D_`KKR zNvxlLIaB0`Dv5Q}i|C*QiImqtQ7GfUES1ZCh)N!W)e?%;&QBbptxg2~{Q~n)AI2K; zE{lJ~Pt2AM@7iquvo4hF)$+WCoC>h8m@ z6j)Xy)_;oM{^7jSATI%VaE42)U!F*>wZnA{-L#aWtX&Q`KgeX5YatyoBOH_M>ofn# z>SR?@3d?y}kZKvm6^S$hakh0!X%VH9?V|auMA7(8V(U6~U+xYm+_sF?j82LJiQrij zKDH30*urOhht{Fc8@B{2Q>=weEL&MUJcUZ7vP?nxOp@(C;t-_)f(H0@K+TRF3#Y z{sU(0(jBnY{vOB`a4r&C+Cj&kRFd2#&>|oMqb~!}Ktd8AXo~zW;NP)Uahakb7QY{b zKNILqb$*eH$pS)R9gFS{95ynY$M3r9z(z_9T%rfD)9qIsvj~21CRVMrfBubh};g#57ZcH09r3;8n!Y${M* z2!IQ|^0EQjoZ5&Vh+>Z`G~;iRHo~0Oq>VHqgqgibt7Cs+%vjhNSm+uSiZ=r~0YAUh zq`j6U_GW)dSPq^;D9?^Iv)Q0Y8)fDX2377Hyo>$HT6r*1+=Aav^J^}aZ&aUI%2puQ z**K-f6-xYMUhtS?Eq`9coLLWI5f*L61`sAz7;&^Z<}vZR@^zZQ&A1J&D&H6h4+OJN z;x26%+nYvdNiX0@Vzv~ExK4W4W#K<&SrchiRuhqCHobs5n3$)C$IJ7hG_(4by@#!X zBfY$4>g6>a>owDBInVwaWq%H_KL>kxtv~kiW_I+#9UZebRc)>`w)U#jUg%Y6zSs+Q zhJ{)!c5#mPsy~UCL8xWF6427C{!Fi$7&G@Zz$LhvC?%MVt}-9&MMe!COM<IuVW@NEOt-imP z7oen3*F>1JCO@H}FI6mr*B$6N9?C=Ld7(zfNuhkLn0maIH#GuI&L>e6tHab5#PLH1 zmNSUsSFX@z5p5RHW)XZS4`|#X_#}c)B6!AyqcihRuiB%%s=$vbuQBOVmsV=Hy*Dk@$TxISRV9I6gY$U62n$2Ne5{iqMaeX;VDIe{@F$&BbLP2p6VE8f#!ycv< zFI#|gh93rIH)5t31o;D@<{CEY_+{A@G4w<)9)YH6@b;!x)$|^IB#-MCXcc(t&lE4D z`XWlOhYj^J$*x}$Ko>WbQ`I}h7z>@TNaV<(0?O7J}=uAhK2n4*xkq!YiehfKDz zK5GJ%yvQ4!Ge%`16(fe0nQF8Ol`tN8?vtH(z6`loYc%|!Hywo{3sV`Wsb#RZ7Y6}F z9g0BC7qEg^V#ZYmvuIpyR$SrnGCgp>DZrL{=mhVJun3@@^-vD9<;)n%2WE8L80}*A z2@As<2m@}Sn8!4u4tFTxwYV|<{)#T1VqTxU)NEljZOB|=W}7s4?eppcr~;_Hg(2%% zzM-Z!nR>KJGy}JBikTKi1RDO@n|{R4=4g8~8ZRb@%~flu&l$Q^#SP|B<~755ui`&N zwK~`APx{1w4Iyj>wCUJYzE!zqzE_7%%W72SBDxJfIwsImVJ3cFcY>;Zs5#ZAs~ciw z?=Lcw8e3QmL(FvdH8uEKCLpI~sF{j|x}oNpR5RrZb*bi=v>IwDtv7x`6s*X=*J^IK z&P;XzS13o~H!ZHUy}XnDD2Tg7V_I)TH;TrLaA?cRI|F=I5B-|uQMP9I6NhZ@`BMWm zy%jO&ElDNpj(Aq`;|8~H+lol~EPkdfcydMw_V|{?&#bu?W0ns&Dm@Y4G4vDK+OV=W zt->XtYt1ToV0**b-t-q96KM4*JOl0WZNyf8eOhl{fO-k_8NFvB!64KRWeE{N{jlBv zcD0iXkqg#`eIuw7J+h@YvAahYwc#-yX!x!-74fvv?zF?bX>?~Gq}n+_ExobN&WF1E z=7k3Bb<~H)Z~^hW{L%%cWyC;XVX8*g5c3#+(h9fQ8}tZ5av`NFG0|eu8N4plt7{l? z9qsLqi!ZFy_ei|;I@;JFkM4=8kmG_lvl(C2sf{-K<S&nPhcY`F-t9xfI~xAphf+Ekw)Uaqj)w31 zkfo#Hr#{rXqv4vq6yMP>wl5hv8YcH8ZAZgz`r-=f&s?h?~M10!6&$I;6f2ZCzr1DQS~7B73V7kb2L5j>EZ5S;2-ncu! zIF8Qfe8`82VPuMBQAZtd*hPVYcw=3mECr`)ssQL@UvqQDPhSWmH86*gZ>9MQ4eY!=pBPA9pKs1hfg662Q zIdHCOM}`cf9a89DZ@;=H=oXc@CukOZZdHjKZ+3U%_SbbPQklONg>ledRJb{92XAk; zuT#0JRWC=q6zF$S&Y?iVzs4x=+a(GVd6G+?hbzRCF9qhIb^L(m4Y);v=U%4*RaP4T zS}#X61+%$Vq$ae(U8Q0*S6VqMDX}}o$4V!%aDELTp=0uTq{hA$ObOgHF1Edm3R@&9 z9bfE-=-;|AB^J+LG_j3ov3Sq9>CKH9v3LNk>FbSIv3MA->3y1&wqn8P{S(q3t`*(| zHGWuYYjQdc5-M7ggIg*8BYFOxr&W?yU}-F;-4w^Z=|pqHwn5Fe1%zg* z*xT_u^*YEuezOWk^i)KNmIyF>rZh@&B6ZZB0q5Nh z#<7Px`P|68DUPk_q+tVB_j=BDVC1(&#q`7ZP>slKQF)GaxVOZyTXF99TQ>Td3-_r= zMIIa%6=4i`0we0(Ecr8iD|_1GT0%5%VONt7?uU-wP?0h_Iy(Id>W>pV)Zik85#U6%m5X;MFzhhgZ~Wk zLNqIo!CPhUD=;rbvve8!7a6<*=H+NML3f3SQ%!WguX;ITI%`tU(aekPw^i(`3*?K7`QB3*W#2{JzWXk$ zlHZhflE$D#)e=P%jXsJKC`{mV*Mt_;DtL$4_&cX`b`d8S7lp8X6= z-J7ZzdxHXnJt`KgAj=yns4j??*NK<87hGUj>HuEh9RPd$(+v+qHECBzHN`hZHRY~} zVozV-Eu$DiO+P=x3SE7Zwh0)&2FBVbcCUny*p1PYyDkcwsaoF0A1*FS-!wi3&UEka z3xMnxPBkZH$K;sTLaDvoFgk{-`7uD+poJA}B8H4!tZ6ZF+@oVQ<;S>(#jt13<6%m0 zB6HEC8Xwcp7DV?-(6V~n8S2+rYG>~h@-8wLJD%9?^E)zPU6*-B#Je=tA<9Mg3G8{v zPwMJihc=5+uagIWvOjVf|I%OqT$ZAVI}pcI=UKw#rmt-*{_>2b_et0%VmLh<>gBCH z^nTfUfRCn8hAXn)Ktor7t{&Kd?fcj=!F@cAz0={j>1($qjDz40#0jJfdU5b?v6P2Lt!fV80PtcpHrYo~vK6M8O@PX3INRXeY~;d|kx> zO|32u?@;&ZB#Xy<#T}()r5&y8Q4pu5o|;=~>MK>O{o>xBnJV1kdbGTTxC+O!m=gaeIX)U{b#D+|1Q?^x;)|qEE(&TiTLL6uYQ^6 z9;s#@on!5n_#+(SaZl(b-7kj9(>XW2&Yxeqbyuqd>j>WixbqJI_hY zgDO^P9%5nA3}`6Kfw6cYQ+c!qXphTiY8h>~jHZ#$W(5G}P8lab#?i_+iLvhJSa#_w zy8XZLn{7OEz639z-i`;Q5COh|)KQth6FtXr49p^b2gZ7AUAuCzFqAtmc5Tq0Sgos{ z7TdRILCSwk2sdYZ*^G1N4X0dJyr^s6n5-HUJF^0M)pbz**x8}8-<8r`psvM@A0Uk* zU#qXosGN=mLP*)Zs$HQ*U3yXu+BfwxE7%Iz^ZLnFP_p;qf}fd~`FpCrX!c}xxog$T z^Nr``FWf8D?8G;ugTu5?-!xi}nI zW2foabw{M_8N+dB`nnd_*@}Se_b1J$WPkX2=Bn19p4vN?YQCh*`>$rtsn2<#K+Q`< z&3#bKZvKXLTD(=a% zQ%6r3AJ>2iM+ZWxjc*)XV)CkMD`@Y(``a75X$6a^BHPaVbvQ)v) z<>~Vc#)4@k*{`t3Y$-0WPM04Mzge(5O3TVCDrZRk=^2?>zIO#^o?YfLD6!d-x z_D!^1!oE3~jL(34CZ?pOsrrrb$tPz@rZ#rSO`}H$gM9xZ!Mbr z^*3kFb)3I&@lxmAx0vr+yyV`UZ?x{(y=U*6Z|(cwANvm+JaqU-+o{u^ocWY_UOe&o ztUK;ndHfeJddN?Ews89lHV_I>o=Lz zg8Mx(XA5q{aF~^XdmNe51@{6nO@jMzGIfIcT{3UP79|m8hTzU3bBrL-(+KYQkV2zS zG-~^4*!+QP&l!DDiS~jatYJ@(QiB<`XGni65BJBL1<8VdZz}($u`;NC7;PRnB%p(OEb6X*ody-Y#5>`<*|a@sbFFU zZf|x~IizL^M}M~qxIwtepPwMwL>v8ovV zR&W#PfRvzzA*s`)fD^H}r6V>YNii>b&~1c}WP2j_DC_p1D=BF?Y(O*HcUo`Z85Zgp z8-e{;wytZ$d>BMDEP}{8l{O>7Ck%1jLWwhiGrK}bzI$9SlopzOu;P*s?p75x{dsmrfPnq-?R9T4E00pj@ zU=N?_QDrc6I};{x1YR(9=H&)*w{UADR+wmo0nrs|Cs$!Tt9=}DAqCIC8U|>0RTVP* zDSHWa434(igXnfSxeyd$JtBB!g?7zooWW&B6&x%TeA2A=b51EiNj4qFO@kNO^hKDQ zNwu^%Op>XqDujL1Cf(Y9_zL@=&7?O_dU7S%d$eKA*x<=yK>n>jtq{5R z^4dV$-PC3`TDRu0>?_1qp3K*}P#^yY;h@IA$OgCJK{z~UFyIQ$;+tgLIXG;5JVHC! z;9zG@qCFxyO00cIlE@F`XZsJIMDs$0CkplSH((8McT;ws#4B>3{PN`5c#7tQudl@l(lD{{4mD6HyK zvfGc#;_D}g5AEpdLCxC97N}#S{^-v^%_b93!Nv%-4!30bM?M9TNIYJqqejZM$`e3b zta>AWnTQ23m_;0SR5PF1A>&Ltw7~^}!yb~ZpC9eijUIlsv^<#hfsK8kEy%J~y2A2S?g>Gi|z-8uhdFqk; zijJA282oFKf1SBoiRmaG!zppO<|1V? zFaM3bO0*#H;a6=w`p{ZtU=hU4DJA>+hgQdTrgRHDb!_L^9w~jZR}4=hW^dcD5&;Zs z^EuFdK>58Tru;*zTw=;mVoY$!C1zBg60^K;_XO00Q6G9s3%Ozt0+(~6e!EJoc=@7` zwRFl(l%LYV_FuD(qgG=k%8nfVlcU~p6OT}hD+*h`m%&$#TBScOvPc^A_ICky4;%OA@GVBB>g7z(&l zb9n?T3~oM-3E~ZGkmnXf?>h165mUaeP6R7hT_D?kq{r|Lo!V#xjd{B#H!;|L_%3fy z`SgQrI)a%9CLvFq13R@Eok&6vLUN4o*^ z%A{zMTKH&o%n>^x*0Y4O!=JRWs{s{Hp${3QKo{&8-Y3qhhfTI(??^RN!5WqR(>i*N zz&|#+G?Otr|3>W$hUF+PdF-{rHbe2&GPd;_p3pKWp?puxiU7|G0(Cs+N_5T zbwi+rugPNnBAXS!iy_(#TBU``97Ee|@7{SA#?KoS8oZ^J)q;2bHYhcCs)`jIwi~P% zL}b%0&D_KCUcO1+u*}0a-Q`aXdRLH};7_i7cryz-Y~TbYFySz++n`ux*fC=hG(try z`}`1YCH1*JK4dpId^F{;!P=^E+O<`a@SlVKsra9Uf6R;mH8`i@GT=oY4CrjI;jJIo z95euHz^39z%=g0uJpPkhSfD6Kd&)e2=BJhTmlG=;XIG*!SSg+9r6`o@{AU1P}TrQl<1 zzoh_Y3X~0}a3*1dh7V3WEkZM%5p3+ApxI9A4_b}14v`2mQAT+R`unHh4y@ZJRvX{=KNM=lXb(ln}Z?e5s4=qIWIwgn24-^9E=lW-F?v^>DnPhr?w4C*cD_?~D8<;zGC(IzIBD!rKa)iv}0|-Sp?eQ1honHx}lbPEMO|ezWKv)8T1V z=ElO=g%1>k7w$0)D-uk4R%k z&kVkN!`(3_Ri6#|eDHz6@5QVS30*jB!3{Ax29Jp;k4;kjdT`4PQ)B+58X7%u(5o@| zR&NT(oL=HAUT5iNxlp1ki7CEn{-R`E5C8Qcj}_Z3Zu6f?b`~G7yky=~GD}<^GGOTX zkXhm^u_1P2?A!4})XD10Ltl*#QopHwY1pH~KO27k&`|M@L)&6M7&<}xV90FGj zkvy!#=k>oI#rwlaMnuI6ljI<|z0@UhmKYo1#qu{FH-u_tH|S5_ z{MQ|@{Pbo2Q{?c=(Syf$|1NU-ki;B7=%2p5|1voAp~Qz0GsZ}N-541h`|ZSaV_qEd z*D?FXoEdXvOjOdSq=`wUq(_t9PP&>jY;5+}=#=7=>Xe$4Kcu9kE=YYa^@Y?OsiV{E z8OqETGq-2Hm3b)hlT1aHI%~kVVdD(r6bi*pQEdP3d9qk5^#Trg_WA*A6UJW;TyE|I z?G@JNv{|N?3&PzIcSj(G@e$^TKSaD5u{YvS#HSG#e=rdrwSQZF#uB(Z^-At2+YFo2 zw$yfyZME$Q+cw);FR_{#;pq5LXXj^C@xk1GuuXTf~x{hTS$?pBRe@utg=mV zleW-H07ONCX46L$y&JQ|NjFMcx~~KAfxI|BM*Aq*DpD$Wj1=Mj_J^27D;^v2vhC$a zG@12NDnvbfba{s2{3+@B3Lty!q7^>)iFQdcqOL-6=gDTiZ0cpxYLxt;f2VLPt$w{@JH^h7ST50VYMYE5B6uBs*GQ#BSqCbFfufY}ZK|bV{#m?VB`F2f}89-XRkI2D_an0ky?}n?=x| zCy06^oU>&R9VKEh*6Dq6B=3BYH~*+>X<3sdh!!aBZIz;ql1F3>`Ch_=%u^v6a8Sae z7a?DrU2if;1R!pUjszkaDXHi+yeUJ4CNS_!cwbys$?LVL81Ipm>WND!V+=O2yu`*a z3&ld}kvO;Igv~kg4NlyOQ>d!DisDQ9n(cFee$x1$P<&1^X4Z9 z@+ub17`wAOX7<@kV4q!L*fFL`oRZ;l)j6!b`inCvBt6fc!xb(iQNi(QNQxmnfBBFPD|Q zlj`M(qM0Gu%S{gbG@sOYQBBktaix~SF6Jj2k_(edk}b)$B!D$Y_f_CBKA(qML%cEEh0N zf>%AiawfUGbycdFjznDw6^UfgkV0b@aY{0k&SJ@tlRJip$_)hKFq6}4C@yeJL);~z zS!d%C^R)nSHRrtWY?h^huu^sBWr(Oic4)$Sk|$VtijjaKG86@SnxSF}iK^R0et^J3 z%;C^nP9vWO;#Eg#QKV|bn+hV3LO-6*QavRn!R-#6%^`w*J`FOZqycW6ZouLiZx`W` zSofA-UfHEWO8u-{rg{w>Xtvx70LF|3l`RiiTW{O#*OgLU$S`iqIse{Rh(A6U_tfbS_;d;oQsIX*^B3iwF}9!ZecaWBL`VJd+zN( z6qi-kEfkm3Ep*n1^|j8LT5-u@U^)?a@x1D~YPfts2<#08Qj3?=iSw#!>uRd!)Yl=# z>c!$6OXgM2uZGK4wfLlAMk(d%j|jcYMiyT;vDCqCCkWjj&tskJDg&Ta{>5s z)_@^O8|On#er^5IrAun+D4BKDi|c{Gg|v(WHP3k`2ra$CxwsDe`C_s4q*e>jEn0*) z<~pnIbdofx=Q<(2`F=s>*Vom9pq!c-skGE`qJ-7s*Ii&lDjz*cMi0bphkuX>Srf)% z_>h$;>h5$RLCIn<(zmc1S+e;Du_Jj_C*)H*r@m%EvS?hiq^5e_Y%wcqVn%v*Knmim UH$TwK)Nn+4095.L + LA 1,&LV + AGO .A +.L L 1,=F'&LV' + AGO .A +.REG AIF &LV=(1).A + LR 1,&LV +.A AIF &A=(.AREG + L 2,&A + AGO .SVC +.AREG AIF &A=(2).SVC + LR 2,&A + AGO .SVC +.TYPEV L 1,&A+4 + L 2,&A +.SVC SVC 11 + LTR 0,0 + BZ *+16 + LA 2,=C'ABEND 90A$' + SVC 209 + SVC 9 + DC C'BUG ' + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/GET.MAC b/PC370_orig/Diskette/min/GET.MAC new file mode 100644 index 0000000..5c2adc6 --- /dev/null +++ b/PC370_orig/Diskette/min/GET.MAC @@ -0,0 +1,18 @@ +GET MACRO DCB?,0 + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG + LA 2,&1 + AGO .AREA +.REG AIF &1=(2).AREA + LR 2,&1 +.AREA AIF &2=(.REG2 + LA 1,&2 + AGO .SVC +.REG2 AIF &2=(1).SVC + LR 1,&2 +.SVC SVC 5 + AIF '&2'#'0'.END + L 1,28(0,2) +.END ANOP + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/GETMAIN.MAC b/PC370_orig/Diskette/min/GETMAIN.MAC new file mode 100644 index 0000000..c3e425d --- /dev/null +++ b/PC370_orig/Diskette/min/GETMAIN.MAC @@ -0,0 +1,40 @@ +GETMAIN MACRO RU,LV=(1),A=? + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=V.TYPEV + AIF &LV=(.REG + AIF &LV>4095.L + LA 1,&LV + AGO .SVC +.L L 1,=F'&LV' + AGO .SVC +.REG AIF &LV=(1).SVC + LR 1,&LV +.SVC SVC 10 + LTR 0,0 + BZ *+16 + LA 2,=C'ABEND 80A$' + SVC 209 + SVC 9 + DC C'BUG ' + AIF &1=R.STORE + AIF &A=?.STORE + ST 2,&A + AGO .END +.STORE LR 1,2 + AGO .END +.TYPEV L 1,&LA+4 + SVC 10 + LTR 0,0 + BZ *+26 + C 1,&LA + BNL *+16 + LA 2,=C'ABEND 80A$' + SVC 209 + SVC 9 + DC C'BUG ' + SVC 10 + ST 1,&A+4 + ST 2,&A +.END ANOP + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/GRADE.DAT b/PC370_orig/Diskette/min/GRADE.DAT new file mode 100644 index 0000000..53fa1a6 --- /dev/null +++ b/PC370_orig/Diskette/min/GRADE.DAT @@ -0,0 +1,23 @@ +626W92EG1021A +896W92PE1511A +263W92PE1511C +896F92AC1011C +896F92BU1011C +896F92EG1011A +713F92EG1012C +421F92EG1012B +713F92MA1011B +896F92MA1011B +125F92MA1012F +701F92MA1012B +263F92PE1511B +701F92PE1511A +713W93EG1021B +421W93EG1021A +896W93EG1021B +125W93MA1011C +713W93MA1071B +896W93MA1071A +701W93MA1071D +263W93PE1511A + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/KIT.DAT b/PC370_orig/Diskette/min/KIT.DAT new file mode 100644 index 0000000..2fda39c --- /dev/null +++ b/PC370_orig/Diskette/min/KIT.DAT @@ -0,0 +1,6 @@ +KP2PLIERS 2 PC KIT 01499 +KP3PLIERS 3 PC KIT 01799 +KSDDRIVER DELUXE 6 PC KIT01699 +KSPDRIVER PHPS 3 PC KIT 00999 +KSSDRIVER STD 3 PC KIT 00999 + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/L370.EXE b/PC370_orig/Diskette/min/L370.EXE new file mode 100644 index 0000000000000000000000000000000000000000..7e395288eee067cd79b197bf241a8e6df5ba8623 GIT binary patch literal 35602 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 ZA2s>Eyw0z*@(z2c^#7L;_%G1i{{rvqxUc{K literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/min/L370.LIB b/PC370_orig/Diskette/min/L370.LIB new file mode 100644 index 0000000000000000000000000000000000000000..d745a9444a3301e066469efc78db2003828bfe4c GIT binary patch literal 3584 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

_JX=P{5NwK{4`SU(X;6(q0S?Ny1=M$ zmDcRD)WbGDaX5HZdn-I2(vY?vT5ZVg5J{sXeaFw66=Z8qiVO4MjtyqkVBQBMft7m7 zRA(%i=#+$n;3-{9nGnW($(y?q?^0hWUU6QK)2-sf5T=)4Lf%HqTfNA)xx;J?bg0W( zvG!W#F0ztjOhJ>(vU`J(WFlP7qdLii_gJ=+=l--8_($GrR3W>Aw?Vhi424k>k|A$L zFqGUR)kL_kfXN$9?${KGlm@M2-RCtjGk0qaK%8OicDQa7T}tkwE^QDZp2f?8V)86e zOBTb|nV^t-SFO)DW#%nZ<*Ki#^`k7~gr_s0uT|$%OxP&%3nsj4x1|E_C~|BH^FiyK z8W?Bp)WA5S{B~=C4to3GcPyLxBJ^Y`h1u z^*s9&6@gVwvUo0AZ?Q`_JD{cN$6dVlC4b1Q3WoF}-nG@MT|Spj=Q^2r7@S=$U!yOx zGid3r`+cTBI#`#VSd`fVn_8?t`sZtzotf>>I0}y6KWc9BR^YVb4$HbSTj-2Z4sD%@ zH>qp>PID!^yf1mv9bo~x67=`6|6BLl4V_Wys{R@60G=!ZvxfW8?zK^2OGEl+Hg8(f z#nY@)-@V_THN&Ddaku-%Tj>63)Mmro?ilwF;V z>6F34LOMftZeT>mNwKMU1l^PN$#J;9P;p1d3=lVr&ScK~rA|1ff~K1%-EQu&;VW5Y zF=a4|&q~VR-$R-076aVb39EE_rh%-|?c^uju0zLSL8eX2{p-nz;FK~}w#;H>_-kuF z+Z&6I)*p>)ZEa$*Ur8D2&n?T++XfPs4c#zv@w{T$%KZfUuMp5|kOF2B21JbF6{92p zNQqH}NClFplD7ePapJ{^M_!^=2qRZf7>Lm%VM)StC<4Gjhav!B%w73|BE&!O6t*B5|3MHgyU?|!E0Yp>$p5|vzB$tyRoZRJKx6!9N`+{8#FMk=usEMhsrNI6bA@mNw7<2umz)$0Ib;9VI& zssm&@pdcD0AZk=?jUs836=fl6I+3&w&CJ~tDJfCQ8>!1$9w=#uNm5Qy22@Bfc>`Vn zOaeIo>?nCdCxDR28`wVx01B={DAFbgq(llPQVm6eqy|Z;ngEwY(d<`Lk+vr0C}fVd zkfY3VlzC2z^%Kwlz|2vqIm#+$BF!9m$)!jyMS3aHOOalVq31~BU zYEqt}5lf_v1HdFt$z0b>RlJ@X&@WS6#W5I&W0d$9=@n>N3;&M~o%6XD!nZV4fWBhh z`InVa-| z=+67_Y}VP(@PkB;DF4wt2M=@qJ&H}8Ih(T&`3w_3JkG+uMQ479#V9-))%aS?bUc;9 z2kTV4KZXyk^c_r03~2GT{+JSFtn%R06w6)Cd#YFqW$oO7_YKC%_k7hoO#6+KUvtK< z?faeof#28f&9@ZaM4d11-?E+LG_is@~1iK%NQ- Kl^HH+((`ZP8;>^t literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/min/MAKEUP.DAT b/PC370_orig/Diskette/min/MAKEUP.DAT new file mode 100644 index 0000000..6b4bab7 --- /dev/null +++ b/PC370_orig/Diskette/min/MAKEUP.DAT @@ -0,0 +1,23 @@ +KP2PLL +KP2PLM +KP2WP2 +KP3PLL +KP3PLM +KP3PLS +KP3WP3 +KSDSPL +KSDSPM +KSDSPS +KSDSSL +KSDSSM +KSDSSS +KSDWSD +KSPSPL +KSPSPM +KSPSPS +KSPWSP +KSSSSL +KSSSSM +KSSSSS +KSSWSS + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/OFFER.DAT b/PC370_orig/Diskette/min/OFFER.DAT new file mode 100644 index 0000000..f5cdd83 --- /dev/null +++ b/PC370_orig/Diskette/min/OFFER.DAT @@ -0,0 +1,15 @@ +W92EG1021732A1 +W92MA1071218A2 +W92PE1511574GYM +F92AC1011218B1 +F92BU1011218B1 +F92EG1011732A1 +F92EG1012732A1 +F92MA1011626A2 +F92MA1012626A2 +F92PE1511574GYM +W93EG1021854A1 +W93MA1011626A2 +W93MA1071626A3 +W93PE1511574GYM + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/OPEN.MAC b/PC370_orig/Diskette/min/OPEN.MAC new file mode 100644 index 0000000..f7733e0 --- /dev/null +++ b/PC370_orig/Diskette/min/OPEN.MAC @@ -0,0 +1,10 @@ +OPEN MACRO DCB? + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG + LA 2,&1 + AGO .SVC +.REG AIF &1=(2).SVC + LR 2,&1 +.SVC SVC 1 + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/PRINTDOC.COM b/PC370_orig/Diskette/min/PRINTDOC.COM new file mode 100644 index 0000000000000000000000000000000000000000..c16e297fe0eed9a3e763714106e9bbeccdf4d3c5 GIT binary patch literal 1664 zcmd^6Uuaup6hB|?O=E6by%i~8lXxQ|vOlb$o%2B$_uAfuZEbHz*R2|H2KAwRigUx4 zfvtj)C5-DJK8YxOoP#2vq^U^S?6$@kxqoP4EcmDCLqdFrimbYk>$$h-oPF?N_~!TV zopZkP|NKsU2{LfH`0|DR42%?g05F4Z&vAf*b$DnXq;1GflLjqk-yvyt(U%^XXNx{@ z;F&=9SpQLRQrr{W{)Pto(1jZnN2T!doOD(U506Oax|suQ!{3GC-qQcZ3=i^UuJ?k|~@<#;b(bwcXN z)@nx|fvdUnsU_1a`r=+MslVB}7r0-Rvme;lMqE}(s(|;Wj`0i&x02u93!A+I9Jc;? zOP*~2Yb8maD*A9YsC=;{Tb^@|kvWbmab%GOqe128ShB>D>`AiP;Uc~|)!Mr&&kq8p zA7M14UW*#J$sPcq2dEIs(F_q-BP4L}2-7Wa+Ru!}6rKY^5_8(+N6lbNofdyoFWA!Y zKUpKHAO54qh#Id1RrMutUOORxZux!~Y^ukt+>C>P6sJqU8TIXy8+lC43cMalF+89y zo8ov7hJc{_ZU?_k^I(Kf{=$|ff-{=OmR>;V$^E9Qg}zQJCdgy#Q|;K8x*`OO=^edB zTYB`TCjwe6IIqz<1OPn;fY_Cq>UV96=NcEV^}(h_+ub*TU=1)9tQmH>J?A08wxN7p zKfG;Ceo&{3&yClZ2c&GLGU*Oi)W&6n0UONJ8RBZU&LR4S!P zr0dAz<$UzF+s&O&eydtA3e_54`So;@Z~h+rWjnfkJF;8sf6J?ds-Y;FlCN%-m-7mA zIq~w`e|)-`^75L(*X#A=oB0(4`#sZy&9y4C4@?ff)D?U(04+V}BL2PM2e1DZ>YncO literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/min/PROD.DAT b/PC370_orig/Diskette/min/PROD.DAT new file mode 100644 index 0000000..d2a9df8 --- /dev/null +++ b/PC370_orig/Diskette/min/PROD.DAT @@ -0,0 +1,9 @@ +A120 +A216 +A312 +B122 +B216 +B310 +C116 +C213 +C310 diff --git a/PC370_orig/Diskette/min/PUT.MAC b/PC370_orig/Diskette/min/PUT.MAC new file mode 100644 index 0000000..eac1d12 --- /dev/null +++ b/PC370_orig/Diskette/min/PUT.MAC @@ -0,0 +1,15 @@ +PUT MACRO DCB?,0 + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG + LA 2,&1 + AGO .AREA +.REG AIF &1=(2).AREA + LR 2,&1 +.AREA AIF &2=(.REG2 + LA 1,&2 + AGO .SVC +.REG2 AIF &2=(1).SVC + LR 1,&2 +.SVC SVC 6 + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/READ.MAC b/PC370_orig/Diskette/min/READ.MAC new file mode 100644 index 0000000..1c093fc --- /dev/null +++ b/PC370_orig/Diskette/min/READ.MAC @@ -0,0 +1,36 @@ +READ MACRO DCB?,0,RBN?,RBA=?,RBN=&3 + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG1 + LA 2,&1 + AGO .RBA +.REG1 AIF &1=(2).RBA + LR 2,&1 +.RBA AIF &RBA=?.RBN + AIF &RBA=(.REG2 + AIF &RBAkJDyB|}XRy%eVs~RRA&T7cpt{l$Fx#Pd+muBDoqa1V2RkLGF)BM{2qPsWe-X%+a zu3K_n&eDZ>OYXlhZANTh@see_g-ez%UNF9EY0l5?UXZhRS)$i`uP$fl(j`mLW1p0* z+C1%c)u!MCHQRK`{v*Ar;V0fy)#0qojW;wunf&3uF~{ZuH#DwKKK*NlW7D+TRIjS+ z_`M^%>q_#@na|vM__lx8{fg@G4zPFo>@3InVIH4k$if&!!gr0f&I+13H%(|+`jqfe+BW=w~QsZ+u^WJ zW1y~5eYkm~CFM31+tS!@&z>t+4rkeKy;b$$??*-_W;h(XJwmn*q!P;HR{Xu2^0S=^ zJG8lXbXwshrUUE08*vn#W(px`xaV*dbc4m$prbeb7GCdG)%@CMrQXiVIRjmDat8Xd4U8qHISed`85G70QO2k> zQ72joOEnCnwo}gyEMsz-BaLmfD$Ho@Xfsb{Y!N0Ke$0~Y=B~L$-m%zVs?Ez-<>q<@ z+LsM?Fx5ide##i_*e&|39W%nr#PrOaYXU@vR{Mx4zjl#fIa9@8FFP?lWfk!ANOC^g zs^D$0lhr%|9E(k++C|}H6M6xqj?vt0Fum|#jHb2Y>2dg<&_0sD-LWEu+tT3@SkeiL zQ}x0MgYJcw(=>0YTpK~H!I|{Jig5A^=B*lMk1kz|soa3V*nzZ(t=%m=<4Wp?LFbyC z)&XfLsUxO=Z3n(eiu09i>&Hrw+T{vUFH^Rv(;Q}HD@#k0)Eygg71s}q?T!s;X(pY2 z23oVIb&t+9)1<3qc+M~>-fWZ3tH(X(mMr|{&+uQn+DSq9yNXxfct#W8Hq zrRwnp?gWorkmIA_Nxm0r^9*{Q!@!v-XQ1aE*uZ0WVnzO0X1(LnoPpz$47%EZm_#g{ zMWUq&Cwuc8QFEhrj;YZ*)nH-|8}4Feliq7uuJ_($+}`OiDBfiPb^^T}U!pKip3&NQ z=bKqBJ3YfoT$dG9SfenPb-CjB7;`cK`Jge{sYm-1+OyIA@6ptv*`p94x~o$v{RQh{~%z#n>NQQu;dUo)KLJMWr)=?A{^e$7RJ5o^y2 zCpW4cQE;Ng%JpUr>CZQDZ}zax_lfHn$S4!CA?YO%{hWcm&5(bWkbf_z3`i=GHAE?6 z`f=u}s$OqquEvF|E7N?o>ez(;iID-}rO`nZA(iH|5L52Hcvt* zs^^E(Zk9U7iiM_!b&&TTdak(h+32@crJrMiy3i>njc(H+h%2^9)%` z^?=TCGDUIg5G5>K!wYp?AB9zls^TE&0^B_UZZjhq?=qK_-kcM?D=-2dgv?Sv&$Q6g zb?~e8E4A5mP|6uAeasB$m?0fAqyw296EYhJvzp)3K+@0cgS19~I}?0cA`Y?uYGo`p zTl_P`THZG`T3Gmgi@K3HndPC3I{*^|<~5MJ8Zy@yn2M!&_NiS}Te+(WtAF3HT*VCe zjF}rP8pH2d{&LgvmyPWa52&uG`3-oKqo4qLjQTzqR(zLT&j9Zva5x}1JQ+#C$cWL} zeP=kyH{y$uMOOsLqJ7b^79COfF8fu0`(;?=$9p*07jz7qz_0Hz;DWGxHP(2K;j?@e zkK~9f1KUm#of?)i;FyLiV0DyY-5l1NNj^+gEbSJ*=Y{pc!(qcF{4Vh>t2l^xYUz7s zV4=8&Soi6Cwr%}9w(VcsNi}PXmhOw;gY|=j>iNX!-8+bLqt7=ncO-ZGj8v3 zIq@`1M~+f@%46IC!W?yUeHo4#?eIFk#&>>+;@9LU6-^X*{p!VNK_mS_BmMqK;Itna znc!UGJ3(53?6iV|Q=^=X%d)ZjU=6^y~`+S8>78`QW0dC=!ZUNc&H`_0M=<}gEKtwM}dnb1P)ZO4p$ zgYw55YKxqgg1G|rDyXh;P!qssmBJw7XzB>OdsXTNM{>;^;%drrBkwB`UZLwNLQk4O zsa3;gHOt{sM)WO*U(pj|H)y|$j0l;!X8c0&&-m`mMoV9j8E+ZW%>l;3sT64m$i}^PrH-UcY&yB0qg|fh z6}ErD^#@q}BJWgq$0CXc{Yf&m0ar4j)1rvTeS`}=YJ=W8e352RydU?}P=xsgeeYprgB!UJ zQRi*f(`fm{+mm7Dd(SrrKHi4?CX?*~{$1ZmKz!^57AI~%9(1ikPrnmmqDAvg`rgI7 zgJb3m`QA5LkIry|suMRL!>-?=XA0)Y7R`I#H-vfN_&oT^)YK8Ng6y1uqklH6VycTG za*CMOHX8F#@b>ZG_V<1xj4ipHZp zDdG<3XA9~xoGQyhs0~)XSzuXdkZM(z3x-uJ;@M# zR_*=}@0R0gs&3-6p+5%eZj+H$`zd1X0u}r2_l^Ac6j*Uv+y;=jb&g?FrU$4p9i_B~ zupetNMvr|2YtKfmellm^L=&Qp<@hVe$!c1~@qLMvORb|CsLB~Ao|PfO@@mMnQo z$-g8#$7nfG3cpw~JlS`-Vy~<~Vpg6F+Yxe;K1SXKPugv4Ke03BMfnWX1Jx`vgLGB% z1S*^-YMw*{U6;B6ve(U5)s)U-H5=^;OEP5DJO!91=TFu#v#zFrp7RvSWHpZ)E$^%q z-n9LlwHa(ad?J@s>@;%ps$9P@>fTwqT;~V^>UM*!W~VXw&Rnz`X%^ahQC}o$r`)1o zCUkv^GGE0Q%^%mlQT9_l6wxDAwfQw$xnBcJTM&T}6@hylR-}_QRw;G`{f{Li=td1^ zv{*BV+thvWNFXbg6jU{c0|xkMQpPm$+Xad>JrPCtnEi7+2BbNp?3t_MyHCbCL)2g?GkoB zz7JwB%$o<86M)fr^Ju5#`v`u5>Jb`VYqS(jLf?{%LovL%sGcxV+$fC77%Bap;4Nx`7r&-B{ME4|;k9B% zfSo`b=e2Vstw^#(L-Hsh4QVA$*nL1h7Su-AMergMqBzs$&~7ggKWe8+&yV9DpW))G zNn}81?^_Czab zUj&Qc!VbiKoT3-SyrT1?w!sZIqaIUgnNe4CK8y;?%i~s7eCw!{aqZ1G*_g2$^_`Iy z-wHSl;09{MSxSwRfwdTwUaCs_9_sPEsM^_EQ?{+A(-Pp07BAKQBxj%mHB_yd&ubR+C zpN6VRylcRdM#x0--E5<^_?UsEs0>5c*?r2EBzOX*0piAuiUB;Fk6EYKIa$<(@2lAN zW*BuPQ^F5fm?fX85vp7<>tY=LwvXfSLwhc9`WA~GCb2L0SjH+?2~HT~t}WpsqE{sW%N{TDeE6FE_A6Y>o`lX|u%`@mM>IiCTi<&CUQN1ic&RP)HS4sP5zX{%9E$Nn8 z6WT(YDCq{(F>%5s<(^C@HNuLw+fv9HgcTrW*irzGm_gCN!i*N%Ji)ao9vy7+r1y#5 z(U@Vo6EX8CS}8Cb5T_vU3GGkJ{Q1kU_?-!Bhb?Ge8{FoUnN{Xvn=_GLonmKihKB)X z5cvL#a|1P?HSruD&$8k?0dz!mZ?_$g5g`tph*9ypNb*i_l8ExuKR@5HQs&fBbxQu? ze4H%ZjNQCOX58_xBJWsBmx`UWwY2=pV&rHIrBuMXMb=n{ibTfK$HvFg=c=$j*IKCR z{m2(JMoaUMD;^cIRG1<5?$k@XB4Qx#m3E{afYTt|)D?GIxQeA;z1Jjr#;)fPJ=OLN~x z)q?BTyvaBf%V$$b&zO((%2P&?BV>@|JLjXUa}L>y)mU)<&Vy>-{XeL>EuZWD71hn< zt01}GVK%6aq5f~6ZWYuo3F;ra+5l%E2^$n=6uPuv?my%Gn3!i_4?}h$V%sf{Eoe%) zX52w%a|+}M> zy%cL0q5X_8T7HabY^?Va-#N*d{b{lXgF&yNb79U5IXfINQQMZP)WdC%z-qB!ex9>>N z8x}BCNGbH(Y*_KkB5(|kDN5~nci+WjJO04nh?)1!`+UqM=*Ia8tSa07+p}3U;)= zHd;1bgkI=0a65SR7;wr)bm`sQF5qTMxJ}b@73Ux0a4EV`s6ztkF5*zkIxO1cONwY) z(cZq%a|{xyS^=9ODSK#d;HrvY-XKpT<1@6nI4=1ui}aZI3WIg7ze=95{f>m1Ke;Mz zp5l9fW`WyRVr{RGc_wTTCnB5EVbSYGWA>`Caah(}o2TatyyG%PH%|xDx@)5(qG+bn zB7L2cF_rXZR%#kR<8jdV1>~y1iQUUazIm-dso4Z@l<}s7?JQ%z+1NBoCnZ z;Z$FZg41nZowNp=hSr#)(CigCr!v`o$c}<`I0Ws$Zx)n>h-REzjuygX|Xf zTarU1P8h-8Dqxsmv_5;ELD@P&m=fHh=OaN=VG|NDddnISjgKx+p2exlmNj^u^4#P) zbYYz-ms9uDJO{7zXt#8L#H;GnT zoKortH2AByh08M|4@bV6NB&!St9!n9{?WaFp2y7Y+*tpAqvvxT_s{8Ro$>`33^Y=< zS7Ipng~VVx>s}b^zgu8XyO+|lgu8!6Pg_6Egc(&^bds^{vW#KR{e^ruwy(n&PNOah zifY*2>eLOCw*awP`vcmW$*TXkk4LNiC5;+Ox;S&B^X>NMy0xfC=sRGII&}nl`8h`J zsKOK9OdVCJuzqiLuCnzYdheufyJ+k2OJ-X$*b%V&K48%GNva-8xx(!$!R%dhk`n zu@-K68AtIu8T-dQc)tmEl(Cszj7`Jq%}dZo6p92x zLEaVW>h3$m1HoWlXmId>Q1l$2BHg3??*&>r15KSF-qPJiP_09)-H|{i?+Z0|_XPoe z7Vuqz`N8hNYms(#b~guT0*8FM`v850cqr(WZH|G~NYBY3-qP9`dSJy0-i>#B_m44! z4rW%ZQKhpbkkQ0A@13oY5dQ-g7rk$gucN<#li-qfbq7Ph)grsc_C;cl?*{-D;DcC6 zBpB=K37i}ZfyW+_1`kDsLVaBJjiMJXm=Xy!kEb%OZ!k1OfKA;W@a6-7K0by?rZjhV zLYhr|`pr-CX zUyu*BcAe}D3_)|kT=SsYo0>YqKUfku+0`8A0g=|oV0u#^oGD1qPa0c+i%@WSp%(89 z3=YM68okNWXE?O<#`YI^$BlH{Q$cw3pnV$6*RJ@ z;9jOys}-GAJv)1jy6S1YUafw9YNmRYT0Ns&osKcJ=5Krvjc<9a$bb0JHI^ryUT;;a z@6t|HXR38-K0}!`yF~r)qw4a_YKJRO&1rx-~Jh!{&(}B z^d&1Pyu~wAELW*iEJ+1RPfo$d1a<0!q?Dv&WU<}5TlefeeE7g?ul2vx7YsK3Fm|nc z%4{~zy~`X=m006HR=n2yTEp&^-LE%<8t8f*SHtVQufM*dX9r!o-Uz?-#*R1M*z@|% zop0^z*t2uju3bBJy}fJKYx`f@vAb>eu04BpzOn1jo;~~a?tOFb!Cia%+TX;rWADCw zulMaevTt8Q(_6US*xA_F9O&$7YzzcKf%X7?o9GHRH8(ehnp>Ki1HqPFGKRZwFn6I>Ox`})>^s_bafqR>5t%Q z?db0A4|lYpLWo_xv8yl8(D!Cv-@fMl{-*v&cR#W_UWpmdRQhPN{IYPXr z`P}Ex++cU}^^skN*0&iZ4zS8XURqyK5nC)T_EgaFZGWocHfcm9cC6Z7R9|N+`D!Y5 zH}`w$tBY;I?mR_XZN+sYI2V7(URMs0+OXgPteBU=NM9%ghI&hD-Und@Go zTC1-tDXg>kdC|+@w+!ZCtG2t#prtsOdcUpuYcP0Sir*3dQRS~1PtKn^Pp8f2&ho&E zHpq%cAi45y$sDE)*5&dZ8>Hqhs;@3v&0FAd_L4$=?%d~RqF)~^ox{-;=)}2hB!J^b z&V!-B=DyY*aY`))@$+@z;_!d1XUJbHP!-oz;BH&_rX2o-z)X9C^g z`f5KMD}I%GTp|JyTrZcD%RCeb>O7Skt|Iuv`7Hd0E(s?oOE?=w5^$}t^hIzdV?_M6 zx`JvOemRnx4gQ8JXsZyT1h>B+%t?zSwh9;oC+99Gs_+y$(Kl3BGz!-$-Vk%p2L{~~ zpAo9-U64pqEVK~5_`!M+Vx1oWZ)}JSxnXj^LvZo0285^}#u`Ga0B<={fQ&c(qKp?$ z5oZeIXv?{RmQQ2&dO0MGcYj@BbzK3;C60~rmd^@W&d1=wys02u(9A0ei)S#UK;q@|IZjLU8fI3IMjky0PGZyCCt6{UuGv z6qo32`2wd)=&i`}CyoeTSg~l&p0H{flW^ySoTZ13>Ng>jQMd~+ zyOJ7C&@HSdLnIT3(H$2VU?^^QNP;;`Y=%6Fs+|H~nD+`ck$xdI;b%x8f=?c(xMmr= zvJf$w*CQ8HaMU@x9F8gAt}=v|3Nb(h(izAaxr01Iz?~E1Mt@M}z}8A^MfGKr$b?-9 zI5L`qF_nH)3P|;pPzDu}qV##)tK9Y{UScn^*ZHYDsP~JUD`Oo@MdFtLqGY%(zL*UO z_WVfKJqT2O$&W0DWM%NR6S-XPnJ9{ja=UO9yi)N}C=3q89BPefPld4B>v9L3lh@gc dg;}f?p|P--lBPr&SFfj%gi8Eh_qq=K{|#YoS?d4* literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/min/STUDENT.DAT b/PC370_orig/Diskette/min/STUDENT.DAT new file mode 100644 index 0000000..5d1ab94 --- /dev/null +++ b/PC370_orig/Diskette/min/STUDENT.DAT @@ -0,0 +1,9 @@ +713HILMER, D.R. FM +421QUALLS, G.E. MS +701ARIAS, I.L. FM +125MORALES, L.A. FM +896QUALLS, D.M. FS +626MERCIER, J.L. FM +402FOOTE, A.K. FM +263HAVLIK, K.M. MM + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/T370.COM b/PC370_orig/Diskette/min/T370.COM new file mode 100644 index 0000000000000000000000000000000000000000..88b3e12548e1e764a441360003fedebe3fe17049 GIT binary patch literal 4864 zcmds3eQZx@`axg1rv4dxBiwLjphpEuX8USGZCDgCpV zg^ks9-0JGh8>?nc)tWc0tuk+{o1U%Tz?o}nt7~zl`70}#)}j?mi!VCiG^Q>$yf_Z9Wn8E~}r&v!Mc$A9W@v=l98-e;O|ERUX_RCkviCD%FU}3w<8U+=0Y+z-vDS$|{&EJ6xVqN$PELkR%_Sww*sBv$ zhDL{@=a^huo0hs%6a4)(e^WOLq1MY&W(WTP976xagyY~iu+&M{y08iN1}C>pIH=~y z#mq^L>E)R78i^@4 z?hqRLw+nXA2#)^k=27=UoUJpDdR81?L^@Xq0K!6GgmPdUD1Wuk!n;b%qXEv6c9j}d zHkScIZHjWZ55FC`WU;%NFwWchLDV}(HRjfxwl6L(F0Zd771X!(p1_4)*Q?qY(u8O{ z0(Xg%rTr*HP`aR3p?6L{sE7K60Bi90S|L(miMV$OCQut#Ls|Pa4lH(etMCjkt65jt zu&9c4@5OG%en>EdE20_>!cE9sq1>fn!E|Yl%>4;{FVPPQ9I?|;;SrDSLnhK;X~Y;5 z9iyOgH^}Iygy`Ha$>$u>kA&&Yqs(BEh1yBYe9CGBO~Rf^Ac4W<5b?Rhfw7@-nK zTOCMMxMxm_-S;t8@zrUR-U8)J(vhCQqLtHJR7*}sOQULXT;kW3Ngr7_@1eqS9M=eC zprg_2S#mskGis1uU50BcIU#VM(-+A2?cQTbzP`l@M&E0Q7w?`lkb}Z0<2>4@4(^IF z!Iz|9R2$q)PB}!d(ry=OQVlfEX||hPohldj3`C5 zp^M~1J&;rKTwds$7((ftjP!vRLcI%8zrcn%(9dytfB#K%6-Lhw?u#_ein)94m{E)+ zd2svyM;gPG8w2y&CH2k7j+x4i585*rw84Y3qJ1=Xw3!*^M7@w3HFHMJV%(C5PWE&b zt6Ykwf>!%kdO8d&o{tJENWnJ%RCTQM-8WdsFJe|fa4FXO8{{-1T0C8I|9dkK{aln3 zznMMwp&|#DQg7?_!Mi?lVfpCE+beeVJV&_8m*J)p&!Ow0q^RM!xnzG>--8`M=;OUc{AsmPWDDVA2mF zzhBn6phqnLD8N3WrSJUx?!8Yw{p|DmZjaaJ56oEn9|-*aW6RW0^8&z(z7s&lK5ECK z2C2KBrTO?sio}PL{C<9f=WSDalr7xUgv=E9aMK^=&Z+#vJ{~6&{VdH|KRQh-&814j zd{63&+E4lOCv*J$7x1NSrIdWBuP67%kI}}{Do(ejzHXZq9*a}FP1P{h_6s=8V9Qo8 z*IN$%sE!qHw0@7*w$4`HiV>|(*m&iE68p&$I{KpKv*Qm&V?)F7k;{p!!({6EjhnY_ zk16u>%c{tD<({Zncs0_g(mhsm}$?@uJ+2^%kK&%QH{D&zY;^~RIo8}1nK@v+n= z4Y5>!Px!s@gpW_%9`W1gEA3AxUXwmxv%1OKL!NkykNJniR6iexC(!zy4Yb+ySSpRa z?#}Q9y6kFz#QglQd&qCYPZ1-3pSsa(F`10es*odofxt~!XI;|$PGV#=TqK8Qv6L! cKgkcrQ@lGCi{JG7crq*p!^>pTz<-MWPjFPq?*IS* literal 0 HcmV?d00001 diff --git a/PC370_orig/Diskette/min/TEACHER.DAT b/PC370_orig/Diskette/min/TEACHER.DAT new file mode 100644 index 0000000..85d563f --- /dev/null +++ b/PC370_orig/Diskette/min/TEACHER.DAT @@ -0,0 +1,5 @@ +732BENSON, E.T. PHD N5156 +218HINCKLEY, G.B. MBA N5509 +854KIMBALL, S.W. PHD Y5594 +626YOUNG, B. MBA Y5664 +574SMITH, J. MS Y5320 diff --git a/PC370_orig/Diskette/min/TOOL.DAT b/PC370_orig/Diskette/min/TOOL.DAT new file mode 100644 index 0000000..57e3159 --- /dev/null +++ b/PC370_orig/Diskette/min/TOOL.DAT @@ -0,0 +1,17 @@ +H4 HAMMER 4OZ 0042000699005004003000 +H8 HAMMER 8OZ 0054000999004004006000 +PLLPLIERS LARGE 0042500899002003003003 +PLMPLIERS MED 0036000699000003006000 +PLSPLIERS SMALL 0030000499004003006000 +SPLDRIVER PHPS LARGE 0030000499007006003000 +SPMDRIVER PHPS MED 0024000399004006006006 +SPSDRIVER PHPS SMALL 0018000299004006006000 +SSLDRIVER STD LARGE 0030000499009006003000 +SSMDRIVER STD MED 0024000399009006006000 +SSSDRIVER STD SMALL 0018000299008006006000 +WP2WRAP 2 PC PLIERS 0003000000007003006000 +WP3WRAP 3 PC PLIERS 0004000000009003006000 +WSDWRAP 6 PC DRIVER 0005000000004003006000 +WSPWRAP 3 PC PHPS DRIVER 0003000000002003006006 +WSSWRAP 3 PC STD DRIVER 0003000000002003006000 + \ No newline at end of file diff --git a/PC370_orig/Diskette/min/WRITE.MAC b/PC370_orig/Diskette/min/WRITE.MAC new file mode 100644 index 0000000..1125215 --- /dev/null +++ b/PC370_orig/Diskette/min/WRITE.MAC @@ -0,0 +1,33 @@ +WRITE MACRO DCB?,0,RBN?,RBA=?,RBN=&3 + AIF /&LABEL$$=/ .GO +&LABEL$$ EQU * +.GO AIF &1=(.REG1 + LA 2,&1 + AGO .RBA +.REG1 AIF &1=(2).RBA + LR 2,&1 +.RBA AIF &RBA=?.RBN + AIF &RBA=(.REG2 + AIF &RBAmd pc370 + C:\>cd pc370 + C:\PC370>xcopy a:*.* /s + + + See Chapter 1 - Getting Started with PC/370 - for more information. + + + diff --git a/PC370_orig/Diskette/source/BAL4A.MLC b/PC370_orig/Diskette/source/BAL4A.MLC new file mode 100644 index 0000000..b6ec758 --- /dev/null +++ b/PC370_orig/Diskette/source/BAL4A.MLC @@ -0,0 +1,24 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: BAL4A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Chapter 4 Exercise - Predict output. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + BAL R9,SUB1 + BAL R9,SUB2 + RETURN +SUB1 EQU * + WTO 'BEGIN SUB1' + WTO 'LEAVE SUB1' + BR R9 +SUB2 EQU * + WTO 'BEGIN SUB2' + WTO 'LEAVE SUB2' + BR R9 + LTORG + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/BAL4B.MLC b/PC370_orig/Diskette/source/BAL4B.MLC new file mode 100644 index 0000000..8f7eae9 --- /dev/null +++ b/PC370_orig/Diskette/source/BAL4B.MLC @@ -0,0 +1,25 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: BAL4B.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Chapter 4 Exercise - Predict output. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + BAL R9,SUB1 + BAL R8,SUB2 + RETURN +SUB1 EQU * + WTO 'BEGIN SUB1' + BAL R8,SUB2 + WTO 'LEAVE SUB1' + BR R9 +SUB2 EQU * + WTO 'BEGIN SUB2' + WTO 'LEAVE SUB2' + BR R8 + LTORG + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/BAL4C.MLC b/PC370_orig/Diskette/source/BAL4C.MLC new file mode 100644 index 0000000..a0cc74b --- /dev/null +++ b/PC370_orig/Diskette/source/BAL4C.MLC @@ -0,0 +1,25 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: BAL4C.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Chapter 4 Exercise - Predict output. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + BAL R9,SUB1 + BAL R9,SUB2 + RETURN +SUB1 EQU * + WTO 'BEGIN SUB1' + BAL R8,SUB2 + WTO 'LEAVE SUB1' + BR R9 +SUB2 EQU * + WTO 'BEGIN SUB2' + WTO 'LEAVE SUB2' + BR R9 + LTORG + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/BAL4D.MLC b/PC370_orig/Diskette/source/BAL4D.MLC new file mode 100644 index 0000000..e733984 --- /dev/null +++ b/PC370_orig/Diskette/source/BAL4D.MLC @@ -0,0 +1,25 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: BAL4D.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Chapter 4 Exercise - Predict output. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + BAL R9,SUB1 + BAL R9,SUB2 + RETURN +SUB1 EQU * + WTO 'BEGIN SUB1' + BAL R9,SUB2 + WTO 'LEAVE SUB1' + BR R9 +SUB2 EQU * + WTO 'BEGIN SUB2' + WTO 'LEAVE SUB2' + BR R9 + LTORG + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/BAL4E.MLC b/PC370_orig/Diskette/source/BAL4E.MLC new file mode 100644 index 0000000..d78b466 --- /dev/null +++ b/PC370_orig/Diskette/source/BAL4E.MLC @@ -0,0 +1,31 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: BAL4E.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Chapter 4 Exercise - Predict output. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + BAL R9,SUB1 + BAL R9,SUB2 + RETURN +SUB1 EQU * + ST R9,SVSUB1 + WTO 'BEGIN SUB1' + BAL R9,SUB2 + WTO 'LEAVE SUB1' + L R9,SVSUB1 + BR R9 +SUB2 EQU * + ST R9,SVSUB2 + WTO 'BEGIN SUB2' + WTO 'LEAVE SUB2' + L R9,SVSUB2 + BR R9 + LTORG +SVSUB1 DC F'0' +SVSUB2 DC F'0' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/BAL4F.MLC b/PC370_orig/Diskette/source/BAL4F.MLC new file mode 100644 index 0000000..b0b2907 --- /dev/null +++ b/PC370_orig/Diskette/source/BAL4F.MLC @@ -0,0 +1,31 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: BAL4F.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Chapter 4 Exercise - Predict output. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + BAL R9,SUB1 + BAL R9,SUB2 + RETURN +SUB1 EQU * + ST R9,SVSUB1 + WTO 'BEGIN SUB1' + BAL R9,SUB2 + WTO 'LEAVE SUB1' + L R9,SVSUB2 + BR R9 +SUB2 EQU * + ST R9,SVSUB2 + WTO 'BEGIN SUB2' + WTO 'LEAVE SUB2' + L R9,SVSUB2 + BR R9 + LTORG +SVSUB1 DC F'0' +SVSUB2 DC F'0' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/BINARY.MLC b/PC370_orig/Diskette/source/BINARY.MLC new file mode 100644 index 0000000..05211db --- /dev/null +++ b/PC370_orig/Diskette/source/BINARY.MLC @@ -0,0 +1,14 @@ + START 0 + REGS +BINARY BEGIN + LH R7,FIVE + SH R7,THREE + CVD R7,DBL + ED RESULT,DBL+6 + WTO RESULT + RETURN +DBL DC D'0' +FIVE DC H'5' +THREE DC H'3' +RESULT DC X'40202120' + END BINARY \ No newline at end of file diff --git a/PC370_orig/Diskette/source/BITOPS.MLC b/PC370_orig/Diskette/source/BITOPS.MLC new file mode 100644 index 0000000..aeb60e1 --- /dev/null +++ b/PC370_orig/Diskette/source/BITOPS.MLC @@ -0,0 +1,109 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: BITOPS.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Demonstrate bit-level operations. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN +* + WTO 'EXAMPLE #2 - Demonstrate use of OI to change' + WTO 'lower case letter to upper case' + WTO LOWER + OI LOWER,X'40' + WTO LOWER +* + WTO 'EXAMPLE #3 - Demonstrate use of OI to remove' + WTO 'the sign from a number following an UNPK' + UNPK UNPACKED,=P'-12345' + WTO UNPACKED + OI UNPACKED+L'UNPACKED-1,X'F0' + WTO UNPACKED +* + WTO 'EXAMPLE #6 - Demonstrate use of NI to change' + WTO 'upper case letter to lower case' + WTO UPPER + NI UPPER,ALLBITS-X'40' + WTO UPPER +* + WTO 'EXAMPLE #7 - Demonstrate use of XI to ''toggle''' + WTO 'the sign of a packed number' + MVC EDITED,MASK + ED EDITED,POSITIVE + WTO EDITED + XI POSITIVE+L'POSITIVE-1,X'01' + MVC EDITED,MASK + ED EDITED,POSITIVE + WTO EDITED + XI POSITIVE+L'POSITIVE-1,X'01' + MVC EDITED,MASK + ED EDITED,POSITIVE + WTO EDITED +* + WTO 'EXAMPLE #8 - Demonstrate use of XI for' + WTO 'encryption: once to encrypt, once to decrypt.' + WTO CRYPT1 + XI CRYPT1,C'+' encrypt + WTO CRYPT1 + XI CRYPT1,C'+' decrypt + WTO CRYPT1 +* + WTO 'EXAMPLE #9 - Demonstrate use of XC for' + WTO 'encryption: once to encrypt, once to decrypt.' + WTO CRYPT2 + XC CRYPT2,=C'+;' encrypt + WTO CRYPT2 + XC CRYPT2,=C'+;' decrypt + WTO CRYPT2 +* + WTO 'EXAMPLE #10 - Demonstrate use of XC to swap' + WTO 'two values' + WTO BOTH + XC FLDA,FLDB + XC FLDB,FLDA + XC FLDA,FLDB + WTO BOTH +* + WTO 'EXAMPLE #11 - Demonstrate that SLL is same as' + WTO 'multiplying a register by a power of two, and' + WTO 'that SLR is same as dividing by a power of two.' + LA R3,4 We begin with 4 + CVD R3,DBLWORD + MVC EDITED,MASK + ED EDITED,DBLWORD+5 + WTO EDITED + SLL R3,3 Multiply 4 by 2^3, or 8, giving 32 + CVD R3,DBLWORD + MVC EDITED,MASK + ED EDITED,DBLWORD+5 + WTO EDITED + SRL R3,2 Divide 32 by 2^2, or 4, giving 8 + CVD R3,DBLWORD + MVC EDITED,MASK + ED EDITED,DBLWORD+5 + WTO EDITED +* + RETURN +* + LTORG +* +DBLWORD DC D'0' +MASK DC XL7'40202020212060' +EDITED DC CL7' ' +POSITIVE DC PL3'+6789' +UNPACKED DC CL5' ' +LOWER DC CL1'r' Lower case letter 'r' +UPPER DC CL1'T' Upper case letter 'T' +ALLBITS EQU X'FF' +CRYPT1 DC CL1'R' +CRYPT2 DC CL2'PR' +* +BOTH DS 0CL9 +FLDA DC CL3'123' + DC CL3' ' +FLDB DC CL3'AbC' +* + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/BQSFU.MLC b/PC370_orig/Diskette/source/BQSFU.MLC new file mode 100644 index 0000000..34aef86 --- /dev/null +++ b/PC370_orig/Diskette/source/BQSFU.MLC @@ -0,0 +1,589 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: BQSFU.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Sequential File Update Sample Program * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'BQSFU ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFMAST,C'Y' + BE EOJ + CLI EOFTRANS,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'BQSFU ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI MASTERIN+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI TRANSIN+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI MASTEROT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN MASTERIN + OPEN TRANSIN + OPEN MASTEROT + OPEN REPORT + BAL R10,READMST + BAL R10,READTRN + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + AP PGS,=P'1' Add 1 to page count + MVC HDPGS,=X'40202120' Edit pattern for page count + ED HDPGS,PGS Move page count to heading + PUT REPORT,FORMFEED PC/370 ONLY + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + ZAP LNS,=P'0' Reset line count to zero + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + CLC INBR,TNBR Attempt match on customer nbr + BH PROC2 Transaction low + BL PROC3 Master low + BAL R10,MATCH Otherwise a match was found + B PROCESSX +PROC2 EQU * No master for this transaction + BAL R10,TRANSLOW + B PROCESSX +PROC3 EQU * No transaction for this master + BAL R10,MASTLOW +PROCESSX EQU * + L R10,SVPROC + BR R10 +**************************************************************** +* MASTLOW - No updates for this master record. * +* Just write this record and go to next. * +**************************************************************** +MASTLOW EQU * + ST R10,SVMSTLOW + MVC OREC,IREC Move input to output + BAL R10,WRITENEW Write new master record + BAL R10,READMST Read next master record + L R10,SVMSTLOW + BR R10 +**************************************************************** +* MATCH - Transaction for existing master record. * +**************************************************************** +MATCH EQU * + ST R10,SVMATCH + CLI TACD,ADD Attempt to add? + BE MATCH2 Can't do it - already exists + CLI TACD,CHANGE Attempt to change? + BE MATCH3 OK to change existing record + CLI TACD,DELETE Attempt to delete? + BE MATCH4 OK to delete existing record + BAL R10,BADCODE Error - unrecognized code + BAL R10,READTRN Read next transaction + B MATCHX +MATCH2 EQU * Attempt to add + BAL R10,BADADD Can't add - it already exists + BAL R10,READTRN Read next transaction + B MATCHX +MATCH3 EQU * Attempt to change + BAL R10,CHANGEIT OK to change existing record + BAL R10,READTRN Read next transaction + BAL R10,READMST Read next master + B MATCHX +MATCH4 EQU * Attempt to delete + BAL R10,DELETEIT OK to delete existing record + BAL R10,READTRN Read next transaction + BAL R10,READMST Read next master +MATCHX EQU * + L R10,SVMATCH + BR R10 +**************************************************************** +* TRANSLOW - Transaction without a matching master. * +**************************************************************** +TRANSLOW EQU * + ST R10,SVTRNLOW + CLI TACD,ADD Attempt to add? + BE TRANSLO2 OK since it doesn't exist + CLI TACD,CHANGE Attempt to change? + BE TRANSLO3 Can't change - doesn't exist + CLI TACD,DELETE Attempt to delete? + BE TRANSLO4 Can't delete - not there + BAL R10,BADCODE Error - Unrecognized code + BAL R10,READTRN Read next transaction + B TRANSLOX +TRANSLO2 EQU * Attempt to add + BAL R10,ADDIT OK to add - not there already + BAL R10,READTRN Read next transaction + B TRANSLOX +TRANSLO3 EQU * Attempt to change + BAL R10,BADCHANG Can't change - doesn't exist + BAL R10,READTRN Read next transaction + B TRANSLOX +TRANSLO4 EQU * Attempt to delete + BAL R10,BADDELET Can't delete - doesn't exist + BAL R10,READTRN Read next transaction +TRANSLOX EQU * + L R10,SVTRNLOW + BR R10 +**************************************************************** +* BADCODE - Bad Transaction Code * +**************************************************************** +BADCODE EQU * + ST R10,SVBADCOD + BAL R10,CHKLNS + MVC RREC,BLANKS + BAL R10,WRITE + MVC RDATA,TREC + MVC RMSG,=CL16'CODE NOT A/C/D' + BAL R10,WRITE + AP #REJECTS,=P'1' +BADCODEX EQU * + L R10,SVBADCOD + BR R10 +**************************************************************** +* BADADD - Bad Add Attempted * +**************************************************************** +BADADD EQU * + ST R10,SVBADADD + BAL R10,CHKLNS + MVC RREC,BLANKS + BAL R10,WRITE + MVC RDATA,IREC + MVC RMSG,=CL16'RECORD ON FILE' + BAL R10,WRITE + MVC RDATA,TREC + MVC RMSG,=CL16'ADD UNSUCCESSFUL' + BAL R10,WRITE + AP #REJECTS,=P'1' +BADADDX EQU * + L R10,SVBADADD + BR R10 +**************************************************************** +* BADCHG - Bad Change Attempted * +**************************************************************** +BADCHANG EQU * + ST R10,SVBADCHG + BAL R10,CHKLNS + MVC RREC,BLANKS + BAL R10,WRITE + MVC RDATA,TREC + MVC RMSG,=CL16'CHNG NOT ON FILE' + BAL R10,WRITE + AP #REJECTS,=P'1' +BADCHGX EQU * + L R10,SVBADCHG + BR R10 +**************************************************************** +* BADDEL - Bad Delete Attempted * +**************************************************************** +BADDELET EQU * + ST R10,SVBADDEL + BAL R10,CHKLNS + MVC RREC,BLANKS + BAL R10,WRITE + MVC RDATA,TREC + MVC RMSG,=CL16'DLTE NOT ON FILE' + BAL R10,WRITE + AP #REJECTS,=P'1' +BADDELX EQU * + L R10,SVBADDEL + BR R10 +**************************************************************** +* ADDIT - Add a new record to master file * +**************************************************************** +ADDIT EQU * + ST R10,SVADDIT + MVC ONBR,TNBR + MVC OLNAME,TLNAME + MVC OFNAME,TFNAME + MVC OADDR,TADDR + MVC OCITY,TCITY + MVC OSTATE,TSTATE + MVC OZIP,TZIP + MVC OACD,TACD + MVC OCRLF,TCRLF + MVC OREC,TREC + BAL R10,WRITENEW + BAL R10,CHKLNS + MVC RREC,BLANKS + BAL R10,WRITE + MVC RDATA,TREC + MVC RMSG,=CL16'ADD SUCCESSFUL' + BAL R10,WRITE + AP #ADDED,=P'1' +ADDITX EQU * + L R10,SVADDIT + BR R10 +**************************************************************** +* CHANGEIT - Apply changes to existing master record * +**************************************************************** +CHANGEIT EQU * + ST R10,SVCHGIT +* +* COPY EXISTING RECORD TO OUTPUT RECORD +* THEN MAKE THE REQUESTED CHANGES +* + MVC OREC,IREC + CLC TLNAME,BLANKS + BE CHGIT2 + MVC OLNAME,TLNAME +CHGIT2 EQU * + CLC TFNAME,BLANKS + BE CHGIT3 + MVC OFNAME,TFNAME +CHGIT3 EQU * + CLC TADDR,BLANKS + BE CHGIT4 + MVC OADDR,TADDR +CHGIT4 EQU * + CLC TCITY,BLANKS + BE CHGIT5 + MVC OCITY,TCITY +CHGIT5 EQU * + CLC TSTATE,BLANKS + BE CHGIT6 + MVC OSTATE,TSTATE +CHGIT6 EQU * + CLC TZIP,BLANKS + BE CHGIT7 + MVC OZIP,TZIP +CHGIT7 EQU * + MVC OACD,TACD + BAL R10,WRITENEW +* +* SHOW THE RECORD BEFORE AND AFTER CHANGES +* + BAL R10,CHKLNS + MVC RREC,BLANKS + BAL R10,WRITE + MVC RDATA,IREC + MVC RMSG,=CL16'BEFORE CHANGE' + BAL R10,WRITE + MVC RDATA,OREC + MVC RMSG,=CL16'AFTER CHANGE' + BAL R10,WRITE + AP #CHANGED,=P'1' +CHGITX EQU * + L R10,SVCHGIT + BR R10 +**************************************************************** +* DELETEIT - Delete an existing master record * +* (To delete it, just don't write it out.) * +**************************************************************** +DELETEIT EQU * + ST R10,SVDELIT + BAL R10,CHKLNS + MVC RREC,BLANKS + BAL R10,WRITE + MVC RDATA,IREC + MVC RMSG,=CL16'RECORD DELETED' + BAL R10,WRITE + AP #DELETED,=P'1' +DELETEX EQU * + L R10,SVDELIT + BR R10 +**************************************************************** +* READMST - Read a master record. * +**************************************************************** +READMST EQU * + ST R10,SVREADM + GET MASTERIN,IREC + AP #OLDIN,=P'1' + B READMX +ATENDMST EQU * + MVI EOFMAST,C'Y' +READMX EQU * + L R10,SVREADM + BR R10 +**************************************************************** +* READOFF - Read a transaction record. * +**************************************************************** +READTRN EQU * + ST R10,SVREADT + GET TRANSIN,TREC + AP #TRANSIN,=P'1' + B READTX +ATENDTRN EQU * + MVI EOFTRANS,C'Y' +READTX EQU * + L R10,SVREADT + BR R10 +**************************************************************** +* CHKLNS - Check lines printed. Full page? * +**************************************************************** +CHKLNS EQU * + ST R10,SVCHKLNS + CP LNS,MAXLNS + BL CHKLNSX + BAL R10,HDGS +CHKLNSX EQU * + L R10,SVCHKLNS + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,RREC Write report line + AP LNS,=P'1' + L R10,SVWRITE + BR R10 +**************************************************************** +* WRITE - Write a new master record. * +**************************************************************** +WRITENEW EQU * + ST R10,SVWRITEN + PUT MASTEROT,OREC + AP #NEWOUT,=P'1' + L R10,SVWRITEN + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP +* At this point we know that +* at least one of the input +* files is at EOF. Process +* other file as "unmatched" +* until at EOF also. +WRAPUP2 EQU * + CLI EOFMAST,C'Y' + BE WRAPUP3 + BAL R10,MASTLOW + B WRAPUP2 +WRAPUP3 EQU * + CLI EOFTRANS,C'Y' + BE WRAPUP4 + BAL R10,TRANSLOW + B WRAPUP3 +WRAPUP4 EQU * + CLOSE MASTERIN + CLOSE TRANSIN + CLOSE MASTEROT + BAL R10,DOCOUNTS + CLOSE REPORT + WTO 'BQSFU ... Audit list on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* DOCOUNTS - Show counts for audit * +**************************************************************** +DOCOUNTS EQU * + ST R10,SVCOUNTS + BAL R10,HDGS + MVC AREC,BLANKS + BAL R10,WRITE +* + MVC ADESC,=CL25'Transactions In' + MVC ACOUNT,EDCOUNT + ED ACOUNT,#TRANSIN + BAL R10,WRITE +* + MVC ADESC,=CL25'Transactions Rejected' + MVC ACOUNT,EDCOUNT + ED ACOUNT,#REJECTS + BAL R10,WRITE +* + MVC ADESC,=CL25'Old Masters In' + MVC ACOUNT,EDCOUNT + ED ACOUNT,#OLDIN + BAL R10,WRITE +* + MVC ADESC,=CL25'Old Masters Deleted' + MVC ACOUNT,EDCOUNT + ED ACOUNT,#DELETED + BAL R10,WRITE +* + MVC ADESC,=CL25'Old Masters Changed' + MVC ACOUNT,EDCOUNT + ED ACOUNT,#CHANGED + BAL R10,WRITE +* + MVC ADESC,=CL25'New Masters Added' + MVC ACOUNT,EDCOUNT + ED ACOUNT,#ADDED + BAL R10,WRITE +* + MVC ADESC,=CL25'New Masters Out' + MVC ACOUNT,EDCOUNT + ED ACOUNT,#NEWOUT + BAL R10,WRITE +* + L R10,SVCOUNTS + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +MASTERIN DCB LRECL=62,RECFM=F,MACRF=G,EODAD=ATENDMST, + DDNAME='BQSFUMST.DAT' +TRANSIN DCB LRECL=62,RECFM=F,MACRF=G,EODAD=ATENDTRN, + DDNAME='BQSFUTRN.DAT' +MASTEROT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='BQSFUNEW.DAT' +REPORT DCB LRECL=80,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREADM DC F'0' READMST +SVREADT DC F'0' READTRN +SVWRITE DC F'0' WRITE +SVWRITEN DC F'0' WRITENEW +SVWRAP DC F'0' WRAPUP +SVCHKLNS DC F'0' CHKLNS +SVMATCH DC F'0' MATCH +SVMSTLOW DC F'0' MASTLOW +SVTRNLOW DC F'0' TRANSLOW +SVCOUNTS DC F'0' DOCOUNTS +SVBADCOD DC F'0' BADCODE +SVBADADD DC F'0' BADADD +SVBADCHG DC F'0' BADCHANG +SVBADDEL DC F'0' BADDELET +SVADDIT DC F'0' ADDIT +SVCHGIT DC F'0' CHANGEIT +SVDELIT DC F'0' DEELTEIT +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +EOFMAST DC CL1'N' End of master file? (Y/N) +EOFTRANS DC CL1'N' End of transaction file? (Y/N) +EDCOUNT DC X'40206B2020206B202120' BZ,ZZZ,ZZ9 +PGS DC PL2'0' Nbr of pages printed. +LNS DC PL2'20' Lines printed on this page. +MAXLNS DC PL2'20' Max nbr lines per page. +* My line counts exclude hdgs. +BLANKS DS 0CL80 + DC CL78' ',XL2'0D25' +**************************************************************** +* Transaction codes * +**************************************************************** +ADD EQU C'A' +CHANGE EQU C'C' +DELETE EQU C'D' +**************************************************************** +* Counts for audit purposes * +**************************************************************** +#TRANSIN DC PL4'0' Transactions In +#REJECTS DC PL4'0' Transactions Rejected +#OLDIN DC PL4'0' Old Masters In +#DELETED DC PL4'0' Old Masters Deleted +#CHANGED DC PL4'0' Old Masters Changed +#ADDED DC PL4'0' New Masters Added +#NEWOUT DC PL4'0' New Masters Out +**************************************************************** +* Input record definition - Master In * +**************************************************************** +IREC DS 0CL62 1-62 Master record +INBR DS CL5 1- 5 Customer nbr +ILNAME DS CL10 6-15 Last name +IFNAME DS CL10 16-25 First name +IADDR DS CL15 26-40 Address +ICITY DS CL10 41-50 City +ISTATE DS CL2 51-52 State +IZIP DS CL5 53-57 Zip + DS CL2 58-59 Unused +IACD DS CL1 60-60 Transaction code (A/C/D) +ICRLF DS CL2 61-62 PC/370 only - CR/LF +**************************************************************** +* Input record definition - Transaction * +**************************************************************** +TREC DS 0CL62 1-62 Transaction record +TNBR DS CL5 1- 5 Customer nbr +TLNAME DS CL10 6-15 Last name +TFNAME DS CL10 16-25 First name +TADDR DS CL15 26-40 Address +TCITY DS CL10 41-50 City +TSTATE DS CL2 51-52 State +TZIP DS CL5 53-57 Zip + DS CL2 58-59 Unused +TACD DS CL1 60-60 Transaction code (A/C/D) +TCRLF DS CL2 61-62 PC/370 only - CR/LF +**************************************************************** +* Output record definition - Master Out * +**************************************************************** +OREC DS 0CL62 1-62 Master record +ONBR DS CL5 1- 5 Customer nbr +OLNAME DS CL10 6-15 Last name +OFNAME DS CL10 16-25 First name +OADDR DS CL15 26-40 Address +OCITY DS CL10 41-50 City +OSTATE DS CL2 51-52 State +OZIP DS CL5 53-57 Zip + DS CL2 58-59 Unused +OACD DS CL1 60-60 Transaction code (A/C/D) +OCRLF DS CL2 61-62 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +RREC DS 0CL80 1-80 Report record +RDATA DC CL60' ' 1-60 Transaction Data + DC CL2' ' 61-62 +RMSG DC CL16' ' 63-78 Audit message +RCRLF DS CL2 79-80 PC/370 only - CR/LF +**************************************************************** +* Output record definition - Audit * +* !!! NOTE HOW SPACE FOR RREC IS REDEFINED !!! * +**************************************************************** + ORG RREC +AREC DS 0CL80 1-87 Audit Line +ADESC DC CL25' ' 1-25 Description on count +ACOUNT DC CL10' ' 26-35 Count + DC CL43' ' 36-78 +ACRLF DS CL2 79-80 PC/370 only - CR/LF + ORG +**************************************************************** +* Headings definitions * +**************************************************************** +FORMFEED DS 0CL80 PC/370 only +* DC X'0C' EBCDIC formfeed +* DC CL77' ' + DC 78C'_' For testing... + DC X'0D25' EBCDIC CR/LF +HD1 DS 0CL80 + DC CL40' Name & Address Update Pro' + DC CL26'gram Page' +HDPGS DC CL4'BZZ9' + DC CL8' ' + DC XL2'0D25' +HD2 DS 0CL80 + DC CL78' Audit Listing' + DC XL2'0D25' +HD3 DS 0CL80 + DC CL78' ' + DC XL2'0D25' +HD4 DS 0CL80 + DC CL40'----+----1----+----2----+----3----+----4' + DC CL38'----+----5----+----6 MESSAGES' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/BQSFUMST.DAT b/PC370_orig/Diskette/source/BQSFUMST.DAT new file mode 100644 index 0000000..14770c9 --- /dev/null +++ b/PC370_orig/Diskette/source/BQSFUMST.DAT @@ -0,0 +1,11 @@ +11224BINFORD DAN 469 N 400 E DESOTO TX75115 A +12111ARIAS IDA 4028 ELMO LOOP MERCED CA95340 A +32555RYAN RICHARD 914 FIFTH ST NORMAL IL61761 A +41499HILMER DEBBIE 21175 FELIPA BUENA PARKCA90620 A +55123JOSEPHSON PEGGY 248 MICHIGAN JAMESTOWN NY14701 A +61626HAVLIK CHERYL 551 WASHINGTON WHITTIER CA90605 A +77271CARPENTER LOIS 326 BEACH BERWYN IL60650 A +81288BLACK KATHY 618 S ANZA PASADENA CA91106 A +81997FOOTE APRIL 635 BURNS CAROL STRMIL60187 A +94993DIXSON RICHARD 1021 BROWN CHICAGO IL60612 A + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/BQSFUTRN.DAT b/PC370_orig/Diskette/source/BQSFUTRN.DAT new file mode 100644 index 0000000..6e0ff76 --- /dev/null +++ b/PC370_orig/Diskette/source/BQSFUTRN.DAT @@ -0,0 +1,7 @@ +12111 2211 APRICOT MODESTO CA95356 C +41499 D +55123AMBROSE FRANK 220 BARRETT ROCKFORD IL61103 A +61627QUALLS CHERYL 201 N EIGHTH WHITTIER CA90605 C +81228 D +82446AMICCI BRUNO 17397 BARCELON CORVALLIS OR97330 A + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/COGS.CPY b/PC370_orig/Diskette/source/COGS.CPY new file mode 100644 index 0000000..5204a96 --- /dev/null +++ b/PC370_orig/Diskette/source/COGS.CPY @@ -0,0 +1,17 @@ +**************************************************************** +* This is COGS.CPY - Cogsworth's Inventory Data * +* Usage: COPY COGS (with COPY in column 10) * +**************************************************************** +IREC DS 0CL41 1-41 Inventory record +IDESC DS CL10 1-10 Product description +ICALIF DS CL3 11-13 Units sold in Calif +IILL DS CL3 14-16 Units sold in Illinois +IUTAH DS CL3 17-19 Units sold in Utah +IWISC DS CL3 20-22 Units sold in Wisconsin +IBEGIN DS CL3 23-25 Beginning inventory +IPURCH DS CL3 26-28 Purchases throughout year +IQOH DS CL3 29-31 Actual quantity on hand +ICOST DS CL4 32-35 Cost (each) 99V99 +ISELL DS CL4 36-39 Sell for (each) 99V99 +ICRLF DS CL2 40-41 PC/370 only - CR/LF + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/COGS13A.MLC b/PC370_orig/Diskette/source/COGS13A.MLC new file mode 100644 index 0000000..e8da823 --- /dev/null +++ b/PC370_orig/Diskette/source/COGS13A.MLC @@ -0,0 +1,129 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: COGS13A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Determine nationwide dollar sales for * +* COGSWORTH INDUSTRIES. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'COGS13A ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'COGS13A ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI INVENTRY+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OPEN INVENTRY + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET INVENTRY,IREC Read a single product record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + PACK WCALIF,ICALIF Each product's sales must + PACK WILL,IILL be packed so they can be + PACK WUTAH,IUTAH added to total for this + PACK WWISC,IWISC product... + ZAP WTOTAL,=P'0' Initialize the total to zero + AP WTOTAL,WCALIF and start adding... + AP WTOTAL,WILL + AP WTOTAL,WUTAH + AP WTOTAL,WWISC + PACK WSELL,ISELL Unit sell price + ZAP PK5,WTOTAL Length of WTOTAL is PL2 + MP PK5,WSELL and length of WSELL is PL3 + AP WDOLLARS,PK5 so need PL5 for product. + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + ED ODOLLARS,WDOLLARS + WTO OMSG + CLOSE INVENTRY + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +INVENTRY DCB LRECL=41,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='COGS.DAT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +EOFSW DC CL1'N' End of file? (Y/N) +WCALIF DC PL2'0' Units sold in Calif +WILL DC PL2'0' Units sold in Illinois +WUTAH DC PL2'0' Units sold in Utah +WWISC DC PL2'0' Units sold in Wisconsin +WTOTAL DC PL2'0' Units sold in all states +WSELL DC PL3'0' Sell for (each) 999V99 +WDOLLARS DC PL4'0' Nationwide dollar sales +PK5 DC PL5'0' +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL41 1-41 Inventory record +IDESC DS CL10 1-10 Product description +ICALIF DS CL3 11-13 Units sold in Calif +IILL DS CL3 14-16 Units sold in Illinois +IUTAH DS CL3 17-19 Units sold in Utah +IWISC DS CL3 20-22 Units sold in Wisconsin +IBEGIN DS CL3 23-25 Beginning inventory +IPURCH DS CL3 26-28 Purchases throughout year +IQOH DS CL3 29-31 Actual quantity on hand +ICOST DS CL4 32-35 Cost (each) 99V99 +ISELL DS CL4 36-39 Sell for (each) 99V99 +ICRLF DS CL2 40-41 PC/370 only - CR/LF +**************************************************************** +* Output message definition * +**************************************************************** +OMSG DS 0CL49 + DC CL39'COGS13A ... Nationwide dollar sales are' +ODOLLARS DC XL10'4020206B2021204B2020' BZZ,ZZ9.99 + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/COGS13B.MLC b/PC370_orig/Diskette/source/COGS13B.MLC new file mode 100644 index 0000000..521566e --- /dev/null +++ b/PC370_orig/Diskette/source/COGS13B.MLC @@ -0,0 +1,221 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: COGS13B.ML * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce report for COGSWORTH INDUSTRIES * +* California's contribution to sales. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'COGS13B ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'COGS13B ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI INVENTRY+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN INVENTRY + OPEN REPORT + BAL R10,HDGS + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + PUT REPORT,HD5 + PUT REPORT,HD6 + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OREC,BLANKS + MVC ODESC,IDESC + PACK WCALIF,ICALIF Each product's sales must + PACK WILL,IILL be packed so they can be + PACK WUTAH,IUTAH added to total for this + PACK WWISC,IWISC product... + ZAP WTOTAL,=P'0' Initialize the total to zero + AP WTOTAL,WCALIF and start adding... + AP WTOTAL,WILL + AP WTOTAL,WUTAH + AP WTOTAL,WWISC + AP TTOTAL,WTOTAL Grand total nationwide + AP TCALIF,WCALIF Grand total for Calif + MVC OTOTAL,=X'40202120' + ED OTOTAL,WTOTAL + MVC OCALIF,=X'40202120' + ED OCALIF,WCALIF + ZAP DIVIDEND,WCALIF + ZAP DIVISOR,WTOTAL + SRP DIVIDEND,3,0 + DP DIVIDEND,DIVISOR + SRP QUOTIENT,64-1,5 + ZAP PK2,QUOTIENT + MVC OPCT,=X'40202120' + ED OPCT,PK2 + MVI OPCT+L'OPCT,PERCENT + MVC OCRLF,WCRLF PC/370 only. + L R10,SVFORM + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET INVENTRY,IREC Read a single product record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + PUT REPORT,HD6 + MVC OREC,BLANKS + MVC ODESC(6),=C'TOTALS' + MVC OTOTAL,=X'40202120' + ED OTOTAL,TTOTAL + MVC OCALIF,=X'40202120' + ED OCALIF,TCALIF + ZAP DIVIDEND,TCALIF + ZAP DIVISOR,TTOTAL + SRP DIVIDEND,3,0 + DP DIVIDEND,DIVISOR + SRP QUOTIENT,64-1,5 + ZAP PK2,QUOTIENT + MVC OPCT,=X'40202120' + ED OPCT,PK2 + MVI OPCT+L'OPCT,PERCENT + MVC OCRLF,WCRLF PC/370 only. + BAL R10,WRITE + CLOSE INVENTRY + CLOSE REPORT + WTO 'COGS13B ... Sales report on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +INVENTRY DCB LRECL=41,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='COGS.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +BLANKS DC CL62' ' +WCALIF DC PL2'0' Units sold in Calif +WILL DC PL2'0' Units sold in Illinois +WUTAH DC PL2'0' Units sold in Utah +WWISC DC PL2'0' Units sold in Wisconsin +WTOTAL DC PL2'0' Units sold in all states +TCALIF DC PL2'0' Grand total for Calif +TTOTAL DC PL2'0' Grand total nationwide +PK2 DC PL2'0' +PERCENT EQU C'%' + COPY DIVISION + COPY COGS +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL62 1-62 +ODESC DS CL10 1-10 Product description + DS CL7 11-17 +OTOTAL DS CL4 18-21 Units sold Nationwide + DS CL9 22-30 +OCALIF DS CL4 31-34 Units sold in Calif + DS CL8 35-42 +OPCT DS CL4 43-46 Percent sales from Calif + DS CL14 47-60 +OCRLF DS CL2 61-62 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +HD1 DS 0CL62 + DC CL60' COGSWORTH INDUSTRIES ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL60' California''s Contribution to Sales' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40' Nationwide California ' + DC CL20'Percent of' + DC XL2'0D25' +HD5 DS 0CL62 + DC CL40' Product Sales Sales ' + DC CL20' National ' + DC XL2'0D25' +HD6 DS 0CL62 + DC CL40'---------- ---------- ---------- ' + DC CL20'----------' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/COGS14A.MLC b/PC370_orig/Diskette/source/COGS14A.MLC new file mode 100644 index 0000000..8f1b252 --- /dev/null +++ b/PC370_orig/Diskette/source/COGS14A.MLC @@ -0,0 +1,165 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: COGS14A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Create binary data file using COGS.DAT * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'COGS14A ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'COGS14A ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI INVENTRY+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OPEN INVENTRY + OPEN BINARY NOTE: Output in EBCDIC + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET INVENTRY,IREC Read a single product record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC ODESC,IDESC + PACK DBL,ICALIF Convert CALIF to binary + CVB R3,DBL + STH R3,OCALIF + PACK DBL,IILL Convert ILL to binary + CVB R3,DBL + STH R3,OILL + PACK DBL,IUTAH Convert UTAH to binary + CVB R3,DBL + STH R3,OUTAH + PACK DBL,IWISC Convert WISC to binary + CVB R3,DBL + STH R3,OWISC + PACK DBL,IBEGIN Convert BEGIN to binary + CVB R3,DBL + STH R3,OBEGIN + PACK DBL,IPURCH Convert PURCH to binary + CVB R3,DBL + STH R3,OPURCH + PACK DBL,IQOH Convert QOH to binary + CVB R3,DBL + STH R3,OQOH + PACK DBL,ICOST Convert COST to binary + CVB R3,DBL + STH R3,OCOST + PACK DBL,ISELL Convert SELL to binary + CVB R3,DBL + STH R3,OSELL + L R10,SVFORM + BR R10 +**************************************************************** +* WRITE - Write a single output record. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT BINARY,OREC + AP #OUT,=P'1' + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + CLOSE INVENTRY + CLOSE BINARY + WTO 'COGS14A ... Binary file COGS.BIN created.' + ED MSG#OUT,#OUT + WTO MSG + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +INVENTRY DCB LRECL=41,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='COGS.DAT' +BINARY DCB LRECL=28,RECFM=F,MACRF=P, + DDNAME='COGS.BIN' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +#OUT DC PL2'0' Count of records written +DBL DC D'0' To convert packed to binary + COPY COGS +**************************************************************** +* Output record definition * +**************************************************************** + DS 0H Force halfword alignment +OREC DS 0CL28 1-28 Inventory record +ODESC DS CL10 1-10 Product description +OCALIF DS H 11-12 Units sold in Calif +OILL DS H 13-14 Units sold in Illinois +OUTAH DS H 15-16 Units sold in Utah +OWISC DS H 17-18 Units sold in Wisconsin +OBEGIN DS H 19-20 Beginning inventory +OPURCH DS H 21-22 Purchases throughout year +OQOH DS H 23-24 Actual quantity on hand +OCOST DS H 25-26 Cost (each) 99V99 +OSELL DS H 27-28 Sell for (each) 99V99 +**************************************************************** +* Output message (count of records written) * +**************************************************************** +MSG DS 0CL32 + DC CL11'COGS14A ...' +MSG#OUT DC XL4'40202120' + DC CL17' records written.' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/COGS14B.MLC b/PC370_orig/Diskette/source/COGS14B.MLC new file mode 100644 index 0000000..46bf843 --- /dev/null +++ b/PC370_orig/Diskette/source/COGS14B.MLC @@ -0,0 +1,217 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: COGS14B.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce report for COGSWORTH INDUSTRIES * +* showing inventory discrepancies. * +* Modify COGS9B.MLC to use binary input. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'COGS14B ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'COGS14B ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN INVENTRY NOTE: Input in EBCDIC + OPEN REPORT + BAL R10,HDGS + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + PUT REPORT,HD5 + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET INVENTRY,IREC Read a single product record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OREC,BLANKS + MVC ODESC,IDESC Description + LH R3,IBEGIN Beginning inventory + CVD R3,DBL + MVC OBEGIN,WMASK + ED OBEGIN,DBL+6 + LH R4,IPURCH Purchases + CVD R4,DBL + MVC OPURCH,WMASK + ED OPURCH,DBL+6 + LH R5,ICALIF Each product's sales + AH R5,IILL by state must be added to + AH R5,IUTAH get total for product... + AH R5,IWISC + CVD R5,DBL + MVC OSALES,WMASK + ED OSALES,DBL+6 + LR R6,R3 Ending Inventory = + AR R6,R4 Beginning + Purchases + SR R6,R5 - Sales + CVD R6,DBL + MVC OENDING,WMASK + ED OENDING,DBL+6 + LH R3,IQOH Actual ending inventory + CVD R3,DBL (Reusing register 3) + MVC OQOH,WMASK (Reusing register 3) + ED OQOH,DBL+6 + SR R6,R3 Difference = + CVD R6,DBL Expected - Actual + MVC ODIFF,WMASK2 + ED ODIFF,DBL+6 + MVC OCRLF,WCRLF PC/370 only. + L R10,SVFORM + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + CLOSE INVENTRY + CLOSE REPORT + WTO 'COGS14B ... Discrepancies report on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +INVENTRY DCB LRECL=28,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='COGS.BIN' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +BLANKS DC CL62' ' +WMASK DC X'40202120' BZZ9 +WMASK2 DC X'4020202060' BZZZ- +DBL DC D'0' For packed/binary conversions +**************************************************************** +* Input record definition * +**************************************************************** + DS 0H Force halfword alignment +IREC DS 0CL28 1-28 Inventory record +IDESC DS CL10 1-10 Product description +ICALIF DS H 11-12 Units sold in Calif +IILL DS H 13-14 Units sold in Illinois +IUTAH DS H 15-16 Units sold in Utah +IWISC DS H 17-18 Units sold in Wisconsin +IBEGIN DS H 19-20 Beginning inventory +IPURCH DS H 21-22 Purchases throughout year +IQOH DS H 23-24 Actual quantity on hand +ICOST DS H 25-26 Cost (each) 99V99 +ISELL DS H 27-28 Sell for (each) 99V99 +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL62 1-62 +ODESC DS CL10 1-10 Product description + DS CL3 11-13 +OBEGIN DS CL4 14-17 Beginning inventory + DS CL4 18-21 +OPURCH DS CL4 22-25 Purchases + DS CL4 26-29 +OSALES DS CL4 30-33 Units sold + DS CL5 34-38 +OENDING DS CL4 39-42 Ending inventory (expected) + DS CL4 43-46 +OQOH DS CL4 47-50 Ending inventory (actual) + DS CL4 51-54 +ODIFF DS CL5 55-59 Difference + DS CL1 60-60 +OCRLF DS CL2 61-62 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +HD1 DS 0CL62 + DC CL40' COGSWORTH INDUSTRIES' + DC CL20' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL40' Inventory Discrepancies R' + DC CL20'eport' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'Product Begin + Purch - Sales = Exp' + DC CL20'ect Actual Diff' + DC XL2'0D25' +HD5 DS 0CL62 + DC CL40'---------- ----- ----- ----- ---' + DC CL20'--- ------ ----' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/COGS16A.MLC b/PC370_orig/Diskette/source/COGS16A.MLC new file mode 100644 index 0000000..eaf87f7 --- /dev/null +++ b/PC370_orig/Diskette/source/COGS16A.MLC @@ -0,0 +1,119 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: COGS16A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Determine nationwide dollar sales for * +* COGSWORTH INDUSTRIES. * +* This is a modification of COGS13A.MLC and * +* illustrates binary multiplication. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'COGS16A ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'COGS16A ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OPEN INVENTRY Input is EBCDIC, no CR/LF + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET INVENTRY,IREC Read a single product record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + LH R3,ICALIF Determine total units + AH R3,IILL sold for this product + AH R3,IUTAH + AH R3,IWISC + MH R3,ISELL Multiply units by price + A R3,TOTAL Add total thus far + ST R3,TOTAL then save back. + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + L R3,TOTAL Must put it in a register + CVD R3,DBLWORD to convert it to packed. + ED ODOLLARS,DBLWORD+4 + WTO OMSG + CLOSE INVENTRY + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +INVENTRY DCB LRECL=28,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='COGS.BIN' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +EOFSW DC CL1'N' End of file? (Y/N) +TOTAL DC F'0' Nationwide dollar sales +DBLWORD DC D'0' +**************************************************************** +* Input record definition * +**************************************************************** + DS 0H Force halfword alignment +IREC DS 0CL28 1-28 Inventory record +IDESC DS CL10 1-10 Product description +ICALIF DS H 11-12 Units sold in Calif +IILL DS H 13-14 Units sold in Illinois +IUTAH DS H 15-16 Units sold in Utah +IWISC DS H 17-18 Units sold in Wisconsin +IBEGIN DS H 19-20 Beginning inventory +IPURCH DS H 21-22 Purchases throughout year +IQOH DS H 23-24 Actual quantity on hand +ICOST DS H 25-26 Cost (each) 99V99 +ISELL DS H 27-28 Sell for (each) 99V99 +**************************************************************** +* Output message definition * +**************************************************************** +OMSG DS 0CL49 + DC CL39'COGS16A ... Nationwide dollar sales are' +ODOLLARS DC XL10'4020206B2021204B2020' BZZ,ZZ9.99 + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/COGS16B.MLC b/PC370_orig/Diskette/source/COGS16B.MLC new file mode 100644 index 0000000..aea0385 --- /dev/null +++ b/PC370_orig/Diskette/source/COGS16B.MLC @@ -0,0 +1,238 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: COGS16B.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce report for COGSWORTH INDUSTRIES * +* California's contribution to sales. * +* This is a modification of COGS13B.MLC and * +* illustrates binary division. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'COGS16B ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'COGS16B ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OPEN INVENTRY Input is EBCDIC, no CR/LF + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN REPORT + BAL R10,HDGS + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + PUT REPORT,HD5 + PUT REPORT,HD6 + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OREC,BLANKS + MVC ODESC,IDESC + LH R3,ICALIF Determine total units + AH R3,IILL sold for this product + AH R3,IUTAH + AH R3,IWISC R3 = Nationwide + LR R2,R3 + A R2,TTOTAL Add nationwide so far + ST R2,TTOTAL and save it back. + CVD R3,DBLWORD Convert to packed + ZAP PK2,DBLWORD for printing. + MVC OTOTAL,=X'40202120' + ED OTOTAL,PK2 + LH R5,ICALIF R5 = California only + LR R2,R5 + A R2,TCALIF Add California so far + ST R2,TCALIF and save it back. + CVD R5,DBLWORD Convert to packed + ZAP PK2,DBLWORD for printing. + MVC OCALIF,=X'40202120' + ED OCALIF,PK2 + M R4,=F'1000' Dividend will be in (R4,R5) + DR R4,R3 Divisor (nationwide) in R3 + CVD R5,DBLWORD Quotient is in R5 + SRP DBLWORD,64-1,5 + ZAP PK2,DBLWORD + MVC OPCT,=X'40202120' + ED OPCT,PK2 + MVI OPCT+L'OPCT,PERCENT + MVC OCRLF,WCRLF PC/370 only. + L R10,SVFORM + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET INVENTRY,IREC Read a single product record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + PUT REPORT,HD6 + MVC OREC,BLANKS + MVC ODESC(6),=C'TOTALS' + L R3,TTOTAL R3 = Nationwide total + CVD R3,DBLWORD Convert to packed + ZAP PK2,DBLWORD for printing. + MVC OTOTAL,=X'40202120' + ED OTOTAL,PK2 + L R5,TCALIF R5 = California only + CVD R5,DBLWORD Convert to packed + ZAP PK2,DBLWORD for printing. + MVC OCALIF,=X'40202120' + ED OCALIF,PK2 + M R4,=F'1000' Dividend will be in (R4,R5) + DR R4,R3 Divisor (nationwide) in R3 + CVD R5,DBLWORD Quotient is in R5 + SRP DBLWORD,64-1,5 + ZAP PK2,DBLWORD + MVC OPCT,=X'40202120' + ED OPCT,PK2 + MVI OPCT+L'OPCT,PERCENT + MVC OCRLF,WCRLF PC/370 only. + BAL R10,WRITE + CLOSE INVENTRY + CLOSE REPORT + WTO 'COGS16B ... Sales report on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +INVENTRY DCB LRECL=28,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='COGS.BIN' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +BLANKS DC CL62' ' +TCALIF DC F'0' Grand total for Calif +TTOTAL DC F'0' Grand total nationwide +DBLWORD DC D'0' +PK2 DC PL2'0' +PERCENT EQU C'%' +**************************************************************** +* Input record definition * +**************************************************************** + DS 0H Force halfword alignment +IREC DS 0CL28 1-28 Inventory record +IDESC DS CL10 1-10 Product description +ICALIF DS H 11-12 Units sold in Calif +IILL DS H 13-14 Units sold in Illinois +IUTAH DS H 15-16 Units sold in Utah +IWISC DS H 17-18 Units sold in Wisconsin +IBEGIN DS H 19-20 Beginning inventory +IPURCH DS H 21-22 Purchases throughout year +IQOH DS H 23-24 Actual quantity on hand +ICOST DS H 25-26 Cost (each) 99V99 +ISELL DS H 27-28 Sell for (each) 99V99 +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL62 1-62 +ODESC DS CL10 1-10 Product description + DS CL7 11-17 +OTOTAL DS CL4 18-21 Units sold Nationwide + DS CL9 22-30 +OCALIF DS CL4 31-34 Units sold in Calif + DS CL8 35-42 +OPCT DS CL4 43-46 Percent sales from Calif + DS CL14 47-60 +OCRLF DS CL2 61-62 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +HD1 DS 0CL62 + DC CL60' COGSWORTH INDUSTRIES ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL60' California''s Contribution to Sales' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40' Nationwide California ' + DC CL20'Percent of' + DC XL2'0D25' +HD5 DS 0CL62 + DC CL40' Product Sales Sales ' + DC CL20' National ' + DC XL2'0D25' +HD6 DS 0CL62 + DC CL40'---------- ---------- ---------- ' + DC CL20'----------' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/COGS7A.MLC b/PC370_orig/Diskette/source/COGS7A.MLC new file mode 100644 index 0000000..25a405e --- /dev/null +++ b/PC370_orig/Diskette/source/COGS7A.MLC @@ -0,0 +1,212 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: COGS7A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce report for COGSWORTH INDUSTRIES * +* showing sales by state. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'COGS7A ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'COGS7A ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI INVENTRY+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN INVENTRY + OPEN REPORT + BAL R10,HDGS + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + PUT REPORT,HD5 + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET INVENTRY,IREC Read a single product record + AP #IN,=P'1' Increment record count + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OREC,BLANKS + MVC ODESC,IDESC + MVC OCALIF,ICALIF + MVC OILL,IILL + MVC OUTAH,IUTAH + MVC OWISC,IWISC + PACK WCALIF,ICALIF Each product's sales must + PACK WILL,IILL be packed so they can be + PACK WUTAH,IUTAH added to total for this + PACK WWISC,IWISC product... + ZAP WTOTAL,=P'0' Initialize the total to zero + AP WTOTAL,WCALIF and start adding... + AP WTOTAL,WILL + AP WTOTAL,WUTAH + AP WTOTAL,WWISC + UNPK OTOTAL,WTOTAL Move total to output, + MVZ OTOTAL+2(1),=X'F0' and remove the sign. + MVC OCRLF,WCRLF PC/370 only. + L R10,SVFORM + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + MVC OREC,BLANKS + MVC OCRLF,WCRLF PC/370 only. + BAL R10,WRITE Skip a line. + MVC OREC(22),=CL22'XXX records processed.' + UNPK OREC(3),#IN Count + MVZ OREC+2(1),=X'F0' Remove sign + BAL R10,WRITE + CLOSE INVENTRY + CLOSE REPORT + WTO 'COGS7A ... Sales recap on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +INVENTRY DCB LRECL=41,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='COGS.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +BLANKS DC CL62' ' +WCALIF DC PL2'0' Units sold in Calif +WILL DC PL2'0' Units sold in Illinois +WUTAH DC PL2'0' Units sold in Utah +WWISC DC PL2'0' Units sold in Wisconsin +WTOTAL DC PL2'0' Units sold in all states +#IN DC PL2'0' Input record count +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL41 1-41 Inventory record +IDESC DS CL10 1-10 Product description +ICALIF DS CL3 11-13 Units sold in Calif +IILL DS CL3 14-16 Units sold in Illinois +IUTAH DS CL3 17-19 Units sold in Utah +IWISC DS CL3 20-22 Units sold in Wisconsin +IBEGIN DS CL3 23-25 Beginning inventory +IPURCH DS CL3 26-28 Purchases throughout year +IQOH DS CL3 29-31 Actual quantity on hand +ICOST DS CL4 32-35 Cost (each) 99V99 +ISELL DS CL4 36-39 Sell for (each) 99V99 +ICRLF DS CL2 40-41 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL62 1-62 +ODESC DS CL10 1-10 Product description + DS CL5 11-15 +OCALIF DS CL3 16-18 Units sold in Calif + DS CL6 19-24 +OILL DS CL3 25-27 Units sold in Illinois + DS CL6 28-33 +OUTAH DS CL3 34-36 Units sold in Utah + DS CL6 37-42 +OWISC DS CL3 43-45 Units sold in Wisconsin + DS CL6 46-51 +OTOTAL DS CL3 52-54 Units sold in all states + DS CL6 55-60 +OCRLF DS CL2 61-62 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +HD1 DS 0CL62 + DC CL40' COGSWORTH INDUSTRIES ' + DC CL20' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL40' Sales Recap ' + DC CL20' ' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'Product Calif Ill Utah ' + DC CL20' Wisc TOTAL' + DC XL2'0D25' +HD5 DS 0CL62 + DC CL40'---------- ----- ----- ----- ' + DC CL20' ----- -----' + DC XL2'0D25' + END BEGIN diff --git a/PC370_orig/Diskette/source/COGS7B.MLC b/PC370_orig/Diskette/source/COGS7B.MLC new file mode 100644 index 0000000..3eff225 --- /dev/null +++ b/PC370_orig/Diskette/source/COGS7B.MLC @@ -0,0 +1,252 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: COGS7B.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce report for COGSWORTH INDUSTRIES * +* showing inventory discrepancies. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'COGS7B ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'COGS7B ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI INVENTRY+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN INVENTRY + OPEN REPORT + BAL R10,HDGS + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + PUT REPORT,HD5 + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET INVENTRY,IREC Read a single product record + AP #IN,=P'1' Increment record count + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OREC,BLANKS + MVC ODESC,IDESC Description + MVC OBEGIN,IBEGIN Beginning inventory + MVC OPURCH,IPURCH Purchases + PACK WCALIF,ICALIF Each product's sales must + PACK WILL,IILL be packed so they can be + PACK WUTAH,IUTAH added to total for this + PACK WWISC,IWISC product... + ZAP WTOTAL,=P'0' Initialize the total to zero + AP WTOTAL,WCALIF and start adding... + AP WTOTAL,WILL + AP WTOTAL,WUTAH + AP WTOTAL,WWISC + UNPK OSALES,WTOTAL Move total to output, + MVZ OSALES+2(1),=X'F0' and remove the sign. + PACK WBEGIN,IBEGIN + PACK WPURCH,IPURCH Expected ending inventory = + ZAP WENDING,WBEGIN Beginning + AP WENDING,WPURCH + Purchases + SP WENDING,WTOTAL - Sales + UNPK OENDING,WENDING + MVZ OENDING+2(1),=X'F0' + MVC OQOH,IQOH Actual ending inventory + MVC OCRLF,WCRLF PC/370 only. + PACK WQOH,IQOH + CP WQOH,WENDING Compare actual vs. expected + BE FORMATX Don't show difference if zero + BL SHORT + AP #OVER,=P'1' Count overages + MVC ORESULT,=CL5'over' + B DODIFF +SHORT EQU * + AP #SHORT,=P'1' Count shortages + MVC ORESULT,=CL5'short' +DODIFF EQU * + ZAP WDIFF,WENDING Difference = Expected - Actual + SP WDIFF,WQOH + UNPK ODIFF,WDIFF + MVZ ODIFF+2(1),=X'F0' +FORMATX EQU * + L R10,SVFORM + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + MVC OREC,BLANKS + MVC OCRLF,WCRLF PC/370 only. + BAL R10,WRITE Skip a line. + MVC OREC(22),=CL22'XXX records processed.' + UNPK OREC(3),#IN Count + MVZ OREC+2(1),=X'F0' Remove sign + BAL R10,WRITE + MVC OREC(22),=CL22'XXX indicate shortage.' + UNPK OREC(3),#SHORT Count + MVZ OREC+2(1),=X'F0' Remove sign + BAL R10,WRITE + MVC OREC(22),=CL22'XXX indicate overage. ' + UNPK OREC(3),#OVER Count + MVZ OREC+2(1),=X'F0' Remove sign + BAL R10,WRITE + CLOSE INVENTRY + CLOSE REPORT + WTO 'COGS7B ... Discrepancies report on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +INVENTRY DCB LRECL=41,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='COGS.DAT' +REPORT DCB LRECL=67,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +BLANKS DC CL67' ' +WCALIF DC PL2'0' Units sold in Calif +WILL DC PL2'0' Units sold in Illinois +WUTAH DC PL2'0' Units sold in Utah +WWISC DC PL2'0' Units sold in Wisconsin +WTOTAL DC PL2'0' Units sold in all states +WBEGIN DC PL2'0' Beginning inventory +WPURCH DC PL2'0' Purchases +WENDING DC PL2'0' Ending inventory (expected) +WQOH DC PL2'0' Ending inventory (actual) +WDIFF DC PL2'0' Difference +#IN DC PL2'0' Input record count +#OVER DC PL2'0' Records showing overage +#SHORT DC PL2'0' Records showing shortage +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL41 1-41 Inventory record +IDESC DS CL10 1-10 Product description +ICALIF DS CL3 11-13 Units sold in Calif +IILL DS CL3 14-16 Units sold in Illinois +IUTAH DS CL3 17-19 Units sold in Utah +IWISC DS CL3 20-22 Units sold in Wisconsin +IBEGIN DS CL3 23-25 Beginning inventory +IPURCH DS CL3 26-28 Purchases throughout year +IQOH DS CL3 29-31 Actual quantity on hand +ICOST DS CL4 32-35 Cost (each) 99V99 +ISELL DS CL4 36-39 Sell for (each) 99V99 +ICRLF DS CL2 40-41 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL67 1-67 +ODESC DS CL10 1-10 Product description + DS CL4 11-14 +OBEGIN DS CL3 15-17 Beginning inventory + DS CL5 18-22 +OPURCH DS CL3 23-25 Purchases + DS CL5 26-30 +OSALES DS CL3 31-33 Units sold + DS CL6 34-39 +OENDING DS CL3 40-42 Ending inventory (expected) + DS CL5 43-47 +OQOH DS CL3 48-50 Ending inventory (actual) + DS CL6 51-56 +ODIFF DS CL3 57-59 Difference + DS CL1 60-60 +ORESULT DS CL5 61-65 'over' or 'short' +OCRLF DS CL2 66-67 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +HD1 DS 0CL67 + DC CL40' COGSWORTH INDUSTRIES' + DC CL25' ' + DC XL2'0D25' +HD2 DS 0CL67 + DC CL40' Inventory Discrepancies R' + DC CL25'eport' + DC XL2'0D25' +HD3 DS 0CL67 + DC CL65' ' + DC XL2'0D25' +HD4 DS 0CL67 + DC CL40'Product Begin + Purch - Sales = Exp' + DC CL25'ect Actual Result ' + DC XL2'0D25' +HD5 DS 0CL67 + DC CL40'---------- ----- ----- ----- ---' + DC CL25'--- ------ ----------' + DC XL2'0D25' + END BEGIN diff --git a/PC370_orig/Diskette/source/COGS9A.MLC b/PC370_orig/Diskette/source/COGS9A.MLC new file mode 100644 index 0000000..6becd86 --- /dev/null +++ b/PC370_orig/Diskette/source/COGS9A.MLC @@ -0,0 +1,219 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: COGS9A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce report for COGSWORTH INDUSTRIES * +* showing sales by state. * +* Modify COGS7A.MLC to use ED instruction. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'COGS9A ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'COGS9A ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI INVENTRY+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN INVENTRY + OPEN REPORT + BAL R10,HDGS + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + PUT REPORT,HD5 + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET INVENTRY,IREC Read a single product record + AP #IN,=P'1' Increment record count + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OREC,BLANKS + MVC ODESC,IDESC + PACK WCALIF,ICALIF Each product's sales must + PACK WILL,IILL be packed so they can be + PACK WUTAH,IUTAH added to total for this + PACK WWISC,IWISC product... + MVC OCALIF,WMASK + ED OCALIF,WCALIF + MVC OILL,WMASK + ED OILL,WILL + MVC OUTAH,WMASK + ED OUTAH,WUTAH + MVC OWISC,WMASK + ED OWISC,WWISC + ZAP WTOTAL,=P'0' Initialize the total to zero + AP WTOTAL,WCALIF and start adding... + AP WTOTAL,WILL + AP WTOTAL,WUTAH + AP WTOTAL,WWISC + MVC OTOTAL,WMASK + ED OTOTAL,WTOTAL + MVC OCRLF,WCRLF PC/370 only. + L R10,SVFORM + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + MVC OREC,BLANKS + MVC OCRLF,WCRLF PC/370 only. + BAL R10,WRITE Skip a line. + MVC OREC(23),=CL23'BZZ9 records processed.' + MVC OREC(4),WMASK + ED OREC(4),#IN Count + BAL R10,WRITE + CLOSE INVENTRY + CLOSE REPORT + WTO 'COGS9A ... Sales recap on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +INVENTRY DCB LRECL=41,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='COGS.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +BLANKS DC CL62' ' +WCALIF DC PL2'0' Units sold in Calif +WILL DC PL2'0' Units sold in Illinois +WUTAH DC PL2'0' Units sold in Utah +WWISC DC PL2'0' Units sold in Wisconsin +WTOTAL DC PL2'0' Units sold in all states +#IN DC PL2'0' Input record count +WMASK DC X'40202120' BZZ9 +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL41 1-41 Inventory record +IDESC DS CL10 1-10 Product description +ICALIF DS CL3 11-13 Units sold in Calif +IILL DS CL3 14-16 Units sold in Illinois +IUTAH DS CL3 17-19 Units sold in Utah +IWISC DS CL3 20-22 Units sold in Wisconsin +IBEGIN DS CL3 23-25 Beginning inventory +IPURCH DS CL3 26-28 Purchases throughout year +IQOH DS CL3 29-31 Actual quantity on hand +ICOST DS CL4 32-35 Cost (each) 99V99 +ISELL DS CL4 36-39 Sell for (each) 99V99 +ICRLF DS CL2 40-41 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL62 1-62 +ODESC DS CL10 1-10 Product description + DS CL4 11-14 +OCALIF DS CL4 15-18 Units sold in Calif + DS CL5 19-23 +OILL DS CL4 24-27 Units sold in Illinois + DS CL5 28-32 +OUTAH DS CL4 33-36 Units sold in Utah + DS CL5 37-41 +OWISC DS CL4 42-45 Units sold in Wisconsin + DS CL5 46-50 +OTOTAL DS CL4 51-54 Units sold in all states + DS CL6 55-60 +OCRLF DS CL2 61-62 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +HD1 DS 0CL62 + DC CL40' COGSWORTH INDUSTRIES ' + DC CL20' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL40' Sales Recap ' + DC CL20' ' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'Product Calif Ill Utah ' + DC CL20' Wisc TOTAL' + DC XL2'0D25' +HD5 DS 0CL62 + DC CL40'---------- ----- ----- ----- ' + DC CL20' ----- -----' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/COGS9B.MLC b/PC370_orig/Diskette/source/COGS9B.MLC new file mode 100644 index 0000000..ab79049 --- /dev/null +++ b/PC370_orig/Diskette/source/COGS9B.MLC @@ -0,0 +1,256 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: COGS9B.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce report for COGSWORTH INDUSTRIES * +* showing inventory discrepancies. * +* Modify COGS7B.MLC to use ED instruction. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'COGS9B ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'COGS9B ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI INVENTRY+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN INVENTRY + OPEN REPORT + BAL R10,HDGS + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + PUT REPORT,HD5 + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET INVENTRY,IREC Read a single product record + AP #IN,=P'1' Increment record count + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OREC,BLANKS + MVC ODESC,IDESC Description + PACK WBEGIN,IBEGIN Beginning inventory + MVC OBEGIN,WMASK + ED OBEGIN,WBEGIN + PACK WPURCH,IPURCH Purchases + MVC OPURCH,WMASK + ED OPURCH,WPURCH + PACK WCALIF,ICALIF Each product's sales must + PACK WILL,IILL be packed so they can be + PACK WUTAH,IUTAH added to total for this + PACK WWISC,IWISC product... + ZAP WTOTAL,=P'0' Initialize the total to zero + AP WTOTAL,WCALIF and start adding... + AP WTOTAL,WILL + AP WTOTAL,WUTAH + AP WTOTAL,WWISC + MVC OSALES,WMASK + ED OSALES,WTOTAL + ZAP WENDING,WBEGIN Ending inventory = + AP WENDING,WPURCH Beginning + Purchases + SP WENDING,WTOTAL - Sales + MVC OENDING,WMASK + ED OENDING,WENDING + PACK WQOH,IQOH Actual ending inventory + MVC OQOH,WMASK + ED OQOH,WQOH + MVC OCRLF,WCRLF PC/370 only. + CP WQOH,WENDING Compare actual vs. expected + BE DODIFF + BL SHORT + AP #OVER,=P'1' Count overages + B DODIFF +SHORT EQU * + AP #SHORT,=P'1' Count shortages +DODIFF EQU * + ZAP WDIFF,WENDING Difference = Expected - Actual + SP WDIFF,WQOH + MVC ODIFF,WMASK2 + ED ODIFF,WDIFF +FORMATX EQU * + L R10,SVFORM + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + MVC OREC,BLANKS + MVC OCRLF,WCRLF PC/370 only. + BAL R10,WRITE Skip a line. + MVC OREC(23),=CL23'BZZ9 records processed.' + MVC OREC(4),WMASK + ED OREC(4),#IN Count all + BAL R10,WRITE + MVC OREC(23),=CL23'BZZ9 indicate shortage.' + MVC OREC(4),WMASK + ED OREC(4),#SHORT Count shortages + BAL R10,WRITE + MVC OREC(23),=CL23'BZZ9 indicate overage. ' + MVC OREC(4),WMASK + ED OREC(4),#OVER Count overages + BAL R10,WRITE + CLOSE INVENTRY + CLOSE REPORT + WTO 'COGS9B ... Discrepancies report on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +INVENTRY DCB LRECL=41,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='COGS.DAT' +REPORT DCB LRECL=67,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +BLANKS DC CL67' ' +WCALIF DC PL2'0' Units sold in Calif +WILL DC PL2'0' Units sold in Illinois +WUTAH DC PL2'0' Units sold in Utah +WWISC DC PL2'0' Units sold in Wisconsin +WTOTAL DC PL2'0' Units sold in all states +WBEGIN DC PL2'0' Beginning inventory +WPURCH DC PL2'0' Purchases +WENDING DC PL2'0' Ending inventory (expected) +WQOH DC PL2'0' Ending inventory (actual) +WDIFF DC PL2'0' Difference +#IN DC PL2'0' Input record count +#OVER DC PL2'0' Records showing overage +#SHORT DC PL2'0' Records showing shortage +WMASK DC X'40202120' BZZ9 +WMASK2 DC X'4020202060' BZZZ- +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL41 1-41 Inventory record +IDESC DS CL10 1-10 Product description +ICALIF DS CL3 11-13 Units sold in Calif +IILL DS CL3 14-16 Units sold in Illinois +IUTAH DS CL3 17-19 Units sold in Utah +IWISC DS CL3 20-22 Units sold in Wisconsin +IBEGIN DS CL3 23-25 Beginning inventory +IPURCH DS CL3 26-28 Purchases throughout year +IQOH DS CL3 29-31 Actual quantity on hand +ICOST DS CL4 32-35 Cost (each) 99V99 +ISELL DS CL4 36-39 Sell for (each) 99V99 +ICRLF DS CL2 40-41 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL67 1-67 +ODESC DS CL10 1-10 Product description + DS CL3 11-13 +OBEGIN DS CL4 14-17 Beginning inventory + DS CL4 18-21 +OPURCH DS CL4 22-25 Purchases + DS CL4 26-29 +OSALES DS CL4 30-33 Units sold + DS CL5 34-38 +OENDING DS CL4 39-42 Ending inventory (expected) + DS CL4 43-46 +OQOH DS CL4 47-50 Ending inventory (actual) + DS CL4 51-54 +ODIFF DS CL5 55-59 Difference + DS CL6 60-65 +OCRLF DS CL2 66-67 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +HD1 DS 0CL67 + DC CL40' COGSWORTH INDUSTRIES' + DC CL25' ' + DC XL2'0D25' +HD2 DS 0CL67 + DC CL40' Inventory Discrepancies R' + DC CL25'eport' + DC XL2'0D25' +HD3 DS 0CL67 + DC CL65' ' + DC XL2'0D25' +HD4 DS 0CL67 + DC CL40'Product Begin + Purch - Sales = Exp' + DC CL25'ect Actual Diff ' + DC XL2'0D25' +HD5 DS 0CL67 + DC CL40'---------- ----- ----- ----- ---' + DC CL25'--- ------ ---- ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/DATA5A.MLC b/PC370_orig/Diskette/source/DATA5A.MLC new file mode 100644 index 0000000..6035b34 --- /dev/null +++ b/PC370_orig/Diskette/source/DATA5A.MLC @@ -0,0 +1,22 @@ + PRINT NOGEN + START 0 +BEGIN BEGIN + MVI LETTER,W + WTO MESSAGE + MVI LETTER,X + WTO MESSAGE + MVI LETTER,Y + WTO MESSAGE + MVI LETTER,Z + WTO MESSAGE + RETURN +MESSAGE DS 0CL24 + DC CL22'DATA5A ... Letter is <' +LETTER DC CL1' ' + DC CL1'>' +W EQU C'A' +X EQU X'C1' +Y EQU B'11000001' +Z EQU 193 + END BEGIN +  \ No newline at end of file diff --git a/PC370_orig/Diskette/source/DATE370.MLC b/PC370_orig/Diskette/source/DATE370.MLC new file mode 100644 index 0000000..5c86e36 --- /dev/null +++ b/PC370_orig/Diskette/source/DATE370.MLC @@ -0,0 +1,88 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: DATE370.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Demonstrate date/time functions in PC/370. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO MESSAGE (Before) +* + SVC 18 +* Supervisor call 18 returns +* time in R0; year with century +* in R1; day, month, and day of +* week in R2. +* + LR R3,R0 Put time in R3 + SRL R3,24 hhmmssxx becomes 000000hh + CVD R3,DBL Hours only + UNPK TIME(2),DBL Move to output + OI TIME+1,X'F0' Remove sign +* + LR R3,R0 Put time in R3 + SLL R3,8 hhmmssxx becomes mmssxx00 + SRL R3,24 mmssxx00 becomes 000000mm + CVD R3,DBL Minutes only + UNPK TIME+3(2),DBL Move to output + OI TIME+4,X'F0' Remove sign +* + LR R3,R0 Put time in R3 + SLL R3,16 hhmmssxx becomes ssxx0000 + SRL R3,24 ssxx0000 becomes 000000ss + CVD R3,DBL Seconds only + UNPK TIME+6(2),DBL Move to output + OI TIME+7,X'F0' Remove sign +* + LR R3,R0 Put time in R3 + SLL R3,24 hhmmssxx becomes xx000000 + SRL R3,24 xx000000 becomes 000000xx + CVD R3,DBL Hundredths of seconds only + UNPK TIME+9(2),DBL Move to output + OI TIME+10,X'F0' Remove sign +* + CVD R1,DBL Year with century + UNPK DATE+6(4),DBL Move to output + OI DATE+9,X'F0' Remove sign +* + LR R3,R2 Put date in R3 + SRL R3,24 mmddww00 becomes 000000mm + CVD R3,DBL Month only + UNPK DATE(2),DBL Move to output + OI DATE+1,X'F0' Remove sign +* + LR R3,R2 Put date in R3 + SLL R3,8 mmddww00 becomes ddww0000 + SRL R3,24 ddww0000 becomes 000000dd + CVD R3,DBL Day of month only + UNPK DATE+3(2),DBL Move to output + OI DATE+4,X'F0' Remove sign +* + LR R3,R2 Put date in R3 + SLL R3,16 mmddww00 becomes ww000000 + SRL R3,24 ww000000 becomes 000000ww + MH R3,=H'3' Each day of week is 3 long + A R3,=A(DOWTBL) Displacement into table + MVC DOW,0(R3) Move to output +* + WTO MESSAGE (After) +* + RETURN +* + LTORG +* +MESSAGE DS 0CL71 + DC CL18'DATE370...Time is ' +TIME DC CL11'hh:mm:ss.xx' + DC CL11'...Date is ' +DATE DC CL10'mm/dd/yyyy' + DC CL18'...Day of week is ' +DOW DC CL3'ddd' +* +DBL DS D +DOWTBL DC C'SunMonTueWedThuFriSat' +* + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/DIVISION.CPY b/PC370_orig/Diskette/source/DIVISION.CPY new file mode 100644 index 0000000..32f3029 --- /dev/null +++ b/PC370_orig/Diskette/source/DIVISION.CPY @@ -0,0 +1,9 @@ +**************************************************************** +* This is DIVISION.CPY - BQ's Easy Divides * +* Usage: COPY DIVISION (with COPY in column 10) * +**************************************************************** +DIVIDEND DS 0PL16 +QUOTIENT DS PL8 +REMAINDR DS PL8 +DIVISOR DS PL8 + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/DP.MLC b/PC370_orig/Diskette/source/DP.MLC new file mode 100644 index 0000000..f9ab8e7 --- /dev/null +++ b/PC370_orig/Diskette/source/DP.MLC @@ -0,0 +1,13 @@ +DP BEGIN + DP A,B + DP C,D + DP E,F + RETURN +A DC PL3'47' +B DC PL1'9' +C DC PL5'1276' +D DC PL2'100' +E DC PL4'10' +F DC PL2'25' + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/DP2.MLC b/PC370_orig/Diskette/source/DP2.MLC new file mode 100644 index 0000000..0b9b345 --- /dev/null +++ b/PC370_orig/Diskette/source/DP2.MLC @@ -0,0 +1,7 @@ +DP2 BEGIN + DP X,Y + RETURN +X DC PL5'5006' +Y DC PL3'5' + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/EDITS9.MLC b/PC370_orig/Diskette/source/EDITS9.MLC new file mode 100644 index 0000000..4a03cc0 --- /dev/null +++ b/PC370_orig/Diskette/source/EDITS9.MLC @@ -0,0 +1,113 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: EDITS9.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Demonstrate the edit instruction by * +* implementing examples shown in chapter 9. * +**************************************************************** + START 0 +BEGIN BEGIN +**************************************************************** + WTO 'SEE PAGE 9.3' +**************************************************************** + MVC WK8,MASK + ED WK8,FLDA + WTO WK8 + MVC WK8,=X'4020202020202020' + ED WK8,FLDA + WTO WK8 +**************************************************************** + WTO 'SEE PAGE 9.4' +**************************************************************** + MVC WK6,MASK2 + ED WK6,FLDB + WTO WK6 + MVC WK6,MASK3 + ED WK6,FLDB + WTO WK6 +**************************************************************** + WTO 'SEE PAGE 9.5' +**************************************************************** + MVC WK9,=X'4020202020214B2020' + ED WK9,FLDA + WTO WK9 + MVC WK7,=X'402020214B2020' + ED WK7,FLDB + WTO WK7 + MVC WK7,=X'402021204B2020' + ED WK7,FLDB + WTO WK7 +**************************************************************** + WTO 'SEE PAGE 9.6' +**************************************************************** + MVC WK10,=X'4020206B2020214B2020' + ED WK10,FLDA + WTO WK10 + MVC WK7,MASK4 + ED WK7,POS + WTO WK7 + MVC WK7,MASK4 + ED WK7,NEG + WTO WK7 +**************************************************************** + WTO 'SEE PAGE 9.7' +**************************************************************** + MVC WK8,MASK5 + ED WK8,POS + WTO WK8 + MVC WK8,MASK5 + ED WK8,NEG + WTO WK8 +**************************************************************** + WTO 'SEE PAGE 9.8' +**************************************************************** + MVC WK9,CR + ED WK9,POS + WTO WK9 + MVC WK9,CR + ED WK9,NEG + WTO WK9 + MVC WK9,DB + ED WK9,POS + WTO WK9 + MVC WK9,DB + ED WK9,NEG + WTO WK9 + MVC WK10,CHKA + ED WK10,FLDA + WTO WK10 + MVC WK7,CHKB + ED WK7,FLDB + WTO WK7 +**************************************************************** + WTO 'ALL DONE...' +**************************************************************** + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* Other field definitions +* +WK6 DS CL6 +WK7 DS CL7 +WK8 DS CL8 +WK9 DS CL9 +WK10 DS CL10 +FLDA DC PL4'123456' +FLDB DC PL3'0' +POS DC PL3'+123' +NEG DC PL3'-123' +MASK DC X'4020202020202020' BZZZZZZZ +MASK2 DC X'402020202020' BZZZZZ +MASK3 DC X'402020202120' BZZZZ9 +MASK4 DC X'402021204B2020' BZZ9.99 +MASK5 DC X'402021204B202060' BZZ9.99- +CR DC X'402021204B2020C3D9' BZZ9.99CR +DB DC X'402021204B2020C4C2' BZZ9.99DB +CHKA DC X'5C20206B2021204B2020' ***,**9.99 +CHKB DC X'5C2021204B2020' ***9.99 + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/HELLO.MLC b/PC370_orig/Diskette/source/HELLO.MLC new file mode 100644 index 0000000..0ed1bbe --- /dev/null +++ b/PC370_orig/Diskette/source/HELLO.MLC @@ -0,0 +1,15 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: HELLO.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : This program will display a message. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO MESSAGE + RETURN +MESSAGE DC C'Hello world!' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/MOVE2A.MLC b/PC370_orig/Diskette/source/MOVE2A.MLC new file mode 100644 index 0000000..8d999db --- /dev/null +++ b/PC370_orig/Diskette/source/MOVE2A.MLC @@ -0,0 +1,34 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: MOVE2A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Demonstrate character moves. * +**************************************************************** + START 0 +BEGIN BEGIN + WTO IPHONE + MVC OPFX,IPFX + MVC OHYPHEN,WHYPHEN + MVC OLINE,ILINE + WTO OPHONE + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* Other field definitions +* +WHYPHEN DC CL1'-' +* +IPHONE DS 0CL7 +IPFX DC CL3'555' +ILINE DC CL4'1212' +* +OPHONE DS 0CL8 +OPFX DS CL3 +OHYPHEN DS CL1 +OLINE DS CL4 + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/MOVE2B.MLC b/PC370_orig/Diskette/source/MOVE2B.MLC new file mode 100644 index 0000000..70c2a84 --- /dev/null +++ b/PC370_orig/Diskette/source/MOVE2B.MLC @@ -0,0 +1,32 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: MOVE2B.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Demonstrate character moves. * +**************************************************************** + START 0 +BEGIN BEGIN + WTO IPHONE + MVC OPFX,IPFX + MVC OHYPHEN,=CL1'-' + MVC OLINE,ILINE + WTO OPHONE + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* Other field definitions +* +IPHONE DS 0CL7 +IPFX DC CL3'555' +ILINE DC CL4'1212' +* +OPHONE DS 0CL8 +OPFX DS CL3 +OHYPHEN DS CL1 +OLINE DS CL4 + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/MOVE2C.MLC b/PC370_orig/Diskette/source/MOVE2C.MLC new file mode 100644 index 0000000..74afb00 --- /dev/null +++ b/PC370_orig/Diskette/source/MOVE2C.MLC @@ -0,0 +1,32 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: MOVE2C.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Demonstrate character moves. * +**************************************************************** + START 0 +BEGIN BEGIN + WTO IPHONE + MVC OPFX,IPFX + MVI OHYPHEN,C'-' + MVC OLINE,ILINE + WTO OPHONE + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* Other field definitions +* +IPHONE DS 0CL7 +IPFX DC CL3'555' +ILINE DC CL4'1212' +* +OPHONE DS 0CL8 +OPFX DS CL3 +OHYPHEN DS CL1 +OLINE DS CL4 + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/MOVE2D.MLC b/PC370_orig/Diskette/source/MOVE2D.MLC new file mode 100644 index 0000000..5d5e22c --- /dev/null +++ b/PC370_orig/Diskette/source/MOVE2D.MLC @@ -0,0 +1,34 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: MOVE2D.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Demonstrate character moves. * +**************************************************************** + START 0 +BEGIN BEGIN + WTO IPHONE + MVC OPFX,IPFX + MVI OHYPHEN,HYPHEN + MVC OLINE,ILINE + WTO OPHONE + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* Other field definitions +* +HYPHEN EQU C'-' +* +IPHONE DS 0CL7 +IPFX DC CL3'555' +ILINE DC CL4'1212' +* +OPHONE DS 0CL8 +OPFX DS CL3 +OHYPHEN DS CL1 +OLINE DS CL4 + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/MP.MLC b/PC370_orig/Diskette/source/MP.MLC new file mode 100644 index 0000000..fe4b682 --- /dev/null +++ b/PC370_orig/Diskette/source/MP.MLC @@ -0,0 +1,10 @@ +MP BEGIN + MP FLDA,FLDB + RETURN +FLDA DC PL3'5' +FLDB DC PL3'20' +FLDC DC PL3'1000' +FLDD DC PL5'5' +FLDE DC PL5'20' +FLDF DC PL5'1000' + END \ No newline at end of file diff --git a/PC370_orig/Diskette/source/OFFER10A.MLC b/PC370_orig/Diskette/source/OFFER10A.MLC new file mode 100644 index 0000000..baa0a9e --- /dev/null +++ b/PC370_orig/Diskette/source/OFFER10A.MLC @@ -0,0 +1,211 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: OFFER10A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce list of course offerings for all * +* semesters. Includes page break logic. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'OFFER10A ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'OFFER10A ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI OFFER+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN OFFER + OPEN REPORT + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + AP PGS,=P'1' Add 1 to page count + MVC HDPGS,=X'40202120' Edit pattern for page count + ED HDPGS,PGS Move page count to heading + PUT REPORT,FORMFEED PC/370 ONLY + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + ZAP LNS,=P'0' Reset line count to zero + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,CHKLNS + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET OFFER,IREC Read a single offer record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* CHKLNS - Check lines printed. Full page? * +**************************************************************** +CHKLNS EQU * + ST R10,SVCHKLNS + CP LNS,MAXLNS + BL CHKLNSX + BAL R10,HDGS +CHKLNSX EQU * + L R10,SVCHKLNS + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OREC(40),BLANKS + MVC OSEM,ISEM Semester + MVC OCID,ICID Course ID + MVC OSECT,ISECT Section number + MVC OTID,ITID Teacher ID + MVC OCRLF,WCRLF PC/370 Only + L R10,SVFORM + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + AP LNS,=P'1' + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + CLOSE OFFER + CLOSE REPORT + WTO 'OFFER10A ... Course list on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +*************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +OFFER DCB LRECL=18,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='OFFER.DAT' +REPORT DCB LRECL=42,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +SVCHKLNS DC F'0' CHKLNS +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +PGS DC PL2'0' Nbr of pages printed. +LNS DC PL2'10' Lines printed on this page. +MAXLNS DC PL2'10' Max nbr lines per page. +* My line counts exclude hdgs. +BLANKS DC CL40' ' +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL18 1-18 Offer record +ISEM DS CL3 1- 3 Semester +ICID DS 0CL5 4- 8 Course ID +IDEPT DS CL2 4- 5 Department + DS CL3 6- 8 Course number +ISECT DS CL1 9- 9 Section number +ITID DS CL3 10-12 Teacher ID +IROOM DS CL4 13-16 Room number +IOCRLF DS CL2 17-18 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL42 1-42 + DC CL3' ' 1- 3 +OSEM DS CL3 4- 6 Semester + DC CL4' ' 7-10 +OCID DS CL5 11-15 Course ID + DC CL6' ' 16-21 +OSECT DS CL1 22-22 Section number + DC CL8' ' 23-30 +OTID DS CL3 31-33 Teacher ID + DC CL7' ' 34-40 +OCRLF DS CL2 41-42 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +* +* ----+----1----+----2----+----3----+----4 +* COURSE OFFERINGS PageBZZ9 +* +* Sem Course Section Teachers +* --- ------ ------- -------- +* XXX XXXXX X XXX +* XXX XXXXX X XXX +* XXX XXXXX X XXX +* +FORMFEED DS 0CL42 PC/370 only +* DC X'0C' EBCDIC formfeed +* DC CL39' ' + DC 40C'_' For testing... + DC X'0D25' EBCDIC CR/LF +HD1 DS 0CL42 + DC CL36' COURSE OFFERINGS Page' +HDPGS DC CL4'BZZ9' + DC XL2'0D25' +HD2 DS 0CL42 + DC CL40' ' + DC XL2'0D25' +HD3 DS 0CL42 + DC CL40' Sem Course Section Teacher ' + DC XL2'0D25' +HD4 DS 0CL42 + DC CL40' --- ------ ------- ------- ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/OFFER10B.MLC b/PC370_orig/Diskette/source/OFFER10B.MLC new file mode 100644 index 0000000..c98cfb1 --- /dev/null +++ b/PC370_orig/Diskette/source/OFFER10B.MLC @@ -0,0 +1,260 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: OFFER10B.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce list of course offerings for all * +* semesters. Includes page break logic. * +* Single level control break example. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'OFFER10B ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'OFFER10B ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI OFFER+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN OFFER + OPEN REPORT + BAL R10,READ + MVC HOLDSEM,ISEM Control break + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + AP PGS,=P'1' Add 1 to page count + MVC HDPGS,=X'40202120' Edit pattern for page count + ED HDPGS,PGS Move page count to heading + PUT REPORT,FORMFEED PC/370 ONLY + MVC HDSEM,HOLDSEM + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + PUT REPORT,HD5 + ZAP LNS,=P'0' Reset line count to zero + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,CHKSEM See if new semester + AP #SEM,=P'1' Count sections by semester + BAL R10,CHKLNS + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET OFFER,IREC Read a single offer record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* CHKSEM - Check for change in semester * +* (control break) * +**************************************************************** +CHKSEM EQU * + ST R10,SVCHKSEM + CLC HOLDSEM,ISEM Compare w/ current + BE CHKSEMX Same semester, get out + BAL R10,ENDSEM Process semester break + MVC HOLDSEM,ISEM Update control break field +CHKSEMX EQU * + L R10,SVCHKSEM + BR R10 +**************************************************************** +* ENDSEM - End semester * +* (Process control break) * +* Show count of sections for this semester. * +* Force next semester to another page. * +**************************************************************** +ENDSEM EQU * + ST R10,SVENDSEM + MVC OREC(40),BLANKS This area used several ways + BAL R10,WRITE Skip a line + MVC OREC+6(25),=C'*** Sem XXX BZZ9 sections' + MVC OREC+14(3),HOLDSEM + MVC OREC+18(4),=X'40202120' + ED OREC+18(4),#SEM + BAL R10,WRITE + MVC OREC(40),BLANKS + ZAP #SEM,=P'0' Reset counter + ZAP LNS,MAXLNS Force next sem. to new page + L R10,SVENDSEM + BR R10 +**************************************************************** +* CHKLNS - Check lines printed. Full page? * +**************************************************************** +CHKLNS EQU * + ST R10,SVCHKLNS + CP LNS,MAXLNS + BL CHKLNSX + BAL R10,HDGS +CHKLNSX EQU * + L R10,SVCHKLNS + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OREC(40),BLANKS + MVC OCID,ICID Course ID + MVC OSECT,ISECT Section number + MVC OTID,ITID Teacher ID + MVC OCRLF,WCRLF PC/370 Only + L R10,SVFORM + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + AP LNS,=P'1' + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + BAL R10,ENDSEM Final control break process + CLOSE OFFER + CLOSE REPORT + WTO 'OFFER10B ... Course list on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +*************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +OFFER DCB LRECL=18,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='OFFER.DAT' +REPORT DCB LRECL=42,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +SVCHKLNS DC F'0' CHKLNS +SVCHKSEM DC F'0' CHKSEM +SVENDSEM DC F'0' ENDSEM +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +PGS DC PL2'0' Nbr of pages printed. +LNS DC PL2'10' Lines printed on this page. +MAXLNS DC PL2'10' Max nbr lines per page. +* My line counts exclude hdgs. +BLANKS DC CL40' ' +HOLDSEM DC CL3' ' Hold semester +#SEM DC PL2'0' Sections in a semester +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL18 1-18 Offer record +ISEM DS CL3 1- 3 Semester +ICID DS 0CL5 4- 8 Course ID +IDEPT DS CL2 4- 5 Department + DS CL3 6- 8 Course number +ISECT DS CL1 9- 9 Section number +ITID DS CL3 10-12 Teacher ID +IROOM DS CL4 13-16 Room number +IOCRLF DS CL2 17-18 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL42 1-42 + DC CL10' ' 1-10 +OCID DS CL5 11-15 Course ID + DC CL6' ' 16-21 +OSECT DS CL1 22-22 Section number + DC CL8' ' 23-30 +OTID DS CL3 31-33 Teacher ID + DC CL7' ' 34-40 +OCRLF DS CL2 41-42 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +* +* ----+----1----+----2----+----3----+----4 +* COURSE OFFERINGS PageBZZ9 +* Semester XXX +* +* Course Section Teachers +* ------ ------- -------- +* XXXXX X XXX +* XXXXX X XXX +* XXXXX X XXX +* +* Sem XXX BZZ9 sections +* +FORMFEED DS 0CL42 PC/370 only +* DC X'0C' EBCDIC formfeed +* DC CL39' ' + DC 40C'_' For testing... + DC X'0D25' EBCDIC CR/LF +HD1 DS 0CL42 + DC CL36' COURSE OFFERINGS Page' +HDPGS DC CL4'BZZ9' + DC XL2'0D25' +HD2 DS 0CL42 + DC CL21' Semester ' +HDSEM DS CL3 + DC CL16' ' + DC XL2'0D25' +HD3 DS 0CL42 + DC CL40' ' + DC XL2'0D25' +HD4 DS 0CL42 + DC CL40' Course Section Teacher ' + DC XL2'0D25' +HD5 DS 0CL42 + DC CL40' ------ ------- ------- ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/OFFER10C.MLC b/PC370_orig/Diskette/source/OFFER10C.MLC new file mode 100644 index 0000000..8a85848 --- /dev/null +++ b/PC370_orig/Diskette/source/OFFER10C.MLC @@ -0,0 +1,309 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: OFFER10C.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce list of course offerings for all * +* semesters. Includes page break logic. * +* Multiple level control break example. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'OFFER10C ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'OFFER10C ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI OFFER+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN OFFER + OPEN REPORT + BAL R10,READ + MVC HOLDSEM,ISEM Major control break + MVC HOLDDEPT,IDEPT Minor control break + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + AP PGS,=P'1' Add 1 to page count + MVC HDPGS,=X'40202120' Edit pattern for page count + ED HDPGS,PGS Move page count to heading + PUT REPORT,FORMFEED PC/370 ONLY + MVC HDSEM,HOLDSEM + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + PUT REPORT,HD5 + ZAP LNS,=P'0' Reset line count to zero + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,CHKSEM See if new semester + BAL R10,CHKDEPT See if new department + AP #SEM,=P'1' Count sections by semester + AP #DEPT,=P'1' Count sections by department + BAL R10,CHKLNS + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET OFFER,IREC Read a single offer record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* CHKSEM - Check for change in semester * +* (major control break) * +**************************************************************** +CHKSEM EQU * + ST R10,SVCHKSEM + CLC HOLDSEM,ISEM Compare w/ current + BE CHKSEMX Same semester, get out + BAL R10,ENDSEM Process semester break + MVC HOLDSEM,ISEM Update major break field + MVC HOLDDEPT,IDEPT Update minor break field +CHKSEMX EQU * + L R10,SVCHKSEM + BR R10 +**************************************************************** +* CHKDEPT - Check for change in department * +* (minor control break) * +**************************************************************** +CHKDEPT EQU * + ST R10,SVCHKDEP + CLC HOLDDEPT,IDEPT Compare w/ current + BE CHKDEPTX Same department, get out + BAL R10,ENDDEPT Process department break + MVC HOLDDEPT,IDEPT Update control break field +CHKDEPTX EQU * + L R10,SVCHKDEP + BR R10 +**************************************************************** +* ENDSEM - End semester * +* (Process major control break) * +* Show count of sections for this semester. * +* Force next semester to another page. * +**************************************************************** +ENDSEM EQU * + ST R10,SVENDSEM + BAL R10,ENDDEPT Change in semester implies +* change in department as well. + MVC OREC(40),BLANKS This area used several ways + MVC OREC+6(25),=C'*** Sem XXX BZZ9 sections' + MVC OREC+14(3),HOLDSEM + MVC OREC+18(4),=X'40202120' + ED OREC+18(4),#SEM + BAL R10,WRITE + MVC OREC(40),BLANKS + ZAP #SEM,=P'0' Reset counter + ZAP LNS,MAXLNS Force next sem. to new page + L R10,SVENDSEM + BR R10 +**************************************************************** +* ENDDEPT- End department * +* (Process minor control break) * +* Print count of sections in department * +* if that count is two or more. * +* Regardless, skip a line. * +**************************************************************** +ENDDEPT EQU * + ST R10,SVENDDEP + CP #DEPT,=P'2' + BL ENDDEPT2 + MVC OREC(40),BLANKS This area used several ways + BAL R10,WRITE Blank line before count + MVC OREC+7(24),=C'** Dept XX BZZ9 sections' + MVC OREC+15(2),HOLDDEPT + MVC OREC+18(4),=X'40202120' + ED OREC+18(4),#DEPT + BAL R10,WRITE +ENDDEPT2 EQU * + MVC OREC(40),BLANKS + BAL R10,WRITE + ZAP #DEPT,=P'0' Reset counter + L R10,SVENDDEP + BR R10 +**************************************************************** +* CHKLNS - Check lines printed. Full page? * +**************************************************************** +CHKLNS EQU * + ST R10,SVCHKLNS + CP LNS,MAXLNS + BL CHKLNSX + BAL R10,HDGS +CHKLNSX EQU * + L R10,SVCHKLNS + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OREC(40),BLANKS + MVC OCID,ICID Course ID + MVC OSECT,ISECT Section number + MVC OTID,ITID Teacher ID + MVC OCRLF,WCRLF PC/370 Only + L R10,SVFORM + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + AP LNS,=P'1' + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + BAL R10,ENDSEM Final control break process + CLOSE OFFER + CLOSE REPORT + WTO 'OFFER10C ... Course list on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +*************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +OFFER DCB LRECL=18,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='OFFER.DAT' +REPORT DCB LRECL=42,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +SVCHKLNS DC F'0' CHKLNS +SVCHKSEM DC F'0' CHKSEM +SVCHKDEP DC F'0' CHKDEPT +SVENDSEM DC F'0' ENDSEM +SVENDDEP DC F'0' ENDDEPT +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +PGS DC PL2'0' Nbr of pages printed. +LNS DC PL2'10' Lines printed on this page. +MAXLNS DC PL2'10' Max nbr lines per page. +* My line counts exclude hdgs. +BLANKS DC CL40' ' +HOLDSEM DC CL3' ' Hold semester +HOLDDEPT DC CL2' ' Hold department +#SEM DC PL2'0' Sections in a semester +#DEPT DC PL2'0' Sections in a semester/dept +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL18 1-18 Offer record +ISEM DS CL3 1- 3 Semester +ICID DS 0CL5 4- 8 Course ID +IDEPT DS CL2 4- 5 Department + DS CL3 6- 8 Course number +ISECT DS CL1 9- 9 Section number +ITID DS CL3 10-12 Teacher ID +IROOM DS CL4 13-16 Room number +IOCRLF DS CL2 17-18 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL42 1-42 + DC CL10' ' 1-10 +OCID DS CL5 11-15 Course ID + DC CL6' ' 16-21 +OSECT DS CL1 22-22 Section number + DC CL8' ' 23-30 +OTID DS CL3 31-33 Teacher ID + DC CL7' ' 34-40 +OCRLF DS CL2 41-42 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +* +* ----+----1----+----2----+----3----+----4 +* COURSE OFFERINGS PageBZZ9 +* Semester XXX +* +* Course Section Teachers +* ------ ------- -------- +* XXXXX X XXX +* +* XXXXX X XXX +* XXXXX X XXX +* +* Dept XX BZZ9 sections +* +* Sem XXX BZZ9 sections +* +FORMFEED DS 0CL42 PC/370 only +* DC X'0C' EBCDIC formfeed +* DC CL39' ' + DC 40C'_' For testing... + DC X'0D25' EBCDIC CR/LF +HD1 DS 0CL42 + DC CL36' COURSE OFFERINGS Page' +HDPGS DC CL4'BZZ9' + DC XL2'0D25' +HD2 DS 0CL42 + DC CL21' Semester ' +HDSEM DS CL3 + DC CL16' ' + DC XL2'0D25' +HD3 DS 0CL42 + DC CL40' ' + DC XL2'0D25' +HD4 DS 0CL42 + DC CL40' Course Section Teacher ' + DC XL2'0D25' +HD5 DS 0CL42 + DC CL40' ------ ------- ------- ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/OFFER10D.MLC b/PC370_orig/Diskette/source/OFFER10D.MLC new file mode 100644 index 0000000..480a4f1 --- /dev/null +++ b/PC370_orig/Diskette/source/OFFER10D.MLC @@ -0,0 +1,284 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: OFFER10D.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce list of course offerings for all * +* semesters. Includes page break logic. * +* Multiple level control break. * +* Minor break (dept) is summary only. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'OFFER10D ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'OFFER10D ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI OFFER+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN OFFER + OPEN REPORT + BAL R10,READ + MVC HOLDSEM,ISEM Major control break + MVC HOLDDEPT,IDEPT Minor control break + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + AP PGS,=P'1' Add 1 to page count + MVC HDPGS,=X'40202120' Edit pattern for page count + ED HDPGS,PGS Move page count to heading + PUT REPORT,FORMFEED PC/370 ONLY + MVC HDSEM,HOLDSEM + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + PUT REPORT,HD5 + ZAP LNS,=P'0' Reset line count to zero + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,CHKSEM See if new semester + BAL R10,CHKDEPT See if new department + AP #SEM,=P'1' Count be semester + AP #DEPT,=P'1' Count by semester/dept + BAL R10,READ No detail-level reporting + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET OFFER,IREC Read a single offer record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* CHKSEM - Check for change in semester * +* (major control break) * +**************************************************************** +CHKSEM EQU * + ST R10,SVCHKSEM + CLC HOLDSEM,ISEM Compare w/ current + BE CHKSEMX Same semester, get out + BAL R10,ENDSEM Process semester break + MVC HOLDSEM,ISEM Update major break field + MVC HOLDDEPT,IDEPT Update minor break field +CHKSEMX EQU * + L R10,SVCHKSEM + BR R10 +**************************************************************** +* CHKDEPT - Check for change in department * +* (minor control break) * +**************************************************************** +CHKDEPT EQU * + ST R10,SVCHKDEP + CLC HOLDDEPT,IDEPT Compare w/ current + BE CHKDEPTX Same department, get out + BAL R10,ENDDEPT Process department break + MVC HOLDDEPT,IDEPT Update control break field +CHKDEPTX EQU * + L R10,SVCHKDEP + BR R10 +**************************************************************** +* ENDSEM - End semester * +* (Process major control break) * +* Show count of sections for this semester. * +* Force next semester to another page. * +**************************************************************** +ENDSEM EQU * + ST R10,SVENDSEM + BAL R10,ENDDEPT Change in semester implies +* change in department as well. + PUT REPORT,HD5 + AP LNS,=P'1' + MVC OREC(40),BLANKS Reuse this line + MVC ODEPT(5),=CL5'Total' + MVC O#DEPT,=X'40202120' + ED O#DEPT,#SEM + BAL R10,WRITE + MVC OREC(40),BLANKS + ZAP #SEM,=P'0' Reset semester record count + ZAP LNS,MAXLNS Force next sem. to new page + L R10,SVENDSEM + BR R10 +**************************************************************** +* ENDDEPT- End department * +* (Process minor control break) * +* Print a count of courses (sections) in * +* this department. * +**************************************************************** +ENDDEPT EQU * + ST R10,SVENDDEP + BAL R10,CHKLNS + MVC OREC(40),BLANKS + MVC ODEPT,HOLDDEPT Department + MVC O#DEPT,=X'40202120' + ED O#DEPT,#DEPT How many this department? + MVC OCRLF,WCRLF PC/370 only + BAL R10,WRITE + ZAP #DEPT,=P'0' Reset dept record count + L R10,SVENDDEP + BR R10 +**************************************************************** +* CHKLNS - Check lines printed. Full page? * +**************************************************************** +CHKLNS EQU * + ST R10,SVCHKLNS + CP LNS,MAXLNS + BL CHKLNSX + BAL R10,HDGS +CHKLNSX EQU * + L R10,SVCHKLNS + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + AP LNS,=P'1' + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + BAL R10,ENDSEM Final control break process + CLOSE OFFER + CLOSE REPORT + WTO 'OFFER10D ... Course list on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +*************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +OFFER DCB LRECL=18,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='OFFER.DAT' +REPORT DCB LRECL=42,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +SVCHKLNS DC F'0' CHKLNS +SVCHKSEM DC F'0' CHKSEM +SVCHKDEP DC F'0' CHKDEPT +SVENDSEM DC F'0' ENDSEM +SVENDDEP DC F'0' ENDDEPT +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +PGS DC PL2'0' Nbr of pages printed. +LNS DC PL2'10' Lines printed on this page. +MAXLNS DC PL2'10' Max nbr lines per page. +* My line counts exclude hdgs. +BLANKS DC CL40' ' +HOLDSEM DC CL3' ' Hold semester +HOLDDEPT DC CL2' ' Hold department +#SEM DC PL2'0' Sections in a semester +#DEPT DC PL2'0' Sections in a semester/dept +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL18 1-18 Offer record +ISEM DS CL3 1- 3 Semester +ICID DS 0CL5 4- 8 Course ID +IDEPT DS CL2 4- 5 Department + DS CL3 6- 8 Course number +ISECT DS CL1 9- 9 Section number +ITID DS CL3 10-12 Teacher ID +IROOM DS CL4 13-16 Room number +IOCRLF DS CL2 17-18 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL42 1-42 + DC CL10' ' 1-10 +ODEPT DS CL2 11-12 Department + DC CL7' ' 13-19 +O#DEPT DS CL4 20-23 Number of sections + DC CL17' ' 24-40 +OCRLF DS CL2 41-42 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +* +* ----+----1----+----2----+----3----+----4 +* COURSE OFFERINGS PageBZZ9 +* Semester XXX +* +* Dept Sections +* ------ -------- +* XX BZZ9 +* XX BZZ9 +* ------ -------- +* Total BZZ9 +* +FORMFEED DS 0CL42 PC/370 only +* DC X'0C' EBCDIC formfeed +* DC CL39' ' + DC 40C'_' For testing... + DC X'0D25' EBCDIC CR/LF +HD1 DS 0CL42 + DC CL36' COURSE OFFERINGS Page' +HDPGS DC CL4'BZZ9' + DC XL2'0D25' +HD2 DS 0CL42 + DC CL21' Semester ' +HDSEM DS CL3 + DC CL16' ' + DC XL2'0D25' +HD3 DS 0CL42 + DC CL40' ' + DC XL2'0D25' +HD4 DS 0CL42 + DC CL40' Dept Sections ' + DC XL2'0D25' +HD5 DS 0CL42 + DC CL40' ------ -------- ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/OFFER2A.MLC b/PC370_orig/Diskette/source/OFFER2A.MLC new file mode 100644 index 0000000..5bb3da7 --- /dev/null +++ b/PC370_orig/Diskette/source/OFFER2A.MLC @@ -0,0 +1,41 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: OFFER2A.MLC * +* AUTHOR : * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : A quick-and-dirty list of offerings. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + OI OFFER+10,X'08' + OI REPORT+10,X'08' + OPEN OFFER + OPEN REPORT +LOOP GET OFFER,IREC + MVC OREC(2),IREC+3 + MVI OREC+2,C'-' + MVC OREC+3(3),IREC+5 + MVI OREC+6,C'-' + MVC OREC+7(1),IREC+8 + MVC OREC+11(1),IREC + MVC OREC+12(3),=C'*19' + MVC OREC+15(2),IREC+1 + MVC OREC+20(4),IREC+12 + MVC OREC+27(3),IREC+9 + MVC OREC+31(2),=C'**' + MVC OREC+33(2),=X'0D25' + PUT REPORT,OREC + B LOOP +ATEND CLOSE OFFER + CLOSE REPORT + RETURN + LTORG +OFFER DCB LRECL=18,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='OFFER.DAT' +REPORT DCB LRECL=35,RECFM=F,MACRF=P, + DDNAME='OFFER.TXT' +IREC DS CL18 +OREC DC CL35' ' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/OVERFLOW.MLC b/PC370_orig/Diskette/source/OVERFLOW.MLC new file mode 100644 index 0000000..b26edd2 --- /dev/null +++ b/PC370_orig/Diskette/source/OVERFLOW.MLC @@ -0,0 +1,13 @@ +OVERFLOW BEGIN + AP A,B + BO OVER + WTO 'There was NOT an overflow' + B DONE +OVER EQU * + WTO 'There WAS an overflow' +DONE EQU * + RETURN +A DC PL2'998' +B DC PL2'2' + END OVERFLOW + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/S0C7.MLC b/PC370_orig/Diskette/source/S0C7.MLC new file mode 100644 index 0000000..4bc2c70 --- /dev/null +++ b/PC370_orig/Diskette/source/S0C7.MLC @@ -0,0 +1,15 @@ + START 0 +BEGIN BEGIN +* --------------------------- +* S0C7.MLC BY BILL QUALLS +* USING PC/370 V4.2 +* FORCE DECIMAL EXCEPTION +* --------------------------- + AP SUM,ONE + AP SUM,TWO + RETURN +SUM DC PL2'0' +ONE DC PL1'1' +TWO DS PL1'2' (Error) + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/STUFF6A.MLC b/PC370_orig/Diskette/source/STUFF6A.MLC new file mode 100644 index 0000000..d94626b --- /dev/null +++ b/PC370_orig/Diskette/source/STUFF6A.MLC @@ -0,0 +1,21 @@ +STUFF6A BEGIN + CLC A,B + BL D + MVC C,B + MVI E,C'1' + B F +D EQU * + CLI B,C'D' + BE F + MVC C,A + MVI E,C'9' +F EQU * + RETURN +A DC CL3'AB' +B DC CL4'CDEF' +C DS CL2 +E DC CL1'*' + END + + + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/STUFF6B.MLC b/PC370_orig/Diskette/source/STUFF6B.MLC new file mode 100644 index 0000000..1dab946 --- /dev/null +++ b/PC370_orig/Diskette/source/STUFF6B.MLC @@ -0,0 +1,17 @@ +STUFF6B BEGIN + MVC X,Y + MVI Z,C'9' + CLI X,C'L' + BE W + CLC X,Z + BL W + MVC Z,Y +W EQU * + RETURN +X DC CL2'JK' +Y DC CL5'LMNOP' +Z DC CL4'QRST' + END + + + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/STUFF6C.MLC b/PC370_orig/Diskette/source/STUFF6C.MLC new file mode 100644 index 0000000..1f6d1fd --- /dev/null +++ b/PC370_orig/Diskette/source/STUFF6C.MLC @@ -0,0 +1,15 @@ +STUFF6C BEGIN + CLC D,F + BL H + MVI E,C'D' + B G +H MVI D,C'F' +G EQU * + RETURN +F DC CL2'DE' +D DC CL1'D' +E DC CL3'FED' + END + + + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/STUFF6D.MLC b/PC370_orig/Diskette/source/STUFF6D.MLC new file mode 100644 index 0000000..0af3208 --- /dev/null +++ b/PC370_orig/Diskette/source/STUFF6D.MLC @@ -0,0 +1,14 @@ +STUFF6D BEGIN + MVI M,C'L' + MVC L,M + CLI L,C'N' + BNE N + MVI L,C'M' +N EQU * + RETURN +L DC CL3'MOM' +M DC CL2' ' + END + + + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/STUFF6E.MLC b/PC370_orig/Diskette/source/STUFF6E.MLC new file mode 100644 index 0000000..1b4d458 --- /dev/null +++ b/PC370_orig/Diskette/source/STUFF6E.MLC @@ -0,0 +1,15 @@ +STUFF6E BEGIN +P CLC S,R + BH Q + MVC R,T + MVI R,C'2' + B P +Q EQU * + RETURN +T DC CL3'123' +S DC CL2'33' +R DC CL2'33' + END + + + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/STUFF7A.MLC b/PC370_orig/Diskette/source/STUFF7A.MLC new file mode 100644 index 0000000..fe95189 --- /dev/null +++ b/PC370_orig/Diskette/source/STUFF7A.MLC @@ -0,0 +1,16 @@ +STUFF7A BEGIN + PACK R,N + AP R,Q + CP M,R + BE S + SP Q,R +S EQU * + RETURN + LTORG +M DC PL2'116' +N DC CL3'123' +Q DC PL2'-7' +R DC PL4'5' + END + + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/STUFF7B.MLC b/PC370_orig/Diskette/source/STUFF7B.MLC new file mode 100644 index 0000000..2dcbfc2 --- /dev/null +++ b/PC370_orig/Diskette/source/STUFF7B.MLC @@ -0,0 +1,14 @@ +STUFF7B BEGIN + ZAP X,Z + UNPK Y,X + MVZ Y+2(1),=X'F0' + MVC W,Y+1 + SP Z,X + RETURN + LTORG +W DS CL2 +X DC CL3'555' +Y DC CL3'ABC' +Z DC PL4'1234' + END + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TEACH11A.MLC b/PC370_orig/Diskette/source/TEACH11A.MLC new file mode 100644 index 0000000..9208b6b --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH11A.MLC @@ -0,0 +1,316 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH11A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce list of F92 teaching assignments. * +* This program illustrates matching logic. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH11A ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFTEACH,C'Y' + BE EOJ + CLI EOFOFFER,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'TEACH11A ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI OFFER+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN OFFER + OPEN REPORT + BAL R10,READTCH + BAL R10,READOFF + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + AP PGS,=P'1' Add 1 to page count + MVC HDPGS,=X'40202120' Edit pattern for page count + ED HDPGS,PGS Move page count to heading + PUT REPORT,FORMFEED PC/370 ONLY + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + ZAP LNS,=P'0' Reset line count to zero + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + CLC TTID,OTID Attempt match on teacher ID + BH PROC2 Offerings low + BL PROC3 Teacher low + BAL R10,MATCH Otherwise a match was found + B PROCESSX +PROC2 EQU * No teacher for this offering + BAL R10,OFFERLOW + B PROCESSX +PROC3 EQU * No offerings for this teacher + BAL R10,TEACHLOW +PROCESSX EQU * + L R10,SVPROC + BR R10 +**************************************************************** +* TEACHLOW - No courses for this teacher. * +* This is NOT an error condition. * +* Just skip this teacher and go to next. * +**************************************************************** +TEACHLOW EQU * + ST R10,SVTCHLOW + BAL R10,READTCH Read next teacher record + L R10,SVTCHLOW + BR R10 +**************************************************************** +* MATCH - Course offering with teacher. * +**************************************************************** +MATCH EQU * + ST R10,SVMATCH + MVC HOLDTID,TTID Current teacher + MVC HOLDNAME,TTNAME + BAL R10,DOTHIS1 Do this one (teacher) + BAL R10,READTCH Read next teacher record + L R10,SVMATCH + BR R10 +**************************************************************** +* OFFERLOW - Course offering without matching teacher * +**************************************************************** +OFFERLOW EQU * + ST R10,SVOFFLOW + MVC HOLDTID,OTID Current teacher + MVC HOLDNAME,=CL15'Unknown' + BAL R10,DOTHIS1 Do this one (teacher) + L R10,SVOFFLOW + BR R10 +**************************************************************** +* DOTHIS1 - Do this one (teacher) * +**************************************************************** +DOTHIS1 EQU * + ST R10,SVTHIS1 + MVC RREC,BLANKS + MVC RTID,HOLDTID First line for each teacher + MVC RTNAME,HOLDNAME will show ID and name +DOTHIS2 EQU * This loop for each offering + BAL R10,CHKLNS for this teacher... + CP LNS,=P'0' + BNE DOTHIS3 + MVC RTID,HOLDTID Also shown on first line + MVC RTNAME,HOLDNAME of each page +DOTHIS3 EQU * + MVC RCID,OCID + MVC RSECT,OSECT + MVC RROOM,OROOM + BAL R10,WRITE + MVC RREC,BLANKS + BAL R10,READOFF Read next offerings record + CLI EOFOFFER,C'Y' If EOF then done + BE DOTHIS4 + CLC HOLDTID,OTID Still the same teacher? + BE DOTHIS2 Yes, continue this one +DOTHIS4 EQU * + MVC RREC,BLANKS Blank line between teachers + BAL R10,WRITE + L R10,SVTHIS1 + BR R10 +**************************************************************** +* READTCH - Read a teacher record. * +**************************************************************** +READTCH EQU * + ST R10,SVREADT + GET TEACHERS,TREC Read a single teacher record + B READTX +ATENDTCH EQU * + MVI EOFTEACH,C'Y' +READTX EQU * + L R10,SVREADT + BR R10 +**************************************************************** +* READOFF - Read a course offerings record. * +**************************************************************** +READOFF EQU * + ST R10,SVREADO + GET OFFER,OREC Read a single offerings record + CLC OSEM,=CL3'F92' Process F92 records only + BNE READOFF + B READOX +ATENDOFF EQU * + MVI EOFOFFER,C'Y' +READOX EQU * + L R10,SVREADO + BR R10 +**************************************************************** +* CHKLNS - Check lines printed. Full page? * +**************************************************************** +CHKLNS EQU * + ST R10,SVCHKLNS + CP LNS,MAXLNS + BL CHKLNSX + BAL R10,HDGS +CHKLNSX EQU * + L R10,SVCHKLNS + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,RREC Write report line + AP LNS,=P'1' + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP +* At this point we know that +* at least one of the input +* files is at EOF. Process +* other file as "unmatched" +* until at EOF also. +WRAPUP2 EQU * + CLI EOFOFFER,C'Y' + BE WRAPUP3 + BAL R10,OFFERLOW + B WRAPUP2 +WRAPUP3 EQU * + CLI EOFTEACH,C'Y' + BE WRAPUP4 + BAL R10,TEACHLOW + B WRAPUP3 +WRAPUP4 EQU * + CLOSE TEACHERS + CLOSE OFFER + CLOSE REPORT + WTO 'TEACH11A ... Teacher list on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATENDTCH, + DDNAME='TEACHER.SRT' +OFFER DCB LRECL=18,RECFM=F,MACRF=G,EODAD=ATENDOFF, + DDNAME='OFFER.SRT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREADT DC F'0' READTCH +SVREADO DC F'0' READOFF +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +SVCHKLNS DC F'0' CHKLNS +SVMATCH DC F'0' MATCH +SVOFFLOW DC F'0' OFFERLOW +SVTCHLOW DC F'0' TEACHLOW +SVTHIS1 DC F'0' DOTHIS1 +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFTEACH DC CL1'N' End of teacher file? (Y/N) +EOFOFFER DC CL1'N' End of offerings file? (Y/N) +PGS DC PL2'0' Nbr of pages printed. +LNS DC PL2'6' Lines printed on this page. +MAXLNS DC PL2'6' Max nbr lines per page. +* My line counts exclude hdgs. +BLANKS DS 0CL62 + DC CL60' ',XL2'0D25' +HOLDTID DC CL3' ' Hold (current) teacher ID +HOLDNAME DC CL15' ' Hold (current) teacher name +**************************************************************** +* Input record definition - Teacher * +**************************************************************** +TREC DS 0CL29 1-29 Teacher record +TTID DS CL3 1- 3 Teacher ID nbr +TTNAME DS CL15 4-18 Teacher name +TTDEG DS CL4 19-22 Highest degree +TTTEN DS CL1 23-23 Tenured? +TTPHONE DS CL4 24-27 Phone nbr +TTCRLF DS CL2 28-29 PC/370 only - CR/LF +**************************************************************** +* Input record definition - Offerings * +**************************************************************** +OREC DS 0CL18 1-18 Offerings record +OSEM DS CL3 1- 3 Semester +OCID DS CL5 4- 8 Course ID +OSECT DS CL1 9- 9 Section number +OTID DS CL3 10-12 Teacher ID +OROOM DS CL4 13-16 Room number +OOCRLF DS CL2 17-18 PC/370 only - CR/LF +**************************************************************** +* Report (line) definition * +**************************************************************** +RREC DS 0CL62 1-62 Report record +RTID DS CL3 1- 3 Teacher ID nbr + DC CL2' ' 4- 5 +RTNAME DS CL15 6-20 Teacher name + DC CL3' ' 21-23 +RCID DS CL5 24-28 Course ID + DC CL6' ' 29-34 +RSECT DS CL1 35-35 Section number + DC CL5' ' 36-40 +RROOM DS CL4 41-44 Room number + DC CL16' ' 45-60 +RCRLF DS CL2 61-62 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +FORMFEED DS 0CL62 PC/370 only +* DC X'0C' EBCDIC formfeed +* DC CL59' ' + DC 60C'_' For testing... + DC X'0D25' EBCDIC CR/LF +HD1 DS 0CL62 + DC CL40' F92 Teaching Assignments ' + DC CL4'Page' +HDPGS DC CL4'BZZ9' + DC CL12' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL40'TID Name Course Section ' + DC CL20'Room' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'--- --------------- ------ ------- ' + DC CL20'----' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TEACH15A.MLC b/PC370_orig/Diskette/source/TEACH15A.MLC new file mode 100644 index 0000000..f9e18d0 --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH15A.MLC @@ -0,0 +1,139 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH15A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : List of teachers with title, such as * +* 'DR. BENSON' or 'PROF. HINCKLEY'. * +**************************************************************** +* This program illustrates table logic where a * +* character field is treated as a table whose elements * +* are each one byte in length. * +**************************************************************** +* Note: this type of problem is best done with the * +* TRT and EX instructions but those have not been * +* discussed yet. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH15A ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFTEACH,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'TEACH15A ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OPEN TEACHERS + BAL R10,READTCH + L R10,SVSETUP + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + MVC ONAME,=CL25' ' + CLC TTDEG,=CL4'PHD' Is highest degree PHD? + BNE PROFESS No, then title is 'PROF.' + MVC ONAME(3),=CL3'DR.' else title is 'DR.' + LA R3,ONAME+4 Will move name starting at + B PROC2 the fifth byte. +PROFESS EQU * + MVC ONAME(5),=CL5'PROF.' + LA R3,ONAME+6 Will move name starting at +PROC2 EQU * the seventh byte. + LA R4,TTNAME Point R4 to 1st byte of input + LA R5,L'TTNAME R5 is max nbr characters +PROC3 EQU * + CLI 0(R4),C',' Find comma separating name + BE PROC4 from initials? Yes, done. + MVC 0(1,R3),0(R4) Else move this letter. + LA R3,1(R3) Point to next letter output + LA R4,1(R4) Point to next letter input + BCT R5,PROC3 Repeat till done +PROC4 EQU * + MVC WTOINAME,TTNAME Show input name + MVC WTOIDEG,TTDEG Show input degree + WTO WTOMSG1 + MVC WTOONAME,ONAME Show output name + WTO WTOMSG2 + BAL R10,READTCH +PROCESSX EQU * + L R10,SVPROC + BR R10 +**************************************************************** +* READTCH - Read a teacher record. * +**************************************************************** +READTCH EQU * + ST R10,SVREADT + GET TEACHERS,TREC Read a single teacher record + B READTX +ATENDTCH EQU * + MVI EOFTEACH,C'Y' +READTX EQU * + L R10,SVREADT + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + CLOSE TEACHERS + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATENDTCH, + DDNAME='TEACHER.DAT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVPROC DC F'0' PROCESS +SVREADT DC F'0' READTCH +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +EOFTEACH DC CL1'N' End of teacher file? (Y/N) +ONAME DC CL25' ' Name with 'DR.' or 'PROF.' +WTOMSG1 DS 0CL41 + DC CL21'TEACH15A ... Input <' +WTOINAME DS CL15 +WTOIDEG DS CL4 + DC CL1'>' +WTOMSG2 DS 0CL47 + DC CL21'TEACH15A ... Output <' +WTOONAME DS CL25 + DC CL1'>' +**************************************************************** +* Input record definition - Teacher * +**************************************************************** +TREC DS 0CL29 1-29 Teacher record +TTID DS CL3 1- 3 Teacher ID nbr +TTNAME DS CL15 4-18 Teacher name +TTDEG DS CL4 19-22 Highest degree +TTTEN DS CL1 23-23 Tenured? +TTPHONE DS CL4 24-27 Phone nbr +TTCRLF DS CL2 28-29 PC/370 only - CR/LF + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TEACH1A.MLC b/PC370_orig/Diskette/source/TEACH1A.MLC new file mode 100644 index 0000000..aa4e126 --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH1A.MLC @@ -0,0 +1,39 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH1A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : A card-image list of teacher records. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OPEN TEACHERS +LOOP GET TEACHERS,IREC Read a single teacher record + WTO IREC Display the record + B LOOP Repeat +* +* EOJ processing +* +ATEND CLOSE TEACHERS + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* File definitions +* +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +* +* Miscellaneous field definitions +* +CRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +* +* Input record definition +* +IREC DS CL29 Teacher record + END BEGIN diff --git a/PC370_orig/Diskette/source/TEACH1B.MLC b/PC370_orig/Diskette/source/TEACH1B.MLC new file mode 100644 index 0000000..f980158 --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH1B.MLC @@ -0,0 +1,41 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH1B.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : A card-image list of teacher records. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OPEN TEACHERS +LOOP GET TEACHERS,IREC Read a single teacher record + WTO IDATA Display the record + B LOOP Repeat +* +* EOJ processing +* +ATEND CLOSE TEACHERS + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* File definitions +* +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +* +* Miscellaneous field definitions +* +CRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +* +* Input record definition +* +IREC DS 0CL29 Teacher record +IDATA DS CL27 Teacher data +ICRLF DS CL2 PC/370 only - CR/LF + END BEGIN diff --git a/PC370_orig/Diskette/source/TEACH1C.MLC b/PC370_orig/Diskette/source/TEACH1C.MLC new file mode 100644 index 0000000..2d95e8e --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH1C.MLC @@ -0,0 +1,47 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH1C.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : A card-image list of teacher records. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN REPORT +LOOP GET TEACHERS,IREC Read a single teacher record + PUT REPORT,IREC Write the record + B LOOP Repeat +* +* EOJ processing +* +ATEND CLOSE TEACHERS + CLOSE REPORT + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* File definitions +* +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +REPORT DCB LRECL=29,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +* +* Miscellaneous field definitions +* +CRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +* +* Input record definition +* +IREC DS 0CL29 Teacher record +IDATA DS CL27 Teacher data +ICRLF DS CL2 PC/370 only - CR/LF + END BEGIN diff --git a/PC370_orig/Diskette/source/TEACH1D.MLC b/PC370_orig/Diskette/source/TEACH1D.MLC new file mode 100644 index 0000000..944f1ea --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH1D.MLC @@ -0,0 +1,50 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH1D.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : A card-image list of teacher records. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH1D ... Begin execution' + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN REPORT +LOOP GET TEACHERS,IREC Read a single teacher record + PUT REPORT,IREC Write the record + B LOOP Repeat +* +* EOJ processing +* +ATEND CLOSE TEACHERS + CLOSE REPORT + WTO 'TEACH1D ... Teacher list on REPORT.TXT' + WTO 'TEACH1D ... Normal end of program' + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* File definitions +* +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +REPORT DCB LRECL=29,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +* +* Miscellaneous field definitions +* +CRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +* +* Input record definition +* +IREC DS 0CL29 Teacher record +IDATA DS CL27 Teacher data +ICRLF DS CL2 PC/370 only - CR/LF + END BEGIN diff --git a/PC370_orig/Diskette/source/TEACH2A.MLC b/PC370_orig/Diskette/source/TEACH2A.MLC new file mode 100644 index 0000000..4dfa24b --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH2A.MLC @@ -0,0 +1,75 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH2A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : A quick-and-dirty list of teachers. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH2A ... Begin execution' + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN REPORT +LOOP GET TEACHERS,IREC Read a single teacher record + MVC OTID,ITID Move teacher ID Nbr to output + MVC OTNAME,ITNAME Move teacher Name to output + MVC OTDEG,ITDEG Move highest degree to output + MVC OTTEN,ITTEN Move tenure to output + MVC OTPHONE,ITPHONE Move phone nbr to output + MVC OCRLF,WCRLF PC/370 ONLY - end line w/ CR/LF + PUT REPORT,OREC Write report line + B LOOP +* +* EOJ processing +* +ATEND CLOSE TEACHERS + CLOSE REPORT + WTO 'TEACH2A ... Teacher list on REPORT.TXT' + WTO 'TEACH2A ... Normal end of program' + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* File definitions +* +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +* +* Miscellaneous field definitions +* +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +* +* Input record definition +* +IREC DS 0CL29 Teacher record +ITID DS CL3 Teacher ID nbr +ITNAME DS CL15 Teacher name +ITDEG DS CL4 Highest degree +ITTEN DS CL1 Tenured? +ITPHONE DS CL4 Phone nbr +ITCRLF DS CL2 PC/370 only - CR/LF +* +* Output (line) definition +* +OREC DS 0CL62 +OTID DS CL3 Teacher ID nbr + DC CL3' ' +OTNAME DS CL15 Teacher name + DC CL3' ' +OTDEG DS CL4 Highest degree + DC CL3' ' +OTTEN DS CL1 Tenured? + DC CL3' ' +OTPHONE DS CL4 Phone nbr + DC CL21' ' +OCRLF DS CL2 PC/370 only - CR/LF + END BEGIN diff --git a/PC370_orig/Diskette/source/TEACH2B.MLC b/PC370_orig/Diskette/source/TEACH2B.MLC new file mode 100644 index 0000000..0c071f6 --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH2B.MLC @@ -0,0 +1,52 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH2B.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Don't do it this way!!! * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH2B ... Begin execution' + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN REPORT +LOOP GET TEACHERS,IREC + MVC OREC(3),IREC + MVC OREC+6(15),IREC+3 + MVC OREC+24(4),IREC+18 + MVC OREC+31(1),IREC+22 + MVC OREC+35(4),IREC+23 + MVC OREC+60(2),=X'0D25' + PUT REPORT,OREC Write report line + B LOOP +* +* EOJ processing +* +ATEND CLOSE TEACHERS + CLOSE REPORT + WTO 'TEACH2B ... Teacher list on REPORT.TXT' + WTO 'TEACH2B ... Normal end of program' + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* File definitions +* +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +* +* Field definitions +* +IREC DS CL29 Teacher record +OREC DC CL62' ' Report line + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TEACH2C.MLC b/PC370_orig/Diskette/source/TEACH2C.MLC new file mode 100644 index 0000000..52f20c7 --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH2C.MLC @@ -0,0 +1,98 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH2C.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : List of teachers, with headings. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH2C ... Begin execution' + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN REPORT + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 +LOOP GET TEACHERS,IREC Read a single teacher record + MVC OTID,ITID Move teacher ID Nbr to output + MVC OTNAME,ITNAME Move teacher Name to output + MVC OTDEG,ITDEG Move highest degree to output + MVC OTTEN,ITTEN Move tenure to output + MVC OTPHONE,ITPHONE Move phone nbr to output + MVC OCRLF,WCRLF PC/370 ONLY - end line w/ CR/LF + PUT REPORT,OREC Write report line + B LOOP +* +* EOJ processing +* +ATEND CLOSE TEACHERS + CLOSE REPORT + WTO 'TEACH2C ... Teacher list on REPORT.TXT' + WTO 'TEACH2C ... Normal end of program' + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* File definitions +* +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +* +* Miscellaneous field definitions +* +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +* +* Input record definition +* +IREC DS 0CL29 Teacher record +ITID DS CL3 Teacher ID nbr +ITNAME DS CL15 Teacher name +ITDEG DS CL4 Highest degree +ITTEN DS CL1 Tenured? +ITPHONE DS CL4 Phone nbr +ITCRLF DS CL2 PC/370 only - CR/LF +* +* Output (line) definition +* +OREC DS 0CL62 +OTID DS CL3 Teacher ID nbr + DC CL3' ' +OTNAME DS CL15 Teacher name + DC CL3' ' +OTDEG DS CL4 Highest degree + DC CL3' ' +OTTEN DS CL1 Tenured? + DC CL3' ' +OTPHONE DS CL4 Phone nbr + DC CL21' ' +OCRLF DS CL2 PC/370 only - CR/LF +* +* Headings definitions +* +HD1 DS 0CL62 + DC CL40' LIST OF TEACHERS ' + DC CL20' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL40'ID# Name Degr Ten Phone' + DC CL20' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'--- --------------- ---- --- -----' + DC CL20' ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TEACH3A.MLC b/PC370_orig/Diskette/source/TEACH3A.MLC new file mode 100644 index 0000000..a5f1c8e --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH3A.MLC @@ -0,0 +1,107 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH3A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce a list of tenured instructors. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH3A ... Begin execution' + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN REPORT + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 +LOOP EQU * + GET TEACHERS,IREC Read a single teacher record + CLI ITTEN,C'Y' Is teacher tenured? + BNE LOOP No, then skip this record + MVC OTID,ITID Move teacher ID Nbr to output + MVC OTNAME,ITNAME Move teacher Name to output + CLC ITDEG,=CL4'PHD' Highest degree = PhD? + BE YESPHD .. Yes, branch + MVI OPHD,C'N' .. No, Show PhD = 'N' + B OTHERS .. Branch around YES logic +YESPHD EQU * Highest degree is PhD, so... + MVI OPHD,C'Y' Show PhD = 'Y' +OTHERS EQU * Continue moving other fields... + MVC O517,=CL4'517-' All phone nbrs begin w/ '517-' + MVC OTPHONE,ITPHONE Move phone nbr to output + MVC OCRLF,WCRLF PC/370 ONLY - end line w/ CR/LF + PUT REPORT,OREC Write report line + B LOOP +* +* EOJ processing +* +ATEND CLOSE TEACHERS + CLOSE REPORT + WTO 'TEACH3A ... Teacher list on REPORT.TXT' + WTO 'TEACH3A ... Normal end of program' + RETURN +* +* Literals, if any, will go here +* + LTORG +* +* File definitions +* +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +* +* Miscellaneous field definitions +* +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +* +* Input record definition +* +IREC DS 0CL29 Teacher record +ITID DS CL3 Teacher ID nbr +ITNAME DS CL15 Teacher name +ITDEG DS CL4 Highest degree +ITTEN DS CL1 Tenured? +ITPHONE DS CL4 Phone nbr +ITCRLF DS CL2 PC/370 only - CR/LF +* +* Output (line) definition +* +OREC DS 0CL62 +OTID DS CL3 Teacher ID nbr + DC CL3' ' +OTNAME DS CL15 Teacher name + DC CL4' ' +OPHD DS CL1 PhD? (Y/N) + DC CL5' ' +OPHONE DS 0CL8 Phone nbr +O517 DS CL4 +OTPHONE DS CL4 Phone nbr + DC CL21' ' +OCRLF DS CL2 PC/370 only - CR/LF +* +* Headings definitions +* +HD1 DS 0CL62 + DC CL40' LIST OF TENURED INSTRUCTORS ' + DC CL20' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL40'ID# Name PhD? Phone ' + DC CL20' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'--- --------------- ---- -------- ' + DC CL20' ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TEACH4A.MLC b/PC370_orig/Diskette/source/TEACH4A.MLC new file mode 100644 index 0000000..778710a --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH4A.MLC @@ -0,0 +1,128 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH4A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : This is a revision of TEACH3A.MLC. * +* Produce list of tenured instructors. * +* How to structure a BAL program. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH4A ... Begin execution' + BAL 10,SETUP +MAIN EQU * + BAL 10,PROCESS + B MAIN +ATEND EQU * + BAL 10,WRAPUP + WTO 'TEACH4A ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN REPORT + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + BR 10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + GET TEACHERS,IREC Read a single teacher record + CLI ITTEN,C'Y' Is teacher tenured? + BNE PROCESSX No, then skip this record + MVC OTID,ITID Move teacher ID Nbr to output + MVC OTNAME,ITNAME Move teacher Name to output + CLC ITDEG,=CL4'PHD' Highest degree = PhD? + BE YESPHD .. Yes, branch + MVI OPHD,C'N' .. No, Show PhD = 'N' + B OTHERS .. Branch around YES logic +YESPHD EQU * Highest degree is PhD, so... + MVI OPHD,C'Y' Show PhD = 'Y' +OTHERS EQU * Continue moving other fields... + MVC O517,=CL4'517-' All phone nbrs begin w/ '517-' + MVC OTPHONE,ITPHONE Move phone nbr to output + MVC OCRLF,WCRLF PC/370 ONLY - end line w/ CR/LF + PUT REPORT,OREC Write report line +PROCESSX EQU * + BR 10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + CLOSE TEACHERS + CLOSE REPORT + WTO 'TEACH4A ... Teacher list on REPORT.TXT' + BR 10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL29 Teacher record +ITID DS CL3 Teacher ID nbr +ITNAME DS CL15 Teacher name +ITDEG DS CL4 Highest degree +ITTEN DS CL1 Tenured? +ITPHONE DS CL4 Phone nbr +ITCRLF DS CL2 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL62 +OTID DS CL3 Teacher ID nbr + DC CL3' ' +OTNAME DS CL15 Teacher name + DC CL4' ' +OPHD DS CL1 PhD? (Y/N) + DC CL5' ' +OPHONE DS 0CL8 Phone nbr +O517 DS CL4 +OTPHONE DS CL4 Phone nbr + DC CL21' ' +OCRLF DS CL2 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +HD1 DS 0CL62 + DC CL40' LIST OF TENURED INSTRUCTORS ' + DC CL20' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL40'ID# Name PhD? Phone ' + DC CL20' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'--- --------------- ---- -------- ' + DC CL20' ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TEACH4B.MLC b/PC370_orig/Diskette/source/TEACH4B.MLC new file mode 100644 index 0000000..37dd97f --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH4B.MLC @@ -0,0 +1,176 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH4B.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : This is a revision of TEACH4A.MLC. * +* Produce list of tenured instructors. * +* How to structure a BAL program. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH4B ... Begin execution' + BAL 10,SETUP +MAIN EQU * + BAL 10,PROCESS + B MAIN +ATEND EQU * + BAL 10,WRAPUP + WTO 'TEACH4B ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST 10,SVSETUP + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN REPORT + BAL 10,HDGS + L 10,SVSETUP + BR 10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST 10,SVHDGS + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + L 10,SVHDGS + BR 10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST 10,SVPROC + BAL 10,READ + CLI ITTEN,C'Y' Is teacher tenured? + BNE PROCESSX No, then skip this record + BAL 10,FORMAT Otherwise format a line + BAL 10,WRITE ...and write it +PROCESSX EQU * + L 10,SVPROC + BR 10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST 10,SVREAD + GET TEACHERS,IREC Read a single teacher record + L 10,SVREAD + BR 10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST 10,SVFORM + MVC OTID,ITID Move teacher ID Nbr to output + MVC OTNAME,ITNAME Move teacher Name to output + CLC ITDEG,=CL4'PHD' Highest degree = PhD? + BE YESPHD .. Yes, branch + MVI OPHD,C'N' .. No, Show PhD = 'N' + B OTHERS .. Branch around YES logic +YESPHD EQU * Highest degree is PhD, so... + MVI OPHD,C'Y' Show PhD = 'Y' +OTHERS EQU * Continue moving other fields... + MVC O517,=CL4'517-' All phone nbrs begin w/ '517-' + MVC OTPHONE,ITPHONE Move phone nbr to output + MVC OCRLF,WCRLF PC/370 ONLY - end line w/ CR/LF + L 10,SVFORM + BR 10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST 10,SVWRITE + PUT REPORT,OREC Write report line + L 10,SVWRITE + BR 10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST 10,SVWRAP + CLOSE TEACHERS + CLOSE REPORT + WTO 'TEACH4B ... Teacher list on REPORT.TXT' + L 10,SVWRAP + BR 10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL29 Teacher record +ITID DS CL3 Teacher ID nbr +ITNAME DS CL15 Teacher name +ITDEG DS CL4 Highest degree +ITTEN DS CL1 Tenured? +ITPHONE DS CL4 Phone nbr +ITCRLF DS CL2 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL62 +OTID DS CL3 Teacher ID nbr + DC CL3' ' +OTNAME DS CL15 Teacher name + DC CL4' ' +OPHD DS CL1 PhD? (Y/N) + DC CL5' ' +OPHONE DS 0CL8 Phone nbr +O517 DS CL4 +OTPHONE DS CL4 Phone nbr + DC CL21' ' +OCRLF DS CL2 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +HD1 DS 0CL62 + DC CL40' LIST OF TENURED INSTRUCTORS ' + DC CL20' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL40'ID# Name PhD? Phone ' + DC CL20' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'--- --------------- ---- -------- ' + DC CL20' ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TEACH4C.MLC b/PC370_orig/Diskette/source/TEACH4C.MLC new file mode 100644 index 0000000..4fbe718 --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH4C.MLC @@ -0,0 +1,184 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH4C.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : This is a revision of TEACH4B.MLC. * +* Produce list of tenured instructors. * +* How to structure a BAL program. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH4C ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'TEACH4C ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN REPORT + BAL R10,HDGS + BAL R10,READ Priming read + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + CLI ITTEN,C'Y' Is teacher tenured? + BNE PROC2 No, then skip this record + BAL R10,FORMAT Otherwise format a line + BAL R10,WRITE ...and write it +PROC2 EQU * + BAL R10,READ Read next +PROCESSX EQU * + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET TEACHERS,IREC Read a single teacher record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OTID,ITID Move teacher ID Nbr to output + MVC OTNAME,ITNAME Move teacher Name to output + CLC ITDEG,=CL4'PHD' Highest degree = PhD? + BE YESPHD .. Yes, branch + MVI OPHD,C'N' .. No, Show PhD = 'N' + B OTHERS .. Branch around YES logic +YESPHD EQU * Highest degree is PhD, so... + MVI OPHD,C'Y' Show PhD = 'Y' +OTHERS EQU * Continue moving other fields... + MVC O517,=CL4'517-' All phone nbrs begin w/ '517-' + MVC OTPHONE,ITPHONE Move phone nbr to output + MVC OCRLF,WCRLF PC/370 ONLY - end line w/ CR/LF + L R10,SVFORM + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + CLOSE TEACHERS + CLOSE REPORT + WTO 'TEACH4C ... Teacher list on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL29 Teacher record +ITID DS CL3 Teacher ID nbr +ITNAME DS CL15 Teacher name +ITDEG DS CL4 Highest degree +ITTEN DS CL1 Tenured? +ITPHONE DS CL4 Phone nbr +ITCRLF DS CL2 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL62 +OTID DS CL3 Teacher ID nbr + DC CL3' ' +OTNAME DS CL15 Teacher name + DC CL4' ' +OPHD DS CL1 PhD? (Y/N) + DC CL5' ' +OPHONE DS 0CL8 Phone nbr +O517 DS CL4 +OTPHONE DS CL4 Phone nbr + DC CL21' ' +OCRLF DS CL2 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +HD1 DS 0CL62 + DC CL40' LIST OF TENURED INSTRUCTORS ' + DC CL20' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL40'ID# Name PhD? Phone ' + DC CL20' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'--- --------------- ---- -------- ' + DC CL20' ' + DC XL2'0D25' + END BEGIN diff --git a/PC370_orig/Diskette/source/TEACH8A.MLC b/PC370_orig/Diskette/source/TEACH8A.MLC new file mode 100644 index 0000000..09022bd --- /dev/null +++ b/PC370_orig/Diskette/source/TEACH8A.MLC @@ -0,0 +1,202 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TEACH8A.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : This is a revision of TEACH2C.MLC. * +* Produce list of teachers, with headings. * +* Introduce page break logic. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TEACH8A ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSW,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'TEACH8A ... Normal end of program' + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI TEACHERS+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN TEACHERS + OPEN REPORT + BAL R10,READ + L R10,SVSETUP + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + AP PGS,=P'1' Add 1 to page count + UNPK HDPGS,PGS Move page count to headings + MVZ HDPGS+L'HDPGS-1(1),=X'F0' Remove sign + PUT REPORT,FORMFEED PC/370 ONLY + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + ZAP LNS,=P'0' Reset line count to zero + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,FORMAT + BAL R10,CHKLNS + BAL R10,WRITE + BAL R10,READ + L R10,SVPROC + BR R10 +**************************************************************** +* READ - Read a record. * +**************************************************************** +READ EQU * + ST R10,SVREAD + GET TEACHERS,IREC Read a single teacher record + B READX +ATEND EQU * + MVI EOFSW,C'Y' +READX EQU * + L R10,SVREAD + BR R10 +**************************************************************** +* FORMAT - Format a single detail line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORM + MVC OTID,ITID Move teacher ID Nbr to output + MVC OTNAME,ITNAME Move teacher Name to output + MVC OTDEG,ITDEG Move highest degree to output + MVC OTTEN,ITTEN Move tenure to output + MVC OTPHONE,ITPHONE Move phone nbr to output + MVC OCRLF,WCRLF PC/370 ONLY - end line w/ CR/LF + L R10,SVFORM + BR R10 +**************************************************************** +* CHKLNS - Check lines printed. Full page? * +**************************************************************** +CHKLNS EQU * + ST R10,SVCHKLNS + CP LNS,MAXLNS + BL CHKLNSX + BAL R10,HDGS +CHKLNSX EQU * + L R10,SVCHKLNS + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + AP LNS,=P'1' + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + CLOSE TEACHERS + CLOSE REPORT + WTO 'TEACH8A ... Teacher list on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +TEACHERS DCB LRECL=29,RECFM=F,MACRF=G,EODAD=ATEND, + DDNAME='TEACHER.DAT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREAD DC F'0' READ +SVFORM DC F'0' FORMAT +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +SVCHKLNS DC F'0' CHKLNS +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSW DC CL1'N' End of file? (Y/N) +PGS DC PL2'0' Nbr of pages printed. +LNS DC PL2'3' Lines printed on this page. +MAXLNS DC PL2'3' Max nbr lines per page. +* My line counts exclude hdgs. +**************************************************************** +* Input record definition * +**************************************************************** +IREC DS 0CL29 Teacher record +ITID DS CL3 Teacher ID nbr +ITNAME DS CL15 Teacher name +ITDEG DS CL4 Highest degree +ITTEN DS CL1 Tenured? +ITPHONE DS CL4 Phone nbr +ITCRLF DS CL2 PC/370 only - CR/LF +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL62 +OTID DS CL3 Teacher ID nbr + DC CL3' ' +OTNAME DS CL15 Teacher name + DC CL3' ' +OTDEG DS CL4 Highest degree + DC CL3' ' +OTTEN DS CL1 Tenured? + DC CL3' ' +OTPHONE DS CL4 Phone nbr + DC CL21' ' +OCRLF DS CL2 PC/370 only - CR/LF +* +* Headings definitions +* +FORMFEED DS 0CL62 PC/370 only + DC X'0C' EBCDIC formfeed + DC CL59' ' + DC X'0D25' EBCDIC CR/LF +HD1 DS 0CL62 + DC CL40' LIST OF TEACHERS Page ' +HDPGS DC CL3' ' + DC CL17' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL40'ID# Name Degr Ten Phone' + DC CL20' ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'--- --------------- ---- --- -----' + DC CL20' ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TRANSCR.BAT b/PC370_orig/Diskette/source/TRANSCR.BAT new file mode 100644 index 0000000..aa60235 --- /dev/null +++ b/PC370_orig/Diskette/source/TRANSCR.BAT @@ -0,0 +1,20 @@ +@echo off +rem TRANSCR.BAT by BQ - Produce transcripts +rem Append sort key to grade record... +transcr1 +echo Sorting the reformatted grade file... +sort /+14 < grade.$$$ > grade.srt +rem Temporary file is no longer needed... +del grade.$$$ +echo Sorting the student file... +sort /+1 < student.dat > student.srt +echo Sorting the course file... +sort /+1 < course.dat > course.srt +rem Produce transcripts... +transcr2 +echo Cleaning up... +del grade.srt +del student.srt +del course.srt +echo Done! + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TRANSCR1.MLC b/PC370_orig/Diskette/source/TRANSCR1.MLC new file mode 100644 index 0000000..5ca774d --- /dev/null +++ b/PC370_orig/Diskette/source/TRANSCR1.MLC @@ -0,0 +1,165 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TRANSCR1.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Reformat grade file so it can be sorted * +* properly so as to produce transcripts. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TRANSCR1 ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFGRADE,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'TRANSCR1 ... Normal end of program' +RETURN EQU * + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + OI GRADEIN+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI GRADEOUT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN GRADEIN + OPEN GRADEOUT + BAL R10,READGRAD Priming read - GRADEIN + L R10,SVSETUP + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,FORMAT + BAL R10,WRITE + BAL R10,READGRAD +PROCESSX EQU * + L R10,SVPROC + BR R10 +**************************************************************** +* FORMAT - Format a single record, with sort key. * +**************************************************************** +* Copy the entire record, with sort key appended. * +* Sort key consists of student ID, year portion of * +* semester, '1' for (W)inter or '2' for (F)all, and * +* the course ID. This appended sort key is used to * +* overcome limitations of DOS' SORT command, which * +* allows a single sort field only. The recoding of * +* the semester was done so Fall classes will come * +* after winter classes. For example, semester 'W92' * +* becomes '921', while semester 'F92' becomes '922'. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORMAT + MVC SORTDATA,GREC + MVC SORTSID,GSID + MVC SORTSEM(2),GSEM+1 + CLI GSEM,C'F' + BNE FORMAT2 + MVI SORTSEM+2,C'2' + B FORMAT3 +FORMAT2 EQU * + MVI SORTSEM+2,C'1' +FORMAT3 EQU * + MVC SORTCID,GCID + MVC SORTCRLF,WCRLF +FORMATX EQU * + L R10,SVFORMAT + BR R10 +**************************************************************** +* READGRAD - Read a Grade record. * +**************************************************************** +READGRAD EQU * + ST R10,SVREADG + GET GRADEIN,GREC + B READGX +ATENDGRA EQU * + MVI EOFGRADE,C'Y' +READGX EQU * + L R10,SVREADG + BR R10 +**************************************************************** +* WRITE - Write a single output record. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT GRADEOUT,SORTREC + AP #OUT,=P'1' + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + CLOSE GRADEIN + CLOSE GRADEOUT + ED MSG#OUT,#OUT + WTO MSG + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +* Note: $$$ is common DOS extension for temporary file * +**************************************************************** +GRADEIN DCB LRECL=15,RECFM=F,MACRF=G,EODAD=ATENDGRA, + DDNAME='GRADE.DAT' +GRADEOUT DCB LRECL=26,RECFM=F,MACRF=P, + DDNAME='GRADE.$$$' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVPROC DC F'0' PROCESS +SVREADG DC F'0' READCOUR +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +SVFORMAT DC F'0' FORMAT +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFGRADE DC CL1'N' End of grades file? (Y/N) +#OUT DC PL2'0' +MSG DS 0CL43 + DC CL12'TRANSCR1 ...' +MSG#OUT DC XL4'40202120' + DC CL27' grade records reformatted.' +**************************************************************** +* Input record definition - Grade * +**************************************************************** +GREC DS 0CL15 1-15 Grade record +GSID DS CL3 1- 3 Student ID nbr +GSEM DS CL3 4- 6 Semester +GCID DS CL5 7-11 Course ID nbr +GSECT DS CL1 12-12 Section number +GGRADE DS CL1 13-13 Grade earned +GGCRLF DS CL2 14-15 PC/370 only - CR/LF +**************************************************************** +* Output record definition - Grade w/ sort key * +**************************************************************** +SORTREC DS 0CL26 1-26 Sort record +SORTDATA DS CL13 1-13 Grade record (without CRLF) +SORTKEY DS 0CL11 14-24 Sort key, including: +SORTSID DS CL3 14-16 Student ID nbr +SORTSEM DS CL3 17-19 Semester (recoded) +SORTCID DS CL5 20-24 Course ID nbr +SORTCRLF DS CL2 25-26 PC/370 only - CR/LF + END BEGIN + \ No newline at end of file diff --git a/PC370_orig/Diskette/source/TRANSCR2.MLC b/PC370_orig/Diskette/source/TRANSCR2.MLC new file mode 100644 index 0000000..789665c --- /dev/null +++ b/PC370_orig/Diskette/source/TRANSCR2.MLC @@ -0,0 +1,434 @@ + PRINT NOGEN +**************************************************************** +* FILENAME: TRANSCR2.MLC * +* AUTHOR : Bill Qualls * +* SYSTEM : Compaq 286LTE, PC/370 R4.2 * +* REMARKS : Produce transcipts. * +* This program illustrates table logic. * +**************************************************************** + START 0 + REGS +BEGIN BEGIN + WTO 'TRANSCR2 ... Begin execution' + BAL R10,SETUP +MAIN EQU * + CLI EOFSTUD,C'Y' + BE EOJ + BAL R10,PROCESS + B MAIN +EOJ EQU * + BAL R10,WRAPUP + WTO 'TRANSCR2 ... Normal end of program' +RETURN EQU * + RETURN +**************************************************************** +* SETUP - Those things which happen one time only, * +* before any records are processed. * +**************************************************************** +SETUP EQU * + ST R10,SVSETUP + BAL R10,LOADTBL + OI STUDENT+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI GRADE+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OI REPORT+10,X'08' PC/370 ONLY - Convert all +* output from EBCDIC to ASCII + OPEN STUDENT + OPEN GRADE + OPEN REPORT + BAL R10,READSTUD Priming read - STUDENT + BAL R10,READGRAD Priming read - GRADE + L R10,SVSETUP + BR R10 +**************************************************************** +* LOADTBL - Load all courses into table. Verify: * +* (1) courses are in course nbr sequence, and * +* (2) there is enough room in table for all. * +**************************************************************** +LOADTBL EQU * + ST R10,SVLOAD + OI COURSE+10,X'08' PC/370 ONLY - Convert all +* input from ASCII to EBCDIC + OPEN COURSE + LA R3,TABLE Point to start of table + SR R4,R4 Initialize row count to zero +LOADTBL2 EQU * + BAL R10,READCOUR Read single course record + CLI EOFCOURS,C'Y' At end? + BE LOADTBLX Yes - Load complete. + CLC PREVCID,CCID Sequence check + BNL LOADTBL3 Fatal error... + MVC PREVCID,CCID Save course ID for seq check + CH R4,MAXROWS Table full already? + BNL LOADTBL4 Yes - Fatal error... + MVC 0(5,R3),CCID Move course ID nbr, + MVC 5(15,R3),CCDESC course description, and + PACK 20(1,R3),CCHRS course hours to row. + LA R3,L'TABLE(R3) Point to next row + LA R4,1(R4) Increment row count + B LOADTBL2 Repeat +LOADTBL3 EQU * + WTO 'TRANSCR2 ... Course file not sequenced by CID' + B RETURN +LOADTBL4 EQU * + WTO 'TRANSCR2 ... Nbr of courses exceeds table size' + B RETURN +LOADTBLX EQU * + STH R4,ROWS + CLOSE COURSE + L R10,SVLOAD + BR R10 +**************************************************************** +* HDGS - Print headings. * +**************************************************************** +HDGS EQU * + ST R10,SVHDGS + MVC HDSID,SSID Move student ID to first hdg + MVC HDSNAME,SSNAME Move student name to first hdg + PUT REPORT,FORMFEED PC/370 ONLY + PUT REPORT,HD1 + PUT REPORT,HD2 + PUT REPORT,HD3 + PUT REPORT,HD4 + L R10,SVHDGS + BR R10 +**************************************************************** +* PROCESS - Those things which happen once per record. * +**************************************************************** +PROCESS EQU * + ST R10,SVPROC + BAL R10,HDGS Start student on a new page + ZAP ATTEMPT,=P'0' Init hrs attempted to zero + ZAP QUALITY,=P'0' Init quality pts to zero +PROC2 EQU * Check for student ID found + CLI EOFGRADE,C'Y' on GRADE but not on STUDENT. + BE PROC3 This is a serious error, + CLC GSID,SSID but for this program we will + BNL PROC3 just skip all such records. + BAL R10,READGRAD + B PROC2 +PROC3 EQU * Process all grades records + CLI EOFGRADE,C'Y' for the current student. + BE PROC4 + CLC GSID,SSID + BNE PROC4 + BAL R10,FORMAT + BAL R10,READGRAD + B PROC3 +PROC4 EQU * Having processed any and all + BAL R10,DOGPA grades records for the current + BAL R10,READSTUD student, do GPA line and read +PROCESSX EQU * the next student. + L R10,SVPROC + BR R10 +**************************************************************** +* FORMAT - Format a single transcript line. * +**************************************************************** +FORMAT EQU * + ST R10,SVFORMAT + MVC OSEM,GSEM Move semester, + MVC OCID,GCID course ID nbr, and + MVC OGRADE,GGRADE grade earned to output + BAL R10,CRSDATA Find course data in table + MVC OCDESC,5(R3) Course desc comes from table + ZAP PK2,20(1,R3) + MVC OCHRS,=X'40202120' + ED OCHRS,PK2 Course hours comes from table + AP ATTEMPT,PK2 Accumulate hours attempted + BAL R10,GRADEVAL + ZAP PK4,PK2 + MP PK4,VALUE + MVC OPOINTS,=X'40202120' + ED OPOINTS,PK4+2 + AP QUALITY,PK4 + MVC OCRLF,WCRLF + BAL R10,WRITE +FORMATX EQU * + L R10,SVFORMAT + BR R10 +**************************************************************** +* CRSDATA - Find course data in table * +**************************************************************** +CRSDATA EQU * + ST R10,SVCRSDAT + LA R3,TABLE + LH R4,ROWS +CRSDATA2 EQU * + CLC GCID,0(R3) + BE CRSDATAX + LA R3,L'TABLE(R3) + BCT R4,CRSDATA2 + WTO 'TRANSCR2 ... Bad course ID in Grade file' + B RETURN +CRSDATAX EQU * + L R10,SVCRSDAT + BR R10 +**************************************************************** +* GRADEVAL - Find point value for grade * +**************************************************************** +GRADEVAL EQU * + ST R10,SVGRDVAL + LA R7,GRADETBL Point to start of table +GRADEVA2 EQU * + CLC 0(1,R7),GGRADE Compare grade to the grade + BE GRADEVAX in table. If equal, done. + LA R7,L'GRADETBL(R7) Else point to next row + CLI 0(R7),X'FF' See if at end of table. + BNE GRADEVA2 No, repeat. + WTO 'TRANSCR2 ... Invalid grade in grade file' + B RETURN Fatal error... +GRADEVAX EQU * + ZAP VALUE,1(1,R7) Save grade value + L R10,SVGRDVAL + BR R10 +**************************************************************** +* DOGPA - Calculate and format GPA * +**************************************************************** +DOGPA EQU * + ST R10,SVDOGPA + CP ATTEMPT,=P'0' + BE DOGPA2 + PUT REPORT,HD4 +DOGPA2 EQU * + MVC TATTEMPT,=X'40202120' + ED TATTEMPT,ATTEMPT + MVC TQUALITY,=X'40202120' + ED TQUALITY,QUALITY + PUT REPORT,TREC + ZAP DIVIDEND,QUALITY + SRP DIVIDEND,3,0 + ZAP DIVISOR,ATTEMPT + BZ DOGPA3 + DP DIVIDEND,DIVISOR + SRP QUOTIENT,64-1,5 + ZAP PK3,QUOTIENT + B DOGPA4 +DOGPA3 EQU * + ZAP PK3,=P'0' +DOGPA4 EQU * + MVC WK7,=X'402021204B2020' + ED WK7,PK3 + MVC AGPA,WK7+2 + PUT REPORT,AREC +DOGPAX EQU * + L R10,SVDOGPA + BR R10 +**************************************************************** +* READSTU - Read a student record. * +**************************************************************** +READSTUD EQU * + ST R10,SVREADS + GET STUDENT,SREC + B READSX +ATENDSTU EQU * + MVI EOFSTUD,C'Y' +READSX EQU * + L R10,SVREADS + BR R10 +**************************************************************** +* READCRS - Read a course record. * +**************************************************************** +READCOUR EQU * + ST R10,SVREADC + GET COURSE,CREC + B READCX +ATENDCRS EQU * + MVI EOFCOURS,C'Y' +READCX EQU * + L R10,SVREADC + BR R10 +**************************************************************** +* READGRAD - Read a Grade record. * +**************************************************************** +READGRAD EQU * + ST R10,SVREADG + GET GRADE,GREC + B READGX +ATENDGRA EQU * + MVI EOFGRADE,C'Y' +READGX EQU * + L R10,SVREADG + BR R10 +**************************************************************** +* WRITE - Write a single detail line. * +**************************************************************** +WRITE EQU * + ST R10,SVWRITE + PUT REPORT,OREC Write report line + L R10,SVWRITE + BR R10 +**************************************************************** +* WRAPUP - Those things which happen one time only, * +* after all records have been processed. * +**************************************************************** +WRAPUP EQU * + ST R10,SVWRAP + CLOSE STUDENT + CLOSE GRADE + CLOSE REPORT + WTO 'TRANSCR2 ... Transcripts on REPORT.TXT' + L R10,SVWRAP + BR R10 +**************************************************************** +* Literals, if any, will go here * +**************************************************************** + LTORG +**************************************************************** +* File definitions * +**************************************************************** +STUDENT DCB LRECL=22,RECFM=F,MACRF=G,EODAD=ATENDSTU, + DDNAME='STUDENT.SRT' +COURSE DCB LRECL=23,RECFM=F,MACRF=G,EODAD=ATENDCRS, + DDNAME='COURSE.SRT' +GRADE DCB LRECL=26,RECFM=F,MACRF=G,EODAD=ATENDGRA, + DDNAME='GRADE.SRT' +REPORT DCB LRECL=62,RECFM=F,MACRF=P, + DDNAME='REPORT.TXT' +**************************************************************** +* RETURN ADDRESSES * +**************************************************************** +SVSETUP DC F'0' SETUP +SVHDGS DC F'0' HDGS +SVPROC DC F'0' PROCESS +SVREADS DC F'0' READSTUD +SVREADC DC F'0' READGRAD +SVREADG DC F'0' READCOUR +SVLOAD DC F'0' LOADTBL +SVWRITE DC F'0' WRITE +SVWRAP DC F'0' WRAPUP +SVFORMAT DC F'0' FORMAT +SVCRSDAT DC F'0' CRSDATA +SVGRDVAL DC F'0' GRADEVAL +SVDOGPA DC F'0' DOGPA +**************************************************************** +* Miscellaneous field definitions * +**************************************************************** +WCRLF DC X'0D25' PC/370 ONLY - EBCDIC CR/LF +EOFSTUD DC CL1'N' End of students file? (Y/N) +EOFCOURS DC CL1'N' End of course file? (Y/N) +EOFGRADE DC CL1'N' End of grades file? (Y/N) +POINTS DC PL2'0' Points for this course +QUALITY DC PL2'0' Total points +ATTEMPT DC PL2'0' Hours attempted +ACCUM DC PL2'0' Accumulated points +PREVCID DC XL5'00' Sequence check on course ID +WK7 DC CL7' ' +PK2 DC PL2'0' +PK3 DC PL3'0' +PK4 DC PL4'0' + COPY DIVISION +**************************************************************** +* Table to determine value of a letter grade. * +**************************************************************** +VALUE DC PL1'0' How much this grade is worth +GRADETBL DS 0CL2 + DC CL1'A',PL1'4' + DC CL1'B',PL1'3' + DC CL1'C',PL1'2' + DC CL1'D',PL1'1' + DC CL1'F',PL1'0' + DC X'FF' +**************************************************************** +* Input record definition - Student * +**************************************************************** +SREC DS 0CL22 1-22 Student record +SSID DS CL3 1- 3 Student ID nbr +SSNAME DS CL15 4-18 Student name +SSSEX DS CL1 19-19 Gender +SSMAR DS CL1 20-20 Marital status +SSCRLF DS CL2 21-22 PC/370 only - CR/LF +**************************************************************** +* Input record definition - Course * +**************************************************************** +CREC DS 0CL23 1-23 Course record +CCID DS CL5 1- 5 Course ID nbr +CCDESC DS CL15 5-20 Course description +CCHRS DS CL1 21-21 Hours +CCCRLF DS CL2 22-23 PC/370 only - CR/LF +**************************************************************** +* Input record definition - Grade * +**************************************************************** +GREC DS 0CL26 1-26 Grade record +GSID DS CL3 1- 3 Student ID nbr +GSEM DS CL3 4- 6 Semester +GCID DS CL5 7-11 Course ID nbr +GSECT DS CL1 12-12 Section number +GGRADE DS CL1 13-13 Grade earned +GKEY DS CL11 14-24 Sort key (see TRANS1.MLC) +GGCRLF DS CL2 25-26 PC/370 only - CR/LF +**************************************************************** +* Course table * +**************************************************************** +ROWS DC H'0' Entries in course table +MAXROWS DC H'10' Max entries in course table +TABLE DS 10CL21 Each row consists of: +* 1- 5 Course ID +* 6-20 Course description +* 21-21 Hours (packed) +**************************************************************** +* Output (line) definition * +**************************************************************** +OREC DS 0CL62 1-62 Report record + DC CL2' ' 1- 2 +OSEM DS CL3 3- 5 Semester + DC CL5' ' 6-10 +OCID DS CL5 11-15 Course ID + DC CL3' ' 16-18 +OCDESC DS CL15 19-33 Course Description + DC CL4' ' 34-37 +OGRADE DS CL1 38-38 Grade + DC CL4' ' 39-42 +OCHRS DS CL4 43-46 Course Hours (BZZ9) + DC CL3' ' 47-49 +OPOINTS DS CL4 50-53 Quality Points (BZZ9) + DC CL7' ' 54-60 +OCRLF DS CL2 61-62 PC/370 only - CR/LF +**************************************************************** +* Totals line definition * +**************************************************************** +TREC DS 0CL62 1-62 + DC CL35' ' 1-35 + DC CL7'TOTAL' +TATTEMPT DS CL4 43-46 Course Hours (BZZ9) + DC CL3' ' 47-49 +TQUALITY DS CL4 50-53 Quality Points (BZZ9) + DC CL7' ' 54-60 + DC X'0D25' 61-62 PC/370 only - CR/LF +**************************************************************** +* Totals line definition * +**************************************************************** +AREC DS 0CL62 1-62 + DC CL35' ' 1-35 + DC CL6'GPA' +AGPA DS CL5 42-46 GPA (B9.99) + DC CL14' ' 54-60 + DC X'0D25' 61-62 PC/370 only - CR/LF +**************************************************************** +* Headings definitions * +**************************************************************** +FORMFEED DS 0CL62 PC/370 only +* DC X'0C' EBCDIC formfeed +* DC CL59' ' + DC 60C'_' For testing... + DC X'0D25' EBCDIC CR/LF +HD1 DS 0CL62 + DC CL24' TRANSCRIPT FOR (' +HDSID DS CL3 + DC CL2') ' +HDSNAME DS CL15 + DC CL16' ' + DC XL2'0D25' +HD2 DS 0CL62 + DC CL60' ' + DC XL2'0D25' +HD3 DS 0CL62 + DC CL40'Semester Course Description Grade' + DC CL20' Hours Points ' + DC XL2'0D25' +HD4 DS 0CL62 + DC CL40'-------- ------ --------------- -----' + DC CL20' ----- ------ ' + DC XL2'0D25' + END BEGIN + \ No newline at end of file diff --git a/README.md b/README.md index e4ca61c..cf4160a 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,8 @@ this repository includes some very useful utilities for people working with MVS, 9. a calculator for ideal blocksize given a DASD type and a logical record length, written by me in Go language. It's called blocksize.go and I also inlude a Linux 64bit binary +10. the PC370 source code for the simply amazing S370 assembler which runs in MS-DOS. + Enjoy! moshix diff --git a/blocksize b/blocksize index c4b8c59c644ec63a9dbe3579768ee02e44b6a11f..7275f7e6a57c41ac1cc72723360d7c9c51cf7b66 100755 GIT binary patch delta 341551 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т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 +" save last search & cursor position + let _s=@/ + let l = line(".") + let c = col(".") + %s/\s\+$//e + let @/=_s + call cursor(l, c) +endfunction syn case ignore syn keyword jclKwd pgm proc class dsn[ame] msgclass space disp contained syn keyword jclKwd parm member cond msglevel order lrecl recfm unit contained