home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / ASMUTL / PC370.ZIP / PRINTDOC.ALC < prev    next >
Encoding:
Text File  |  1987-05-21  |  8.8 KB  |  317 lines

  1.     TITLE 'PRINT - PC/370 PRINT UTILITY R2.0 05/18/87'
  2. *
  3. * AUTHOR.    Don Higgins.
  4. * DATE.      03/29/86. (Copied and modified from DEMOSRC.ALC)
  5. * REMARKS.   PC/370 utility program to read selected text file
  6. *            and print it with page control.
  7. *
  8. * COPYRIGHT. None.  This is a public domain program.
  9. *
  10. * MAINTENANCE.
  11. *
  12. * 05/18/87 CONVERTED TO RELEASE 2 DCB FORMAT
  13. *
  14. * INPUT
  15. *
  16. *  1.  A>PRINT drive:file
  17. *
  18. * OUTPUT
  19. *
  20. *  1.  File will be printed on the standard printer device with
  21. *      page control added via TITLE, EJECT, and SPACE statements as
  22. *      defined in standard OS/VS assembler.
  23. *
  24. PRINT    CSECT
  25.     LR    R13,R15
  26.     USING PRINT,R13
  27.     LA    R2,=C'PC/370 PRINT UTILITY R2.0 05/18/87$'
  28.     SVC   WTO
  29.     LA    R2,=C' $'
  30.     SVC   WTO
  31.     BAL   R14,GETPARM
  32.     LTR   R15,R15
  33.     BNZ   EOJ
  34.     LA    R2,SYSUT1
  35.     SVC   OPEN
  36.     LA    R1,ASCTITLE
  37.     LA    R2,L'ASCTITLE+L'ASCEJECT+L'ASCSPACE
  38.     SVC   EBCASC
  39.     LA    R2,=C'ENTER P FOR PRINTER OUTPUT OR ANY KEY FOR CONSOLE$'
  40.     SVC   WTO
  41.     SVC   READKEY
  42.     STC   R0,OPTION
  43. MAINLOOP EQU   *
  44.     BAL   R12,GETREC
  45.     LTR   R15,R15         TEST FOR END OF FILE
  46.     BNZ   EOJ
  47.     BAL   R14,SCAN
  48.     LTR   R15,R15         TEST FOR COMMAND AND SKIP PRINTING IT
  49.     BNZ   MAINLOOP
  50.     AP    LINE,=P'1'
  51.     CP    LINE,MAXLINE
  52.     BNH   NEXTLINE
  53.     BAL   R11,NEWPAGE
  54. NEXTLINE EQU   *
  55.     LA    R0,RECORD
  56.     BAL   R12,PUTREC
  57.     B     MAINLOOP
  58. EOJ      EQU   *
  59.     LA    R2,SYSUT1
  60.     SVC   CLOSE
  61.     SVC   EXIT
  62.     TITLE  'GETPARM - MOVE PARM TO DCB'
  63. GETPARM  EQU   *
  64.     LA    R1,TBUFF+2
  65.     SR    R2,R2
  66.     IC    R2,TBUFF
  67.     BCTR  R2,0
  68.     SVC   ASCEBC  CONVERT TO EBCDIC FOR OPEN
  69.     SR    R15,R15
  70.     BR    R14
  71.     TITLE 'SCAN FOR TITLE, EJECT, AND SPACE COMMANDS'
  72. SCAN     EQU   *
  73.     CLI   RECORD,ASCBLK
  74.     BE    SCANOP
  75.     CLI   RECORD,ASCTAB
  76.     BNE   SCANEXIT        EXIT IF FIRST CHAR. NOT BLANK OR TAB
  77. SCANOP   EQU   *
  78.     LA    R4,RECORD+1
  79. SKIPBLK  EQU   *
  80.     CLI   0(R4),ASCLF
  81.     BE    SCANEXIT
  82.     CLI   0(R4),ASCBLK
  83.     LA    R4,1(R4)
  84.     BE    SKIPBLK
  85.     BCTR  R4,0
  86.     CLC   0(5,R4),ASCTITLE
  87.     BE    TITLE
  88.     CLC   0(5,R4),ASCEJECT
  89.     BE    EJECT
  90.     CLC   0(5,R4),ASCSPACE
  91.     BE    SPACE
  92. SCANEXIT EQU   *
  93.     SR    R15,R15
  94.     BR    R14
  95. TITLE    EQU   *
  96.     LA    R4,5(R4)
  97. FINDQ1   EQU   *
  98.     CLI   0(R4),ASCBLK
  99.     BL    SCANEXIT     IGNORE TITLE IF FIRST QUOTE NOT FOUND
  100.     CLI   0(R4),ASCQ
  101.     LA    R4,1(R4)
  102.     BNE   FINDQ1
  103.     LA    R3,TITLEMSG
  104. FINDQ2   EQU   *
  105.     CLI   0(R4),ASCBLK
  106.     BL    SETTITLE     TRUNCATE IF SECOND QUOTE NOT FOUND
  107.     CLI   0(R4),ASCQ
  108.     BE    SETTITLE
  109.     CL    R3,=A(TITLEMSG+L'TITLEMSG)
  110.     BNL   SETTITLE     TRUNCATE IF TOO LONG
  111.     MVC   0(1,R3),0(R4)  COPY TITLE
  112.     LA    R3,1(R3)
  113.     LA    R4,1(R4)
  114.     B     FINDQ2
  115. SETTITLE EQU   *
  116.     CL    R3,=A(TITLEMSG+L'TITLEMSG)
  117.     BNL   EJECT
  118.     MVI   0(R3),ASCBLK    PAD WITH BLANKS
  119.     LA    R3,1(R3)
  120.     B     SETTITLE
  121. EJECT    EQU   *
  122.     BAL   R11,NEWPAGE
  123.     LA    R15,1
  124.     BR    R14
  125. SPACE    EQU   *
  126.     LA    R0,SPACEMSG
  127.     BAL   R12,PUTREC
  128.     LA    R0,SPACEMSG
  129.     BAL   R12,PUTREC
  130.     AP    LINE,=P'2'
  131.     LA    R15,1
  132.     BR    R14
  133.     TITLE 'NEWPAGE - PRINT HEADING'
  134. NEWPAGE  EQU   *
  135.     AP    PAGE,=P'1'
  136.     ZAP   LINE,=P'0'
  137.     MVC   DPAGE,MASK
  138.     ED    DPAGE,PAGE
  139.     MVC   PAGEMSG,PAGEWORK
  140.     LA    R1,PAGEMSG
  141.     LA    R2,L'PAGEMSG
  142.     SVC   EBCASC
  143.     LA    R0,HEADING
  144.     BAL   R12,PUTREC
  145.     MVI   HEADCC,ASCFF   FORCE FORM FEED AFTER FIRST PAGE
  146.     LA    R0,SPACEMSG
  147.     BAL   R12,PUTREC     SKIP SPACE AFTER TITLE
  148.     BR    R11
  149.     TITLE 'GETREC - GET NEXT TEXT RECORD OR SET EOF'
  150. GETREC   EQU   *
  151.     LA    R2,SYSUT1
  152.     LA    R1,RECORD
  153.     SVC   GET
  154.     SR    R15,R15
  155.     BR    R12
  156. EOFRTN   EQU   *
  157.     LA    R15,1
  158.     BR    R12
  159. SYNRTN   EQU   *
  160.     LA    R2,=C'IO ERROR$'
  161.     SVC   WTO
  162.     SVC   TRACE
  163.     DC    C'BUG '
  164.     TITLE 'PUTREC - PUT RECORD TO STD. PRINT DEVICE'
  165. PUTREC   EQU   *
  166.     LR    R4,R0
  167. PUTLOOP  EQU   *
  168.     IC    R2,0(R4)
  169.     CLI   0(R4),ASCTAB
  170.     LA    R3,1
  171.     BNE   PUTCHAR
  172.     LA    R3,9
  173.     LA    R2,ASCBLK
  174. PUTCHAR  EQU   *
  175.     SVC   CONSOLEC       PRINT ON CONSOLE
  176.     CLI   OPTION,ASCP
  177.     BE    ISUSVC
  178.     CLI   OPTION,ASCPL
  179.     BE    ISUSVC
  180.     B     PUTSKPP
  181. ISUSVC   SVC   PRINTC         PRINT ON STD. OUTPUT DEVICE ALSO
  182. PUTSKPP  EQU   *
  183.     BCT   R3,PUTCHAR
  184.     CLI   0(R4),ASCLF
  185.     LA    R4,1(R4)
  186.     BNE   PUTLOOP
  187. PUTEXIT  EQU   *
  188.     SR    R15,R15
  189.     BR    R12
  190.     TITLE 'DATA SECTION'
  191.     LTORG
  192. *
  193. * REGISTER USAGE
  194. *
  195. R0       EQU   0 SVC RETURN CODE
  196. R1       EQU   1 SVC ARGUMENT
  197. R2       EQU   2 SVC ARGUMENT (DCB ADDRESS, DMA, MSG, ETC.)
  198. R3       EQU   3 POINTER FOR MOVING TITLE
  199. R4       EQU   4 OUTPUT BYTE PTR FOR PUTREC
  200. R11      EQU   11 LINK FOR NEWPAGE
  201. R12      EQU   12 LINK FOR GETREC AND PUTREC
  202. R13      EQU   13 BASE
  203. R14      EQU   14 LINK FROM MAINLINE TO ROUTINES
  204. R15      EQU   15 RETURN CODE FROM ROUTINES
  205. *
  206. * PC/370 SVC'S
  207. *
  208. EXIT     EQU   0
  209. OPEN     EQU   1
  210. CLOSE    EQU   2
  211. GET      EQU   5
  212. PUT      EQU   6
  213. TRACE    EQU   9
  214. GMAIN    EQU   10
  215. FMAIN    EQU   11
  216. ASCEBC   EQU   12
  217. EBCASC   EQU   13
  218. READKEY  EQU   200+1  MS-DOS SVC 1 READ KEY
  219. CONSOLEC EQU   200+2  MS-DOS SVC 2 DISPLAY CHAR IN R2 ON CONSOLE
  220. PRINTC   EQU   200+5  MS-DOS SVC 5 PRINT CHAR IN R2 ON STD. PRINTER
  221. WTO      EQU   200+9  MS-DOS SVC 9 PRINT STRING WITH ENDING $ ON CON.
  222. *
  223. * DATA AREAS
  224. *
  225. TBUFF    EQU   X'80'  BUFFER FOR DIRECTORY SEARCH
  226. RECORD   DS    XL256   LOGICAL RECORD AREA
  227. ASCLF    EQU   X'0A'   ASCII LINE FEED
  228. ASCCR    EQU   X'0D'   ASCII CARRIAGE RETURN
  229. ASCASK   EQU   X'2A'   ASCII ASTERISK FOR ALC COMMENT CHECK
  230. ASCBLK   EQU   X'20'   ASCII SPACE
  231. ASCQ     EQU   X'27'   ASCII QUOTE
  232. ASCTAB   EQU   X'09'   ASCII TAB
  233. ASCFF    EQU   X'0C'   ASCII FORM FEED
  234. ASCP     EQU   X'50'   UPPERCASE ASCII P
  235. ASCPL    EQU   X'70'   LOWER CASE ASCII P
  236. OPTION   DC    X'00'
  237. ASCTITLE DC    C'TITLE'
  238. ASCEJECT DC    C'EJECT'
  239. ASCSPACE DC    C'SPACE'
  240. PAGE     DC    PL2'0'
  241. LINE     DC    PL2'50'
  242. MAXLINE  DC    PL2'50'
  243. MASK     DC    X'40202020'  EDIT MASK FOR PL2
  244. HEADING  EQU   *
  245. HEADCC   DC    AL1(ASCBLK)
  246. TITLEMSG DC    0CL65' ',65AL1(ASCBLK),2AL1(ASCBLK)
  247. PAGEMSG  DC    0CL8' ',9AL1(ASCBLK)
  248. SPACEMSG DC    AL1(ASCCR,ASCLF)     END OF HEADING
  249. WORK     DC    0CL20' '
  250. PAGEWORK DC    0CL8' ',C'PAGE'
  251. DPAGE    DC    CL4' ZZZ'
  252. ****************************************************************************
  253. *
  254. * IHADCB - I HAD A DCB DSECT FOR PC/370 RELEASE 2.0+ FILE DATA CONTROL BLOCK
  255. *
  256. * FOR MORE INFORMATION SEE SVC.DOC AND DEMO PROGRAM TESTIO.ALC.
  257. *
  258. ****************************************************************************
  259. IHADCB   DSECT
  260. DCBDCB   DS    CL4 CONSTANT EBCDIC C'ADCB' DCB IDENTIFIER
  261. DCBDSN   DS    A   ADDRESS OF UP TO 64 BYTE PATH/FILE SPEC FOLLOWED BY ZERO
  262. DCBFID   DS    H   FILE HANDLE ASSIGNED BY MS-DOS AT OPEN (X'FFFF'DEFAULT)
  263. DCBFLG   DS    X   DATA CONTROL BLOCK FLAGS (ONLY DFTRAN MAY BE SET BY USER)
  264. DFOPEN   EQU   X'80' FILE OPEN
  265. DFUBUF   EQU   X'40' USER DEFINED BLOCK AREA (NO DYNAMIC ALLOC/DEALLOC)
  266. DFOUT    EQU   X'20' OPEN FOR OUTPUT
  267. DFGEOF   EQU   X'10' END OF FILE PENDING ON SHORT BLOCK
  268. DFTRAN   EQU   X'08' TRANSLATE GET/PUT RECORDS FOR ASCII FILE
  269. DFADCB   EQU   X'01' ASSIST DCB - DO NOT TRANSLATE 370 ADDRESSES
  270. DSORG    DS    C   DATA SET ORGANIZATION (R=RANDOM, S=SEQUENTIAL)
  271. MACRF    DS    C   DATA SET ACCESS MODE (R=READ, W=WRITE, G=GET, P=PUT)
  272. RECFM    DS    C   DATA SET RECORD FORMAT (F=FIXED, V=VAR, T=TEXT)
  273. EOR      DS    X   END OF RECORD CODE (DEFAULT IS LINE FEED X'0A')
  274. EOF      DS    X   END OF FILE CODE   (DEFAULT IS CTL-Z X'1A')
  275. LRECL    DS    H   RECORD LENGTH (2<LRECL<64K-16)
  276. BLKSZ    DS    H   BLOCK  LENGTH (2<BLKSZ<64K-16)
  277. EODAD    DS    A   END OF DATA EXIT ADDRESS
  278. SYNAD    DS    A   SYCHRONOUS ERROR EXIT ADDRESS
  279. RCD      DS    A   RECORD AREA ADDRESS FOR GET/PUT
  280. BLK      DS    A   BLOCK  AREA ADDRESS (0 FOR DYNAMICALLY ALLOCATED)
  281. RBA      DS    A   RELATIVE BYTE ADDRESS FOR RANDOM READ/WRITE
  282. REN      DS    A   RENAME ASCIIZ FILE (ONLY USED BY RENAME SVC)
  283. IOCNT    DS    F   BLOCK I/O COUNT SINCE OPEN
  284. PRECL    DS    H   PHYSICAL BLOCK SIZE OF LAST READ/WRITE
  285. *
  286. * RESERVED AREA FOR USE BY PC/370 IOS SUPERVISOR WHILE FILE OPEN
  287. *
  288. DSNSG    DS    XL4 SEGMENT:OFFSET OF DCBDSN PATH/FILE NAME
  289. EODSG    DS    XL4 SEGMENT:OFFSET OF EODAD EXIT
  290. SYNSG    DS    XL4 SEGMENT:OFFSET OF SYNAD EXIT
  291. RCDSG    DS    XL4 SEGMENT:OFFSET OF RECORD AREA FOR GET/PUT
  292. RENSG    DS    XL4 SEGMENT:OFFSET OF RENAME FILE NAME
  293. BLKSG    DS    XL4 SEGMENT:OFFSET OF BLOCK AREA
  294. BLKPTR   DS    XL4 SEGMENT:OFFSET OF CURRENT RECORD IN BLOCK AREA
  295. BLKEOD   DS    XL2 OFFSET OF CURRENT END OF DATA IN BLOCK AREA
  296. BLKEND   DS    XL2 OFFSET OF END OF ALLOCATED BLOCK AREA
  297. WLRECL   DS    H   REVERSED LRECL
  298. WBLKSZ   DS    H   REVERSED BLKSZ
  299. LDCB     EQU   *-IHADCB
  300. *
  301. * END OF DSECT
  302. *
  303. PRINT    CSECT
  304. SYSUT1   DC    0F'0',C'ADCB'
  305.     DC    A(TBUFF+2)           PATH/FILE NAME IN PARM
  306.     DC    X'FFFF'
  307.     DC    X'00'
  308.     DC    C'SGT'               SEQ. GET TEXT
  309.     DC    X'0A1A'
  310.     DC    H'255'               LRECL
  311.     DC    H'8192'              BLKSZ
  312.     DC    A(EOFRTN)            EODAD
  313.     DC    A(SYNRTN)            SYNAD
  314.     DC    A(RECORD)            RECORD AREA
  315.     DC    XL(SYSUT1+LDCB-*)'00'
  316.     END   PRINT
  317.