TMP.BCKOTMP.BCK&BACKUP PCX.B32,PCX.MAR,PCX_CMDIO.B32,PCX_CMDIO.MAR,ACCESS.B32,ACCESS.MAR,PCX_PARSE.B32,PCX_PARSE.MAR,FILEIO.B32,FILEIO.MAR,MISC.B32,MISC.MAR,PCX.R32,FIELDS.R32,BBLOCK.R32,ASMBUILD.COM,DESCRIP.MMS,PCX_CLD.CLD,PCX_CMD_CLD.CLD,PCX_MSG.MSG,PCX_HELP.RNH TMP.BCK/SAVE/BLOCK=2048/INTERCH/NOCRC/GROUP=0 MADISON ?^SV5.3 _MDMVS::   _MDMVS$DKA200: V5.3 *[PCX]PCX.B32;72+,.0/ 4M00J-#0123KPWO156bf7f89GHJ %TITLE 'PCX'%MODULE PCX (IDENT='V1.4', MAIN=PCX) =BEGIN!++! FACILITY: PCX! ! ABSTRACT:!<! PC Exchange: an EXCHANGE-type utility for PC-type disks.!! MODULE DESCRIPTION:!C! This module contains the routines that implement the MX Control ! Program.!! AUTHOR: M. MadisonF! COPYRIGHT 1989, 1990 RENSSELAER POLYTECHNIC INSTITUTE."! ALL RIGHTS RESERVED.!! CREATION DATE: 11-JUL-1990!! MODIFICATION HISTORY:!?! 11-JUL-1990 V1.0 Madison Initial coding (based on MCP).F! 26-JUL-1990 V1.1 Madison Improved handling of VMS STMxx files.F! 26-JUL-1990 V1.2 Madison FAT was being maintained incorrectly.J! 30-JUL-1990 V1.3 Madison Improve dir listings, add FILE_CLOSE_ALL.D! 31-JUL-1990 V1.3-1 Madison Fix minor problem in module MISC.I! 01-AUG-1990 V1.3-2 Madison Fix cluster-count confusion in ACCESS.J! 01-AUG-1990 V1.4 Madison Move READ, WRITE, DEL to separate module.!--" 0TMP.BCK#[PCX]PCX.B32;72M05 LIBRARY 'SYS$LIBRARY:STARLET'; LIBRARY 'PCX'; FORWARD ROUTINE PCX, PCX_HANDLER, EXIT_HANDLER, CMD_EXIT, CMD_HELP, CMD_SHOW, ALT_SHOW_OUTPUT, CMD_SET, CMD_DIRECTORY, CMD_FORMAT, CMD_CREDIR, CMD_SPAWN, CMD_ATTACH; EXTERNAL ROUTINE DISK_MOUNT, DISK_DISMOUNT, DISK_SEARCH, DISK_SCAN, DISK_GETLABEL, FORMAT_ENTRY, BUILD_PATH, FORMAT_DISK, DIR_CREATE, PCX_PARSE, GET_CMD, FILE_CLOSE_ALL, YES_ANSWER,D G_HAT (CLI$DCL_PARSE, CLI$GET_VALUE, CLI$DISPATCH, CLI$PRESENT, LBR$OUTPUT_HELP,< LIB$GET_FOREIGN, LIB$SPAWN, LIB$ATTACH, LIB$GETJPI,> LIB$PUT_OUTPUT, LIB$GET_VM, LIB$FREE_VM, LIB$SYS_FAO,= STR$FREE1_DX, STR$COPY_DX, STR$COPY_R, STR$POSITION,- STR$PREFIX, STR$APPEND, STR$CONCAT); EXTERNAL PCX_CMD_CLD, PCX_CLD; EXTERNAL LITERAL: CLI$_PRESENT, CLI$_ABSENT, CLI$_NEGATED, CLI$_NOCOMD,F PCX__NOOPNOUT, PCX__DIR, PCX__CMDERR, PCX__FSYNERR, PCX__READERR,; PCX__WRITERR, PCX__FMTCAN, PCX__EXISTS, PCX__SPAWNERR,- PCX__SPAWNED, PCX__SUBPERR, PCX__ATTERR; GLOBAL# IMAGE_PRIVS : VECTOR [2,LONG], DEFDIR : DIRDEF,* XDEFDIR : REF DIRDEF INITIAL (0); OWN SHOW_FAB : $FAB_DECL, SHOW_RAB : $RAB_DECL, FINAL_STATUS,* EXHBLK : VECTOR [4,LONG] PRESET (" [1] = EXIT_HANDLER, TMP.BCK#[PCX]PCX.B32;72M0 [2] = 1,# [3] = FINAL_STATUS); %SBTTL 'PCX'GLOBAL ROUTINE PCX =BEGIN!++! FUNCTIONAL DESCRIPTION:!! PCX main routine!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! PCX!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL% CMD : BLOCK [DSC$K_S_BLN,BYTE], PRCPRV : VECTOR [2,LONG],% JPILST : $ITMLST_DECL (ITEMS=2), STATUS; ENABLE PCX_HANDLER; $ITMLST_INIT (ITMLST=JPILST,5 (ITMCOD=JPI$_PROCPRIV, BUFADR=PRCPRV, BUFSIZ=8),; (ITMCOD=JPI$_IMAGPRIV, BUFADR=IMAGE_PRIVS, BUFSIZ=8)); $GETJPIW (ITMLST=JPILST);; IMAGE_PRIVS [0] = .IMAGE_PRIVS [0] AND NOT .PRCPRV [0];; IMAGE_PRIVS [1] = .IMAGE_PRIVS [1] AND NOT .PRCPRV [1];+ $SETPRV (PRVADR=IMAGE_PRIVS, ENBFLG=0); DISK_MOUNT (); $DCLEXH (DESBLK=EXHBLK); INIT_DYNDESC (CMD);# STATUS = LIB$GET_FOREIGN (CMD);1 IF .STATUS AND .CMD [DSC$W_LENGTH] GTR 0 THEN BEGIN$ STR$PREFIX (CMD, %ASCID'PCX ');H CLI$DCL_PARSE (CMD, PCX_CMD_CLD, LIB$GET_FOREIGN, LIB$GET_FOREIGN);7 IF CLI$PRESENT (%ASCID'CMD') EQL CLI$_PRESENT THEN) CLI$GET_VALUE (%ASCID'CMD', CMD) ELSE STR$FREE1_DX (CMD); END;% IF .CMD [DSC$W_LENGTH] GTR 0 THEN BEGINL STATUS = CLI$DCL_PARSE (CMD, PCX_CLD,TMP.BCK#[PCX]PCX.B32;72M0~  GET_CMD, GET_CMD, %ASCID'PCX> ');4 IF .STATUS EQL RMS$_EOF THEN RETURN SS$_NORMAL;( IF NOT .STATUS THEN RETURN .STATUS; RETURN CLI$DISPATCH (); END; WHILE 1 DO BEGINJ STATUS = CLI$DCL_PARSE (0, PCX_CLD, GET_CMD, GET_CMD, %ASCID'PCX> ');! IF .STATUS EQL RMS$_EOF THEN STATUS = CMD_EXIT () ELSE IF .STATUS THEN! STATUS = CLI$DISPATCH (); ELSE IF .STATUS NEQ CLI$_NOCOMD THEN SIGNAL (.STATUS);+ IF .STATUS EQL RMS$_EOF THEN EXITLOOP; END; STR$FREE1_DX (CMD); SS$_NORMAL END; ! PCX %SBTTL 'PCX_HANDLER'5GLOBAL ROUTINE PCX_HANDLER (SIG : REF VECTOR [,LONG],E MECH : REF VECTOR [,LONG], ENBL : REF VECTOR [,LONG]) =BEGIN!++! FUNCTIONAL DESCRIPTION:!! Condition handler for PCX.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! PCX_HANDLER!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BIND$ COND = SIG [1] : BLOCK [,BYTE]; EXTERNAL LITERAL CLI$_ABSENT, CLI$_NOCOMD; SELECTONE .COND OF SET9 [SS$_UNWIND, CLI$_ABSENT, CLI$_NOCOMD] : SS$_NORMAL; [OTHERWISE] : SS$_RESIGNAL; TESEND; %SBTTL 'EXIT_HANDLER'(ROUTINE EXIT_HANDLER (FINAL_STATUS_A) = BEGIN!++! FUNCTIONAL DESCRIPTION:!>! Exit handler: does a DISK_DISMOUNT to makeTMP.BCK#[PCX]PCX.B32;72M0 sure we release! the disk when we go.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! EXIT_HANDLER status_a!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- FILE_CLOSE_ALL (); DISK_DISMOUNT (); SS$_NORMALEND; ! EXIT_HANDLER %SBTTL 'CMD_EXIT'GLOBAL ROUTINE CMD_EXIT =BEGIN!++! FUNCTIONAL DESCRIPTION:!! PCX EXIT command.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:! ! CMD_EXIT!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- RMS$_EOFEND; ! CMD_EXIT %SBTTL 'CMD_HELP'GLOBAL ROUTINE CMD_HELP =BEGIN!++! FUNCTIONAL DESCRIPTION:!! PCX HELP command.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:! ! CMD_HELP!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL& TOPIC : BLOCK [DSC$K_S_BLN,BYTE], STATUS; $INIT_DYNDESC (TOPIC);9 STATUS = CLI$GET_VALUE (%ASCID'HELP_REQUEST', TOPIC);C LBR$OUTPUT_HELP (LIB$PUT_OUTPUT, 0, TOPIC, %ASCID'PCX_TMP.BCK#[PCX]PCX.B32;72M0GyHELPLIB',# %REF (HLP$M_PROMPT), GET_CMD); SS$_NORMALEND; ! CMD_HELP %SBTTL 'CMD_SHOW'GLOBAL ROUTINE CMD_SHOW =BEGIN!++! FUNCTIONAL DESCRIPTION:!! PCX SHOW command.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:! ! CMD_SHOW!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- TABLE (OPTIONS, 'PATH'); LOCAL% STR : BLOCK [DSC$K_S_BLN,BYTE], OUTRTN, OPT, STATUS; $INIT_DYNDESC (STR);) CLI$GET_VALUE (%ASCID'SHOWOPT', STR);. OPT = (INCR I FROM 0 TO OPTIONS_COUNT-1 DOF IF STR$POSITION (.OPTIONS [.I], STR) EQL 1 THEN EXITLOOP .I); OUTRTN = LIB$PUT_OUTPUT;9 IF CLI$PRESENT (%ASCID'OUTPUT') EQL CLI$_PRESENT THEN BEGIN) CLI$GET_VALUE (%ASCID'OUTPUT', STR);7 $FAB_INIT (FAB=SHOW_FAB, FNA=.STR [DSC$A_POINTER],, FNS=MIN (.STR [DSC$W_LENGTH], 255),= DNM='SYS$DISK:[].DAT', FAC=PUT, SHR=SHRPUT, RAT=CR);% STATUS = $CREATE (FAB=SHOW_FAB); IF .STATUS THEN BEGIN0 $RAB_INIT (RAB=SHOW_RAB, FAB=SHOW_FAB);* STATUS = $CONNECT (RAB=SHOW_RAB);1 IF .STATUS THEN OUTRTN = ALT_SHOW_OUTPUTJ ELSE SIGNAL (PCX__NOOPNOUT, STR, .STATUS, .SHOW_RAB [RAB$L_STV]); ENDF ELSE SIGNAL (PCX__NOOPNOUT, STR, .STATUS, .SHOW_FAB [FAB$L_STV]); END;4 TMP.BCK#[PCX]PCX.B32;72M0IF (.OUTRTN EQLA LIB$PUT_OUTPUT) OR .STATUS THEN SELECT .OPT OF SET [0] : BEGIN% BUILD_PATH (.XDEFDIR, STR); (.OUTRTN) (STR); END;( [ALWAYS] : (.OUTRTN) (%ASCID''); TES;M IF (.OUTRTN EQLA ALT_SHOW_OUTPUT) AND .STATUS THEN $CLOSE (FAB=SHOW_FAB); STR$FREE1_DX (STR); SS$_NORMALEND; ! CMD_SHOW %SBTTL 'ALT_SHOW_OUTPUT'!ROUTINE ALT_SHOW_OUTPUT (STR_A) =BEGIN!++! FUNCTIONAL DESCRIPTION:!?! Alternate output routine for SHOW commands. Used only when3! output is redirected via the /OUTPUT qualifier.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! ALT_SHOW_OUTPUT!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! RMS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BIND" STR = .STR_A : BLOCK [,BYTE];0 SHOW_RAB [RAB$L_RBF] = .STR [DSC$A_POINTER];/ SHOW_RAB [RAB$W_RSZ] = .STR [DSC$W_LENGTH]; $PUT (RAB=SHOW_RAB)END; ! ALT_SHOW_OUTPUT %SBTTL 'CMD_DIRECTORY'GLOBAL ROUTINE CMD_DIRECTORY = BEGIN!++! FUNCTIONAL DESCRIPTION:!! DIRECTORY command.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! CMD_DIRECTORY!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SITMP.BCK#[PCX]PCX.B32;72M0`DE EFFECTS:! ! None.!-- LOCAL( STR : BLOCK [DSC$K_S_BLN,BYTE],* FNAME : BLOCK [DSC$K_S_BLN,BYTE],* FTYPE : BLOCK [DSC$K_S_BLN,BYTE], DIRQUE : QUEDEF, PTH : REF PTHDEF, XDIR : REF DIRDEF, DIRENT : DIRDEF, CURDIR : DIRDEF, SCAN_CTX, FILE_COUNT, SIZE_TOTAL, WILD, STATUS, OUTRTN; INIT_QUEUE (DIRQUE);% INIT_DYNDESC (FNAME, FTYPE, STR);& CLI$GET_VALUE (%ASCID'PATH', STR);9 STATUS = PCX_PARSE (STR, DIRQUE, FNAME, FTYPE, WILD); IF NOT .STATUS THEN BEGIN& SIGNAL (PCX__CMDERR, 0, .STATUS);& FREE_STRINGS (FNAME, FTYPE, STR);C WHILE NOT REMQUE (.DIRQUE [QUE_L_HEAD], PTH) DO FREEPTH (PTH); RETURN SS$_NORMAL; END; OUTRTN = LIB$PUT_OUTPUT;9 IF CLI$PRESENT (%ASCID'OUTPUT') EQL CLI$_PRESENT THEN BEGIN) CLI$GET_VALUE (%ASCID'OUTPUT', STR);7 $FAB_INIT (FAB=SHOW_FAB, FNA=.STR [DSC$A_POINTER],, FNS=MIN (.STR [DSC$W_LENGTH], 255),= DNM='SYS$DISK:[].DAT', FAC=PUT, SHR=SHRPUT, RAT=CR);% STATUS = $CREATE (FAB=SHOW_FAB); IF .STATUS THEN BEGIN0 $RAB_INIT (RAB=SHOW_RAB, FAB=SHOW_FAB);* STATUS = $CONNECT (RAB=SHOW_RAB);1 IF .STATUS THEN OUTRTN = ALT_SHOW_OUTPUTJ ELSE SIGNAL (PCX__NOOPNOUT, STR, .STATUS, .SHOW_RAB [RAB$L_STV]); ENDF ELSE SIGNAL (PCX__NOOPNOUT, STR, .STATUS, .SHOW_FAB [FAB$L_STV]); END;= XDIR = (IF CH$RCHAR (. TMP.BCK#[PCX]PCX.B32;72M0vSTR [DSC$A_POINTER]) NEQ %C'\' THEN .XDEFDIR ELSE 0);3 WHILE NOT REMQUE (.DIRQUE [QUE_L_HEAD], PTH) DO BEGIN9 STR$COPY_R (STR, PTH [PTH_W_LEN], PTH [PTH_T_NAME]); FREEPTH (PTH);9 STATUS = DISK_SEARCH (.XDIR, STR, %ASCID'', DIRENT); IF NOT .STATUS THEN BEGIN. SIGNAL (PCX__CMDERR, 0, PCX__DIR, 0);* FREE_STRINGS (STR, FNAME, FTYPE);G WHILE NOT REMQUE (.DIRQUE [QUE_L_HEAD], PTH) DO FREEPTH (PTH);; IF (.OUTRTN EQLA ALT_SHOW_OUTPUT) AND .STATUS THEN $CLOSE (FAB=SHOW_FAB); RETURN SS$_NORMAL; END;, CH$MOVE (DIR_S_DIRDEF, DIRENT, CURDIR); XDIR = CURDIR; END;$ STATUS = DISK_GETLABEL (DIRENT); IF .STATUS THEN BEGIN FORMAT_ENTRY (DIRENT, STR); (.OUTRTN) (STR); (.OUTRTN) (%ASCID''); END;5 IF NOT .WILD AND .FTYPE [DSC$W_LENGTH] EQL 0 THEN' IF .FNAME [DSC$W_LENGTH] EQL 0 THEN BEGIN$ STR$COPY_DX (FNAME, %ASCID'*');$ STR$COPY_DX (FTYPE, %ASCID'*'); WILD = 1; END ELSE BEGIN8 STATUS = DISK_SEARCH (.XDIR, FNAME, FTYPE, DIRENT);2 IF .STATUS AND .DIRENT [DIR_V_DIRECTORY] THEN BEGIN0 CH$MOVE (DIR_S_DIRDEF, DIRENT, CURDIR); XDIR = CURDIR;( STR$COPY_DX (FNAME, %ASCID'*');( STR$COPY_DX (FTYPE, %ASCID'*'); WILD = 1; END; END; BUILD_PATH (.XDIR, STR);) STR$PREFIX (STR, %ASCID'Directory '); (.OUTRTN) (STR); (.OUTRTN TMP.BCK#[PCX]PCX.B32;72M0) (%ASCID''); FILE_COUNT = SIZE_TOTAL = 0; SCAN_CTX = 0;> WHILE DISK_SCAN (SCAN_CTX, .XDIR, FNAME, FTYPE, DIRENT) DO BEGIN" FILE_COUNT = .FILE_COUNT + 1;H IF NOT (.DIRENT [DIR_V_VOLLABEL] OR .DIRENT [DIR_V_DIRECTORY]) THEN: SIZE_TOTAL = .SIZE_TOTAL + .DIRENT [DIR_L_FSIZE]; FORMAT_ENTRY (DIRENT, STR); (.OUTRTN) (STR); END;D LIB$SYS_FAO (%ASCID'!/!UL file!%S listed, !UL byte!%S.', 0, STR, .FILE_COUNT, .SIZE_TOTAL); (.OUTRTN) (STR);% FREE_STRINGS (FNAME, FTYPE, STR);A IF (.OUTRTN EQLA ALT_SHOW_OUTPUT) THEN $CLOSE (FAB=SHOW_FAB); SS$_NORMALEND; ! CMD_DIRECTORY %SBTTL 'CMD_SET'GLOBAL ROUTINE CMD_SET = BEGIN!++! FUNCTIONAL DESCRIPTION:!! SET command.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:! ! CMD_SET!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- TABLE (OPTIONS, 'PATH'); LOCAL DIRENT : DIRDEF, CURDIR : DIRDEF, XDIR : REF DIRDEF, PTH : REF PTHDEF, DIRQUE : QUEDEF,& FNAME : BLOCK [DSC$K_S_BLN,BYTE],& FTYPE : BLOCK [DSC$K_S_BLN,BYTE],% STR : BLOCK [DSC$K_S_BLN,BYTE], WILD, OPT, STATUS;% INIT_DYNDESC (STR, FNAME, FTYPE);( CLI$GET_VALUE (%ASCID'SETOPT', STR);. OPT = (INCR I FROM 0 TO OPTIONS_COUNT- TMP.BCK#[PCX]PCX.B32;72M0O1 DOF IF STR$POSITION (.OPTIONS [.I], STR) EQL 1 THEN EXITLOOP .I);* CASE .OPT FROM 0 TO OPTIONS_COUNT-1 OF SET [0] : BEGIN INIT_QUEUE (DIRQUE);+ CLI$GET_VALUE (%ASCID'PATH', STR);> STATUS = PCX_PARSE (STR, DIRQUE, FNAME, FTYPE, WILD); IF .STATUS THEN BEGINC IF .FTYPE [DSC$W_LENGTH] GTR 0 THEN STATUS = PCX__FSYNERR2 ELSE IF .FNAME [DSC$W_LENGTH] GTR 0 THEN BEGIN GETPTH (PTH);6 PTH [PTH_W_LEN] = .FNAME [DSC$W_LENGTH];E CH$MOVE (.FNAME [DSC$W_LENGTH], .FNAME [DSC$A_POINTER],! PTH [PTH_T_NAME]);2 INSQUE (.PTH, .DIRQUE [QUE_L_TAIL]); END; END; IF NOT .STATUS THEN* SIGNAL (PCX__CMDERR, 0, .STATUS) ELSE BEGINC XDIR = (IF CH$RCHAR (.STR [DSC$A_POINTER]) NEQ %C'\' THEN .XDEFDIR ELSE 0);9 WHILE NOT REMQUE (.DIRQUE [QUE_L_HEAD], PTH) DO BEGINB STR$COPY_R (STR, PTH [PTH_W_LEN], PTH [PTH_T_NAME]); FREEPTH (PTH);B STATUS = DISK_SEARCH (.XDIR, STR, %ASCID'', DIRENT);! IF NOT .STATUS THEN BEGIN4 SIGNAL (PCX__CMDERR, 0, PCX__DIR, 0); EXITLOOP; END;5 CH$MOVE (DIR_S_DIRDEF, DIRENT, CURDIR); XDIR = CURDIR; END; IF .STATUS THEN* IF .XDIR EQLA 0 THEN X TMP.BCK#[PCX]PCX.B32;72M0!DEFDIR = 0@ ELSE IF .CURDIR [DIR_W_CLUSTER] EQL 0 THEN XDEFDIR = 0 ELSE BEGIN5 CH$MOVE (DIR_S_DIRDEF, CURDIR, DEFDIR);p XDEFDIR = DEFDIR;N END; END;s END;e TES;B WHILE NOT REMQUE (.DIRQUE [QUE_L_HEAD], PTH) DO FREEPTH (PTH);% FREE_STRINGS (STR, FNAME, FTYPE);R SS$_NORMALEND; ! CMD_SET %SBTTL 'CMD_FORMAT'SGLOBAL ROUTINE CMD_FORMAT = BEGINL!++! FUNCTIONAL DESCRIPTION:Y!! FORMAT command.1!MB! RETURNS: cond_value, longword (unsigned), write only, by value!n ! PROTOTYPE:!d! CMD_FORMAT!i! IMPLICIT INPUTS: None.M!s! IMPLICIT OUTPUTS: None.i! ! COMPLETION CODES:J!12! SS$_NORMAL: normal successful completion.!S! SIDE EFFECTS:L!9 ! None.d!-- LOCALr% STR : BLOCK [DSC$K_S_BLN,BYTE];9 INIT_DYNDESC (STR);u: IF CLI$PRESENT (%ASCID'CONFIRM') NEQ CLI$_NEGATED THEN BEGIN  LOCAL DOIT : INITIAL (0);H LIB$PUT_OUTPUT (%ASCID'Warning! All data on disk will be erased.');2 DOIT = YES_ANSWER (%ASCID'Are you sure?', 0); IF NOT .DOIT THEN BEGIN! SIGNAL (PCX__FMTCAN, 0);  RETURN SS$_NORMAL;S END;C END;8 IF CLI$PRESENT (%ASCID'LABEL') EQL CLI$_PRESENT THEN( CLI$GET_VALUE (%ASCID'LABEL', STR); FORMAT_DISK (STR); FREE_STRINGS (STR);S SS$_NORMALEND; ! CMD_FORMAT_ L%SBTTL 'CMD_CREDIR'NGLOBAL ROUTINE CMD_CREDIR = BEGINI!++! FUNCTIONAL DES TMP.BCK#[PCX]PCX.B32;72M0$CRIPTION:P!E! Create a directory.F!_B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!$! CMD_CREDIR!L! IMPLICIT INPUTS: None.L!G! IMPLICIT OUTPUTS: None.A!C! COMPLETION CODES: !L2! SS$_NORMAL: normal successful completion.! ! SIDE EFFECTS:D!S ! None. !--O LOCALO) STR : BLOCK [DSC$K_S_BLN,BYTE],S* FNAME : BLOCK [DSC$K_S_BLN,BYTE],* FTYPE : BLOCK [DSC$K_S_BLN,BYTE], DIRQUE : QUEDEF,L PTH : REF PTHDEF,  DIRENT : DIRDEF,C PARENT : DIRDEF,X XPARENT : REF DIRDEF, WILD, BINARY, STATUS; INIT_QUEUE (DIRQUE);% INIT_DYNDESC (FNAME, FTYPE, STR); & CLI$GET_VALUE (%ASCID'PATH', STR);9 STATUS = PCX_PARSE (STR, DIRQUE, FNAME, FTYPE, WILD);; IF NOT .STATUS THENA BEGIN_& SIGNAL (PCX__CMDERR, 0, .STATUS);& FREE_STRINGS (FNAME, FTYPE, STR);C WHILE NOT REMQUE (.DIRQUE [QUE_L_HEAD], PTH) DO FREEPTH (PTH);  RETURN SS$_NORMAL;  END;. IF .WILD OR .FTYPE [DSC$W_LENGTH] GTR 0 OR# .FNAME [DSC$W_LENGTH] EQL 0 ORS5 CH$RCHAR (.FNAME [DSC$A_POINTER]) EQL %C'.' THENc BEGINl. SIGNAL (PCX__CMDERR, 0, PCX__FSYNERR, 0);& FREE_STRINGS (FNAME, FTYPE, STR);C WHILE NOT REMQUE (.DIRQUE [QUE_L_HEAD], PTH) DO FREEPTH (PTH);D RETURN SS$_NORMAL;  END;@ XPARENT = (IF CH$RCHAR (.STR [DSC$A_POINTER]) NEQ %C'\' THEN .XDEFDIR ELSE 0);C3 WHILE NOT REMQUETMP.BCK#[PCX]PCX.B32;72M0' (.DIRQUE [QUE_L_HEAD], PTH) DO, BEGINS9 STR$COPY_R (STR, PTH [PTH_W_LEN], PTH [PTH_T_NAME]);  FREEPTH (PTH); < STATUS = DISK_SEARCH (.XPARENT, STR, %ASCID'', PARENT);" IF NOT .STATUS THEN EXITLOOP; XPARENT = PARENT; END; IF NOT .STATUS THENP BEGINJ& SIGNAL (PCX__CMDERR, 0, .STATUS);& FREE_STRINGS (FNAME, FTYPE, STR); RETURN SS$_NORMAL;S END;= STATUS = DISK_SEARCH (.XPARENT, FNAME, %ASCID'', DIRENT); IF .STATUS THEN BEGIND SIGNAL (PCX__EXISTS, 0);E& FREE_STRINGS (FNAME, FTYPE, STR); RETURN SS$_NORMAL;S END;* STATUS = DIR_CREATE (.XPARENT, FNAME); IF NOT .STATUS THENX& SIGNAL (PCX__CMDERR, 0, .STATUS);% FREE_STRINGS (FNAME, FTYPE, STR);  SS$_NORMALEND; ! CMD_CREDIRL P%SBTTL 'CMD_SPAWN'GLOBAL ROUTINE CMD_SPAWN =BEGIN!++ ! FUNCTIONAL DESCRIPTION:D!CG! Spawns a subprocess (for non-CAPTIVE users). This routine attempts E! to mimic the SPAWN command in the VMS MAIL utility. It builds an;E! argument list from the command qualifiers and parameters and usesA;! CALLG to invoke LIB$SPAWN, which spawns the subprocess.N!B! RETURNS: cond_value, longword (unsigned), write only, by value!G ! PROTOTYPE:!% ! CMD_SPAWN! ! IMPLICIT INPUTS: None.E!! IMPLICIT OUTPUTS: None.(!! COMPLETION CODES:T!2! SS$_NORMAL: normal successful completion.!T! SIDE EFFECTS:D!E ! None.S!--) BUILTINS CALLG;$ LOCALT'TMP.BCK#[PCX]PCX.B32;72M0=l* CMDSTR : BLOCK [DSC$K_S_BLN,BYTE],)' INPSTR : BLOCK [DSC$K_S_BLN,BYTE],S' OUTSTR : BLOCK [DSC$K_S_BLN,BYTE],N' PRCNAM : BLOCK [DSC$K_S_BLN,BYTE],  FLAGS : BLOCK [4,BYTE], ARGLST : VECTOR [8],] NOWAIT, PID,C STATUS, PSTATUS; 2 INIT_DYNDESC (CMDSTR, INPSTR, OUTSTR, PRCNAM); FLAGS [0,0,32,0] = 0; ( CLI$GET_VALUE (%ASCID'CMD', CMDSTR);* CLI$GET_VALUE (%ASCID'INPUT', INPSTR);+ CLI$GET_VALUE (%ASCID'OUTPUT', OUTSTR);I, CLI$GET_VALUE (%ASCID'PROCESS', PRCNAM);# FLAGS [CLI$V_NOWAIT] = NOWAIT =S1 CLI$PRESENT (%ASCID'WAIT') EQL CLI$_NEGATED; L FLAGS [CLI$V_NOCLISYM] = CLI$PRESENT (%ASCID'SYMBOLS') EQL CLI$_NEGATED; FLAGS [CLI$V_NOLOGNAM] =: CLI$PRESENT (%ASCID'LOGICAL_NAMES') EQL CLI$_NEGATED; INCR I FROM 1 TO 7 DOR ARGLST [.I] = 0;N ARGLST [0] = 7;N( IF .CMDSTR [DSC$W_LENGTH] NEQ 0 THEN ARGLST [1] = CMDSTR;C( IF .INPSTR [DSC$W_LENGTH] NEQ 0 THEN ARGLST [2] = INPSTR;a( IF .OUTSTR [DSC$W_LENGTH] NEQ 0 THEN ARGLST [3] = OUTSTR;a ARGLST [4] = FLAGS; ( IF .PRCNAM [DSC$W_LENGTH] NEQ 0 THEN ARGLST [5] = PRCNAM; ARGLST [6] = PID;: ARGLST [7] = PSTATUS;T' STATUS = CALLG (ARGLST, LIB$SPAWN); IF NOT .STATUS THENa' SIGNAL (PCX__SPAWNERR, 0, .STATUS)C ELSE IF .NOWAIT THEN BEGIN< LIB$GETJPI (%REF (JPI$_PRCNAM), PID, 0, 0, PRCNAM);0 SIGNAL (PCX__SPAWNED, 2, PRCNAM, .PID); END ELSE TMP.BCK#[PCX]PCX.B32;72M0- IF NOT .PSTATUS THEN- SIGNAL (PCX__SUBPERR, 0, .PSTATUS);c2 FREE_STRINGS (CMDSTR, INPSTR, OUTSTR, PRCNAM); SS$_NORMALEND; ! CMD_SPAWN %SBTTL 'CMD_ATTACH'eGLOBAL ROUTINE CMD_ATTACH =oBEGIN!++O! FUNCTIONAL DESCRIPTION:S!O+! Attaches to another process in the job.E! This routine attempts to mimic the ATTACH command in the VMS MAILI ! utility.!MB! RETURNS: cond_value, longword (unsigned), write only, by value!P ! PROTOTYPE:!C! CMD_ATTACH!! IMPLICIT INPUTS: None.l!w! IMPLICIT OUTPUTS: None. !v! COMPLETION CODES::!2! SS$_NORMAL: normal successful completion.!M! SIDE EFFECTS:o! ! None.P!--N LOCAL' PIDSTR : BLOCK [DSC$K_S_BLN,BYTE],c PID, STATUS;9 IF CLI$PRESENT (%ASCID'PARENT') EQL CLI$_PRESENT THEN[ BEGIN,8 STATUS = LIB$GETJPI (%REF (JPI$_OWNER), 0, 0, PID); IF NOT .STATUS THEN BEGIN* SIGNAL (PCX__ATTERR, 0, .STATUS); RETURN SS$_NORMAL;_ END; END > ELSE IF CLI$PRESENT (%ASCID'PRCNAM') EQL CLI$_PRESENT THEN BEGINL $INIT_DYNDESC (PIDSTR);, CLI$GET_VALUE (%ASCID'PRCNAM', PIDSTR);; STATUS = LIB$GETJPI (%REF (JPI$_PID), 0, PIDSTR, PID);u STR$FREE1_DX (PIDSTR);  IF NOT .STATUS THEN BEGIN* SIGNAL (PCX__ATTERR, 0, .STATUS); RETURN SS$_NORMAL;e END;O ENDC ELSE RETURN SS$_NORMAL;  STATUS = LIB$ATTACH (PID); IF NOT .STATUS THEN& SIGNAL (PCX__ATTMP.BCK#[PCX]PCX.B32;72M0\,0TERR, 0, .STATUS); SS$_NORMALEND; ! CMD_ATTACH ENDSELUDOM, OUTRTN, OPT, STATUS; $INIT_DYNDESC (STR);) CLI$GET_VALUE (%ASCID'SHOWOPT', STR);. OPT = (INCR I FROM 0 TO OPTIONS_COUNT-1 DOF IF STR$POSITION (.OPTIONS [.I], STR) EQL 1 THEN EXITLOOP .I); OUTRTN = LIB$PUT_OUTPUT;9 IF CLI$PRESENT (%ASCID'OUTPUT') EQL CLI$_PRESENT THEN BEGIN) CLI$GET_VALUE (%ASCID'OUTPUT', STR);7 $FAB_INIT (FAB=SHOW_FAB, FNA=.STR [DSC$A_POINTMP.BCK#[PCX]PCX.MAR;1hT*[PCX]PCX.MAR;1+,.T/ 4hTR-#0123KPWOU56`Ym7 袞m89GHJ .TITLE PCX PCX .IDENT \V1.4\ .PSECT $GLOBAL$,NOEXE,2 IMAGE_PRIVS:: .BLKB 8DEFDIR::.BLKB 32 XDEFDIR:: .LONG 0 ; .PSECT $OWN$,NOEXE,2 ;SHOW_FABU.17: .BLKB 80 ;SHOW_RABU.18: .BLKB 68 ;FINAL_STATUSU.19: .BLKB 4;EXHBLKU.20: .BYTE 0[4] ; .ADDRESS U.3 ; .LONG 1 ; .ADDRESS U.19 ; .PSECT $PLIT$,NOWRT,NOEXE,2P.AAB: .ASCII \PCX \ ;P.AAA: .LONG 17694724 ; .ADDRESS P.AAB ;P.AAD: .ASCII \CMD\<0> ;P.AAC: .LONG 17694723 ; .ADDRESS P.AAD ;P.AAF: .ASCII \CMD\<0> ;P.AAE: .LONG 17694723 ; .ADDRESS P.AAF ;&P.AAH: .ASCII \PCX> \<0><0><0> ;P.AAG: .LONG 17694725 ; .ADDRESS P.AAH ;&P.AAJ: .ASCII \PCX> \<0><0><0> ;P.AAI: .LONG 17694725 ; .ADDRESS P.AAJ ;c .EXTRN DISK_MOUNT, DISK_DISMOUNT, DISK_SEARCH, DISK_SCAN, DISK_GETLABEL, FORMAT_ENTRY, BUILD_PATH_ .EXTRN FORMAT_DISK, DIR_CREATE, PCX_PARSE, GET_CMD, FILE_CLOSE_ALL, YES_ANSWER, CLI$DCL_PARSE^ .EXTRN CLI$GET_VALUE, CLI$DISPATCH, CLI$PRESENT, LBR$OUTPUT_HELP, LIB$GET_FOREIGN, LIB$SPAWNc .EXTRN LIB$ATTACH, LIB$GETJPI, LIB$PUT_OUTPUT, LIB$GET_VM, LIB$FREE_VM, LIB$SYS_FAO, STR$FREE1_DX_ .EXTRN STR$COPY_DX, STR$COPY_R, STR$POSITION, STR$PREFIX, STR$APPEND, STR$CONCAT, PCX_CMD_CLD_ .EXTRN PCX_CLD, CLI$_PRESENT, CLI$_ABSENT, CLI$_NEGATED, CLI$_NOCOMD, PCX__NOOPNOUT, PCX__DIRg .EXTRN PCX__CMDERR, PCX__FSYNERRTMP.BCK#[PCX]PCX.MAR;1hT8j, PCX__READERR, PCX__WRITERR, PCX__FMTCAN, PCX__EXISTS, PCX__SPAWNERRU .EXTRN PCX__SPAWNED, PCX__SUBPERR, PCX__ATTERR, SYS$GETJPIW, SYS$SETPRV, SYS$DCLEXH .PSECT $CODE$,NOWRT,2U.1:O .ENTRY PCX, ^M ;PCX, Save R2,R3,R4,R5,R6,R7,R8,R90 MOVAB W^IMAGE_PRIVS, R9 ;IMAGE_PRIVS, R92 MOVAB G^CLI$DISPATCH, R8 ;CLI$DISPATCH, R8) MOVAB W^GET_CMD, R7 ;GET_CMD, R72 MOVAB G^STR$FREE1_DX, R6 ;STR$FREE1_DX, R6% MOVAB W^P.AAA, R5 ;P.AAA, R54 MOVAB G^CLI$DCL_PARSE, R4 ;CLI$DCL_PARSE, R48 MOVAB G^LIB$GET_FOREIGN, R3 ;LIB$GET_FOREIGN, R3 SUBL2 #44, SP ;#44, SP# MOVAL 10$, (FP) ;10$, (FP), MOVAB (SP), R0 ;JPILST, $$ITMBLKPTR9 MOVL #33816584, (R0)+ ;#33816584, ($$ITMBLKPTR)+4 MOVAB 28(SP), (R0)+ ;PRCPRV, ($$ITMBLKPTR)+% CLRL (R0)+ ;($$ITMBLKPTR)+9 MOVL #68354056, (R0)+ ;#68354056, ($$ITMBLKPTR)+7 MOVAB (R9), (R0)+ ;IMAGE_PRIVS, ($$ITMBLKPTR)+% CLRQ (R0)+ ;($$ITMBLKPTR)+ CLRQ -(SP) ;-(SP) CLRL -(SP) ;-(SP) PUSHAB 12(SP) ;JPILST CLRQ -(SP) ;-(SP) CLRL -(SP) ;-(SP)0 CALLS #7, G^SYS$GETJPIW ;#7, SYS$GETJPIW0 BICL2 28(SP), (R9) ;PRCPRV, IMAGE_PRIVS5 BICL2 32(SP), 4(R9) ;PRCPRV+4, IMAGE_PRIVS+4 CLRQ -(SP) ;-(SP) PUSHL R9 ;R9 CLRL -(SP) ;-(SP). CALLS #4, G^SYS$SETPRV ;#4, SYS$SETPRV. CALLS #0, W^DISK_MOUNT ;#0, DITMP.BCK#[PCX]PCX.MAR;1hTfSK_MOUNT PUSHAB W^U.20 ;U.20. CALLS #1, G^SYS$DCLEXH ;#1, SYS$DCLEXH/ MOVL #34471936, 36(SP) ;#34471936, CMD CLRL 40(SP) ;CMD+4 PUSHAB 36(SP) ;CMD, CALLS #1, (R3) ;#1, LIB$GET_FOREIGN" MOVL R0, R2 ;R0, STATUS" BLBC R2, 2$ ;STATUS, 2$ TSTW 36(SP) ;CMD BEQL 2$ ;2$ PUSHL R5 ;R5 PUSHAB 40(SP) ;CMD. CALLS #2, G^STR$PREFIX ;#2, STR$PREFIX PUSHL R3 ;R3 PUSHL R3 ;R3) PUSHAB W^PCX_CMD_CLD ;PCX_CMD_CLD PUSHAB 48(SP) ;CMD* CALLS #4, (R4) ;#4, CLI$DCL_PARSE PUSHAB 12(R5) ;P.AAC0 CALLS #1, G^CLI$PRESENT ;#1, CLI$PRESENT2 CMPL R0, #CLI$_PRESENT ;R0, #CLI$_PRESENT BNEQ 1$ ;1$ PUSHAB 36(SP) ;CMD PUSHAB 24(R5) ;P.AAE4 CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUE BRB 2$ ;2$1$: PUSHAB 36(SP) ;CMD) CALLS #1, (R6) ;#1, STR$FREE1_DX2$: TSTW 36(SP) ;CMD BEQL 4$ ;4$ PUSHAB 40(R5) ;P.AAG PUSHL R7 ;R7 PUSHL R7 ;R7! PUSHAB W^PCX_CLD ;PCX_CLD PUSHAB 52(SP) ;CMD* CALLS #5, (R4) ;#5, CLI$DCL_PARSE" MOVL R0, R2 ;R0, STATUS) CMPL R2, #98938 ;STATUS, #98938 BEQL 9$ ;9$" BLBS R2, 3$ ;STATUS, 3$" MOVL R2, R0 ;STATUS, R0 RET ;,3$: CALLS #0, (R8) ;#0, CLI$DISPATCH RET ; 4$: PUSHAB 56TMP.BCK#[PCX]PCX.MAR;1hTs (R5) ;P.AAI PUSHL R7 ;R7 PUSHL R7 ;R7! PUSHAB W^PCX_CLD ;PCX_CLD CLRL -(SP) ;-(SP)* CALLS #5, (R4) ;#5, CLI$DCL_PARSE" MOVL R0, R2 ;R0, STATUS) CMPL R2, #98938 ;STATUS, #98938 BNEQ 5$ ;5$! CALLS #0, W^U.4 ;#0, U.4 BRB 6$ ;6$%5$: BLBC R2, 7$ ;STATUS, 7$) CALLS #0, (R8) ;#0, CLI$DISPATCH%6$: MOVL R0, R2 ;R0, STATUS BRB 8$ ;8$77$: CMPL R2, #CLI$_NOCOMD ;STATUS, #CLI$_NOCOMD BEQL 8$ ;8$ PUSHL R2 ;STATUS. CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL,8$: CMPL R2, #98938 ;STATUS, #98938 BNEQ 4$ ;4$ PUSHAB 36(SP) ;CMD) CALLS #1, (R6) ;#1, STR$FREE1_DX!9$: MOVL #1, R0 ;#1, R0 RET ;&10$: .WORD ^M<> ;Save nothing CLRL -(SP) ;-(SP) PUSHL SP ;SP) MOVQ 4(AP), -(SP) ;4(AP), -(SP)! CALLS #3, W^U.2 ;#3, U.2 RET ;;; Routine Size: 375 bytes, Routine Base: $CODE$ + 0000U.2:: .ENTRY PCX_HANDLER, ^M<> ;PCX_HANDLER, Save nothing) ADDL3 #4, 4(AP), R0 ;#4, SIG, R0' CMPL (R0), #2336 ;(R0), #2336 BEQL 1$ ;1$4 CMPL (R0), #CLI$_ABSENT ;(R0), #CLI$_ABSENT BEQL 1$ ;1$4 CMPL (R0), #CLI$_NOCOMD ;(R0), #CLI$_NOCOMD BNEQ 2$ ;2$!1$: MOVL #1, R0 ;#1, R0 RET ;&2$: MOVZWL #2328, R0 TMP.BCK#[PCX]PCX.MAR;1hT ;#2328, R0 RET ;:; Routine Size: 44 bytes, Routine Base: $CODE$ + 0177 ;EXIT_HANDLER&U.3: .WORD ^M<> ;Save nothing6 CALLS #0, W^FILE_CLOSE_ALL ;#0, FILE_CLOSE_ALL4 CALLS #0, W^DISK_DISMOUNT ;#0, DISK_DISMOUNT MOVL #1, R0 ;#1, R0 RET ;:; Routine Size: 16 bytes, Routine Base: $CODE$ + 01A3U.4:5 .ENTRY CMD_EXIT, ^M<> ;CMD_EXIT, Save nothing% MOVL #98938, R0 ;#98938, R0 RET ;:; Routine Size: 10 bytes, Routine Base: $CODE$ + 01B3 .PSECT $PLIT$,NOWRT,NOEXE,2%P.AAL: .ASCII \HELP_REQUEST\ ;P.AAK: .LONG 17694732 ; .ADDRESS P.AAL ;&P.AAN: .ASCII \PCX_HELPLIB\<0> ;P.AAM: .LONG 17694731 ; .ADDRESS P.AAN ; .PSECT $CODE$,NOWRT,2U.5:5 .ENTRY CMD_HELP, ^M<> ;CMD_HELP, Save nothing SUBL2 #12, SP ;#12, SP- MOVL #34471936, 4(SP) ;#34471936, _D CLRL 8(SP) ;_D+4 PUSHAB 4(SP) ;TOPIC PUSHAB W^P.AAK ;P.AAK4 CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUE! PUSHAB W^GET_CMD ;GET_CMD# MOVL #1, 4(SP) ;#1, 4(SP) PUSHAB 4(SP) ;4(SP) PUSHAB W^P.AAM ;P.AAM PUSHAB 16(SP) ;TOPIC CLRL -(SP) ;-(SP). PUSHAB G^LIB$PUT_OUTPUT ;LIB$PUT_OUTPUT8 CALLS #6, G^LBR$OUTPUT_HELP ;#6, LBR$OUTPUT_HELP MOVL #1, R0 ;#1, R0 RET ;:; Routine Size: 67 byteTMP.BCK#[PCX]PCX.MAR;1hTJs, Routine Base: $CODE$ + 01BD .PSECT $PLIT$,NOWRT,NOEXE,2P.AAP: .ASCII \PATH\ ;P.AAO: .LONG 17694724 ; .ADDRESS P.AAP ;;OPTIONSU.23: .ADDRESS P.AAO ;#P.AAR: .ASCII \SHOWOPT\<0> ;P.AAQ: .LONG 17694727 ; .ADDRESS P.AAR ;%P.AAT: .ASCII \OUTPUT\<0><0> ;P.AAS: .LONG 17694726 ; .ADDRESS P.AAT ;%P.AAV: .ASCII \OUTPUT\<0><0> ;P.AAU: .LONG 17694726 ; .ADDRESS P.AAV ;'P.AAW: .ASCII \SYS$DISK:[].DAT\ ; .BLKB 1P.AAY: .BLKB 0 ;P.AAX: .LONG 17694720 ; .ADDRESS P.AAY ;U.25= U.17U.26= U.18+ .EXTRN SYS$CREATE, SYS$CONNECT, SYS$CLOSE .PSECT $CODE$,NOWRT,2U.6:c .ENTRY CMD_SHOW, ^M ;6 MOVAB G^CLI$GET_VALUE, R11 ;CLI$GET_VALUE, R11' MOVAB W^P.AAQ, R10 ;P.AAQ, R10# MOVAB W^U.25, R9 ;U.25, R9 SUBL2 #4, SP ;#4, SP# PUSHL #34471936 ;#34471936 CLRL 4(SP) ;_D+4' PUSHR #^M ;#^M+ CALLS #2, (R11) ;#2, CLI$GET_VALUE CLRL R2 ;I1$: PUSHL SP ;SP' PUSHL -12(R10)[R2] ;OPTIONS[I]2 CALLS #2, G^STR$POSITION ;#2, STR$POSITION CMPL R0, #1 ;R0, #1 BNEQ 2$ ;2$ MOVL R2, R6 ;I, OPT BRB 3$ ;3$'2$: AOBLEQ #0, R2, 1$ ;#0, I, 1$ MNEGL #1, R6 TMP.BCK#[PCX]PCX.MAR;1hT{  ;#1, OPT=3$: MOVAB G^LIB$PUT_OUTPUT, R8 ;LIB$PUT_OUTPUT, OUTRTN PUSHAB 16(R10) ;P.AAS0 CALLS #1, G^CLI$PRESENT ;#1, CLI$PRESENT2 CMPL R0, #CLI$_PRESENT ;R0, #CLI$_PRESENT BNEQ 5$ ;5$ PUSHL SP ;SP PUSHAB 32(R10) ;P.AAU+ CALLS #2, (R11) ;#2, CLI$GET_VALUEB MOVC5 #0, (SP), #0, #80, (R9) ;#0, (SP), #0, #80, $RMS_PTR- MOVW #20483, (R9) ;#20483, $RMS_PTR. MOVW #257, 22(R9) ;#257, $RMS_PTR+22. MOVW #514, 30(R9) ;#514, $RMS_PTR+300 MOVL 4(SP), 44(R9) ;STR+4, $RMS_PTR+442 MOVAB 40(R10), 48(R9) ;P.AAW, $RMS_PTR+48 MOVZWL (SP), R0 ;STR, R0! CMPW R0, #255 ;R0, #255 BLEQU 4$ ;4$! MOVZBL #255, R0 ;#255, R0-4$: MOVB R0, 52(R9) ;R0, $RMS_PTR+52, MOVB #15, 53(R9) ;#15, $RMS_PTR+53 PUSHL R9 ;R9. CALLS #1, G^SYS$CREATE ;#1, SYS$CREATE" MOVL R0, R7 ;R0, STATUS" BLBC R7, 7$ ;STATUS, 7$C MOVC5 #0, (SP), #0, #68, 80(R9) ;#0, (SP), #0, #68, $RMS_PTR/ MOVW #17409, 80(R9) ;#17409, $RMS_PTR3 MOVAB (R9), 140(R9) ;SHOW_FAB, $RMS_PTR+60 PUSHAB 80(R9) ;SHOW_RAB0 CALLS #1, G^SYS$CONNECT ;#1, SYS$CONNECT" MOVL R0, R7 ;R0, STATUS" BLBC R7, 6$ ;STATUS, 6$% MOVAB W^U.7, R8 ;U.7, OUTRTN5$: BRB 9$ ;9$&6$: PUSHL 92(R9) ;SHOW_RAB+12 BRB 8$ ;8$&7$: PUSHL 12(R9) ;SHOW_FAB+128$: PUSHL TMP.BCK#[PCX]PCX.MAR;1hTR7 ;STATUS PUSHAB 8(SP) ;STR- PUSHL #PCX__NOOPNOUT ;#PCX__NOOPNOUT. CALLS #4, G^LIB$SIGNAL ;#4, LIB$SIGNAL99$: MOVAB G^LIB$PUT_OUTPUT, R0 ;LIB$PUT_OUTPUT, R0" CMPL R8, R0 ;OUTRTN, R0 BEQL 10$ ;10$$ BLBC R7, 12$ ;STATUS, 12$10$: TSTL R6 ;OPT BNEQ 11$ ;11$ PUSHL SP ;SP! PUSHL W^XDEFDIR ;XDEFDIR. CALLS #2, W^BUILD_PATH ;#2, BUILD_PATH PUSHL SP ;SP% CALLS #1, (R8) ;#1, (OUTRTN)"11$: PUSHAB 56(R10) ;P.AAX% CALLS #1, (R8) ;#1, (OUTRTN)%12$: MOVAB W^U.7, R0 ;U.7, R0" CMPL R8, R0 ;OUTRTN, R0 BNEQ 13$ ;13$$ BLBC R7, 13$ ;STATUS, 13$ PUSHL R9 ;R9- CALLS #1, G^SYS$CLOSE ;#1, SYS$CLOSE13$: PUSHL SP ;SP2 CALLS #1, G^STR$FREE1_DX ;#1, STR$FREE1_DX MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 321 bytes, Routine Base: $CODE$ + 0200 .EXTRN SYS$PUT;ALT_SHOW_OUTPUT&U.7: .WORD ^M<> ;Save nothing# MOVL 4(AP), R0 ;STR_A, R0. MOVL 4(R0), W^U.18+40 ;4(R0), U.18+40- MOVW (R0), W^U.18+34 ;(R0), U.18+34 PUSHAB W^U.18 ;U.18) CALLS #1, G^SYS$PUT ;#1, SYS$PUT RET ;:; Routine Size: 29 bytes, Routine Base: $CODE$ + 0341 .PSECT $PLIT$,NOWRT,NOEXE,2P.ABA: .ASCII \PATH\ ;P.AAZ: .LONG 17694724 ; .ADDRESS P.ABA ;%P.ABC:TMP.BCK#[PCX]PCX.MAR;1hTB .ASCII \OUTPUT\<0><0> ;P.ABB: .LONG 17694726 ; .ADDRESS P.ABC ;%P.ABE: .ASCII \OUTPUT\<0><0> ;P.ABD: .LONG 17694726 ; .ADDRESS P.ABE ;'P.ABF: .ASCII \SYS$DISK:[].DAT\ ; .BLKB 1P.ABH: .BLKB 0 ;P.ABG: .LONG 17694720 ; .ADDRESS P.ABH ;P.ABJ: .BLKB 0 ;P.ABI: .LONG 17694720 ; .ADDRESS P.ABJ ;#P.ABL: .ASCII \*\<0><0><0> ;P.ABK: .LONG 17694721 ; .ADDRESS P.ABL ;#P.ABN: .ASCII \*\<0><0><0> ;P.ABM: .LONG 17694721 ; .ADDRESS P.ABN ;#P.ABP: .ASCII \*\<0><0><0> ;P.ABO: .LONG 17694721 ; .ADDRESS P.ABP ;#P.ABR: .ASCII \*\<0><0><0> ;P.ABQ: .LONG 17694721 ; .ADDRESS P.ABR ;(P.ABT: .ASCII \Directory \<0><0> ;P.ABS: .LONG 17694730 ; .ADDRESS P.ABT ;P.ABV: .BLKB 0 ;P.ABU: .LONG 17694720 ; .ADDRESS P.ABV ;;P.ABX: .ASCII \!/!UL file!%S listed, !UL byte!%S.\<0><0> ;P.ABW: .LONG 17694754 ; .ADDRESS P.ABX ;U.30= U.17U.31= U.18 .PSECT $CODE$,NOWRT,2U.9:h .ENTRY CMD_DIRECTORY, ^M ;' MOVAB W^P.AAZ, R11 ;P.AAZ, R11% MOVAB W^U.30, R10 ;U.30, R102 MOVAB G^STR$FREE1_DX, R9 ;STR$FREE1_DX, R9) MOVAB -112(SP), SP ;-112(SP), SP MOVAB 80(SP), R0 ;QTMP.BCK#[PCX]PCX.MAR;1hT, R0 MOVL R0, 80(SP) ;R0, Q" MOVL R0, 84(SP) ;R0, Q+41 MOVL #34471936, 96(SP) ;#34471936, FNAME CLRL 100(SP) ;FNAME+41 MOVL #34471936, 88(SP) ;#34471936, FTYPE CLRL 92(SP) ;FTYPE+40 MOVL #34471936, 104(SP) ;#34471936, STR CLRL 108(SP) ;STR+4 PUSHAB 104(SP) ;STR PUSHL R11 ;R114 CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUE PUSHAB 4(SP) ;WILD PUSHAB 92(SP) ;FTYPE PUSHAB 104(SP) ;FNAME PUSHAB 92(SP) ;DIRQUE PUSHAB 120(SP) ;STR- CALLS #5, W^PCX_PARSE ;#5, PCX_PARSE" MOVL R0, R6 ;R0, STATUS" BLBS R6, 3$ ;STATUS, 3$ PUSHL R6 ;STATUS CLRL -(SP) ;-(SP)) PUSHL #PCX__CMDERR ;#PCX__CMDERR. CALLS #3, G^LIB$SIGNAL ;#3, LIB$SIGNAL PUSHAB 96(SP) ;FNAME) CALLS #1, (R9) ;#1, STR$FREE1_DX PUSHAB 88(SP) ;FTYPE) CALLS #1, (R9) ;#1, STR$FREE1_DX PUSHAB 104(SP) ;STR) CALLS #1, (R9) ;#1, STR$FREE1_DX.1$: REMQUE @80(SP), 8(SP) ;@DIRQUE, PTH BVC 2$ ;2$ BRW 27$ ;27$%2$: PUSHAB 8(SP) ;__FREEPTH_T% MOVL #20, 4(SP) ;#20, 4(SP) PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM BRB 1$ ;1$=3$: MOVAB G^LIB$PUT_OUTPUT, R8 ;LIB$PUT_OUTPUT, OUTRTN PUSHAB 16(R11) ;P.ABB0 CALLS #1, G^CLI$PRESENT ;#1, CLI$PRESENT2 CMPL R0, #CLTMP.BCK#[PCX]PCX.MAR;1hT I$_PRESENT ;R0, #CLI$_PRESENT BNEQ 5$ ;5$ PUSHAB 104(SP) ;STR PUSHAB 32(R11) ;P.ABD4 CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUEB MOVC5 #0, (SP), #0, #80, (R10) ;#0, (SP), #0, #80, $RMS_PTR. MOVW #20483, (R10) ;#20483, $RMS_PTR/ MOVW #257, 22(R10) ;#257, $RMS_PTR+22/ MOVW #514, 30(R10) ;#514, $RMS_PTR+302 MOVL 108(SP), 44(R10) ;STR+4, $RMS_PTR+442 MOVAB 40(R11), 48(R10) ;P.ABF, $RMS_PTR+48# MOVZWL 104(SP), R0 ;STR, R0! CMPW R0, #255 ;R0, #255 BLEQU 4$ ;4$! MOVZBL #255, R0 ;#255, R0.4$: MOVB R0, 52(R10) ;R0, $RMS_PTR+52- MOVB #15, 53(R10) ;#15, $RMS_PTR+53 PUSHL R10 ;R10. CALLS #1, G^SYS$CREATE ;#1, SYS$CREATE" MOVL R0, R6 ;R0, STATUS" BLBC R6, 7$ ;STATUS, 7$D MOVC5 #0, (SP), #0, #68, 80(R10) ;#0, (SP), #0, #68, $RMS_PTR0 MOVW #17409, 80(R10) ;#17409, $RMS_PTR5 MOVAB (R10), 140(R10) ;SHOW_FAB, $RMS_PTR+60X! PUSHAB 80(R10) ;SHOW_RABB0 CALLS #1, G^SYS$CONNECT ;#1, SYS$CONNECT" MOVL R0, R6 ;R0, STATUS" BLBC R6, 6$ ;STATUS, 6$% MOVAB W^U.7, R8 ;U.7, OUTRTN_5$: BRB 9$ ;9$N'6$: PUSHL 92(R10) ;SHOW_RAB+12. BRB 8$ ;8$'7$: PUSHL 12(R10) ;SHOW_FAB+12 8$: PUSHL R6 ;STATUS PUSHAB 112(SP) ;STR- PUSHL #PCX__NOOPNOUT ;#PCX__NOOPNOUT.. CALLS #4, G^LIB$SIGNAL ;#4, LIB$SIGNTMP.BCK#[PCX]PCX.MAR;1hTs"AL,9$: CMPB @108(SP), #92 ;@STR+4, #92 BEQL 10$ ;10$+ MOVL W^XDEFDIR, R7 ;XDEFDIR, XDIR\ BRB 11$ ;11$10$: CLRL R7 ;XDIR/11$: REMQUE @80(SP), 8(SP) ;@DIRQUE, PTH  BVC 12$ ;12$ BRW 18$ ;18$412$: ADDL3 #12, 8(SP), -(SP) ;#12, PTH, -(SP)/ ADDL3 #8, 12(SP), -(SP) ;#8, PTH, -(SP)A PUSHAB 112(SP) ;STR. CALLS #3, G^STR$COPY_R ;#3, STR$COPY_R" PUSHAB 8(SP) ;__FREEPTH_T% MOVL #20, 4(SP) ;#20, 4(SP)_ PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM PUSHAB 48(SP) ;DIRENT PUSHAB 56(R11) ;P.ABG PUSHAB 112(SP) ;STR PUSHL R7 ;XDIR0 CALLS #4, W^DISK_SEARCH ;#4, DISK_SEARCH" MOVL R0, R6 ;R0, STATUS$ BLBS R6, 17$ ;STATUS, 17$ CLRL -(SP) ;-(SP)# PUSHL #PCX__DIR ;#PCX__DIR$ CLRL -(SP) ;-(SP)) PUSHL #PCX__CMDERR ;#PCX__CMDERRX. CALLS #4, G^LIB$SIGNAL ;#4, LIB$SIGNAL PUSHAB 104(SP) ;STR) CALLS #1, (R9) ;#1, STR$FREE1_DX_ PUSHAB 96(SP) ;FNAMEI) CALLS #1, (R9) ;#1, STR$FREE1_DXE PUSHAB 88(SP) ;FTYPEX) CALLS #1, (R9) ;#1, STR$FREE1_DX /13$: REMQUE @80(SP), 8(SP) ;@DIRQUE, PTH  BVS 14$ ;14$" PUSHAB 8(SP) ;__FREEPTH_T% MOVL #20, 4(SP) ;#20, 4(SP)  PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM BRB 13$ ;13$%%TMP.BCK#[PCX]PCX.MAR;1hT0%14$: MOVAB W^U.7, R0 ;U.7, R0 " CMPL R8, R0 ;OUTRTN, R0 BEQL 16$ ;16$15$: BRW 27$ ;27$(16$: BLBC R6, 15$ ;STATUS, 15$ BRW 26$ ;26$:17$: MOVC3 #32, 48(SP), 16(SP) ;#32, DIRENT, CURDIR' MOVAB 16(SP), R7 ;CURDIR, XDIRB BRW 11$ ;11$"18$: PUSHAB 48(SP) ;DIRENT4 CALLS #1, W^DISK_GETLABEL ;#1, DISK_GETLABEL" MOVL R0, R6 ;R0, STATUS$ BLBC R6, 19$ ;STATUS, 19$ PUSHAB 104(SP) ;STR PUSHAB 52(SP) ;DIRENT2 CALLS #2, W^FORMAT_ENTRY ;#2, FORMAT_ENTRY PUSHAB 104(SP) ;STR% CALLS #1, (R8) ;#1, (OUTRTN)  PUSHAB 64(R11) ;P.ABI% CALLS #1, (R8) ;#1, (OUTRTN)W(19$: BLBS 4(SP), 22$ ;WILD, 22$ TSTW 88(SP) ;FTYPE) BNEQ 22$ ;22$ TSTW 96(SP) ;FNAME- BNEQ 20$ ;20$ PUSHAB 76(R11) ;P.ABK PUSHAB 100(SP) ;FNAME0 CALLS #2, G^STR$COPY_DX ;#2, STR$COPY_DX PUSHAB 88(R11) ;P.ABM BRB 21$ ;21$"20$: PUSHAB 48(SP) ;DIRENT PUSHAB 92(SP) ;FTYPE  PUSHAB 104(SP) ;FNAME PUSHL R7 ;XDIR0 CALLS #4, W^DISK_SEARCH ;#4, DISK_SEARCH" MOVL R0, R6 ;R0, STATUS$ BLBC R6, 22$ ;STATUS, 22$2 BBC #4, 59(SP), 22$ ;#4, DIRENT+11, 22$6 MOVC3 #32, 48(SP), 16(SP) ;#32, DIRENT, CURDIR' MOVAB 16(SP), R7 ;CURDIR, XDIR  PUSHAB 100(R11) ;P.ABO PUSHAB 100(SP) ;FTMP.BCK#[PCX]PCX.MAR;1hT(NAME0 CALLS #2, G^STR$COPY_DX ;#2, STR$COPY_DX PUSHAB 112(R11) ;P.ABQ!21$: PUSHAB 92(SP) ;FTYPEP0 CALLS #2, G^STR$COPY_DX ;#2, STR$COPY_DX" MOVL #1, 4(SP) ;#1, WILD 22$: PUSHAB 104(SP) ;STR PUSHL R7 ;XDIR. CALLS #2, W^BUILD_PATH ;#2, BUILD_PATH PUSHAB 132(R11) ;P.ABS PUSHAB 108(SP) ;STR. CALLS #2, G^STR$PREFIX ;#2, STR$PREFIX PUSHAB 104(SP) ;STR% CALLS #1, (R8) ;#1, (OUTRTN)1 PUSHAB 140(R11) ;P.ABU% CALLS #1, (R8) ;#1, (OUTRTN)4 CLRQ R2 ;SIZE_TOTAL CLRL 12(SP) ;SCAN_CTX"23$: PUSHAB 48(SP) ;DIRENT PUSHAB 92(SP) ;FTYPE PUSHAB 104(SP) ;FNAME PUSHL R7 ;XDIR PUSHAB 28(SP) ;SCAN_CTX- CALLS #5, W^DISK_SCAN ;#5, DISK_SCAN BLBC R0, 25$ ;R0, 25$ INCL R3 ;FILE_COUNT2 BBS #3, 59(SP), 24$ ;#3, DIRENT+11, 24$2 BBS #4, 59(SP), 24$ ;#4, DIRENT+11, 24$0 ADDL2 76(SP), R2 ;DIRENT+28, SIZE_TOTAL 24$: PUSHAB 104(SP) ;STR PUSHAB 52(SP) ;DIRENT2 CALLS #2, W^FORMAT_ENTRY ;#2, FORMAT_ENTRY PUSHAB 104(SP) ;STR% CALLS #1, (R8) ;#1, (OUTRTN), BRB 23$ ;23$"25$: PUSHL R2 ;SIZE_TOTAL PUSHL R3 ;FILE_COUNT PUSHAB 112(SP) ;STR CLRL -(SP) ;-(SP) PUSHAB 184(R11) ;P.ABW0 CALLS #5, G^LIB$SYS_FAO ;#5, LIB$SYS_FAO PUSHAB 104(SP) ;STR% CALLS #1, (R8)  TMP.BCK#[PCX]PCX.MAR;1hTj+ ;#1, (OUTRTN), PUSHAB 96(SP) ;FNAME ) CALLS #1, (R9) ;#1, STR$FREE1_DX  PUSHAB 88(SP) ;FTYPE$) CALLS #1, (R9) ;#1, STR$FREE1_DXS PUSHAB 104(SP) ;STR) CALLS #1, (R9) ;#1, STR$FREE1_DX#! MOVAB W^U.7, R0 ;U.7, R0$" CMPL R8, R0 ;OUTRTN, R0 BNEQ 27$ ;27$26$: PUSHL R10 ;R10- CALLS #1, G^SYS$CLOSE ;#1, SYS$CLOSE "27$: MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 837 bytes, Routine Base: $CODE$ + 035E  .PSECT $PLIT$,NOWRT,NOEXE,2$P.ABZ: .ASCII \PATH\ ;P.ABY: .LONG 17694724 ;H .ADDRESS P.ABZ ;;OPTIONSU.34: .ADDRESS P.ABY ;C%P.ACB: .ASCII \SETOPT\<0><0> ;P.ACA: .LONG 17694726 ;( .ADDRESS P.ACB ;P.ACD: .ASCII \PATH\ ;P.ACC: .LONG 17694724 ;C .ADDRESS P.ACD ;P.ACF: .BLKB 0 ;P.ACE: .LONG 17694720 ; .ADDRESS P.ACF ; .PSECT $CODE$,NOWRT,2 U.8:b .ENTRY CMD_SET, ^M ;D2 MOVL #PCX__CMDERR, R11 ;#PCX__CMDERR, R116 MOVAB G^CLI$GET_VALUE, R10 ;CLI$GET_VALUE, R10) MOVAB W^XDEFDIR, R9 ;XDEFDIR, R9,2 MOVAB G^STR$FREE1_DX, R8 ;STR$FREE1_DX, R8) MOVAB -108(SP), SP ;-108(SP), SP / MOVL #34471936, 12(SP) ;#34471936, STR  CLRL 16(SP) ;STR+41 MOVL #34471936, 28(SP) ;#34471936, FN!TMP.BCK#[PCX]PCX.MAR;1hTV.AME  CLRL 32(SP) ;FNAME+4e1 MOVL #34471936, 20(SP) ;#34471936, FTYPEC CLRL 24(SP) ;FTYPE+4: PUSHAB 12(SP) ;STR  PUSHAB W^P.ACA ;P.ACA+ CALLS #2, (R10) ;#2, CLI$GET_VALUE  CLRL R2 ;I;1$: PUSHAB 12(SP) ;STR" PUSHL W^U.34[R2] ;U.34[I]2 CALLS #2, G^STR$POSITION ;#2, STR$POSITION CMPL R0, #1 ;R0, #1 BEQL 2$ ;2$$ AOBLEQ #0, R2, 1$ ;#0, I, 1$ MNEGL #1, R2 ;#1, OPT #2$: MOVAB 36(SP), R0 ;Q, R0 MOVL R0, 36(SP) ;R0, Q" MOVL R0, 40(SP) ;R0, Q+4& CASEL R2, #0, #0 ;OPT, #0, #03$: .WORD 4$-3$ ;4$-3$ 4$: PUSHAB 12(SP) ;STR PUSHAB W^P.ACC ;P.ACC+ CALLS #2, (R10) ;#2, CLI$GET_VALUE  PUSHAB 4(SP) ;WILD  PUSHAB 24(SP) ;FTYPET PUSHAB 36(SP) ;FNAMEC PUSHAB 48(SP) ;DIRQUE PUSHAB 28(SP) ;STR - CALLS #5, W^PCX_PARSE ;#5, PCX_PARSE" MOVL R0, R7 ;R0, STATUS" BLBC R7, 7$ ;STATUS, 7$ TSTW 20(SP) ;FTYPE BEQL 5$ ;5$6 MOVL #PCX__FSYNERR, R7 ;#PCX__FSYNERR, STATUS BRB 6$ ;6$'5$: MOVZWL 28(SP), R2 ;FNAME, R2I BLEQ 6$ ;6$! PUSHAB 8(SP) ;__GETPTH_T% MOVL #20, 4(SP) ;#20, 4(SP)  PUSHAB 4(SP) ;4(SP). CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM! MOVL 8(SP), R6 ;PTH, R60# MOVL R2, 8(R6) ;R2, 8(R6) 7 MOVC3 R2, @32(SP), 12(R6) "TMP.BCK#[PCX]PCX.MAR;1hT1 ;R2, @FNAME+4, 12(R6)K- INSQUE (R6), @40(SP) ;(R6), @DIRQUE+4 %6$: BLBS R7, 8$ ;STATUS, 8$ 7$: PUSHL R7 ;STATUS CLRL -(SP) ;-(SP) PUSHL R11 ;R11. CALLS #3, G^LIB$SIGNAL ;#3, LIB$SIGNAL BRW 15$ ;15$+8$: CMPB @16(SP), #92 ;@STR+4, #92S BEQL 9$ ;9$& MOVL (R9), R6 ;XDEFDIR, XDIR BRB 10$ ;10$9$: CLRL R6 ;XDIRM/10$: REMQUE @36(SP), 8(SP) ;@DIRQUE, PTHW BVS 12$ ;12$0 ADDL3 #12, 8(SP), -(SP) ;#12, PTH, -(SP)/ ADDL3 #8, 12(SP), -(SP) ;#8, PTH, -(SP) PUSHAB 20(SP) ;STR;. CALLS #3, G^STR$COPY_R ;#3, STR$COPY_R" PUSHAB 8(SP) ;__FREEPTH_T% MOVL #20, 4(SP) ;#20, 4(SP)2 PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM PUSHAB 76(SP) ;DIRENT PUSHAB W^P.ACE ;P.ACE PUSHAB 20(SP) ;STRB PUSHL R6 ;XDIR0 CALLS #4, W^DISK_SEARCH ;#4, DISK_SEARCH" MOVL R0, R7 ;R0, STATUS$ BLBS R7, 11$ ;STATUS, 11$ CLRL -(SP) ;-(SP)# PUSHL #PCX__DIR ;#PCX__DIRT CLRL -(SP) ;-(SP) PUSHL R11 ;R11. CALLS #4, G^LIB$SIGNAL ;#4, LIB$SIGNAL BRB 12$ ;12$:11$: MOVC3 #32, 76(SP), 44(SP) ;#32, DIRENT, CURDIR' MOVAB 44(SP), R6 ;CURDIR, XDIRR BRB 10$ ;10$(12$: BLBC R7, 15$ ;STATUS, 15$ TSTL R6 ;XDIR BEQL 13$ ;13$! TSTW 70(SP) #TMP.BCK#[PCX]PCX.MAR;1hTo4 ;CURDIR+26  BNEQ 14$ ;14$!13$: CLRL (R9) ;XDEFDIR, BRB 15$ ;15$;14$: MOVC3 #32, 44(SP), -32(R9) ;#32, CURDIR, DEFDIR - MOVAB -32(R9), (R9) ;DEFDIR, XDEFDIR/15$: REMQUE @36(SP), 8(SP) ;@DIRQUE, PTH# BVS 16$ ;16$" PUSHAB 8(SP) ;__FREEPTH_T% MOVL #20, 4(SP) ;#20, 4(SP)3 PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM BRB 15$ ;15$16$: PUSHAB 12(SP) ;STRS) CALLS #1, (R8) ;#1, STR$FREE1_DX  PUSHAB 28(SP) ;FNAME) CALLS #1, (R8) ;#1, STR$FREE1_DX_ PUSHAB 20(SP) ;FTYPE ) CALLS #1, (R8) ;#1, STR$FREE1_DX  MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 420 bytes, Routine Base: $CODE$ + 06A3, .PSECT $PLIT$,NOWRT,NOEXE,28#P.ACH: .ASCII \CONFIRM\<0> ; P.ACG: .LONG 17694727 ;  .ADDRESS P.ACH ;CP.ACJ: .ASCII \Warning! All data on disk will be erased.\<0><0><0> ;P.ACI: .LONG 17694761 ;S .ADDRESS P.ACJ ;-P.ACL: .ASCII \Are you sure?\<0><0><0> ; P.ACK: .LONG 17694733 ;I .ADDRESS P.ACL ;&P.ACN: .ASCII \LABEL\<0><0><0> ;P.ACM: .LONG 17694725 ;  .ADDRESS P.ACN ;&P.ACP: .ASCII \LABEL\<0><0><0> ;P.ACO: .LONG 17694725 ; .ADDRESS P.ACP ; .PSECT $CODE$,NOWRT,2U.10: @ .ENTRY CMD_FORMAT, ^M ;CMD_FORMAT, Save R2,R3,R40 MOVAB G^CLI$P$TMP.BCK#[PCX]PCX.MAR;1hT7RESENT, R4 ;CLI$PRESENT, R4% MOVAB W^P.ACG, R3 ;P.ACG, R38 SUBL2 #4, SP ;#4, SP# PUSHL #34471936 ;#34471936  CLRL 4(SP) ;STR+4 PUSHL R3 ;R3( CALLS #1, (R4) ;#1, CLI$PRESENT2 CMPL R0, #CLI$_NEGATED ;R0, #CLI$_NEGATED BEQL 1$ ;1$ CLRL R2 ;DOIT PUSHAB 52(R3) ;P.ACI16 CALLS #1, G^LIB$PUT_OUTPUT ;#1, LIB$PUT_OUTPUT CLRL -(SP) ;-(SP) PUSHAB 76(R3) ;P.ACKC. CALLS #2, W^YES_ANSWER ;#2, YES_ANSWER MOVL R0, R2 ;R0, DOIT BLBS R2, 1$ ;DOIT, 1$ CLRL -(SP) ;-(SP)) PUSHL #PCX__FMTCAN ;#PCX__FMTCANM. CALLS #2, G^LIB$SIGNAL ;#2, LIB$SIGNAL BRB 3$ ;3$ 1$: PUSHAB 92(R3) ;P.ACM( CALLS #1, (R4) ;#1, CLI$PRESENT2 CMPL R0, #CLI$_PRESENT ;R0, #CLI$_PRESENT BNEQ 2$ ;2$ PUSHL SP ;SP PUSHAB 108(R3) ;P.ACO4 CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUE2$: PUSHL SP ;SP<0 CALLS #1, W^FORMAT_DISK ;#1, FORMAT_DISK PUSHL SP ;SP2 CALLS #1, G^STR$FREE1_DX ;#1, STR$FREE1_DX!3$: MOVL #1, R0 ;#1, R0. RET ;;; Routine Size: 132 bytes, Routine Base: $CODE$ + 08470 .PSECT $PLIT$,NOWRT,NOEXE,2 P.ACR: .ASCII \PATH\ ;P.ACQ: .LONG 17694724 ;O .ADDRESS P.ACR ;P.ACT: .BLKB 0 ;BP.ACS: .LONG 17694720 ; .ADDRESS P.ACT ;P.ACV: .BLKB 0 %TMP.BCK#[PCX]PCX.MAR;1hT$: ; P.ACU: .LONG 17694720 ;  .ADDRESS P.ACV ; .PSECT $CODE$,NOWRT,2BU.11:;Q .ENTRY CMD_CREDIR, ^M ;CMD_CREDIR, Save R2,R3,R4,R5,R6,R7 0 MOVAB G^LIB$FREE_VM, R7 ;LIB$FREE_VM, R70 MOVL #PCX__CMDERR, R6 ;#PCX__CMDERR, R6. MOVAB G^LIB$SIGNAL, R5 ;LIB$SIGNAL, R52 MOVAB G^STR$FREE1_DX, R4 ;STR$FREE1_DX, R4) MOVAB -108(SP), SP ;-108(SP), SP MOVAB 76(SP), R0 ;Q, R0 MOVL R0, 76(SP) ;R0, Q" MOVL R0, 80(SP) ;R0, Q+41 MOVL #34471936, 92(SP) ;#34471936, FNAME CLRL 96(SP) ;FNAME+4 1 MOVL #34471936, 84(SP) ;#34471936, FTYPEO CLRL 88(SP) ;FTYPE+4C0 MOVL #34471936, 100(SP) ;#34471936, STR CLRL 104(SP) ;STR+4 PUSHAB 100(SP) ;STR PUSHAB W^P.ACQ ;P.ACQ4 CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUE PUSHAB 4(SP) ;WILD$ PUSHAB 88(SP) ;FTYPE, PUSHAB 100(SP) ;FNAME PUSHAB 88(SP) ;DIRQUE PUSHAB 116(SP) ;STR- CALLS #5, W^PCX_PARSE ;#5, PCX_PARSE4" MOVL R0, R3 ;R0, STATUS" BLBS R3, 2$ ;STATUS, 2$ PUSHL R3 ;STATUS CLRL -(SP) ;-(SP) PUSHL R6 ;R6' CALLS #3, (R5) ;#3, LIB$SIGNAL3 PUSHAB 92(SP) ;FNAME ) CALLS #1, (R4) ;#1, STR$FREE1_DX PUSHAB 84(SP) ;FTYPES) CALLS #1, (R4) ;#1, STR$FREE1_DXL PUSHAB 100(SP) ;STR) CALLS #1, (R4) ;#1, STR$FREE1_DX .&TMP.BCK#[PCX]PCX.MAR;1hT=1$: REMQUE @76(SP), 8(SP) ;@DIRQUE, PTH BVS 5$ ;5$" PUSHAB 8(SP) ;__FREEPTH_T% MOVL #20, 4(SP) ;#20, 4(SP)R PUSHAB 4(SP) ;4(SP)( CALLS #2, (R7) ;#2, LIB$FREE_VM BRB 1$ ;1$%2$: BLBS 4(SP), 3$ ;WILD, 3$R TSTW 84(SP) ;FTYPE  BNEQ 3$ ;3$ TSTW 92(SP) ;FNAME  BEQL 3$ ;3$* CMPB @96(SP), #46 ;@FNAME+4, #46 BNEQ 7$ ;7$3$: CLRL -(SP) ;-(SP)F+ PUSHL #PCX__FSYNERR ;#PCX__FSYNERRS CLRL -(SP) ;-(SP) PUSHL R6 ;R6' CALLS #4, (R5) ;#4, LIB$SIGNAL2 PUSHAB 92(SP) ;FNAME ) CALLS #1, (R4) ;#1, STR$FREE1_DX_ PUSHAB 84(SP) ;FTYPE#) CALLS #1, (R4) ;#1, STR$FREE1_DXC PUSHAB 100(SP) ;STR) CALLS #1, (R4) ;#1, STR$FREE1_DX$.4$: REMQUE @76(SP), 8(SP) ;@DIRQUE, PTH5$: BVC 6$ ;6$1 BRW 14$ ;14$%6$: PUSHAB 8(SP) ;__FREEPTH_TT% MOVL #20, 4(SP) ;#20, 4(SP)# PUSHAB 4(SP) ;4(SP)( CALLS #2, (R7) ;#2, LIB$FREE_VM BRB 4$ ;4$,7$: CMPB @104(SP), #92 ;@STR+4, #92 BEQL 8$ ;8$. MOVL W^XDEFDIR, R2 ;XDEFDIR, XPARENT BRB 9$ ;9$8$: CLRL R2 ;XPARENT.9$: REMQUE @76(SP), 8(SP) ;@DIRQUE, PTH BVS 10$ ;10$0 ADDL3 #12, 8(SP), -(SP) ;#12, PTH, -(SP)/ ADDL3 #8, 12(SP), -(SP) ;#8, PTH, -(SP)R PUSHAB 108(SP) ;STR. CALLS #3, G'TMP.BCK#[PCX]PCX.MAR;1hTf@^STR$COPY_R ;#3, STR$COPY_R" PUSHAB 8(SP) ;__FREEPTH_T% MOVL #20, 4(SP) ;#20, 4(SP)# PUSHAB 4(SP) ;4(SP)( CALLS #2, (R7) ;#2, LIB$FREE_VM PUSHAB 12(SP) ;PARENT PUSHAB W^P.ACS ;P.ACS PUSHAB 108(SP) ;STR PUSHL R2 ;XPARENT 0 CALLS #4, W^DISK_SEARCH ;#4, DISK_SEARCH" MOVL R0, R3 ;R0, STATUS$ BLBC R3, 12$ ;STATUS, 12$* MOVAB 12(SP), R2 ;PARENT, XPARENT BRB 9$ ;9$(10$: BLBC R3, 12$ ;STATUS, 12$ PUSHAB 44(SP) ;DIRENT PUSHAB W^P.ACU ;P.ACU PUSHAB 100(SP) ;FNAME PUSHL R2 ;XPARENT 0 CALLS #4, W^DISK_SEARCH ;#4, DISK_SEARCH" MOVL R0, R3 ;R0, STATUS$ BLBC R3, 11$ ;STATUS, 11$ CLRL -(SP) ;-(SP)) PUSHL #PCX__EXISTS ;#PCX__EXISTSF' CALLS #2, (R5) ;#2, LIB$SIGNALP BRB 13$ ;13$!11$: PUSHAB 92(SP) ;FNAMEC PUSHL R2 ;XPARENTL. CALLS #2, W^DIR_CREATE ;#2, DIR_CREATE" MOVL R0, R3 ;R0, STATUS$ BLBS R3, 13$ ;STATUS, 13$12$: PUSHL R3 ;STATUS CLRL -(SP) ;-(SP) PUSHL R6 ;R6' CALLS #3, (R5) ;#3, LIB$SIGNAL !13$: PUSHAB 92(SP) ;FNAMEW) CALLS #1, (R4) ;#1, STR$FREE1_DXP PUSHAB 84(SP) ;FTYPE) CALLS #1, (R4) ;#1, STR$FREE1_DX( PUSHAB 100(SP) ;STR) CALLS #1, (R4) ;#1, STR$FREE1_DXT"14$: MOVL #1, R0 ;#1, R0 RET ;;(TMP.BCK#[PCX]PCX.MAR;1hT,C; Routine Size: 417 bytes, Routine Base: $CODE$ + 08CBL .PSECT $PLIT$,NOWRT,NOEXE,2_P.ACX: .ASCII \CMD\<0> ;P.ACW: .LONG 17694723 ;P .ADDRESS P.ACX ;&P.ACZ: .ASCII \INPUT\<0><0><0> ;P.ACY: .LONG 17694725 ;R .ADDRESS P.ACZ ;%P.ADB: .ASCII \OUTPUT\<0><0> ;SP.ADA: .LONG 17694726 ;  .ADDRESS P.ADB ;#P.ADD: .ASCII \PROCESS\<0> ; P.ADC: .LONG 17694727 ;  .ADDRESS P.ADD ;P.ADF: .ASCII \WAIT\ ;P.ADE: .LONG 17694724 ;  .ADDRESS P.ADF ;#P.ADH: .ASCII \SYMBOLS\<0> ;(P.ADG: .LONG 17694727 ;( .ADDRESS P.ADH ;-P.ADJ: .ASCII \LOGICAL_NAMES\<0><0><0> ;,P.ADI: .LONG 17694733 ;3 .ADDRESS P.ADJ ; .PSECT $CODE$,NOWRT,21U.12: U .ENTRY CMD_SPAWN, ^M ;CMD_SPAWN, Save R2,R3,R4,R5,R6,R7,R8A. MOVAB G^LIB$SIGNAL, R8 ;LIB$SIGNAL, R82 MOVL #CLI$_NEGATED, R7 ;#CLI$_NEGATED, R70 MOVAB G^CLI$PRESENT, R6 ;CLI$PRESENT, R6% MOVAB W^P.ACW, R5 ;P.ACW, R5 2 MOVAB G^STR$FREE1_DX, R4 ;STR$FREE1_DX, R44 MOVAB G^CLI$GET_VALUE, R3 ;CLI$GET_VALUE, R3' MOVAB -80(SP), SP ;-80(SP), SP 2 MOVL #34471936, 72(SP) ;#34471936, CMDSTR CLRL 76(SP) ;CMDSTR+42 MOVL #34471936, 64(SP) ;#34471936, INPSTR CLRL 68(SP) ;INPSTR+42 MOVL #34471936, 56(SP) ;#34471936, OUTSTR CLRL 60(SP) ;OUTSTR+42 MOVL #3447)TMP.BCK#[PCX]PCX.MAR;1hTF1936, 48(SP) ;#34471936, PRCNAM CLRL 52(SP) ;PRCNAM+4 CLRL 4(SP) ;FLAGS PUSHAB 72(SP) ;CMDSTR PUSHL R5 ;R5* CALLS #2, (R3) ;#2, CLI$GET_VALUE PUSHAB 64(SP) ;INPSTR PUSHAB 16(R5) ;P.ACY * CALLS #2, (R3) ;#2, CLI$GET_VALUE PUSHAB 56(SP) ;OUTSTR PUSHAB 32(R5) ;P.ADAE* CALLS #2, (R3) ;#2, CLI$GET_VALUE PUSHAB 48(SP) ;PRCNAM PUSHAB 48(R5) ;P.ADCP* CALLS #2, (R3) ;#2, CLI$GET_VALUE PUSHAB 60(R5) ;P.ADE ( CALLS #1, (R6) ;#1, CLI$PRESENT CLRL R1 ;R1 CMPL R0, R7 ;R0, R7 BNEQ 1$ ;1$ INCL R1 ;R1%1$: MOVL R1, R2 ;R1, NOWAIT4 INSV R1, #0, #1, 8(SP) ;R1, #0, #1, FLAGS+4 PUSHAB 76(R5) ;P.ADG,( CALLS #1, (R6) ;#1, CLI$PRESENT CLRL R1 ;R1 CMPL R0, R7 ;R0, R7 BNEQ 2$ ;2$ INCL R1 ;R172$: INSV R1, #1, #1, 8(SP) ;R1, #1, #1, FLAGS+4C PUSHAB 100(R5) ;P.ADI( CALLS #1, (R6) ;#1, CLI$PRESENT CLRL R1 ;R1 CMPL R0, R7 ;R0, R7 BNEQ 3$ ;3$ INCL R1 ;R173$: INSV R1, #2, #1, 8(SP) ;R1, #2, #1, FLAGS+4 MOVL #1, R0 ;#1, IS'4$: CLRL 16(SP)[R0] ;ARGLST[I]$ AOBLEQ #7, R0, 4$ ;#7, I, 4$% MOVL #7, 16(SP) ;#7, ARGLSTS TSTW 72(SP) ;CMDSTR BEQL 5$ ;5$/ MOVAB 72(SP), 20(SP) ;CMDSTR, ARGLST+4S!5$: TSTW*TMP.BCK#[PCX]PCX.MAR;1hTI 64(SP) ;INPSTR  BEQL 6$ ;6$/ MOVAB 64(SP), 24(SP) ;INPSTR, ARGLST+81!6$: TSTW 56(SP) ;OUTSTR  BEQL 7$ ;7$0 MOVAB 56(SP), 28(SP) ;OUTSTR, ARGLST+1217$: MOVAB 4(SP), 32(SP) ;FLAGS, ARGLST+16( TSTW 48(SP) ;PRCNAM BEQL 8$ ;8$0 MOVAB 48(SP), 36(SP) ;PRCNAM, ARGLST+2008$: MOVAB 12(SP), 40(SP) ;PID, ARGLST+240 MOVAB 8(SP), 44(SP) ;PSTATUS, ARGLST+284 CALLG 16(SP), G^LIB$SPAWN ;ARGLST, LIB$SPAWN" BLBS R0, 9$ ;STATUS, 9$ PUSHL R0 ;STATUS CLRL -(SP) ;-(SP)- PUSHL #PCX__SPAWNERR ;#PCX__SPAWNERRE BRB 11$ ;11$'9$: BLBC R2, 10$ ;NOWAIT, 10$U PUSHAB 48(SP) ;PRCNAM CLRQ -(SP) ;-(SP) PUSHAB 24(SP) ;PIDI) MOVZWL #796, 16(SP) ;#796, 16(SP)R PUSHAB 16(SP) ;16(SP). CALLS #5, G^LIB$GETJPI ;#5, LIB$GETJPI PUSHL 12(SP) ;PIDP PUSHAB 52(SP) ;PRCNAM PUSHL #2 ;#2+ PUSHL #PCX__SPAWNED ;#PCX__SPAWNEDC' CALLS #4, (R8) ;#4, LIB$SIGNAL BRB 12$ ;12$+10$: BLBS 8(SP), 12$ ;PSTATUS, 12$D PUSHL 8(SP) ;PSTATUS CLRL -(SP) ;-(SP)+ PUSHL #PCX__SUBPERR ;#PCX__SUBPERR,+11$: CALLS #3, (R8) ;#3, LIB$SIGNALE"12$: PUSHAB 72(SP) ;CMDSTR) CALLS #1, (R4) ;#1, STR$FREE1_DX  PUSHAB 64(SP) ;INPSTR) CALLS #1, (R4) ;#1, STR$FREE1_DX PUSHAB 56(SP) ;OUTSTR+TMP.BCK#[PCX]PCX.MAR;1hT L) CALLS #1, (R4) ;#1, STR$FREE1_DX. PUSHAB 48(SP) ;PRCNAM) CALLS #1, (R4) ;#1, STR$FREE1_DXG MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 379 bytes, Routine Base: $CODE$ + 0A6C> .PSECT $PLIT$,NOWRT,NOEXE,2 %P.ADL: .ASCII \PARENT\<0><0> ;SP.ADK: .LONG 17694726 ;G .ADDRESS P.ADL ;%P.ADN: .ASCII \PRCNAM\<0><0> ; P.ADM: .LONG 17694726 ;  .ADDRESS P.ADN ;%P.ADP: .ASCII \PRCNAM\<0><0> ; P.ADO: .LONG 17694726 ;, .ADDRESS P.ADP ; .PSECT $CODE$,NOWRT,2,U.13:RF .ENTRY CMD_ATTACH, ^M ;CMD_ATTACH, Save R2,R3,R4,R5. MOVAB G^LIB$GETJPI, R5 ;LIB$GETJPI, R52 MOVL #CLI$_PRESENT, R4 ;#CLI$_PRESENT, R40 MOVAB G^CLI$PRESENT, R3 ;CLI$PRESENT, R3 SUBL2 #16, SP ;#16, SP PUSHAB W^P.ADK ;P.ADK( CALLS #1, (R3) ;#1, CLI$PRESENT CMPL R0, R4 ;R0, R4 BNEQ 1$ ;1$ PUSHAB 4(SP) ;PID CLRQ -(SP) ;-(SP)) MOVZWL #771, 12(SP) ;#771, 12(SP)T PUSHAB 12(SP) ;12(SP)' CALLS #4, (R5) ;#4, LIB$GETJPIS" MOVL R0, R2 ;R0, STATUS BRB 2$ ;2$!1$: PUSHAB W^P.ADM ;P.ADM;( CALLS #1, (R3) ;#1, CLI$PRESENT CMPL R0, R4 ;R0, R4 BNEQ 4$ ;4$- MOVL #34471936, 8(SP) ;#34471936, _D; CLRL 12(SP) ;_D+4 PUSHAB 8(SP) ;PIDSTR, PUSHAB W^P.ADO ;P.ADO4 CALLS #2, G,TMP.BCK#[PCX]PCX.MAR;1hT^O^CLI$GET_VALUE ;#2, CLI$GET_VALUE PUSHAB 4(SP) ;PID PUSHAB 12(SP) ;PIDSTR CLRL -(SP) ;-(SP)) MOVZWL #793, 12(SP) ;#793, 12(SP)3 PUSHAB 12(SP) ;12(SP)' CALLS #4, (R5) ;#4, LIB$GETJPIS" MOVL R0, R2 ;R0, STATUS PUSHAB 8(SP) ;PIDSTR 2 CALLS #1, G^STR$FREE1_DX ;#1, STR$FREE1_DX%2$: BLBC R2, 3$ ;STATUS, 3$I PUSHAB 4(SP) ;PID. CALLS #1, G^LIB$ATTACH ;#1, LIB$ATTACH" MOVL R0, R2 ;R0, STATUS" BLBS R2, 4$ ;STATUS, 4$3$: PUSHL R2 ;STATUS; CLRL -(SP) ;-(SP)) PUSHL #PCX__ATTERR ;#PCX__ATTERRY. CALLS #3, G^LIB$SIGNAL ;#3, LIB$SIGNAL!4$: MOVL #1, R0 ;#1, R0E RET ;;; Routine Size: 170 bytes, Routine Base: $CODE$ + 0BE7# .EXTRN LIB$SIGNAL ; PSECT SUMMARYT; #; Name Bytes Attributes ; W; $GLOBAL$ 44 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)RT; $OWN$ 168 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $PLIT$ 756 NOVEC,NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)PU; $CODE$ 3217 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2) ; Library Statistics2; 9; -------- Symbols -------- Pages Processing 9; File Total Loaded Percent Mapped Time ; ]; SYS$COMMON:[SYSLIB]STARLET.L32;1 14000 107 0 813 -TMP.BCK#[PCX]PCX.MAR;1hTÙR 00:00.43U; MDM_SRC:[PCX]PCX.L32;11 77 47 61 13 00:00.0(; COMMAND QUALIFIERSc; BLISS/LIST=PCX.MAR/NOOBJ/MACHINE=(OBJ,NOBIN,ASSEM,UNIQUE,NOCOMM)/SOURCE=(NOHEAD,NOSOURCE) PCX.B32 ; Compilation Complete .END U.14P)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM PUSHAB 76(SP) ;DIRENT PUSHAB W^P.ACE ;P.ACE PUSHAB 20(SP) ;STRB PUSHL R6 ;XDIR0 CALLS #4, W^DISK_SEARCH ;#4, DISK_SEARCH" M.TMP.BCKns#[PCX]PCX_CMDIO.B32;4L*[PCX]PCX_CMDIO.B32;4+,ns./ 4L<-#0123KPWO56$7`xؚ$89GHJ/TMP.BCKns#[PCX]PCX_CMDIO.B32;4L%TITLE 'PCX_CMDIO'!MODULE PCX_CMDIO (IDENT='V1.0') =BEGIN!++! FACILITY: PC Exchange!2! ABSTRACT: Command I/O routines used by PCX.!! MODULE DESCRIPTION:!7! This module contains terminal/command I/O routines.!! AUTHOR: M. MadisonA! COPYRIGHT 1990, RENSSELAER POLYTECHNIC INSTITUTE."! ALL RIGHTS RESERVED.!! CREATION DATE: 12-JUL-1990!! MODIFICATION HISTORY:!;! 12-JUL-1990 V1.0 Madison Initial coding (from MCP).!--" LIBRARY 'SYS$LIBRARY:STARLET'; LIBRARY 'PCX'; LIBRARY 'FIELDS'; FORWARD ROUTINE GET_CMD, INDIRECT; BUILTIN INSQUE, REMQUE; EXTERNAL ROUTINE2 G_HAT (LIB$PUT_OUTPUT, STR$FIND_FIRST_IN_SET,8 STR$FIND_FIRST_NOT_IN_SET, STR$RIGHT, STR$LEFT,= SMG$CREATE_VIRTUAL_KEYBOARD, SMG$READ_COMPOSED_LINE,< LIB$GET_VM, LIB$FREE_VM, STR$COPY_DX, STR$FREE1_DX,! STR$COPY_R, STR$PREFIX); EXTERNAL LITERAL PCX__CANTIND, SMG$_EOF; _DEF (IOC) IOC_L_FLINK = _LONG, IOC_L_BLINK = _LONG,' IOC_X_FAB = _BYTES (FAB$C_BLN),& IOC_X_RAB = _BYTES (RAB$C_BLN) _ENDDEF (IOC); OWN KBID : INITIAL (0), IOCQUE : IOCDEF; %SBTTL 'GET_CMD'4GLOBAL ROUTINE GET_CMD (STR_A, PROMPT_A, OUTLEN_A) =BEGIN!++! FUNCTIONAL DESCRIPTION:!F! Uses SMG$READ_COMPOSED_LINE to get a line from the command stream.!B! RETURNS: cond_value, longword (unsigned), writ0TMP.BCKns#[PCX]PCX_CMDIO.B32;4Lne only, by value! ! PROTOTYPE:!$! GET_CMD str [,prompt] [,outlen]!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BUILTIN ACTUALCOUNT; LOCAL' PROMPT : BLOCK [DSC$K_S_BLN,BYTE],% STR : BLOCK [DSC$K_S_BLN,BYTE], LEN : WORD, XIOC : REF IOCDEF, STATUS; $INIT_DYNDESC (PROMPT); $INIT_DYNDESC (STR); IF ACTUALCOUNT () GTR 1 THEN IF .PROMPT_A NEQ 0 THEN) STR$COPY_DX (PROMPT, .PROMPT_A); IF .KBID EQL 0 THEN BEGIN( SMG$CREATE_VIRTUAL_KEYBOARD (KBID);H IOCQUE [IOC_L_BLINK] = IOCQUE [IOC_L_FLINK] = IOCQUE [IOC_L_FLINK];6 STR$PREFIX (PROMPT, %ASCID %STRING (%CHAR (10))); END; WHILE 1 DO BEGIN= WHILE .IOCQUE [IOC_L_FLINK] NEQA IOCQUE [IOC_L_FLINK] DO BEGIN BIND3 CURIOC = .IOCQUE [IOC_L_FLINK] : IOCDEF,3 FAB = CURIOC [IOC_X_FAB] : $FAB_DECL,3 RAB = CURIOC [IOC_X_RAB] : $RAB_DECL;6 IF (RAB [RAB$V_PMT] = (.PROMPT_A NEQ 0)) THEN BEGIN4 RAB [RAB$L_PBF] = .PROMPT [DSC$A_POINTER];3 RAB [RAB$B_PSZ] = .PROMPT [DSC$W_LENGTH]; END;! STATUS = $GET (RAB=RAB); IF .STATUS THEN BEGINC IF NOT INDIRECT (.RAB [RAB$W_RSZ], .RAB [RAB$L_UBF]) THEN BEGIN* IF ACTUALCOUNT () GTR 2 TH1TMP.BCKns#[PCX]PCX_CMDIO.B32;4L@ENE IF .OUTLEN_A NEQA 0 THEN .OUTLEN_A = .RAB [RAB$W_RSZ];E STR$COPY_R (.STR_A, RAB [RAB$W_RSZ], .RAB [RAB$L_UBF]);& LIB$PUT_OUTPUT (.STR_A);$ STR$FREE1_DX (PROMPT); RETURN SS$_NORMAL END; END ELSE BEGIN $DISCONNECT (RAB=RAB); $CLOSE (FAB=FAB);A LIB$FREE_VM (%REF (.RAB [RAB$W_USZ]), RAB [RAB$L_UBF]); REMQUE (CURIOC, XIOC);2 LIB$FREE_VM (%REF (IOC_S_IOCDEF), XIOC); END; END;A STATUS = SMG$READ_COMPOSED_LINE (KBID, 0, STR, PROMPT, LEN); IF .STATUS THEN BEGINI IF NOT INDIRECT (.STR [DSC$W_LENGTH], .STR [DSC$A_POINTER]) THEN BEGIN& IF ACTUALCOUNT () GTR 2 THEN7 IF .OUTLEN_A NEQ 0 THEN .OUTLEN_A = .LEN;$ STR$COPY_DX (.STR_A, STR); STR$FREE1_DX (PROMPT); RETURN SS$_NORMAL; END; END ELSE BEGIN STR$FREE1_DX (STR); STR$FREE1_DX (PROMPT);% IF .STATUS EQL SMG$_EOF THEN RETURN RMS$_EOF ELSE RETURN .STATUS; END; END; ! WHILE 1 SS$_ABORTEND; ! GET_CMD %SBTTL 'INDIRECT'$ROUTINE INDIRECT (INPLEN, INPADR) = BEGIN!++! FUNCTIONAL DESCRIPTION:!G! Checks for an input redirection (@command-file). If found, returns! Otherwise returns 0.!I! RETURNS: longword_unsigned, longword (unsigned), write only,2TMP.BCKns#[PCX]PCX_CMDIO.B32;4LW by value! ! PROTOTYPE:!! INDIRECT inplen, inpadr!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL' INPSTR : BLOCK [DSC$K_S_BLN,BYTE],% STR : BLOCK [DSC$K_S_BLN,BYTE], XABFHC : $XABFHC_DECL, IOC : REF IOCDEF, I, STATUS;# IF .INPLEN EQL 0 THEN RETURN 0;) INPSTR [DSC$B_DTYPE] = DSC$K_DTYPE_T;) INPSTR [DSC$B_CLASS] = DSC$K_CLASS_S;$ INPSTR [DSC$W_LENGTH] = .INPLEN;% INPSTR [DSC$A_POINTER] = .INPADR; $INIT_DYNDESC (STR);L I = STR$FIND_FIRST_NOT_IN_SET (INPSTR, %ASCID %STRING (' ', %CHAR (9)));7 IF CH$RCHAR (.INPADR+.I-1) NEQ %C'@' THEN RETURN 0;) STR$RIGHT (STR, INPSTR, %REF (.I+1));I I = STR$FIND_FIRST_NOT_IN_SET (STR, %ASCID %STRING (' ', %CHAR (9)));- IF .I GTR 1 THEN STR$RIGHT (STR, STR, I);J I = STR$FIND_FIRST_IN_SET (STR, %ASCID %STRING (' ', %CHAR (9), '!'));6 IF .I GTR 0 THEN STR$LEFT (STR, STR, %REF (.I-1));% IF .STR [DSC$W_LENGTH] EQL 0 THEN BEGIN STR$FREE1_DX (STR); RETURN 0; END;3 STATUS = LIB$GET_VM (%REF (IOC_S_IOCDEF), IOC); IF NOT .STATUS THEN BEGIN' SIGNAL (PCX__CANTIND, 0, .STATUS); STR$FREE1_DX (STR); RETURN 0; END; BEGIN BIND+ FAB = IOC [IOC_X_FAB] : $FAB_DECL,+ RAB = IOC [IOC_X_RAB] : $RAB_DECL;K $FAB_INIT (FAB=FAB, F3TMP.BCKns#[PCX]PCX_CMDIO.B32;4L3 NA=.STR [DSC$A_POINTER], FNS=.STR [DSC$W_LENGTH],A XAB=XABFHC, FAC=GET, SHR=SHRPUT, DNM='SYS$DISK:[].PCX'); $XABFHC_INIT (XAB=XABFHC); STATUS = $OPEN (FAB=FAB); IF NOT .STATUS THEN BEGIN= SIGNAL (PCX__CANTIND, 0, .STATUS, .FAB [FAB$L_STV]); STR$FREE1_DX (STR);0 LIB$FREE_VM (%REF (IOC_S_IOCDEF), IOC); RETURN 0; END; STR$FREE1_DX (STR);" $RAB_INIT (RAB=RAB, FAB=FAB);! STATUS = $CONNECT (RAB=RAB); IF NOT .STATUS THEN BEGIN= SIGNAL (PCX__CANTIND, 0, .STATUS, .RAB [RAB$L_STV]); $CLOSE (FAB=FAB);0 LIB$FREE_VM (%REF (IOC_S_IOCDEF), IOC); RETURN 0; END;# IF .FAB [FAB$W_MRS] EQL 0 THEN* IF .XABFHC [XAB$W_LRL] EQL 0 THEN RAB [RAB$W_USZ] = 1024 ELSE/ RAB [RAB$W_USZ] = .XABFHC [XAB$W_LRL] ELSE, RAB [RAB$W_USZ] = .FAB [FAB$W_MRS]; FAB [FAB$L_XAB] = 0;D STATUS = LIB$GET_VM (%REF (.RAB [RAB$W_USZ]), RAB [RAB$L_UBF]); IF NOT .STATUS THEN BEGIN+ SIGNAL (PCX__CANTIND, 0, .STATUS); $CLOSE (FAB=FAB);0 LIB$FREE_VM (%REF (IOC_S_IOCDEF), IOC); RETURN 0; END; END;( INSQUE (.IOC, IOCQUE [IOC_L_FLINK]); 1END; ! INDIRECTENDELUDOM4TMP.BCK &#[PCX]PCX_CMDIO.MAR;2o*[PCX]PCX_CMDIO.MAR;2+, &./ 4o~-#0123KPWO56 q>7`^4C89`\=GHJ5TMP.BCK &#[PCX]PCX_CMDIO.MAR;2o/*; %PRINT: Structure IOCDEF size: 156 bytes .TITLE PCX_CMDIO PCX_CMDIO .IDENT \V1.0\ .PSECT $OWN$,NOEXE,2;KBIDU.3: .LONG 0 ;;IOCQUEU.4: .BLKB 156 .PSECT $PLIT$,NOWRT,NOEXE,2$P.AAB: .ASCII <10><0><0><0> ;P.AAA: .LONG 17694721 ; .ADDRESS P.AAB ;^ .EXTRN LIB$PUT_OUTPUT, STR$FIND_FIRST_IN_SET, STR$FIND_FIRST_NOT_IN_SET, STR$RIGHT, STR$LEFTb .EXTRN SMG$CREATE_VIRTUAL_KEYBOARD, SMG$READ_COMPOSED_LINE, LIB$GET_VM, LIB$FREE_VM, STR$COPY_DX^ .EXTRN STR$FREE1_DX, STR$COPY_R, STR$PREFIX, PCX__CANTIND, SMG$_EOF, SYS$GET, SYS$DISCONNECT .EXTRN SYS$CLOSE .PSECT $CODE$,NOWRT,2U.1:W .ENTRY GET_CMD, ^M ;GET_CMD, Save R2,R3,R4,R5,R6,R7,R8,R90 MOVAB G^STR$COPY_DX, R9 ;STR$COPY_DX, R90 MOVAB G^LIB$FREE_VM, R8 ;LIB$FREE_VM, R82 MOVAB G^STR$FREE1_DX, R7 ;STR$FREE1_DX, R7! MOVAB W^U.4, R6 ;U.4, R6 SUBL2 #28, SP ;#28, SP. MOVL #34471936, 20(SP) ;#34471936, _D CLRL 24(SP) ;_D+4. MOVL #34471936, 12(SP) ;#34471936, _D CLRL 16(SP) ;_D+4! CMPB (AP), #1 ;(AP), #1 BLEQU 1$ ;1$ TSTL 8(AP) ;PROMPT_A BEQL 1$ ;1$ PUSHL 8(AP) ;PROMPT_A PUSHAB 24(SP) ;PROMPT( CALLS #2, (R9) ;#2, STR$COPY_DX1$: TSTL -4(R6) ;KBID BNEQ 2$ ;2$ PUSHAB -4(R6) ;KBIDN CALLS #1, G^SMG$CREATE_VIRTUAL_KEYBOARD ;#1, SMG$CREATE_VIRTUAL_KEYBOARD# M6TMP.BCK &#[PCX]PCX_CMDIO.MAR;2oOVAB (R6), R0 ;IOCQUE, R0# MOVL R0, (R6) ;R0, IOCQUE& MOVL R0, 4(R6) ;R0, IOCQUE+4 PUSHAB W^P.AAA ;P.AAA PUSHAB 24(SP) ;PROMPT. CALLS #2, G^STR$PREFIX ;#2, STR$PREFIX&2$: MOVL (R6), R3 ;IOCQUE, R3# MOVAB (R6), R0 ;IOCQUE, R0 CMPL R3, R0 ;R3, R0 BNEQ 3$ ;3$ BRW 9$ ;9$&3$: MOVAB 8(R3), R4 ;8(R3), R4% MOVAB 88(R3), R2 ;88(R3), R2 CLRL R0 ;R0 TSTL 8(AP) ;PROMPT_A BEQL 4$ ;4$ INCL R0 ;R054$: INSV R0, #6, #1, 7(R2) ;R0, #6, #1, 7(R2) BLBC R0, 5$ ;R0, 5$/ MOVL 24(SP), 48(R2) ;PROMPT+4, 48(R2)- MOVB 20(SP), 52(R2) ;PROMPT, 52(R2)5$: PUSHL R2 ;R2) CALLS #1, G^SYS$GET ;#1, SYS$GET" MOVL R0, R5 ;R0, STATUS" BLBC R5, 7$ ;STATUS, 7$ PUSHL 36(R2) ;36(R2)+ MOVZWL 34(R2), -(SP) ;34(R2), -(SP)! CALLS #2, W^U.2 ;#2, U.2 BLBS R0, 2$ ;R0, 2$! CMPB (AP), #2 ;(AP), #2 BLEQU 6$ ;6$ TSTL 12(AP) ;OUTLEN_A BEQL 6$ ;6$1 MOVZWL 34(R2), @12(AP) ;34(R2), @OUTLEN_A!6$: PUSHL 36(R2) ;36(R2) PUSHAB 34(R2) ;34(R2) PUSHL 4(AP) ;STR_A. CALLS #3, G^STR$COPY_R ;#3, STR$COPY_R PUSHL 4(AP) ;STR_A6 CALLS #1, G^LIB$PUT_OUTPUT ;#1, LIB$PUT_OUTPUT BRB 11$ ;11$7$: PUSHL R2 ;R26 CALLS #1, G^SYS$DISCONNECT 7TMP.BCK &#[PCX]PCX_CMDIO.MAR;2o6\ ;#1, SYS$DISCONNECT PUSHL R4 ;R4- CALLS #1, G^SYS$CLOSE ;#1, SYS$CLOSE PUSHAB 36(R2) ;36(R2)+ MOVZWL 32(R2), 4(SP) ;32(R2), 4(SP) PUSHAB 4(SP) ;4(SP)( CALLS #2, (R8) ;#2, LIB$FREE_VM& REMQUE (R3), 4(SP) ;(R3), XIOC PUSHAB 4(SP) ;XIOC' MOVZBL #156, 4(SP) ;#156, 4(SP) PUSHAB 4(SP) ;4(SP)( CALLS #2, (R8) ;#2, LIB$FREE_VM8$: BRW 2$ ;2$9$: PUSHAB 8(SP) ;LEN PUSHAB 24(SP) ;PROMPT PUSHAB 20(SP) ;STR CLRL -(SP) ;-(SP) PUSHAB -4(R6) ;KBIDE CALLS #5, G^SMG$READ_COMPOSED_LINE ;#5, SMG$READ_COMPOSED_LINE" MOVL R0, R5 ;R0, STATUS$ BLBC R5, 12$ ;STATUS, 12$ PUSHL 16(SP) ;STR+4( MOVZWL 16(SP), -(SP) ;STR, -(SP)! CALLS #2, W^U.2 ;#2, U.2 BLBS R0, 8$ ;R0, 8$! CMPB (AP), #2 ;(AP), #2 BLEQU 10$ ;10$ TSTL 12(AP) ;OUTLEN_A BEQL 10$ ;10$- MOVZWL 8(SP), @12(AP) ;LEN, @OUTLEN_A10$: PUSHAB 12(SP) ;STR PUSHL 4(AP) ;STR_A( CALLS #2, (R9) ;#2, STR$COPY_DX"11$: PUSHAB 20(SP) ;PROMPT) CALLS #1, (R7) ;#1, STR$FREE1_DX MOVL #1, R0 ;#1, R0 RET ;12$: PUSHAB 12(SP) ;STR) CALLS #1, (R7) ;#1, STR$FREE1_DX PUSHAB 20(SP) ;PROMPT) CALLS #1, (R7) ;#1, STR$FREE1_DX/ CMPL R5, #SMG$_EOF ;STATUS, #SMG$_EOF BNEQ 13$ ;13$%8TMP.BCK &#[PCX]PCX_CMDIO.MAR;2o MOVL #98938, R0 ;#98938, R0 RET ;&13$: MOVL R5, R0 ;STATUS, R0 RET ;;; Routine Size: 396 bytes, Routine Base: $CODE$ + 0000 .PSECT $PLIT$,NOWRT,NOEXE,2#P.AAD: .ASCII \ \<9><0><0> ;P.AAC: .LONG 17694722 ; .ADDRESS P.AAD ;#P.AAF: .ASCII \ \<9><0><0> ;P.AAE: .LONG 17694722 ; .ADDRESS P.AAF ;#P.AAH: .ASCII \ \<9>\!\<0> ;P.AAG: .LONG 17694723 ; .ADDRESS P.AAH ;'P.AAI: .ASCII \SYS$DISK:[].PCX\ ; .EXTRN SYS$OPEN, SYS$CONNECT .PSECT $CODE$,NOWRT,2 ;INDIRECTYU.2: .WORD ^M ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,R114 MOVAB G^STR$FREE1_DX, R11 ;STR$FREE1_DX, R110 MOVAB G^LIB$SIGNAL, R10 ;LIB$SIGNAL, R102 MOVL #PCX__CANTIND, R9 ;#PCX__CANTIND, R9' MOVAB -72(SP), SP ;-72(SP), SP TSTL 4(AP) ;INPLEN BNEQ 2$ ;2$1$: BRW 14$ ;14$.2$: MOVW #270, 66(SP) ;#270, INPSTR+2, MOVW 4(AP), 64(SP) ;INPLEN, INPSTR. MOVL 8(AP), 68(SP) ;INPADR, INPSTR+4. MOVL #34471936, 56(SP) ;#34471936, _D CLRL 60(SP) ;_D+4 PUSHAB W^P.AAC ;P.AAC PUSHAB 68(SP) ;INPSTRK CALLS #2, G^STR$FIND_FIRST_NOT_IN_SET ;#2, STR$FIND_FIRST_NOT_IN_SET MOVL R0, 4(SP) ;R0, I- ADDL3 4(SP), 8(AP), R0 ;I, INPADR, R0' CMPB -1(R0), #64 ;-1(R0), #64 BNEQ 1$ ;1$+ ADDL3 #9TMP.BCK &#[PCX]PCX_CMDIO.MAR;2oE 1, 4(SP), (SP) ;#1, I, (SP) PUSHL SP ;SP PUSHAB 68(SP) ;INPSTR PUSHAB 64(SP) ;STR- CALLS #3, G^STR$RIGHT ;#3, STR$RIGHT PUSHAB W^P.AAE ;P.AAE PUSHAB 60(SP) ;STRK CALLS #2, G^STR$FIND_FIRST_NOT_IN_SET ;#2, STR$FIND_FIRST_NOT_IN_SET MOVL R0, 4(SP) ;R0, I CMPL 4(SP), #1 ;I, #1 BLEQ 3$ ;3$ PUSHAB 4(SP) ;I PUSHAB 60(SP) ;STR PUSHAB 64(SP) ;STR- CALLS #3, G^STR$RIGHT ;#3, STR$RIGHT!3$: PUSHAB W^P.AAG ;P.AAG PUSHAB 60(SP) ;STRC CALLS #2, G^STR$FIND_FIRST_IN_SET ;#2, STR$FIND_FIRST_IN_SET MOVL R0, 4(SP) ;R0, I BLEQ 4$ ;4$+ SUBL3 #1, 4(SP), (SP) ;#1, I, (SP) PUSHL SP ;SP PUSHAB 60(SP) ;STR PUSHAB 64(SP) ;STR+ CALLS #3, G^STR$LEFT ;#3, STR$LEFT4$: TSTW 56(SP) ;STR BEQL 5$ ;5$ PUSHAB 8(SP) ;IOC' MOVZBL #156, 4(SP) ;#156, 4(SP) PUSHAB 4(SP) ;4(SP). CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM" MOVL R0, R8 ;R0, STATUS" BLBS R8, 6$ ;STATUS, 6$ PUSHL R8 ;STATUS CLRL -(SP) ;-(SP) PUSHL R9 ;R9( CALLS #3, (R10) ;#3, LIB$SIGNAL5$: PUSHAB 56(SP) ;STR* CALLS #1, (R11) ;#1, STR$FREE1_DX BRW 14$ ;14$,6$: ADDL3 #8, 8(SP), R6 ;#8, IOC, R6+ ADDL3 #88, 8(SP), R7 ;#88, IOC, R7> MOVC5 #0, (SP), #0, #80, (R6) :TMP.BCK &#[PCX]PCX_CMDIO.MAR;2o> ;#0, (SP), #0, #80, (R6)) MOVW #20483, (R6) ;#20483, (R6)) MOVW #258, 22(R6) ;#258, 22(R6)% MOVB #2, 31(R6) ;#2, 31(R6)- MOVAB 12(SP), 36(R6) ;XABFHC, 36(R6), MOVL 60(SP), 44(R6) ;STR+4, 44(R6)- MOVAB W^P.AAI, 48(R6) ;P.AAI, 48(R6)* MOVB 56(SP), 52(R6) ;STR, 52(R6)' MOVB #15, 53(R6) ;#15, 53(R6)C MOVC5 #0, (SP), #0, #44, 12(SP) ;#0, (SP), #0, #44, $RMS_PTR/ MOVW #11293, 12(SP) ;#11293, $RMS_PTR PUSHL R6 ;R6+ CALLS #1, G^SYS$OPEN ;#1, SYS$OPEN" MOVL R0, R8 ;R0, STATUS" BLBS R8, 7$ ;STATUS, 7$ PUSHL 12(R6) ;12(R6) PUSHL R8 ;STATUS CLRL -(SP) ;-(SP) PUSHL R9 ;R9( CALLS #4, (R10) ;#4, LIB$SIGNAL PUSHAB 56(SP) ;STR* CALLS #1, (R11) ;#1, STR$FREE1_DX BRW 13$ ;13$7$: PUSHAB 56(SP) ;STR* CALLS #1, (R11) ;#1, STR$FREE1_DX> MOVC5 #0, (SP), #0, #68, (R7) ;#0, (SP), #0, #68, (R7)) MOVW #17409, (R7) ;#17409, (R7)% MOVL R6, 60(R7) ;R6, 60(R7) PUSHL R7 ;R70 CALLS #1, G^SYS$CONNECT ;#1, SYS$CONNECT" MOVL R0, R8 ;R0, STATUS" BLBS R8, 8$ ;STATUS, 8$ PUSHL 12(R7) ;12(R7) PUSHL R8 ;STATUS CLRL -(SP) ;-(SP) PUSHL R9 ;R9( CALLS #4, (R10) ;#4, LIB$SIGNAL BRB 12$ ;12$!8$: TSTW 54(R6) ;54(R6) BNEQ 10$ ;10$! TSTW 22(SP) ;TMP.BCK &#[PCX]PCX_CMDIO.MAR;2o6 ;XABFHC+10 BNEQ 9$ ;9$% MOVAB 32(R7), R0 ;32(R7), R0' MOVW #1024, (R0) ;#1024, (R0) BRB 11$ ;11$(9$: MOVAB 32(R7), R0 ;32(R7), R0, MOVW 22(SP), (R0) ;XABFHC+10, (R0) BRB 11$ ;11$)10$: MOVAB 32(R7), R0 ;32(R7), R0) MOVW 54(R6), (R0) ;54(R6), (R0)"11$: CLRL 36(R6) ;36(R6) PUSHAB 36(R7) ;36(R7)' MOVZWL (R0), 4(SP) ;(R0), 4(SP) PUSHAB 4(SP) ;4(SP). CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM" MOVL R0, R8 ;R0, STATUS$ BLBS R8, 15$ ;STATUS, 15$ PUSHL R8 ;STATUS CLRL -(SP) ;-(SP) PUSHL R9 ;R9( CALLS #3, (R10) ;#3, LIB$SIGNAL12$: PUSHL R6 ;R6- CALLS #1, G^SYS$CLOSE ;#1, SYS$CLOSE13$: PUSHAB 8(SP) ;IOC' MOVZBL #156, 4(SP) ;#156, 4(SP) PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM14$: CLRL R0 ;R0 RET ;+15$: INSQUE @8(SP), W^U.4 ;@IOC, U.4 MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 517 bytes, Routine Base: $CODE$ + 018C .EXTRN LIB$SIGNAL; PSECT SUMMARY;#; Name Bytes Attributes;T; $OWN$ 160 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $PLIT$ 63 NOVEC,NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $CODE$ 913 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC<TMP.BCK &#[PCX]PCX_CMDIO.MAR;2ou:,ALIGN(2); Library Statistics;9; -------- Symbols -------- Pages Processing9; File Total Loaded Percent Mapped Time;]; SYS$COMMON:[SYSLIB]STARLET.L32;1 14000 96 0 813 00:00.4U; MDM_SRC:[PCX]PCX.L32;11 77 3 3 13 00:00.0W; MDM_SRC:[PCX]FIELDS.L32;2 20 11 55 10 00:00.0; COMMAND QUALIFIERSo; BLISS/LIST=PCX_CMDIO.MAR/NOOBJ/MACHINE=(OBJ,NOBIN,ASSEM,UNIQUE,NOCOMM)/SOURCE=(NOHEAD,NOSOURCE) PCX_CMDIO.B32; Compilation Complete .END=TMP.BCK#[PCX]ACCESS.B32;101NQl*[PCX]ACCESS.B32;101+,.Q/ 4NQP6-#0123KPWOQ56wVd7Vd89GHJ>TMP.BCK#[PCX]ACCESS.B32;101NQ%TITLE 'ACCESS'MODULE ACCESS (IDENT='V1.2') =BEGIN!++! FACILITY: ACCESS!0! ABSTRACT: Routines for MSDOS disk access.!! MODULE DESCRIPTION:!B! This module contains the low-level MSDOS disk access routines.!! AUTHOR: M. MadisonA! COPYRIGHT 1990, RENSSELAER POLYTECHNIC INSTITUTE."! ALL RIGHTS RESERVED.!! CREATION DATE: 16-JUL-1990!! MODIFICATION HISTORY:!0! 16-JUL-1990 V1.0 Madison Initial coding.?! 26-JUL-1990 V1.1 Madison Change the way FAT is handled.?! 30-JUL-1990 V1.1-1 Madison Slight change to BUILD_PATH.>! 01-AUG-1990 V1.1-2 Madison Thought SECCNT was CLUSCNT.4! 03-AUG-1990 V1.2 Madison Add sector caching.!--" LIBRARY 'SYS$LIBRARY:STARLET'; LIBRARY 'PCX'; LIBRARY 'FIELDS'; REQUIRE 'BBLOCK'; FORWARD ROUTINE DISK_MOUNT, DISK_DISMOUNT, DISK_READSEC, DISK_UPDSEC, FLUSH_SECQUE : NOVALUE, FAT_CHAIN, READ_FAT, UPDATE_FAT, ALLOCATE, MARK_FREE, DISK_SEARCH, DISK_SCAN, DISK_GETLABEL, BUILD_PATH, DELETE_FILE, ENTER_FILE, FORMAT_DISK, DIR_EMPTY, DIR_CREATE, CLUS_SECTOR; EXTERNAL ROUTINE MAKE_MSDOS_DATE,; G_HAT (STR$COPY_DX, STR$TRIM, LIB$GET_VM, LIB$FREE_VM,1 STR$MATCH_WILD, STR$PREFIX, STR$COPY_R); LITERAL SCNCTX_S_SECBUF = 512; _DEF (SCNCTX)! SCNCTX_L_CLUSNUM ?TMP.BCK#[PCX]ACCESS.B32;101NQ = _LONG,! SCNCTX_L_SECINCLUS = _LONG,! SCNCTX_L_SECNUM = _LONG,! SCNCTX_L_DIRPTR = _LONG, SCNCTX_L_FLAGS = _LONG, _OVERLAY (SCNCTX_L_FLAGS) SCNCTX_V_ROOT = _BIT, _ENDOVERLAY3 SCNCTX_T_SECBUF = _BYTES (SCNCTX_S_SECBUF) _ENDDEF (SCNCTX); LITERAL SEC_K_MAX_QUE_SIZE = 32; _DEF (SEC) SEC_L_FLINK = _LONG, SEC_L_BLINK = _LONG, SEC_L_SECNUM = _LONG, SEC_L_REFCNT = _LONG, SEC_L_FLAGS = _LONG, _OVERLAY (SEC_L_FLAGS) SEC_V_DIRTY = _BIT, _ENDOVERLAY$ SEC_T_BUF = _BYTES (512) _ENDDEF (SEC); OWN CHAN : WORD,* FAT : REF BLOCK [,BYTE] INITIAL (0), DIRTY : BITVECTOR [32], SECQUE : QUEDEF, SECQUE_SIZE, INVFMT, DIR_SIZE, DIR_START, SECTORS, TRACKS, SIDES, CLUSTER_SIZE, FAT_SIZE, CLUSTERS; GLOBAL NOWRITE, BSEC : BSECDEF; EXTERNAL! IMAGE_PRIVS : BLOCK [,BYTE]; EXTERNAL LITERAL3 PCX__DBLDENSITY, PCX__UNKGEOM, PCX__HIDENSITY,/ PCX__NOTFOUND, PCX__DISKFULL, PCX__INVDEV,. PCX__MNTFOR, PCX__NOTEMPTY, PCX__NOWRITE, PCX__FMTPLS; %SBTTL 'DISK_MOUNT'GLOBAL ROUTINE DISK_MOUNT = BEGIN!++! FUNCTIONAL DESCRIPTION:!C! Opens a channel to the disk device. Mounts the disk (/FOREIGN)A! if not already mounted. Reads in the boot block to determine$! if the disk is formatted or not.@TMP.BCK#[PCX]ACCESS.B32;101NQR!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! DISK_MOUNT!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL% DVILST : $ITMLST_DECL (ITEMS=3),% MNTLST : $ITMLST_DECL (ITEMS=2), IOSB : VECTOR [4,WORD], DEVCHR : BLOCK [4,BYTE], DEVCLS, DEVTYP, STATUS; FAT = SECQUE_SIZE = 0; INIT_QUEUE (SECQUE); $ITMLST_INIT (ITMLST=DVILST,4 (ITMCOD=DVI$_DEVCHAR, BUFADR=DEVCHR, BUFSIZ=4),5 (ITMCOD=DVI$_DEVCLASS, BUFADR=DEVCLS, BUFSIZ=4),5 (ITMCOD=DVI$_DEVTYPE, BUFADR=DEVTYP, BUFSIZ=4));J STATUS = $GETDVIW (DEVNAM=%ASCID'PCX_DISK', ITMLST=DVILST, IOSB=IOSB);. IF NOT .STATUS THEN SIGNAL_STOP (.STATUS); IF .DEVCLS NEQ DC$_DISK THEN" SIGNAL_STOP (PCX__INVDEV, 0); SELECTONE .DEVTYP OF SET0 [DT$_RX23,DT$_RX33,DT$_RX23S,DT$_RX33S] : ;0 [OTHERWISE] : SIGNAL_STOP (PCX__INVDEV, 0); TES;; IF .DEVCHR [DEV$V_MNT] AND NOT .DEVCHR [DEV$V_FOR] THEN" SIGNAL_STOP (PCX__MNTFOR, 0);# IF NOT .DEVCHR [DEV$V_MNT] THEN BEGIN! $ITMLST_INIT (ITMLST=MNTLST,C (ITMCOD=MNT$_DEVNAM, BUFSIZ=8, BUFADR=UPLIT ('PCX_DISK')),F (ITMCOD=MNT$_FLAGS, BUFSIZ=4, BUFADR=UPLIT (MNT$M_FOREIGN)));( IF .IMAGE_PRIVS [PRV$V_VOLPRO] THEN0 $SETPRV (PRVADR=IMAGE_PRIVS, ENBFLG=1);% STATUS = $MOUNTATMP.BCK#[PCX]ACCESS.B32;101NQF (ITMLST=MNTLST);( IF .IMAGE_PRIVS [PRV$V_VOLPRO] THEN0 $SETPRV (PRVADR=IMAGE_PRIVS, ENBFLG=0);/ IF NOT .STATUS THEN SIGNAL_STOP (.STATUS); END;; STATUS = $ASSIGN (DEVNAM=%ASCID'PCX_DISK:', CHAN=CHAN);) IF NOT .STATUS THEN SIGNAL (.STATUS); DISK_READSEC (0, BSEC); $ITMLST_INIT (ITMLST=DVILST,6 (ITMCOD=DVI$_CYLINDERS, BUFADR=TRACKS, BUFSIZ=4),5 (ITMCOD=DVI$_SECTORS, BUFADR=SECTORS, BUFSIZ=4),3 (ITMCOD=DVI$_TRACKS, BUFADR=SIDES, BUFSIZ=4));= STATUS = $GETDVIW (CHAN=.CHAN, ITMLST=DVILST, IOSB=IOSB);. IF NOT .STATUS THEN SIGNAL_STOP (.STATUS);2 IF NOT .IOSB [0] THEN SIGNAL_STOP (.IOSB [0]);B IF (.SECTORS NEQ 9 AND .SECTORS NEQ 18 AND .SECTORS NEQ 15) OR( .TRACKS NEQ 80 OR .SIDES NEQ 2 THENB SIGNAL_STOP (PCX__UNKGEOM, 3, .TRACKS, .SECTORS, .SIDES); NOWRITE = 1; INVFMT = 0; SELECTONE .SECTORS OF SET [9] : BEGINE FAT_SIZE = (IF .DEVTYP EQL DT$_RX23 OR .DEVTYP EQL DT$_RX23S THEN 3 ELSE 2); DIR_SIZE = 7; CLUSTER_SIZE = 2; END; [15] : BEGIN FAT_SIZE = 7; DIR_SIZE = 14; CLUSTER_SIZE = 1; NOWRITE = 0; END; [18] : BEGIN FAT_SIZE = 9; DIR_SIZE = 14; CLUSTER_SIZE = 1; NOWRITE = 0; END; TES;= CLUSTERS = (.SIDES * .TRACKS * .SECTORS) / .CLUSTER_SIZE; DIR_START = .FAT_SIZE + 1;A IF .BSECBTMP.BCK#[PCX]ACCESS.B32;101NQ! [BSEC_W_SECCNT] NEQ (.SIDES * .TRACKS * .SECTORS) OR, .BSEC [BSEC_W_BSECID] NEQ %X'AA55' THEN BEGIN SIGNAL (PCX__FMTPLS, 0); NOWRITE = INVFMT = 1; END+ ELSE IF .BSEC [BSEC_W_BPS] NEQ 512 THEN BEGIN DISK_DISMOUNT ();" SIGNAL_STOP (PCX__INVDEV, 0); END ELSE BEGIN: DIR_SIZE = (.BSEC [BSEC_W_RDE] * DIR_S_DIRDEF) / 512;> DIR_START = .BSEC [BSEC_W_SPF] * .BSEC [BSEC_B_FATCNT] + # .BSEC [BSEC_W_BOOTS]; READ_FAT (); END; SS$_NORMALEND; ! DISK_MOUNT %SBTTL 'DISK_DISMOUNT'GLOBAL ROUTINE DISK_DISMOUNT = BEGIN!++! FUNCTIONAL DESCRIPTION:!#! Called when all done with disk.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! DISK_DISMOUNT!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- UPDATE_FAT (); FLUSH_SECQUE (); $DASSGN (CHAN=.CHAN);& $DISMOU (DEVNAM=%ASCID'PCX_DISK'); SS$_NORMALEND; ! DISK_DISMOUNT %SBTTL 'DISK_READSEC'1GLOBAL ROUTINE DISK_READSEC (SECNUM, SECBUF_A) = BEGIN!++! FUNCTIONAL DESCRIPTION:!)! Reads in the specified sector number.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:! ! DISK_READSEC secnum, secbuf!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! CTMP.BCK#[PCX]ACCESS.B32;101NQCOMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL IOSB : VECTOR [4,WORD], SEC : REF SECDEF, LOW : REF SECDEF, STATUS;" IF .SECNUM GEQ .DIR_START THEN BEGIN SEC = .SECQUE [QUE_L_HEAD]; WHILE .SEC NEQA SECQUE DO BEGIN0 IF .SEC [SEC_L_SECNUM] EQL .SECNUM THEN BEGIN7 SEC [SEC_L_REFCNT] = .SEC [SEC_L_REFCNT] + 1;4 CH$MOVE (512, SEC [SEC_T_BUF], .SECBUF_A); RETURN SS$_NORMAL; END;" SEC = .SEC [SEC_L_FLINK]; END; END;= STATUS = $QIOW (CHAN=.CHAN, FUNC=IO$_READLBLK, IOSB=IOSB,' P1=.SECBUF_A, P2=512, P3=.SECNUM);' IF .STATUS THEN STATUS = .IOSB [0];. IF .STATUS AND .SECNUM GEQ .DIR_START THEN BEGIN0 IF .SECQUE_SIZE GEQ SEC_K_MAX_QUE_SIZE THEN BEGIN* LOW = SEC = .SECQUE [QUE_L_HEAD];" WHILE .SEC NEQA SECQUE DO BEGIN= IF .SEC [SEC_L_REFCNT] LSS .LOW [SEC_L_REFCNT] THEN LOW = .SEC;# SEC = .SEC [SEC_L_FLINK]; END;# IF .LOW [SEC_V_DIRTY] THEN; $QIOW (CHAN=.CHAN, FUNC=IO$_WRITELBLK, IOSB=IOSB,B P1=LOW [SEC_T_BUF], P2=512, P3=.LOW [SEC_L_SECNUM]); END ELSE BEGIN( SECQUE_SIZE = .SECQUE_SIZE + 1;/ LIB$GET_VM (%REF (SEC_S_SECDEF), LOW);- INSQUE (.LOW, .SECQUE [QUE_L_TAIL]); END;" LOW [SEC_L_SECNUM] = .SDTMP.BCK#[PCX]ACCESS.B32;101NQECNUM; LOW [SEC_L_REFCNT] = 1; LOW [SEC_L_FLAGS] = 0;/ CH$MOVE (512, .SECBUF_A, LOW [SEC_T_BUF]); END; .STATUSEND; ! DISK_READSEC %SBTTL 'DISK_UPDSEC'0GLOBAL ROUTINE DISK_UPDSEC (SECNUM, SECBUF_A) = BEGIN!++! FUNCTIONAL DESCRIPTION:!!! Updates the specified sector.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! DISK_UPDSEC secnum, secbuf!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL IOSB : VECTOR [4,WORD], SEC : REF SECDEF, LOW : REF SECDEF, STATUS;" IF .SECNUM LSS .DIR_START THEN BEGIN? STATUS = $QIOW (CHAN=.CHAN, FUNC=IO$_WRITELBLK, IOSB=IOSB,0 P1=.SECBUF_A, P2=512, P3=.SECNUM);( IF .STATUS THEN STATUS = .IOSB [0]; RETURN .STATUS; END; SEC = .SECQUE [QUE_L_HEAD]; WHILE .SEC NEQA SECQUE DO BEGIN, IF .SEC [SEC_L_SECNUM] EQL .SECNUM THEN BEGIN SEC [SEC_V_DIRTY] = 1;6 SEC [SEC_L_REFCNT] = .SEC [SEC_L_REFCNT] + 1;3 CH$MOVE (512, .SECBUF_A, SEC [SEC_T_BUF]); EXITLOOP; END; SEC = .SEC [SEC_L_FLINK]; END; IF .SEC EQLA SECQUE THEN BEGIN0 IF .SECQUE_SIZE GEQ SEC_K_MAX_QUE_SIZE THEN BEGIN* LOW = SEC = .SECQUE [QUE_L_HEAD];" WHILE .SEC NEQA SECQUE DO ETMP.BCK#[PCX]ACCESS.B32;101NQ4- BEGIN= IF .SEC [SEC_L_REFCNT] LSS .LOW [SEC_L_REFCNT] THEN LOW = .SEC;# SEC = .SEC [SEC_L_FLINK]; END;# IF .LOW [SEC_V_DIRTY] THEN; $QIOW (CHAN=.CHAN, FUNC=IO$_WRITELBLK, IOSB=IOSB,B P1=LOW [SEC_T_BUF], P2=512, P3=.LOW [SEC_L_SECNUM]); END ELSE BEGIN( SECQUE_SIZE = .SECQUE_SIZE + 1;/ LIB$GET_VM (%REF (SEC_S_SECDEF), LOW);- INSQUE (.LOW, .SECQUE [QUE_L_TAIL]); END;" LOW [SEC_L_SECNUM] = .SECNUM; LOW [SEC_L_REFCNT] = 1; LOW [SEC_L_FLAGS] = 0; LOW [SEC_V_DIRTY] = 1;/ CH$MOVE (512, .SECBUF_A, LOW [SEC_T_BUF]); END; SS$_NORMALEND; ! DISK_UPDSEC %SBTTL 'FLUSH_SECQUE'(GLOBAL ROUTINE FLUSH_SECQUE : NOVALUE = BEGIN!++! FUNCTIONAL DESCRIPTION:!$! Flushes the cached sector queue.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! FLUSH_SECQUE!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL SEC : REF SECDEF, IOSB : VECTOR [4,WORD], STATUS;3 WHILE NOT REMQUE (.SECQUE [QUE_L_HEAD], SEC) DO BEGIN IF .SEC [SEC_V_DIRTY] THEN: $QIOW (CHAN=.CHAN, FUNC=IO$_WRITELBLK, IOSB=IOSB,> P1=SEC [SEC_T_BUF], P2=512, P3=.SEC [SEC_L_SECNUM]);, LIB$FREE_VM (%REF (SEC_S_SEFTMP.BCK#[PCX]ACCESS.B32;101NQCDEF), SEC); END;END; ! FLUSH_SECQUE %SBTTL 'FAT_CHAIN'%GLOBAL ROUTINE FAT_CHAIN (CLUSNUM) = BEGIN!++! FUNCTIONAL DESCRIPTION:!@! Given a cluster number, finds the next cluster number in the! FAT chain.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! FAT_CHAIN clusnum!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL NEWCLUS, BYTE_OFFSET, BIT_OFFSET;& BYTE_OFFSET = (.CLUSNUM * 12) / 8;' BIT_OFFSET = (.CLUSNUM * 12) MOD 8;N IF .BYTE_OFFSET GTR .BSEC [BSEC_W_SPF]*512-1 THEN SIGNAL_STOP (SS$_ABORT);3 NEWCLUS = .FAT [.BYTE_OFFSET,.BIT_OFFSET,12,0];1 IF .NEWCLUS GTRU %X'FF7' THEN 0 ELSE .NEWCLUSEND; ! FAT_CHAIN %SBTTL 'ALLOCATE'0GLOBAL ROUTINE ALLOCATE (CLUSNUM_A, BACKLINK) = BEGIN!++! FUNCTIONAL DESCRIPTION:!! Allocates a cluster.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! ALLOCATE clusnum!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BIND CLUSNUM = .CLUSNUM_A; LOCAL NEWCLUS, BYTE_OFFSET, BIT_OFFSET; CLUSNUM = 0;! INCR C FROM 2 TO .CLUSTERS DO BEGIGTMP.BCK#[PCX]ACCESS.B32;101NQ ^N! BYTE_OFFSET = (.C * 12) / 8;" BIT_OFFSET = (.C * 12) MOD 8;7 IF .FAT [.BYTE_OFFSET,.BIT_OFFSET,12,0] EQL 0 THEN BEGIN7 FAT [.BYTE_OFFSET,.BIT_OFFSET,12,0] = %X'FFF';& DIRTY [.BYTE_OFFSET/512] = 1;- IF .BYTE_OFFSET MOD 512 GEQ 510 THEN) DIRTY [.BYTE_OFFSET/512+1] = 1; CLUSNUM = .C; EXITLOOP; END; END; IF .BACKLINK NEQ 0 THEN BEGIN( BYTE_OFFSET = (.BACKLINK * 12) / 8;) BIT_OFFSET = (.BACKLINK * 12) MOD 8;4 FAT [.BYTE_OFFSET,.BIT_OFFSET,12,0] = .CLUSNUM;" DIRTY [.BYTE_OFFSET/512] = 1;) IF .BYTE_OFFSET MOD 512 GEQ 510 THEN( DIRTY [.BYTE_OFFSET/512+1] = 1; END; SS$_NORMALEND; ! ALLOCATE %SBTTL 'MARK_FREE'%GLOBAL ROUTINE MARK_FREE (CLUSNUM) = BEGIN!++! FUNCTIONAL DESCRIPTION:!! Marks a cluster as unused.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! MARK_FREE clusnum!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL NEWCLUS, BYTE_OFFSET, BIT_OFFSET;& BYTE_OFFSET = (.CLUSNUM * 12) / 8;' BIT_OFFSET = (.CLUSNUM * 12) MOD 8;N IF .BYTE_OFFSET GTR .BSEC [BSEC_W_SPF]*512-1 THEN SIGNAL_STOP (SS$_ABORT);, FAT [.BYTE_OFFSET,.BIT_OFFSET,12,0] = 0;! DIRTY [.BYTE_OFFSET/512] = 1;( IF .BYTE_OHTMP.BCK#[PCX]ACCESS.B32;101NQ<FFSET MOD 512 GEQ 510 THEN" DIRTY [.BYTE_OFFSET/512] = 1; SS$_NORMALEND; ! MARK_FREE %SBTTL 'READ_FAT'GLOBAL ROUTINE READ_FAT = BEGIN!++! FUNCTIONAL DESCRIPTION:!! Reads in the entire FAT.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:! ! READ_FAT!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL BASE;4 LIB$GET_VM (%REF (.BSEC [BSEC_W_SPF]*512), FAT); BASE = 0;, INCR I FROM 0 TO .BSEC [BSEC_W_SPF]-1 DO BEGIN DIRTY [.I] = 0;? DISK_READSEC (.I+.BSEC [BSEC_W_BOOTS], FAT [.BASE,0,0,0]); BASE = .BASE + 512; END; SS$_NORMALEND; ! READ_FAT %SBTTL 'UPDATE_FAT'GLOBAL ROUTINE UPDATE_FAT = BEGIN!++! FUNCTIONAL DESCRIPTION:!;! Updates the on-disk FAT table from the in-memory cache.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!Y! UPDATE_FAT!! IMPLICIT INPUTS: None.o!S! IMPLICIT OUTPUTS: None.U!D! COMPLETION CODES: !s2! SS$_NORMAL: normal successful completion.!e! SIDE EFFECTS: ! ! None.o!-- , INCR I FROM 0 TO .BSEC [BSEC_W_SPF]-1 DO BEGINU IF .DIRTY [.I] THEN BEGIN LOCAL FATOFF;' FATOFF = .BSEC [BSEC_W_BOOTS];O2 INCR J FROM 1 TO .BSEC [BSEC_B_FATCNT] DO BEGITMP.BCK#[PCX]ACCESS.B32;101NQG"IN7 DISK_UPDSEC (.I+.FATOFF, FAT [.I*512,0,0,0]);0 FATOFF = .FATOFF + .BSEC [BSEC_W_SPF]; END; DIRTY [.I] = 0; END;o END; SS$_NORMALEND; ! UPDATE_FATd n%SBTTL 'DISK_SEARCH'AGLOBAL ROUTINE DISK_SEARCH (PARENT_A, FNAME_A, FTYPE_A, DIR_A) = BEGINR!++E! FUNCTIONAL DESCRIPTION:'!<! Given the directory entry of the parent plus a filename,-! returns the directory entry for the file.F!HB! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:! ! DISK_SEARCH !D! IMPLICIT INPUTS: None.N!! IMPLICIT OUTPUTS: None.B!D! COMPLETION CODES:I!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:,! ! None.T!-- BIND" PARENT = .PARENT_A : DIRDEF,( FNAME = .FNAME_A : BLOCK [,BYTE],( FTYPE = .FTYPE_A : BLOCK [,BYTE], DIR = .DIR_A : DIRDEF; LOCALA DIRENT : REF DIRDEF,  SECBUF : BLOCK [512,BYTE],  ROOT_DIR, CLUSNUM, SECINCLUS,E SECNUM; LABELN DIRLOOP;  ROOT_DIR = PARENT EQLA 0; M IF PARENT NEQA 0 THEN IF .PARENT [DIR_W_CLUSTER] EQL 0 THEN ROOT_DIR = 1; IF .ROOT_DIR THEN= SECNUM = .DIR_START ELSE BEGIN ' CLUSNUM = .PARENT [DIR_W_CLUSTER];E SECINCLUS = 1;I% SECNUM = CLUS_SECTOR (.CLUSNUM); END;DIRLOOP: (WHILE 1 DO BEGIN $ DISK_READSEC (.SECNUM, SECBUF);, INCR J FROM 0 TO 511 BY DIR_S_DIRDEF DO BEGINJTMP.BCK#[PCX]ACCESS.B32;101NQ%' DIRENT = CH$PLUS (SECBUF, .J);A' SELECTONE .DIRENT [0,0,8,0] OF SET) [0] : RETURN PCX__NOTFOUND;S [%X'E5'] : ;C [OTHERWISE] : BEGINF2 IF .DIRENT [0,0,8,0] EQL %X'05' THEN* CH$WCHAR (%X'E5', .DIRENT);1 IF NOT .DIRENT [DIR_V_VOLLABEL] ANDDG CH$EQL (.FNAME [DSC$W_LENGTH], .FNAME [DSC$A_POINTER], < DIR_S_FNAME, DIRENT [DIR_T_FNAME], %C' ') ANDG CH$EQL (.FTYPE [DSC$W_LENGTH], .FTYPE [DSC$A_POINTER],L= DIR_S_FTYPE, DIRENT [DIR_T_FTYPE], %C' ') THEN BEGINC4 CH$MOVE (DIR_S_DIRDEF, .DIRENT, DIR);! RETURN SS$_NORMAL;P END; END; TES;_ END;E IF .ROOT_DIR THEN BEGINL IF .SECNUM EQL .DIR_START + .DIR_SIZE - 1 THEN RETURN PCX__NOTFOUND# ELSE SECNUM = .SECNUM + 1;h END ELSEm BEGIN2 IF .SECINCLUS EQL .BSEC [BSEC_B_SPC] THEN BEGIN) CLUSNUM = FAT_CHAIN (.CLUSNUM);R6 IF .CLUSNUM EQL 0 THEN RETURN PCX__NOTFOUND; SECINCLUS = 1;* SECNUM = CLUS_SECTOR (.CLUSNUM); END ELSEc BEGIN% SECINCLUS = .SECINCLUS + 1; SECNUM = .SECNUM + 1; END;T END; END);  SS$_NORMALEND; ! DISK_SEARCH R%SBTTL 'DISK_SCAN'HGLOBAL ROUTINE DISK_SCAN (CTX_A_A, PARENT_A, FNAME_A, FTYPE_A, DIR_A) = BEGIKTMP.BCK#[PCX]ACCESS.B32;101NQ4(NZ!++;! FUNCTIONAL DESCRIPTION:! F! Scans a directory for a file name/type matching the given pattern.!UB! RETURNS: cond_value, longword (unsigned), write only, by value!( ! PROTOTYPE:!P ! DISK_SCANP!U! IMPLICIT INPUTS: None.E!I! IMPLICIT OUTPUTS: None. !L! COMPLETION CODES:;!2! SS$_NORMAL: normal successful completion.!.! SIDE EFFECTS:S!H ! None.G!--T BIND' CTX = .CTX_A_A : REF SCNCTXDEF, " PARENT = .PARENT_A : DIRDEF,( FNAME = .FNAME_A : BLOCK [,BYTE],( FTYPE = .FTYPE_A : BLOCK [,BYTE], DIR = .DIR_A : DIRDEF; LABEL[ DIRLOOP; LOCAL_% FNAM : BLOCK [DSC$K_S_BLN,BYTE],E% FTYP : BLOCK [DSC$K_S_BLN,BYTE],  SP;< FNAM [DSC$B_DTYPE] = FTYP [DSC$B_DTYPE] = DSC$K_DTYPE_T;< FNAM [DSC$B_CLASS] = FTYP [DSC$B_CLASS] = DSC$K_CLASS_S; IF .CTX EQLA 0 THENR BEGIN 1 LIB$GET_VM (%REF (SCNCTX_S_SCNCTXDEF), CTX);E3 CH$FILL (%CHAR (0), SCNCTX_S_SCNCTXDEF, .CTX);M IF PARENT EQLA 0 THEN CTX [SCNCTX_V_ROOT] = 1/ ELSE IF .PARENT [DIR_W_CLUSTER] EQL 0 THEN0! CTX [SCNCTX_V_ROOT] = 1;_! IF .CTX [SCNCTX_V_ROOT] THENTL CTX [SCNCTX_L_SECNUM] = .BSEC [BSEC_W_SPF] * 2 + 1 ! root directory ELSEA BEGIN: CTX [SCNCTX_L_CLUSNUM] = .PARENT [DIR_W_CLUSTER];& CTX [SCNCTX_L_SECINCLUS] = 1;G CTX [SCNCTX_L_SECNUM] = CLUS_SECTOR (.CTX [SCNCTX_L_CLUSNUM]); END;C END; BEGINS BINDZ5 LTMP.BCK#[PCX]ACCESS.B32;101NQN8+ CLUSNUM = CTX [SCNCTX_L_CLUSNUM] : LONG,L5 SECNUM = CTX [SCNCTX_L_SECNUM] : LONG,.6 SECINCLUS = CTX [SCNCTX_L_SECINCLUS] : LONG,; DIRENT = CTX [SCNCTX_L_DIRPTR] : REF DIRDEF,R? SECBUF = CTX [SCNCTX_T_SECBUF] : VECTOR [,BYTE];SDIRLOOP: (WHILE 1 DO, BEGINS/ IF .DIRENT GEQA CH$PLUS (SECBUF, 512) THEN0 BEGIN DIRENT = 0;% IF .CTX [SCNCTX_V_ROOT] THEN  BEGINE IF .SECNUM EQL .BSEC [BSEC_W_SPF] * .BSEC [BSEC_B_FATCNT] + 8 .DIR_SIZE + .BSEC [BSEC_W_BOOTS] - 1 THEN BEGIN; LIB$FREE_VM (%REF (SCNCTX_S_SCNCTXDEF), CTX);R RETURN RMS$_EOF; END $ ELSE SECNUM = .SECNUM + 1; END ELSET BEGIN3 IF .SECINCLUS EQL .BSEC [BSEC_B_SPC] THEN  BEGIN- CLUSNUM = FAT_CHAIN (.CLUSNUM);D$ IF .CLUSNUM EQL 0 THEN BEGIN < LIB$FREE_VM (%REF (SCNCTX_S_SCNCTXDEF), CTX); RETURN RMS$_EOF;C END; SECINCLUS = 1;. SECNUM = CLUS_SECTOR (.CLUSNUM); ENDN ELSE BEGIN]) SECINCLUS = .SECINCLUS + 1;U# SECNUM = .SECNUM + 1;, END; END;E END;D IF .DIRENT EQLA 0 THEN BEGIN( DISK_READSEC (.SECNUM, SECBUF); DIRENT = SECBUF; END; # SELECTONE .DIRENT [0,0,8,0] OFA SMTMP.BCK#[PCX]ACCESS.B32;101NQӡ.ET [0] :_ BEGIND; LIB$FREE_VM (%REF (SCNCTX_S_SCNCTXDEF), CTX);I RETURN RMS$_EOF; END; [%X'E5'] : ;e [OTHERWISE] :. IF NOT .DIRENT [DIR_V_VOLLABEL] THEN BEGINv2 IF .DIRENT [0,0,8,0] EQL %X'05' THEN* CH$WCHAR (%X'E5', .DIRENT);I SP = CH$FIND_CH (DIR_S_FNAME, DIRENT [DIR_T_FNAME], %C' ');uF FNAM [DSC$W_LENGTH] = (IF CH$FAIL (.SP) THEN DIR_S_FNAME9 ELSE CH$DIFF (.SP, DIRENT [DIR_T_FNAME]));A: FNAM [DSC$A_POINTER] = DIRENT [DIR_T_FNAME];I SP = CH$FIND_CH (DIR_S_FTYPE, DIRENT [DIR_T_FTYPE], %C' ');EF FTYP [DSC$W_LENGTH] = (IF CH$FAIL (.SP) THEN DIR_S_FTYPE9 ELSE CH$DIFF (.SP, DIRENT [DIR_T_FTYPE]));N: FTYP [DSC$A_POINTER] = DIRENT [DIR_T_FTYPE];1 IF STR$MATCH_WILD (FNAM, FNAME) ANDb4 STR$MATCH_WILD (FTYP, FTYPE) THEN BEGINO4 CH$MOVE (DIR_S_DIRDEF, .DIRENT, DIR);8 DIRENT = CH$PLUS (.DIRENT, DIR_S_DIRDEF);! RETURN SS$_NORMAL;R END; END; TES; . DIRENT = CH$PLUS (.DIRENT, DIR_S_DIRDEF); END);H END; SS$_NORMALEND; ! DISK_SCAN %SBTTL 'DISK_SCAN_END')GLOBAL ROUTINE DISK_SCAN_END (CTX_A_A) = NBEGIN !++U! FUNCTIONAL DESCRIPTION: ! <! Releases the context block from a prematurely terminated! DISK_SCAN sequNTMP.BCK#[PCX]ACCESS.B32;101NQwK1ence.F!.B! RETURNS: cond_value, longword (unsigned), write only, by value!= ! PROTOTYPE:!K! DISK_SCAN_END ctx!! IMPLICIT INPUTS: None.H! ! IMPLICIT OUTPUTS: None.B!! COMPLETION CODES:=!,2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:S!D ! None.Q!--_ BIND' CTX = .CTX_A_A : REF SCNCTXDEF;C0 LIB$FREE_VM (%REF (SCNCTX_S_SCNCTXDEF), CTX)END; ! DISK_SCAN_END %SBTTL 'DISK_GETLABEL''GLOBAL ROUTINE DISK_GETLABEL (DIR_A) = EBEGINL!++N! FUNCTIONAL DESCRIPTION:T!,! Reads the volume label, if there is one.!CB! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!C! DISK_GETLABEL_!T! IMPLICIT INPUTS: None. ! ! IMPLICIT OUTPUTS: None.2!3! COMPLETION CODES:;! 2! SS$_NORMAL: normal successful completion.!.! SIDE EFFECTS:! ! None.T!--% BIND DIR = .DIR_A : DIRDEF; LOCALE DIRENT : REF DIRDEF,E SECBUF : BLOCK [512,BYTE],S SECNUM; SECNUM = .DIR_START; WHILE 1 DO BEGIN $ DISK_READSEC (.SECNUM, SECBUF);, INCR J FROM 0 TO 511 BY DIR_S_DIRDEF DO BEGIN' DIRENT = CH$PLUS (SECBUF, .J);D' SELECTONE .DIRENT [0,0,8,0] OF SET) [0] : RETURN PCX__NOTFOUND;c [%X'E5'] : ;E [OTHERWISE] : BEGIN 2 IF .DIRENT [0,0,8,0] EQL %X'05' THEN* CH$WCHAR (%X'E5', .DIRENT);. IF .DIRENT [DIR_V_VOLLABOTMP.BCK#[PCX]ACCESS.B32;101NQ4EL] THEN BEGIN4 CH$MOVE (DIR_S_DIRDEF, .DIRENT, DIR);! RETURN SS$_NORMAL;o END; END; TES;, END; H IF .SECNUM EQL .DIR_START + .DIR_SIZE - 1 THEN RETURN PCX__NOTFOUND ELSE SECNUM = .SECNUM + 1;  END; SS$_NORMALEND; ! DISK_GETLABEL O%SBTTL 'BUILD_PATH'1.GLOBAL ROUTINE BUILD_PATH (DIRENT_A, STR_A) = BEGINS!++ ! FUNCTIONAL DESCRIPTION:S!U=! Given a directory entry, this routine builds its completeC! path name.! B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!I! BUILD_PATH! ! IMPLICIT INPUTS: None.[!_! IMPLICIT OUTPUTS: None.$!E! COMPLETION CODES: !C2! SS$_NORMAL: normal successful completion.!.! SIDE EFFECTS:;! ! None. !--. BIND" DIRENT = .DIRENT_A : DIRDEF,' STR = .STR_A : BLOCK [,BYTE]; LOCAL  CURDIR : DIRDEF,[ NEWDIR : DIRDEF,W PARENT : DIRDEF,O% TMP1 : BLOCK [DSC$K_S_BLN,BYTE],C% TMP2 : BLOCK [DSC$K_S_BLN,BYTE], CTX;  INIT_DYNDESC (TMP1, TMP2); IF DIRENT EQLA 0 THEN BEGIN " STR$COPY_DX (STR, %ASCID'\'); RETURN SS$_NORMAL;, END_. ELSE IF .DIRENT [DIR_W_CLUSTER] EQL 0 THEN BEGIN2" STR$COPY_DX (STR, %ASCID'\'); RETURN SS$_NORMAL;G END; STR$COPY_DX (STR, %ASCID'');+ CH$MOVE (DIR_S_DIRDEF, DIRENT, CURDIR);)? WHILE DISK_SEARCH (CURDIR, %ASCID'..', %ASCID'', PARENT)PTMP.BCK#[PCX]ACCESS.B32;101NQ 7 DO BEGIN_ CTX = 0;CB WHILE DISK_SCAN (CTX, PARENT, %ASCID'*', %ASCID'', NEWDIR) DOD IF .NEWDIR [DIR_W_CLUSTER] EQL .CURDIR [DIR_W_CLUSTER] THEN BEGIN< STR$COPY_R (TMP1, %REF (8), NEWDIR [DIR_T_FNAME]); STR$TRIM (TMP2, TMP1);! STR$PREFIX (STR, TMP2);C& STR$PREFIX (STR, %ASCID'\'); EXITLOOP;. END;: DISK_SCAN_END (CTX);s, CH$MOVE (DIR_S_DIRDEF, PARENT, CURDIR); END; FREE_STRINGS (TMP1, TMP2); SS$_NORMALEND; ! BUILD_PATHe %SBTTL 'DELETE_FILE':GLOBAL ROUTINE DELETE_FILE (PARENT_A, FNAME_A, FTYPE_A) = BEGINI!++F! FUNCTIONAL DESCRIPTION:! <! Given the directory entry of the parent plus a filename,! deletes a file. !HB! RETURNS: cond_value, longword (unsigned), write only, by value!C ! PROTOTYPE:!E! DELETE_FILEW!H! IMPLICIT INPUTS: None.K!O! IMPLICIT OUTPUTS: None.[!_! COMPLETION CODES:E!S2! SS$_NORMAL: normal successful completion.!S! SIDE EFFECTS:!; ! None.C!-- BIND" PARENT = .PARENT_A : DIRDEF,( FNAME = .FNAME_A : BLOCK [,BYTE],( FTYPE = .FTYPE_A : BLOCK [,BYTE]; LOCAL  DIRENT : REF DIRDEF,t SECBUF : BLOCK [512,BYTE],: ROOT_DIR, CLUSNUM,e SECINCLUS,y SECNUM, CLUS1, CLUS2; LABELs DIRLOOP;L) IF .NOWRITE THEN RETURN PCX__NOWRITE;  ROOT_DIR = PARENT EQLA 0;M IF PARENT NEQA 0 THEN IF .PARENT [DIR_W_CLUSTER] EQL 0 THEQTMP.BCK#[PCX]ACCESS.B32;101NQ:N ROOT_DIR = 1; IF .ROOT_DIR THENO SECNUM = .DIR_START ELSE BEGINB' CLUSNUM = .PARENT [DIR_W_CLUSTER];  SECINCLUS = 1;F% SECNUM = CLUS_SECTOR (.CLUSNUM);F END;DIRLOOP: (WHILE 1 DO2 BEGINN$ DISK_READSEC (.SECNUM, SECBUF);, INCR J FROM 0 TO 511 BY DIR_S_DIRDEF DO BEGIN' DIRENT = CH$PLUS (SECBUF, .J);!' SELECTONE .DIRENT [0,0,8,0] OFL SET) [0] : RETURN PCX__NOTFOUND; [%X'E5'] : ;N [OTHERWISE] : BEGINE2 IF .DIRENT [0,0,8,0] EQL %X'05' THEN* CH$WCHAR (%X'E5', .DIRENT);G IF CH$EQL (.FNAME [DSC$W_LENGTH], .FNAME [DSC$A_POINTER],< DIR_S_FNAME, DIRENT [DIR_T_FNAME], %C' ') ANDG CH$EQL (.FTYPE [DSC$W_LENGTH], .FTYPE [DSC$A_POINTER],D= DIR_S_FTYPE, DIRENT [DIR_T_FTYPE], %C' ') THEN BEGIN 0 IF .DIRENT [DIR_V_DIRECTORY] THEN1 IF NOT DIR_EMPTY (DIRENT) THENT) RETURN PCX__NOTEMPTY; * CH$WCHAR (%X'E5', .DIRENT);/ CLUS1 = .DIRENT [DIR_W_CLUSTER];T- DISK_UPDSEC (.SECNUM, SECBUF); $ WHILE .CLUS1 NEQ 0 DO BEGIN. CLUS2 = FAT_CHAIN (.CLUS1);& MARK_FREE (.CLUS1);" CLUS1 = .CLUS2; END;. UPDATE_FAT ();! RETURN SS$_NORMAL;2 ENDF8 RTMP.BCK#[PCX]ACCESS.B32;101NQ/x= ELSE IF CH$RCHAR (.DIRENT) EQL %X'E5' THEN* CH$WCHAR (%X'05', .DIRENT); END; TES;T END;D IF .ROOT_DIR THEN BEGINL IF .SECNUM EQL .DIR_START + .DIR_SIZE - 1 THEN RETURN PCX__NOTFOUND# ELSE SECNUM = .SECNUM + 1;_ END ELSEE BEGIN2 IF .SECINCLUS EQL .BSEC [BSEC_B_SPC] THEN BEGIN) CLUSNUM = FAT_CHAIN (.CLUSNUM);)6 IF .CLUSNUM EQL 0 THEN RETURN PCX__NOTFOUND; SECINCLUS = 1;* SECNUM = CLUS_SECTOR (.CLUSNUM); END ELSES BEGIN% SECINCLUS = .SECINCLUS + 1;o SECNUM = .SECNUM + 1; END; END; END); SS$_NORMALEND; ! DELETE_FILE %SBTTL 'ENTER_FILE'S1GLOBAL ROUTINE ENTER_FILE (PARENT_A, DIRENT_A) = DBEGIN!++F! FUNCTIONAL DESCRIPTION:E!_J! Creates a directory entry in a parent directory (or in root directory).!2B! RETURNS: cond_value, longword (unsigned), write only, by value!1 ! PROTOTYPE:! ! ENTER_FILE!S! IMPLICIT INPUTS: None.M!! IMPLICIT OUTPUTS: None.T!'! COMPLETION CODES:U!E2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:t!e ! None.!--  BIND" PARENT = .PARENT_A : DIRDEF; LOCALv DIRENT : REF DIRDEF, SECBUF : BLOCK [512,BYTE],T ROOT_DIR, CLUSNUM,U NEWCLUS, SECINCLUS,S SECNUM, CLUS1, CLUS2; LABELc DIRLOOP;) IF .NOWRITE THENSTMP.BCK#[PCX]ACCESS.B32;101NQ@ RETURN PCX__NOWRITE;O ROOT_DIR = PARENT EQLA 0;MM IF PARENT NEQA 0 THEN IF .PARENT [DIR_W_CLUSTER] EQL 0 THEN ROOT_DIR = 1;S IF .ROOT_DIR THEN  SECNUM = .DIR_START ELSE BEGIN ' CLUSNUM = .PARENT [DIR_W_CLUSTER];0 SECINCLUS = 1;S$ SECNUM = CLUS_SECTOR (.CLUSNUM) END;DIRLOOP: (WHILE 1 DOF BEGINL$ DISK_READSEC (.SECNUM, SECBUF);, INCR J FROM 0 TO 511 BY DIR_S_DIRDEF DO BEGIN' DIRENT = CH$PLUS (SECBUF, .J); ' SELECTONE .DIRENT [0,0,8,0] OF) SET [0,%X'E5'] :P BEGINE9 CH$MOVE (DIR_S_DIRDEF, .DIRENT_A, .DIRENT);S) DIRENT [DIR_V_ARCHIVE] = 1; ; MAKE_MSDOS_DATE (0, DIRENT [DIR_L_DATETIME]);F, DISK_UPDSEC (.SECNUM, SECBUF); UPDATE_FAT (); RETURN SS$_NORMAL; END; [OTHERWISE] : ; TES; END;E IF .ROOT_DIR THEN BEGINL IF .SECNUM EQL .DIR_START + .DIR_SIZE - 1 THEN RETURN PCX__DISKFULL# ELSE SECNUM = .SECNUM + 1;O END ELSE[ BEGIN2 IF .SECINCLUS EQL .BSEC [BSEC_B_SPC] THEN BEGIN, IF FAT_CHAIN (.CLUSNUM) EQL 0 THEN BEGIN LOCAL STATUS;A4 STATUS = ALLOCATE (NEWCLUS, .CLUSNUM);1 IF NOT .STATUS THEN RETURN .STATUS;r/ CH$FILL (%CHAR (0), 512, SECBUF);n. SECNUM = CLUS_SECTOR (.NEWCLUS);6 INCR I FROM 0 TO .BSTTMP.BCK#[PCX]ACCESS.B32;101NQdCEC [BSEC_B_SPC]-1 DO BEGIN:0 DISK_UPDSEC (.SECNUM+.I, SECBUF); END;! CLUSNUM = .NEWCLUS;C END . ELSE CLUSNUM = FAT_CHAIN (.CLUSNUM); SECINCLUS = 1;* SECNUM = CLUS_SECTOR (.CLUSNUM); END ELSEE BEGIN% SECINCLUS = .SECINCLUS + 1;  SECNUM = .SECNUM + 1;_ END; END; END);  SS$_NORMALEND; ! ENTER_FILE2 T%SBTTL 'FORMAT_DISK'%GLOBAL ROUTINE FORMAT_DISK (LBL_A) = SBEGIN!++ ! FUNCTIONAL DESCRIPTION: !O! Formats the disk. ! B! RETURNS: cond_value, longword (unsigned), write only, by value!= ! PROTOTYPE:!O! FORMAT_DISK !C! IMPLICIT INPUTS: None.! ! IMPLICIT OUTPUTS: None.E![! COMPLETION CODES: !C2! SS$_NORMAL: normal successful completion.! ! SIDE EFFECTS::! ! None.D!--  BIND& LBL = .LBL_A : BLOCK [,BYTE]; LOCALM SECBUF : BLOCK [512, BYTE], STATUS;9 IF .NOWRITE AND NOT .INVFMT THEN RETURN PCX__NOWRITE;T IF .FAT NEQA 0 THENT6 LIB$FREE_VM (%REF (.BSEC [BSEC_W_SPF]*512), FAT); FAT = 0;# CH$FILL (%CHAR (0), 512, BSEC);F% CH$FILL (%CHAR (0), 512, SECBUF);L9 CH$MOVE (8, UPLIT ('PCX V1.0'), BSEC [BSEC_T_IDENT]); # BSEC [BSEC_X_JMP] = %X'903CEB';BF CH$MOVE (%ALLOCATION (BBIMAGE)-2, BBIMAGE+2, BSEC [BSEC_X_BCODE]); BSEC [BSEC_W_BPS] = 512;& BSEC [BSEC_B_SPC] = .CLUSTER_SIZE; BSEC [BSEC_W_BOOUTMP.BCK#[PCX]ACCESS.B32;101NQtFTS] = 1; BSEC [BSEC_B_FATCNT] = 2;S7 BSEC [BSEC_W_RDE] = .DIR_SIZE * 512 / DIR_S_DIRDEF;_9 BSEC [BSEC_W_SECCNT] = (.SIDES * .TRACKS * .SECTORS);C# SECBUF [0,0,24,0] = %X'FFFFFF';  SELECTONE .FAT_SIZE OF SET H [2] : SECBUF [0,0,8,0] = BSEC [BSEC_B_MEDIA] = %X'FD'; ! 360KB 5"I [3,7] : SECBUF [0,0,8,0] = BSEC [BSEC_B_MEDIA] = %X'F9'; ! 1.2MB 5"TG [9] : SECBUF [0,0,8,0] = BSEC [BSEC_B_MEDIA] = %X'F0'; ! 1.4MB 3" TES;" BSEC [BSEC_W_SPF] = .FAT_SIZE;! BSEC [BSEC_W_SPT] = .SECTORS;  BSEC [BSEC_W_HDS] = .SIDES;H BSEC [BSEC_W_SHH] = 0;$ BSEC [BSEC_W_BSECID] = %X'AA55';B CH$COPY (.LBL [DSC$W_LENGTH], .LBL [DSC$A_POINTER], %C' ', 11, BSEC [BSEC_T_LABEL]);: CH$MOVE (8, UPLIT ('FAT12 '), BSEC [BSEC_T_FMTYPE]);! BSEC [BSEC_B_UNK29] = %X'29';  DISK_UPDSEC (0, BSEC); DISK_UPDSEC (1, SECBUF);/ DISK_UPDSEC (1+.BSEC [BSEC_W_SPF], SECBUF);B# SECBUF [0,0,24,0] = %X'000000';,* INCR I FROM 2 TO .BSEC [BSEC_W_SPF] DO BEGINL DISK_UPDSEC (.I, SECBUF);1 DISK_UPDSEC (.I+.BSEC [BSEC_W_SPF], SECBUF);a END;K INCR I FROM .BSEC [BSEC_W_SPF]*2+1 TO .BSEC [BSEC_W_SPF]*2+.DIR_SIZE DOT DISK_UPDSEC (.I, SECBUF);% IF .LBL [DSC$W_LENGTH] GTR 0 THENT BEGINo# BIND LBLENT = SECBUF : DIRDEF; ? CH$COPY (.LBL [DSC$W_LENGTH], .LBL [DSC$A_POINTER], %C' ',C: DIR_S_FNAME + DIR_S_FTYPE, LBLENT [DIR_T_FNAME]);! LBLENT [DIR_V_VOLLABEL] = 1;P LBLENT [DIR_V_ARCHIVE] IVTMP.BCK#[PCX]ACCESS.B32;101NQ]I= 1;2 MAKE_MSDOS_DATE (0, LBLENT [DIR_L_DATETIME]);6 DISK_UPDSEC (.BSEC [BSEC_W_SPF] * 2 + 1, SECBUF); END;< DIR_START = .BSEC [BSEC_W_SPF] * .BSEC [BSEC_B_FATCNT] + .BSEC [BSEC_W_BOOTS]; NOWRITE = INVFMT = 0;  READ_FAT (); SS$_NORMALEND; ! FORMAT_DISK %SBTTL 'DIR_EMPTY'ROUTINE DIR_EMPTY (DIRENT_A) = SBEGIN!++F! FUNCTIONAL DESCRIPTION:I!*! Checks to see if a directory is empty.!)B! RETURNS: cond_value, longword (unsigned), write only, by value!T ! PROTOTYPE:! ! DIR_EMPTY dirent]!1! IMPLICIT INPUTS: None._!L! IMPLICIT OUTPUTS: None. !X! COMPLETION CODES:_!2! SS$_NORMAL: normal successful completion.!X! SIDE EFFECTS:C!S ! None. !--  BIND" DIRENT = .DIRENT_A : DIRDEF; LOCALC D : DIRDEF, OK, CTX; CTX = 0;C OK = (WHILE DISK_SCAN (CTX, DIRENT, %ASCID'*', %ASCID'*', D) DO( BEGIN' BIND CH = D [0,0,8,0] : BYTE;E' IF .CH EQL 0 THEN EXITLOOP 1; > IF .CH NEQ %C'.' AND .CH NEQ %X'E5' THEN EXITLOOP 0; END); DISK_SCAN_END (CTX); .OKXEND; ! DIR_EMPTY %SBTTL 'DIR_CREATE'T0GLOBAL ROUTINE DIR_CREATE (PARENT_A, FNAME_A) = BEGIN !++ ! FUNCTIONAL DESCRIPTION:T![! Creates a directory.!EB! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:! ! DIR_CREATE! ! IMPLICIT INPUTS: None.]!E! IMPLICIT OUTPUTS: None. !F! COMPLETION CODES:S!WWTMP.BCK#[PCX]ACCESS.B32;101NQL2! SS$_NORMAL: normal successful completion.!I! SIDE EFFECTS:W!O ! None.N!--  BIND" PARENT = .PARENT_A : DIRDEF,( FNAME = .FNAME_A : BLOCK [,BYTE]; LOCAL_ DIRENT : DIRDEF,  SECBUF : BLOCK [512,BYTE],; STATUS, SECNUM;. CH$FILL (%CHAR (0), DIR_S_DIRDEF, DIRENT);B CH$COPY (.FNAME [DSC$W_LENGTH], .FNAME [DSC$A_POINTER], %C' '," 8, DIRENT [DIR_T_FNAME]);5 CH$MOVE (3, UPLIT (' '), DIRENT [DIR_T_FTYPE]); 1 MAKE_MSDOS_DATE (0, DIRENT [DIR_L_DATETIME]);! DIRENT [DIR_V_DIRECTORY] = 1; 2 STATUS = ALLOCATE (DIRENT [DIR_W_CLUSTER], 0);3 SECNUM = CLUS_SECTOR (.DIRENT [DIR_W_CLUSTER]); ' IF NOT .STATUS THEN RETURN .STATUS; % CH$FILL (%CHAR (0), 512, SECBUF); BEGIN BIND.0 D1 = SECBUF [0,0,0,0] : DIRDEF,3 D2 = SECBUF [DIR_S_DIRDEF,0,0,0] : DIRDEF; 7 CH$MOVE (8, UPLIT ('. '), D1 [DIR_T_FNAME]); 2 CH$MOVE (3, UPLIT (' '), D1 [DIR_T_FTYPE]);4 D1 [DIR_L_DATETIME] = .DIRENT [DIR_L_DATETIME]; D1 [DIR_V_DIRECTORY] = 1;2 D1 [DIR_W_CLUSTER] = .DIRENT [DIR_W_CLUSTER];7 CH$MOVE (8, UPLIT ('.. '), D2 [DIR_T_FNAME]); 2 CH$MOVE (3, UPLIT (' '), D2 [DIR_T_FTYPE]);4 D2 [DIR_L_DATETIME] = .DIRENT [DIR_L_DATETIME]; D2 [DIR_V_DIRECTORY] = 1; IF PARENT NEQA 0 THEN6 D2 [DIR_W_CLUSTER] = .PARENT [DIR_W_CLUSTER]; END;" DISK_UPDSEC (.SECNUM, SECBUF);% CH$FILL (%CHAR (0), 512, SECBUF);., INCR I FROM 1 TOXTMP.BCK#[PCX]ACCESS.B32;101NQO .BSEC [BSEC_B_SPC]-1 DO& DISK_UPDSEC (.SECNUM+.I, SECBUF); ENTER_FILE (PARENT, DIRENT); UPDATE_FAT (); SS$_NORMALEND; ! DIR_CREATEY %SBTTL 'CLUS_SECTOR''GLOBAL ROUTINE CLUS_SECTOR (CLUSNUM) = HBEGIN !++I! FUNCTIONAL DESCRIPTION: ! F! Given a cluster number, returns number of first sector in cluster.!SB! RETURNS: cond_value, longword (unsigned), write only, by value!F ! PROTOTYPE:!! CLUS_SECTOR !R! IMPLICIT INPUTS: None.H!! IMPLICIT OUTPUTS: None. ! ! COMPLETION CODES:I!F2! SS$_NORMAL: normal successful completion.!E! SIDE EFFECTS:;! ! None. !--R> (.CLUSNUM - 2) * .BSEC [BSEC_B_SPC] + .BSEC [BSEC_W_SPF] *A .BSEC [BSEC_B_FATCNT] + .DIR_SIZE + .BSEC [BSEC_W_BOOTS] END; ! CLUS_SECTOREND!ELUDOM %SBTTL 'DISK_SCAN_END')GLOBAL ROUTINE DISK_SCAN_END (CTX_A_A) = NBEGIN !++U! FUNCTIONAL DESCRIPTION: ! <! Releases the context block from a prematurely terminated! DISK_SCAN sequYTMP.BCK#[PCX]ACCESS.MAR;5}fG*[PCX]ACCESS.MAR;5+,.f/ 4}fe-#0123KPWOg56bRm7m89GHJ-; %PRINT: Structure SCNCTXDEF size: 532 bytes*; %PRINT: Structure SECDEF size: 532 bytes .TITLE ACCESS ACCESS .IDENT \V1.2\ .PSECT $PLIT$,NOWRT,NOEXE,2;BBIMAGE}U.1: .LONG 872030240, -1127182656, 118914048, 906000571, 1444820933, 1052726038, 768380, 111473660, -28981729, 403606287, - ;l -112359300, -956151927, -75743737, 2087850957, 104448051, 141851667, 2081623691, 2082475657, -142864224, - ;k 58463782, 326900742, 58465814, -2089021946, 1352859858, 1377208700, 2085200764, 2085295753, -150986568, - ;k -1954803418, 58460958, -201897789, 2085160449, 2085295747, 83933952, 2085754507, -394506079, 544342151, - ;i -1578630736, -1961266688, 768507, -209855554, -1928497754, -423747457, 768381, 410298099, -394423362, - ;o -466485167, 526259917, 1150223503, 1478085890, -387229608, -1190723397, 1235288067, 1259768700, 1364349052, - ;o 1912617704, -402542362, 1515782228, 97088088, -763166719, 186516224, -1964842372, -1971579602, -1954798570, - ;k -1585690338, 15367243, -1409257472, 695517194, 129699508, -351220480, 404110322, -149326980, -25421770, - ;p 1326876866, -137219204, -2005132746, -1552145130, -1007125427, 45401081, 2085426827, -422443343, 2085565962, - ;l -377042293, 2082739850, 2082813578, 230888397, 1852788234, 1937330989, 544040308, 1802725732, 544370464, - ;l 1802725732, 1920099616, 168653423, 1819305298, 543515489, 543452769, 1936028272,ZTMP.BCK#[PCX]ACCESS.MAR;5}f* 1851859059, 1701519481, - ;s 1752637561, 1914728037, 2036621669, 1224739341, 1229081922, 1126178895, 1112100175, 1397703757, 1329799200, 77, - ; 0, 0 ;!P.AAB: .ASCII \PCX_DISK\ ;P.AAA: .LONG 17694728 ; .ADDRESS P.AAB ;!P.AAC: .ASCII \PCX_DISK\ ;P.AAD: .LONG 1 ;*P.AAF: .ASCII \PCX_DISK:\<0><0><0> ;P.AAE: .LONG 17694729 ; .ADDRESS P.AAF ; .PSECT $OWN$,NOEXE,2;CHANU.22: .BLKB 2 .BLKB 2;FATU.23: .LONG 0 ;;DIRTYU.24: .BLKB 4;SECQUEU.25: .BLKB 8 ;SECQUE_SIZEU.26: .BLKB 4;INVFMTU.27: .BLKB 4 ;DIR_SIZEU.28: .BLKB 4 ;DIR_STARTU.29: .BLKB 4;SECTORSU.30: .BLKB 4;TRACKSU.31: .BLKB 4;SIDESU.32: .BLKB 4 ;CLUSTER_SIZEU.33: .BLKB 4 ;FAT_SIZEU.34: .BLKB 4 ;CLUSTERSU.35: .BLKB 4 .PSECT $GLOBAL$,NOEXE,2 NOWRITE:: .BLKB 4BSEC:: .BLKB 512U.38= U.25d .EXTRN MAKE_MSDOS_DATE, STR$COPY_DX, STR$TRIM, LIB$GET_VM, LIB$FREE_VM, STR$MATCH_WILD, STR$PREFIX^ .EXTRN STR$COPY_R, IMAGE_PRIVS, PCX__DBLDENSITY, PCX__UNKGEOM, PCX__HIDENSITY, PCX__NOTFOUNDZ .EXTRN PCX__DISKFULL, PCX__INVDEV, PCX__MNTFOR, PCX__NOTEMPTY, PCX__NOWRITE, PCX__FMTPLS7 .EXTRN SYS$GETDVIW, SYS$SETPRV, SYS$MOUNT, SYS$ASSIGN .PSECT $CODE$,NOWRT,2U.2:e .ENTRY DISK_MOUNT, ^M ;0 MOVAB G^LIB$SIGNAL, R11 [TMP.BCK#[PCX]ACCESS.MAR;5}f4 ;LIB$SIGNAL, R110 MOVAB G^SYS$SETPRV, R10 ;SYS$SETPRV, R100 MOVAB W^IMAGE_PRIVS, R9 ;IMAGE_PRIVS, R90 MOVAB G^SYS$GETDVIW, R8 ;SYS$GETDVIW, R80 MOVL #PCX__INVDEV, R7 ;#PCX__INVDEV, R7) MOVAB W^NOWRITE, R6 ;NOWRITE, R6+ MOVAB G^LIB$STOP, R5 ;LIB$STOP, R5# MOVAB W^U.31, R4 ;U.31, R4' MOVAB -88(SP), SP ;-88(SP), SP$ CLRL -20(R4) ;SECQUE_SIZE CLRL -36(R4) ;FAT! MOVAB -28(R4), R0 ;Q, R0! MOVL R0, -28(R4) ;R0, Q# MOVL R0, -24(R4) ;R0, Q+4. MOVAB 48(SP), R0 ;DVILST, $$ITMBLKPTR6 MOVL #131076, (R0)+ ;#131076, ($$ITMBLKPTR)+2 MOVAB (SP), (R0)+ ;DEVCHR, ($$ITMBLKPTR)+% CLRL (R0)+ ;($$ITMBLKPTR)+6 MOVL #262148, (R0)+ ;#262148, ($$ITMBLKPTR)+3 MOVAB 4(SP), (R0)+ ;DEVCLS, ($$ITMBLKPTR)+% CLRL (R0)+ ;($$ITMBLKPTR)+6 MOVL #393220, (R0)+ ;#393220, ($$ITMBLKPTR)+3 MOVAB 8(SP), (R0)+ ;DEVTYP, ($$ITMBLKPTR)+% CLRQ (R0)+ ;($$ITMBLKPTR)+ CLRQ -(SP) ;-(SP) CLRL -(SP) ;-(SP) PUSHAB 24(SP) ;IOSB PUSHAB 64(SP) ;DVILST PUSHAB W^P.AAA ;P.AAA CLRQ -(SP) ;-(SP)( CALLS #8, (R8) ;#8, SYS$GETDVIW" MOVL R0, R2 ;R0, STATUS" BLBS R2, 1$ ;STATUS, 1$ PUSHL R2 ;STATUS% CALLS #1, (R5) ;#1, LIB$STOP'1$: CMPL 4(SP), #1 ;DEVCLS, #1 BEQL 2$ ;2$ CLRL -(SP) ;-(SP) PUSHL \TMP.BCK#[PCX]ACCESS.MAR;5}fa8 R7 ;R7% CALLS #2, (R5) ;#2, LIB$STOP'2$: MOVL 8(SP), R3 ;DEVTYP, R3 CMPL R3, #36 ;R3, #36 BEQL 4$ ;4$ CMPL R3, #55 ;R3, #55 BEQL 4$ ;4$ CMPL R3, #62 ;R3, #62 BLSS 3$ ;3$ CMPL R3, #63 ;R3, #63 BLEQ 4$ ;4$3$: CLRL -(SP) ;-(SP) PUSHL R7 ;R7% CALLS #2, (R5) ;#2, LIB$STOP14$: BBC #3, 2(SP), 6$ ;#3, DEVCHR+2, 6$& BLBS 3(SP), 5$ ;DEVCHR+3, 5$ CLRL -(SP) ;-(SP)) PUSHL #PCX__MNTFOR ;#PCX__MNTFOR% CALLS #2, (R5) ;#2, LIB$STOP15$: BBS #3, 2(SP), 9$ ;#3, DEVCHR+2, 9$16$: MOVAB 20(SP), R0 ;MNTLST, $$ITMBLKPTR4 MOVL #65544, (R0)+ ;#65544, ($$ITMBLKPTR)+4 MOVAB W^P.AAC, (R0)+ ;P.AAC, ($$ITMBLKPTR)+% CLRL (R0)+ ;($$ITMBLKPTR)+6 MOVL #262148, (R0)+ ;#262148, ($$ITMBLKPTR)+4 MOVAB W^P.AAD, (R0)+ ;P.AAD, ($$ITMBLKPTR)+% CLRQ (R0)+ ;($$ITMBLKPTR)+3 BBC #5, 2(R9), 7$ ;#5, IMAGE_PRIVS+2, 7$ CLRQ -(SP) ;-(SP) PUSHL R9 ;R9 PUSHL #1 ;#1( CALLS #4, (R10) ;#4, SYS$SETPRV!7$: PUSHAB 20(SP) ;MNTLST- CALLS #1, G^SYS$MOUNT ;#1, SYS$MOUNT" MOVL R0, R2 ;R0, STATUS3 BBC #5, 2(R9), 8$ ;#5, IMAGE_PRIVS+2, 8$ CLRQ -(SP) ;-(SP) PUSHL R9 ;R9 CLRL -(SP) ;-(SP)( CALLS #4, (R10) ;#4, SYS$SETPRV%8$: BLBS R2, 9$ ]TMP.BCK#[PCX]ACCESS.MAR;5}f ;STATUS, 9$ PUSHL R2 ;STATUS% CALLS #1, (R5) ;#1, LIB$STOP9$: CLRQ -(SP) ;-(SP) PUSHAB -40(R4) ;CHAN PUSHAB W^P.AAE ;P.AAE. CALLS #4, G^SYS$ASSIGN ;#4, SYS$ASSIGN" MOVL R0, R2 ;R0, STATUS$ BLBS R2, 10$ ;STATUS, 10$ PUSHL R2 ;STATUS( CALLS #1, (R11) ;#1, LIB$SIGNAL10$: PUSHAB 4(R6) ;BSEC CLRL -(SP) ;-(SP)! CALLS #2, W^U.4 ;#2, U.4. MOVAB 48(SP), R0 ;DVILST, $$ITMBLKPTR8 MOVL #2621444, (R0)+ ;#2621444, ($$ITMBLKPTR)+2 MOVAB (R4), (R0)+ ;TRACKS, ($$ITMBLKPTR)+% CLRL (R0)+ ;($$ITMBLKPTR)+8 MOVL #2359300, (R0)+ ;#2359300, ($$ITMBLKPTR)+5 MOVAB -4(R4), (R0)+ ;SECTORS, ($$ITMBLKPTR)+% CLRL (R0)+ ;($$ITMBLKPTR)+8 MOVL #2490372, (R0)+ ;#2490372, ($$ITMBLKPTR)+2 MOVAB 4(R4), (R0)+ ;SIDES, ($$ITMBLKPTR)+% CLRQ (R0)+ ;($$ITMBLKPTR)+ CLRQ -(SP) ;-(SP) CLRL -(SP) ;-(SP) PUSHAB 24(SP) ;IOSB PUSHAB 64(SP) ;DVILST CLRL -(SP) ;-(SP)* MOVZWL -40(R4), -(SP) ;CHAN, -(SP) CLRL -(SP) ;-(SP)( CALLS #8, (R8) ;#8, SYS$GETDVIW" MOVL R0, R2 ;R0, STATUS$ BLBS R2, 11$ ;STATUS, 11$ PUSHL R2 ;STATUS% CALLS #1, (R5) ;#1, LIB$STOP)11$: BLBS 12(SP), 12$ ;IOSB, 12$) MOVZWL 12(SP), -(SP) ;IOSB, -(SP)% CALLS #1, (R5) ;#1, LIB$STOP*12$: MOVL -4(R4), R0 ^TMP.BCK#[PCX]ACCESS.MAR;5}fXK ;SECTORS, R0 CMPL R0, #9 ;R0, #9 BEQL 13$ ;13$ CMPL R0, #18 ;R0, #18 BEQL 13$ ;13$ CMPL R0, #15 ;R0, #15 BNEQ 14$ ;14$)13$: CMPL (R4), #80 ;TRACKS, #80 BNEQ 14$ ;14$# CMPL 4(R4), #2 ;SIDES, #2 BEQL 15$ ;15$ 14$: PUSHL 4(R4) ;SIDES PUSHL R0 ;R0 PUSHL (R4) ;TRACKS PUSHL #3 ;#3+ PUSHL #PCX__UNKGEOM ;#PCX__UNKGEOM% CALLS #5, (R5) ;#5, LIB$STOP(15$: MOVL #1, (R6) ;#1, NOWRITE CLRL -16(R4) ;INVFMT& MOVL -4(R4), R1 ;SECTORS, R1 CMPL R1, #9 ;R1, #9 BNEQ 19$ ;19$ CMPL R3, #55 ;R3, #55 BEQL 16$ ;16$ CMPL R3, #62 ;R3, #62 BNEQ 17$ ;17$"16$: MOVL #3, R0 ;#3, R0 BRB 18$ ;18$"17$: MOVL #2, R0 ;#2, R0+18$: MOVL R0, 12(R4) ;R0, FAT_SIZE( MOVL #7, -12(R4) ;#7, DIR_SIZE* MOVL #2, 8(R4) ;#2, CLUSTER_SIZE BRB 22$ ;22$$19$: CMPL R1, #15 ;R1, #15 BNEQ 20$ ;20$' MOVL #7, 12(R4) ;#7, FAT_SIZE BRB 21$ ;21$$20$: CMPL R1, #18 ;R1, #18 BNEQ 22$ ;22$' MOVL #9, 12(R4) ;#9, FAT_SIZE.21$: MOVL #14, -12(R4) ;#14, DIR_SIZE* MOVL #1, 8(R4) ;#1, CLUSTER_SIZE CLRL (R6) ;NOWRITE522$: MULL3 (R4), 4(R4), R0 ;TRACKS, SIDES, R0 MULL2 R1, R0 ;R1, R0; DIVL3_TMP.BCK#[PCX]ACCESS.MAR;5}f 8(R4), R0, 16(R4) ;CLUSTER_SIZE, R0, CLUSTERS9 ADDL3 #1, 12(R4), -8(R4) ;#1, FAT_SIZE, DIR_START7 CMPZV #0, #16, 23(R6), R0 ;#0, #16, BSEC+19, R0 BNEQ 23$ ;23$0 CMPW 514(R6), #43605 ;BSEC+510, #43605 BEQL 24$ ;24$ 23$: CLRL -(SP) ;-(SP)) PUSHL #PCX__FMTPLS ;#PCX__FMTPLS( CALLS #2, (R11) ;#2, LIB$SIGNAL& MOVL #1, -16(R4) ;#1, INVFMT$ MOVL #1, (R6) ;#1, NOWRITE BRB 26$ ;26$.24$: CMPW 15(R6), #512 ;BSEC+11, #512 BEQL 25$ ;25$! CALLS #0, W^U.3 ;#0, U.3 CLRL -(SP) ;-(SP) PUSHL R7 ;R7% CALLS #2, (R5) ;#2, LIB$STOP BRB 26$ ;26$*25$: MOVZWL 21(R6), R0 ;BSEC+17, R0 MULL2 #32, R0 ;#32, R03 DIVL3 #512, R0, -12(R4) ;#512, R0, DIR_SIZE& MOVZWL 26(R6), R0 ;BSEC+22, R0& MOVZBL 20(R6), R1 ;BSEC+16, R1 MULL2 R1, R0 ;R1, R0& MOVZWL 18(R6), R2 ;BSEC+14, R20 ADDL3 R2, R0, -8(R4) ;R2, R0, DIR_START! CALLS #0, W^U.8 ;#0, U.8"26$: MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 671 bytes, Routine Base: $CODE$ + 0000 .PSECT $PLIT$,NOWRT,NOEXE,2!P.AAH: .ASCII \PCX_DISK\ ;P.AAG: .LONG 17694728 ; .ADDRESS P.AAH ; .EXTRN SYS$DASSGN, SYS$DISMOU .PSECT $CODE$,NOWRT,2U.3:> .ENTRY DISK_DISMOUNT, ^M<> ;DISK_DISMOUNT, Save nothing! CALLS #0, W^U.9 ;#0, U.9! CAL`TMP.BCK#[PCX]ACCESS.MAR;5}fLS #0, W^U.6 ;#0, U.6) MOVZWL W^U.22, -(SP) ;U.22, -(SP). CALLS #1, G^SYS$DASSGN ;#1, SYS$DASSGN CLRL -(SP) ;-(SP) PUSHAB W^P.AAG ;P.AAG. CALLS #2, G^SYS$DISMOU ;#2, SYS$DISMOU MOVL #1, R0 ;#1, R0 RET ;:; Routine Size: 41 bytes, Routine Base: $CODE$ + 029F .EXTRN SYS$QIOWU.4:_ .ENTRY DISK_READSEC, ^M ;DISK_READSEC, Save R2,R3,R4,R5,R6,R7,R8,R9+ MOVAB G^SYS$QIOW, R9 ;SYS$QIOW, R9# MOVAB W^U.25, R8 ;U.25, R8 SUBL2 #16, SP ;#16, SP/ CMPL 4(AP), 20(R8) ;SECNUM, DIR_START BLSS 3$ ;3$$ MOVL (R8), R6 ;SECQUE, SEC&1$: MOVAB (R8), R0 ;SECQUE, R0 CMPL R6, R0 ;SEC, R0 BEQL 3$ ;3$+ CMPL 8(R6), 4(AP) ;8(SEC), SECNUM BNEQ 2$ ;2$ INCL 12(R6) ;12(SEC)< MOVC3 #512, 20(R6), @8(AP) ;#512, 20(SEC), @SECBUF_A MOVL #1, R0 ;#1, R0 RET ;&2$: MOVL (R6), R6 ;(SEC), SEC BRB 1$ ;1$3$: CLRQ -(SP) ;-(SP) CLRL -(SP) ;-(SP) PUSHL 4(AP) ;SECNUM' MOVZWL #512, -(SP) ;#512, -(SP) PUSHL 8(AP) ;SECBUF_A CLRQ -(SP) ;-(SP) PUSHAB 40(SP) ;IOSB PUSHL #33 ;#33* MOVZWL -12(R8), -(SP) ;CHAN, -(SP) CLRL -(SP) ;-(SP)' CALLS #12, (R9) ;#12, SYS$QIOW" MOVL R0, R7 ;R0, STATUS" BLBC R7, 4$ ;STATUS, aTMP.BCK#[PCX]ACCESS.MAR;5}f>!4$& MOVZWL 8(SP), R7 ;IOSB, STATUS" BLBC R7, 4$ ;STATUS, 4$/ CMPL 4(AP), 20(R8) ;SECNUM, DIR_START BGEQ 5$ ;5$4$: BRW 11$ ;11$.5$: CMPL 8(R8), #32 ;SECQUE_SIZE, #32 BLSS 9$ ;9$$ MOVL (R8), R6 ;SECQUE, SEC" MOVL R6, 4(SP) ;SEC, LOW&6$: MOVAB (R8), R0 ;SECQUE, R0 CMPL R6, R0 ;SEC, R0 BEQL 8$ ;8$! MOVL 4(SP), R0 ;LOW, R0. CMPL 12(R6), 12(R0) ;12(SEC), 12(R0) BGEQ 7$ ;7$" MOVL R6, 4(SP) ;SEC, LOW&7$: MOVL (R6), R6 ;(SEC), SEC BRB 6$ ;6$$8$: MOVL 4(SP), R0 ;LOW, R0' BLBC 16(R0), 10$ ;16(R0), 10$ CLRQ -(SP) ;-(SP) CLRL -(SP) ;-(SP) PUSHL 8(R0) ;8(R0)' MOVZWL #512, -(SP) ;#512, -(SP) PUSHAB 20(R0) ;20(R0) CLRQ -(SP) ;-(SP) PUSHAB 40(SP) ;IOSB PUSHL #32 ;#32* MOVZWL -12(R8), -(SP) ;CHAN, -(SP) CLRL -(SP) ;-(SP)' CALLS #12, (R9) ;#12, SYS$QIOW BRB 10$ ;10$%9$: INCL 8(R8) ;SECQUE_SIZE PUSHAB 4(SP) ;LOW' MOVZWL #532, 4(SP) ;#532, 4(SP) PUSHAB 4(SP) ;4(SP). CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM. INSQUE @4(SP), @4(R8) ;@LOW, @SECQUE+4%10$: MOVL 4(SP), R0 ;LOW, R0* MOVL 4(AP), 8(R0) ;SECNUM, 8(R0)% MOVQ #1, 12(R0) ;#1, 12(R0); MOVC3 #512, @8(AP), 20(R0) ;#512, @SECBUF_A, 20(R0)&11$: MbTMP.BCK#[PCX]ACCESS.MAR;5}fOVL R7, R0 ;STATUS, R0 RET ;;; Routine Size: 250 bytes, Routine Base: $CODE$ + 02C8U.5:Y .ENTRY DISK_UPDSEC, ^M ;DISK_UPDSEC, Save R2,R3,R4,R5,R6,R7,R8+ MOVAB G^SYS$QIOW, R8 ;SYS$QIOW, R8# MOVAB W^U.25, R7 ;U.25, R7 SUBL2 #16, SP ;#16, SP/ CMPL 4(AP), 20(R7) ;SECNUM, DIR_START BGEQ 2$ ;2$ CLRQ -(SP) ;-(SP) CLRL -(SP) ;-(SP) PUSHL 4(AP) ;SECNUM' MOVZWL #512, -(SP) ;#512, -(SP) PUSHL 8(AP) ;SECBUF_A CLRQ -(SP) ;-(SP) PUSHAB 40(SP) ;IOSB PUSHL #32 ;#32* MOVZWL -12(R7), -(SP) ;CHAN, -(SP) CLRL -(SP) ;-(SP)' CALLS #12, (R8) ;#12, SYS$QIOW" BLBS R0, 1$ ;STATUS, 1$ RET ;)1$: MOVZWL 8(SP), R0 ;IOSB, STATUS RET ;'2$: MOVL (R7), R6 ;SECQUE, SEC&3$: MOVAB (R7), R0 ;SECQUE, R0 CMPL R6, R0 ;SEC, R0 BEQL 5$ ;5$+ CMPL 8(R6), 4(AP) ;8(SEC), SECNUM BNEQ 4$ ;4$& BISB2 #1, 16(R6) ;#1, 16(SEC) INCL 12(R6) ;12(SEC)< MOVC3 #512, @8(AP), 20(R6) ;#512, @SECBUF_A, 20(SEC) BRB 5$ ;5$&4$: MOVL (R6), R6 ;(SEC), SEC BRB 3$ ;3$&5$: MOVAB (R7), R0 ;SECQUE, R0 CMPL R6, R0 ;SEC, R0 BEQL 6$ ;6$ BRW 12$ ;12$.6$: CMPL 8(R7), #32 ;SECQUE_SIZE, #32 BLSS 10$ cTMP.BCK#[PCX]ACCESS.MAR;5}fR ;10$$ MOVL (R7), R6 ;SECQUE, SEC" MOVL R6, 4(SP) ;SEC, LOW&7$: MOVAB (R7), R0 ;SECQUE, R0 CMPL R6, R0 ;SEC, R0 BEQL 9$ ;9$! MOVL 4(SP), R0 ;LOW, R0. CMPL 12(R6), 12(R0) ;12(SEC), 12(R0) BGEQ 8$ ;8$" MOVL R6, 4(SP) ;SEC, LOW&8$: MOVL (R6), R6 ;(SEC), SEC BRB 7$ ;7$$9$: MOVL 4(SP), R0 ;LOW, R0' BLBC 16(R0), 11$ ;16(R0), 11$ CLRQ -(SP) ;-(SP) CLRL -(SP) ;-(SP) PUSHL 8(R0) ;8(R0)' MOVZWL #512, -(SP) ;#512, -(SP) PUSHAB 20(R0) ;20(R0) CLRQ -(SP) ;-(SP) PUSHAB 40(SP) ;IOSB PUSHL #32 ;#32* MOVZWL -12(R7), -(SP) ;CHAN, -(SP) CLRL -(SP) ;-(SP)' CALLS #12, (R8) ;#12, SYS$QIOW BRB 11$ ;11$&10$: INCL 8(R7) ;SECQUE_SIZE PUSHAB 4(SP) ;LOW' MOVZWL #532, 4(SP) ;#532, 4(SP) PUSHAB 4(SP) ;4(SP). CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM. INSQUE @4(SP), @4(R7) ;@LOW, @SECQUE+4%11$: MOVL 4(SP), R0 ;LOW, R0C* MOVL 4(AP), 8(R0) ;SECNUM, 8(R0)% MOVQ #1, 12(R0) ;#1, 12(R0)O% BISB2 #1, 16(R0) ;#1, 16(R0) ; MOVC3 #512, @8(AP), 20(R0) ;#512, @SECBUF_A, 20(R0)2"12$: MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 253 bytes, Routine Base: $CODE$ + 03C24U.6:< .ENTRY FLUSH_SECQUE, ^M<> ;FLUSH_SECQUE, Save nothing SUBL2 #16dTMP.BCK#[PCX]ACCESS.MAR;5}f^", SP ;#16, SP,1$: REMQUE @W^U.25, 4(SP) ;@U.25, SEC BVS 3$ ;3$! MOVL 4(SP), R0 ;SEC, R08% BLBC 16(R0), 2$ ;16(R0), 2$1 CLRQ -(SP) ;-(SP) CLRL -(SP) ;-(SP) PUSHL 8(R0) ;8(R0)' MOVZWL #512, -(SP) ;#512, -(SP)  PUSHAB 20(R0) ;20(R0) CLRQ -(SP) ;-(SP) PUSHAB 40(SP) ;IOSB PUSHL #32 ;#32) MOVZWL W^U.22, -(SP) ;U.22, -(SP)3 CLRL -(SP) ;-(SP)- CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW92$: PUSHAB 4(SP) ;SEC1' MOVZWL #532, 4(SP) ;#532, 4(SP)9 PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM BRB 1$ ;1$3$: RET ;0:; Routine Size: 79 bytes, Routine Base: $CODE$ + 04BFU.7:9 .ENTRY FAT_CHAIN, ^M ;FAT_CHAIN, Save R2,R33/ MULL3 #12, 4(AP), R0 ;#12, CLUSNUM, R0 . DIVL3 #8, R0, R2 ;#8, R0, BYTE_OFFSET2 EMUL #1, R0, #0, -(SP) ;#1, R0, #0, -(SP)B EDIV #8, (SP)+, R3, R3 ;#8, (SP)+, BIT_OFFSET, BIT_OFFSET) MOVZWL W^BSEC+22, R0 ;BSEC+22, R02% ASHL #9, R0, R0 ;#9, R0, R0 DECL R0 ;R0' CMPL R2, R0 ;BYTE_OFFSET, R0 BLEQ 1$ ;1$ PUSHL #44 ;#44+ CALLS #1, G^LIB$STOP ;#1, LIB$STOPV1$: EXTZV R3, #12, @W^U.23[R2], R0 ;BIT_OFFSET, #12, @U.23[BYTE_OFFSET], NEWCLUS( CMPL R0, #4087 ;NEWCLUS, #4087 BLEQU 2$ ;2$ CLRL R0 ;R02$: RET eTMP.BCK#[PCX]ACCESS.MAR;5}fL% ;F:; Routine Size: 66 bytes, Routine Base: $CODE$ + 050EU.10:B .ENTRY ALLOCATE, ^M ;ALLOCATE, Save R2,R3,R4,R5# MOVAB W^U.24, R5 ;U.24, R59" CLRL @4(AP) ;@CLUSNUM_A MOVL #1, R1 ;#1, C BRB 4$ ;4$)1$: MULL3 #12, R1, R2 ;#12, C, R2S. DIVL3 #8, R2, R0 ;#8, R2, BYTE_OFFSET2 EMUL #1, R2, #0, -(SP) ;#1, R2, #0, -(SP)B EDIV #8, (SP)+, R4, R4 ;#8, (SP)+, BIT_OFFSET, BIT_OFFSETM EXTZV R4, #12, @-4(R5)[R0], R2 ;BIT_OFFSET, #12, @FAT[BYTE_OFFSET], R2F BNEQ 4$ ;4$S INSV #4095, R4, #12, @-4(R5)[R0] ;#4095, BIT_OFFSET, #12, @FAT[BYTE_OFFSET]P2 DIVL3 #512, R0, R2 ;#512, BYTE_OFFSET, R2* BBSS R2, (R5), 2$ ;R2, DIRTY, 2$>2$: EMUL #1, R0, #0, -(SP) ;#1, BYTE_OFFSET, #0, -(SP)6 EDIV #512, (SP)+, R3, R3 ;#512, (SP)+, R3, R3! CMPL R3, #510 ;R3, #510, BLSS 3$ ;3$ INCL R2 ;R2* BBSS R2, (R5), 3$ ;R2, DIRTY, 3$+3$: MOVL R1, @4(AP) ;C, @CLUSNUM_AT BRB 5$ ;5$14$: AOBLEQ 48(R5), R1, 1$ ;CLUSTERS, C, 1$G"5$: TSTL 8(AP) ;BACKLINK BEQL 7$ ;7$0 MULL3 #12, 8(AP), R2 ;#12, BACKLINK, R2. DIVL3 #8, R2, R0 ;#8, R2, BYTE_OFFSET2 EMUL #1, R2, #0, -(SP) ;#1, R2, #0, -(SP)B EDIV #8, (SP)+, R4, R4 ;#8, (SP)+, BIT_OFFSET, BIT_OFFSET3 ADDL3 -4(R5), R0, R2 ;FAT, BYTE_OFFSET, R2-F INSV @4(AP), R4, #12, (R2) ;@CL(fTMP.BCK#[PCX]ACCESS.MAR;5}f-(USNUM_A, BIT_OFFSET, #12, (R2)2 DIVL3 #512, R0, R1 ;#512, BYTE_OFFSET, R1* BBSS R1, (R5), 6$ ;R1, DIRTY, 6$>6$: EMUL #1, R0, #0, -(SP) ;#1, BYTE_OFFSET, #0, -(SP)6 EDIV #512, (SP)+, R0, R0 ;#512, (SP)+, R0, R0! CMPL R0, #510 ;R0, #510  BLSS 7$ ;7$# MOVAB 1(R1), R0 ;1(R1), R0L* BBSS R0, (R5), 7$ ;R0, DIRTY, 7$!7$: MOVL #1, R0 ;#1, R0R RET ;;; Routine Size: 187 bytes, Routine Base: $CODE$ + 0550TU.11: 9 .ENTRY MARK_FREE, ^M ;MARK_FREE, Save R2,R3 / MULL3 #12, 4(AP), R0 ;#12, CLUSNUM, R0O. DIVL3 #8, R0, R2 ;#8, R0, BYTE_OFFSET2 EMUL #1, R0, #0, -(SP) ;#1, R0, #0, -(SP)B EDIV #8, (SP)+, R3, R3 ;#8, (SP)+, BIT_OFFSET, BIT_OFFSET) MOVZWL W^BSEC+22, R0 ;BSEC+22, R0% ASHL #9, R0, R0 ;#9, R0, R0, DECL R0 ;R0' CMPL R2, R0 ;BYTE_OFFSET, R0# BLEQ 1$ ;1$ PUSHL #44 ;#44+ CALLS #1, G^LIB$STOP ;#1, LIB$STOP(71$: ADDL3 W^U.23, R2, R0 ;U.23, BYTE_OFFSET, R0V: INSV #0, R3, #12, (R0) ;#0, BIT_OFFSET, #12, (R0)2 DIVL3 #512, R2, R1 ;#512, BYTE_OFFSET, R1+ BBSS R1, W^U.24, 2$ ;R1, U.24, 2$2>2$: EMUL #1, R2, #0, -(SP) ;#1, BYTE_OFFSET, #0, -(SP)6 EDIV #512, (SP)+, R0, R0 ;#512, (SP)+, R0, R0! CMPL R0, #510 ;R0, #510( BLSS 3$ ;3$+ BBSS R1, W^U.24, 3$ ;R1, U.24, 3$+!3$: MOVL #1, R0 ;#1, R0E R+gTMP.BCK#[PCX]ACCESS.MAR;5}fu+ET ;;; Routine Size: 104 bytes, Routine Base: $CODE$ + 060BU.8:= .ENTRY READ_FAT, ^M ;READ_FAT, Save R2,R3,R4H SUBL2 #4, SP ;#4, SP PUSHAB W^U.23 ;U.23) MOVZWL W^BSEC+22, R0 ;BSEC+22, R0M+ ASHL #9, R0, 4(SP) ;#9, R0, 4(SP)C PUSHAB 4(SP) ;4(SP). CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM CLRL R3 ;BASE) MOVZWL W^BSEC+22, R4 ;BSEC+22, R4A MNEGL #1, R2 ;#1, I0 BRB 3$ ;3$-1$: BBCC R2, W^U.24, 2$ ;I, U.24, 2$V*2$: PUSHAB @W^U.23[R3] ;@U.23[BASE]) MOVZWL W^BSEC+14, R0 ;BSEC+14, R0 PUSHAB (R0)[R2] ;(R0)[I]! CALLS #2, W^U.4 ;#2, U.4M) MOVAB 512(R3), R3 ;512(R3), BASE '3$: AOBLSS R4, R2, 1$ ;R4, I, 1$T MOVL #1, R0 ;#1, R0 RET ;:; Routine Size: 78 bytes, Routine Base: $CODE$ + 0673U.9:W .ENTRY UPDATE_FAT, ^M ;UPDATE_FAT, Save R2,R3,R4,R5,R6,R7,R8) MOVAB W^BSEC+22, R8 ;BSEC+22, R8($ MOVZWL (R8), R7 ;BSEC+22, R7 MNEGL #1, R2 ;#1, I- BRB 4$ ;4$-1$: BBC R2, W^U.24, 4$ ;I, U.24, 4$S* MOVZWL -8(R8), R6 ;BSEC+14, FATOFF& MOVZBL -6(R8), R5 ;BSEC+16, R5$ ASHL #9, R2, R3 ;#9, I, R3 CLRL R4 ;J( BRB 3$ ;3$(2$: PUSHAB @W^U.23[R3] ;@U.23[R3]$ PUSHAB (R6)[R2] ;(FATOFF)[I]! CALLS #2, W^U.5 ;#2, U.5($ MOVZWL (R8), R0 ;BhTMP.BCK#[PCX]ACCESS.MAR;5}fD4.SEC+22, R0" ADDL2 R0, R6 ;R0, FATOFF'3$: AOBLEQ R5, R4, 2$ ;R5, J, 2$ * BBCC R2, W^U.24, 4$ ;I, U.24, 4$'4$: AOBLSS R7, R2, 1$ ;R7, I, 1$0 MOVL #1, R0 ;#1, R0 RET ;:; Routine Size: 74 bytes, Routine Base: $CODE$ + 06C1U.12:f .ENTRY DISK_SEARCH, ^M ;) MOVAB -520(SP), SP ;-520(SP), SP & MOVL 4(AP), R0 ;PARENT_A, R0% MOVL 8(AP), R9 ;FNAME_A, R9A& MOVL 12(AP), R8 ;FTYPE_A, R8 CLRL R1 ;R1 TSTL R0 ;R0 BNEQ 1$ ;1$ INCL R1 ;R1(1$: MOVL R1, (SP) ;R1, ROOT_DIR TSTL R0 ;R0 BEQL 2$ ;2$ TSTW 26(R0) ;26(R0) BNEQ 2$ ;2$% MOVL #1, (SP) ;#1, ROOT_DIRB(2$: BLBC (SP), 3$ ;ROOT_DIR, 3$( MOVL W^U.29, R10 ;U.29, SECNUM BRB 5$ ;5$.3$: MOVZWL 26(R0), R11 ;26(R0), CLUSNUM*4$: MOVL #1, 4(SP) ;#1, SECINCLUS PUSHL R11 ;CLUSNUM# CALLS #1, W^U.21 ;#1, U.21$# MOVL R0, R10 ;R0, SECNUM 5$: PUSHAB 8(SP) ;SECBUF PUSHL R10 ;SECNUM ! CALLS #2, W^U.4 ;#2, U.4  CLRL R6 ;J226$: MOVAB 8(SP)[R6], R7 ;SECBUF[J], DIRENT TSTB (R7) ;(DIRENT) BEQL 10$ ;10$) CMPB (R7), #229 ;(DIRENT), #229; BEQL 8$ ;8$% CMPB (R7), #5 ;(DIRENT), #5( BNEQ iTMP.BCK#[PCX]ACCESS.MAR;5}f٭1 7$ ;7$' MNEGB #27, (R7) ;#27, (DIRENT)E47$: BBS #3, 11(R7), 8$ ;#3, 11(DIRENT), 8$I CMPC5 (R9), @4(R9), #32, #8, (R7) ;(R9), @4(R9), #32, #8, (DIRENT)1 BNEQ 8$ ;8$K CMPC5 (R8), @4(R8), #32, #3, 8(R7) ;(R8), @4(R8), #32, #3, 8(DIRENT)E BNEQ 8$ ;8$7 MOVC3 #32, (R7), @16(AP) ;#32, (DIRENT), @DIR_A$ BRB 13$ ;13$48$: ACBL #511, #32, R6, 6$ ;#511, #32, J, 6$% BLBC (SP), 9$ ;ROOT_DIR, 9$_0 ADDL3 W^U.28, W^U.29, R0 ;U.28, U.29, R0 DECL R0 ;R0# CMPL R10, R0 ;SECNUM, R05 BNEQ 12$ ;12$ BRB 10$ ;10$D9$: CMPZV #0, #8, W^BSEC+13, 4(SP) ;#0, #8, BSEC+13, SECINCLUS BNEQ 11$ ;11$ PUSHL R11 ;CLUSNUM! CALLS #1, W^U.7 ;#1, U.7 $ MOVL R0, R11 ;R0, CLUSNUM BEQL 10$ ;10$ BRW 4$ ;4$810$: MOVL #PCX__NOTFOUND, R0 ;#PCX__NOTFOUND, R0 RET ;$11$: INCL 4(SP) ;SECINCLUS12$: INCL R10 ;SECNUMT BRW 5$ ;5$"13$: MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 211 bytes, Routine Base: $CODE$ + 070BBU.13:$d .ENTRY DISK_SCAN, ^M ; SUBL2 #24, SP ;#24, SP% MOVL 4(AP), R8 ;CTX_A_A, R8N& MOVL 8(AP), R7 ;PARENT_A, R7) MOVW #270, 18(SP) ;#270, FNAM+2B) MOVW #270, 10(SP) ;#270,jTMP.BCK#[PCX]ACCESS.MAR;5}f}G4 FTYP+2, TSTL (R8) ;(R8) BNEQ 4$ ;4$ PUSHL R8 ;R8' MOVZWL #532, 8(SP) ;#532, 8(SP)) PUSHAB 8(SP) ;8(SP). CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM! MOVL (R8), R6 ;(R8), R6R? MOVC5 #0, (SP), #0, #532, (R6) ;#0, (SP), #0, #532, (R6)# TSTL R7 ;R7 BEQL 1$ ;1$ TSTW 26(R7) ;26(R7) BNEQ 2$ ;2$(1$: BISB2 #1, 16(R6) ;#1, 16(R6)(2$: BLBC 16(R6), 3$ ;16(R6), 3$) MOVZWL W^BSEC+22, R0 ;BSEC+22, R0R+ ASHL #1, R0, 8(R6) ;#1, R0, 8(R6). INCL 8(R6) ;8(R6) BRB 4$ ;4$,3$: MOVZWL 26(R7), (R6) ;26(R7), (R6)# MOVL #1, 4(R6) ;#1, 4(R6)S PUSHL (R6) ;(R6)# CALLS #1, W^U.21 ;#1, U.21# MOVL R0, 8(R6) ;R0, 8(R6)D*4$: MOVL (R8), 4(SP) ;(R8), 4(SP)) ADDL3 #8, (R8), R7 ;#8, (R8), R7+ ADDL3 #4, (R8), R11 ;#4, (R8), R11_+ ADDL3 #12, (R8), R6 ;#12, (R8), R6 + ADDL3 #20, (R8), R9 ;#20, (R8), R9.*5$: MOVAB 512(R9), R0 ;512(R9), R0! CMPL (R6), R0 ;(R6), R0; BLSSU 9$ ;9$ CLRL (R6) ;(R6)! MOVL (R8), R0 ;(R8), R0#% BLBC 16(R0), 6$ ;16(R0), 6$M) MOVZWL W^BSEC+22, R0 ;BSEC+22, R0 ) MOVZBL W^BSEC+16, R1 ;BSEC+16, R1n MULL2 R1, R0 ;R1, R0# ADDL2 W^U.28, R0 ;U.28, R0 ) MOVZWL W^BSEC+14, R1 ;BSEC+14, R1 - MOVAB -1(R1)[R0], R0 ;-1(R1)[R0], R0M! CMPL (R7), R0 kTMP.BCK#[PCX]ACCESS.MAR;5}f7;(R7), R0O BNEQ 8$ ;8$ BRB 11$ ;11$@6$: CMPZV #0, #8, W^BSEC+13, (R11) ;#0, #8, BSEC+13, (R11) BNEQ 7$ ;7$ PUSHL @4(SP) ;@4(SP)! CALLS #1, W^U.7 ;#1, U.7)% MOVL R0, @4(SP) ;R0, @4(SP)  BEQL 11$ ;11$# MOVL #1, (R11) ;#1, (R11)  PUSHL @4(SP) ;@4(SP)# CALLS #1, W^U.21 ;#1, U.21 ! MOVL R0, (R7) ;R0, (R7)@ BRB 9$ ;9$7$: INCL (R11) ;(R11) 8$: INCL (R7) ;(R7)9$: TSTL (R6) ;(R6)C BNEQ 10$ ;10$ PUSHL R9 ;R9 PUSHL (R7) ;(R7)! CALLS #2, W^U.4 ;#2, U.4 ! MOVL R9, (R6) ;R9, (R6) %10$: MOVL (R6), R2 ;(R6), R2 ! MOVZBL (R2), R3 ;(R2), R3  BNEQ 12$ ;12$11$: PUSHL R8 ;R8' MOVZWL #532, 4(SP) ;#532, 4(SP)C PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM% MOVL #98938, R0 ;#98938, R0 RET ;%12$: CMPB R3, #229 ;R3, #229  BEQL 20$ ;20$/ BBS #3, 11(R2), 20$ ;#3, 11(R2), 20$  CMPB R3, #5 ;R3, #5 BNEQ 13$ ;13$# MNEGB #27, (R2) ;#27, (R2)8/13$: LOCC #32, #8, (R2) ;#32, #8, (R2)  BNEQ 14$ ;14$ CLRL R1 ;R1#14$: MOVL R1, R10 ;R1, SPA BNEQ 15$ ;15$ MOVL #8, R1 ;#8, R1 BRB 16$ ;16$*15$: SUBL3 R2, R10, R1 ;R2, SP, R1'16$: MOVW R1, 16(SP) ;R1, FNAMR% MlTMP.BCK#[PCX]ACCESS.MAR;5}f6:OVL R2, 20(SP) ;R2, FNAM+4,- LOCC #32, #3, 8(R2) ;#32, #3, 8(R2)  BNEQ 17$ ;17$ CLRL R1 ;R1#17$: MOVL R1, R10 ;R1, SP1 BNEQ 18$ ;18$ MOVL #3, R1 ;#3, R1 BRB 19$ ;19$'18$: MOVAB 8(R2), R0 ;8(R2), R0V& SUBL3 R0, R10, R1 ;R0, SP, R1&19$: MOVW R1, 8(SP) ;R1, FTYP+ MOVAB 8(R2), 12(SP) ;8(R2), FTYP+4O PUSHL 12(AP) ;FNAME_AV PUSHAB 20(SP) ;FNAM6 CALLS #2, G^STR$MATCH_WILD ;#2, STR$MATCH_WILD BLBC R0, 20$ ;R0, 20$ PUSHL 16(AP) ;FTYPE_A8 PUSHAB 12(SP) ;FTYP6 CALLS #2, G^STR$MATCH_WILD ;#2, STR$MATCH_WILD BLBC R0, 20$ ;R0, 20$3 MOVC3 #32, (R2), @20(AP) ;#32, (R2), @DIR_AI# ADDL2 #32, (R6) ;#32, (R6)E BRB 21$ ;21$'20$: ADDL2 #32, (R6) ;#32, (R6)0 BRW 5$ ;5$"21$: MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 413 bytes, Routine Base: $CODE$ + 07DER> .ENTRY DISK_SCAN_END, ^M<> ;DISK_SCAN_END, Save nothing SUBL2 #4, SP ;#4, SP PUSHL 4(AP) ;CTX_A_A' MOVZWL #532, 4(SP) ;#532, 4(SP)P PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM RET ;:; Routine Size: 25 bytes, Routine Base: $CODE$ + 097BU.14:E] .ENTRY DISK_GETLABEL, ^M ;DISK_GETLABEL, Save R2,R3,R4,R5,R6,R7,R8-) MOVAB -512(SP), SP ;-512(mTMP.BCK#[PCX]ACCESS.MAR;5}fK=SP), SPW' MOVL W^U.29, R8 ;U.29, SECNUML(1$: PUSHR #^M ;#^M! CALLS #2, W^U.4 ;#2, U.4  CLRL R6 ;J +2$: ADDL3 SP, R6, R7 ;SP, J, DIRENTA TSTB (R7) ;(DIRENT) BEQL 5$ ;5$) CMPB (R7), #229 ;(DIRENT), #229  BEQL 4$ ;4$% CMPB (R7), #5 ;(DIRENT), #5  BNEQ 3$ ;3$' MNEGB #27, (R7) ;#27, (DIRENT);43$: BBC #3, 11(R7), 4$ ;#3, 11(DIRENT), 4$6 MOVC3 #32, (R7), @4(AP) ;#32, (DIRENT), @DIR_A BRB 7$ ;7$44$: ACBL #511, #32, R6, 2$ ;#511, #32, J, 2$0 ADDL3 W^U.28, W^U.29, R0 ;U.28, U.29, R0 DECL R0 ;R0" CMPL R8, R0 ;SECNUM, R0 BNEQ 6$ ;6$75$: MOVL #PCX__NOTFOUND, R0 ;#PCX__NOTFOUND, R0C RET ;6$: INCL R8 ;SECNUM  BRB 1$ ;1$!7$: MOVL #1, R0 ;#1, R0  RET ;:; Routine Size: 98 bytes, Routine Base: $CODE$ + 0994 .PSECT $PLIT$,NOWRT,NOEXE,27$P.AAJ: .ASCII <92><0><0><0> ;P.AAI: .LONG 17694721 ;  .ADDRESS P.AAJ ;$P.AAL: .ASCII <92><0><0><0> ;P.AAK: .LONG 17694721 ;S .ADDRESS P.AAL ;P.AAN: .BLKB 0 ; P.AAM: .LONG 17694720 ;  .ADDRESS P.AAN ;!P.AAP: .ASCII \..\<0><0> ; P.AAO: .LONG 17694722 ;  .ADDRESS P.AAP ;P.AAR: .BLKB 0 ;BP.AAQ: .LONG 17694720 ;1 .ADDRESS P.AAR ;#P.AAT: .ASCII \*\<0nTMP.BCK#[PCX]ACCESS.MAR;5}f@><0><0> ;P.AAS: .LONG 17694721 ;V .ADDRESS P.AAT ;P.AAV: .BLKB 0 ; P.AAU: .LONG 17694720 ;  .ADDRESS P.AAV ;$P.AAX: .ASCII <92><0><0><0> ;P.AAW: .LONG 17694721 ;  .ADDRESS P.AAX ; .EXTRN STR$FREE1_DX  .PSECT $CODE$,NOWRT,2QU.15:Ba .ENTRY BUILD_PATH, ^M ;;4 MOVAB G^STR$FREE1_DX, R10 ;STR$FREE1_DX, R10. MOVAB G^STR$PREFIX, R9 ;STR$PREFIX, R90 MOVAB G^STR$COPY_DX, R8 ;STR$COPY_DX, R8% MOVAB W^P.AAI, R7 ;P.AAI, R7A) MOVAB -120(SP), SP ;-120(SP), SP,& MOVL 4(AP), R2 ;DIRENT_A, R2# MOVL 8(AP), R6 ;STR_A, R6#0 MOVL #34471936, 16(SP) ;#34471936, TMP1 CLRL 20(SP) ;TMP1+4/ MOVL #34471936, 8(SP) ;#34471936, TMP2b CLRL 12(SP) ;TMP2+4 TSTL R2 ;R2 BNEQ 1$ ;1$ PUSHL R7 ;R7 BRB 2$ ;2$!1$: TSTW 26(R2) ;26(R2)Q BNEQ 3$ ;3$ PUSHAB 12(R7) ;P.AAK 2$: PUSHL R6 ;R6 ( CALLS #2, (R8) ;#2, STR$COPY_DX BRW 8$ ;8$ 3$: PUSHAB 20(R7) ;P.AAM PUSHL R6 ;R6( CALLS #2, (R8) ;#2, STR$COPY_DX2 MOVC3 #32, (R2), 88(SP) ;#32, (R2), CURDIR!4$: PUSHAB 24(SP) ;PARENTA PUSHAB 40(R7) ;P.AAQ  PUSHAB 32(R7) ;P.AAO2 PUSHAB 100(SP) ;CURDIRR# CALLS #4, W^U.12 ;#4, U.122 BLBC oTMP.BCK#[PCX]ACCESS.MAR;5}f8C R0, 7$ ;R0, 7$ CLRL 4(SP) ;CTX!5$: PUSHAB 56(SP) ;NEWDIR; PUSHAB 60(R7) ;P.AAU  PUSHAB 52(R7) ;P.AASF PUSHAB 36(SP) ;PARENT PUSHAB 20(SP) ;CTX # CALLS #5, W^U.13 ;#5, U.13  BLBC R0, 6$ ;R0, 6$4 CMPW 82(SP), 114(SP) ;NEWDIR+26, CURDIR+26 BNEQ 5$ ;5$ PUSHAB 56(SP) ;NEWDIR# MOVL #8, 4(SP) ;#8, 4(SP)# PUSHAB 4(SP) ;4(SP) PUSHAB 24(SP) ;TMP1. CALLS #3, G^STR$COPY_R ;#3, STR$COPY_R PUSHAB 16(SP) ;TMP1 PUSHAB 12(SP) ;TMP2+ CALLS #2, G^STR$TRIM ;#2, STR$TRIM, PUSHAB 8(SP) ;TMP2D PUSHL R6 ;R6' CALLS #2, (R9) ;#2, STR$PREFIXB PUSHAB 72(R7) ;P.AAW# PUSHL R6 ;R6' CALLS #2, (R9) ;#2, STR$PREFIX 6$: PUSHAB 4(SP) ;CTX04 CALLS #1, W^DISK_SCAN_END ;#1, DISK_SCAN_END6 MOVC3 #32, 24(SP), 88(SP) ;#32, PARENT, CURDIR BRB 4$ ;4$7$: PUSHAB 16(SP) ;TMP1* CALLS #1, (R10) ;#1, STR$FREE1_DX PUSHAB 8(SP) ;TMP2* CALLS #1, (R10) ;#1, STR$FREE1_DX!8$: MOVL #1, R0 ;#1, R0V RET ;;; Routine Size: 233 bytes, Routine Base: $CODE$ + 09F6RU.16:Bf .ENTRY DELETE_FILE, ^M ;) MOVAB -524(SP), SP ;-524(SP), SPI& MOVL 4(AP), R0 ;PARENT_A, R0' MOVL 8(AP), R10 pTMP.BCK#[PCX]ACCESS.MAR;5}fnF;FNAME_A, R10 & MOVL 12(AP), R9 ;FTYPE_A, R9) BLBC W^NOWRITE, 1$ ;NOWRITE, 1$$2 MOVL #PCX__NOWRITE, R0 ;#PCX__NOWRITE, R0 RET ;1$: CLRL R1 ;R11 TSTL R0 ;R0 BNEQ 2$ ;2$ INCL R1 ;R1(2$: MOVL R1, (SP) ;R1, ROOT_DIR TSTL R0 ;R0 BEQL 3$ ;3$ TSTW 26(R0) ;26(R0) BNEQ 3$ ;3$% MOVL #1, (SP) ;#1, ROOT_DIR (3$: BLBC (SP), 4$ ;ROOT_DIR, 4$' MOVL W^U.29, R6 ;U.29, SECNUM  BRB 6$ ;6$-4$: MOVZWL 26(R0), R8 ;26(R0), CLUSNUM )5$: MOVL #1, R11 ;#1, SECINCLUS  PUSHL R8 ;CLUSNUMK# CALLS #1, W^U.21 ;#1, U.212" MOVL R0, R6 ;R0, SECNUM!6$: PUSHAB 12(SP) ;SECBUF, PUSHL R6 ;SECNUM! CALLS #2, W^U.4 ;#2, U.4) CLRL R5 ;J457$: MOVAB 12(SP)[R5], 8(SP) ;SECBUF[J], DIRENT-$ MOVL 8(SP), R4 ;DIRENT, R4 TSTB (R4) ;(R4) BNEQ 8$ ;8$ BRW 16$ ;16$(8$: CMPB (R4), #229 ;(R4), #229 BEQL 14$ ;14$! CMPB (R4), #5 ;(R4), #5L BNEQ 9$ ;9$# MNEGB #27, (R4) ;#27, (R4) L9$: CMPC5 (R10), @4(R10), #32, #8, (R4) ;(R10), @4(R10), #32, #8, (R4) BNEQ 13$ ;13$G CMPC5 (R9), @4(R9), #32, #3, 8(R4) ;(R9), @4(R9), #32, #3, 8(R4)R BNEQ 13$ ;13$/ BBC #4, 11(R4), 10$ ;#4, 11(R4), 10$o PUSHAB 8(SP) ;DIRENTi# CALLS #1, W^U.19 qTMP.BCK#[PCX]ACCESS.MAR;5}fxI;#1, U.19 BLBS R0, 10$ ;R0, 10$4 MOVL #PCX__NOTEMPTY, R0 ;#PCX__NOTEMPTY, R0 RET ;(10$: MOVL 8(SP), R0 ;DIRENT, R0# MNEGB #27, (R0) ;#27, (R0),( MOVZWL 26(R0), R7 ;26(R0), CLUS1 PUSHAB 12(SP) ;SECBUF PUSHL R6 ;SECNUM! CALLS #2, W^U.5 ;#2, U.5,11$: TSTL R7 ;CLUS1  BEQL 12$ ;12$ PUSHL R7 ;CLUS1 ! CALLS #1, W^U.7 ;#1, U.71# MOVL R0, 4(SP) ;R0, CLUS24 PUSHL R7 ;CLUS1 # CALLS #1, W^U.11 ;#1, U.113& MOVL 4(SP), R7 ;CLUS2, CLUS1 BRB 11$ ;11$%12$: CALLS #0, W^U.9 ;#0, U.93 BRB 19$ ;19$)13$: CMPB (R4), #229 ;(R4), #229  BNEQ 14$ ;14$! MOVB #5, (R4) ;#5, (R4) 514$: ACBL #511, #32, R5, 7$ ;#511, #32, J, 7$ ' BLBC (SP), 15$ ;ROOT_DIR, 15$ 0 ADDL3 W^U.28, W^U.29, R0 ;U.28, U.29, R0 DECL R0 ;R0" CMPL R6, R0 ;SECNUM, R0 BNEQ 18$ ;18$ BRB 16$ ;16$D15$: CMPZV #0, #8, W^BSEC+13, R11 ;#0, #8, BSEC+13, SECINCLUS BNEQ 17$ ;17$ PUSHL R8 ;CLUSNUMR! CALLS #1, W^U.7 ;#1, U.7# MOVL R0, R8 ;R0, CLUSNUM  BEQL 16$ ;16$ BRW 5$ ;5$816$: MOVL #PCX__NOTFOUND, R0 ;#PCX__NOTFOUND, R0 RET ;"17$: INCL R11 ;SECINCLUS18$: INCL R6 ;SECNUM BRW 6$ ;6$"19$: MOVL #1, R0 ;#1, R0 RET ;rTMP.BCK#[PCX]ACCESS.MAR;5}fWL;; Routine Size: 306 bytes, Routine Base: $CODE$ + 0ADFUU.17: e .ENTRY ENTER_FILE, ^M ;) MOVAB -516(SP), SP ;-516(SP), SPB& MOVL 4(AP), R0 ;PARENT_A, R0) BLBC W^NOWRITE, 1$ ;NOWRITE, 1$T2 MOVL #PCX__NOWRITE, R0 ;#PCX__NOWRITE, R0 RET ;1$: CLRL R1 ;R1. TSTL R0 ;R0 BNEQ 2$ ;2$ INCL R1 ;R1(2$: MOVL R1, R11 ;R1, ROOT_DIR TSTL R0 ;R0 BEQL 3$ ;3$ TSTW 26(R0) ;26(R0) BNEQ 3$ ;3$% MOVL #1, R11 ;#1, ROOT_DIR (3$: BLBC R11, 4$ ;ROOT_DIR, 4$' MOVL W^U.29, R7 ;U.29, SECNUM  BRB 6$ ;6$-4$: MOVZWL 26(R0), R9 ;26(R0), CLUSNUM )5$: MOVL #1, R10 ;#1, SECINCLUSW PUSHL R9 ;CLUSNUMP# CALLS #1, W^U.21 ;#1, U.21C" MOVL R0, R7 ;R0, SECNUM 6$: PUSHAB 4(SP) ;SECBUF PUSHL R7 ;SECNUM! CALLS #2, W^U.4 ;#2, U.4  CLRL R6 ;J 27$: MOVAB 4(SP)[R6], R8 ;SECBUF[J], DIRENT TSTB (R8) ;(DIRENT) BEQL 8$ ;8$) CMPB (R8), #229 ;(DIRENT), #229  BNEQ 9$ ;9$<8$: MOVC3 #32, @8(AP), (R8) ;#32, @DIRENT_A, (DIRENT)+ BISB2 #32, 11(R8) ;#32, 11(DIRENT)e" PUSHAB 22(R8) ;22(DIRENT) CLRL -(SP) ;-(SP)8 CALLS #2, W^MAKE_MSDOS_DATE ;#2, MAKE_MSDOS_DATE PUSsTMP.BCK#[PCX]ACCESS.MAR;5}f OHAB 4(SP) ;SECBUF9 PUSHL R7 ;SECNUM! CALLS #2, W^U.5 ;#2, U.5C! CALLS #0, W^U.9 ;#0, U.9  BRW 17$ ;17$49$: ACBL #511, #32, R6, 7$ ;#511, #32, J, 7$& BLBC R11, 10$ ;ROOT_DIR, 10$0 ADDL3 W^U.28, W^U.29, R0 ;U.28, U.29, R0 DECL R0 ;R0" CMPL R7, R0 ;SECNUM, R0 BNEQ 16$ ;16$4 MOVL #PCX__DISKFULL, R0 ;#PCX__DISKFULL, R0 RET ;D10$: CMPZV #0, #8, W^BSEC+13, R10 ;#0, #8, BSEC+13, SECINCLUS BNEQ 15$ ;15$ PUSHL R9 ;CLUSNUM1! CALLS #1, W^U.7 ;#1, U.72 TSTL R0 ;R0 BNEQ 13$ ;13$ PUSHL R9 ;CLUSNUM  PUSHAB 4(SP) ;NEWCLUS# CALLS #2, W^U.10 ;#2, U.102$ BLBC R0, 18$ ;STATUS, 18$B MOVC5 #0, (SP), #0, #512, 4(SP) ;#0, (SP), #0, #512, SECBUF PUSHL (SP) ;NEWCLUS1# CALLS #1, W^U.21 ;#1, U.21T" MOVL R0, R7 ;R0, SECNUM) MOVZBL W^BSEC+13, R3 ;BSEC+13, R3  MNEGL #1, R2 ;#1, I  BRB 12$ ;12$!11$: PUSHAB 4(SP) ;SECBUF;$ PUSHAB (R2)[R7] ;(I)[SECNUM]! CALLS #2, W^U.5 ;#2, U.5)*12$: AOBLSS R3, R2, 11$ ;R3, I, 11$) MOVL (SP), R9 ;NEWCLUS, CLUSNUM  BRB 14$ ;14$13$: PUSHL R9 ;CLUSNUM! CALLS #1, W^U.7 ;#1, U.73# MOVL R0, R9 ;R0, CLUSNUM 14$: BRW 5$ ;5$"15$: INCL R10 ;SECINCLUS16$: INCL R7 ;SECNUM BRW 6$ ;6$"tTMP.BCK#[PCX]ACCESS.MAR;5}fR17$: MOVL #1, R0 ;#1, R018$: RET ;;; Routine Size: 280 bytes, Routine Base: $CODE$ + 0C11B .PSECT $PLIT$,NOWRT,NOEXE,28!P.AAY: .ASCII \PCX V1.0\ ;1!P.AAZ: .ASCII \FAT12 \ ;1 .PSECT $CODE$,NOWRT,2MU.18: ^ .ENTRY FORMAT_DISK, ^M ;FORMAT_DISK, Save R2,R3,R4,R5,R6,R7,R8,R9! MOVAB W^U.5, R9 ;U.5, R9C# MOVAB W^U.23, R8 ;U.23, R8 ) MOVAB W^BSEC+22, R7 ;BSEC+22, R7 ) MOVAB -516(SP), SP ;-516(SP), SPS# MOVL 4(AP), R6 ;LBL_A, R6M' BLBC -26(R7), 1$ ;NOWRITE, 1$ % BLBS 20(R8), 1$ ;INVFMT, 1$ 2 MOVL #PCX__NOWRITE, R0 ;#PCX__NOWRITE, R0 RET ;1$: TSTL (R8) ;FAT BEQL 2$ ;2$ PUSHL R8 ;R8$ MOVZWL (R7), R0 ;BSEC+22, R0+ ASHL #9, R0, 4(SP) ;#9, R0, 4(SP); PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM2$: CLRL (R8) ;FATB MOVC5 #0, (SP), #0, #512, -22(R7) ;#0, (SP), #0, #512, BSECB MOVC5 #0, (SP), #0, #512, 4(SP) ;#0, (SP), #0, #512, SECBUF5 MOVC3 #8, W^P.AAY, -19(R7) ;#8, P.AAY, BSEC+3,@ INSV #9452779, #0, #24, -22(R7) ;#9452779, #0, #24, BSEC9 MOVC3 #446, W^U.1+2, 40(R7) ;#446, U.1+2, BSEC+62#+ MOVW #512, -11(R7) ;#512, BSEC+1114 MOVB 44(R8), -9(R7) ;CLUSTER_SIZE, BSEC+13& MOVW #1, -8(R7) ;#1, BSEC+14& MOVB #2, -6(R7) ;#2, BSEC+16/ ASHL #9, 24(R8), R0 ;#9,UuTMP.BCK#[PCX]ACCESS.MAR;5}fU DIR_SIZE, R0;' DIVL3 #32, R0, R1 ;#32, R0, R1 & MOVW R1, -5(R7) ;R1, BSEC+173 MULL3 36(R8), 40(R8), R0 ;TRACKS, SIDES, R0R6 MULW3 32(R8), R0, -3(R7) ;SECTORS, R0, BSEC+191 BISL2 #16777215, 4(SP) ;#16777215, SECBUF2' MOVL 48(R8), R0 ;FAT_SIZE, R0  CMPL R0, #2 ;R0, #2 BNEQ 3$ ;3$& MNEGB #3, -1(R7) ;#3, BSEC+21$ MNEGB #3, 4(SP) ;#3, SECBUF BRB 6$ ;6$!3$: CMPL R0, #3 ;R0, #3  BEQL 4$ ;4$ CMPL R0, #7 ;R0, #7 BNEQ 5$ ;5$)4$: MNEGB #7, -1(R7) ;#7, BSEC+21R$ MNEGB #7, 4(SP) ;#7, SECBUF BRB 6$ ;6$!5$: CMPL R0, #9 ;R0, #9  BNEQ 6$ ;6$( MNEGB #16, -1(R7) ;#16, BSEC+21& MNEGB #16, 4(SP) ;#16, SECBUF'6$: MOVW R0, (R7) ;R0, BSEC+221. MOVW 32(R8), 2(R7) ;SECTORS, BSEC+24, MOVZWL 40(R8), 4(R7) ;SIDES, BSEC+261 MOVW #-21931, 488(R7) ;#-21931, BSEC+510(L MOVC5 (R6), @4(R6), #32, #11, 21(R7) ;(R6), @4(R6), #32, #11, BSEC+435 MOVC3 #8, W^P.AAZ, 32(R7) ;#8, P.AAZ, BSEC+54,( MOVB #41, 16(R7) ;#41, BSEC+38 PUSHAB -22(R7) ;BSEC# CLRL -(SP) ;-(SP)( CALLS #2, (R9) ;#2, DISK_UPDSEC PUSHAB 4(SP) ;SECBUF, PUSHL #1 ;#1( CALLS #2, (R9) ;#2, DISK_UPDSEC PUSHAB 4(SP) ;SECBUFM* MOVZWL (R7), -(SP) ;BSEC+22, -(SP) INCL (SP) ;(SP)( CALLS #2, (R9) ;#2, DISK_UPDSEC5XvTMP.BCK#[PCX]ACCESS.MAR;5}f%tX INSV #0, #0, #24, 4(SP) ;#0, #0, #24, SECBUF $ MOVZWL (R7), R3 ;BSEC+22, R3 MOVL #1, R2 ;#1, IS BRB 8$ ;8$ 7$: PUSHAB 4(SP) ;SECBUF PUSHL R2 ;I6( CALLS #2, (R9) ;#2, DISK_UPDSEC PUSHAB 4(SP) ;SECBUF $ MOVZWL (R7), R0 ;BSEC+22, R0 PUSHAB (R0)[R2] ;(R0)[I]( CALLS #2, (R9) ;#2, DISK_UPDSEC'8$: AOBLEQ R3, R2, 7$ ;R3, I, 7$E$ MOVZWL (R7), R0 ;BSEC+22, R0% ASHL #1, R0, R2 ;#1, R0, R2 1 MOVAW @24(R8)[R0], R3 ;@DIR_SIZE[R0], R3$ BRB 10$ ;10$ 9$: PUSHAB 4(SP) ;SECBUF PUSHL R2 ;I( CALLS #2, (R9) ;#2, DISK_UPDSEC(10$: AOBLEQ R3, R2, 9$ ;R3, I, 9$ TSTW (R6) ;(R6) BEQL 11$ ;11$J MOVC5 (R6), @4(R6), #32, #11, 4(SP) ;(R6), @4(R6), #32, #11, LBLENT* BISB2 #40, 15(SP) ;#40, LBLENT+11! PUSHAB 26(SP) ;LBLENT+22B CLRL -(SP) ;-(SP)8 CALLS #2, W^MAKE_MSDOS_DATE ;#2, MAKE_MSDOS_DATE PUSHAB 4(SP) ;SECBUFL$ MOVZWL (R7), R0 ;BSEC+22, R0+ ASHL #1, R0, -(SP) ;#1, R0, -(SP)  INCL (SP) ;(SP)( CALLS #2, (R9) ;#2, DISK_UPDSEC(11$: MOVZWL (R7), R0 ;BSEC+22, R0& MOVZBL -6(R7), R1 ;BSEC+16, R1 MULL2 R1, R0 ;R1, R0& MOVZWL -8(R7), R2 ;BSEC+14, R20 ADDL3 R2, R0, 28(R8) ;R2, R0, DIR_START CLRL 20(R8) ;INVFMT CLRL -26(R7) ;NOWRITE( CALLS #0, 689(R9) ;#0, READ_FAT MOVwTMP.BCK#[PCX]ACCESS.MAR;5}f[L #1, R0 ;#1, R0 RET ;;; Routine Size: 421 bytes, Routine Base: $CODE$ + 0D29  .PSECT $PLIT$,NOWRT,NOEXE,2M#P.ABB: .ASCII \*\<0><0><0> ;BP.ABA: .LONG 17694721 ;V .ADDRESS P.ABB ;#P.ABD: .ASCII \*\<0><0><0> ; P.ABC: .LONG 17694721 ;2 .ADDRESS P.ABD ; .PSECT $CODE$,NOWRT,2 ;DIR_EMPTY$U.19: .WORD ^M ;Save R2 SUBL2 #32, SP ;#32, SP CLRL -(SP) ;CTX1$: PUSHAB 4(SP) ;D PUSHAB W^P.ABC ;P.ABC PUSHAB W^P.ABA ;P.ABA PUSHL 4(AP) ;DIRENT_A  PUSHAB 16(SP) ;CTX # CALLS #5, W^U.13 ;#5, U.13  BLBC R0, 3$ ;R0, 3$ MOVZBL 4(SP), R0 ;CH, R0 BNEQ 2$ ;2$ MOVL #1, R2 ;#1, OK BRB 4$ ;4$#2$: CMPB R0, #46 ;R0, #46 BEQL 1$ ;1$! CMPB R0, #229 ;R0, #229, BEQL 1$ ;1$ CLRL R2 ;OK BRB 4$ ;4$!3$: MNEGL #1, R2 ;#1, OKW4$: PUSHL SP ;SPU4 CALLS #1, W^DISK_SCAN_END ;#1, DISK_SCAN_END MOVL R2, R0 ;OK, R0 RET ;:; Routine Size: 72 bytes, Routine Base: $CODE$ + 0ECE .PSECT $PLIT$,NOWRT,NOEXE,2CP.ABE: .ASCII \ \<0> ;#!P.ABF: .ASCII \. \ ; P.ABG: .ASCII \ \<0> ;!P.ABH: .ASCII \.. \ ;7P.ABI: .ASCII \ \<0> ;  .PSECT $CODE$,NOWRT,23U.20:NW .ENTRY DIR_CREATE, ^M ;DIR_CREATE, Save R2,R3,R4,R5,R6,R7,R8$% MOVAB W^P.ABE, R8 ;P.ABE, R8 ) MOVAB -544(SP), SP ;-544(SP), SP & MOVL 4(AP), R7 ;PARENT_A, R7% MOVL 8(AP), R6 ;FNAME_A, R6BB MOVC5 #0, (SP), #0, #32, -32(FP) ;#0, (SP), #0, #32, DIRENTJ MOVC5 (R6), @4(R6), #32, #8, -32(FP) ;(R6), @4(R6), #32, #8, DIRENT> INSV (R8), #0, #24, -24(FP) ;P.ABE, #0, #24, DIRENT+8" PUSHAB -10(FP) ;DIRENT+22 CLRL -(SP) ;-(SP)8 CALLS #2, W^MAKE_MSDOS_DATE ;#2, MAKE_MSDOS_DATE+ BISB2 #16, -21(FP) ;#16, DIRENT+112 CLRL -(SP) ;-(SP)! PUSHAB -6(FP) ;DIRENT+26># CALLS #2, W^U.10 ;#2, U.10 " MOVL R0, R2 ;R0, STATUS. MOVZWL -6(FP), -(SP) ;DIRENT+26, -(SP)# CALLS #1, W^U.21 ;#1, U.21." MOVL R0, R6 ;R0, SECNUM" BLBS R2, 1$ ;STATUS, 1$" MOVL R2, R0 ;STATUS, R0 RET ;D1$: MOVC5 #0, (SP), #0, #512, (SP) ;#0, (SP), #0, #512, SECBUF- MOVC3 #8, 4(R8), (SP) ;#8, P.ABF, D1 : INSV 12(R8), #0, #24, 8(SP) ;P.ABG, #0, #24, D1+80 MOVL -10(FP), 22(SP) ;DIRENT+22, D1+22& BISB2 #16, 11(SP) ;#16, D1+11/ MOVW -6(FP), 26(SP) ;DIRENT+26, D1+26R/ MOVC3 #8, 16(R8), 32(SP) ;#8, P.ABH, D2.; INSV 24(R8), #0, #24, 40(SP) ;P.ABI, #0, #24, D2+8R0 MOVL -10(FP), 54(SP) ;DIRENT+22, D2+22& BISB2 #16, 43(SP) ;#16, D2+11 TSTL R7 ;R7 BEQL 2$ ;2$, MOVW 26(R7),yTMP.BCK#[PCX]ACCESS.MAR;5}fa 58(SP) ;26(R7), D2+26(2$: PUSHR #^M ;#^M! CALLS #2, W^U.5 ;#2, U.57A MOVC5 #0, (SP), #0, #512, (SP) ;#0, (SP), #0, #512, SECBUFV) MOVZBL W^BSEC+13, R3 ;BSEC+13, R3  CLRL R2 ;I, BRB 4$ ;4$3$: PUSHL SP ;SPM$ PUSHAB (R2)[R6] ;(I)[SECNUM]! CALLS #2, W^U.5 ;#2, U.51'4$: AOBLSS R3, R2, 3$ ;R3, I, 3$4 PUSHAB -32(FP) ;DIRENT  PUSHL R7 ;R7# CALLS #2, W^U.17 ;#2, U.17$! CALLS #0, W^U.9 ;#0, U.9Q MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 211 bytes, Routine Base: $CODE$ + 0F16SU.21:87 .ENTRY CLUS_SECTOR, ^M ;CLUS_SECTOR, Save R2R- SUBL3 #2, 4(AP), R1 ;#2, CLUSNUM, R1C) MOVZBL W^BSEC+13, R0 ;BSEC+13, R02 MULL2 R0, R1 ;R0, R1) MOVZWL W^BSEC+22, R0 ;BSEC+22, R0;) MOVZBL W^BSEC+16, R2 ;BSEC+16, R2S MULL2 R2, R0 ;R2, R0 ADDL2 R1, R0 ;R1, R0# ADDL2 W^U.28, R0 ;U.28, R0C) MOVZWL W^BSEC+14, R1 ;BSEC+14, R1) ADDL2 R1, R0 ;R1, R0 RET ;:; Routine Size: 45 bytes, Routine Base: $CODE$ + 0FE9 .EXTRN LIB$SIGNAL, LIB$STOPW; PSECT SUMMARY ;R#; Name Bytes Attributes,;4U; $PLIT$ 664 NOVEC,NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)RT; $OWN$ 60 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)W; $GLOBAL$ 516 NOVECzTMP.BCK#[PCX]ACCESS.MAR;5}fd, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)1U; $CODE$ 4118 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)8; Library Statistics ; 9; -------- Symbols -------- Pages Processing(9; File Total Loaded Percent Mapped Time9; ]; SYS$COMMON:[SYSLIB]STARLET.L32;1 14000 50 0 813 00:00.4SU; MDM_SRC:[PCX]PCX.L32;11 77 63 81 13 00:00.0;W; MDM_SRC:[PCX]FIELDS.L32;2 20 16 80 10 00:00.0 ; COMMAND QUALIFIERSi; BLISS/LIST=ACCESS.MAR/NOOBJ/MACHINE=(OBJ,NOBIN,ASSEM,UNIQUE,NOCOMM)/SOURCE=(NOHEAD,NOSOURCE) ACCESS.B32s; Compilation Complete .ENDU.16:Bf .ENTRY DELETE_FILE, ^M ;) MOVAB -524(SP), SP ;-524(SP), SPI& MOVL 4(AP), R0 ;PARENT_A, R0' MOVL 8(AP), R10 {TMP.BCKv#[PCX]PCX_PARSE.B32;11Hy*[PCX]PCX_PARSE.B32;11+,v./ 4H V-#0123KPWO56`1b7@89?GHJ|TMP.BCKv#[PCX]PCX_PARSE.B32;11H%TITLE 'PCX_PARSE'!MODULE PCX_PARSE (IDENT='V1.0') =BEGIN!++! FACILITY: PCX!(! ABSTRACT: Parses MSDOS filenames.!! MODULE DESCRIPTION:!!! AUTHOR: M. MadisonA! COPYRIGHT 1989, RENSSELAER POLYTECHNIC INSTITUTE."! ALL RIGHTS RESERVED.!! CREATION DATE: 16-JUL-1990!! MODIFICATION HISTORY:!0! 16-JUL-1990 V1.0 Madison Initial coding.!--" LIBRARY 'SYS$LIBRARY:STARLET';! LIBRARY 'SYS$LIBRARY:TPAMAC'; LIBRARY 'PCX'; FORWARD ROUTINE PCX_PARSE, PCXP_STORE; EXTERNAL ROUTINE< G_HAT (LIB$TPARSE, STR$UPCASE, LIB$GET_VM, STR$COPY_R); MACRO/ TPA_A_P1 = TPA$C_LENGTH0+00,0,32,0%,/ TPA_A_P2 = TPA$C_LENGTH0+04,0,32,0%,/ TPA_A_P3 = TPA$C_LENGTH0+08,0,32,0%,/ TPA_A_P4 = TPA$C_LENGTH0+12,0,32,0%,/ TPA_A_P5 = TPA$C_LENGTH0+16,0,32,0%,/ TPA_A_P6 = TPA$C_LENGTH0+20,0,32,0%,/ TPA_A_P7 = TPA$C_LENGTH0+24,0,32,0%; LITERAL PCXP__FIRST = 1, PCXP__FNAME_WAS_DIR = 1, PCXP__APPEND_TO_FNAME = 2, PCXP__APPEND_TO_FTYPE = 3, PCXP__WILD_TO_FNAME = 4, PCXP__WILD_TO_FTYPE = 5, PCXP__LAST = 5; EXTERNAL LITERAL PCX__FSYNERR; "%SBTTL 'State table for PCX_PARSE'1 $INIT_STATE (PCX_PARSE_STATE, PCX_PARSE_KEY); $STATE (START, (TPA$_EOS, TPA$_EXIT),5 ('\', START, PCXP_STORE,,, PCXP__FNAME_WAS_DIR),9 ('.}TMP.BCKv#[PCX]PCX_PARSE.B32;11H2'', FTORDIR, PCXP_STORE,,, PCXP__APPEND_TO_FNAME),6 ('*', START1, PCXP_STORE,,, PCXP__WILD_TO_FNAME),6 ('%', START1, PCXP_STORE,,, PCXP__WILD_TO_FNAME),> (TPA$_ANY, START1, PCXP_STORE,,, PCXP__APPEND_TO_FNAME)); $STATE (START1, (TPA$_EOS, TPA$_EXIT),5 ('\', START, PCXP_STORE,,, PCXP__FNAME_WAS_DIR), ('.', FTYPE),6 ('*', START1, PCXP_STORE,,, PCXP__WILD_TO_FNAME),6 ('%', START1, PCXP_STORE,,, PCXP__WILD_TO_FNAME),> (TPA$_ANY, START1, PCXP_STORE,,, PCXP__APPEND_TO_FNAME)); $STATE (FTORDIR,> (TPA$_EOS, TPA$_EXIT, PCXP_STORE,,, PCXP__FNAME_WAS_DIR),5 ('\', START, PCXP_STORE,,, PCXP__FNAME_WAS_DIR),9 ('.', FTORD2, PCXP_STORE,,, PCXP__APPEND_TO_FNAME)); $STATE (FTORD2,> (TPA$_EOS, TPA$_EXIT, PCXP_STORE,,, PCXP__FNAME_WAS_DIR),6 ('\', START, PCXP_STORE,,, PCXP__FNAME_WAS_DIR)); $STATE (FTYPE, (TPA$_EOS, TPA$_EXIT), ('\', TPA$_FAIL), ('.', TPA$_FAIL),5 ('*', START, PCXP_STORE,,, PCXP__WILD_TO_FTYPE),5 ('%', START, PCXP_STORE,,, PCXP__WILD_TO_FTYPE),= (TPA$_ANY, FTYPE, PCXP_STORE,,, PCXP__APPEND_TO_FTYPE)); %SBTTL 'PCX_PARSE'HGLOBAL ROUTINE PCX_PARSE (FSPEC_A, DIRQUE_A, FNAME_A, FTYPE_A, WILD_A) =BEGIN!++! FUNCTIONAL DESCRIPTION:!(! Parses an MS-DOS file specification.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!0! PCX_PARSE fspec, dirque, fname, ftype, wild!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: ~TMP.BCKv#[PCX]PCX_PARSE.B32;11HNone.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BIND( FSPEC = .FSPEC_A : BLOCK [,BYTE]," DIRQUE = .DIRQUE_A : QUEDEF,( FNAME = .FNAME_A : BLOCK [,BYTE],( FTYPE = .FTYPE_A : BLOCK [,BYTE]; LITERAL) TPA_C_LENGTH = TPA$C_LENGTH0 + 20,' TPA_K_COUNT = TPA$K_COUNT0 + 5; LOCAL( TPABLK : BLOCK [TPA_C_LENGTH,BYTE], FNAMBUF : VECTOR [8,BYTE], FTYPBUF : VECTOR [3,BYTE], FNAMLEN : WORD, FTYPLEN : WORD, STATUS; FNAMLEN = 0; FTYPLEN = 0; .WILD_A = 0;' TPABLK [TPA$L_COUNT] = TPA_K_COUNT;* TPABLK [TPA$L_OPTIONS] = TPA$M_BLANKS;5 TPABLK [TPA$L_STRINGCNT] = .FSPEC [DSC$W_LENGTH];6 TPABLK [TPA$L_STRINGPTR] = .FSPEC [DSC$A_POINTER]; TPABLK [TPA_A_P1] = FNAMLEN; TPABLK [TPA_A_P2] = FNAMBUF; TPABLK [TPA_A_P3] = FTYPLEN; TPABLK [TPA_A_P4] = FTYPBUF; TPABLK [TPA_A_P5] = DIRQUE; TPABLK [TPA_A_P6] = .WILD_A;C IF NOT LIB$TPARSE (TPABLK, PCX_PARSE_STATE, PCX_PARSE_KEY) THEN PCX__FSYNERR ELSE BEGIN* STR$COPY_R (FNAME, FNAMLEN, FNAMBUF);* STR$COPY_R (FTYPE, FTYPLEN, FTYPBUF); SS$_NORMAL ENDEND; ! PCX_PARSE %SBTTL 'PCXP_STORE'<ROUTINE PCXP_STORE (OPTIONS, STRINGCNT, STRINGPTR, TOKENCNT,= TOKENPTR, CHAR, NUMBER, PARAM, FNAMLEN_A, FNAMBUF_A,3 FTYPLEN_A, FTYPBUF_A, DIRQUE_A, WILD_A) =BEGIN!++! FUNCTIONAL DESTMP.BCKv#[PCX]PCX_PARSE.B32;11H T CRIPTION:!9! Invoked by TPARSE to store a piece of a mail address.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!E! PCXP_STORE opt, scnt, sptr, tcnt, tptr, chr, num, par, p1, p2, p3!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BIND! FNAMLEN = .FNAMLEN_A : WORD,+ FNAMBUF = .FNAMBUF_A : VECTOR [,BYTE],! FTYPLEN = .FTYPLEN_A : WORD,+ FTYPBUF = .FTYPBUF_A : VECTOR [,BYTE]," DIRQUE = .DIRQUE_A : QUEDEF; LOCAL PTH : REF PTHDEF; 1 CASE .PARAM FROM PCXP__FIRST TO PCXP__LAST OF SET [PCXP__FNAME_WAS_DIR] : IF .FNAMLEN GTR 0 THEN BEGIN- IF .WILD_A THEN RETURN PCX__FSYNERR; GETPTH (PTH);$ PTH [PTH_W_LEN] = .FNAMLEN;7 CH$MOVE (.FNAMLEN, FNAMBUF, PTH [PTH_T_NAME]);- INSQUE (.PTH, .DIRQUE [QUE_L_TAIL]); FNAMLEN = 0; END; [PCXP__APPEND_TO_FNAME] : IF .FNAMLEN EQL 8 THEN RETURN PCX__FSYNERR ELSE6 FNAMBUF [(FNAMLEN = .FNAMLEN + 1)-1] = .CHAR; [PCXP__APPEND_TO_FTYPE] : IF .FTYPLEN EQL 3 THEN RETURN PCX__FSYNERR ELSE6 FTYPBUF [(FTYPLEN = .FTYPLEN + 1)-1] = .CHAR; [PCXP__WILD_TO_FNAME] : IF .FNAMLEN EQL 8 THEN RETURN PCX__FSYNERR ELSE BEGIN6 FNAMBUF [(FNA TMP.BCKv#[PCX]PCX_PARSE.B32;11H4W MLEN = .FNAMLEN + 1)-1] = .CHAR; .WILD_A = 1; END; [PCXP__WILD_TO_FTYPE] : IF .FTYPLEN EQL 3 THEN RETURN PCX__FSYNERR ELSE BEGIN6 FTYPBUF [(FTYPLEN = .FTYPLEN + 1)-1] = .CHAR; .WILD_A = 1; END; TES; SS$_NORMALEND; ! PCXP_STOREENDELUDOMTMP.BCK#"#[PCX]PCX_PARSE.MAR;2oD*[PCX]PCX_PARSE.MAR;2+,#"./ 4o-#0123KPWO568CO7DS89`\=GHJTMP.BCK#"#[PCX]PCX_PARSE.MAR;2o .TITLE PCX_PARSE PCX_PARSE .IDENT \V1.0\' .PSECT _LIB$KEY0$,NOWRT, SHR, PIC,1PCX_PARSE_KEY:: .BLKB 0 ;TPA$KEY0U.4: .BLKB 0( .PSECT _LIB$STATE$,NOWRT, SHR, PIC,1PCX_PARSE_STATE:: .BLKB 0;STARTU.6: .BLKB 0 ;TPA$TYPEU.7: .WORD 4599 ; ;TPA$TARGETU.8: .WORD -1 ; ;TPA$TYPEU.9: .WORD -28068 ; ;TPA$FLAGS2U.10: .BYTE 1 ; ;TPA$PARAMU.11: .LONG 1 ; ;TPA$ACTION$U.12: .LONG <-4> ; ;TPA$TARGET$U.13: .WORD <-2> ; ;TPA$TYPEU.14: .WORD -28114 ; ;TPA$FLAGS2U.15: .BYTE 1 ; ;TPA$PARAMU.16: .LONG 2 ; ;TPA$ACTION$U.17: .LONG <-4> ; ;TPA$TARGET%U.19: .WORD <-2> ; ;TPA$TYPEU.20: .WORD -28118 ; ;TPA$FLAGS2U.21: .BYTE 1 ; ;TPA$PARAMU.22: .LONG 4 ; ;TPA$ACTION$U.23: .LONG <-4> ; ;TPA$TARGET%U.25: .WORD <-2> ; ;TPA$TYPEU.26: .WORD -28123 ; ;TPA$FLAGS2U.27: .BYTE 1 ; ;TPA$PARAMU.28: .LONG 4 ; ;TPA$ACTION$U.29: .LONG <-4> ; ;TPA$TARGET%U.30: .WORD <-2> ; ;TPA$TYPEU.31: .WORD -26643 ; ;TPA$FLAGS2U.32: .BYTE 1 ; ;TPA$PARAMU.33: .LONG 2 ; ;TPA$ACTION$U.34: .LONG <-4> ; ;TPA$TARGET%U.35: .WORD <-2> ;;START1U.24: .BLKB 0 ;TPA$TYPEU.36: .WORD 4599 TMP.BCK#"#[PCX]PCX_PARSE.MAR;2o}n ; ;TPA$TARGETU.37: .WORD -1 ; ;TPA$TYPEU.38: .WORD -28068 ; ;TPA$FLAGS2U.39: .BYTE 1 ; ;TPA$PARAMU.40: .LONG 1 ; ;TPA$ACTION$U.41: .LONG <-4> ; ;TPA$TARGET$U.42: .WORD <-2> ; ;TPA$TYPEU.43: .WORD 4142 ; ;TPA$TARGET%U.45: .WORD <-2> ; ;TPA$TYPEU.46: .WORD -28118 ; ;TPA$FLAGS2U.47: .BYTE 1 ; ;TPA$PARAMU.48: .LONG 4 ; ;TPA$ACTION$U.49: .LONG <-4> ; ;TPA$TARGET%U.50: .WORD <-2> ; ;TPA$TYPEU.51: .WORD -28123 ; ;TPA$FLAGS2U.52: .BYTE 1 ; ;TPA$PARAMU.53: .LONG 4 ; ;TPA$ACTION$U.54: .LONG <-4> ; ;TPA$TARGET%U.55: .WORD <-2> ; ;TPA$TYPEU.56: .WORD -26643 ; ;TPA$FLAGS2U.57: .BYTE 1 ; ;TPA$PARAMU.58: .LONG 2 ; ;TPA$ACTION$U.59: .LONG <-4> ; ;TPA$TARGET%U.60: .WORD <-2> ;;FTORDIRU.18: .BLKB 0 ;TPA$TYPEU.61: .WORD -27657 ; ;TPA$FLAGS2U.62: .BYTE 1 ; ;TPA$PARAMU.63: .LONG 1 ; ;TPA$ACTION$U.64: .LONG <-4> ; ;TPA$TARGETU.65: .WORD -1 ; ;TPA$TYPEU.66: .WORD -28068 ; ;TPA$FLAGS2U.67: .BYTE 1 ; ;TPA$PARAMU.68: .LONG 1 ; ;TPA$ACTION$U.69: .LONG <-4> ; ;TPA$TARGET$U.70: .WORD <-2> ; ;TPA$TYPTMP.BCK#"#[PCX]PCX_PARSE.MAR;2obEU.71: .WORD -27090 ; ;TPA$FLAGS2U.72: .BYTE 1 ; ;TPA$PARAMU.73: .LONG 2 ; ;TPA$ACTION$U.74: .LONG <-4> ; ;TPA$TARGET%U.76: .WORD <-2> ;;FTORD2U.75: .BLKB 0 ;TPA$TYPEU.77: .WORD -27657 ; ;TPA$FLAGS2U.78: .BYTE 1 ; ;TPA$PARAMU.79: .LONG 1 ; ;TPA$ACTION$U.80: .LONG <-4> ; ;TPA$TARGETU.81: .WORD -1 ; ;TPA$TYPEU.82: .WORD -27044 ; ;TPA$FLAGS2U.83: .BYTE 1 ; ;TPA$PARAMU.84: .LONG 1 ; ;TPA$ACTION$U.85: .LONG <-4> ; ;TPA$TARGET$U.86: .WORD <-2> ;;FTYPEU.44: .BLKB 0 ;TPA$TYPEU.87: .WORD 4599 ; ;TPA$TARGETU.88: .WORD -1 ; ;TPA$TYPEU.89: .WORD 4188 ; ;TPA$TARGETU.90: .WORD -2 ; ;TPA$TYPEU.91: .WORD 4142 ; ;TPA$TARGETU.92: .WORD -2 ; ;TPA$TYPEU.93: .WORD -28118 ; ;TPA$FLAGS2U.94: .BYTE 1 ; ;TPA$PARAMU.95: .LONG 5 ; ;TPA$ACTION$U.96: .LONG <-4> ; ;TPA$TARGET$U.97: .WORD <-2> ; ;TPA$TYPEU.98: .WORD -28123 ; ;TPA$FLAGS2U.99: .BYTE 1 ; ;TPA$PARAMU.100: .LONG 5 ; ;TPA$ACTION&U.101: .LONG <-4> ; ;TPA$TARGET&U.102: .WORD <-2> ; ;TPA$TYPEU.103: .WORD -26643 ; ;TPA$FLAGS2U.104: .BYTE 1 ; ;TPA$PARAMU.105: .LONGTMP.BCK#"#[PCX]PCX_PARSE.MAR;2o6 3 ; ;TPA$ACTION&U.106: .LONG <-4> ; ;TPA$TARGET&U.107: .WORD <-2> ;E .EXTRN LIB$TPARSE, STR$UPCASE, LIB$GET_VM, STR$COPY_R, PCX__FSYNERR .PSECT $CODE$,NOWRT,2U.1:3 .ENTRY PCX_PARSE, ^M ;PCX_PARSE, Save R2. MOVAB G^STR$COPY_R, R2 ;STR$COPY_R, R2' MOVAB -76(SP), SP ;-76(SP), SP% MOVL 4(AP), R0 ;FSPEC_A, R0 CLRW (SP) ;FNAMLEN CLRW 8(SP) ;FTYPLEN CLRL @20(AP) ;@WILD_A' MOVL #13, 20(SP) ;#13, TPABLK' MOVL #1, 24(SP) ;#1, TPABLK+4+ MOVZWL (R0), 28(SP) ;(R0), TPABLK+8. MOVL 4(R0), 32(SP) ;4(R0), TPABLK+12/ MOVAB (SP), 56(SP) ;FNAMLEN, TPABLK+361 MOVAB 12(SP), 60(SP) ;FNAMBUF, TPABLK+400 MOVAB 8(SP), 64(SP) ;FTYPLEN, TPABLK+440 MOVAB 4(SP), 68(SP) ;FTYPBUF, TPABLK+481 MOVL 8(AP), 72(SP) ;DIRQUE_A, TPABLK+52. MOVL 20(AP), (FP) ;WILD_A, TPABLK+56- PUSHAB W^PCX_PARSE_KEY ;PCX_PARSE_KEY0 PUSHAB W^PCX_PARSE_STATE ;PCX_PARSE_STATE PUSHAB 28(SP) ;TPABLK. CALLS #3, G^LIB$TPARSE ;#3, LIB$TPARSE BLBS R0, 1$ ;R0, 1$2 MOVL #PCX__FSYNERR, R0 ;#PCX__FSYNERR, R0 RET ;"1$: PUSHAB 12(SP) ;FNAMBUF PUSHAB 4(SP) ;FNAMLEN PUSHL 12(AP) ;FNAME_A' CALLS #3, (R2) ;#3, STR$COPY_R PUSHAB 4(SP) ;FTYPBUF PUSHAB 12(SP) ;FTYPLEN PUSHL 16(AP) ;FTYPE_A' CALLS #3, (TMP.BCK#"#[PCX]PCX_PARSE.MAR;2o R2) ;#3, STR$COPY_R MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 127 bytes, Routine Base: $CODE$ + 0000 .EXTRN LIB$FREE_VM ;PCXP_STOREDU.2: .WORD ^M ;Save R2,R3,R4,R5,R6,R7,R8 SUBL2 #8, SP ;#8, SP( MOVL 36(AP), R7 ;FNAMLEN_A, R7( MOVL 44(AP), R1 ;FTYPLEN_A, R1' MOVL 52(AP), R8 ;DIRQUE_A, R8, CASEL 32(AP), #1, #4 ;PARAM, #1, #4#1$: .WORD 2$-1$,- ;2$-1$,- 3$-1$,- ;3$-1$,- 4$-1$,- ;4$-1$,- 7$-1$,- ;7$-1$,- 8$-1$ ;8$-1$2$: TSTW (R7) ;(R7) BEQL 6$ ;6$% BLBS 56(AP), 9$ ;WILD_A, 9$! PUSHAB 4(SP) ;__GETPTH_T% MOVL #20, 4(SP) ;#20, 4(SP) PUSHAB 4(SP) ;4(SP). CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM! MOVL 4(SP), R6 ;PTH, R6' MOVZWL (R7), 8(R6) ;(R7), 8(R6)= MOVC3 (R7), @40(AP), 12(R6) ;(R7), @FNAMBUF_A, 12(R6)) INSQUE (R6), @4(R8) ;(R6), @4(R8) CLRW (R7) ;(R7) BRB 12$ ;12$$3$: CMPW (R7), #8 ;(R7), #8 BEQL 9$ ;9$! MOVZWL (R7), R0 ;(R7), R0 INCL R0 ;R0! MOVW R0, (R7) ;R0, (R7)( ADDL2 40(AP), R0 ;FNAMBUF_A, R0 BRB 5$ ;5$$4$: CMPW (R1), #3 ;(R1), #3 BEQL 9$ ;9$! MOVZWL (R1), R0 ;(R1), R0 INCL R0 ;R0! MOVW R0, (R1) ;R0, (R1)( ADDL2 48(AP), R0 ;FTYPBUF_A, R0.5$: MOVB TMP.BCK#"#[PCX]PCX_PARSE.MAR;2o 24(AP), -1(R0) ;CHAR, -1(R0)6$: BRB 12$ ;12$$7$: CMPW (R7), #8 ;(R7), #8 BEQL 9$ ;9$! MOVZWL (R7), R0 ;(R7), R0 INCL R0 ;R0! MOVW R0, (R7) ;R0, (R7)( ADDL2 40(AP), R0 ;FNAMBUF_A, R0 BRB 11$ ;11$$8$: CMPW (R1), #3 ;(R1), #3 BNEQ 10$ ;10$59$: MOVL #PCX__FSYNERR, R0 ;#PCX__FSYNERR, R0 RET ;%10$: MOVZWL (R1), R0 ;(R1), R0 INCL R0 ;R0! MOVW R0, (R1) ;R0, (R1)( ADDL2 48(AP), R0 ;FTYPBUF_A, R0/11$: MOVB 24(AP), -1(R0) ;CHAR, -1(R0)' MOVL #1, @56(AP) ;#1, @WILD_A"12$: MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 179 bytes, Routine Base: $CODE$ + 007F; PSECT SUMMARY;#; Name Bytes Attributes;Y; _LIB$KEY0$ 0 NOVEC,NOWRT, RD , EXE, SHR, LCL, REL, CON, PIC,ALIGN(1)Z; _LIB$STATE$ 245 NOVEC,NOWRT, RD , EXE, SHR, LCL, REL, CON, PIC,ALIGN(1)U; $CODE$ 306 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2); Library Statistics;9; -------- Symbols -------- Pages Processing9; File Total Loaded Percent Mapped Time;]; SYS$COMMON:[SYSLIB]STARLET.L32;1 14000 10 0 813 00:00.4\; SYS$COMMON:[SYSLIB]TPAMAC.L32;1 43 22 51 15 00:00.1U; MDM_SRC:[PCX]PCX.L32;11 TMP.BCK#"#[PCX]PCX_PARSE.MAR;2o> 77 15 19 13 00:00.0; COMMAND QUALIFIERSo; BLISS/LIST=PCX_PARSE.MAR/NOOBJ/MACHINE=(OBJ,NOBIN,ASSEM,UNIQUE,NOCOMM)/SOURCE=(NOHEAD,NOSOURCE) PCX_PARSE.B32; Compilation Complete .ENDTMP.BCKJ#[PCX]FILEIO.B32;25M!+*[PCX]FILEIO.B32;25+,J.!/ 4M!!-#0123KPWO"56( 7`}d 89`\=GHJTMP.BCKJ#[PCX]FILEIO.B32;25M!6%TITLE 'FILEIO'MODULE FILEIO (IDENT='V1.1') =BEGIN!++! FACILITY: PCX!)! ABSTRACT: MSDOS file I/O routines.!! MODULE DESCRIPTION:!9! This module contains routines for reading and writing?! files to an MSDOS disk. Requires routines in module ACCESS! for lower-level I/O.!! AUTHOR: M. MadisonA! COPYRIGHT 1990, RENSSELAER POLYTECHNIC INSTITUTE."! ALL RIGHTS RESERVED.!! CREATION DATE: 17-JUL-1990!! MODIFICATION HISTORY:!0! 17-JUL-1990 V1.0 Madison Initial coding.7! 30-JUL-1990 V1.1 Madison Add exit handler code.!--" LIBRARY 'SYS$LIBRARY:STARLET'; LIBRARY 'PCX'; LIBRARY 'FIELDS'; FORWARD ROUTINE FILE_OPEN, FILE_CLOSE, FILE_READ, FILE_WRITE, FILE_CLOSE_ALL; LITERAL CTX_S_SECBUF = 512; _DEF (CTX) CTX_L_FLINK = _LONG, CTX_L_BLINK = _LONG,* CTX_X_DIRENT = _BYTES (DIR_S_DIRDEF),* CTX_X_PARENT = _BYTES (DIR_S_DIRDEF), CTX_L_CURPOS = _LONG, CTX_L_CURCLUST = _LONG, CTX_L_SECINCLUS = _LONG, CTX_L_SECNUM = _LONG, CTX_L_BUFLEN = _LONG, CTX_L_BUFPTR = _LONG, CTX_L_FLAGS = _LONG, _OVERLAY (CTX_L_FLAGS) CTX_V_BINARY = _BIT, CTX_V_EOF = _BIT, CTX_V_IGNORELF = _BIT, CTX_V_WRITING = _BIT, CTX_V_WRITECR = _BIT, CTX_V_WRITELF = _BIT, CTX_V_ROOT = _BIT, _ENDOVERLAY) TMP.BCKJ#[PCX]FILEIO.B32;25M!X CTX_T_SECBUF = _BYTES (CTX_S_SECBUF) _ENDDEF (CTX); EXTERNAL ROUTINE FAT_CHAIN, DISK_READSEC, DISK_UPDSEC, ALLOCATE, UPDATE_FAT, DISK_SEARCH, ENTER_FILE, MAKE_MSDOS_DATE, CLUS_SECTOR,% G_HAT (LIB$GET_VM, LIB$FREE_VM); EXTERNAL BSEC : BSECDEF; OWN FILEQ : QUEDEF PRESET ($ [QUE_L_HEAD] = FILEQ,% [QUE_L_TAIL] = FILEQ); EXTERNAL LITERAL PCX__EXISTS; %SBTTL 'FILE_OPEN'5GLOBAL ROUTINE FILE_OPEN (DIRENT_A, CTX_A_A, MODE) = BEGIN!++! FUNCTIONAL DESCRIPTION:!<! Open a file: file must already exist; use DISK_SEARCH to=! locate directory entry for file then call this routine to:! allocate the file I/O context and prepare for reading.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:! ! FILE_OPEN!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BIND$ CTX = .CTX_A_A : REF CTXDEF," DIRENT = .DIRENT_A : DIRDEF; LOCAL STATUS;3 STATUS = LIB$GET_VM (%REF (CTX_S_CTXDEF), CTX);' IF NOT .STATUS THEN RETURN .STATUS;, CH$FILL (%CHAR (0), CTX_S_CTXDEF, .CTX);' INSQUE (.CTX, .FILEQ [QUE_L_TAIL]); CTX [CTX_V_BINARY] = .MODE;7 CH$MOVE (DIR_S_DIRDEF, DIRENT, CTX [CTX_X_DIRENT]);3 CTX [CTX_L_CURCLUST]TMP.BCKJ#[PCX]FILEIO.B32;25M!}T = .DIRENT [DIR_W_CLUSTER];M CTX [CTX_L_SECNUM] = CLUS_SECTOR (.CTX [CTX_L_CURCLUST])-1; ! <<< BAD!!! SS$_NORMALEND; ! FILE_OPEN %SBTTL 'FILE_CREATE'IGLOBAL ROUTINE FILE_CREATE (PARENT_A, FNAME_A, FTYPE_A, CTX_A_A, MODE) = BEGIN!++! FUNCTIONAL DESCRIPTION:!B! Create a file. File must not already exist. Supply directory?! entry for directory that will contain file, along with file>! name and file type. Note that the file isn't entered into<! the directory until FILE_CLOSE is called -- this routine?! just establishes context and allocates the first cluster in ! the file.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! FILE_CREATE!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BIND$ CTX = .CTX_A_A : REF CTXDEF," PARENT = .PARENT_A : DIRDEF,( FNAME = .FNAME_A : BLOCK [,BYTE],( FTYPE = .FTYPE_A : BLOCK [,BYTE]; LOCAL STATUS;B IF DISK_SEARCH (PARENT, FNAME, FTYPE) THEN RETURN PCX__EXISTS; 3 STATUS = LIB$GET_VM (%REF (CTX_S_CTXDEF), CTX);' IF NOT .STATUS THEN RETURN .STATUS;, CH$FILL (%CHAR (0), CTX_S_CTXDEF, .CTX); IF PARENT EQLA 0 THEN CTX [CTX_V_ROOT] = 1 ELSE* IF .PARENT [DIR_W_CLUSTER] EQL 0 THEN CTX [CTX_V_ROOT] = 1 ELSE< CH$MOVE (DIR_S_DITMP.BCKJ#[PCX]FILEIO.B32;25M! RDEF, PARENT, CTX [CTX_X_PARENT]); BEGIN2 BIND DIRENT = CTX [CTX_X_DIRENT] : DIRDEF;C CH$COPY (.FNAME [DSC$W_LENGTH], .FNAME [DSC$A_POINTER], %C' '," 8, DIRENT [DIR_T_FNAME]);C CH$COPY (.FTYPE [DSC$W_LENGTH], .FTYPE [DSC$A_POINTER], %C' '," 3, DIRENT [DIR_T_FTYPE]);2 MAKE_MSDOS_DATE (0, DIRENT [DIR_L_DATETIME]);3 STATUS = ALLOCATE (DIRENT [DIR_W_CLUSTER], 0); IF NOT .STATUS THEN BEGIN0 LIB$FREE_VM (%REF (CTX_S_CTXDEF), CTX); CTX = 0; RETURN .STATUS; END;4 CTX [CTX_L_CURCLUST] = .DIRENT [DIR_W_CLUSTER]; END; CTX [CTX_V_BINARY] = .MODE; CTX [CTX_V_WRITING] = 1;= CTX [CTX_L_SECNUM] = CLUS_SECTOR (.CTX [CTX_L_CURCLUST]); CTX [CTX_L_SECINCLUS] = 1;, CTX [CTX_L_BUFPTR] = CTX [CTX_T_SECBUF]; CTX [CTX_L_BUFLEN] = 0;' INSQUE (.CTX, .FILEQ [QUE_L_TAIL]); SS$_NORMALEND; ! FILE_CREATE %SBTTL 'FILE_CLOSE'&GLOBAL ROUTINE FILE_CLOSE (CTX_A_A) = BEGIN!++! FUNCTIONAL DESCRIPTION:!@! Close an open file. If file was open for reading, this just>! releases the context block. If file was open for writing,?! any remaining buffered data is flushed, the file is enteredH! into the directory, and the FAT is updated before releasing context.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! FILE_CLOSE!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2TMP.BCKJ#[PCX]FILEIO.B32;25M!D' ! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BIND$ CTX = .CTX_A_A : REF CTXDEF; REMQUE (.CTX, CTX); IF .CTX [CTX_V_WRITING] THEN BEGIN& IF .CTX [CTX_L_BUFLEN] GTR 0 THEN BEGIN? CH$FILL (%CHAR (26), CTX_S_SECBUF-.CTX [CTX_L_BUFLEN], .CTX [CTX_L_BUFPTR]);? DISK_UPDSEC (.CTX [CTX_L_SECNUM], CTX [CTX_T_SECBUF]); END; CTX [CTX_L_BUFLEN] = 0;- CTX [CTX_L_BUFPTR] = CTX [CTX_T_SECBUF];G ENTER_FILE ((IF .CTX [CTX_V_ROOT] THEN 0 ELSE CTX [CTX_X_PARENT]), CTX [CTX_X_DIRENT]); UPDATE_FAT (); END;* LIB$FREE_VM (%REF (CTX_S_CTXDEF), CTX)END; ! FILE_CLOSE %SBTTL 'FILE_READ'>GLOBAL ROUTINE FILE_READ (CTX_A_A, BUFPTR, BUFSIZ, COUNT_A) = BEGIN!++! FUNCTIONAL DESCRIPTION:!@! Reads from a file. For binary reads, this is simply filling?! the buffer to capacity; for ASCII reads, CRLF is treated as! a record delimiter.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:! ! FILE_READ!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BIND) CTX = .CTX_A_A : REF CTXDEF,$ COUNT = .COUNT_A : WORD,* DIRENT = CTX [CTX_X_DIRENT] : DIRDEF; LOCAL P, CP, FOUND_CR, SECCOUNT;5 IFTMP.BCKJ#[PCX]FILEIO.B32;25M!پ .CTX [CTX_V_WRITING] THEN RETURN SS$_BADPARAM; P = .BUFPTR; COUNT = FOUND_CR = 0; WHILE 1 DO BEGIN. IF .CTX [CTX_V_EOF] THEN RETURN RMS$_EOF;: IF .CTX [CTX_L_CURPOS] GEQ .DIRENT [DIR_L_FSIZE] THEN@ RETURN (IF .COUNT EQL 0 THEN RMS$_EOF ELSE SS$_NORMAL);& IF .CTX [CTX_L_BUFLEN] EQL 0 THEN BEGIN> IF .CTX [CTX_L_SECINCLUS] EQL .BSEC [BSEC_B_SPC] THEN BEGIN9 IF FAT_CHAIN (.CTX [CTX_L_CURCLUST]) EQL 0 THEN BEGIN" CTX [CTX_V_EOF] = 1;4 IF .COUNT GTR 0 THEN RETURN SS$_NORMAL# ELSE RETURN RMS$_EOF; END;C CTX [CTX_L_CURCLUST] = FAT_CHAIN (.CTX [CTX_L_CURCLUST]);$ CTX [CTX_L_SECINCLUS] = 1;C CTX [CTX_L_SECNUM] = CLUS_SECTOR (.CTX [CTX_L_CURCLUST]); END ELSE BEGIN= CTX [CTX_L_SECINCLUS] = .CTX [CTX_L_SECINCLUS] + 1;7 CTX [CTX_L_SECNUM] = .CTX [CTX_L_SECNUM] + 1; END;@ DISK_READSEC (.CTX [CTX_L_SECNUM], CTX [CTX_T_SECBUF]);1 CTX [CTX_L_BUFPTR] = CTX [CTX_T_SECBUF];+ CTX [CTX_L_BUFLEN] = CTX_S_SECBUF;& IF .CTX [CTX_V_IGNORELF] THEN BEGIN# CTX [CTX_V_IGNORELF] = 0;? IF CH$RCHAR (.CTX [CTX_L_BUFPTR]) EQL %CHAR (10) THEN BEGINC CTX [CTX_L_BUFPTR] = CH$PLUS (.CTX [CTX_L_BUFPTR],1);; CTX [CTX_L_BUFLEN] = .CTX [CTX_L_BUFLEN] - 1;; CTX [CTX_L_CURPOS] = .CTTMP.BCKJ#[PCX]FILEIO.B32;25M!%gX [CTX_L_CURPOS] + 1; END; END; END; IF .CTX [CTX_V_BINARY] THEN BEGIND SECCOUNT = MIN (.DIRENT [DIR_L_FSIZE] -.CTX [CTX_L_CURPOS],1 .BUFSIZ - .COUNT, .CTX [CTX_L_BUFLEN]);6 CH$MOVE (.SECCOUNT, .CTX [CTX_L_BUFPTR], .P);> CTX [CTX_L_CURPOS] = .CTX [CTX_L_CURPOS] + .SECCOUNT;> CTX [CTX_L_BUFLEN] = .CTX [CTX_L_BUFLEN] - .SECCOUNT;G CTX [CTX_L_BUFPTR] = CH$PLUS (.CTX [CTX_L_BUFPTR], .SECCOUNT); END ELSE BEGINC CP = CH$FIND_CH (.CTX [CTX_L_BUFLEN], .CTX [CTX_L_BUFPTR], %CHAR (13)); IF CH$FAIL (.CP) THEN BEGIN/ CP = CH$FIND_CH (.CTX [CTX_L_BUFLEN],/ .CTX [CTX_L_BUFPTR], %CHAR (26)); IF CH$FAIL (.CP) THEN BEGINC SECCOUNT = MIN (.CTX [CTX_L_BUFLEN], .BUFSIZ-.COUNT);; CH$MOVE (.SECCOUNT, .CTX [CTX_L_BUFPTR], .P);C CTX [CTX_L_CURPOS] = .CTX [CTX_L_CURPOS] + .SECCOUNT;C CTX [CTX_L_BUFLEN] = .CTX [CTX_L_BUFLEN] - .SECCOUNT;@ CTX [CTX_L_BUFPTR] = CH$PLUS (.CTX [CTX_L_BUFPTR], .SECCOUNT); END ELSE BEGINA SECCOUNT = MIN (CH$DIFF (.CP, .CTX [CTX_L_BUFPTR]), .BUFSIZ-.COUNT);F IF .SECCOUNT EQL CH$DIFF (.CP, .CTX [CTX_L_BUFPTR]) THEN# CTX [CTX_V_EOF] = 1;; CH$MOVE (.SECCOUNT, .CTX [CTX_L_BUFPTR], .P);G CTX TMP.BCKJ#[PCX]FILEIO.B32;25M![CTX_L_CURPOS] = .CTX [CTX_L_CURPOS] + .SECCOUNT + 1;G CTX [CTX_L_BUFLEN] = .CTX [CTX_L_BUFLEN] - .SECCOUNT - 1;@ CTX [CTX_L_BUFPTR] = CH$PLUS (.CTX [CTX_L_BUFPTR], .SECCOUNT+1); END; END ELSE BEGIN LOCAL I;= SECCOUNT = MIN (CH$DIFF (.CP, .CTX [CTX_L_BUFPTR]), .BUFSIZ-.COUNT);; CH$MOVE (.SECCOUNT, .CTX [CTX_L_BUFPTR], .P);7 IF .SECCOUNT LSS .CTX [CTX_L_BUFLEN] THEN> I = (IF CH$RCHAR (CH$PLUS (.CTX [CTX_L_BUFPTR],4 .SECCOUNT+1)) EQL %CHAR (10)" THEN 2 ELSE 1) ELSE BEGIN( CTX [CTX_V_IGNORELF] = 1; I = 1; END;H CTX [CTX_L_CURPOS] = .CTX [CTX_L_CURPOS] + .SECCOUNT + .I;H CTX [CTX_L_BUFLEN] = .CTX [CTX_L_BUFLEN] - .SECCOUNT - .I;@ CTX [CTX_L_BUFPTR] = CH$PLUS (.CTX [CTX_L_BUFPTR], .SECCOUNT+.I); FOUND_CR = 1; END; END;! P = CH$PLUS (.P, .SECCOUNT); COUNT = .COUNT + .SECCOUNT; IF .CTX [CTX_V_BINARY] THEN6 IF .COUNT EQL .BUFSIZ THEN RETURN SS$_NORMAL;$ IF NOT .CTX [CTX_V_BINARY] THEN- IF .FOUND_CR THEN RETURN SS$_NORMAL; END; SS$_NORMALEND; ! FILE_READ %SBTTL 'FILE_WRITE'6GLOBAL ROUTINE FILE_WRITE (CTX_A_A, BUFPTR, BUFSIZ) = BEGIN!++! FUNCTIONAL DESCRIPTION:!B! TMP.BCKJ#[PCX]FILEIO.B32;25M! Writes to a file. For ASCII writes, the CRLF record delimiter&! is added at the end of the record.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! FILE_WRITE!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- BIND) CTX = .CTX_A_A : REF CTXDEF,* DIRENT = CTX [CTX_X_DIRENT] : DIRDEF; LOCAL P, NEWCLUS, COUNT, REMAIN;9 IF NOT .CTX [CTX_V_WRITING] THEN RETURN SS$_BADPARAM; P = .BUFPTR; REMAIN = .BUFSIZ; WHILE 1 DO BEGIN= COUNT = MIN (CTX_S_SECBUF-.CTX [CTX_L_BUFLEN], .REMAIN); IF .COUNT GTR 0 THEN3 CH$MOVE (.COUNT, .P, .CTX [CTX_L_BUFPTR]); P = CH$PLUS (.P, .COUNT);@ CTX [CTX_L_BUFPTR] = CH$PLUS (.CTX [CTX_L_BUFPTR], .COUNT);7 CTX [CTX_L_BUFLEN] = .CTX [CTX_L_BUFLEN] + .COUNT;; DIRENT [DIR_L_FSIZE] = .DIRENT [DIR_L_FSIZE] + .COUNT; IF .COUNT EQL .REMAIN THEN( IF NOT .CTX [CTX_V_BINARY] THEN BEGIN8 IF CTX_S_SECBUF-.CTX [CTX_L_BUFLEN] GTR 0 THEN BEGIN: CH$WCHAR_A (%CHAR (13), CTX [CTX_L_BUFPTR]);; CTX [CTX_L_BUFLEN] = .CTX [CTX_L_BUFLEN] + 1;? DIRENT [DIR_L_FSIZE] = .DIRENT [DIR_L_FSIZE] + 1; END ELSE& CTX [CTX_V_WRITECR] = 1;8 IF CTX_S_SECBUF-.CTX [TMP.BCKJ#[PCX]FILEIO.B32;25M!CTX_L_BUFLEN] GTR 0 THEN BEGIN: CH$WCHAR_A (%CHAR (10), CTX [CTX_L_BUFPTR]);; CTX [CTX_L_BUFLEN] = .CTX [CTX_L_BUFLEN] + 1;? DIRENT [DIR_L_FSIZE] = .DIRENT [DIR_L_FSIZE] + 1; END ELSE& CTX [CTX_V_WRITELF] = 1; END; REMAIN = .REMAIN - .COUNT;1 IF .CTX [CTX_L_BUFLEN] EQL CTX_S_SECBUF THEN BEGIN? DISK_UPDSEC (.CTX [CTX_L_SECNUM], CTX [CTX_T_SECBUF]);> IF .CTX [CTX_L_SECINCLUS] EQL .BSEC [BSEC_B_SPC] THEN BEGIN LOCAL STATUS;= STATUS = ALLOCATE (NEWCLUS, .CTX [CTX_L_CURCLUST]);- IF NOT .STATUS THEN RETURN .STATUS;* CTX [CTX_L_CURCLUST] = .NEWCLUS;$ CTX [CTX_L_SECINCLUS] = 1;C CTX [CTX_L_SECNUM] = CLUS_SECTOR (.CTX [CTX_L_CURCLUST]); END ELSE BEGIN= CTX [CTX_L_SECINCLUS] = .CTX [CTX_L_SECINCLUS] + 1;7 CTX [CTX_L_SECNUM] = .CTX [CTX_L_SECNUM] + 1; END;1 CTX [CTX_L_BUFPTR] = CTX [CTX_T_SECBUF]; CTX [CTX_L_BUFLEN] = 0;% IF .CTX [CTX_V_WRITECR] THEN BEGIN6 CH$WCHAR_A (%CHAR (13), CTX [CTX_L_BUFPTR]);7 CTX [CTX_L_BUFLEN] = .CTX [CTX_L_BUFLEN] + 1;" CTX [CTX_V_WRITECR] = 0;; DIRENT [DIR_L_FSIZE] = .DIRENT [DIR_L_FSIZE] + 1; END;% IF .CTX [CTX_V_WRITELF] THEN BEGIN6 CH$WCHAR_A (%CHAR (10), CTX [CTX_L_BUFPTR]);7 CTTMP.BCKJ#[PCX]FILEIO.B32;25M!WX [CTX_L_BUFLEN] = .CTX [CTX_L_BUFLEN] + 1;" CTX [CTX_V_WRITELF] = 0;; DIRENT [DIR_L_FSIZE] = .DIRENT [DIR_L_FSIZE] + 1; END; END;- IF .REMAIN EQL 0 THEN RETURN SS$_NORMAL; END; SS$_NORMALEND; ! FILE_WRITE %SBTTL 'FILE_CLOSE_ALL'1GLOBAL ROUTINE FILE_CLOSE_ALL (FINAL_STATUS_A) = BEGIN!++! FUNCTIONAL DESCRIPTION:!9! Exit handler for file I/O routines. Closes all files.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! FILE_CLOSE_ALL!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL CTX : REF CTXDEF;2 WHILE NOT REMQUE (.FILEQ [QUE_L_HEAD], CTX) DO BEGIN! IF .CTX [CTX_V_WRITING] THEN BEGIN* IF .CTX [CTX_L_BUFLEN] GTR 0 THEN BEGIN@ CH$FILL (%CHAR (26), CTX_S_SECBUF-.CTX [CTX_L_BUFLEN],# .CTX [CTX_L_BUFPTR]);I@ DISK_UPDSEC (.CTX [CTX_L_SECNUM], CTX [CTX_T_SECBUF]); END; CTX [CTX_L_BUFLEN] = 0;1 CTX [CTX_L_BUFPTR] = CTX [CTX_T_SECBUF];nK ENTER_FILE ((IF .CTX [CTX_V_ROOT] THEN 0 ELSE CTX [CTX_X_PARENT]),o CTX [CTX_X_DIRENT]); END;i, LIB$FREE_VM (%REF (CTX_S_CTXDEF), CTX); END; SS$_NORMALEND; ! FILE_CLOSE_ALLRENDELUDOMON DATE: 17-JUL-1990!! MODIFICATITMP.BCK%%#[PCX]FILEIO.MAR;4i!\*[PCX]FILEIO.MAR;4+,%%.!/ 4i! -#0123KPWO"56 S7cY89`\=GHJ*; %PRINT: Structure CTXDEF size: 612 bytes .TITLE FILEIO FILEIO .IDENT \V1.1\ .PSECT $OWN$,NOEXE,2;FILEQU.6: .ADDRESS U.6, U.6 ;\ .EXTRN FAT_CHAIN, DISK_READSEC, DISK_UPDSEC, ALLOCATE, UPDATE_FAT, DISK_SEARCH, ENTER_FILEQ .EXTRN MAKE_MSDOS_DATE, CLUS_SECTOR, LIB$GET_VM, LIB$FREE_VM, BSEC, PCX__EXISTS .PSECT $CODE$,NOWRT,2U.1:O .ENTRY FILE_OPEN, ^M ;FILE_OPEN, Save R2,R3,R4,R5,R6,R7 SUBL2 #4, SP ;#4, SP% MOVL 8(AP), R6 ;CTX_A_A, R6& MOVL 4(AP), R7 ;DIRENT_A, R7 PUSHL R6 ;R6' MOVZWL #612, 4(SP) ;#612, 4(SP) PUSHAB 4(SP) ;4(SP). CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM" BLBC R0, 1$ ;STATUS, 1$C MOVC5 #0, (SP), #0, #612, @0(R6) ;#0, (SP), #0, #612, @0(R6). INSQUE @0(R6), @W^U.6+4 ;@0(R6), @U.6+4! MOVL (R6), R6 ;(R6), R6: INSV 12(AP), #0, #1, 96(R6) ;MODE, #0, #1, 96(R6)0 MOVC3 #32, (R7), 8(R6) ;#32, (R7), 8(R6)- MOVZWL 26(R7), 76(R6) ;26(R7), 76(R6) PUSHL 76(R6) ;76(R6)0 CALLS #1, W^CLUS_SECTOR ;#1, CLUS_SECTOR- MOVAB -1(R0), 84(R6) ;-1(R0), 84(R6) MOVL #1, R0 ;#1, R01$: RET ;:; Routine Size: 86 bytes, Routine Base: $CODE$ + 0000f .ENTRY FILE_CREATE, ^M ; SUBL2 #4, SP ;#4, SP( MOVL 16(AP), R11 ;CTX_A_A, R11& MOVL 4(AP)TMP.BCK%%#[PCX]FILEIO.MAR;4i!R, R9 ;PARENT_A, R9% MOVL 8(AP), R8 ;FNAME_A, R8& MOVL 12(AP), R7 ;FTYPE_A, R7 PUSHL R7 ;R7 PUSHL R8 ;R8 PUSHL R9 ;R90 CALLS #3, W^DISK_SEARCH ;#3, DISK_SEARCH BLBC R0, 1$ ;R0, 1$0 MOVL #PCX__EXISTS, R0 ;#PCX__EXISTS, R0 RET ;1$: PUSHL R11 ;R11' MOVZWL #612, 4(SP) ;#612, 4(SP) PUSHAB 4(SP) ;4(SP). CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM# MOVL R0, R10 ;R0, STATUS# BLBC R10, 5$ ;STATUS, 5$# MOVL (R11), R6 ;(R11), R6? MOVC5 #0, (SP), #0, #612, (R6) ;#0, (SP), #0, #612, (R6) TSTL R9 ;R9 BEQL 2$ ;2$ TSTW 26(R9) ;26(R9) BNEQ 3$ ;3$*2$: BISB2 #64, 96(R6) ;#64, 96(R6) BRB 4$ ;4$53$: MOVC3 #32, (R9), 40(R6) ;#32, (R9), 40(R6)!4$: ADDL2 #8, R6 ;#8, R6E MOVC5 (R8), @4(R8), #32, #8, (R6) ;(R8), @4(R8), #32, #8, (R6)G MOVC5 (R7), @4(R7), #32, #3, 8(R6) ;(R7), @4(R7), #32, #3, 8(R6) PUSHAB 22(R6) ;22(R6) CLRL -(SP) ;-(SP)8 CALLS #2, W^MAKE_MSDOS_DATE ;#2, MAKE_MSDOS_DATE CLRL -(SP) ;-(SP) PUSHAB 26(R6) ;26(R6)+ CALLS #2, W^ALLOCATE ;#2, ALLOCATE# MOVL R0, R10 ;R0, STATUS# BLBS R10, 6$ ;STATUS, 6$ PUSHL R11 ;R11' MOVZWL #612, 4(SP) ;#612, 4(SP) PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM CLRL (R11)TMP.BCK%%#[PCX]FILEIO.MAR;4i!e ;(R11)&5$: MOVL R10, R0 ;STATUS, R0 RET ;&6$: MOVL (R11), R2 ;(R11), R2- MOVZWL 26(R6), 76(R2) ;26(R6), 76(R2): INSV 20(AP), #0, #1, 96(R2) ;MODE, #0, #1, 96(R2)% BISB2 #8, 96(R2) ;#8, 96(R2) PUSHL 76(R2) ;76(R2)0 CALLS #1, W^CLUS_SECTOR ;#1, CLUS_SECTOR% MOVL R0, 84(R2) ;R0, 84(R2)% MOVL #1, 80(R2) ;#1, 80(R2)/ MOVAB 100(R2), 92(R2) ;100(R2), 92(R2) CLRL 88(R2) ;88(R2)+ INSQUE (R2), @W^U.6+4 ;(R2), @U.6+4 MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 219 bytes, Routine Base: $CODE$ + 0056U.2:Q .ENTRY FILE_CLOSE, ^M ;FILE_CLOSE, Save R2,R3,R4,R5,R6,R7 SUBL2 #4, SP ;#4, SP% MOVL 4(AP), R7 ;CTX_A_A, R7+ REMQUE @(R7)+, -(R7) ;@(R7)+, -(R7)! MOVL (R7), R6 ;(R7), R6- BBC #3, 96(R6), 4$ ;#3, 96(R6), 4$ TSTL 88(R6) ;88(R6) BLEQ 1$ ;1$0 SUBL3 88(R6), #512, R0 ;88(R6), #512, R0C MOVC5 #0, (SP), #26, R0, @92(R6) ;#0, (SP), #26, R0, @92(R6) PUSHAB 100(R6) ;100(R6) PUSHL 84(R6) ;84(R6)0 CALLS #2, W^DISK_UPDSEC ;#2, DISK_UPDSEC!1$: CLRL 88(R6) ;88(R6)/ MOVAB 100(R6), 92(R6) ;100(R6), 92(R6) PUSHAB 8(R6) ;8(R6)- BBC #6, 96(R6), 2$ ;#6, 96(R6), 2$ CLRL -(SP) ;-(SP) BRB 3$ ;3$#2$: ADDL2 #40, R6 ;#40, R6 PUSHL R6 TMP.BCK%%#[PCX]FILEIO.MAR;4i!TK ;R613$: CALLS #2, W^ENTER_FILE ;#2, ENTER_FILE. CALLS #0, W^UPDATE_FAT ;#0, UPDATE_FAT4$: PUSHL R7 ;R7' MOVZWL #612, 4(SP) ;#612, 4(SP) PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM RET ;;; Routine Size: 106 bytes, Routine Base: $CODE$ + 0131U.3:d .ENTRY FILE_READ, ^M ; SUBL2 #12, SP ;#12, SP( MOVL 16(AP), R11 ;COUNT_A, R11' MOVL @4(AP), R6 ;@CTX_A_A, R6 PUSHAB 8(R6) ;8(R6) PUSHAB 96(R6) ;96(R6)- BBC #3, @0(SP), 1$ ;#3, @0(SP), 1$ MOVL #20, R0 ;#20, R0 RET ;)1$: MOVL 8(AP), 8(SP) ;BUFPTR, P CLRL 16(SP) ;FOUND_CR CLRW (R11) ;(R11)02$: BBS #1, @0(SP), 5$ ;#1, @0(SP), 5$% MOVAB 72(R6), R9 ;72(R6), R9- ADDL3 #28, 4(SP), R0 ;#28, 4(SP), R0% CMPL (R9), (R0) ;(R9), (R0) BLSS 3$ ;3$ TSTW (R11) ;(R11) BNEQ 4$ ;4$ BRB 5$ ;5$(3$: MOVAB 88(R6), R8 ;88(R6), R8 TSTL (R8) ;(R8) BNEQ 9$ ;9$? CMPZV #0, #8, W^BSEC+13, 80(R6) ;#0, #8, BSEC+13, 80(R6) BNEQ 7$ ;7$ PUSHL 76(R6) ;76(R6)- CALLS #1, W^FAT_CHAIN ;#1, FAT_CHAIN TSTL R0 ;R0 BNEQ 6$ ;6$% BISB2 #2, @0(SP) ;#2, @0(SP) TSTW (R11) ;(R11)TMP.BCK%%#[PCX]FILEIO.MAR;4i! 4$: BEQL 5$ ;5$ BRW 29$ ;29$(5$: MOVL #98938, R0 ;#98938, R0 RET ;!6$: PUSHL 76(R6) ;76(R6)- CALLS #1, W^FAT_CHAIN ;#1, FAT_CHAIN% MOVL R0, 76(R6) ;R0, 76(R6)% MOVL #1, 80(R6) ;#1, 80(R6)% MOVAB 84(R6), R2 ;84(R6), R2 PUSHL 76(R6) ;76(R6)0 CALLS #1, W^CLUS_SECTOR ;#1, CLUS_SECTOR! MOVL R0, (R2) ;R0, (R2) BRB 8$ ;8$!7$: INCL 80(R6) ;80(R6)% MOVAB 84(R6), R2 ;84(R6), R2 INCL (R2) ;(R2)#8$: PUSHAB 100(R6) ;100(R6) PUSHL (R2) ;(R2)2 CALLS #2, W^DISK_READSEC ;#2, DISK_READSEC/ MOVAB 100(R6), 92(R6) ;100(R6), 92(R6)% MOVZWL #512, (R8) ;#512, (R8)- BBC #2, @0(SP), 9$ ;#2, @0(SP), 9$% BICB2 #4, @0(SP) ;#4, @0(SP)) CMPB @92(R6), #10 ;@92(R6), #10 BNEQ 9$ ;9$ INCL 92(R6) ;92(R6) DECL (R8) ;(R8) INCL (R9) ;(R9)*9$: BLBC @0(SP), 12$ ;@0(SP), 12$- ADDL3 #28, 4(SP), R1 ;#28, 4(SP), R1- SUBL3 (R9), (R1), R0 ;(R9), (R1), R0# MOVZWL (R11), R1 ;(R11), R1- SUBL3 R1, 12(AP), R1 ;R1, BUFSIZ, R1 CMPL R0, R1 ;R0, R1 BLEQ 10$ ;10$ MOVL R1, R0 ;R1, R0%10$: CMPL R0, (R8) ;R0, (R8) BLEQ 11$ ;11$! MOVL (R8), R0 ;(R8), R0)11$: MOVL R0, R10 ;R0, SECCOUNT9 MOVC3 R10, @92(R6), @8(SP) ;SECCOUNT, @92(R6),TMP.BCK%%#[PCX]FILEIO.MAR;4i!m8 @P( ADDL2 R10, (R9) ;SECCOUNT, (R9)( SUBL2 R10, (R8) ;SECCOUNT, (R8), ADDL2 R10, 92(R6) ;SECCOUNT, 92(R6) BRB 16$ ;16$)12$: MOVAB 92(R6), R7 ;92(R6), R72 LOCC #13, (R8), @0(R7) ;#13, (R8), @0(R7) BNEQ 13$ ;13$ CLRL R1 ;R1%13$: MOVL R1, 12(SP) ;R1, CP BNEQ 21$ ;21$2 LOCC #26, (R8), @0(R7) ;#26, (R8), @0(R7) BNEQ 14$ ;14$ CLRL R1 ;R1%14$: MOVL R1, 12(SP) ;R1, CP BNEQ 17$ ;17$# MOVZWL (R11), R0 ;(R11), R0- SUBL3 R0, 12(AP), R0 ;R0, BUFSIZ, R0! MOVL (R8), R1 ;(R8), R1 CMPL R1, R0 ;R1, R0 BLEQ 15$ ;15$ MOVL R0, R1 ;R0, R1)15$: MOVL R1, R10 ;R1, SECCOUNT7 MOVC3 R10, @0(R7), @8(SP) ;SECCOUNT, @0(R7), @P( ADDL2 R10, (R9) ;SECCOUNT, (R9)( SUBL2 R10, (R8) ;SECCOUNT, (R8)( ADDL2 R10, (R7) ;SECCOUNT, (R7)16$: BRB 20$ ;20$017$: SUBL3 (R7), 12(SP), R2 ;(R7), CP, R2# MOVZWL (R11), R0 ;(R11), R0- SUBL3 R0, 12(AP), R0 ;R0, BUFSIZ, R0 MOVL R2, R1 ;R2, R1 CMPL R1, R0 ;R1, R0 BLEQ 18$ ;18$ MOVL R0, R1 ;R0, R1)18$: MOVL R1, R10 ;R1, SECCOUNT% CMPL R10, R2 ;SECCOUNT, R2 BNEQ 19$ ;19$% BISB2 #2, @0(SP) ;#2, @0(SP);19$: MOVC3 R10, @0(R7), @8(SP) ;SECCOUNT, @0(R7), @P0 ADDL3 R10, (R9), R1 ;SECCOUNT, (R9), R1' MOVTMP.BCK%%#[PCX]FILEIO.MAR;4i!AB 1(R1), (R9) ;1(R1), (R9)0 SUBL3 R10, (R8), R1 ;SECCOUNT, (R8), R1) MOVAB -1(R1), (R8) ;-1(R1), (R8)0 ADDL3 R10, (R7), R0 ;SECCOUNT, (R7), R0' MOVAB 1(R0), (R7) ;1(R0), (R7)20$: BRB 26$ ;26$021$: SUBL3 (R7), 12(SP), R1 ;(R7), CP, R1# MOVZWL (R11), R0 ;(R11), R0- SUBL3 R0, 12(AP), R0 ;R0, BUFSIZ, R0 CMPL R1, R0 ;R1, R0 BLEQ 22$ ;22$ MOVL R0, R1 ;R0, R1)22$: MOVL R1, R10 ;R1, SECCOUNT7 MOVC3 R10, @0(R7), @8(SP) ;SECCOUNT, @0(R7), @P( CMPL R10, (R8) ;SECCOUNT, (R8) BGEQ 23$ ;23$0 ADDL3 (R7), R10, R0 ;(R7), SECCOUNT, R0% CMPB 1(R0), #10 ;1(R0), #10 BNEQ 24$ ;24$ MOVL #2, R0 ;#2, I BRB 25$ ;25$)23$: BISB2 #4, @0(SP) ;#4, @0(SP)!24$: MOVL #1, R0 ;#1, I425$: ADDL3 R10, (R9), R1 ;SECCOUNT, (R9), R1( ADDL3 R0, R1, (R9) ;I, R1, (R9)0 SUBL3 R10, (R8), R1 ;SECCOUNT, (R8), R1( SUBL3 R0, R1, (R8) ;I, R1, (R8)% ADDL2 R10, R0 ;SECCOUNT, R0! ADDL2 R0, (R7) ;R0, (R7)' MOVL #1, 16(SP) ;#1, FOUND_CR*26$: ADDL2 R10, 8(SP) ;SECCOUNT, P* ADDW2 R10, (R11) ;SECCOUNT, (R11)' BLBC @0(SP), 28$ ;@0(SP), 28$< CMPZV #0, #16, (R11), 12(AP) ;#0, #16, (R11), BUFSIZ BEQL 29$ ;29$' BLBC @0(SP), 28$ ;@0(SP), 28$27$: BRW 2$ ;2$-28$: BLBC 16(SP), 27$ ;FOUND_TMP.BCK%%#[PCX]FILEIO.MAR;4i!&CR, 27$"29$: MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 512 bytes, Routine Base: $CODE$ + 019BU.4:e .ENTRY FILE_WRITE, ^M ; SUBL2 #8, SP ;#8, SP' MOVL @4(AP), R6 ;@CTX_A_A, R6% MOVAB 8(R6), R11 ;8(R6), R11% MOVAB 96(R6), R8 ;96(R6), R8) BBS #3, (R8), 1$ ;#3, (R8), 1$ MOVL #20, R0 ;#20, R0 RET ;(1$: MOVL 8(AP), (SP) ;BUFPTR, P* MOVL 12(AP), R10 ;BUFSIZ, REMAIN(2$: MOVAB 88(R6), R7 ;88(R6), R7- SUBL3 (R7), #512, R0 ;(R7), #512, R0# CMPL R0, R10 ;R0, REMAIN BLEQ 3$ ;3$# MOVL R10, R0 ;REMAIN, R0$3$: MOVL R0, R9 ;R0, COUNT BLEQ 4$ ;4$5 MOVC3 R9, @0(SP), @92(R6) ;COUNT, @P, @92(R6)$4$: ADDL2 R9, (SP) ;COUNT, P% MOVAB 92(R6), R2 ;92(R6), R2$ ADDL2 R9, (R2) ;COUNT, (R2)$ ADDL2 R9, (R7) ;COUNT, (R7)' MOVAB 28(R11), R3 ;28(R11), R3$ ADDL2 R9, (R3) ;COUNT, (R3)& CMPL R9, R10 ;COUNT, REMAIN BNEQ 8$ ;8$! BLBS (R8), 8$ ;(R8), 8$- SUBL3 #512, (R7), R0 ;#512, (R7), R0 BGEQ 5$ ;5$' MOVB #13, @0(R2) ;#13, @0(R2) INCL (R2) ;(R2) INCL (R7) ;(R7) INCL (R3) ;(R3) BRB 6$ ;6$&5$: BISB2 #16, (R8) ;#16, (R8)06$: SUBL3 #512, (RTMP.BCK%%#[PCX]FILEIO.MAR;4i!47), R0 ;#512, (R7), R0 BGEQ 7$ ;7$' MOVB #10, @0(R2) ;#10, @0(R2) INCL (R2) ;(R2) INCL (R7) ;(R7) INCL (R3) ;(R3) BRB 8$ ;8$&7$: BISB2 #32, (R8) ;#32, (R8))8$: SUBL2 R9, R10 ;COUNT, REMAIN% CMPL (R7), #512 ;(R7), #512 BNEQ 12$ ;12$ PUSHAB 100(R6) ;100(R6) PUSHL 84(R6) ;84(R6)0 CALLS #2, W^DISK_UPDSEC ;#2, DISK_UPDSEC? CMPZV #0, #8, W^BSEC+13, 80(R6) ;#0, #8, BSEC+13, 80(R6) BNEQ 9$ ;9$ PUSHL 76(R6) ;76(R6) PUSHAB 8(SP) ;NEWCLUS+ CALLS #2, W^ALLOCATE ;#2, ALLOCATE$ BLBC R0, 14$ ;STATUS, 14$- MOVL 4(SP), 76(R6) ;NEWCLUS, 76(R6)% MOVL #1, 80(R6) ;#1, 80(R6) PUSHL 76(R6) ;76(R6)0 CALLS #1, W^CLUS_SECTOR ;#1, CLUS_SECTOR% MOVL R0, 84(R6) ;R0, 84(R6) BRB 10$ ;10$!9$: INCL 80(R6) ;80(R6) INCL 84(R6) ;84(R6)/10$: MOVAB 100(R6), (R2) ;100(R6), (R2) CLRL (R7) ;(R7)+ BBC #4, (R8), 11$ ;#4, (R8), 11$' MOVB #13, @0(R2) ;#13, @0(R2) INCL (R2) ;(R2) INCL (R7) ;(R7)# BICB2 #16, (R8) ;#16, (R8) INCL (R3) ;(R3)/11$: BBC #5, (R8), 12$ ;#5, (R8), 12$' MOVB #10, @0(R2) ;#10, @0(R2) INCL (R2) ;(R2) INCL (R7) ;(R7)# BICB2 #32, (R8) ;#32, (R8) INCL (R3) ;(R3)12$: TSTL R10 TMP.BCK%%#[PCX]FILEIO.MAR;4i! ;REMAIN BEQL 13$ ;13$ BRW 2$ ;2$"13$: MOVL #1, R0 ;#1, R014$: RET ;;; Routine Size: 269 bytes, Routine Base: $CODE$ + 039BU.5:S .ENTRY FILE_CLOSE_ALL, ^M ;FILE_CLOSE_ALL, Save R2,R3,R4,R5,R6 SUBL2 #8, SP ;#8, SP*1$: REMQUE @W^U.6, 4(SP) ;@U.6, CTX BVS 6$ ;6$! MOVL 4(SP), R6 ;CTX, R6- BBC #3, 96(R6), 5$ ;#3, 96(R6), 5$ TSTL 88(R6) ;88(R6) BLEQ 2$ ;2$0 SUBL3 88(R6), #512, R0 ;88(R6), #512, R0C MOVC5 #0, (SP), #26, R0, @92(R6) ;#0, (SP), #26, R0, @92(R6) PUSHAB 100(R6) ;100(R6) PUSHL 84(R6) ;84(R6)0 CALLS #2, W^DISK_UPDSEC ;#2, DISK_UPDSEC!2$: CLRL 88(R6) ;88(R6)/ MOVAB 100(R6), 92(R6) ;100(R6), 92(R6) PUSHAB 8(R6) ;8(R6)- BBC #6, 96(R6), 3$ ;#6, 96(R6), 3$ CLRL -(SP) ;-(SP) BRB 4$ ;4$#3$: ADDL2 #40, R6 ;#40, R6 PUSHL R6 ;R614$: CALLS #2, W^ENTER_FILE ;#2, ENTER_FILE5$: PUSHAB 4(SP) ;CTX' MOVZWL #612, 4(SP) ;#612, 4(SP) PUSHAB 4(SP) ;4(SP)0 CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM BRB 1$ ;1$!6$: MOVL #1, R0 ;#1, R0 RET ;;; Routine Size: 109 bytes, Routine Base: $CODE$ + 04A8; PSECT SUMMARY;#; Name Bytes Attributes;T; $OWN$ 8 NOVEC, WRT, RD ,NOEXE,NOTMP.BCK%%#[PCX]FILEIO.MAR;4i!GSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $CODE$ 1301 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2); Library Statistics;9; -------- Symbols -------- Pages Processing9; File Total Loaded Percent Mapped Time;]; SYS$COMMON:[SYSLIB]STARLET.L32;1 14000 5 0 813 00:00.4U; MDM_SRC:[PCX]PCX.L32;11 77 56 72 13 00:00.0W; MDM_SRC:[PCX]FIELDS.L32;2 20 16 80 10 00:00.0; COMMAND QUALIFIERSi; BLISS/LIST=FILEIO.MAR/NOOBJ/MACHINE=(OBJ,NOBIN,ASSEM,UNIQUE,NOCOMM)/SOURCE=(NOHEAD,NOSOURCE) FILEIO.B32; Compilation Complete .ENDTMP.BCK#[PCX]MISC.B32;9J4*[PCX]MISC.B32;9+,./ 4J-#0123KPWO56ak78k89GHJ %TITLE 'MISC'MODULE MISC (IDENT='V1.2') =BEGIN!++! FACILITY: PCX!'! ABSTRACT: Miscellaneous routines!! MODULE DESCRIPTION:!5! This module contains some miscellaneous routines.!! AUTHOR: M. MadisonA! COPYRIGHT 1990, RENSSELAER POLYTECHNIC INSTITUTE."! ALL RIGHTS RESERVED.!! CREATION DATE: 23-JUL-1990!! MODIFICATION HISTORY:!0! 23-JUL-1990 V1.0 Madison Initial coding.4! 30-JUL-1990 V1.1 Madison Improve formatting.9! 31-JUL-1990 V1.1-1 Madison Month table was 1 off.2! 03-AUG-1990 V1.3 Madison Added YES_ANSWER.!--" LIBRARY 'SYS$LIBRARY:STARLET'; LIBRARY 'PCX'; FORWARD ROUTINE MAKE_MSDOS_DATE, FORMAT_ENTRY, FORMAT_MSDOS_DATE; EXTERNAL ROUTINE; G_HAT (LIB$SYS_FAO, STR$COPY_DX, STR$TRIM, STR$APPEND,? LIB$GET_INPUT, LIB$PUT_OUTPUT, STR$CASE_BLIND_COMPARE,! STR$CONCAT, STR$COPY_R); EXTERNAL LITERAL PCX__YORN; %SBTTL 'MAKE_MSDOS_DATE'2GLOBAL ROUTINE MAKE_MSDOS_DATE (TIMADR, MSDT_A) = BEGIN!++! FUNCTIONAL DESCRIPTION:!A! Converts a VMS date/time value into an MSDOS date/time value.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! MAKE_MSDOS_DATE!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- TMP.BCK#[PCX]MISC.B32;9JBIND MSDT = .MSDT_A : LONG; LOCAL NUMTIM : VECTOR [7,WORD];, $NUMTIM (TIMADR=.TIMADR, TIMBUF=NUMTIM);& MSDT<25,7,0> = .NUMTIM [0] - 1980; MSDT<21,4,0> = .NUMTIM [1]; MSDT<16,5,0> = .NUMTIM [2]; MSDT<11,5,0> = .NUMTIM [3]; MSDT<5,6,0> = .NUMTIM [4];# MSDT<0,5,0> = .NUMTIM [5] / 2; SS$_NORMALEND; ! MAKE_MSDOS_DATE %SBTTL 'FORMAT_ENTRY'1GLOBAL ROUTINE FORMAT_ENTRY (DIRENT_A, XSTR_A) = BEGIN!++! FUNCTIONAL DESCRIPTION:!,! Formats a directory entry into a string.!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! FORMAT_ENTRY!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!-- LOCAL DIRENT : DIRDEF,& FNAME : BLOCK [DSC$K_S_BLN,BYTE],& FTYPE : BLOCK [DSC$K_S_BLN,BYTE],% STR : BLOCK [DSC$K_S_BLN,BYTE],& DTSTR : BLOCK [DSC$K_S_BLN,BYTE], STATUS;. CH$MOVE (DIR_S_DIRDEF, .DIRENT_A, DIRENT);, INIT_DYNDESC (STR, DTSTR, FNAME, FTYPE); STATUS = 0;" SELECTONE .DIRENT [0,0,8,0] OF SET [0,%X'E5'] : ; [OTHERWISE] : BEGINJ IF .DIRENT [0,0,8,0] EQL %X'05' THEN CH$WCHAR (%X'E5', .DIRENT);: LIB$SYS_FAO (%ASCID'!AD', 0, FNAME, DIR_S_FNAME,$ DIRENT [DIR_T_FNAME]);: LIB$SYS_FAO (%ASCID'!AD', 0, FTYPE, DIR_S_FTYPE,$ TMP.BCK#[PCX]MISC.B32;9J.G DIRENT [DIR_T_FTYPE]);" STR$TRIM (FNAME, FNAME);" STR$TRIM (FTYPE, FTYPE);> FORMAT_MSDOS_DATE (.DIRENT [DIR_L_DATETIME], DTSTR);- IF .FTYPE [DSC$W_LENGTH] GTR 0 THEN BEGIN2 IF NOT .DIRENT [DIR_V_VOLLABEL] THEN- STR$APPEND (FNAME, %ASCID'.');( STR$APPEND (FNAME, FTYPE); END;* IF .DIRENT [DIR_V_VOLLABEL] THENE LIB$SYS_FAO (%ASCID'Volume label: !AS, created !AS', 0,! STR, FNAME, DTSTR) ELSE BEGIN/ IF .DIRENT [DIR_V_DIRECTORY] THEN5 STR$COPY_DX (FTYPE, %ASCID'Directory') ELSE BEGIN3 LIB$SYS_FAO (%ASCID'!9UL', 0, FTYPE,* .DIRENT [DIR_L_FSIZE]);/ IF .DIRENT [DIR_V_READONLY] THEN9 STR$APPEND (FTYPE, %ASCID',ReadOnly');- IF .DIRENT [DIR_V_HIDDEN] THEN7 STR$APPEND (FTYPE, %ASCID',Hidden');2 IF NOT .DIRENT [DIR_V_ARCHIVE] THEN9 STR$APPEND (FTYPE, %ASCID',Archived'); END;: LIB$SYS_FAO (%ASCID'!15AS !AS !AS', 0, STR, $ FNAME, DTSTR, FTYPE); END;% STR$COPY_DX (.XSTR_A, STR); STATUS = SS$_NORMAL; END; TES;, FREE_STRINGS (STR, DTSTR, FNAME, FTYPE); .STATUSEND; ! FORMAT_ENTRY %SBTTL 'FORMAT_MSDOS_DATE'/GLOBAL ROUTINE FORMAT_MSDOS_DATMP.BCK#[PCX]MISC.B32;9J TE (DT, STR_A) = BEGIN!++! FUNCTIONAL DESCRIPTION:!! description!B! RETURNS: cond_value, longword (unsigned), write only, by value! ! PROTOTYPE:!! FORMAT_MSDOS_DATE dt, str!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!2! SS$_NORMAL: normal successful completion.!! SIDE EFFECTS:! ! None.!--I TABLE (MONTH, '???', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',( 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');6 LIB$SYS_FAO (%ASCID'!2ZL-!AS-!4ZL !2ZL:!2ZL:!2ZL', 0, .STR_A,B .DT<16,5,0>, .MONTH [.DT<21,4,0>], .DT<25,7,0>+1980,4 .DT<11,5,0>, .DT<5,6,0>, .DT<0,5,0>*2)END; ! FORMAT_MSDOS_DATE %SBTTL 'YES_ANSWER'/GLOBAL ROUTINE YES_ANSWER (PROMPT_A, DEFANS) = BEGIN!++! FUNCTIONAL DESCRIPTION:!! Asks a yes-or-no question.!?! RETURNS: boolean, longword (unsigned), write only, by value! ! PROTOTYPE:!! YES_ANSWER!! IMPLICIT INPUTS: None.!! IMPLICIT OUTPUTS: None.!! COMPLETION CODES:!! 1: answer was YES.! 0: answer was NO.!! SIDE EFFECTS:! ! None.!-- LOCAL% STR : BLOCK [DSC$K_S_BLN,BYTE],% STR2 : BLOCK [DSC$K_S_BLN,BYTE],% STR3 : BLOCK [DSC$K_S_BLN,BYTE], CP;6 TABLE (ANSWER, 'YES', 'YE', 'Y', 'OK', 'NO', 'N');# INIT_DYNDESC (STR, STR2, STR3);+ STR$CONCAT (STR, .PROMPT_A, %ASCID' [',A (IF .DEFANS THEN %ASCID'Yes' ELSE %ASCID'No')TMP.BCK#[PCX]MISC.B32;9Je , %ASCID']: '); WHILE 1 DO BEGIN LIB$GET_INPUT (STR2, STR);' IF .STR2 [DSC$W_LENGTH] EQL 0 THEN BEGIN( FREE_STRINGS (STR, STR2, STR3); RETURN .DEFANS; END; STR$TRIM (STR2, STR2);F CP = CH$FIND_NOT_CH (.STR2 [DSC$W_LENGTH], .STR2 [DSC$A_POINTER], %C' '); IF NOT CH$FAIL (.CP) THEN6 STR$COPY_R (STR3, %REF (.STR2 [DSC$W_LENGTH]-: CH$DIFF (.CP, .STR2 [DSC$A_POINTER])), .CP);' INCR I FROM 0 TO ANSWER_COUNT-1 DOB IF STR$CASE_BLIND_COMPARE (.ANSWER [.I], STR3) EQL 0 THEN BEGIN* FREE_STRINGS (STR, STR2, STR3); ) RETURN (.I LSS ANSWER_COUNT-2); END; SIGNAL (PCX__YORN, 0); END; 0END; ! YES_ANSWERENDELUDOMTMP.BCK`#[PCX]MISC.MAR;4nF*[PCX]MISC.MAR;4+,`./ 4n2-#0123KPWO56cm7Hum89GHJ .TITLE MISC MISC .IDENT \V1.2\n .EXTRN LIB$SYS_FAO, STR$COPY_DX, STR$TRIM, STR$APPEND, LIB$GET_INPUT, LIB$PUT_OUTPUT, STR$CASE_BLIND_COMPARE6 .EXTRN STR$CONCAT, STR$COPY_R, PCX__YORN, SYS$NUMTIM .PSECT $CODE$,NOWRT,2U.1:? .ENTRY MAKE_MSDOS_DATE, ^M ;MAKE_MSDOS_DATE, Save R2 SUBL2 #16, SP ;#16, SP$ MOVL 8(AP), R2 ;MSDT_A, R2 PUSHL 4(AP) ;TIMADR PUSHAB 4(SP) ;NUMTIM. CALLS #2, G^SYS$NUMTIM ;#2, SYS$NUMTIM# MOVZWL (SP), R0 ;NUMTIM, R0+ MOVAB -1980(R0), R0 ;-1980(R0), R02 INSV R0, #25, #7, (R2) ;R0, #25, #7, (R2); INSV 2(SP), #21, #4, (R2) ;NUMTIM+2, #21, #4, (R2); INSV 4(SP), #0, #5, 2(R2) ;NUMTIM+4, #0, #5, 2(R2); INSV 6(SP), #11, #5, (R2) ;NUMTIM+6, #11, #5, (R2)9 INSV 8(SP), #5, #6, (R2) ;NUMTIM+8, #5, #6, (R2)( MOVZWL 10(SP), R0 ;NUMTIM+10, R0 DIVL2 #2, R0 ;#2, R00 INSV R0, #0, #5, (R2) ;R0, #0, #5, (R2) MOVL #1, R0 ;#1, R0 RET ;:; Routine Size: 76 bytes, Routine Base: $CODE$ + 0000 .PSECT $PLIT$,NOWRT,NOEXE,2P.AAB: .ASCII \!AD\<0> ;P.AAA: .LONG 17694723 ; .ADDRESS P.AAB ;P.AAD: .ASCII \!AD\<0> ;P.AAC: .LONG 17694723 ; .ADDRESS P.AAD ;#P.AAF: .ASCII \.\<0><0><0> ;P.AAE: .LONG 17694721 ; .ADDRESS P.AAF ;:P.AAH: .ASCII \Volume label: !AS, created !AS\<0><0> ;P.AAG: .LONG 17694750 TMP.BCK`#[PCX]MISC.MAR;4nb ; .ADDRESS P.AAH ;*P.AAJ: .ASCII \Directory\<0><0><0> ;P.AAI: .LONG 17694729 ; .ADDRESS P.AAJ ;P.AAL: .ASCII \!9UL\ ;P.AAK: .LONG 17694724 ; .ADDRESS P.AAL ;*P.AAN: .ASCII \,ReadOnly\<0><0><0> ;P.AAM: .LONG 17694729 ; .ADDRESS P.AAN ;#P.AAP: .ASCII \,Hidden\<0> ;P.AAO: .LONG 17694727 ; .ADDRESS P.AAP ;*P.AAR: .ASCII \,Archived\<0><0><0> ;P.AAQ: .LONG 17694729 ; .ADDRESS P.AAR ;-P.AAT: .ASCII \!15AS !AS !AS\<0><0><0> ;P.AAS: .LONG 17694733 ; .ADDRESS P.AAT ; .EXTRN STR$FREE1_DX .PSECT $CODE$,NOWRT,2U.2:g .ENTRY FORMAT_ENTRY, ^M ;2 MOVAB G^STR$COPY_DX, R11 ;STR$COPY_DX, R11- MOVAB G^STR$TRIM, R10 ;STR$TRIM, R102 MOVAB G^STR$FREE1_DX, R9 ;STR$FREE1_DX, R9% MOVAB W^P.AAA, R8 ;P.AAA, R8. MOVAB G^STR$APPEND, R7 ;STR$APPEND, R70 MOVAB G^LIB$SYS_FAO, R6 ;LIB$SYS_FAO, R6' MOVAB -64(SP), SP ;-64(SP), SP9 MOVC3 #32, @4(AP), 32(SP) ;#32, @DIRENT_A, DIRENT. MOVL #34471936, 8(SP) ;#34471936, STR CLRL 12(SP) ;STR+40 MOVL #34471936, (SP) ;#34471936, DTSTR CLRL 4(SP) ;DTSTR+41 MOVL #34471936, 24(SP) ;#34471936, FNAME CLRL 28(SP) ;FNAME+41 MOVL #34471936, 16(SP) ;#34471936, FTYPE CLRL 20(TMP.BCK`#[PCX]MISC.MAR;4n5SP) ;FTYPE+4 CLRL R2 ;STATUS% MOVZBL 32(SP), R0 ;DIRENT, R0 BEQL 1$ ;1$! CMPB R0, #229 ;R0, #2291$: BNEQ 2$ ;2$ BRW 12$ ;12$!2$: CMPB R0, #5 ;R0, #5 BNEQ 3$ ;3$) MNEGB #27, @32(SP) ;#27, @DIRENT!3$: PUSHAB 32(SP) ;DIRENT PUSHL #8 ;#8 PUSHAB 32(SP) ;FNAME CLRL -(SP) ;-(SP) PUSHL R8 ;R8( CALLS #5, (R6) ;#5, LIB$SYS_FAO PUSHAB 40(SP) ;DIRENT+8 PUSHL #3 ;#3 PUSHAB 24(SP) ;FTYPE CLRL -(SP) ;-(SP) PUSHAB 12(R8) ;P.AAC( CALLS #5, (R6) ;#5, LIB$SYS_FAO PUSHAB 24(SP) ;FNAME PUSHAB 28(SP) ;FNAME& CALLS #2, (R10) ;#2, STR$TRIM PUSHAB 16(SP) ;FTYPE PUSHAB 20(SP) ;FTYPE& CALLS #2, (R10) ;#2, STR$TRIM PUSHL SP ;SP! PUSHL 58(SP) ;DIRENT+22! CALLS #2, W^U.3 ;#2, U.3 TSTW 16(SP) ;FTYPE BEQL 5$ ;5$0 BBS #3, 43(SP), 4$ ;#3, DIRENT+11, 4$ PUSHAB 24(R8) ;P.AAE PUSHAB 28(SP) ;FNAME' CALLS #2, (R7) ;#2, STR$APPEND 4$: PUSHAB 16(SP) ;FTYPE PUSHAB 28(SP) ;FNAME' CALLS #2, (R7) ;#2, STR$APPEND35$: BBC #3, 43(SP), 6$ ;#3, DIRENT+11, 6$ PUSHL SP ;SP PUSHAB 28(SP) ;FNAME PUSHAB 16(SP) ;STR CLRL -(SP) ;-(SP) PUSHAB 64(R8) ;P.AAG( CALLS #5, (R6) TMP.BCK`#[PCX]MISC.MAR;4nε ;#5, LIB$SYS_FAO BRB 11$ ;11$36$: BBC #4, 43(SP), 7$ ;#4, DIRENT+11, 7$ PUSHAB 84(R8) ;P.AAI PUSHAB 20(SP) ;FTYPE) CALLS #2, (R11) ;#2, STR$COPY_DX BRB 10$ ;10$$7$: PUSHL 60(SP) ;DIRENT+28 PUSHAB 20(SP) ;FTYPE CLRL -(SP) ;-(SP) PUSHAB 96(R8) ;P.AAK( CALLS #4, (R6) ;#4, LIB$SYS_FAO( BLBC 43(SP), 8$ ;DIRENT+11, 8$ PUSHAB 116(R8) ;P.AAM PUSHAB 20(SP) ;FTYPE' CALLS #2, (R7) ;#2, STR$APPEND38$: BBC #1, 43(SP), 9$ ;#1, DIRENT+11, 9$ PUSHAB 132(R8) ;P.AAO PUSHAB 20(SP) ;FTYPE' CALLS #2, (R7) ;#2, STR$APPEND59$: BBS #5, 43(SP), 10$ ;#5, DIRENT+11, 10$ PUSHAB 152(R8) ;P.AAQ PUSHAB 20(SP) ;FTYPE' CALLS #2, (R7) ;#2, STR$APPEND!10$: PUSHAB 16(SP) ;FTYPE PUSHAB 4(SP) ;DTSTR PUSHAB 32(SP) ;FNAME PUSHAB 20(SP) ;STR CLRL -(SP) ;-(SP) PUSHAB 176(R8) ;P.AAS( CALLS #6, (R6) ;#6, LIB$SYS_FAO11$: PUSHAB 8(SP) ;STR PUSHL 8(AP) ;XSTR_A) CALLS #2, (R11) ;#2, STR$COPY_DX" MOVL #1, R2 ;#1, STATUS12$: PUSHAB 8(SP) ;STR) CALLS #1, (R9) ;#1, STR$FREE1_DX PUSHL SP ;SP) CALLS #1, (R9) ;#1, STR$FREE1_DX PUSHAB 24(SP) ;FNAME) CALLS #1, (R9) ;#1, STR$FREE1_DX PUSHAB 16(SP) ;FTYPE) CALLS #1, (R9) ;#1,TMP.BCK`#[PCX]MISC.MAR;4nS, STR$FREE1_DX" MOVL R2, R0 ;STATUS, R0 RET ;;; Routine Size: 364 bytes, Routine Base: $CODE$ + 004C .PSECT $PLIT$,NOWRT,NOEXE,2P.AAV: .ASCII \???\<0> ;P.AAU: .LONG 17694723 ; .ADDRESS P.AAV ;P.AAX: .ASCII \Jan\<0> ;P.AAW: .LONG 17694723 ; .ADDRESS P.AAX ;P.AAZ: .ASCII \Feb\<0> ;P.AAY: .LONG 17694723 ; .ADDRESS P.AAZ ;P.ABB: .ASCII \Mar\<0> ;P.ABA: .LONG 17694723 ; .ADDRESS P.ABB ;P.ABD: .ASCII \Apr\<0> ;P.ABC: .LONG 17694723 ; .ADDRESS P.ABD ;P.ABF: .ASCII \May\<0> ;P.ABE: .LONG 17694723 ; .ADDRESS P.ABF ;P.ABH: .ASCII \Jun\<0> ;P.ABG: .LONG 17694723 ; .ADDRESS P.ABH ;P.ABJ: .ASCII \Jul\<0> ;P.ABI: .LONG 17694723 ; .ADDRESS P.ABJ ;P.ABL: .ASCII \Aug\<0> ;P.ABK: .LONG 17694723 ; .ADDRESS P.ABL ;P.ABN: .ASCII \Sep\<0> ;P.ABM: .LONG 17694723 ; .ADDRESS P.ABN ;P.ABP: .ASCII \Oct\<0> ;P.ABO: .LONG 17694723 ; .ADDRESS P.ABP ;P.ABR: .ASCII \Nov\<0> ;P.ABQ: .LONG 17694723 ; .ADDRESS P.ABR ;P.ABT: .ASCII \Dec\<0> ;P.ABS: .LONG 17694723 ; .ADDRESS P.ABT ;;MONTHgU.5: .ADDRESS P.AAU, P.AAW, P.AAY, P.ABA, P.ABC, P.ABE, P.ABG, P.ABI, P.ABK, P.ABM, P.ABO, P.ABQ, P.ABS ;3P.ABV:TMP.BCK`#[PCX]MISC.MAR;4n .ASCII \!2ZL-!AS-!4ZL !2ZL:!2ZL:!2ZL\ ;P.ABU: .LONG 17694748 ; .ADDRESS P.ABV ; .PSECT $CODE$,NOWRT,2U.3:F .ENTRY FORMAT_MSDOS_DATE, ^M<> ;FORMAT_MSDOS_DATE, Save nothing/ EXTZV #0, #5, 4(AP), R0 ;#0, #5, DT, R0+ ASHL #1, R0, -(SP) ;#1, R0, -(SP)5 EXTZV #5, #6, 4(AP), -(SP) ;#5, #6, DT, -(SP)7 EXTZV #3, #5, 5(AP), -(SP) ;#3, #5, DT+1, -(SP)7 EXTZV #1, #7, 7(AP), -(SP) ;#1, #7, DT+3, -(SP)' ADDL2 #1980, (SP) ;#1980, (SP)1 EXTZV #5, #4, 6(AP), R0 ;#5, #4, DT+2, R0! PUSHL W^U.5[R0] ;U.5[R0]7 EXTZV #0, #5, 6(AP), -(SP) ;#0, #5, DT+2, -(SP) PUSHL 8(AP) ;STR_A CLRL -(SP) ;-(SP) PUSHAB W^P.ABU ;P.ABU0 CALLS #9, G^LIB$SYS_FAO ;#9, LIB$SYS_FAO RET ;:; Routine Size: 71 bytes, Routine Base: $CODE$ + 01B8 .PSECT $PLIT$,NOWRT,NOEXE,2P.ABX: .ASCII \YES\<0> ;P.ABW: .LONG 17694723 ; .ADDRESS P.ABX ;!P.ABZ: .ASCII \YE\<0><0> ;P.ABY: .LONG 17694722 ; .ADDRESS P.ABZ ;#P.ACB: .ASCII \Y\<0><0><0> ;P.ACA: .LONG 17694721 ; .ADDRESS P.ACB ;!P.ACD: .ASCII \OK\<0><0> ;P.ACC: .LONG 17694722 ; .ADDRESS P.ACD ;!P.ACF: .ASCII \NO\<0><0> ;P.ACE: .LONG 17694722 ; .ADDRESS P.ACF ;#P.ACH: .ASCII \N\<0><0><0> ;P.ACG: .LONG 17694721 ; .ADDRESS P.ACH ;;ANSWER9U.7:TMP.BCK`#[PCX]MISC.MAR;4nj_ .ADDRESS P.ABW, P.ABY, P.ACA, P.ACC, P.ACE, P.ACG ;!P.ACJ: .ASCII \ [\<0><0> ;P.ACI: .LONG 17694722 ; .ADDRESS P.ACJ ;P.ACL: .ASCII \Yes\<0> ;P.ACK: .LONG 17694723 ; .ADDRESS P.ACL ;!P.ACN: .ASCII \No\<0><0> ;P.ACM: .LONG 17694722 ; .ADDRESS P.ACN ;P.ACP: .ASCII \]: \<0> ;P.ACO: .LONG 17694723 ; .ADDRESS P.ACP ; .PSECT $CODE$,NOWRT,2F .ENTRY YES_ANSWER, ^M ;YES_ANSWER, Save R2,R3,R4,R5% MOVAB W^P.ACO, R5 ;P.ACO, R52 MOVAB G^STR$FREE1_DX, R4 ;STR$FREE1_DX, R4 SUBL2 #28, SP ;#28, SP/ MOVL #34471936, 20(SP) ;#34471936, STR CLRL 24(SP) ;STR+40 MOVL #34471936, 12(SP) ;#34471936, STR2 CLRL 16(SP) ;STR2+4/ MOVL #34471936, 4(SP) ;#34471936, STR3 CLRL 8(SP) ;STR3+4 PUSHL R5 ;R5$ BLBC 8(AP), 1$ ;DEFANS, 1$% MOVAB -24(R5), R0 ;P.ACK, R0 BRB 2$ ;2$(1$: MOVAB -12(R5), R0 ;P.ACM, R02$: PUSHL R0 ;R0 PUSHAB -36(R5) ;P.ACI PUSHL 4(AP) ;PROMPT_A PUSHAB 36(SP) ;STR. CALLS #5, G^STR$CONCAT ;#5, STR$CONCAT3$: PUSHAB 20(SP) ;STR PUSHAB 16(SP) ;STR24 CALLS #2, G^LIB$GET_INPUT ;#2, LIB$GET_INPUT TSTW 12(SP) ;STR2 BNEQ 4$ ;4$ PUSHAB 20(SP) ;STR) CALLS #1, (R4) ;#1, STR$FREE1_DX PUSHAB 12(SP) ;STR2) CALLS TMP.BCK`#[PCX]MISC.MAR;4nS #1, (R4) ;#1, STR$FREE1_DX PUSHAB 4(SP) ;STR3) CALLS #1, (R4) ;#1, STR$FREE1_DX$ MOVL 8(AP), R0 ;DEFANS, R0 RET ;4$: PUSHAB 12(SP) ;STR2 PUSHAB 16(SP) ;STR2+ CALLS #2, G^STR$TRIM ;#2, STR$TRIM6 SKPC #32, 12(SP), @16(SP) ;#32, STR2, @STR2+4 BNEQ 5$ ;5$ CLRL R1 ;R1!5$: MOVL R1, R3 ;R1, CP BEQL 6$ ;6$ PUSHL R3 ;CP- SUBL3 R3, 20(SP), R0 ;CP, STR2+4, R0# MOVZWL 16(SP), R1 ;STR2, R1+ ADDL3 R1, R0, 4(SP) ;R1, R0, 4(SP) PUSHAB 4(SP) ;4(SP) PUSHAB 12(SP) ;STR3. CALLS #3, G^STR$COPY_R ;#3, STR$COPY_R6$: CLRL R2 ;I7$: PUSHAB 4(SP) ;STR3% PUSHL -64(R5)[R2] ;ANSWER[I]E CALLS #2, G^STR$CASE_BLIND_COMPARE ;#2, STR$CASE_BLIND_COMPARE TSTL R0 ;R0 BNEQ 8$ ;8$ PUSHAB 20(SP) ;STR) CALLS #1, (R4) ;#1, STR$FREE1_DX PUSHAB 12(SP) ;STR2) CALLS #1, (R4) ;#1, STR$FREE1_DX PUSHAB 4(SP) ;STR3) CALLS #1, (R4) ;#1, STR$FREE1_DX CLRL R0 ;R0 CMPL R2, #4 ;I, #4 BGEQ 9$ ;9$ INCL R0 ;R0 RET ;'8$: AOBLEQ #5, R2, 7$ ;#5, I, 7$ CLRL -(SP) ;-(SP)% PUSHL #PCX__YORN ;#PCX__YORN. CALLS #2, G^LIB$SIGNAL ;#2, LIB$SIGNAL BRW 3$ ;3$9$: RET ;;; Routine Size: 253 bytes, Routine Base: $CODE$ + 0TMP.BCK`#[PCX]MISC.MAR;4n!1FF .EXTRN LIB$SIGNAL; PSECT SUMMARY;#; Name Bytes Attributes;U; $CODE$ 764 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $PLIT$ 576 NOVEC,NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2); Library Statistics;9; -------- Symbols -------- Pages Processing9; File Total Loaded Percent Mapped Time;]; SYS$COMMON:[SYSLIB]STARLET.L32;1 14000 11 0 813 00:00.4U; MDM_SRC:[PCX]PCX.L32;11 77 33 42 13 00:00.0; COMMAND QUALIFIERSe; BLISS/LIST=MISC.MAR/NOOBJ/MACHINE=(OBJ,NOBIN,ASSEM,UNIQUE,NOCOMM)/SOURCE=(NOHEAD,NOSOURCE) MISC.B32; Compilation Complete .ENDTMP.BCK#[PCX]PCX.R32;13N *[PCX]PCX.R32;13+,. / 4N 4-#0123KPWO 56p7q89`\=GHJ!++ ! PCX.R32!&! General declarations for PCX things.!! REVISION HISTORY:!0! 11-JUL-1990 V1.0 Madison Initial coding.4! 01-AUG-1990 V1.1 Madison Fix BSEC structure.!-- LIBRARY 'FIELDS'; BUILTIN INSQUE, REMQUE; _DEF (QUE) QUE_L_HEAD = _LONG, QUE_L_TAIL = _LONG _ENDDEF (QUE); LITERAL PTH_S_NAME = 8; _DEF (PTH) PTH_L_FLINK = _LONG, PTH_L_BLINK = _LONG, PTH_W_LEN = _LONG,& PTH_T_NAME = _BYTES (PTH_S_NAME) _ENDDEF (PTH); LITERAL DIR_S_FNAME = 8, DIR_S_FTYPE = 3, DIR_S_RESERVED = 10; _DEF (DIR)) DIR_T_FNAME = _BYTES (DIR_S_FNAME),) DIR_T_FTYPE = _BYTES (DIR_S_FTYPE), DIR_B_FLAGS = _BYTE, _OVERLAY (DIR_B_FLAGS) DIR_V_READONLY = _BIT, DIR_V_HIDDEN = _BIT, DIR_V_SYSTEM = _BIT, DIR_V_VOLLABEL = _BIT, DIR_V_DIRECTORY = _BIT, DIR_V_ARCHIVE = _BIT, _ENDOVERLAY. DIR_X_RESERVED = _BYTES (DIR_S_RESERVED), DIR_L_DATETIME = _LONG, _OVERLAY (DIR_L_DATETIME) DIR_W_TIME = _WORD, DIR_W_DATE = _WORD, _ENDOVERLAY _OVERLAY (DIR_L_DATETIME)% DIR_V_TWOSEC = _BITS (5),% DIR_V_MINUTES = _BITS (6),% DIR_V_HOURS = _BITS (5),# DIR_V_DAY = _BITS (5),% DIR_V_MONTH = _BITS (4),4 DIR_V_YEAR = _BITS (7), ! epoch = 1980 _ENDOVERLAY DTMP.BCK#[PCX]PCX.R32;13N t%IR_W_CLUSTER = _WORD, DIR_L_FSIZE = _LONG _ENDDEF (DIR); _DEF (BSEC)> BSEC_X_JMP = _BYTES (3), ! JMP instruction to boot code= BSEC_T_IDENT = _BYTES (8), ! identification of formatter- BSEC_W_BPS = _WORD, ! bytes/sector0 BSEC_B_SPC = _BYTE, ! sectors/cluster- BSEC_W_BOOTS = _WORD, ! boot sectors+ BSEC_B_FATCNT = _BYTE, ! FAT count7 BSEC_W_RDE = _WORD, ! root directory entriesE BSEC_W_SECCNT = _WORD, ! total number of sectors on diskette+ BSEC_B_MEDIA = _BYTE, ! media type0 BSEC_W_SPF = _WORD, ! sectors per FAT2 BSEC_W_SPT = _WORD, ! sectors per track0 BSEC_W_HDS = _WORD, ! number of heads9 BSEC_W_SHH = _WORD, ! number of hidden sectors) BSEC_L_UNKLONG1 = _LONG, ! mbz ?) BSEC_L_UNKLONG2 = _LONG, ! mbz ?) BSEC_B_UNK29 = _BYTE, ! hex 29 ?6 BSEC_L_SERNUM = _LONG, ! volume serial number/ BSEC_T_LABEL = _BYTES (11), ! volume label7 BSEC_T_FMTYPE = _BYTES (8), ! format type name (?)! BSEC_X_BCODE = _BYTES (448),3 BSEC_W_BSECID = _WORD ! boot sector ident _ENDDEF (BSEC);!++! Useful macros!-- MACRO INIT_DYNDESC (STR) [] = BEGIN __INIT_DYNDESC1 (STR@ %IF NOT %NULL (%REMAINING) %THEN , %REMAINING %FI) END%, __INIT_DYNDESC1 (STR) [] =; BLOCK [STR, DSC$W_LENGTH; DSC$K_S_BLN,BYTE] = 0;G BLOCK [STR, DSC$BTMP.BCK#[PCX]PCX.R32;13N _CLASS; DSC$K_S_BLN,BYTE] = DSC$K_CLASS_D;G BLOCK [STR, DSC$B_DTYPE; DSC$K_S_BLN,BYTE] = DSC$K_DTYPE_T;; BLOCK [STR, DSC$A_POINTER; DSC$K_S_BLN,BYTE] = 0;N %IF NOT %NULL (%REMAINING) %THEN ; __INIT_DYNDESC1 (%REMAINING) %FI%, FREE_STRINGS (STR) [] = BEGINJ EXTERNAL ROUTINE STR$FREE1_DX : BLISS ADDRESSING_MODE (GENERAL); __FREE_STRING1 (STR@ %IF NOT %NULL (%REMAINING) %THEN , %REMAINING %FI) END%, __FREE_STRING1 (STR) [] = STR$FREE1_DX (STR);M %IF NOT %NULL (%REMAINING) %THEN ; __FREE_STRING1 (%REMAINING) %FI%, GETPTH (PTH) = BEGIN- BIND __GETPTH_T = PTH : REF PTHDEF;I EXTERNAL ROUTINE LIB$FREE_VM : BLISS ADDRESSING_MODE (GENERAL);7 LIB$GET_VM (%REF (PTH_S_PTHDEF), __GETPTH_T); END%, FREEPTH (PTH) = BEGIN. BIND __FREEPTH_T = PTH : REF PTHDEF;I EXTERNAL ROUTINE LIB$FREE_VM : BLISS ADDRESSING_MODE (GENERAL);9 LIB$FREE_VM (%REF (PTH_S_PTHDEF), __FREEPTH_T); END%, G_HAT (RTN) [] =. RTN : BLISS ADDRESSING_MODE (GENERAL)D %IF NOT %NULL (%REMAINING) %THEN , G_HAT (%REMAINING) %FI%, TRACE (CTRSTR) [] = BEGIN IF .DEBUG THEN BEGIN EXTERNAL ROUTINE MDM_WRITEF,2 LIB$SYS_FAO : ADDRESSING_MODE (GENERAL),3 STR$FREE1_DX : ADDRESSING_MODE (GENERAL);) %IF NOT %NULL (%REMAINING) %TTMP.BCK#[PCX]PCX.R32;13N e HEN3 LOCAL _TRCFAO : BLOCK [DSC$K_S_BLN,BYTE];" $INIT_DYNDESC (_TRCFAO);> LIB$SYS_FAO (%ASCID CTRSTR, 0, _TRCFAO, %REMAINING);, MDM_WRITEF (.TRACE_UNIT, _TRCFAO);! STR$FREE1_DX (_TRCFAO); %ELSE2 MDM_WRITEF (.TRACE_UNIT, %ASCID CTRSTR); %FI END; END%, INIT_QUEUE (X) [] = BEGIN BIND Q = X : QUEDEF;; Q [QUE_L_TAIL] = Q [QUE_L_HEAD] = Q [QUE_L_HEAD]; ENDG %IF NOT %NULL (%REMAINING) %THEN ; INIT_QUEUE (%REMAINING) %FI %, TABLE (TABNAM, ITEM1) [] =/ %IF %LENGTH EQL 1 %THEN %EXITMACRO %FI8 LITERAL %NAME (TABNAM, '_COUNT') = %LENGTH - 1; PSECT OWN = $PLIT$;F OWN TABNAM : VECTOR [%NAME (TABNAM, '_COUNT'),LONG] INITIAL ( %ASCID ITEM1E %IF NOT %NULL (%REMAINING) %THEN FILLTAB (%REMAINING) %FI); PSECT OWN = $OWN$; %, FILLTAB (X) [] =M , %ASCID X %IF NOT %NULL (%REMAINING) %THEN FILLTAB (%REMAINING) %FI %;TMP.BCK9H#[PCX]FIELDS.R32;12G *[PCX]FIELDS.R32;12+,9H. / 4G 4-#0123KPWO56E -76-89?GHJTMP.BCK9H#[PCX]FIELDS.R32;12G |g COMPILETIME _FLD_CUR_BYT = 0, _FLD_CUR_BIT = 0, _FLD_SAV_BYT = 0, _FLD_SAV_BIT = 0, _FLD_WRK_SIZE = 0, _FLD_WRK_BITS = 0, _FLD_FLD_COUNT = 0;MACRO _DEF (NAM) = %ASSIGN (_FLD_CUR_BYT, 0) %ASSIGN (_FLD_CUR_BIT, 0) %ASSIGN (_FLD_FLD_COUNT, 0) FIELD* %QUOTENAME (NAM, '_FIELDS') = SET %, _ENDDEF (NAM) = TES;! %IF _FLD_CUR_BIT GTR 0 %THEN1 %ASSIGN (_FLD_CUR_BYT, _FLD_CUR_BYT + 1) %FI; LITERAL %NAME (NAM, '_S_', NAM, 'DEF') = _FLD_CUR_BYT;/ %MESSAGE ('Structure ', NAM, 'DEF size: ',4 %SIZE (BLOCK[_FLD_CUR_BYT,BYTE]), ' bytes')- %PRINT ('Structure ', NAM, 'DEF size: ',4 %SIZE (BLOCK[_FLD_CUR_BYT,BYTE]), ' bytes') MACRO %NAME (NAM, 'DEF') =5 BLOCK [%NAME (NAM, '_S_', NAM, 'DEF'), BYTE]0 FIELD (%NAME (NAM, '_FIELDS')) %QUOTE % %, _FIELD (SIZ) =/ %ASSIGN (_FLD_FLD_COUNT, _FLD_FLD_COUNT+1)B %ASSIGN (_FLD_WRK_BITS, %IF SIZ GTR 32 %THEN 0 %ELSE SIZ %FI)0 [_FLD_CUR_BYT,_FLD_CUR_BIT,_FLD_WRK_BITS,0]C %ASSIGN (_FLD_WRK_BITS, _FLD_CUR_BYT * 8 + _FLD_CUR_BIT + SIZ). %ASSIGN (_FLD_CUR_BYT, _FLD_WRK_BITS / 8)0 %ASSIGN (_FLD_CUR_BIT, _FLD_WRK_BITS MOD 8) %, _BYTE =  _ALIGN (BYTE) _FIELD (8) %, _BYTES (COUNT) = _ALIGN (BYTE) _FIELD (COUNT * 8) %, _WORD = _ALIGN (BYTE) _FIELD (16) %, _LONG = _ALIGTMP.BCK9H#[PCX]FIELDS.R32;12G kN (BYTE) _FIELD (32) %, _QUAD = _ALIGN (BYTE) _FIELD (64) %, _BIT = _FIELD (1) %, _BITS (N) = _FIELD (N) %, _OVERLAY (NAM) =) %ASSIGN (_FLD_SAV_BYT, _FLD_CUR_BYT)) %ASSIGN (_FLD_SAV_BIT, _FLD_CUR_BIT)2 %ASSIGN (_FLD_CUR_BYT, %FIELDEXPAND (NAM, 0))2 %ASSIGN (_FLD_CUR_BIT, %FIELDEXPAND (NAM, 1)) %, _ENDOVERLAY =) %ASSIGN (_FLD_CUR_BYT, _FLD_SAV_BYT)) %ASSIGN (_FLD_CUR_BIT, _FLD_SAV_BIT) %, _ALIGN (ATYPE) = %ASSIGN (_FLD_WRK_BITS, 0) %ASSIGN (_FLD_WRK_SIZE,- %IF %IDENTICAL (ATYPE, BYTE) %THEN 13 %ELSE %IF %IDENTICAL (ATYPE, WORD) %THEN 23 %ELSE %IF %IDENTICAL (ATYPE, LONG) %THEN 43 %ELSE %IF %IDENTICAL (ATYPE, QUAD) %THEN 8% %ELSE ATYPE %FI %FI %FI %FI)! %IF _FLD_CUR_BIT NEQ 0 %THEN2 %ASSIGN (_FLD_WRK_BITS, 8 - _FLD_CUR_BIT)9 %IF _FLD_CUR_BYT+1 MOD _FLD_WRK_SIZE NEQ 0 %THEN1 %ASSIGN (_FLD_WRK_BITS, _FLD_WRK_BITS +G (_FLD_WRK_SIZE - (_FLD_CUR_BYT+1) MOD _FLD_WRK_SIZE) * 8) %FI %ELSE7 %IF _FLD_CUR_BYT MOD _FLD_WRK_SIZE NEQ 0 %THEN! %ASSIGN (_FLD_WRK_BITS,C (_FLD_WRK_SIZE - _FLD_CUR_BYT MOD _FLD_WRK_SIZE) * 8) %FI %FI" %IF _FLD_WRK_BITS GTR 0 %THEN %ASSIGN (_FLD_WRK_BITS,: _FLD_CUR_BYT * 8 + _FLD_CUR_BIT + _FLD_WRK_BITS)2 %ASSIGN (_FLD_CUR_BYT, _FLD_WRK_BITS / 8)"TMP.BCK9H#[PCX]FIELDS.R32;12G 7 %ASSIGN (_FLD_CUR_BIT, 0) %FI %;TMP.BCK#[PCX]BBLOCK.R32;6>*[PCX]BBLOCK.R32;6+,./ 4>V-#0123KPWO56v6I7[I89?GHJ!++ ! BBLOCK.R32!>! REQUIRE file defining the code to go into the boot block of! a formatted diskette.!!--OWN. BBIMAGE : VECTOR [112,LONG] PSECT ($PLIT$) INITIAL (%X'33FA2020',9 %X'BCD08EC0',%X'07167C00',%X'360078BB',%X'561E37C5',9 %X'3EBF5316',%X'000BB97C',%X'06A4F3FC',%X'FE45C61F',9 %X'180E8B0F',%X'F94D887C',%X'C7024789',%X'FB7C3E07',9 %X'7C7213CD',%X'0639C033',%X'08747C13',%X'7C130E8B',9 %X'7C200E89',%X'F77C10A0',%X'037C1626',%X'137C1C06',9 %X'037C1E16',%X'837C0E06',%X'50A300D2',%X'5216897C',9 %X'7C49A37C',%X'7C4B1689',%X'F70020B8',%X'8B7C1126',9 %X'037C0B1E',%X'F3F748C3',%X'7C490601',%X'7C4B1683',9 %X'0500BB00',%X'7C52168B',%X'E87C50A1',%X'20720087',9 %X'A1E801B0',%X'8B197200',%X'000BB9FB',%X'F37DDBBE',9 %X'8D0D75A6',%X'E6BE207F',%X'000BB97D',%X'1874A6F3',9 %X'E87D93BE',%X'E4320051',%X'1F5E16CD',%X'448F048F',9 %X'5819CD02',%X'E8EB5858',%X'B90700BB',%X'49A10003',9 %X'4B168B7C',%X'5152507C',%X'72003AE8',%X'E801B0E6',9 %X'5A590054',%X'05C97258',%X'D2830001',%X'0B1E0300',9 %X'8AE2E27C',%X'8A7C152E',%X'8B7C2416',%X'A17C491E',9 %X'00EA7C4B',%X'AC007000',%X'2974C00A',%X'07BB0EB4',9 %X'EB10CD00',%X'18163BF2',%X'F719737C',%X'FE7C1836',9 %X'4F1688C2',%X'F7D2337C',%X'887C1A36',%X'A37C2516',9 %X'C3F87C4D',%X'02B4C3F9',%X'7C4D168B',%X'E6D206B1',9 %X'7C4F360A',%X'E986CA8B',%X'7C24168A',%X'7C25368A',9 %X'0DC313CD',%X'6E6F4E0A',%X'7379532D',%X'206D6574',9 TMP.BCK#[PCX]BBLOCK.R32;6>6U %X'6B736964',%X'20726F20',%X'6B736964',%X'72726520',9 %X'0A0D726F',%X'6C706552',%X'20656361',%X'20646E61',9 %X'73657270',%X'6E612073',%X'656B2079',%X'68772079',9 %X'72206E65',%X'79646165',%X'49000A0D',%X'49424D42',9 %X'4320204F',%X'42494D4F',%X'534F444D',%X'4F432020',- %X'0000004D',%X'00000000',%X'00000000');TMP.BCK#[PCX]ASMBUILD.COM;28*[PCX]ASMBUILD.COM;2+,./ 48-#0123KPWO56_7P_89?GHJ2$ MACRO PCX,PCX_CMDIO,ACCESS,FILEIO,PCX_PARSE,MISC$ MESSAGE PCX_MSG$ SET COMMAND/OBJECT PCX_CLD $ SET COMMAND/OBJECT PCX_CMD_CLD8$ LIB/CREATE PCX PCX,PCX_CMDIO,ACCESS,FILEIO,PCX_PARSE,-$ MISC,PCX_MSG,PCX_CLD,PCX_CMD_CLD&$ LINK/NOTRACE PCX.OLB/LIB/INCLUDE=PCX$ EXITTMP.BCK"#[PCX]DESCRIP.MMS;34QdK*[PCX]DESCRIP.MMS;34+,"./ 4Qp-#0123KPWO56rOm7tm89GHJTMP.BCK"#[PCX]DESCRIP.MMS;34Q .SUFFIXESQ.SUFFIXES : .EXE .OLB .HLB .HLP .MAR .OBJ .B32 .L32 .R32 .TXT .PS .SDML .MSG .CLD .B32.MAR :K BLISS/LIST=$(MMS$TARGET)/NOOBJ/MACHINE=(OBJ,NOBIN,ASSEM,UNIQUE,NOCOMM)-'/SOURCE=(NOHEAD,NOSOURCE) $(MMS$SOURCE)9LINKFLAGS = /EXEC=$(MMS$TARGET)/NOMAP$(MAP)/NOTRACE$(DBG)PBFLAGS = /OBJ=$(MMS$TARGET)/TERM=STAT/MACH=NOOBJ/NOLIST$(LIS)$(DBG)/VAR="$(VAR)"JPCX_MODULES = PCX,PCX_CMDIO,PCX_CLD,PCX_CMD_CLD,PCX_MSG,ACCESS,PCX_PARSE,- FILEIO,MISC,CMD_RDWR!PCX.EXE : PCX.OLB($(PCX_MODULES))( LINK$(LINKFLAGS) PCX/INCLUDE=PCX/LIB0ALL : PCX.EXE,PCX_HELPLIB.HLB(HELP=PCX_HELP.HLP) @ !KIT : PCX.BCK_Z,PCX_SRC.BCK_Z @ !!PCX.OBJ,PCX.MAR : PCX.B32,PCX.L320CMD_RDWR.OBJ,CMD_RDWR.MAR : CMD_RDWR.B32,PCX.L32>PCX_CMDIO.OBJ,PCX_CMDIO.MAR : PCX_CMDIO.B32,PCX.L32,FIELDS.L32@ACCESS.OBJ,ACCESS.MAR : ACCESS.B32,PCX.L32,FIELDS.L32,BBLOCK.R323PCX_PARSE.OBJ,PCX_PARSE.MAR : PCX_PARSE.B32,PCX.L325FILEIO.OBJ,FILEIO.MAR : FILEIO.B32,PCX.L32,FIELDS.L32PCX.L32 : FIELDS.L32PCX_HELP.HLP : PCX_HELP.RNH- RUNOFF/OUTPUT=$(MMS$TARGET) $(MMS$SOURCE)>PCX.BCK_Z : 00README.TXT,AAAREADME.TOO,PCX_HELPLIB.HLB,PCX.OLB LIB/COMPRESS PCX.OLB LIB/COMPRESS PCX_HELPLIB.HLB PURGE $(MMS$SOURCE_LIST)K BACKUP $(MMS$SOURCE_LIST) TMP.BCK/SAVE/BLOCK=2048/INTERCH/NOCRC/GROUP=0 LZCOMP:==$RPI$SYSTEM:LZCOMP LZCOMP TMP.BCK $(MMS$TARGET) DELETE TMP.BCK;*HPCX_SRC.BCK_Z : PCX.B32,PCX.MAR,PCX_CMDIO.B32,PCX_CMDIO.MAR,ACCESS.B32,-C ACCESS.MAR,PCX_PARSE.B32,PCX_PARSE.TMP.BCK"#[PCX]DESCRIP.MMS;34Q]8MAR,FILEIO.B32,FILEIO.MAR,-C MISC.B32,MISC.MAR,PCX.R32,FIELDS.R32,BBLOCK.R32,ASMBUILD.COM,-E DESCRIP.MMS,PCX_CLD.CLD,PCX_CMD_CLD.CLD,PCX_MSG.MSG,PCX_HELP.RNH PURGE $(MMS$SOURCE_LIST)K BACKUP $(MMS$SOURCE_LIST) TMP.BCK/SAVE/BLOCK=2048/INTERCH/NOCRC/GROUP=0 LZCOMP:==$RPI$SYSTEM:LZCOMP LZCOMP TMP.BCK $(MMS$TARGET) DELETE TMP.BCK;*TMP.BCK#[PCX]PCX_CLD.CLD;19@ů*[PCX]PCX_CLD.CLD;19+,./ 4@-#0123KPWO56k7@k89GHJTMP.BCK#[PCX]PCX_CLD.CLD;19@X6!+! TITLE: PCX_CLD!! FACILITY: PC Exchange!2! ABSTRACT: Command language definitions for PCX.!! AUTHOR: M. Madison?! COPYRIGHT 1990 RENSSELAER POLYTECHNIC INSTITUTE.! ALL RIGHTS RESERVED.!! MODIFICATION HISTORY:!0! 11-JUL-1990 V1.0 Madison Initial coding.!-MODULE PCX_CLD IDENT "V1.0"DEFINE VERB EXIT ROUTINE CMD_EXITDEFINE VERB HELP ROUTINE CMD_HELP@ PARAMETER P1, LABEL=HELP_REQUEST, VALUE (TYPE=$REST_OF_LINE) NOQUALIFIERSDEFINE VERB SHOW ROUTINE CMD_SHOW@ PARAMETER P1, LABEL=SHOWOPT, VALUE (TYPE=SHOKWDS, REQUIRED), PROMPT="SHOW option"@ QUALIFIER OUTPUT, VALUE (TYPE=$FILE, REQUIRED), NONNEGATABLEDEFINE TYPE SHOKWDS KEYWORD PATHDEFINE VERB DIRECTORY ROUTINE CMD_DIRECTORY3 PARAMETER P1, LABEL=PATH, VALUE (DEFAULT="*.*")? QUALIFIER OUTPUT, VALUE (TYPE=$FILE,REQUIRED), NONNEGATABLEDEFINE VERB SET ROUTINE CMD_SET? PARAMETER P1, LABEL=SETOPT, VALUE (TYPE=SETKWDS, REQUIRED), PROMPT="SET option" NOQUALIFIERSDEFINE TYPE SETKWDS KEYWORD PATH, SYNTAX=SETPATHDEFINE SYNTAX SETPATH ROUTINE CMD_SET? PARAMETER P1, LABEL=SETOPT, VALUE (TYPE=SETKWDS, REQUIRED), PROMPT="SET option". PARAMETER P2, LABEL=PATH, VALUE (REQUIRED) NOQUALIFIERSDEFINE VERB READ ROUTINE CMD_READ. PARAMETER P1, LABEL=PATH, VALUE (REQUIRED)> PARAMETER P2, LABEL=FILE, VALUE (TYPE=$FILE,DEFAULT="*.*")" QUALIFIER BINARYTMP.BCK#[PCX]PCX_CLD.CLD;19@, NONNEGATABLE QUALIFIER LOGDEFINE VERB WRITE ROUTINE CMD_WRITE9 PARAMETER P1, LABEL=FILE, VALUE (TYPE=$FILE,REQUIRED)2 PARAMETER P2, LABEL=PATH, VALUE(DEFAULT="*.*")" QUALIFIER BINARY, NONNEGATABLE QUALIFIER LOGDEFINE VERB TYPE ROUTINE CMD_READ. PARAMETER P1, LABEL=PATH, VALUE (REQUIRED) NOQUALIFIERSDEFINE VERB DELETE SYNONYM ERASE ROUTINE CMD_DELETE. PARAMETER P1, LABEL=PATH, VALUE (REQUIRED) QUALIFIER CONFIRM QUALIFIER LOGDEFINE VERB FORMAT ROUTINE CMD_FORMAT NOPARAMETERS3 QUALIFIER LABEL, VALUE (REQUIRED), NONNEGATABLE QUALIFIER CONFIRM, NEGATABLEDEFINE VERB MAKEDIR SYNONYM MKDIR ROUTINE CMD_CREDIR. PARAMETER P1, LABEL=PATH, VALUE (REQUIRED) NOQUALIFIERSDEFINE VERB CREATE4 QUALIFIER DIRECTORY, NONNEGATABLE, SYNTAX=CREDIR NOPARAMETERSDEFINE SYNTAX CREDIR ROUTINE CMD_CREDIR. PARAMETER P1, LABEL=PATH, VALUE (REQUIRED) NOQUALIFIERSDEFINE VERB SPAWN ROUTINE CMD_SPAWN7 PARAMETER P1, LABEL=CMD, VALUE (TYPE=$REST_OF_LINE)? QUALIFIER INPUT, NONNEGATABLE, VALUE (REQUIRED, TYPE=$FILE)& QUALIFIER LOGICAL_NAMES, NEGATABLE@ QUALIFIER OUTPUT, NONNEGATABLE, VALUE (REQUIRED, TYPE=$FILE)7 QUALIFIER PROCESS, NONNEGATABLE, VALUE (DEFAULT="") QUALIFIER SYMBOLS, NEGATABLE QUALIFIER WAIT, NEGATABLEDEFINE VERB ATTACH ROUTINE CMD_ATTACH PARAMETER P1, LABEL=PRCNAM" QUALIFIER PARENT, NONNEGATABLETMP.BCK#[PCX]PCX_CMD_CLD.CLD;2?B*[PCX]PCX_CMD_CLD.CLD;2+,./ 4?-#0123KPWO56 E7@P489GHJ!+! TITLE: PCX_CMD_CLD!! FACILITY: PCX!1! ABSTRACT: Command language definition for PCX.!! AUTHOR: M. Madison?! COPYRIGHT 1990 RENSSELAER POLYTECHNIC INSTITUTE.! ALL RIGHTS RESERVED.!! MODIFICATION HISTORY:!0! 12-JUL-1990 V1.0 Madison Initial coding.!-MODULE PCX_CMD_CLD IDENT "V1.0"DEFINE VERB PCX7 PARAMETER P1, LABEL=CMD, VALUE (TYPE=$REST_OF_LINE)TMP.BCK#[PCX]PCX_MSG.MSG;22R*[PCX]PCX_MSG.MSG;22+,./ 4R-#0123KPWO56h7h89GHJTMP.BCK#[PCX]PCX_MSG.MSG;22R%A.TITLE PCX_MSG!.FACILITY PCX,1144/PREFIX=PCX__.IDENT "V1.0"!+! DESCRIPTION:!?! This module contains message codes used by the PCX utility.! ! AUTHOR:!! M. MadisonL! COPYRIGHT 1989 RENSSELAER POLYTECHNIC INSTITUTE. ALL RIGHTS RESERVED.!! UPDATE HISTORY:!0! 17-JUL-1990 V1.0 Madison Initial coding.!-.SEVERITY ERRORRUNKGEOM /FAO=3%FSYNERR DIR NOTFOUND READERR WRITERR DISKFULL .EXISTS "NOTEMPTY &FMTPLS .SEVERITY WARNING3NOOPNOUT /FAO=1'CANTIND +CMDERR $NOWRITE (SPAWNERR 5SUBPERR (ATTERR +CREERR /FAO=29PARSERR /FAO=1-NOMATCH +OPENERR /FAO=2+DELERR /FAO=1.SEVERITY INFORMATIONFDBLDENSITY KHIDENSITY (FMTCAN 8SPAWNED /FAO=2#YORN .SEVERITY FATAL2INVDEV CMNTFOR .SEVERITY SUCCESS(READ /FAO=3+WRITTEN /FAO=3%DELETED /FAO=1.ENDTMP.BCK&<#[PCX]PCX_HELP.RNH;3I*[PCX]PCX_HELP.RNH;3+,&<./ 4I-#0123KPWO56c7zd89GHJTMP.BCK&<#[PCX]PCX_HELP.RNH;3I8!++!! NAME: PCX_HELP.RNH!! ABSTRACT: PCX help file.!! FACILITY: PCX!! DESCRIPTION:!;! This is the RUNOFF source for the help library for PCX.;! To create the help library, use the following commands:!! $ RUNOFF PCX_HELP.RNH+! $ LIB/CREATE/HELP PCX_HELPLIB PCX_HELP!! MODIFICATION HISTORY:!1! 25-JUL-1990 V1.0 Madison Initial coding.I! 03-AUG-1990 V1.1 Madison Updated info on wildcards in commnands.!--.P0.AP.LM1.RM70.I-11 ATTACHE Permits you to switch control of your terminal from your current'process to another process in your job.E The ATTACH command allows you to move quickly between processes thatDyou have created with the SPAWN command. For example, while you areDediting a file, you can SPAWN a subprocess (MAIL) to read a new mail>message. Enter the ATTACH command to get back to back to theDediting session. If you want to read another new mail message, youCcan use the ATTACH command to get back to the MAIL subprocess youalready created..NJ Format:%.I+10;ATTACH [/PARENT] [process-name].J .I-1 2 Parameter process-nameE Indicates the name of the subprocess to which the connection is toGbe made. Only the /PARENT qualifier or a process-name may be specified..I-1 2 Qualifier.I-1/PARENT /PARENT7 Allows you to attach to your process's parent process.:If there is no parent process an error message is printed..I-11 CREATEE The CREATE/DIRECTORY command is uTMP.BCK&<#[PCX]PCX_HELP.RNH;3Ised to create a subdirectory on the MSDOS disk..NJ Format:.I+10;CREATE/DIRECTORY pathname.J.I-11 DELETE7 The DELETE command deletes a file from the MSDOS disk..NJ Format:.i+10;DELETE pathname.J> Wildcards are permitted in the pathname. Directories must be!empty before they can be deleted..I-1 2 Qualifiers.I-1/CONFIRM /[NO]CONFIRMF Causes PCX to ask for confirmation before deleting each file matchingDthe specified pathname. Default is /NOCONFIRM for individual files, /CONFIRM for wildcard deletions..I-1/LOG /LOGB Causes PCX to display a completion message for each deleted file..I-1 1 DIRECTORY@ The DIRECTORY command is used to display the names of the files!in a directory on the MSDOS disk..NJ Format:.I+10;DIRECTORY [path].JC If you omit the path specification, the current directory (definedwith SET PATH) is listed..I-1 2 Qualifiers.I-1/OUTPUT /OUTPUT=file-specD Directs the resulting listing into the specified file. By default,the result goes to SYS$OUTPUT..I-11 EXIT3 The EXIT command is used to leave the PCX utility..NJ Format: .i+10;EXIT.J.I-11 FORMAT5 The FORMAT command is used to format the MSDOS disk..NJ Format: .I+10;FORMAT.JC Not as robust as the real FORMAT command under MSDOS, this commandAdoes not verify the disk. However, it will erase the boot block,DFAT, and root directory, effectively deleting all files on the disk..I-1 2 Qualifiers.I-1/LABEL /LABEL=vollabelTMP.BCK&<#[PCX]PCX_HELP.RNH;3I`B You may specify a volume label for the disk, up to 11 characters,with this qualifier..I-11 HELPC The HELP command is used to obtain information about PCX commands..NJ Format: .I+10;HELP [topic] [subtopic...].J.I-11 READC The READ command is used to read a file from the MSDOS disk into a VMS file..NJ Format:.i+10;READ pathname [file-spec].J= If you omit the VMS file-spec, it defaults to *.*. Wildcardsare permitted in the pathname..I-1 2 Qualifiers.I-1/BINARY /BINARYG The /BINARY qualifier causes the file to be written as a VMS stream-LFDfile, without treating the CRLF sequence as a record delimiter. TheDdefault is to write the file out as a typical VMS text file (varyingDlength records) and to use CRLF as the delimiter between records (anMSDOS convention)..I-1/LOG /LOG? Causes PCX to display a completion message for each read file..I-11 SET2 There is currently only one SET option available:.NJ Format:.i+10;SET PATH path.JC SET PATH is used to set the current default directory on the MSDOS6disk. The path name must be of an existing directory..I-11 SHOW- Only one SHOW option is currently available:.NJ Format:.I+10;SHOW PATH.J: This displays the current default path on the MSDOS disk..I-1 2 Qualifiers.I-1/OUTPUT /OUTPUT=file-specF Directs the output of the SHOW command to the specified VMS file. By+default, output is displayed on SYS$OUTPUT..I-11 SPAWNE Creates a subprocess of the curTMP.BCK&<#[PCX]PCX_HELP.RNH;3I rent process. The context of theDsubprocess is copied from the current process. You can use theDSPAWN command to leave MAIL temporarily, perform other functionsD(such as displaying a directory listing or printing a file), andthen return to MAIL..NJ Format:.I+10;SPAWN [command].J.I-1 2 Parameter commandE Specifies the DCL command string that executes in the context of theDcreated subprocess. When the command completes, the subprocessDterminates and control is returned to the parent process. If notDspecified, a subprocess is created transferring control to the DCLcommand level..I-1 2 Qualifiers.I-1/INPUT /INPUT=file-specF Specifies an input file containing one or more DCL command strings toDbe executed by the spawned subprocess. If you specify a commandDstring along with an input file, the command string is processedDbefore the commands in the input file. Once processing is complete,the subprocess is terminated..I-1/LOGICAL__NAMES /[NO]LOGICAL__NAMESF Specifies that the logical names of the parent process be copied toDthe subprocess. When you do not want the subprocess to use theElogical names of the parent process, enter the /NOLOGICAL__NAMES+qualifier. The default is /LOGICAL__NAMES..I-1/OUTPUT /OUTPUT=file-specF Identifies the output file to which the results of the SPAWNDoperation are written. You should specify an output other than@SYS$OUTPUT whenever you specify the TMP.BCK&<#[PCX]PCX_HELP.RNH;3Iy /NOWAIT qualifier to preventEoutput from being displayed while you are specifying new commands.DIf you omit the /OUTPUT qualifier, output is written to the currentSYS$OUTPUT device..I-1/PROCESS /PROCESS=subprocess-nameF Specifies the name of the subprocess to be created. The default name!of the subprocess is USERNAME__n..I-1/SYMBOLS /[NO]SYMBOLSE Determines whether the system passes DCL global and local symbols to(the subprocess. The default is /SYMBOLS..I-1/WAIT /WAITF Controls whether the system waits until the subprocess is completedDbefore allowing more commands to be specified. The /NOWAITDqualifier allows you to specify new commands while the specifiedDsubprocess is running. If you specify /NOWAIT, you should also useD/OUTPUT to direct the output to a file rather than displaying it onDthe screen to prevent your terminal from being used by more than oneprocess simultaneously..I-11 TYPEB The TYPE command is used to display the contents of an MSDOS fileon the terminal..NJ Format:.i+10;TYPE pathname.JA This command is equivalent to doing a READ pathname SYS$OUTPUT:..I-11 WRITEB The WRITE command is used to copy a VMS file onto the MSDOS disk..NJ Format: .i+10;WRITE file-spec [pathname].JB If you omit the MSDOS pathname, it defaults to *.*, to retain theHfile name and file type from the VMS file-spec (within MSDOS name length(restrictions). Wildcards are permitted..I-1 2 Qualifiers.I-1/BINARY /BITMP.BCK&<#[PCX]PCX_HELP.RNH;3I0NARY? The /BINARY qualifier causes the records in the VMS file to beDwritten to the MSDOS file without any record separators. The default6is to use CRLF to separate records in the output file..I-1/LOG /LOGB Causes PCX to display a completion message for each deleted file.