; U.M68 --> U.LIT ; ; Similiar to AMOS program, but: ; ; runs logged-out ; allows multi-line cmds, subs | to CRLF ; fetchs '.SCS' from disk if not found in memory ; search order is: ; login, login library, DSK0:login library, LIB: ; ; Copyright [c] Noel Alaska Systems Technology, 1983. VMAJOR = 1. ; version equates VMINOR = 0. VSUB = 0. VEDIT = 1. ; CHANGE EACH EDIT <----------- VWHO = 0. PSEUDO = ^H07C ; acsii bar (|) SEARCH SYS ; AM librarys SEARCH SYSSYM SEARCH TRM SEARCH MFN ; My library BEGIN: PHDR -2,-1,PH$REE!PH$REU BYP LIN BEQ USEIT ; nothing entered - go do saved line ; routine to save a line for later use... SAVEIT: PUSH A2 ; something there, save pointer CLR D0 ; clear pseudo CR counter 0$: TSTB (A2)+ ; advance pointer to end line BEQ 1$ ; that's the end... CMPB -1(A2),#PSEUDO ; was last char a pseudo CR ? BNE 0$ ; NO - keep looken INC D0 ; YES - incr counter BR 0$ 1$: DEC A2 ; adjust size for pseudo CR's ADD D0,A2 ; SUB @SP,A2 ; compute length PUSH A2 ; get that much PUSH GETMEM @SP BNE DONE POP A1 POP SUB D0,A2 ; back to real line length MOV A1,A0 ; save its addr in A0 JOBIDX A3 ; name MCB MOV JOBPRG(A3),-6(A0) MOVW #[SCS],-2(A0) SUB #6,A0 SRCH @A0,A4 ; find it (or maybe old one) ANDW #^C,-10(A4) ; clear FIL in old one ORW #FIL,-2(A0) ; set FIL in new one MOV A2,D0 ; put length into D0 POP A2 ; recover line pointer 2$: CMPB @A2,#PSEUDO ; this a pseudo CR? BEQ 3$ ; YES - go replace MOVB (A2)+,(A1)+ ; NO - move it BR 4$ 3$: MOVB #15,(A1)+ ; replace pseudo CR MOVB #12,(A1)+ INC A2 ; advance line pointer 4$: SUB #1,D0 ; loop thru entire line BNE 2$ ANDW #^C,JOBTYP(A3) ; incase logged out DONE: EXIT ; exit will delete old one now... ; routine to execute a saved line as a command... USEIT: PUSH #D.DDB ; make MCB on stack PUSH GETMEM @SP ; get a DDB BNE DONE POP A1 POP JOBIDX A0 MOV JOBPRG(A0),D.FIL(A1) ; set name.ext into DDB MOVW #[SCS],D.EXT(A1) MOVW JOBUSR(A0),D.PPN(A1) ; make login explicit MOVW JOBDEV(A0),D.DEV(A1) MOVW JOBDRV(A0),D0 MOVB D0,D.DRV(A1) FETCH @A1,A0,F.FIL ; in my [P,PN] (or MEM:) ? BEQ 0$ ; YES CLRB D.PPN+0(A1) ; NO - try library FETCH @A1,A0,F.FIL ; is it there? BEQ 0$ ; YES MOVW #[DSK],D.DEV(A1) ; NO - try library on DSK0: CLRB D.DRV(A1) FETCH @A1,A0,F.FIL ; is it there? BEQ 0$ ; YES MOVW #^H0700,D.PPN(A1) ; NO - try LIB: FETCH @A1,A0,F.FIL ; is it there? BNE 4$ ; NO - msg and quit 0$: MOV A0,A1 ; get its addr into A1 MOV -14(A1),D0 ; get size SUB #14,D0 ; less MCB ADD D0,A1 ; point to end TSTB -1(A1) ; is last byte zero? BNE 1$ ; NO SUB #1,A1 ; YES - reduce size, end SUB #1,D0 1$: SUB D0,A1 ; point to start JOBIDX A5 TSTW JOBCMZ(A5) ; in command file? BNE 2$ ; YES MOVW #5000,JOBCMS(A5) ; NO - we are now 2$: MOV JOBBAS(A5),A2 ; get mem begin addr ADD JOBSIZ(A5),A2 ; point to end addr ADDW D0,JOBCMZ(A5) ; store cmd size SUBW JOBCMZ(A5),A2 ; point to where cmd goes 3$: MOVB (A1)+,(A2)+ ; move it there... SUB #1,D0 BNE 3$ ANDW #^C,JOBTYP(A5) ; incase logged out EXIT 4$: TYPECR EXIT EVEN END