/* REXX | | Name: COPYANSI | | Author: David Alcock | davea@ticnet.com | | Purpose: Convert a file that has ANSI control characters. Good | for running prior to downloading to PC. | | Disclaimer: This REXX exec is FREEWARE. Use at your own risk. It | is provided for your enjoyment and neither David | Alcock or his employer provides any warranty for it's | use. I'd like to hear how it works on your system. | | This software is not in the public domain but is | available free of charge and with source code provided. | It is copyright 1998-1999 by David Alcock. All rights | reserved. */ /********************************************************************** * M o d i f i c a t i o n H i s t o r y * * Person Date Description * ---------- ----------- --------------------------------------------- * DGAlcock 16-OCT-1998 v1.0 Initial exec written **********************************************************************/ vrm = '1.0' mtype = address() PARSE SOURCE s1 s2 s3 s4 s5 s6 s7 s8 s9 if mtype == "TSO" | mtype == "MVS" then , if sysvar(systsoe) > "2040" then systemid = mvsvar(syssmfid) else do cvt = storage(10,4) dcvt = c2d(cvt) smca = storage(c2x(d2c(dcvt+x2d(c5))),3) dsmca = c2d(smca) systemid = storage(c2x(d2c(dsmca+x2d(10))),4) end else systemid = "" if substr(systemid,1,3) == "CSW" then "cls" /* clear screen for Dave */ say "COPYANSI - version "vrm "- Freeware - Convert ANSI utility" /* say "Copyright 1998-1999 by David Alcock. All rights reserved." */ say " " say ". Executing in Environment: "s1 "-" mtype if systemid <> "" then say ". Executing on system: "systemid say " " /*********************************************************************** * Verify that the input dataset exists read the whole thing in ***********************************************************************/ arg sysut1_dsn if sysut1_dsn == "" then , sysut1_dsn = 'SPF8.LIST' x = LISTDSI(sysut1_dsn) if x <> 0 then do say "Error accessing DSN:" sysut1_dsn say "> "sysmsglvl1 say "> "sysmsglvl2 say "> SYSREASON: "sysreason exit end sysut1_pdsn = sysdsname parse value sysut1_dsn with . "(" member ")" . if member <> "" then do sysut1_pdsn = sysut1_pdsn"("strip(member)")" end say "Processing input file "sysut1_pdsn sysut1_dd = "SYU1"random() address TSO "ALLOCATE FILE("sysut1_dd") DA('"sysut1_pdsn"') SHR REUSE" "EXECIO * DISKR "sysut1_dd" (FINIS STEM sysut1_file." address TSO "FREE FILE("sysut1_dd")" /*********************************************************************** * Create the output dataset ***********************************************************************/ sysut2_dsn = sysvar(sysuid)".SPFTEMP1.ANSI" say "Writing to DSN="sysut2_dsn address TSO "DELETE '"sysut2_dsn"'" address TSO "ALLOCATE FILE(SYSUT2) DA('"sysut2_dsn"')", "UNIT(SYSDA) NEW REUSE SPACE(15 15) TRACKS", "LRECL(137) BLKSIZE(141) RECFM(V B)" /*********************************************************************** * Process the SYSUT1 (input) file and write stuff to the output file ***********************************************************************/ say "Processing "sysut1_file.0" lines of input" added = 0 dropped = 0 address TSO "NEWSTACK" /* Place to put SYSUT2 output */ do i = 1 to sysut1_file.0 select when substr(sysut1_file.i,1,1) == "0" then do added = added + 1 queue " " end when substr(sysut1_file.i,1,1) == "-" then do added = added + 2 queue " " queue " " end when substr(sysut1_file.i,1,1) == "+" then do dropped = dropped + 1 iterate end otherwise nop end line = substr(sysut1_file.i,2,length(sysut1_file.i)-1) if strip(line) <> "" then queue line end /********************************************************************* * That's all folks... *********************************************************************/ if added == 0 then say "No lines were added" else say added "Blank lines were added for advancing ANSI characters" if dropped == 0 then say "No lines were dropped (no + ANSI characters)" else say dropped "Lines were dropped" queue '' /* add null line to indicate End-Of-File */ address TSO "EXECIO * DISKW SYSUT2 (FINIS" address TSO "DELSTACK" address TSO "FREE FILE(SYSUT2)"