Improved 3211 and other printer support:

3203 now supported in addition to 3211.
More accurate/complete 3211/3203 emulation.
1403 carriage control tape support.
This commit is contained in:
Fish (David B. Trout)
2017-05-14 19:13:27 -07:00
parent 2bae18e2b2
commit 620d47ae55
14 changed files with 2114 additions and 1241 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Hercules", "Hercules_VS2008.vcproj", "{A0F495FF-9C35-4DFB-A51A-0427D8420779}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Hercules_VS2008", "Hercules_VS2008.vcproj", "{A0F495FF-9C35-4DFB-A51A-0427D8420779}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+29 -41
View File
@@ -2,9 +2,9 @@
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="Hercules"
Name="Hercules_VS2008"
ProjectGUID="{A0F495FF-9C35-4DFB-A51A-0427D8420779}"
RootNamespace="Hercules"
RootNamespace="Hercules_VS2008"
Keyword="MakeFileProj"
TargetFrameworkVersion="131072"
>
@@ -32,7 +32,7 @@
ReBuildCommandLine="makefile.bat DEBUG makefile.msvc 32 -a"
CleanCommandLine="makefile.bat DEBUG makefile.msvc 32 clean"
Output="$(OutDir)"
PreprocessorDefinitions="FEATURE_QDIO_THININT;FEATURE_ECPSVM;_FEATURE_INTEGRATED_3270_CONSOLE;FEATURE_SERVICE_PROCESSOR;FEATURE_EXTENDED_STORAGE_KEYS;OPTION_HTTP_SERVER;_DAT_C;FEATURE_PROGRAM_DIRECTED_REIPL;FEATURE_EMULATE_VM;ENABLE_IPV6;OPTION_CMPSC_2012;FEATURE_BINARY_FLOATING_POINT;WIN32;_DEBUG;DEBUG;_MSVC_;CPU=i386;HOST_ARCH=i386;OPTION_DYNAMIC_LOAD;HDL_BUILD_SHARED;OPTION_FTHREADS;EXTERNALGUI;FEATURE_CHANNEL_SUBSYSTEM;FEATURE_CANCEL_IO_FACILITY;FEATURE_ESAME;FEATURE_CONFIGURATION_TOPOLOGY_FACILITY;OPTION_HAO;HAVE_REGINA_REXXSAA_H;OPTION_CMDTGT;_FEATURE_SYSTEM_CONSOLE;FEATURE_CHSC;OPTION_PTTRACE;FEATURE_COMPRESSION;ENABLE_REGINA_REXX;ENABLE_OBJECT_REXX;FEATURE_QUEUED_DIRECT_IO;_FEATURE_SIE;FEATURE_S370_CHANNEL"
PreprocessorDefinitions="FEATURE_HERCULES_DIAGCALLS;FEATURE_QDIO_THININT;FEATURE_ECPSVM;_FEATURE_INTEGRATED_3270_CONSOLE;FEATURE_SERVICE_PROCESSOR;FEATURE_EXTENDED_STORAGE_KEYS;OPTION_HTTP_SERVER;_DAT_C;FEATURE_PROGRAM_DIRECTED_REIPL;FEATURE_EMULATE_VM;ENABLE_IPV6;OPTION_CMPSC_2012;FEATURE_BINARY_FLOATING_POINT;WIN32;_DEBUG;DEBUG;_MSVC_;CPU=i386;HOST_ARCH=i386;OPTION_DYNAMIC_LOAD;HDL_BUILD_SHARED;OPTION_FTHREADS;EXTERNALGUI;FEATURE_CHANNEL_SUBSYSTEM;FEATURE_CANCEL_IO_FACILITY;FEATURE_ESAME;FEATURE_CONFIGURATION_TOPOLOGY_FACILITY;OPTION_HAO;HAVE_REGINA_REXXSAA_H;OPTION_CMDTGT;_FEATURE_SYSTEM_CONSOLE;FEATURE_CHSC;OPTION_PTTRACE;FEATURE_COMPRESSION;HAVE_OBJECT_REXX;HAVE_REGINA_REXX;FEATURE_QUEUED_DIRECT_IO;_FEATURE_SIE;FEATURE_S370_CHANNEL"
IncludeSearchPath="crypto;decNumber\include;SoftFloat\include;&quot;$(ProjectDir)&quot;"
ForcedIncludes=""
AssemblySearchPath=""
@@ -53,7 +53,7 @@
ReBuildCommandLine="makefile.bat DEBUG-X64 makefile.msvc 64 -a"
CleanCommandLine="makefile.bat DEBUG-X64 makefile.msvc 64 clean"
Output="$(OutDir)"
PreprocessorDefinitions="FEATURE_QDIO_THININT;FEATURE_ECPSVM;_FEATURE_INTEGRATED_3270_CONSOLE;FEATURE_SERVICE_PROCESSOR;FEATURE_EXTENDED_STORAGE_KEYS;OPTION_HTTP_SERVER;_DAT_C;FEATURE_PROGRAM_DIRECTED_REIPL;FEATURE_EMULATE_VM;ENABLE_IPV6;OPTION_CMPSC_2012;FEATURE_BINARY_FLOATING_POINT;WIN32;_WIN64;_DEBUG;DEBUG;_MSVC_;CPU=AMD64;HOST_ARCH=AMD64;OPTION_DYNAMIC_LOAD;HDL_BUILD_SHARED;OPTION_FTHREADS;EXTERNALGUI;FEATURE_CHANNEL_SUBSYSTEM;FEATURE_CANCEL_IO_FACILITY;FEATURE_ESAME;FEATURE_CONFIGURATION_TOPOLOGY_FACILITY;OPTION_HAO;HAVE_REGINA_REXXSAA_H;OPTION_CMDTGT;_FEATURE_SYSTEM_CONSOLE;FEATURE_CHSC;OPTION_PTTRACE;FEATURE_COMPRESSION;ENABLE_REGINA_REXX;ENABLE_OBJECT_REXX;FEATURE_QUEUED_DIRECT_IO;_FEATURE_SIE;FEATURE_S370_CHANNEL"
PreprocessorDefinitions="FEATURE_HERCULES_DIAGCALLS;FEATURE_QDIO_THININT;FEATURE_ECPSVM;_FEATURE_INTEGRATED_3270_CONSOLE;FEATURE_SERVICE_PROCESSOR;FEATURE_EXTENDED_STORAGE_KEYS;OPTION_HTTP_SERVER;_DAT_C;FEATURE_PROGRAM_DIRECTED_REIPL;FEATURE_EMULATE_VM;ENABLE_IPV6;OPTION_CMPSC_2012;FEATURE_BINARY_FLOATING_POINT;WIN32;_WIN64;_DEBUG;DEBUG;_MSVC_;CPU=AMD64;HOST_ARCH=AMD64;OPTION_DYNAMIC_LOAD;HDL_BUILD_SHARED;OPTION_FTHREADS;EXTERNALGUI;FEATURE_CHANNEL_SUBSYSTEM;FEATURE_CANCEL_IO_FACILITY;FEATURE_ESAME;FEATURE_CONFIGURATION_TOPOLOGY_FACILITY;OPTION_HAO;HAVE_REGINA_REXXSAA_H;OPTION_CMDTGT;_FEATURE_SYSTEM_CONSOLE;FEATURE_CHSC;OPTION_PTTRACE;FEATURE_COMPRESSION;HAVE_OBJECT_REXX;HAVE_REGINA_REXX;FEATURE_QUEUED_DIRECT_IO;_FEATURE_SIE;FEATURE_S370_CHANNEL"
IncludeSearchPath="crypto;decNumber\include;SoftFloat\include;&quot;$(ProjectDir)&quot;"
ForcedIncludes=""
AssemblySearchPath=""
@@ -74,7 +74,7 @@
ReBuildCommandLine="makefile.bat RETAIL makefile.msvc 32 -a"
CleanCommandLine="makefile.bat RETAIL makefile.msvc 32 clean"
Output="$(OutDir)"
PreprocessorDefinitions="FEATURE_QDIO_THININT;FEATURE_ECPSVM;_FEATURE_INTEGRATED_3270_CONSOLE;FEATURE_SERVICE_PROCESSOR;FEATURE_EXTENDED_STORAGE_KEYS;OPTION_HTTP_SERVER;_DAT_C;FEATURE_PROGRAM_DIRECTED_REIPL;FEATURE_EMULATE_VM;ENABLE_IPV6;OPTION_CMPSC_2012;FEATURE_BINARY_FLOATING_POINT;WIN32;NDEBUG;_MSVC_;CPU=i386;HOST_ARCH=i386;OPTION_DYNAMIC_LOAD;HDL_BUILD_SHARED;OPTION_FTHREADS;EXTERNALGUI;FEATURE_CHANNEL_SUBSYSTEM;FEATURE_CANCEL_IO_FACILITY;FEATURE_ESAME;FEATURE_CONFIGURATION_TOPOLOGY_FACILITY;OPTION_HAO;HAVE_REGINA_REXXSAA_H;OPTION_CMDTGT;_FEATURE_SYSTEM_CONSOLE;FEATURE_CHSC;OPTION_PTTRACE;FEATURE_COMPRESSION;ENABLE_REGINA_REXX;ENABLE_OBJECT_REXX;FEATURE_QUEUED_DIRECT_IO;_FEATURE_SIE;FEATURE_S370_CHANNEL"
PreprocessorDefinitions="FEATURE_HERCULES_DIAGCALLS;FEATURE_QDIO_THININT;FEATURE_ECPSVM;_FEATURE_INTEGRATED_3270_CONSOLE;FEATURE_SERVICE_PROCESSOR;FEATURE_EXTENDED_STORAGE_KEYS;OPTION_HTTP_SERVER;_DAT_C;FEATURE_PROGRAM_DIRECTED_REIPL;FEATURE_EMULATE_VM;ENABLE_IPV6;OPTION_CMPSC_2012;FEATURE_BINARY_FLOATING_POINT;WIN32;NDEBUG;_MSVC_;CPU=i386;HOST_ARCH=i386;OPTION_DYNAMIC_LOAD;HDL_BUILD_SHARED;OPTION_FTHREADS;EXTERNALGUI;FEATURE_CHANNEL_SUBSYSTEM;FEATURE_CANCEL_IO_FACILITY;FEATURE_ESAME;FEATURE_CONFIGURATION_TOPOLOGY_FACILITY;OPTION_HAO;HAVE_REGINA_REXXSAA_H;OPTION_CMDTGT;_FEATURE_SYSTEM_CONSOLE;FEATURE_CHSC;OPTION_PTTRACE;FEATURE_COMPRESSION;HAVE_OBJECT_REXX;HAVE_REGINA_REXX;FEATURE_QUEUED_DIRECT_IO;_FEATURE_SIE;FEATURE_S370_CHANNEL"
IncludeSearchPath="crypto;decNumber\include;SoftFloat\include;&quot;$(ProjectDir)&quot;"
ForcedIncludes=""
AssemblySearchPath=""
@@ -95,7 +95,7 @@
ReBuildCommandLine="makefile.bat RETAIL-X64 makefile.msvc 64 -a"
CleanCommandLine="makefile.bat RETAIL-X64 makefile.msvc 64 clean"
Output="$(OutDir)"
PreprocessorDefinitions="FEATURE_QDIO_THININT;FEATURE_ECPSVM;_FEATURE_INTEGRATED_3270_CONSOLE;FEATURE_SERVICE_PROCESSOR;FEATURE_EXTENDED_STORAGE_KEYS;OPTION_HTTP_SERVER;_DAT_C;FEATURE_PROGRAM_DIRECTED_REIPL;FEATURE_EMULATE_VM;ENABLE_IPV6;OPTION_CMPSC_2012;FEATURE_BINARY_FLOATING_POINT;WIN32;_WIN64;NDEBUG;_MSVC_;CPU=AMD64;HOST_ARCH=AMD64;OPTION_DYNAMIC_LOAD;HDL_BUILD_SHARED;OPTION_FTHREADS;EXTERNALGUI;FEATURE_CHANNEL_SUBSYSTEM;FEATURE_CANCEL_IO_FACILITY;FEATURE_ESAME;FEATURE_CONFIGURATION_TOPOLOGY_FACILITY;OPTION_HAO;HAVE_REGINA_REXXSAA_H;OPTION_CMDTGT;_FEATURE_SYSTEM_CONSOLE;FEATURE_CHSC;OPTION_PTTRACE;FEATURE_COMPRESSION;ENABLE_REGINA_REXX;ENABLE_OBJECT_REXX;FEATURE_QUEUED_DIRECT_IO;_FEATURE_SIE;FEATURE_S370_CHANNEL"
PreprocessorDefinitions="FEATURE_HERCULES_DIAGCALLS;FEATURE_QDIO_THININT;FEATURE_ECPSVM;_FEATURE_INTEGRATED_3270_CONSOLE;FEATURE_SERVICE_PROCESSOR;FEATURE_EXTENDED_STORAGE_KEYS;OPTION_HTTP_SERVER;_DAT_C;FEATURE_PROGRAM_DIRECTED_REIPL;FEATURE_EMULATE_VM;ENABLE_IPV6;OPTION_CMPSC_2012;FEATURE_BINARY_FLOATING_POINT;WIN32;_WIN64;NDEBUG;_MSVC_;CPU=AMD64;HOST_ARCH=AMD64;OPTION_DYNAMIC_LOAD;HDL_BUILD_SHARED;OPTION_FTHREADS;EXTERNALGUI;FEATURE_CHANNEL_SUBSYSTEM;FEATURE_CANCEL_IO_FACILITY;FEATURE_ESAME;FEATURE_CONFIGURATION_TOPOLOGY_FACILITY;OPTION_HAO;HAVE_REGINA_REXXSAA_H;OPTION_CMDTGT;_FEATURE_SYSTEM_CONSOLE;FEATURE_CHSC;OPTION_PTTRACE;FEATURE_COMPRESSION;HAVE_OBJECT_REXX;HAVE_REGINA_REXX;FEATURE_QUEUED_DIRECT_IO;_FEATURE_SIE;FEATURE_S370_CHANNEL"
IncludeSearchPath="crypto;decNumber\include;SoftFloat\include;&quot;$(ProjectDir)&quot;"
ForcedIncludes=""
AssemblySearchPath=""
@@ -2702,11 +2702,11 @@
Name="VS2008"
>
<File
RelativePath=".\Hercules.sln"
RelativePath=".\Hercules_VS2008.sln"
>
</File>
<File
RelativePath=".\Hercules.vcproj"
RelativePath=".\Hercules_VS2008.vcproj"
>
</File>
</Filter>
@@ -3043,15 +3043,7 @@
Name="core"
>
<File
RelativePath=".\tests\a.core"
>
</File>
<File
RelativePath=".\tests\b.core"
>
</File>
<File
RelativePath=".\tests\bctr.core"
RelativePath=".\tests\3211.core"
>
</File>
<File
@@ -3150,34 +3142,10 @@
RelativePath=".\tests\cpu0off.core"
>
</File>
<File
RelativePath=".\tests\l.core"
>
</File>
<File
RelativePath=".\tests\la.core"
>
</File>
<File
RelativePath=".\tests\la2.core"
>
</File>
<File
RelativePath=".\tests\mvc.core"
>
</File>
<File
RelativePath=".\tests\pfpo.core"
>
</File>
<File
RelativePath=".\tests\sieve.core"
>
</File>
<File
RelativePath=".\tests\st.core"
>
</File>
<File
RelativePath=".\tests\stfl.core"
>
@@ -3921,6 +3889,14 @@
<Filter
Name="tst"
>
<File
RelativePath=".\tests\3211.rexx"
>
</File>
<File
RelativePath=".\tests\3211.tst"
>
</File>
<File
RelativePath=".\tests\agf.tst"
>
@@ -4209,6 +4185,10 @@
<Filter
Name="asm"
>
<File
RelativePath=".\tests\3211.asm"
>
</File>
<File
RelativePath=".\tests\bfp-001-divtoint.asm"
>
@@ -4332,6 +4312,14 @@
<Filter
Name="list"
>
<File
RelativePath=".\tests\3211.list"
>
</File>
<File
RelativePath=".\tests\3211.pdf"
>
</File>
<File
RelativePath=".\tests\bfp-001-divtoint.list"
>
+8 -3
View File
@@ -511,8 +511,8 @@
<None Include="dynmake.bat" />
<None Include="hercules.cnf" />
<None Include="hercules.cnf.rexx" />
<None Include="Hercules.sln" />
<None Include="Hercules.vcproj" />
<None Include="Hercules_VS2008.sln" />
<None Include="Hercules_VS2008.vcproj" />
<None Include="Hercules_VS2015.sln" />
<None Include="Hercules_VS2015.vcxproj" />
<None Include="Hercules_VS2015.vcxproj.filters" />
@@ -694,6 +694,12 @@
<None Include="SoftFloat\doc\SoftFloat-source.html" />
<None Include="SoftFloat\doc\SoftFloat.html" />
<None Include="SoftFloat\README.html" />
<None Include="tests\3211.asm" />
<None Include="tests\3211.core" />
<None Include="tests\3211.list" />
<None Include="tests\3211.pdf" />
<None Include="tests\3211.rexx" />
<None Include="tests\3211.tst" />
<None Include="tests\agf.assemble" />
<None Include="tests\agf.listing" />
<None Include="tests\agf.tst" />
@@ -1043,7 +1049,6 @@
<Text Include="license_dyn76.txt" />
<Text Include="SoftFloat\LICENSE.txt" />
<Text Include="SoftFloat\README.txt" />
<Text Include="tests\agf.txt" />
<Text Include="tests\alsi.txt" />
<Text Include="tests\axtr.txt" />
<Text Include="tests\brc.txt" />
+20 -5
View File
@@ -1277,10 +1277,10 @@
<None Include="retail-all.msbuild.jobs">
<Filter>Other Files\Build\msvc\runjobs.jobs</Filter>
</None>
<None Include="Hercules.sln">
<None Include="Hercules_VS2008.sln">
<Filter>Other Files\Build\msvc\VS2008</Filter>
</None>
<None Include="Hercules.vcproj">
<None Include="Hercules_VS2008.vcproj">
<Filter>Other Files\Build\msvc\VS2008</Filter>
</None>
<None Include="Hercules_VS2015.sln">
@@ -1505,6 +1505,9 @@
<None Include="tests\tests.conf">
<Filter>Other Files\tests</Filter>
</None>
<None Include="tests\3211.core">
<Filter>Other Files\tests\core</Filter>
</None>
<None Include="tests\bfp-001-divtoint.core">
<Filter>Other Files\tests\core</Filter>
</None>
@@ -1649,6 +1652,12 @@
<None Include="tests\sske.listing">
<Filter>Other Files\tests\scripts\assemble\listing</Filter>
</None>
<None Include="tests\3211.rexx">
<Filter>Other Files\tests\scripts\tst</Filter>
</None>
<None Include="tests\3211.tst">
<Filter>Other Files\tests\scripts\tst</Filter>
</None>
<None Include="tests\agf.tst">
<Filter>Other Files\tests\scripts\tst</Filter>
</None>
@@ -1820,6 +1829,9 @@
<None Include="tests\tapebsf.subtst">
<Filter>Other Files\tests\scripts\tst\subtst</Filter>
</None>
<None Include="tests\3211.asm">
<Filter>Other Files\tests\scripts\asm</Filter>
</None>
<None Include="tests\bfp-001-divtoint.asm">
<Filter>Other Files\tests\scripts\asm</Filter>
</None>
@@ -1895,6 +1907,12 @@
<None Include="tests\pfpo.asm">
<Filter>Other Files\tests\scripts\asm</Filter>
</None>
<None Include="tests\3211.list">
<Filter>Other Files\tests\scripts\asm\list</Filter>
</None>
<None Include="tests\3211.pdf">
<Filter>Other Files\tests\scripts\asm\list</Filter>
</None>
<None Include="tests\bfp-001-divtoint.list">
<Filter>Other Files\tests\scripts\asm\list</Filter>
</None>
@@ -2514,9 +2532,6 @@
<Text Include="util\TMOUNT.txt">
<Filter>Other Files\Utilities</Filter>
</Text>
<Text Include="tests\agf.txt">
<Filter>Other Files\tests\scripts\txt</Filter>
</Text>
<Text Include="tests\alsi.txt">
<Filter>Other Files\tests\scripts\txt</Filter>
</Text>
+5 -7
View File
@@ -795,13 +795,11 @@ EXTRA_DIST = \
hercules.cnf.rexx \
hercules.ico \
hercules.m4 \
Hercules.sln \
Hercules.vcproj \
Hercules.vcxproj \
Hercules.vcxproj.filters \
Hercules_VS2010.sln \
Hercules_VS2012.sln \
Hercules_VS2012.vcxproj \
Hercules_VS2008.sln \
Hercules_VS2008.vcproj \
Hercules_VS2015.sln \
Hercules_VS2015.vcxproj \
Hercules_VS2015.vcxproj.filters \
hercver.rc2 \
INSTALL \
license_dyn76.txt \
+1
View File
@@ -66,6 +66,7 @@ extern DEVHND comadpt_device_hndinfo;
extern DEVHND cardrdr_device_hndinfo;
extern DEVHND cardpch_device_hndinfo;
extern DEVHND printer_device_hndinfo;
extern DEVHND prt3203_device_hndinfo
extern DEVHND tapedev_device_hndinfo;
extern DEVHND qeth_device_hndinfo;
extern DEVHND zfcp_device_hndinfo;
+1
View File
@@ -131,6 +131,7 @@ HDL_DEVICE_SECTION;
/* Printers */
HDL_DEVICE(1403, printer_device_hndinfo );
HDL_DEVICE(3203, prt3203_device_hndinfo );
HDL_DEVICE(3211, printer_device_hndinfo );
/* Tape drives */
+76 -209
View File
@@ -81,8 +81,6 @@ extern int ecpsvm_command( int argc, char **argv );
int HercCmdLine ( char *cmdline );
int exec_cmd(int argc, char *argv[],char *cmdline);
static void fcb_dump( DEVBLK*, char *, unsigned int );
/*-------------------------------------------------------------------*/
/* $test command - do something or other */
/*-------------------------------------------------------------------*/
@@ -905,244 +903,113 @@ int rc = 0;
}
/*-------------------------------------------------------------------*/
/* fcb - display or load */
/* Display cctape for specified printer */
/*-------------------------------------------------------------------*/
int fcb_cmd(int argc, char *argv[], char *cmdline)
int cctape_cmd( int argc, char* argv[], char* cmdline )
{
U16 devnum;
int rc;
U16 lcss;
U16 devnum;
DEVBLK* dev;
char* devclass;
int rc;
char buffer[256];
int iarg,jarg;
int chan;
int line;
UNREFERENCED( cmdline );
char wbuf[150];
int wlpi;
int windex;
int wlpp;
int wfcb[FCBSIZE+1];
char *ptr, *nxt;
UNREFERENCED(cmdline);
/* process specified printer device */
if ( argc < 2 )
/* Our only argument is the required device number */
if (argc < 2)
{
// "Device number missing"
WRMSG( HHC02201, "E" );
return -1 ;
}
rc=parse_single_devnum(argv[1],&lcss,&devnum);
if (rc<0)
if ((rc = parse_single_devnum( argv[1], &lcss, &devnum )) < 0)
return -1; // (message already displayed)
if (!(dev = find_device_by_devnum( lcss, devnum )))
{
devnotfound_msg( lcss, devnum );
return -1;
}
if (!(dev = find_device_by_devnum (lcss,devnum)))
(dev->hnd->query)( dev, &devclass, 0, NULL );
if (strcasecmp( devclass, "PRT" ) != 0)
{
devnotfound_msg(lcss,devnum);
// "%1d:%04X device is not a %s"
WRMSG( HHC02209, "E", lcss, devnum, "printer" );
return -1;
}
(dev->hnd->query)(dev, &devclass, 0, NULL);
if (strcasecmp(devclass,"PRT"))
if (0x1403 != dev->devtype)
{
WRMSG(HHC02209, "E", lcss, devnum, "printer" );
// "command '%s' invalid for device type %04X"
WRMSG( HHC02239, "E", "cctape", dev->devtype );
return -1;
}
if (dev->devtype != 0x3211)
{
// HHC01109 "%1d:%04X Printer: option %s incompatible with device type %04X"
WRMSG (HHC01109, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, "command 'fcb'", dev->devtype);
return -1;
}
FormatCCTAPE( buffer, sizeof( buffer ),
dev->lpi, dev->lpp, dev->cctape );
if ( argc == 2 )
{
fcb_dump(dev, wbuf, sizeof(wbuf));
WRMSG(HHC02210, "I", lcss, devnum, wbuf );
return 0;
}
if ( !dev->stopdev )
{
WRMSG(HHC02211, "E", lcss, devnum );
return -1;
}
wlpi = dev->lpi;
windex = dev->index;
wlpp = dev->lpp;
for (line = 0; line <= FCBSIZE; line++)
wfcb[line] = dev->fcb[line];
for (iarg = 2; iarg < argc; iarg++)
{
if (strncasecmp("lpi=", argv[iarg], 4) == 0)
{
ptr = argv[iarg]+4;
errno = 0;
wlpi = (int) strtoul(ptr,&nxt,10) ;
if (errno != 0 || nxt == ptr || *nxt != 0 || ( wlpi != 6 && wlpi != 8 && wlpi != 10) )
{
jarg = ptr - argv[iarg] ;
WRMSG (HHC01103, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, iarg + 1, argv[iarg], jarg);
return -1;
}
continue;
}
if (strncasecmp("index=", argv[iarg], 6) == 0)
{
if (0x3211 != dev->devtype )
{
WRMSG (HHC01103, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, iarg + 1, argv[iarg], 1);
return -1;
}
ptr = argv[iarg]+6;
errno = 0;
windex = (int) strtoul(ptr,&nxt,10) ;
if (errno != 0 || nxt == ptr || *nxt != 0 || ( windex < 0 || windex > 15) )
{
jarg = ptr - argv[iarg] ;
WRMSG (HHC01103, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, iarg + 1, argv[iarg], jarg);
return -1;
}
continue;
}
if (strncasecmp("lpp=", argv[iarg], 4) == 0)
{
ptr = argv[iarg]+4;
errno = 0;
wlpp = (int) strtoul(ptr,&nxt,10) ;
if (errno != 0 || nxt == ptr || *nxt != 0 ||wlpp > FCBSIZE)
{
jarg = ptr - argv[iarg] ;
WRMSG (HHC01103, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, iarg + 1, argv[iarg], jarg);
return -1;
}
continue;
}
if (strncasecmp("fcb=", argv[iarg], 4) == 0)
{
for (line = 0 ; line <= FCBSIZE; line++) wfcb[line] = 0;
/* check for simple mode */
if ( strstr(argv[iarg],":") )
{
/* ':" found ==> new mode */
ptr = argv[iarg]+4;
while (*ptr)
{
errno = 0;
line = (int) strtoul(ptr,&nxt,10) ;
if (errno != 0 || *nxt != ':' || nxt == ptr || line > wlpp || wfcb[line] != 0 )
{
jarg = ptr - argv[iarg] ;
WRMSG (HHC01103, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, iarg + 1, argv[iarg], jarg);
return -1;
}
ptr = nxt + 1 ;
errno = 0;
chan = (int) strtoul(ptr,&nxt,10) ;
if (errno != 0 || (*nxt != ',' && *nxt != 0) || nxt == ptr || chan < 1 || chan > 12 )
{
jarg = ptr - argv[iarg] ;
WRMSG (HHC01103, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, iarg + 1, argv[iarg], jarg);
return -1;
}
wfcb[line] = chan;
if ( *nxt == 0 )
break ;
ptr = nxt + 1;
}
}
else
{
/* ':" NOT found ==> old mode */
ptr = argv[iarg]+4;
chan = 0;
while (*ptr)
{
errno = 0;
line = (int) strtoul(ptr,&nxt,10) ;
if (errno != 0 || (*nxt != ',' && *nxt != 0) || nxt == ptr || line > wlpp || wfcb[line] != 0 )
{
jarg = ptr - argv[iarg] ;
WRMSG (HHC01103, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, iarg + 1, argv[iarg], jarg);
return -1;
}
chan += 1;
if ( chan > 12 )
{
jarg = ptr - argv[iarg] ;
WRMSG (HHC01103, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, iarg + 1, argv[iarg], jarg);
return -1;
}
wfcb[line] = chan;
if ( *nxt == 0 )
break ;
ptr = nxt + 1;
}
if ( chan != 12 )
{
jarg = 5 ;
WRMSG (HHC01103, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, iarg + 1, argv[iarg], jarg);
return -1;
}
}
continue;
}
WRMSG (HHC01102, "E", SSID_TO_LCSS(dev->ssid), dev->devnum, iarg + 1, argv[iarg]);
return -1;
}
/* It's all ok, copy it to the dev block */
dev->lpi = wlpi;
dev->index = windex ;
dev->lpp = wlpp;
for (line = 0; line <= FCBSIZE; line++)
dev->fcb[line] = wfcb[line];
fcb_dump(dev, wbuf, sizeof(wbuf));
WRMSG(HHC02210, "I", lcss, devnum, wbuf );
// "%1d:%04X %s"
WRMSG( HHC02210, "I", lcss, devnum, buffer );
return 0;
}
static void fcb_dump(DEVBLK* dev, char *buf, unsigned int buflen)
/*-------------------------------------------------------------------*/
/* Display fcb for specified printer */
/*-------------------------------------------------------------------*/
int fcb_cmd( int argc, char* argv[], char* cmdline )
{
int i;
char wrk[16];
char sep[1];
sep[0] = '=';
snprintf( buf, buflen-1, "lpi=%d index=%d lpp=%d fcb", dev->lpi, dev->index, dev->lpp );
for (i = 1; i <= dev->lpp; i++)
int rc;
U16 lcss;
U16 devnum;
DEVBLK* dev;
char* devclass;
char buffer[256];
UNREFERENCED( cmdline );
/* Our only argument is the required device number */
if (argc < 2)
{
if (dev->fcb[i] != 0)
{
MSGBUF( wrk, "%c%d:%d",sep[0], i, dev->fcb[i]);
sep[0] = ',' ;
if (strlen(buf) + strlen(wrk) >= buflen - 4)
{
/* Too long, truncate it */
strlcat(buf, ",...", buflen);
return;
}
strlcat(buf, wrk, buflen);
}
// "Device number missing"
WRMSG( HHC02201, "E" );
return -1 ;
}
return;
if ((rc = parse_single_devnum( argv[1], &lcss, &devnum )) < 0)
return -1; // (message already displayed)
if (!(dev = find_device_by_devnum( lcss, devnum )))
{
devnotfound_msg( lcss, devnum );
return -1;
}
(dev->hnd->query)( dev, &devclass, 0, NULL );
if (strcasecmp( devclass, "PRT" ) != 0)
{
// "%1d:%04X device is not a %s"
WRMSG( HHC02209, "E", lcss, devnum, "printer" );
return -1;
}
if (0x1403 == dev->devtype)
{
// "command '%s' invalid for device type %04X"
WRMSG( HHC02239, "E", "fcb", dev->devtype );
return -1;
}
FormatFCB( buffer, sizeof( buffer ),
dev->index, dev->lpi, dev->lpp, dev->fcb );
// "%1d:%04X %s"
WRMSG( HHC02210, "I", lcss, devnum, buffer );
return 0;
}
/*-------------------------------------------------------------------*/
+110
View File
@@ -1468,6 +1468,116 @@ DLL_EXPORT BYTE reverse_bits( BYTE b )
);
}
/*-------------------------------------------------------------------*/
/* Format printer cctape information */
/*-------------------------------------------------------------------*/
DLL_EXPORT void FormatCCTAPE( char* buf, size_t buflen,
int lpi, int lpp,
U16* cctape )
{
size_t len, curlen = 0, newlen;
int line, chnum, chans;
U16 mask;
char onechan[8], allchans[48], chanlist[64];
/* Get started */
snprintf( buf, buflen, "lpi=%d lpp=%d cctape=(", lpi, lpp );
curlen = strlen( buf );
/* Format: "cctape=(lll=cc,lll=(cc,cc),...)" */
for (line=1; line <= lpp; line++)
{
/* Skip lines with no channels defined */
if (!cctape[line])
continue;
/* Format channel stop(s) for this line */
for (chans=0, allchans[0]=0, chnum=1, mask=0x8000;
chnum <= 12; mask >>= 1, chnum++)
{
if (cctape[ line ] & mask)
{
MSGBUF( onechan, "%d", chnum );
if (chans++)
strlcat( allchans, ",", _countof( allchans ));
strlcat( allchans, onechan, _countof( allchans ));
}
}
/* Surround this line's channels with parens if needed */
MSGBUF( chanlist, "%d=%s%s%s,",
line,
chans > 1 ? "(" : "",
allchans,
chans > 1 ? ")" : "" );
len = strlen( chanlist );
/* Truncate and return if out of buffer space */
if ((newlen = curlen + len) >= (buflen - 5))
{
strlcat( buf, ", ...", buflen );
return;
}
/* Append formatted channel stop(s) to output */
strlcat( buf, chanlist, buflen );
curlen = newlen;
}
/* No channel stops at all? */
if (buf[ curlen-1 ] == '(')
buf[ curlen-1 ] = '0';
else
/* Change ending comma to closing paren instead */
buf[ curlen-1 ] = ')';
}
/*-------------------------------------------------------------------*/
/* Format printer FCB information */
/*-------------------------------------------------------------------*/
DLL_EXPORT void FormatFCB( char* buf, size_t buflen,
int index, int lpi, int lpp,
int* fcb )
{
int line;
size_t curlen, newlen;
char sep, chan[16];
/* Get started */
snprintf( buf, buflen, "index=%d lpi=%d lpp=%d fcb",
index, lpi, lpp );
curlen = strlen( buf );
sep = '=';
/* Format the "fcb=" values... */
for (line=1; line <= lpp; line++)
{
/* Skip lines with no channel stop defined */
if (!fcb[line])
continue;
/* Format channel stop */
MSGBUF( chan, "%c%d:%d", sep, fcb[line], line );
sep = ',';
/* Truncate and return if out of buffer space */
if ((newlen = curlen + strlen( chan )) >= (buflen - 5))
{
strlcat( buf, ", ...", buflen );
return;
}
/* Append formatted channel stop to output */
strlcat( buf, chan, buflen );
curlen = newlen;
}
/* No channel stops at all? */
if (sep == '=')
strlcat( buf, "=0", buflen );
}
/*-------------------------------------------------------------------*/
/* Count number of tokens in a string */
/*-------------------------------------------------------------------*/
+11
View File
@@ -298,6 +298,17 @@ HUT_DLL_IMPORT int initialize_utility( int argc, char* argv[],
/*-------------------------------------------------------------------*/
HUT_DLL_IMPORT BYTE reverse_bits( BYTE b );
/*-------------------------------------------------------------------*/
/* Format printer FCB/CCTAPE information */
/*-------------------------------------------------------------------*/
HUT_DLL_IMPORT void FormatFCB ( char* buf, size_t buflen,
int index, int lpi, int lpp,
int* fcb );
HUT_DLL_IMPORT void FormatCCTAPE ( char* buf, size_t buflen,
int lpi, int lpp,
U16* cctape);
/*-------------------------------------------------------------------*/
/* Count number of tokens in a string */
/*-------------------------------------------------------------------*/
+15 -8
View File
@@ -1316,8 +1316,6 @@ struct DEVBLK { /* Device configuration block*/
u_int crlf:1; /* 1=CRLF delimiters, 0=LF */
u_int ispiped:1; /* 1=Piped device */
u_int stopdev:1; /* T=stopped; F=started */
u_int rawcc:1; /* Debugging: 1=write hex cc
else process cc normally */
u_int fcbcheck:1; /* 1=signal FCB errors, else
ignore FCB errors. */
u_int diaggate:1; /* 1=Diagnostic gate command */
@@ -1329,14 +1327,23 @@ struct DEVBLK { /* Device configuration block*/
int lpi; /* lines per inch 6/8 */
int index; /* 3211 indexing */
int lpp; /* lines per page */
#define FCBSIZE 180 /* Forms Control Buffer size */
int fcb[FCBSIZE+1]; /* FCB image */
U16 cctape[FCBSIZE]; /* Carriage Control Tape */
int fcbisdef; /* FCB is default */
#define FCBSIZE_3211 180 /* FCB image size for 3211 */
#define FCBSIZE_OTHER 256 /* FCB image size for 3203 */
#define MAX_FCBSIZE 256
int fcb [ MAX_FCBSIZE ]; /* FCB image itself */
char* fcbname; /* FCB image or cctape name */
U16 cctape [ MAX_FCBSIZE ]; /* Carriage Control Tape */
int chan9line; /* Line number of channel 9 */
int chan12line; /* Line number of channel 12 */
int prevline; /* previous line number */
int currline; /* curr line number */
int destline; /* destination line number */
#define UCBSIZE_OTHER 304 /* UCS Buffer size 1403/3203 */
#define UCBSIZE_3211 432 /* UCS Buffer size 3211 */
#define MAX_UCBSIZE 432
BYTE ucb [ MAX_UCBSIZE ]; /* UCS Buffer itself */
#define PLBSIZE_OTHER 132 /* Print Line Buffer size */
#define PLBSIZE_3211 132 /* Print Line Buffer size */
#define MAX_PLBSIZE 150 /* Print Line Buffer size */
BYTE plb [ MAX_PLBSIZE ]; /* Print Line Buffer itself */
/* Device dependent fields for tapedev */
+10 -3
View File
@@ -906,11 +906,18 @@ LOGM_DLL_IMPORT int panel_command_capture( char* cmd, char** resp );
#define HHC01102 "%1d:%04X Printer: argument %d parameter '%s' is invalid"
#define HHC01103 "%1d:%04X Printer: argument %d parameter '%s' position %d is invalid"
#define HHC01104 "%1d:%04X Printer: option %s is incompatible"
#define HHC01105 "%1d:%04X Printer: error in function %s: %s"
#define HHC01105 "%1d:%04X Printer: unsupported device type %04X"
#define HHC01106 "%1d:%04X Printer: pipe receiver with pid %d starting"
#define HHC01107 "%1d:%04X Printer: pipe receiver with pid %d terminating"
#define HHC01108 "%1d:%04X Printer: unable to execute file %s: %s"
#define HHC01109 "%1d:%04X Printer: %s incompatible with device type %04X"
#define HHC01110 "%1d:%04X Printer: Indexing accepted but ignored for 3203-5"
#define HHC01111 "%1d:%04X Printer: channel 1 is undefined"
#define HHC01112 "%1d:%04X Printer: invalid fcb: maximum channel codes exceeded"
#define HHC01113 "%1d:%04X Printer: incompatible '%s' and 'lpp' values detected"
//efine HHC01114 - HHC01159 (available)
// range 01150 - 01199 available
// reserve 012xx for card devices
//efine HHC01200 (available)
@@ -928,7 +935,7 @@ LOGM_DLL_IMPORT int panel_command_capture( char* cmd, char** resp );
// reserve 01250 - 01299 for Generic device messages
#define HHC01250 "%1d:%04X %s: error in function %s: %s"
#define HHC01251 "%1d:%04X %s: option '%s' has been deprecated"
//efine HHC01252 - HHC01259 (available)
//efine HHC01252 - HHC01251 (available)
// reserve 013xx for channel related messages
/* channel.c */
@@ -1339,7 +1346,7 @@ LOGM_DLL_IMPORT int panel_command_capture( char* cmd, char** resp );
#define HHC02236 "IPL rejected: All CPU's must be stopped"
#define HHC02237 "Not all devices shown (max %d)"
#define HHC02238 "Device numbers can only be redefined within the same Logical Channel SubSystem"
//efine HHC02239 (available)
#define HHC02239 "command '%s' invalid for device type %04X"
//efine HHC02240 (available)
#define HHC02241 "Max device threads: %d, current: %d, most: %d, waiting: %d, max exceeded: %d"
#define HHC02242 "Max device threads: %d, current: %d, most: %d, waiting: %d, total I/Os queued: %d"
+1821 -964
View File
File diff suppressed because it is too large Load Diff
+6
View File
@@ -1,4 +1,10 @@
dist_pkgdata_DATA = \
3211.asm \
3211.core \
3211.list \
3211.pdf \
3211.rexx \
3211.tst \
a.core \
b.core \
bctr.core \