; FILE NAME : P U N C H . M A C ; DATE : JUNE 9, 1977 ; VERSION : 02.01 ; AUTHOR : JAMES STANFILL ; SWEDISH HOSPITAL MEDICAL CENTER ; .TITLE PUNCH .IDENT /02.01/ .MCALL DIR$,QIOW$,OPEN$R,GET$,CLOSE$,EXIT$S .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,FDBF$A,FDBK$A .MCALL FSRSZ$,NMBLK$,EXIT$S .MCALL ALUN$,FINIT$ .MCALL GCML$,CSI$1,CSI$2,GCMLB$,GCMLD$,CSI$ ;[02.01] ; ; .SBTTL M O D I F I C A T I O N S ; ; 02.01 2-NOV-77 J. STANFILL ; ADDED CSI TO PARSE INPUT FILE NAME ; ; ; .SBTTL I N T R O D U C T I O N ; ; ; THIS TASK EMULATES A HIGH SPEED PUNCH. IT EXPECTS AS INPUT ; A SERIES OF FORMATTED BINARY BLOCKS IN ABSOLUTE LOADER ; FORMAT. TASK FLCVRT WILL CONVERT THE OUTPUT OF THE TASK ; BUILDER, [FILENAME].TSK, TO ABSOLUTE LOADER FORMAT, ; [FILENAME].LDA. THIS TASK WILL THEN TRANSFER THESE BLOCKS ; SEQUENTIALLY TO THE LINK INTERFACE DEVICE. ; ; NOTE : LOGICAL UNIT NUMBER 3 IS USED INTERNALLY FOR THE ; LINK DEVICE. IT IS ASSIGNED TO THE APPROPRIATE ; PHYSICAL DEVICE AT TASK BUILD TIME VIA THE ASG OPTION. ; ; ; NOTE : PRIOR TO INITIATING THIS TASK THE BUFFER SIZE OF THE ; LINK DEVICE MUST BE SET TO 255., I.E., : ; ; SET /BUF=TT1:255. .SBTTL A S S E M B L Y & T A S K B U I L D I N S T R U C T I O N S ; ; ASSEMBLY INSTRUCTIONS : ; ; MCR>MAC ; MAC>PUNCH=PUNCH ; ; TASK BUILD INSTRUCTIONS : ; ; MCR>TKB ; TKB>PUNCH=PUNCH,TTIO,DSKERR ; TKB>/ ; ENTER OPTIONS : ; TKB>STACK=100 ; TKB>PRI=100 ; TKB>ACTFIL=1 ; TKB>ASG=TT1:3 ; TKB>// ; ; .SBTTL O P E R A T I N G I N S T R U C T I O N S ; ; MCR>RUN PUNCH ; PUN>DEV:[USR,GRP]FILENAME.LDA;VER ; .SBTTL C O N S T A N T S ; ; ; TILUN=2 ;LUN FOR TERMINAL DKLUN=1 ;LUN FOR SY0: LNKLUN=3 ;LUN FOR DL-11 LINK TIEFN=2 ;EVENT FLAG FOR TERMINAL DKEFN=1 ;EVENT FLAG FOR DISK LNKEVF=3 ;EVENT FLAG FOR LINK CR=15 ;CARRIAGE RETURN LF=12 ;LINE FEED FB.BC=2 ;OFFSET - BYTE COUNT F/B BLOCK .SBTTL M A I N P R O G R A M .SBTTL .....I N I T I A L I Z A T I O N ; START: DIR$ #ASGTI ;ASSIGN LUNS TO DIR$ #ASGDK ;TI AND SY FINIT$ ;INITIALIZE FSR ; .SBTTL .....C O M M A N D L I N E P R O C E S S I N G [02.01] ; GCML: GCML$ #GCLBLK ;PROMPT USER BITB #GE.EOF, ; TYPED ? BEQ 1$ ;NO--CONTINUE JMP 21$ ;YES--EXIT 1$: TST ;ANYTHING TYPED ? BEQ GCML ;NO--RE-PROMPT CSI$1 #CSIBLK,, ;ANALYZE SYNTAX BCC 3$ ;ERROR ? JMP SYNERR ;YES 3$: CSI$2 #CSIBLK,OUTPUT ;NO--PARSE FILENAME STRING BCC 4$ ;ERROR ? JMP PRSERR ;YES 4$: OPEN$R #FDB1 ;NO--ACCESS LOAD FILE BCC 10$ ;ERROR ? MOV #ERRARG,R5 ;YES--INFORM USER CALL DSKOPN ;AND JMP 21$ ;EXIT ; .SBTTL .....T R A N S F E R F I L E ; 10$: GET$ #FDB1,#BLKBUF ;READ A BLOCK BCC 11$ ;ERROR ? CMPB #IE.EOF, ;MAYBE--EOF? BEQ 20$ ;YES--WE'RE DONE MOV #ERRARG,R5 ;NO--SOME OTHER ERROR CALL DSKRED ;INFORM USER BR 20$ ;AND EXIT 11$: MOV ,R0 ;GET BYTE COUNT INC R0 ;ADJUST FOR CHECKSUM MOV R0, DIR$ #PUNCH ;OUTPUT F/B TO LINK BR 10$ ;WHEN DONE--GO GET ANOTHER BLOCK .SBTTL .....E X I T ; 20$: CLOSE$ #FDB1 ;CLOSE THE FILES 21$: MOV #FIN,R5 CALL TTIO ;PRINT "EXIT" EXIT$S ; ; ; .SBTTL E R R O R P R O C E S S I N G ; SYNERR: MOV #ERR1, ;SYNTAX ERROR OCCURRED ! MOV #SZE1,ERRSZE BR CON PRSERR: MOV #ERR2, ;PARSE ERROR OCCURRED ! MOV #SZE2,ERRSZE CON: MOV #ERR,R5 ;OUTPUT ERROR CALL TTIO ;MESSAGE AND JMP GCML ;RE-PROMPT .SBTTL D A T A S T O R A G E .SBTTL .....C O M M A N D L I N E P R O C E S S I N G [02.01] ; GCLBLK: GCMLB$ ,PUN,BUFADR,TILUN GCMLD$ ;DEFINE GCML CONTROL BLOCK OFFSETS AND BIT VALUES CSI$ ;DEFINE CSI CONTROL BLOCK OFFSETS AND BIT VALUES .EVEN CSIBLK: .BLKB C.SIZE ;ALLOCATE STORAGE BUFADR: .BLKW 41. ;BUFFER FOR COMMAND LINE ; ; .SBTTL .....D I R E C T I V E P A R A M E T E R B L O C K S ; PUNCH: QIOW$ IO.WLB!TF.WAL,LNKLUN,LNKEVF,,TT1ST,, ASGTI: ALUN$ TILUN,TI,0 ASGDK: ALUN$ DKLUN,SY,0 ; TT1ST: .BLKW 2 ; ; ; .SBTTL .....F I L E D E S C R I P T O R I N F O R M A T I O N ; FSRSZ$ 1 ;1 RECORD CONTROLLED FILE ; FDB1: FDBDF$ FDAT$A R.VAR,FD.BLK FDRC$A ,BLKBUF,512. FDOP$A DKLUN,,DFFNB1 FDBF$A DKEFN ; DFFNB1: NMBLK$ ,LDA,,SY,0 ; ; .SBTTL .....A R G U M E N T L I S T S ; ; ; ARGUMENT LISTS FOR TERMINAL I/O (TTIO) ; ERR: .BYTE 6,0 WRITE LUN EVFLG ERR1 ERRSZE IERR WRITE: .WORD 2 LUN: .WORD TILUN EVFLG: .WORD TIEFN IERR: .WORD 0 ERRSZE: .WORD SZE1 ; .NLIST BIN ERR1: .BYTE CR,LF .ASCII %*** SYNTAX ERROR ***% .BYTE CR,LF SZE1=.-ERR1 .EVEN ; ERR2: .BYTE CR,LF .ASCII %*** PARSE ERROR ***% .BYTE CR,LF SZE2=.-ERR2 .EVEN .LIST BIN ; ; ; FIN: .BYTE 6,0 WRITE LUN EVFLG FINBUF FSIZE IERR FSIZE: .WORD FINSZE ; .NLIST BIN FINBUF: .BYTE CR,LF .ASCII /[EXIT]/ FINSZE=.-FINBUF .EVEN .LIST BIN ; ; ARGUMENT LIST FOR DISK ERRORS (DSKERR) ; ERRARG: .BYTE 2,0 LUN EVFLG ; ; .SBTTL .....W O R K B U F F E R ; ; BUFFER TO HOLD FORMATTED BINARY BLOCK ; ; BLKBUF: .BLKW 256. ; .END START