.TITLE RECALL_SAVE_RESTORE $SFDEF ;stack frame defs .LIBRARY /SYS$LIBRARY:LIB.MLB/ ;lib for $SFDEF .LINK "SYS$SYSTEM:SYS.STB" ;for CTL$ symbol .LINK "SYS$SYSTEM:DCLDEF.STB" ;for DCL symbols .PSECT DATA PIC,NOEXE,NOSHR,WRT,LONG FAB: $FAB FNM=,- ;use logical name MRS=1024,ORG=SEQ,RFM=VAR ;RECALL$COMMANDS to RAB: $RAB FAB=FAB,RBF=PTR,RSZ=4 ;specify the file .ALIGN LONG PTR: .LONG 0 ;holds recall buf ptr BUF: .BLKB 1024 ;holds recal buffer SAVE: .ASCID /SAVE/ ;SAVE CLI qualifer .PSECT CODE PIC,EXE,NOWRT,SHR,LONG .ENTRY RECALL,0 PUSHAB SAVE ;figure out whether /SAVE CALLS #1,G^CLI$PRESENT ;/RESTORE was present BLBS R0,10$ ;if /SAVE, continue on... JMP 35$ ;if /RESTORE, branch... 10$: MOVAL G^CTL$AG_CLIDATA,R0 ;start of CLI data area MOVL PPD$L_PRC(R0),R0 ;process area pointer MOVL PRC_L_RECALLPTR(R0),PTR ;get cur recall buf ptr MOVC3 #1024,PRC_G_COMMANDS(R0),BUF ;get recall buffer $CREATE fab=FAB ;open up new file BLBS R0,15$ ;error if none JMP DONE 15$: $CONNECT rab=RAB ;setup record stream BLBS R0,20$ ;error if none JMP DONE 20$: $PUT rab=RAB ;write the pointer BLBS R0,25$ ;error if none JMP DONE 25$: MOVAB BUF,RAB + RAB$L_RBF ;reload record size MOVW #1024,RAB + RAB$W_RSZ ;reload record address $PUT rab=RAB ;write the recall buf BLBS R0,30$ ;error if none JMP DONE 30$: $CLOSE fab=FAB ;close the file RET ;use $CLOSE status 35$: $OPEN fab=FAB ;open recall file BLBS R0,40$ ;error if none JMP DONE 40$: $CONNECT rab=RAB ;connect record stream BLBS R0,45$ ;error if none JMP DONE 45$: MOVAB PTR,RAB + RAB$L_UBF ;set read buf address MOVW #4,RAB + RAB$W_USZ ;set read buf size $GET rab=RAB ;read ptr record BLBS R0,50$ ;error if none JMP DONE 50$: MOVAB BUF,RAB + RAB$L_UBF ;reset read buf address MOVW #1024,RAB + RAB$W_USZ ;reset read buf size $GET rab=RAB ;read recall buf record BLBS R0,55$ ;error if none JMP DONE 55$: $CLOSE fab=FAB ;close up shop BLBS R0,60$ ;error if none JMP DONE 60$: $CMKRNL_S routin=KERNEL ;page is URSW RET ;use status from routine .ENTRY KERNEL,^M MOVAL HANDLER,(FP) ;setup error handler MOVAL G^CTL$AG_CLIDATA,R0 ;CLI data area ptr MOVL PPD$L_PRC(R0),R0 ;process area ptr MOVL PTR,PRC_L_RECALLPTR(R0) ;reload recall buf ptr MOVC3 #1024,BUF,PRC_G_COMMANDS(R0) ;reload recall buffer MOVL #SS$_NORMAL,R0 ;set normal status DONE: RET .ENTRY HANDLER,0 ;get here on error MOVL 4(AP),R0 ;get signal array ptr MOVL 4(R0),R0 ;get condition value MOVL SF$L_SAVE_FP(FP),FP ;fake out dispatcher RET ;return from kernel err ! .END RECALL !**********START OF MODIFICATION #1 TO RECALL CLD ************************ ! define syntax RECALL_SAVE_RESTORE image "RECALL_SAVE_RESTORE" ! !**********END OF MODIFICATION #1 TO RECALL CLD ************************** ! ! ORIGINAL RECALL CLD ! !************************************RECALL******************************* define syntax RECALL_ALL_COMMANDS cliroutine RECALL noparameters define verb RECALL cliroutine RECALL prefix CLI$K_RCAL_ parameter P1 value (type=$rest_of_line) qualifier ALL , syntax=RECALL_ALL_COMMANDS qualifier ERASE , syntax=RECALL_ALL_COMMANDS ! ! !**********START OF MODIFICATION #2 TO RECALL CLD ************************ ! qualifier SAVE , syntax=RECALL_SAVE_RESTORE qualifier RESTORE , syntax=RECALL_SAVE_RESTORE ! disallow (SAVE and RESTORE) or (SAVE and ALL) or (SAVE and ERASE) or (RESTORE and ALL) or (RESTORE and ERASE) ! !**********END OF MODIFICATION #2 TO RECALL CLD ************************** $ $ MACRO RECALL_SAVE_RESTORE $ $ LINK RECALL_SAVE_RESTORE $ $ COPY RECALL_SAVE_RESTORE.EXE SYS$COMMON:[SYSEXE] $ $ SET COMMAND RECALL.CLD !loads command definition $ $ RECALL/SAVE !saves recall buffer $ $ DIRECTORY RECALL$COMMANDS Directory DUA0:[WORK] RECALL$COMMANDS.;1 Total of 1 file. $ $ SPAWN %DCL-S-SPAWNED, process SYSTEM_1 spawned %DCL-S-ATTACHED, terminal now attached to process SYSTEM_1 $ $ RECALL/ALL !recall buffer is empty $ $ SET COMMAND RECALL !load command definition $ $ RECALL/RESTORE !restore recall buffer $ $ RECALL/ALL 1 RECALL/SAVE 2 SET COMMAND RECALL.CLD 3 COPY RECALL_SAVE_RESTORE.EXE SYS$COMMON:[SYSEXE] 4 LINK RECALL_SAVE_RESTORE 5 MACRO RECALL_SAVE_RESTORE 6 SET DEF DUA0:[WORK] $