$! ................... Cut between dotted lines and save. ................... $!........................................................................... $! VAX/VMS archive file created by VMS_SHARE V06.10 7-FEB-1989. $! $! VMS_SHARE was written by James Gray (Gray:OSBUSouth@Xerox.COM) from $! VMS_SHAR by Michael Bednarek (U3369429@ucsvc.dn.mu.oz.au). $! $! To unpack, simply save, concatinate all parts into one file and $! execute (@) that file. $! $! This archive was created by user MOELLER $! on 4-NOV-1993 14:56:34.44. $! $! It contains the following 7 files: $! DEFGBLINI.MAR $! GENDEF.COM $! ITRMLEN.C $! PRVDEF.H $! PSMDEF.H $! REMPRTSMB.C $! SMBDEF.H $! $!============================================================================ $ SET SYMBOL/SCOPE=( NOLOCAL, NOGLOBAL ) $ VERSION = F$GETSYI( "VERSION" ) $ if f$getsyi("cpu").gt.127 then goto version_ok $ IF VERSION .GES "V4.4" THEN GOTO VERSION_OK $ WRITE SYS$OUTPUT "You are running VMS ''VERSION'; ", - "VMS_SHARE V06.10 7-FEB-1989 requires VMS V4.4 or higher." $ EXIT 44 ! SS$_ABORT $VERSION_OK: $ GOTO START $! $UNPACK_FILE: $ WRITE SYS$OUTPUT "Creating ''FILE_IS'" $ DEFINE/USER_MODE SYS$OUTPUT NL: $ EDIT/TPU/COMMAND=SYS$INPUT/NODISPLAY/OUTPUT='FILE_IS'/NOSECTION - VMS_SHARE_DUMMY.DUMMY b_part := CREATE_BUFFER( "{Part}", GET_INFO( COMMAND_LINE, "file_name" ) ) ; s_file_spec := GET_INFO( COMMAND_LINE, "output_file" ); SET( OUTPUT_FILE , b_part, s_file_spec ); b_errors := CREATE_BUFFER( "{Errors}" ); i_errors := 0; pat_beg_1 := ANCHOR & "-+-+-+ Beginning"; pat_beg_2 := LINE_BEGIN & "+-+-+-+ Beginning"; pat_end := ANCHOR & "+-+-+-+-+ End"; POSITION ( BEGINNING_OF( b_part ) ); LOOP EXITIF SEARCH( SPAN( ' ' )@r_trail & LINE_END, FORWARD) = 0; POSITION( r_trail ); ERASE( r_trail ); ENDLOOP ; POSITION( BEGINNING_OF( b_part ) ); i_append_line := 0; LOOP EXITIF MARK ( NONE ) = END_OF( b_part ); s_x := ERASE_CHARACTER( 1 ) ; IF s_x = '+' THEN r_skip := SEARCH( pat_beg_1, FORWARD, EXACT ); IF r_skip <> 0 THEN s_x := ''; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ERASE_LINE; ENDIF ; ENDIF; IF s_x = '-' THEN r_skip := SEARCH( pat_end, FORWARD, EXACT ) ; IF r_skip <> 0 THEN s_x := ''; MOVE_HORIZONTAL( -CURRENT_OFFSET ); m_skip := MARK( NONE ); r_skip := SEARCH( pat_beg_2, FORWARD, EXACT ); IF r_skip <> 0 THEN POSITION( END_OF( r_skip ) ); MOVE_HORIZONTAL( -CURRENT_OFFSET ) ; MOVE_VERTICAL( 1 ); MOVE_HORIZONTAL( -1 ); ELSE POSITION( END_OF( b_part ) ); ENDIF; ERASE( CREATE_RANGE( m_skip, MARK( NONE ), NONE ) ); ENDIF; ENDIF ; IF s_x = 'V' THEN s_x := ''; IF i_append_line <> 0 THEN APPEND_LINE ; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ENDIF; i_append_line := 1 ; MOVE_VERTICAL( 1 ); ENDIF; IF s_x = 'X' THEN s_x := ''; IF i_append_line <> 0 THEN APPEND_LINE; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ENDIF ; i_append_line := 0; MOVE_VERTICAL( 1 ); ENDIF; IF s_x <> '' THEN i_errors := i_errors + 1; s_text := CURRENT_LINE; POSITION( b_errors ); COPY_TEXT ( "The following line could not be unpacked properly:" ); SPLIT_LINE ; COPY_TEXT( s_x ); COPY_TEXT( s_text ); POSITION( b_part ); MOVE_VERTICAL ( 1 ); ENDIF; ENDLOOP; POSITION( BEGINNING_OF( b_part ) ); LOOP r_x := SEARCH ( "`", FORWARD, EXACT ); EXITIF r_x = 0; POSITION( r_x ); ERASE_CHARACTER( 1 ); COPY_TEXT( ASCII( INT( ERASE_CHARACTER( 3 ) ) ) ); ENDLOOP ; IF i_errors = 0 THEN SET( NO_WRITE, b_errors, ON ); ELSE POSITION ( BEGINNING_OF( b_errors ) ); COPY_TEXT( FAO ( "The following !UL errors were detected while unpacking !AS", i_errors , s_file_spec ) ); SPLIT_LINE; SET( OUTPUT_FILE, b_errors, "SYS$COMMAND" ) ; ENDIF; EXIT; $ DELETE VMS_SHARE_DUMMY.DUMMY;* $ CHECKSUM 'FILE_IS $ WRITE SYS$OUTPUT " CHECKSUM ", - F$ELEMENT( CHECKSUM_IS .EQ. CHECKSUM$CHECKSUM, ",", "failed!!,passed." ) $ RETURN $! $START: $ FILE_IS = "DEFGBLINI.MAR" $ CHECKSUM_IS = 1528406295 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X; $GBLINI macro modified for generating "definition files": X;`009calls to JL_EMIT added X; [after STARLET.MLB, $GBLINI unchanged for VMS V3.5 through VMS V5.4] X; X; original idea: w.j.m. may 85 (VMS V3.5) X; change nov 85 wjm: generate fortran output directly via .PRINT X; mod 07-apr-1987 wjm: use separate JL_EMIT macro (after Jerry Leichter) X; chg 26-nov-1990 wjm: make generic by splitting off JL_EMIT X; X`009.MACRO`009$GBLINI`009GBL=LOCAL X`009.IF`009IDN X`009.MACRO`009$DEF`009SYM,ALLOC,SIZ X`009.IIF`009NB,SYM,`009SYM:: X`009.IIF`009NB,SYM,`009jl_emit`009SYM,\SYM X`009.IIF`009NB,ALLOC,`009ALLOC`009SIZ X`009.ENDM`009$DEF X`009.MACRO`009$EQU`009SYM,VAL X`009SYM==VAL X`009jl_emit`009SYM,\SYM X`009.ENDM`009$EQU X`009.MACRO`009$VIELD1`009MOD,SEP,SYM,SIZ,MSK X`009SIZ...=1 X`009.IIF`009NB,SIZ,`009SIZ...=SIZ X`009.IF`009NB,SYM X`009MOD'SEP'V_'SYM==BIT... X`009jl_emit`009MOD'SEP'V_'SYM,\MOD'SEP'V_'SYM X`009.IIF`009NB,SIZ,`009MOD'SEP'S_'SYM==SIZ X`009.IIF`009NB,SIZ,`009jl_emit`009MOD'SEP'S_'SYM,\MOD'SEP'S_'SYM X`009.IIF`009NB,MSK,`009MOD'SEP'M_'SYM==<<<1@SIZ...>-1>@BIT...> X`009.IIF`009NB,MSK,`009jl_emit`009MOD'SEP'M_'SYM,\MOD'SEP'M_'SYM X`009.ENDC X`009BIT...=BIT...+SIZ... X`009.ENDM`009$VIELD1 X`009.IFF X`009.IIF`009DIF ,.ERROR ;ARG MUST BE "GLOBAL","LOCAL",OR NULL X`009.MACRO`009$DEF`009SYM,ALLOC,SIZ X`009.IIF`009NB,SYM,`009SYM: X`009.IIF`009NB,SYM,`009jl_emit`009SYM,\SYM X`009.IIF`009NB,ALLOC,`009ALLOC`009SIZ X`009.ENDM`009$DEF X`009.MACRO`009$EQU`009SYM,VAL X`009SYM=VAL X`009jl_emit`009SYM,\SYM X`009.ENDM`009$EQU X`009.MACRO`009$VIELD1`009MOD,SEP,SYM,SIZ,MSK X`009SIZ...=1 X`009.IIF`009NB,SIZ,`009SIZ...=SIZ X`009.IF`009NB,SYM X`009MOD'SEP'V_'SYM=BIT... X`009jl_emit`009MOD'SEP'V_'SYM,\MOD'SEP'V_'SYM X`009.IIF`009NB,SIZ,`009MOD'SEP'S_'SYM=SIZ X`009.IIF`009NB,SIZ,`009jl_emit`009MOD'SEP'S_'SYM,\MOD'SEP'S_'SYM X`009.IIF`009NB,MSK,`009MOD'SEP'M_'SYM=<<<1@SIZ...>-1>@BIT...> X`009.IIF`009NB,MSK,`009jl_emit`009MOD'SEP'M_'SYM,\MOD'SEP'M_'SYM X`009.ENDC X`009BIT...=BIT...+SIZ... X`009.ENDM`009$VIELD1 X`009.ENDC X`009.ENDM`009$GBLINI $ GOSUB UNPACK_FILE $ FILE_IS = "GENDEF.COM" $ CHECKSUM_IS = 1159686315 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X$! generate C/FORTRAN/DCL "include" file from MACRO definitions X$! X$ ver_p = 'f$verify(0,f$environment("verify_image"))' X$! X$! wjm may 1985 (FORTRAN output only) X$! chg 15-nov-1985 wjm: use SYS$OUTPUT from MACRO directly, new FORGBLINI.MAR X$! mod 22-nov-1985 wjm: FORGBLINI in same directory as this file X$! fix 11-oct-1989 wjm: clear STS$M_INHIB_MSG, so $exit gives error msg V$! chg 26-nov-1990 wjm: adapt to VMS 5.4; re-organize into 1 command procedur Xe X$!`009`009`009`009(after ideas by J.Leichter & E.Gavron) X$! mod 15-oct-1993 wjm: try to adapt to AXP VMS X$! mod 27-oct-1993 wjm: add SET SYMBOL/SCOPE, delete output file on error X$! X$! input:`009module $'p1' in SYS$LIBRARY:STARLET.MLB or LIB.MLB X$! output:`009depending upon p2: X$!`009`009`009"C" (default)`009=> []'p1'.H X$!`009`009`009"FORTRAN"`009=> []'p1'.FD X$!`009`009`009"DCL"`009`009=> []'p1'.COM X$! files required: DEFGBLINI.MAR X$! X$!***** X$! X$ set := SET X$ set symbol/scope=(nolocal,noglobal) X$ if "''GENDEF\DEBUG'" then set verify=procedure X$! X$ set noon X$! X$ p2 = f$edit(p2,"upcase,collapse,uncomment") X$ lang = "C" X$ ftype = ".H" X$ if p2.eqs."" .or. p2.eqs."C" then goto p2ok X$ lang = "FORTRAN" X$ ftype = ".FD" X$ if f$locate(p2,"FORTRAN").eq.0 then goto p2ok X$ lang = "DCL" X$ ftype = ".COM" X$ if f$locate(p2,"DCL").eq.0 then goto p2ok X$ write SYS$OUTPUT "%-F-Bad parameter p2: C, FORTRAN, or DCL expected" X$ xstat = 4 X$ goto done X$! X$p2ok: X$ alpha = f$getsyi("CPU").gt.127 X$ vmsv = f$element(0,".",f$getsyi("version"))`009! major ... X$ vmsv = f$extract(1,f$length(vmsv)-1,vmsv)`009! ... w/o initial letter X$ vmsv2 = f$element(1,".",f$getsyi("version"))`009! minor ... X$ macro054 = alpha .or. - X`009((vmsv.eqs."5" .and. vmsv2 .ges."4") .or. vmsv.gts."5") X$! X$ defgblini=f$parse("DEFGBLINI.MAR;",f$env("procedure")) X$! X$ open/write GENDEF_TMP []GENDEF.TMP X$ write GENDEF_TMP ".macro`009JL_EMIT`009SYM,VALUE" X$ goto write_'lang' X$! X$write_C: X$ write GENDEF_TMP ".if lt %locate(<->,VALUE)-%length(VALUE)" X$ write GENDEF_TMP "`009.print;#define`009SYM`009(VALUE)" X$ write GENDEF_TMP ".iff" X$ write GENDEF_TMP "`009.print;#define`009SYM`009VALUE" X$ write GENDEF_TMP ".endc" X$ write GENDEF_TMP ".endm`009JL_EMIT" X$ write GENDEF_TMP "`009.print;/*" X$ if .not.alpha then - X`009write GENDEF_TMP "`009.print; * definitions created by GENDEF at " +- X`009 f$time() + " (VMS " + f$edit(f$getsyi("version"),"trim") + ")" X$ if alpha then - X`009write GENDEF_TMP "`009.print; * definitions created by GENDEF at " +- X`009 f$time() + " (OpenVMS " + f$edit(f$getsyi("version"),"trim") + ")" X$ write GENDEF_TMP "`009.print; */" X$ write GENDEF_TMP "`009$" + p1 X$ write GENDEF_TMP "`009.print;/*" X$ write GENDEF_TMP "`009.print; * end of definitions created by GENDEF" X$ write GENDEF_TMP "`009.print; */" X$ goto write__end X$! X$write_FORTRAN: X$ write GENDEF_TMP "`009.print;`009integer*4 SYM" X$ write GENDEF_TMP "`009.print;`009parameter (SYM = VALUE)" X$ write GENDEF_TMP ".endm`009JL_EMIT" X$ write GENDEF_TMP "`009.print;*" X$ write GENDEF_TMP "`009.print;* definitions created by GENDEF at " +- X`009`009f$time() + " (VMS " + f$edit(f$getsyi("version"),"trim") + ")" X$ write GENDEF_TMP "`009.print;*" X$ write GENDEF_TMP "`009$" + p1 X$ write GENDEF_TMP "`009.print;*" X$ write GENDEF_TMP "`009.print;* end of definitions created by GENDEF" X$ write GENDEF_TMP "`009.print;*" X$ goto write__end X$! X$write_DCL: X$ write GENDEF_TMP "`009.print;$ SYM == VALUE" X$ write GENDEF_TMP ".endm`009JL_EMIT" X$ write GENDEF_TMP "`009.print;$!*" X$ write GENDEF_TMP "`009.print;$! definitions created by GENDEF at " +- X`009`009f$time() + " (VMS " + f$edit(f$getsyi("version"),"trim") + ")" X$ write GENDEF_TMP "`009.print;$!*" X$ write GENDEF_TMP "`009$" + p1 X$ write GENDEF_TMP "`009.print;$!*" X$ write GENDEF_TMP "`009.print;$! end of definitions created by GENDEF" X$ write GENDEF_TMP "`009.print;$!*" X$ goto write__end X$! X$write__end: X$ write GENDEF_TMP "`009.end" X$ close GENDEF_TMP X$! X$ outputfn = p1 + ftype X$ macoutfn = outputfn X$ if alpha then macoutfn = "[]GENDEF.TMP2" X$ timestamp = f$cvtim("") X! X$ if .not.macro054 then -`009`009`009! pre-5.4 MACRO: .PRINT output X`009define/user SYS$ERROR 'macoutfn'`009! ... goes to SYS$ERROR X$ if macro054 then - X`009create 'macoutfn' X$ if macro054 then -`009`009`009`009! 5.4 MACRO: .PRINT output X`009define/user SYS$OUTPUT 'macoutfn'`009! ... goes to SYS$OUTPUT X$ if macro054 then -`009`009`009`009! ... (appended) ... X`009define/user SYS$ERROR NL:`009`009! ... and somehow to SYS$ERROR X$! X$ if .not.alpha then - X`009$ macro/nolist/noobject - X`009`009'defgblini'+SYS$DISK:[]GENDEF.TMP+SYS$LIBRARY:LIB/LIB X$ if alpha then - X`009$ macro/migrate/nolist/noobject - X`009`009'defgblini'+SYS$DISK:[]GENDEF.TMP+SYS$LIBRARY:LIB/LIB X$ xstat = $status.and.%xEFFFFFFF`009`009! want to signal again X$! X$ delete []GENDEF.TMP; X$! X$ if xstat .and. alpha then goto alpha_strip X$ if xstat then goto done X$! X$ macoutfn = f$search(macoutfn) V$ if macoutfn.nes."" .and. f$cvtim(f$file(macoutfn,"cdt")).ges.timestamp then X - X`009delete/log 'macoutfn' X$! X$done: X$ exit xstat + f$verify(ver_p,f$environment("verify_image"))*0 X$! X$! X$!***** ALPHA MACRO32 makes .print output into long error messages ... X$! X$alpha_strip: X$! X$ prefix = "%AMAC-I-GENINFO, 0 " X$! X$ create 'outputfn' X$ open/read GENDEF_TMP 'macoutfn' X$ open/append GENDEF_OUT 'outputfn' X$cloop: X$ read/end=cloopend GENDEF_TMP line X$ if f$length(line).gt.0 .and. f$locate(prefix,line).eq.0 then - X`009write GENDEF_OUT (line - prefix) X$ goto cloop X$cloopend: X$ close GENDEF_OUT X$ close GENDEF_TMP X$! X$ delete []GENDEF.TMP2; X$! X$ goto done $ GOSUB UNPACK_FILE $ FILE_IS = "ITRMLEN.C" $ CHECKSUM_IS = 1682511453 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X/* length of "trimmed" string (passed by fixed-length descriptor) */ X X#include descrip X Xint itrmlen(struct dsc$descriptor_s *str) X`123 X`009int l; X X`009l = str->dsc$w_length; X X`009while(l > 0) `123 X`009`009if(str->dsc$a_pointer[l - 1] != ' ') return l; X`009`009l -= 1; X`009`125 X`009return 0; X`125 $ GOSUB UNPACK_FILE $ FILE_IS = "PRVDEF.H" $ CHECKSUM_IS = 2020306461 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X/* X * definitions created by GENDEF at 4-NOV-1993 14:32:52.81 (VMS V5.5-2) X */ X#define`009PRV$M_CMKRNL`0091 X#define`009PRV$M_CMEXEC`0092 X#define`009PRV$M_SYSNAM`0094 X#define`009PRV$M_GRPNAM`0098 X#define`009PRV$M_ALLSPOOL`00916 X#define`009PRV$M_DETACH`00932 X#define`009PRV$M_DIAGNOSE`00964 X#define`009PRV$M_LOG_IO`009128 X#define`009PRV$M_GROUP`009256 X#define`009PRV$M_NOACNT`009512 X#define`009PRV$M_PRMCEB`0091024 X#define`009PRV$M_PRMMBX`0092048 X#define`009PRV$M_PSWAPM`0094096 X#define`009PRV$M_SETPRI`0098192 X#define`009PRV$M_SETPRV`00916384 X#define`009PRV$M_TMPMBX`00932768 X#define`009PRV$M_WORLD`00965536 X#define`009PRV$M_MOUNT`009131072 X#define`009PRV$M_OPER`009262144 X#define`009PRV$M_EXQUOTA`009524288 X#define`009PRV$M_NETMBX`0091048576 X#define`009PRV$M_VOLPRO`0092097152 X#define`009PRV$M_PHY_IO`0094194304 X#define`009PRV$M_BUGCHK`0098388608 X#define`009PRV$M_PRMGBL`00916777216 X#define`009PRV$M_SYSGBL`00933554432 X#define`009PRV$M_PFNMAP`00967108864 X#define`009PRV$M_SHMEM`009134217728 X#define`009PRV$M_SYSPRV`009268435456 X#define`009PRV$M_BYPASS`009536870912 X#define`009PRV$M_SYSLCK`0091073741824 X#define`009PRV$M_SHARE`009(-2147483648) X#define`009PRV$M_ACNT`009512 X#define`009PRV$M_ALTPRI`0098192 X#define`009PRV$S_PRVDEF`0095 X#define`009PRV$V_CMKRNL`0090 X#define`009PRV$V_CMEXEC`0091 X#define`009PRV$V_SYSNAM`0092 X#define`009PRV$V_GRPNAM`0093 X#define`009PRV$V_ALLSPOOL`0094 X#define`009PRV$V_DETACH`0095 X#define`009PRV$V_DIAGNOSE`0096 X#define`009PRV$V_LOG_IO`0097 X#define`009PRV$V_GROUP`0098 X#define`009PRV$V_NOACNT`0099 X#define`009PRV$V_PRMCEB`00910 X#define`009PRV$V_PRMMBX`00911 X#define`009PRV$V_PSWAPM`00912 X#define`009PRV$V_SETPRI`00913 X#define`009PRV$V_SETPRV`00914 X#define`009PRV$V_TMPMBX`00915 X#define`009PRV$V_WORLD`00916 X#define`009PRV$V_MOUNT`00917 X#define`009PRV$V_OPER`00918 X#define`009PRV$V_EXQUOTA`00919 X#define`009PRV$V_NETMBX`00920 X#define`009PRV$V_VOLPRO`00921 X#define`009PRV$V_PHY_IO`00922 X#define`009PRV$V_BUGCHK`00923 X#define`009PRV$V_PRMGBL`00924 X#define`009PRV$V_SYSGBL`00925 X#define`009PRV$V_PFNMAP`00926 X#define`009PRV$V_SHMEM`00927 X#define`009PRV$V_SYSPRV`00928 X#define`009PRV$V_BYPASS`00929 X#define`009PRV$V_SYSLCK`00930 X#define`009PRV$V_SHARE`00931 X#define`009PRV$V_UPGRADE`00932 X#define`009PRV$V_DOWNGRADE`00933 X#define`009PRV$V_GRPPRV`00934 X#define`009PRV$V_READALL`00935 X#define`009PRV$V_SECURITY`00938 X#define`009PRV$V_ACNT`0099 X#define`009PRV$V_ALTPRI`00913 X/* X * end of definitions created by GENDEF X */ $ GOSUB UNPACK_FILE $ FILE_IS = "PSMDEF.H" $ CHECKSUM_IS = 1196237606 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X/* X * definitions created by GENDEF at 4-NOV-1993 14:33:00.86 (VMS V5.5-2) X */ X#define`009PSM$K_CANCEL`0091 X#define`009PSM$K_CLOSE`0092 X#define`009PSM$K_FORMAT`0093 X#define`009PSM$K_OPEN`0094 X#define`009PSM$K_READ`0095 X#define`009PSM$K_GET_KEY`0096 X#define`009PSM$K_POSITION_TO_KEY`0097 X#define`009PSM$K_REWIND`0098 X#define`009PSM$K_WRITE`0099 X#define`009PSM$K_WRITE_NOFORMAT`00910 X#define`009PSM$K_WRITE_SUPPRESSED`00911 X#define`009PSM$K_PAUSE_TASK`00912 X#define`009PSM$K_RESET_STREAM`00913 X#define`009PSM$K_RESUME_TASK`00914 X#define`009PSM$K_START_STREAM`00915 X#define`009PSM$K_START_TASK`00916 X#define`009PSM$K_STOP_TASK`00917 X#define`009PSM$K_STOP_STREAM`00918 X#define`009PSM$K_PAGE_SETUP`0091 X#define`009PSM$K_PAGE_HEADER`0092 X#define`009PSM$K_LIBRARY_INPUT`0093 X#define`009PSM$K_INPUT_FILTER`0094 X#define`009PSM$K_MAIN_FORMAT`0095 X#define`009PSM$K_OUTPUT_FILTER`0096 X#define`009PSM$K_OUTPUT`0097 X#define`009PSM$K_JOB_SETUP`0098 X#define`009PSM$K_FORM_SETUP`0099 X#define`009PSM$K_JOB_FLAG`00910 X#define`009PSM$K_JOB_BURST`00911 X#define`009PSM$K_FILE_SETUP`00912 X#define`009PSM$K_FILE_FLAG`00913 X#define`009PSM$K_FILE_BURST`00914 X#define`009PSM$K_FILE_SETUP_2`00915 X#define`009PSM$K_MAIN_INPUT`00916 X#define`009PSM$K_FILE_INFORMATION`00917 X#define`009PSM$K_FILE_ERRORS`00918 X#define`009PSM$K_FILE_TRAILER`00919 X#define`009PSM$K_JOB_RESET`00920 X#define`009PSM$K_JOB_TRAILER`00921 X#define`009PSM$K_JOB_COMPLETION`00922 X#define`009PSM$K_PAGE_FOOTER`00923 X#define`009PSM$k_max`00924 X#define`009PSM$K_CC_INTERNAL`0091 X#define`009PSM$K_CC_IMPLIED`0092 X#define`009PSM$K_CC_FORTRAN`0093 X#define`009PSM$K_CC_PRINT`0094 X#define`009PSM$K_CC_MAX`0095 X/* X * end of definitions created by GENDEF X */ $ GOSUB UNPACK_FILE $ FILE_IS = "REMPRTSMB.C" $ CHECKSUM_IS = 74121552 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X/*****`009multithreaded output-redirection symbiont`009*****/ X X#define ASY_FAB`009`009/* <<< allegedly requires VMS V5 <<< */ X#ifdef ASY_FAB X#define Version "V1.2a" X#else X#define Version "V1.2s" X#endif X X/***** X`009w.j.m. jul 1988, after XXXSMB V0.3 X XV0.95 21-jul-1988 wjm: set SPL & DLT bits on open, not on close (for DAP) XV0.96 27-jul-1988 wjm: fix handling of immediate $PUT error XV0.97 11-sep-1989 wjm: set procname to REMPRTSMB_n XV0.98 07-jun-1990 wjm: fix incompatible change of by supplying own X`009`009`009"prvdef.h"; add /RSX and /JOBNAME options; X`009`009`009some fixes; use ITRMLEN() now; X`009`009`009for simplicity, use same SPL/DLT setting on`032 X`009`009`009open AND close (not tested on RSX anyway); XV0.99 ................. (VMS V5) #ifdef ASY_FAB, finally implement FAB$M_ASY XV1.0 16-jul-1991 wjm: fix "#ifndef ASY_FAB" compilation by removing X`009`009`009a superfluous statement; X`009`009`009if "logname" ends in a quotation mark, consider X`009`009`009it a complete network task (or foreign file) spec: X`009`009`009don't look for options, don't append "filename.type". XV1.1 11-jun-1992 wjm: workarea created by VMS V5.5 SMBSRVSHR is no longer X`009`009`009quadword-aligned, round up pointer prior to use. XV1.2 15-oct-1993 wjm: adapt to [AXP] DECC (with /STANDARD=VAXC) X X******** X Xintended use: X`009$ ini/queue ... /proc=REMPRTSMB`009-`009! this image X`009`009/separate=(flag,trailer)`009- X`009`009/on=logname X Xwhere 'logname' translates to either X(a) something ending in a quotation mark - it will be considered a complete X`009file spec (e.g. network foreign file spec, or network task spec). Xor X(b) something like "node::dev:[dir]/opt" X(one of "node::" or "dev:" must be present, "[dir]" and "/opt" are optional). Xwithout "/opt", the output files will be named "node::dev:[dir]VAX.PRT". Xpossible options ('/opt') are: X`009/USERNAME ...`009use VMS username instead of "VAX" for default filespec. X`009/JOBNAME ...`009if JOB_NAME has legal "fff.vvv" format, use it for X`009`009`009output filespec (neither "fff" nor "vvv" may be void); X`009`009`009if it is just "fff", output filespec => "fff.PRT". X`009/RSX `009 ...`009require RSX-compatible JOB_NAME, or otherwise X`009`009`009force output filespec into RSX-compatible format. X`009/SPOOL`009 ...`009creates output file with "print/delete" option X X*****/ X X/*****`009internals: X`009assume that only 1 input routine is active (1 scb-pointer only). X`009assume that output routine may be called without wait for X`009`009completion, with a different scb-pointer for each buffer. X*****/ X X#module REMPRTSMB Version X X/*****/ X X#include stddef X#include ctype X#include string X#include descrip Xtypedef struct dsc$descriptor DESCR; X X/*****/ X X#include lnmdef X X#define LIB$K_VM_FIXED 4`009/* actually defined in $LIBVMDEF */ X X#include fab X#include rab X X#include "smbdef.h" X#include "psmdef.h" X#include "prvdef.h"`009`009/* NOT the one from VAXC 3.x */ X Xglobalvalue PSM$_EOF, PSM$_FUNNOTSUP, PSM$_PENDING; Xglobalvalue RMS$_EOF, SS$_NORMAL, SS$_IVLOGNAM; X Xextern int itrmlen(DESCR *); X Xextern unsigned psm$replace(const int *, unsigned (*)()); Xextern unsigned psm$print(const int *, const int *, const int *); Xextern unsigned psm$report(char **, ...); Xextern unsigned psm$read_item_dx(char **, const int *, DESCR *); X Xextern unsigned lib$analyze_sdesc(const DESCR *, unsigned short *, char **); Xextern void lib$stop(unsigned, ...); Xextern unsigned lib$insv(const int *, const int *, const int *, void *); Xextern unsigned lib$insqti(void *, double *q, ...); Xextern unsigned lib$insqhi(void *, double *q, ...); Xextern unsigned lib$remqhi(double *q, void **, ...); Vextern unsigned lib$create_vm_zone(unsigned *, const unsigned *, const int *) X; Xextern unsigned lib$get_vm(const int *, void **, ...); Xextern unsigned lib$free_vm(const int *, void **, ...); X Xextern unsigned sys$trnlnm(const unsigned *, const DESCR *, const DESCR *, X`009`009`009`009const unsigned char *, const void *); Xextern unsigned sys$setprv(unsigned, const void *, unsigned, void *); Xextern unsigned sys$setprn(const DESCR *); Xextern unsigned sys$bintim(const DESCR *, void *); Xextern unsigned sys$setimr(unsigned, const void *, void (*)(), unsigned); Xextern unsigned sys$cantim(unsigned, unsigned); Xextern unsigned sys$dclast(void (*)(), void *, unsigned); Xextern unsigned sys$create(struct FAB *, ...); Xextern unsigned sys$connect(struct RAB *, ...); Xextern unsigned sys$put(struct RAB *, ...); Xextern unsigned sys$disconnect(struct RAB *, ...); Xextern unsigned sys$close(struct FAB *, ...); X X/*****/ X X#define BLOCK_SIZE 512`009`009/* max. output record size */ X Xtypedef enum linkstate `123 X`009init,`009/* == 0 !!!`009`009*/ X`009open1,`009/* initial $open to be done */ X`009open1t,`009/* timer pending, $open to be retried`009*/ X#ifdef ASY_FAB X`009open2,`009/* $connect pending`009*/ X#endif X`009open3,`009/* $connect pending`009*/ X`009opened, X`009putting,/* $put pending`009`009*/ X`009close1,`009/* $disconnect to be done`009*/ X`009close2,`009/* $disconnect pending`009*/ X#ifdef ASY_FAB X`009close3,`009/* $close pending`009*/ X#endif X`009aborting, X`009closed X`125 LINKSTATE; X Xtypedef struct outputqelt `123 X`009double oqlink;`009`009/* offset=0, q-aligned !!!`009*/ X`009char *scbp; X`009char *op; X`009int olen; X`125 OUTPUTQELT; X#define OLEN_CLOSE (-1)`009`009/* special value`009*/ X#define OLEN_ABORT (-2)`009`009/* special value`009*/ X Xtypedef struct workarea `123 X`009double wk_oqhead;`009/* q-aligned quadword !!!`009*/ X`009OUTPUTQELT *wk_curqp; X`009LINKSTATE wk_state; X`009char *wk_scbp;`009`009/* pointer for psm$report */ X struct FAB wk_fab; X struct RAB wk_rab; X`009char wk_file[256];`009/* output filespec */ X X`009unsigned wk_spool:1;`009/* flag: open with SPL & DLT`009*/ X`125 WORKAREA; X V#define Q_ALIGN(p) (((unsigned) p + 7) & `1267)`009/* round up to multiple of X 8 */ X X/***** forward declarations *****/ X Vstatic unsigned`009remprt_output(char **, void *, int *, DESCR *, unsigned *) X; Vstatic unsigned remprt_input_nop(char **, void *, int *, DESCR *, unsigned *) X; Xstatic unsigned remprt_job_flag(char **, void *, int *, DESCR *, unsigned *); Vstatic unsigned remprt_job_trailer(char **, void *, int *, DESCR *, unsigned X * X); X Xstatic unsigned init_job(char **, WORKAREA *); Xstatic unsigned put_out(char **, WORKAREA *, char *, unsigned short); Xstatic void abort_job(WORKAREA *); Xstatic unsigned close_job(char **, WORKAREA *); X Xstatic void init_wk(WORKAREA *); Xstatic void rms_ast(struct RAB *); Xstatic void rms_abort(WORKAREA *); Xstatic void rms_open_cancel(WORKAREA *); X Xstatic unsigned oq_vm_zone = 0; Xstatic OUTPUTQELT *oq_alloc(void); X X#define oq_free(p) `123unsigned stat;\ X`009if(((stat=lib$free_vm(&sizeof(OUTPUTQELT),&p,&oq_vm_zone))&1)==0)\ X`009`009lib$stop(stat`1240x10000000);`125 X X#ifdef OPTRACE Xstatic unsigned opermsg(char *); X#define OPMSG(s) opermsg(s) X#else X#define OPMSG(s) X#endif X X X/*****`009"main" program - must come first (not declared to VAXC) *****/ X X#ifdef __DECC Xmain() X#else Xunsigned remprtsmb_main() X#endif X`123 X`009static struct replacetab `123 X`009`009int type; X`009`009unsigned (*routine)(); X`009`009`125 replace_tab[] = `123 X`009`009`009`009/* always */ X`009/* o.k.`009`009PSM$K_JOB_SETUP`009`009`009`009*/ X`009`009`009`009/* always */ X`009/* o.k.`009`009PSM$K_FORM_SETUP`009`009`009*/ X`009`009`009`009/* JOBCTL separate, 1st file */ X`009/* >>>>`009*/`009`123PSM$K_JOB_FLAG, remprt_job_flag`125, X`009`009`009`009/* JOBCTL separate, 1st file */ X`009`009`009`123PSM$K_JOB_BURST, remprt_input_nop`125, X`009`009`009`009/* always */ X`009/* o.k.`009`009PSM$K_FILE_SETUP`009`009`009*/ X`009`009`009`009/* JOBCTL default */ X`009/* o.k.`009`009PSM$K_FILE_FLAG`009`009`009`009*/ X`009`009`009`009/* JOBCTL default */ X`009/* o.k.`009`009PSM$K_FILE_BURST`009`009`009*/ X`009`009`009`009/* always */ X`009/* o.k.`009`009PSM$K_FILE_SETUP_2`009`009`009*/ X`009`009`009`009/* always 1 of the following ... */ X`009/* o.k. */`009/* FILE_ERRORS, FILE_INFORMATION, MAIN_INPUT */ X`009`009`009`009/* JOBCTL default */ X`009/* o.k.`009`009PSM$K_FILE_TRAILER`009`009`009*/ X`009`009`009`009/* JOBCTL separate, last file */ X`009`009`009`123PSM$K_JOB_RESET, remprt_input_nop`125, X`009`009`009`009/* JOBCTL separate, last file */ X`009/* >>>> */`009`123PSM$K_JOB_TRAILER, remprt_job_trailer`125, X`009`009`009`009/* always (trailing FF) */ X`009/* o.k.`009`009PSM$K_JOB_COMPLETION`009`009`009*/ X X`009`009/* "nested" routines */ X`009`009`009`009/* JOBCTL default, or user spec'd */ X`009/* o.k.`009`009PSM$K_PAGE_HEADER`009`009`009*/ X`009`009`009`009/* JOBCTL default */ X`009/* o.k.`009`009PSM$K_PAGE_SETUP`009`009`009*/ X`009`009`009`009/* coroutines */ X`009/* o.k. */`009/* MAIN_FORMAT, LIBRARY_INPUT */ X`009`009`009`009/* output routine */ X`009/* >>>> */`009`123PSM$K_OUTPUT, remprt_output`125, X X`009`009/* that's all for VMS 4.x */ X`009`009`009`1230, NULL`125`125; X X`009unsigned status; X`009unsigned privs[2] = `1230, 0`125; X`009struct replacetab *i; X X`009/* set privileges - have only SETPRV */ X`009lib$insv(&1,&PRV$V_TMPMBX,&1,&privs); X`009lib$insv(&1,&PRV$V_NETMBX,&1,&privs); X`009lib$insv(&1,&PRV$V_READALL,&1,&privs); X`009status = sys$setprv(1,&privs,0,NULL); X`009if((status & 1) == 0) return status `124 0x10000000; X X`009/* replace routines listed in above table */ X`009for(i = replace_tab; i->type != 0; i++) `123 X`009`009status = psm$replace(&(i->type),i->routine); X`009`009if((status & 1) == 0) return status `124 0x10000000; X`009`125 X X`009/* set process name */ X`009`123`009char prn[] = "REMPRTSMB_0";`009/* to be modified */ X`009`009$DESCRIPTOR(prn_dsc,prn); X X`009`009do `123 X`009`009`009prn[sizeof(prn)-2]++; X`009`009`125 while((sys$setprn(&prn_dsc) & 1) == 0 && X`009`009`009prn[sizeof(prn)-2] < '9'); X`009`125 X X`009/* start - 8 threads maximum */ X`009status = psm$print(&8, &BLOCK_SIZE, &(7 + sizeof(WORKAREA))); X`009return status `124 0x10000000; X`125 X X/*****`009symbiont output routine`009`009*****/ X Xstatic unsigned remprt_output( X`009char **ctxp,`032 X`009void *pwap, X`009int *funcp, X`009DESCR *dscp, X`009unsigned *argp) X`123 X`009WORKAREA *wap = (WORKAREA *) Q_ALIGN(pwap); X`009unsigned status; X`009unsigned short buflen; X`009char *bufp; X X X`009if(wap->wk_state == init) `123 X`009`009init_wk(wap);`009`009/* 1st time init`009*/ X`009`125 X X`009switch(*funcp) `123 X`009 case PSM$K_OPEN: X`009`009*argp = (1 << SMBMSG$V_SERVER) `124 X`009`009`009(1 << SMBMSG$V_LOWERCASE); X X`009`009return SS$_NORMAL;`009/* no real action yet`009*/ X`009`009break; X X`009 case PSM$K_WRITE: X`009 case PSM$K_WRITE_NOFORMAT: X`009`009switch(wap->wk_state) `123 X`009`009 case putting: X`009`009 case opened: X`009`009`009status = lib$analyze_sdesc(dscp,&buflen,&bufp); X`009`009`009if((status & 1) == 0) lib$stop(status `124 0x10000000); X`009`009`009return put_out(ctxp,wap,bufp,buflen); /* asynch. */ X`009`009`009break; X`009`009`125 X`009`009return SS$_NORMAL;`009/* (fake) */ X`009`009break; X X`009 case PSM$K_CLOSE: X`009`009abort_job(wap); X`009`009return SS$_NORMAL; X`009`009break; X X`009 default: X`009`009return PSM$_FUNNOTSUP; X`009`009break; X`009`125 X`125 X X/*****`009no-op input routine (replaces undesired PSM routines) *****/ X Xstatic unsigned remprt_input_nop( X`009char **ctxp, X`009void *pwap, X`009int *funcp, X`009DESCR *dscp, X`009unsigned *argp) X`123 X`009switch(*funcp) `123 X`009 case PSM$K_OPEN: X`009`009*argp = PSM$K_CC_INTERNAL; X`009`009/* drop thru */ X`009 case PSM$K_CLOSE: X`009`009return SS$_NORMAL; X`009`009break; X X`009 case PSM$K_READ: X`009`009return PSM$_EOF; X`009`009break; X X`009 default: X`009`009return PSM$_FUNNOTSUP; X`009`009break; X`009`125 X`125 X X/*****`009job flag page: open output`009*****/ X Xstatic unsigned remprt_job_flag( X`009char **ctxp, X`009void *pwap, X`009int *funcp, X`009DESCR *dscp, X`009unsigned *argp) X`123 X`009WORKAREA *wap = (WORKAREA *) Q_ALIGN(pwap); X X X`009switch(*funcp) `123 X`009 case PSM$K_OPEN: X`009`009*argp = PSM$K_CC_INTERNAL; X X`009`009return init_job(ctxp,wap);`009`009/* continues via AST */ X`009`009break; X X`009 case PSM$K_READ: X`009`009return RMS$_EOF; X`009`009break; X X`009 case PSM$K_CLOSE: X`009`009return SS$_NORMAL; X`009`009break; X X`009 case PSM$K_CANCEL: X`009 case PSM$K_STOP_TASK: X`009 case PSM$K_RESET_STREAM: X`009`009abort_job(wap);`009`009/* ggf. cancel open loop */ X`009 default: X`009`009return PSM$_FUNNOTSUP; X`009`009break; X`009`125 X`125 X X/*****`009job trailer page: close output file`009*****/ X Xstatic unsigned remprt_job_trailer( X`009char **ctxp, X`009void *pwap, X`009int *funcp, X`009DESCR *dscp, X`009unsigned *argp) X`123 X`009WORKAREA *wap = (WORKAREA *) Q_ALIGN(pwap); X X X`009switch(*funcp) `123 X`009 case PSM$K_OPEN: X`009`009*argp = PSM$K_CC_INTERNAL; X X`009`009switch(wap->wk_state) `123 X`009`009 case putting: X`009`009 case opened: X`009`009`009return close_job(ctxp,wap);`009/* continue via AST`009*/ X`009`009`009break; X`009`009`125 X`009`009return SS$_NORMAL; X`009`009break; X X`009 case PSM$K_READ: X`009`009return RMS$_EOF; X`009`009break; X X`009 case PSM$K_CLOSE: X`009`009return SS$_NORMAL; X`009`009break; X X`009 case PSM$K_STOP_TASK:`009`009`009/* asynch. abort`009*/ X`009`009switch(wap->wk_state) `123 X`009`009 case putting: X`009`009 case opened: X`009`009`009abort_job(wap); X`009`009`009break; X`009`009`125 X`009 default: X`009`009return PSM$_FUNNOTSUP; X`009`009break; X`009`125 X`125 X X/*****`009job startup (triggered by job_flag)`009*****/ X Xstatic unsigned init_job( X`009char **ctxp, X`009WORKAREA *wap) X`123 X`009unsigned status; X`009int l; X`009char /*logical*/ opt_username,opt_spool,opt_jobname,opt_rsx; X`009char *lp, *lp1, *lp2, *optp; X`009static unsigned short lnml; X`009static char devlnm[32], line[256]; X`009static DESCR devlnmdsc = `1230-0,0,0,devlnm`125; X`009static const $DESCRIPTOR(linedsc,line); X`009static const $DESCRIPTOR(lnmtabdsc,"LNM$FILE_DEV"); X`009static struct `123 X`009`009unsigned short len; X`009`009unsigned short code; X`009`009void *addr; X`009`009void *retlen; X`009`125 itmlst[2] = `123 X`009`009`123sizeof(line)-1, LNM$_STRING, line, &lnml`125, X`009`009`1230, 0, NULL, NULL`125 X`009`125; X X X`009/*****`009link state must be =closed !!!`009****/ X X`009if(wap->wk_state != closed) `123 X`009`009lib$stop(0x10000004,1,wap->wk_state);`009/* crash ...`009*/ X`009`125 X X`009/***** "device name" and options *****/ X X`009opt_username = 0; X`009opt_jobname = 0; X`009opt_rsx = 0; X`009opt_spool = 0; X X`009devlnmdsc.dsc$w_length = sizeof(devlnm)-1; X`009devlnm[0] = '\0'; X`009psm$read_item_dx(ctxp,&SMBMSG$K_DEVICE_NAME,&devlnmdsc); X`009devlnm[itrmlen(&devlnmdsc)] = '\0'; X X`009l = strlen(devlnm); X`009if(l > 0 && devlnm[l-1] == ':') `123 X`009`009devlnm[--l] = '\0';`009/* ggf. remove trailing ':' */ X`009`125 X X`009devlnmdsc.dsc$w_length = l; X`009status = sys$trnlnm(NULL, &lnmtabdsc, &devlnmdsc, NULL, &itmlst); X`009if((status & 1) == 0) return status; X X`009l = lnml; X`009line[l] = '\0'; X X`009if(l > 0 && line[l-1] == '"') `123`009`009/* quoted output spec ... */ X`009`009strcpy(wap->wk_file,line);`009/* copy unchanged */ X`009`009goto file_name_ok; X`009`125 X X`009for(lp=line; *lp != '\0'; lp++) X`009`009*lp = toupper(*lp);`009/* upcase device & options */ X X`009optp = strchr(line,'/'); X`009if(optp == NULL) optp = line + strlen(line); X`009for(lp1 = optp; *lp1 != '\0'; lp1 = lp2) `123 X`009`009lp2 = strchr(lp1+1,'/');`009/* locate next '/' ... */ X`009`009if(lp2 == NULL) lp2 = lp1 + strlen(lp1); /* ... or '\0' */ X X#define opt_(o) ((lp2-lp1) == sizeof(o)-1 && strncmp(lp1,o,sizeof(o)-1) == 0) X X`009`009if(opt_("/USERNAME")) `123 X`009`009`009opt_username = 1; X`009`009`125 else if(opt_("/JOBNAME")) `123 X`009`009`009opt_jobname = 1; X`009`009`125 else if(opt_("/RSX")) `123 X`009`009`009opt_rsx = 1; X`009`009`125 else if(opt_("/SPOOL")) `123 X`009`009`009opt_spool = 1; X`009`009`125 X`009`125 X`009*optp = '\0';`009`009`009/* remove options now`009*/ X X`009if(strlen(line) > (sizeof wap->wk_file)-39-1-39-1) `123 X`009`009return SS$_IVLOGNAM;`009/* make sure it's not too long */ X`009`125 X`009strcpy(wap->wk_file,line);`009/* copy "node::dev:[dir]"`009*/ X X`009/*****`009filename`009*****/ X X`009if(opt_jobname) `123`009`009/* have a try at JOB_NAME */ X`009`009int l1,l2; X`009`009char c; X X`009`009line[0] = '\0'; X`009`009psm$read_item_dx(ctxp,&SMBMSG$K_JOB_NAME,&linedsc); X`009`009line[itrmlen(&linedsc)] = '\0'; X X`009`009l1 = 0; l2 = -1; X`009`009for(lp = line; *lp; lp++) `123 X`009`009`009if(*lp == '.') `123 X`009`009`009`009if(l2 >= 0) goto job_name_failed; X`009`009`009`009l2 = 0; X`009`009`009`125 else if((*lp >= 'A' && *lp <= 'Z') `124`124 X`009`009`009`009 (*lp >= 'a' && *lp <= 'z') `124`124 X`009`009`009`009 (*lp >= '0' && *lp <= '9') `124`124 X`009`009`009`009 (!opt_rsx && (*lp == '_' `124`124 X`009`009`009`009`009`009*lp == '-' `124`124 X`009`009`009`009`009`009*lp == '$'))) `123 X`009`009`009`009if(l2 < 0) l1++; else l2++; X`009`009`009`125 else goto job_name_failed; X`009`009`125 X`009`009if(!opt_rsx) `123 X`009`009`009if(l1 == 0 `124`124 l1 > 39 `124`124 X`009`009`009 l2 == 0 `124`124 l2 > 39) goto job_name_failed; X`009`009`125 else `123 X`009`009`009if(l1 == 0 `124`124 l1 > 9 `124`124 X`009`009`009 l2 == 0 `124`124 l2 > 3) goto job_name_failed; X`009`009`125 X X`009`009if(l2 < 0) strcat(line,".PRT"); X`009`009strcat(wap->wk_file,line); X`009`009goto file_name_ok; X`009`125 Xjob_name_failed: X X`009if(opt_username) `123`009`009`009/* "username.PRT" */ X`009`009line[0] = '\0'; X`009`009psm$read_item_dx(ctxp,&SMBMSG$K_USER_NAME,&linedsc); X`009`009line[itrmlen(&linedsc)] = '\0'; X X`009`009if(opt_rsx) `123 X`009`009`009if(strlen(line) > 9) line[9] = '\0'; X`009`009`009for(lp = line; *lp; lp++) `123 X`009`009`009`009if(!((*lp >= 'A' && *lp <= 'Z') `124`124 X`009`009`009`009 (*lp >= 'a' && *lp <= 'z') `124`124 X`009`009`009`009 (*lp >= '0' && *lp <= '9'))) `123 X`009`009`009`009`009*lp = '0'; X`009`009`009`009`125 X`009`009`009`125 X`009`009`125 X X`009`009strcat(line,".PRT"); X`009`009strcat(wap->wk_file,line); X`009`125 else `123`009`009`009`009/* "VAX.PRT" */ X`009`009strcat(wap->wk_file,"VAX.PRT"); X`009`125 Xfile_name_ok: X X`009wap->wk_fab.fab$b_fns = strlen(wap->wk_file); X X`009/*****`009spooling option`009*****/ X X`009wap->wk_spool = opt_spool; X X`009/*****`009ready to go`009*****/ X X`009wap->wk_scbp = *ctxp; X`009wap->wk_state = open1; X`009status = sys$dclast(rms_ast,&wap->wk_rab,0); X`009if((status & 1) == 0) lib$stop(status `124 0x10000000); X X`009return PSM$_PENDING; X`125 X X/*****`009queue output`009*****/ X Xstatic unsigned put_out( X`009char **ctxp, X`009WORKAREA *wap, X`009char *bufp, X`009unsigned short buflen) X`123 X`009unsigned status; X`009OUTPUTQELT *qp; X X X`009qp = oq_alloc(); X`009qp->scbp = *ctxp; X`009qp->op = bufp; X`009qp->olen = buflen; X`009status = lib$insqti(qp,&wap->wk_oqhead); X`009if((status & 1) == 0) lib$stop(status `124 0x10000000); X X`009/* assume state=putting or =opened */ X X`009if(wap->wk_state == opened) `123 X`009`009wap->wk_state = putting; X`009`009status = sys$dclast(rms_ast,&wap->wk_rab,0); X`009`009if((status & 1) == 0) lib$stop(status `124 0x10000000); X`009`125 X X`009return PSM$_PENDING; X`125 X X/*****`009abort job (asynch, no psm$report)`009*****/ X Xstatic void abort_job(`009 X`009WORKAREA *wap) X`123 X`009unsigned status; X`009OUTPUTQELT *qp; X X X`009switch(wap->wk_state) `123 X`009 case putting: X`009`009qp = oq_alloc(); X`009`009qp->scbp = NULL; X`009`009qp->olen = OLEN_ABORT; X`009`009status = lib$insqhi(qp,&wap->wk_oqhead);`009/* at HEAD */ X`009`009if((status & 1) == 0) lib$stop(status `124 0x10000000); X`009`009break; X X`009 case opened: X`009`009rms_abort(wap); X`009`009break; X X`009 default: X`009`009rms_open_cancel(wap); X`009`009break; X`009`125 X`125 X X/*****`009 end of job`009*****/ X Xstatic unsigned close_job( X`009char **ctxp, X`009WORKAREA *wap) X`123 X`009unsigned status; X`009OUTPUTQELT *qp; X X X`009switch(wap->wk_state) `123 X`009 case putting: X`009`009qp = oq_alloc(); X`009`009qp->scbp = *ctxp; X`009`009qp->olen = OLEN_CLOSE; X`009`009status = lib$insqti(qp,&wap->wk_oqhead); X`009`009if((status & 1) == 0) lib$stop(status `124 0x10000000); X`009`009break; X X`009 case opened: X`009`009wap->wk_state = close1; X`009`009wap->wk_scbp = *ctxp; X`009`009status = sys$dclast(rms_ast,&wap->wk_rab,0); X`009`009if((status & 1) == 0) lib$stop(status `124 0x10000000); X`009`009break; X`009`125 X`009return PSM$_PENDING; X`125 X X/*****`009initialize workarea (1st time only)`009*****/ X Xstatic void init_wk( X`009WORKAREA *wap) X`123 X`009wap->wk_fab = cc$rms_fab; X`009wap->wk_rab = cc$rms_rab; X X`009wap->wk_fab.fab$l_ctx = (unsigned) wap; X wap->wk_fab.fab$b_fac = FAB$M_PUT; X#ifndef ASY_FAB X`009wap->wk_fab.fab$l_fop = FAB$M_SQO `124 FAB$M_TEF; X#else X`009wap->wk_fab.fab$l_fop = FAB$M_ASY `124 FAB$M_SQO `124 FAB$M_TEF; X#endif X`009wap->wk_fab.fab$b_rfm = FAB$C_VAR; X`009wap->wk_fab.fab$b_rat = 0;`009/* "none" */ X`009wap->wk_fab.fab$w_mrs = BLOCK_SIZE; X`009wap->wk_fab.fab$l_fna = wap->wk_file; X`009/* b_fns to be filled in later, l_fop possibly modified */ X X`009wap->wk_rab.rab$l_ctx = (unsigned) wap; X`009wap->wk_rab.rab$l_fab = &wap->wk_fab; X`009wap->wk_rab.rab$b_rac = RAB$C_SEQ; X`009wap->wk_rab.rab$l_rop = RAB$M_ASY `124 RAB$M_WBH; X`009/* l_rbf, w_rsz to be filled in later */ X X`009wap->wk_state = closed; X`125 X X/*****`009cleanup OUTPUTQELTs in WORKAREA`009*****/ X Xstatic void oq_cleanup( X`009WORKAREA *wap) X`123 X`009unsigned status; X`009OUTPUTQELT *qp; X X X`009/* the current qelt's scbp is NOT acknowledged !!! */ X X`009if(wap->wk_curqp != NULL) `123`009 X`009`009oq_free(wap->wk_curqp); X`009`009wap->wk_curqp = NULL; X`009`125 X X`009while((lib$remqhi(&wap->wk_oqhead, &qp) & 1) != 0) `123 X`009`009if(qp->scbp != NULL) `123 X`009`009`009psm$report(&qp->scbp,&0);`009/* fake completion */ X`009`009`125 X`009`009oq_free(qp); X`009`125 X`125 X X/** emergency (synch) close`009**/ X Xstatic void rms_abort( X`009WORKAREA *wap) X`123 X`009unsigned fop,rop; X X X`009if(wap->wk_fab.fab$w_ifi != 0) `123 X`009`009rop = wap->wk_rab.rab$l_rop; X`009`009wap->wk_rab.rab$l_rop &= `126RAB$M_ASY;`009/* synch. $disconnect */ X`009`009fop = wap->wk_fab.fab$l_fop; X`009`009wap->wk_fab.fab$l_fop `124= FAB$M_DLT;`009/* get rid of file */ X`009`009wap->wk_fab.fab$l_fop &= `126FAB$M_SPL;`009/* don't spool */ X#ifdef ASY_FAB X`009`009wap->wk_fab.fab$l_fop &= `126FAB$M_ASY;`009/* synch. $close */ X#endif X`009`009sys$close(&wap->wk_fab);`009`009/* ignore status */ X`009`009wap->wk_rab.rab$l_rop = rop; X`009`009wap->wk_fab.fab$l_fop = fop; X`009`125 X`009wap->wk_state=closed; X`125 X X/**`009AST for RMS actions, arg=pointer to RAB *or* FAB`009**/ X Xstatic void rms_ast( X`009struct RAB *frabp)`009/* bzw. struct FAB */ X`123 X`009unsigned status; X`009WORKAREA *wap; X X V`009wap = (WORKAREA *) (frabp->rab$l_ctx);`009/* same as fab$l_ctx - see old X comments in .H */ X X/** make sure "frabp" is used ONLY in the preceding line **/ X Xagain: X`009switch(wap->wk_state) `123 X X`009/***********/ X`009 case closed:`009`009/* no-op */ X`009`009break; X X`009/***********/ X`009 case open1: X`009 case open1t: X X`009`009if(wap->wk_spool) `123 X`009`009`009wap->wk_fab.fab$l_fop `124= FAB$M_SPL `124 FAB$M_DLT; X`009`009`125 else `123 X`009`009`009wap->wk_fab.fab$l_fop &= `126(FAB$M_SPL `124 FAB$M_DLT); X`009`009`125 X#ifndef ASY_FAB X`009`009status=sys$create(&wap->wk_fab);`009/* synchronous`009*/ X#else X`009`009/* asynch. $create */ X X`009`009wap->wk_state = open2; X X`009`009status = sys$create(&wap->wk_fab,rms_ast,rms_ast); X`009`009/* AST should take care of 'status', else bad luck ... */ X X`009`009break; X X`009/***********/ X`009 case open2: X`009`009status = wap->wk_fab.fab$l_sts; X#endif X`009`009if((status & 1) == 0) goto set_open_timer; X X`009`009/* asynch $connect`009*/ X X`009`009wap->wk_state = open3; X`009`009status = sys$connect(&wap->wk_rab,rms_ast,rms_ast); X`009`009if((status & 1) == 0) `123 X`009`009`009rms_abort(wap); X`009`009`009psm$report(&wap->wk_scbp,&status); X`009`009`009return; X`009`009`125 X`009`009break; X X`009/***********/ X`009 case open3: X`009`009status = wap->wk_rab.rab$l_sts; X`009`009if((status & 1) == 0) `123 X`009`009`009rms_abort(wap); X`009`009`009psm$report(&wap->wk_scbp,&status); X`009`009`009return; X`009`009`125 X X`009`009wap->wk_state = opened; X`009`009psm$report(&wap->wk_scbp); X`009`009break; X X`009/***********/ X`009 case putting: X`009`009if(wap->wk_curqp != NULL) `123`009/* $put completion`009*/ X`009`009`009psm$report(&(wap->wk_curqp->scbp), X`009`009`009`009`009&wap->wk_rab.rab$l_sts); X`009`009`009oq_free(wap->wk_curqp); X`009`009`125 X X`009`009status = lib$remqhi(&wap->wk_oqhead, &wap->wk_curqp); X`009`009if((status & 1) == 0) `123 X`009`009`009wap->wk_curqp = NULL; X`009`009`009wap->wk_state = opened; X`009`009`009return; X`009`009`125 X X`009`009switch(wap->wk_curqp->olen) `123 X`009`009 case OLEN_CLOSE: X`009`009`009wap->wk_scbp = wap->wk_curqp->scbp; X`009`009`009oq_cleanup(wap); X`009`009`009wap->wk_state = close1; X`009`009`009goto again;`009`009/* now do "close1" action */ X X`009`009 case OLEN_ABORT: X`009`009`009wap->wk_scbp = wap->wk_curqp->scbp; X`009`009`009oq_cleanup(wap); X`009`009`009wap->wk_state = aborting; X`009`009`009goto again;`009`009/* now do "aborting" action */ X`009`009`125 X X`009`009wap->wk_rab.rab$l_rbf = wap->wk_curqp->op; X`009`009wap->wk_rab.rab$w_rsz = wap->wk_curqp->olen; X`009`009status = sys$put(&wap->wk_rab,rms_ast,rms_ast); X`009`009if((status & 1) == 0) `123 X`009`009`009psm$report(&(wap->wk_curqp->scbp),&status); X`009`009`009rms_abort(wap);`009`009/* state -> closed */ X`009`009`009oq_cleanup(wap);`009/* cleanup */ X`009`009`125 X`009`009break; X X`009/***********/ X`009 case close1: X`009`009wap->wk_state = close2; X`009`009status = sys$disconnect(&wap->wk_rab,rms_ast,rms_ast); X`009`009if((status & 1) == 0) `123 X`009`009`009rms_abort(wap); X`009`009`009psm$report(&wap->wk_scbp,&status); X`009`009`009return; X`009`009`125 X`009`009break; X X`009/***********/ X`009 case close2: X`009`009status = wap->wk_rab.rab$l_sts; X`009`009if((status & 1) == 0) `123 X`009`009`009rms_abort(wap); X`009`009`009psm$report(&wap->wk_scbp,&status); X`009`009`009return; X`009`009`125 X X#ifndef ASY_FAB X`009`009status = sys$close(&wap->wk_fab);`009/* synch.`009*/ X`009`009wap->wk_state = closed; X#else X`009`009wap->wk_state = close3; X`009`009status = sys$close(&wap->wk_fab,rms_ast,rms_ast); X`009`009if((status & 1) == 0) `123 X`009`009`009rms_abort(wap); X`009`009`009psm$report(&wap->wk_scbp,&status); X`009`009`009return; X`009`009`125 X`009`009break; X X`009/***********/ X`009 case close3: X`009`009status = wap->wk_fab.fab$l_sts; X`009`009wap->wk_state = closed;`009`009`009/* it got to be ... */ X#endif X`009`009psm$report(&wap->wk_scbp,&status); X`009`009break; X X`009/***********/ X`009 case aborting: X`009`009rms_abort(wap); X`009`009if(wap->wk_scbp != NULL) `123`009`009/* only if desired */ X`009`009`009psm$report(&wap->wk_scbp,&0); X`009`009`125 X`009`009break; X X`009/***********/ X`009 default: X`009`009lib$stop(0x10000004,1,wap->wk_state); X`009`009break; X`009`125 X X`009return; X Xset_open_timer:`009`009/* set timer & later retry $create */ X`009`123 X`009`009unsigned bintim[2]; X`009`009$DESCRIPTOR(timdsc,"0 0:2:0"); X X`009`009sys$bintim(&timdsc,&bintim); X X`009`009wap->wk_state = open1t; X`009`009status = sys$setimr(0,&bintim,rms_ast,(unsigned) &wap->wk_rab); X`009`009if((status & 1) == 0) `123 X`009`009`009lib$stop(status `124 0x10000000); X`009`009`125 X`009`125 X`125 X X/**`009AST-subroutine: cancel open loop`009**/ X Xstatic void rms_open_cancel( X`009WORKAREA *wap) X`123 X`009switch(wap->wk_state) `123 X X`009 case open1t: V`009`009sys$cantim((unsigned) &wap->wk_rab,0);`009/* try to cancel timer`009* X/ X`009 case open1: X`009`009wap->wk_state = closed;`009`009/* no more open pending`009*/ X`009`009psm$report(&wap->wk_scbp,&0);`009`009/* open failed`009*/ X`009`009break; X X#ifdef ASY_FAB X`009 case open2: X#endif X`009 case open3: X`009`009wap->wk_state = aborting;`009/* no more open pending`009*/ X`009`009/* AST will call psm$report */ X`009`009break; X`009`125 X`125 X X/*****`009 allocate output q-element `009*****/ X Xstatic OUTPUTQELT *oq_alloc(void) X`123 X`009unsigned status; X`009OUTPUTQELT *qp; X X X`009if(oq_vm_zone == 0) `123 X`009`009status = lib$create_vm_zone(&oq_vm_zone, X`009`009`009`009&LIB$K_VM_FIXED,&sizeof(OUTPUTQELT)); X`009`009if((status & 1) == 0) lib$stop(status `124 0x10000000); X`009`125 X X`009status = lib$get_vm(&sizeof(OUTPUTQELT),&qp,&oq_vm_zone); X`009if((status & 1) == 0) lib$stop(status `124 0x10000000); X X`009return qp; X`125 X X/*****/ X X#ifdef OPTRACE X Xstatic unsigned opermsg(char *text) X`123 X#include opcdef X`009extern unsigned sys$sndopr(const DESCR *, unsigned); X X`009int l; X`009struct `123 X`009`009unsigned func; X`009`009unsigned rqstid; X`009`009char buf[120]; X`009`125 opcbuf; X`009DESCR bufdsc = `1230-0, DSC$K_DTYPE_T, DSC$K_CLASS_S, opcbuf`125; X X X`009opcbuf.func = OPC$_RQ_RQST `124 (OPC$M_NM_CENTRL<<8); X`009opcbuf.rqstid = 0; X`009l = strlen(text); X`009if(l > 120) l = 120; X`009memcpy(opcbuf.buf,text,l); X`009bufdsc.dsc$w_length = l + offsetof(struct opcbuf,buf); X`009return sys$sndopr(&bufdsc,0); X`125 X#endif $ GOSUB UNPACK_FILE $ FILE_IS = "SMBDEF.H" $ CHECKSUM_IS = 1862705257 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X/* X * definitions created by GENDEF at 4-NOV-1993 14:33:09.44 (VMS V5.5-2) X */ X#define`009SMBMSG$K_STRUCTURE_LEVEL`0091 X#define`009SMBMSG$K_STRUCTURE_LEVEL_1`0091 X#define`009SMBMSG$K_ARCH_MAX_STREAMS`00932 X#define`009SMBMSG$K_PAUSE_TASK`0091 X#define`009SMBMSG$K_RESET_STREAM`0092 X#define`009SMBMSG$K_RESUME_TASK`0093 X#define`009SMBMSG$K_START_STREAM`0094 X#define`009SMBMSG$K_START_TASK`0095 X#define`009SMBMSG$K_STOP_STREAM`0096 X#define`009SMBMSG$K_STOP_TASK`0097 X#define`009SMBMSG$K_TASK_COMPLETE`0098 X#define`009SMBMSG$K_TASK_STATUS`0099 X#define`009SMBMSG$K_START_SYMBIONT`00910 X#define`009SMBMSG$K_JOB_REQUEST`00911 X#define`009SMBMSG$K_MAX_REQUEST_CODE`00912 X#define`009SMBMSG$S_REQUEST_HEADER`00912 X#define`009SMBMSG$W_REQUEST_CODE`0090 X#define`009SMBMSG$B_STRUCTURE_LEVEL`0092 X#define`009SMBMSG$B_STREAM_INDEX`0093 X#define`009SMBMSG$L_SYMBIONT_ID`0094 X#define`009SMBMSG$L_JOB_ID`0098 X#define`009SMBMSG$K_ACCOUNTING_DATA`0091 X#define`009SMBMSG$K_ACCOUNT_NAME`0092 X#define`009SMBMSG$K_AFTER_TIME`0093 X#define`009SMBMSG$K_ALIGNMENT_PAGES`0094 X#define`009SMBMSG$K_BOTTOM_MARGIN`0095 X#define`009SMBMSG$K_CHARACTERISTICS`0096 X#define`009SMBMSG$K_CHECKPOINT_DATA`0097 X#define`009SMBMSG$K_CONDITION_VECTOR`0098 X#define`009SMBMSG$K_DEVICE_NAME`0099 X#define`009SMBMSG$K_DEVICE_STATUS`00910 X#define`009SMBMSG$K_ENTRY_NUMBER`00911 X#define`009SMBMSG$K_EXECUTOR_QUEUE`00912 X#define`009SMBMSG$K_FILE_COPIES`00913 X#define`009SMBMSG$K_FILE_COUNT`00914 X#define`009SMBMSG$K_FILE_SETUP_MODULES`00915 X#define`009SMBMSG$K_FIRST_PAGE`00916 X#define`009SMBMSG$K_FORM_LENGTH`00917 X#define`009SMBMSG$K_FORM_NAME`00918 X#define`009SMBMSG$K_FORM_SETUP_MODULES`00919 X#define`009SMBMSG$K_FORM_WIDTH`00920 X#define`009SMBMSG$K_FILE_IDENTIFICATION`00921 X#define`009SMBMSG$K_FILE_SPECIFICATION`00922 X#define`009SMBMSG$K_JOB_COPIES`00923 X#define`009SMBMSG$K_JOB_COUNT`00924 X#define`009SMBMSG$K_JOB_NAME`00925 X#define`009SMBMSG$K_JOB_RESET_MODULES`00926 X#define`009SMBMSG$K_LAST_PAGE`00927 X#define`009SMBMSG$K_LEFT_MARGIN`00928 X#define`009SMBMSG$K_LIBRARY_SPECIFICATION`00929 X#define`009SMBMSG$K_MAXIMUM_STREAMS`00930 X#define`009SMBMSG$K_MESSAGE_VECTOR`00931 X#define`009SMBMSG$K_NOTE`00932 X#define`009SMBMSG$K_PAGE_SETUP_MODULES`00933 X#define`009SMBMSG$K_PARAMETER_1`00934 X#define`009SMBMSG$K_PARAMETER_2`00935 X#define`009SMBMSG$K_PARAMETER_3`00936 X#define`009SMBMSG$K_PARAMETER_4`00937 X#define`009SMBMSG$K_PARAMETER_5`00938 X#define`009SMBMSG$K_PARAMETER_6`00939 X#define`009SMBMSG$K_PARAMETER_7`00940 X#define`009SMBMSG$K_PARAMETER_8`00941 X#define`009SMBMSG$K_PRINT_CONTROL`00942 X#define`009SMBMSG$K_PRIORITY`00943 X#define`009SMBMSG$K_QUEUE`00944 X#define`009SMBMSG$K_REFUSE_REASON`00945 X#define`009SMBMSG$K_RELATIVE_PAGE`00946 X#define`009SMBMSG$K_REQUEST_CONTROL`00947 X#define`009SMBMSG$K_REQUEST_RESPONSE`00948 X#define`009SMBMSG$K_RIGHT_MARGIN`00949 X#define`009SMBMSG$K_SEARCH_STRING`00950 X#define`009SMBMSG$K_SEPARATION_CONTROL`00951 X#define`009SMBMSG$K_STOP_CONDITION`00952 X#define`009SMBMSG$K_TIME_QUEUED`00953 X#define`009SMBMSG$K_TOP_MARGIN`00954 X#define`009SMBMSG$K_UIC`00955 X#define`009SMBMSG$K_USER_NAME`00956 X#define`009SMBMSG$K_CHECKPOINT_FREQUENCY`00957 X#define`009SMBMSG$K_QUEUING_CONTROL`00958 X#define`009SMBMSG$K_RETRY_TIME`00959 X#define`009SMBMSG$K_DEVICE_CONDITION`00960 X#define`009SMBMSG$K_MESSAGE_FILE`00961 X#define`009SMBMSG$K_AGENT_PROFILE`00962 X#define`009SMBMSG$K_CPU_LIMIT`00963 X#define`009SMBMSG$K_FILE_SEPARATION`00964 X#define`009SMBMSG$K_LOG_QUEUE`00965 X#define`009SMBMSG$K_LOG_SPECIFICATION`00966 X#define`009SMBMSG$K_LOG_SPOOL`00967 X#define`009SMBMSG$K_OPERATOR_REQUEST`00968 X#define`009SMBMSG$K_WSDEFAULT`00969 X#define`009SMBMSG$K_WSEXTENT`00970 X#define`009SMBMSG$K_WSQUOTA`00971 X#define`009SMBMSG$K_FILE_ATTRIBUTES`00972 X#define`009SMBMSG$K_FILE_ATTRIBUTES_SIZE`00973 X#define`009SMBMSG$K_JOB_ATTRIBUTES`00974 X#define`009SMBMSG$K_JOB_ATTRIBUTES_SIZE`00975 X#define`009SMBMSG$K_QUEUE_ATTRIBUTES`00976 X#define`009SMBMSG$K_QUEUE_ATTRIBUTES_SIZE`00977 X#define`009SMBMSG$K_SUBMITTER_EPID`00978 X#define`009SMBMSG$K_MAX_ITEM_CODE`00979 X#define`009SMBMSG$S_ITEM_HEADER`0094 X#define`009SMBMSG$W_ITEM_SIZE`0090 X#define`009SMBMSG$W_ITEM_CODE`0092 X#define`009SMBMSG$S_ACCOUNTING_DATA`00916 X#define`009SMBMSG$L_PAGES_PRINTED`0090 X#define`009SMBMSG$l_qio_puts`0094 X#define`009SMBMSG$l_rms_gets`0098 X#define`009SMBMSG$L_CPU_TIME`00912 X#define`009SMBMSG$S_CHECKPOINT_DATA`00924 X#define`009SMBMSG$B_FILLER`0090 X#define`009SMBMSG$B_CHECKPOINT_LEVEL`0091 X#define`009SMBMSG$W_OFFSET`0092 X#define`009SMBMSG$L_CARCON`0094 X#define`009SMBMSG$L_PAGE`0098 X#define`009SMBMSG$L_RECORD_NUMBER`00912 X#define`009SMBMSG$S_USER_KEY`0098 X#define`009SMBMSG$Q_USER_KEY`00916 X#define`009SMBMSG$M_LOWERCASE`0091 X#define`009SMBMSG$M_PAUSE_TASK`0092 X#define`009SMBMSG$M_REMOTE`0094 X#define`009SMBMSG$M_SERVER`0098 X#define`009SMBMSG$M_STALLED`00916 X#define`009SMBMSG$M_STOP_STREAM`00932 X#define`009SMBMSG$M_TERMINAL`00964 X#define`009SMBMSG$M_UNAVAILABLE`009128 X#define`009SMBMSG$M_SYM_NOTIFIES`009256 X#define`009SMBMSG$M_SYM_REQUESTS_OPER`009512 X#define`009SMBMSG$M_SYM_COPIES_FILE`0091024 X#define`009SMBMSG$M_SYM_COPIES_JOB`0092048 X#define`009SMBMSG$M_SYM_ACCEPTS_ALL_FORMS`0094096 X#define`009SMBMSG$M_SYM_NO_JOB_CHECKPOINT`0098192 X#define`009SMBMSG$M_SYM_ALL_CHARACTERISTIC`00916384 X#define`009SMBMSG$M_NOTIFY_ON_INTERRUPT`00932768 X#define`009SMBMSG$S_DEVICE_STATUS`0094 X#define`009SMBMSG$L_DEVICE_FLAGS`0090 X#define`009SMBMSG$V_LOWERCASE`0090 X#define`009SMBMSG$V_PAUSE_TASK`0091 X#define`009SMBMSG$V_REMOTE`0092 X#define`009SMBMSG$V_SERVER`0093 X#define`009SMBMSG$V_STALLED`0094 X#define`009SMBMSG$V_STOP_STREAM`0095 X#define`009SMBMSG$V_TERMINAL`0096 X#define`009SMBMSG$V_UNAVAILABLE`0097 X#define`009SMBMSG$V_SYM_NOTIFIES`0098 X#define`009SMBMSG$V_SYM_REQUESTS_OPER`0099 X#define`009SMBMSG$V_SYM_COPIES_FILE`00910 X#define`009SMBMSG$V_SYM_COPIES_JOB`00911 X#define`009SMBMSG$V_SYM_ACCEPTS_ALL_FORMS`00912 X#define`009SMBMSG$V_SYM_NO_JOB_CHECKPOINT`00913 X#define`009SMBMSG$V_SYM_ALL_CHARACTERISTIC`00914 X#define`009SMBMSG$V_NOTIFY_ON_INTERRUPT`00915 X#define`009SMBMSG$M_DOUBLE_SPACE`0091 X#define`009SMBMSG$M_PAGE_HEADER`0092 X#define`009SMBMSG$M_PAGINATE`0094 X#define`009SMBMSG$M_PASSALL`0098 X#define`009SMBMSG$M_SEQUENCED`00916 X#define`009SMBMSG$M_SHEET_FEED`00932 X#define`009SMBMSG$M_TRUNCATE`00964 X#define`009SMBMSG$M_WRAP`009128 X#define`009SMBMSG$M_RECORD_BLOCKING`009256 X#define`009SMBMSG$M_PAGE_FOOTER`009512 X#define`009SMBMSG$M_DELETE_FILE`0091024 X#define`009SMBMSG$M_LOWERCASE_EXPLICIT`0092048 X#define`009SMBMSG$M_NOTIFY`0094096 X#define`009SMBMSG$M_RESTART`0098192 X#define`009SMBMSG$M_JOB_RETAIN`00916384 X#define`009SMBMSG$M_JOB_ERROR_RETAIN`00932768 X#define`009SMBMSG$S_PRINT_CONTROL`0094 X#define`009SMBMSG$L_PRINT_FLAGS`0090 X#define`009SMBMSG$V_DOUBLE_SPACE`0090 X#define`009SMBMSG$V_PAGE_HEADER`0091 X#define`009SMBMSG$V_PAGINATE`0092 X#define`009SMBMSG$V_PASSALL`0093 X#define`009SMBMSG$V_SEQUENCED`0094 X#define`009SMBMSG$V_SHEET_FEED`0095 X#define`009SMBMSG$V_TRUNCATE`0096 X#define`009SMBMSG$V_WRAP`0097 X#define`009SMBMSG$V_RECORD_BLOCKING`0098 X#define`009SMBMSG$V_PAGE_FOOTER`0099 X#define`009SMBMSG$V_DELETE_FILE`00910 X#define`009SMBMSG$V_LOWERCASE_EXPLICIT`00911 X#define`009SMBMSG$V_NOTIFY`00912 X#define`009SMBMSG$V_RESTART`00913 X#define`009SMBMSG$V_JOB_RETAIN`00914 X#define`009SMBMSG$V_JOB_ERROR_RETAIN`00915 X#define`009SMBMSG$M_ALIGNMENT_MASK`0091 X#define`009SMBMSG$M_PAUSE_COMPLETE`0092 X#define`009SMBMSG$M_RESTARTING`0094 X#define`009SMBMSG$M_TOP_OF_FILE`0098 X#define`009SMBMSG$S_REQUEST`0094 X#define`009SMBMSG$L_REQUEST_FLAGS`0090 X#define`009SMBMSG$V_ALIGNMENT_MASK`0090 X#define`009SMBMSG$V_PAUSE_COMPLETE`0091 X#define`009SMBMSG$V_RESTARTING`0092 X#define`009SMBMSG$V_TOP_OF_FILE`0093 X#define`009SMBMSG$M_FILE_BURST`0091 X#define`009SMBMSG$M_FILE_FLAG`0092 X#define`009SMBMSG$M_FILE_TRAILER`0094 X#define`009SMBMSG$M_FILE_TRAILER_ABORT`0098 X#define`009SMBMSG$M_JOB_FLAG`00916 X#define`009SMBMSG$M_JOB_BURST`00932 X#define`009SMBMSG$M_JOB_RESET`00964 X#define`009SMBMSG$M_JOB_RESET_ABORT`009128 X#define`009SMBMSG$M_JOB_TRAILER`009256 X#define`009SMBMSG$M_JOB_TRAILER_ABORT`009512 X#define`009SMBMSG$M_FIRST_FILE_OF_JOB`0091024 X#define`009SMBMSG$M_LAST_FILE_OF_JOB`0092048 X#define`009SMBMSG$S_SEPARATION_CONTROL`0094 X#define`009SMBMSG$L_SEPARATION_FLAGS`0090 X#define`009SMBMSG$V_FILE_BURST`0090 X#define`009SMBMSG$V_FILE_FLAG`0091 X#define`009SMBMSG$V_FILE_TRAILER`0092 X#define`009SMBMSG$V_FILE_TRAILER_ABORT`0093 X#define`009SMBMSG$V_JOB_FLAG`0094 X#define`009SMBMSG$V_JOB_BURST`0095 X#define`009SMBMSG$V_JOB_RESET`0096 X#define`009SMBMSG$V_JOB_RESET_ABORT`0097 X#define`009SMBMSG$V_JOB_TRAILER`0098 X#define`009SMBMSG$V_JOB_TRAILER_ABORT`0099 X#define`009SMBMSG$V_FIRST_FILE_OF_JOB`00910 X#define`009SMBMSG$V_LAST_FILE_OF_JOB`00911 X#define`009SMBMSG$M_RETAIN_JOB`0091 X#define`009SMBMSG$S_QUEUING_CONTROL`0094 X#define`009SMBMSG$L_QUEUING_FLAGS`0090 X#define`009SMBMSG$V_RETAIN_JOB`0090 X/* X * end of definitions created by GENDEF X */ $ GOSUB UNPACK_FILE $ EXIT