Trailing-Edge
-
PDP-10 Archives
-
decuslib10-12
-
43,50547/sprout.fed
There is 1 other file named sprout.fed in the archive. Click here to see a list.
-!SPROUT.MAC_SPROUT.MAC
-3
CSM01$==^D400 ;Plotter has 3 pens, ON-LINE indicator, 400 SPI
CSM02$==-1 ;Compressed plot files
CSM03$==-1 ;Red and Black in banner
CSM04$==-1 ;Do CSM accounting (minutes and inches used)
CSM05$==-1 ;Add SLEEP time to $DSCHD macro for TTY response wait
CSM06$==^D1200 ;Support the TAB Products Card Terminal at 1200 baud
CSM07$==-1 ;Change some QUEUE defaults
CSM08$==^D2400 ;PTC-6 Plotter Terminal Controller at 2400 baud
IF2,<IFN CSM02$,<PRINTX [CSM02$ uses TOLP.REL]>>
IF2,<IFN CSM06$,<PRINTX [CSM06$ uses TABCDP.REL]>>
IF2,<IFN CSM08$,<PRINTX [CSM08$ uses PTC6.REL]>>
REPEAT 0,< ;To co mpletely remove the CSM changes, make this a REPEAT 1
CSM01$==0 ;Normal XY-10 plotter
CSM02$==0 ;Plot files are 1 byte per increment (very big)
CSM03$==0 ;Do not exercise the black and red pens
CSM04$==0 ;Account disk reads instead of forms type
CSM05$==0 ;No TTY I/O, therefore no sleep requests
CSM06$==0 ;Card punch is on I/O bus or front-end 11
CSM07$==0 ;Use whatever QUEUE says
CSM08$==0 ;Plotter is not connected to a TTY line
DEFINE CSMEDT($EDIT,$PART),<> ;Dummy macro
CSMED$==0 ;No additional edits
> ;End of REPEAT 0
-25
PAGE
SALL ;Also searches UUOSYM and ACTSYM.UNV
-29
IFNDEF CSMEDT,< SEARCH CSMEDT > ;CSM edit macro
.XCREF S1,S2,T1,T2,T3,T4,C,J,P ;[CSM] Save some trees
-35,37
SPOWHO==2 ;Who last patched (JMS @ CSM)
%SPO==<BYTE (3)SPOWHO(9)SPOVER(6)SPOMIN(18)SPOEDT>+CSMED$
-47,151
SUBTTL Table of Contents
; Table of Contents for SPROUT
;
;
; Section Page
;
; 1. Table of Contents . . . . . . . . . . . . . . . . . . 1
; 2. Revision History . . . . . . . . . . . . . . . . . . . 2
; 3. CSM Revision History . . . . . . . . . . . . . . . . . 2
; 4. Constants (Conditional and Unconditional) . . . . . . 4
; 5. MACROS . . . . . . . . . . . . . . . . . . . . . . . . 5
; 6. Special Forms Handling Parameters . . . . . . . . . . 6
; 7. Flag Definitions . . . . . . . . . . . . . . . . . . . 7
; 8. Job Parameter Area . . . . . . . . . . . . . . . . . . 8
; 9. Random Impure Storage . . . . . . . . . . . . . . . . 11
; 10. Resident JOB DaTABase . . . . . . . . . . . . . . . . 12
; 11. Non-zero daTABase . . . . . . . . . . . . . . . . . . 13
; 12. $TEXT Utilities . . . . . . . . . . . . . . . . . . . 14
; 13. Program Initialization . . . . . . . . . . . . . . . . 15
; 14. Idle Loop . . . . . . . . . . . . . . . . . . . . . . 16
; 15. Deschedule Process . . . . . . . . . . . . . . . . . . 17
; 16. CHKTIM - Routine to see if it's time to schedule a s . 17
; 17. Do the Job . . . . . . . . . . . . . . . . . . . . . . 18
; 18. Process a File . . . . . . . . . . . . . . . . . . . . 19
; 19. End of Job . . . . . . . . . . . . . . . . . . . . . . 20
; 20. FILDIS . . . . . . . . . . . . . . . . . . . . . . . . 21
; 21. CHKQUE . . . . . . . . . . . . . . . . . . . . . . . . 22
; 22. CHKOBJ . . . . . . . . . . . . . . . . . . . . . . . . 23
; 23. FNDOBJ . . . . . . . . . . . . . . . . . . . . . . . . 24
; 24. GETBLK . . . . . . . . . . . . . . . . . . . . . . . . 25
; 25. NEXTJOB Message from QUASAR . . . . . . . . . . . . . 26
; 26. User CANCEL Request . . . . . . . . . . . . . . . . . 27
; 27. UPDATE Routine to send status update . . . . . . . . . 28
; 28. CHKPNT Routine to send checkpoint message . . . . . . 29
; 29. SETUP/SHUTDOWN Message . . . . . . . . . . . . . . . . 30
; 30. Response to setup message . . . . . . . . . . . . . . 31
; 31. Operator CANCEL command . . . . . . . . . . . . . . . 32
; 32. Operator STOP command . . . . . . . . . . . . . . . . 33
; 33. Operator CONTINUE command . . . . . . . . . . . . . . 33
; 34. Operator RESPONSE command . . . . . . . . . . . . . . 33
; 35. Operator REQUEUE command . . . . . . . . . . . . . . . 34
; 36. CLRMSG and SNDQSR routines . . . . . . . . . . . . . . 35
; 37. FRMLEX - Forms limit exceeded routine . . . . . . . . 36
; 38. Accounting routines . . . . . . . . . . . . . . . . . 37
; 39. FORMS - Setup Forms for a job . . . . . . . . . . . . 40
; 40. Forms switch Subroutines . . . . . . . . . . . . . . . 44
; 41. Plotter only switches . . . . . . . . . . . . . . . . 45
; 42. I/O Subroutines for SPFORM.INI . . . . . . . . . . . . 46
; 43. INPOPN - Routine to open the input file . . . . . . . 48
; 44. INPBUF - Read a buffer from the input file . . . . . . 49
; 45. INPBYT - Read a byte from the input file . . . . . . . 49
; 46. INPERR - Handle an input failure . . . . . . . . . . . 49
; 47. INPFEF - Force end-of-file on next input . . . . . . . 49
; 48. INPREW - Rewind the input file . . . . . . . . . . . . 49
; 49. OUTGET - OPEN the output device . . . . . . . . . . . 49
; 50. OUTBYT - Deposit a byte in the output buffer . . . . . 53
; 51. OUTOUT - Routine to output a buffer . . . . . . . . . 53
; 52. DEVERR - Handle Output Device Errors . . . . . . . . . 55
; 53. OUTREL - Release output device . . . . . . . . . . . . 56
; 54. OUTWON - Wait for on-line . . . . . . . . . . . . . . 57
; 55. OUTFLS Routine to flush output buffers . . . . . . . . 58
; 56. TTY I/O
; 56.1 Input character from TTY, no wait . . . . . . 59
; 56.2 Input character, wait up to 30 seconds . . . . 60
; 57. Card punch service
; 57.1 Dispatch table . . . . . . . . . . . . . . . . 61
; 57.2 Checkpoint text generation . . . . . . . . . . 62
; 57.3 File processing . . . . . . . . . . . . . . . 63
; 57.4 File headers . . . . . . . . . . . . . . . . . 69
; 57.5 File trailers . . . . . . . . . . . . . . . . 70
; 57.6 Banners . . . . . . . . . . . . . . . . . . . 71
; 57.7 Word punching . . . . . . . . . . . . . . . . 72
; 57.8 Letters . . . . . . . . . . . . . . . . . . . 73
; 57.9 Byte output . . . . . . . . . . . . . . . . . 74
; 58. Plotter service
; 58.1 Dispatch table . . . . . . . . . . . . . . . . 75
; 58.2 Checkpoint text generation . . . . . . . . . . 76
; 58.3 File processing . . . . . . . . . . . . . . . 77
; 58.4 Expand CSM's compressed plot format . . . . . 79
; 58.5 READ36, OPRTXT, PAUSEP, TITLE for TOLP . . . . 81
; 58.6 NEWPEN for 3-pen plotter . . . . . . . . . . . 82
; 58.7 DEVOUT output errors . . . . . . . . . . . . . 83
; 58.8 Banners . . . . . . . . . . . . . . . . . . . 84
; 58.9 File headers . . . . . . . . . . . . . . . . . 85
; 58.10 File trailers . . . . . . . . . . . . . . . . 86
; 58.11 Job trailers . . . . . . . . . . . . . . . . . 87
; 58.12 Solid lines . . . . . . . . . . . . . . . . . 88
; 58.13 Dashed lines . . . . . . . . . . . . . . . . . 89
; 58.14 Job information plotting . . . . . . . . . . . 90
; 58.15 Alignment and testing . . . . . . . . . . . . 91
; 58.16 Pen calibration . . . . . . . . . . . . . . . 92
; 58.17 Compute character size . . . . . . . . . . . . 93
; 58.18 Letters . . . . . . . . . . . . . . . . . . . 94
; 58.19 Line segments . . . . . . . . . . . . . . . . 95
; 58.20 PTC-6 interface . . . . . . . . . . . . . . . 97
; 58.21 Rotation and XY20 translation . . . . . . . . 98
; 58.22 Pen movement generation . . . . . . . . . . . 99
; 58.23 Character set . . . . . . . . . . . . . . . . 101
; 59. Paper tape punch service
; 59.1 Dispatch table . . . . . . . . . . . . . . . . 106
; 59.2 Checkpoint text generation . . . . . . . . . . 107
; 59.3 File processing . . . . . . . . . . . . . . . 108
; 59.4 Banners . . . . . . . . . . . . . . . . . . . 113
; 59.5 File headers . . . . . . . . . . . . . . . . . 114
; 59.6 File trailers . . . . . . . . . . . . . . . . 115
; 59.7 Trailers . . . . . . . . . . . . . . . . . . . 116
; 59.8 Blank folds . . . . . . . . . . . . . . . . . 117
; 59.9 Letters . . . . . . . . . . . . . . . . . . . 118
; 59.10 Byte output . . . . . . . . . . . . . . . . . 119
; 60. Character Bit Array for 5 X 7 Character Matrix . . . . 120
; 61. Common Utilities . . . . . . . . . . . . . . . . . . . 122
; 62. Interrupt Module . . . . . . . . . . . . . . . . . . . 124
; 63. IPCF and DEVICE Interrupt service for TOPS10 . . . . . 128
; 64. IPCF and DEVICE interrupt service for TOPS20 . . . . . 129
-152:
-357,357
;BEGIN CODE MEINTENANCE
-361,362
End of revision history
\
PAGE
SUBTTL CSM Revision History
;
; Edit Date Who Description
;====== ========= === ===========
;
;CSM01$ 14-Nov-80 JMS Plotter has 3 pens and an ON-LINE indicator. Add
; routines to change pens and proper positioning after
; the plot. Make sure the plotter is on-line at OUTOUT.
CSMEDT 01 ;Show value of CSM01$
INCS=<CSM01$> ;400 increments per inch = 620 octal
IFN CSM01$,<ND CKPTIM,^D60> ;Checkpoint every minute.
;
;CSM02$ 14-Nov-80 JMS Use the compressed plot file format as defined
; in PLOT.REL (from CSM's FORLIB). Instead of one
; byte per increment, most halfwords in the file
; contains 9-bits of delta-X and 9 of delta-Y.
; Use TOLP.REL to translate the disk file back
; into calls to subroutine PLOT.
CSMEDT 02 ;Show value of CSM02$
IFN CSM02$,<IFE CSM01$,<PRINTX ?Must have CSM01$ on for CSM02$>>
;
;CSM03$ 14-Nov-80 JMS Change the plot banner to exercise the red and
; black pens. Plot error message even if no
; /TRAILER and set blue pen at P$EOF.
CSMEDT 03 ;Show value of CSM03$
;
;CSM04$ 25-Mar-81 JMS Put the forms name in place of DISK-WRITES,
; amount of paper in PAGES-PRINTED, cards, feet,
; or plot time in DISK-READS.
CSMEDT 04 ;Show value of CSM04$
;
;CSM05$ 8-Jan-81 JMS Add a sleep request to $DSCHD. RH of flags is
; number of seconds to wait. This is needed for
; non-blocking TTY I/O routines.
CSMEDT 05 ;Show value of CSM05$
;
;CSM06$ 8-Jan-81 JMS Add support for the TAB Products Card Terminal.
; It is a Reader/Punch that acts like a TTY.
CSMEDT 06 ;Show baud rate (^D1200=^O2260)
IFN CSM06$,<IFE CSM05$,<PRINTX ?Must have CSM05$ on for CSM06$>>
;
;CSM07$ 8-Mar-83 JMS Remove DSPMOD so that cards are punched in ASCII,
; paper tape is punched in ASCII, and plots are
; done in 18-bit BINARY mode unless explicitly
; requested otherwise. This is so that output
; from SOS or SED is not punched in image-binary.
; Remove "BEGIN:", "JOB", "jobnam", "USER:" from
; card punch banner, ignore QUEUE's default of
; /NOHEADER and always punch file header on cards.
CSMEDT 07 ;Show value of CSM07$
;
;CSM08$ 28-Jun-83 JMS Add support for the Houston Instruments PTC-6
; Plotter Terminal Controller on a TTY line.
CSMEDT 08 ;Show value of CSM08$
IFN CSM08$,< EXTERN PTCINI,PTCMOV,PTCOUT,PTCFIN
IFE CSM05$,<PRINTX ?Must have CSM05$ on for CSM08$>>
;
CSMED$==10 ;Increment this to change .JBVER
;End of CSM Revision History
-422
COMMENT ~
From the OPERATOR's point of view, the supply spool on the plotter is
above the pen holder, and the takeup spool is below the pen holder.
Therefore, to move the pen in the +Y direction, the pen holder moves to
the left. To move the pen in the +X direction, the pen stays still and
the paper is moved down (towards the takeup spool). The following
definitions are based on this point of view.
;End of COMMENT ~
-428,431
XP XYU,10 ;-X move the paper up
XP XYD,4 ;+X move the paper down
XP XYL,2 ;+Y move pen holder left
XP XYR,1 ;-Y move pen holder right
PLUSX== XYD ;[CSM] ;Move in positive X direction 0
PLUSY== XYL ;[CSM] ;Move in positive Y direction 90
MINUSX==XYU ;[CSM] ;Move in negative X direction 180
MINUSY==XYR ;[CSM] ;Move in negative Y direction 270
-436,436
CSMEDT 01,0 ;3-pen plotter, definitions
IFE CSM01$,<XP PLTPEN,^D9> ;# TICS FOR PLOT PEN UP/DOWN
IFN CSM01$,<XP PLTPEN,^D<1800*30/1000> ;30 millisec compared to 1800 per second
-437: XP PLTMOV,1 ;# TICS FOR PEN MOVEMENT
-448,448
DEFINE LP(SYM,VAL,FLAG),<;;Flag="Z" marks a variable to be zeroed per job
-474,477
SYM==J...X>;;END IF2>;;END DEFINE LP
;[CSM] Removed 2 CRLFs so that MACRO will show value in listing
-486,533
;Format of SYS:SPFORM.INI
; DEV FORM/SWITCH This line applies to all devices of this type
; DEV FORM:ALL/SWITCH This line applies to all devices of this type
; DEV FORM:LOC/SWITCH This line applies to devices at the central site
; DEV FORM:REM/SWITCH This line applies to devices on remote nodes
; "DEV" can be one of PLT, CDP, or PTP
; "FORM" is the name of the forms type, 6 characters or less
;Note: SPROUT will use the first entry which meets the location
; specification for its device. Therefore, if ALL is used with
; LOC or REM, ALL should be after the LOC or the REM.
;Switches legal for all devices
; /BANNER Output the job header
; /HEADER Output file headers
; /TRAILER Output the job trailer
; /NOTE:AA Type NOTE to the OPR when forms are mounted
;Switches legal for plotters only
; /SPU:NN Steps per unit (a factor of all XX and YY)
; /SPS:NN Steps per second (for calculating run time)
; /MAXIMUM:XX:YY Maximum pen position
; /MINIMUM:XX:YY Minimum pen position after file header
;In the above and below explanations:
; NN is a decimal number
; AA is a string of 1 to 50 characters, terminated by next "/"
; XX is a limit for the X axis
; YY is a limit for the Y axis
;Typical SPFORM.INI forms specification
; CDP NORMAL/BANNER/HEADER -
; /NOTE:Load NORMAL Cards in Card Punch
;
; PLT NORMAL/BANNER/HEADER/TRAILER/SPS:900
; /SPU:1/MINIMUM:0:0/MAXIMUM:0:5900-
; /NOTE:Set Plotter Controls to 200 Steps per inch
;
; PTP NORMAL/BANNER/HEADER/TRAILER
; PTP BLACK /BANNER/HEADER/TRAILER/NOTE:Black oiled paper tape
PAGE
COMMENT | CSM interpretation of plotter parameters
;
Example for a drum plotter:
;
PLT NORMAL /SPS:1800/SPU:4/MINIMUM:0:0/MAXIMUM:0:1100 -
/BANNER/HEADER/TRAILER
;
PLT = This line applies to the plotter (not CDP or PTP).
NORMAL = The forms name.
/SPS:1800 = Do accounting based on speed of 1800 steps per second.
/SPU:4 = This plotter uses 400 steps per inch, the following
numbers are in 1/100ths of an inch.
/MINIMUM:0:0 = Pen cannot go to left or below the starting point.
/MAXIMUM::1100 = There is no maximum limit in the +X direction, +Y movement
is limited to 11.00 inches. The height of characters used
in the /BANNER/HEADER/TRAILER is 11.00/90 = 0.12 inches.
-- = Hypen indicates a continued line.
/BANNER = Plot "* Start job XXX" 0.12 inches high, plot user's name
and PPN 0.36 inches high, and a line across the paper.
/HEADER = Plot file name 0.12 inches high and a dashed line.
/TRAILER = Plot a dashed line and the summary 0.12 inches high.
/NOTE = No note is specified, so that "OPR>START PLOT 0" will
not require a "RESPOND 'PROCEED' WHEN READY".
;
End of COMMENT |
-547,555
DEFINE FF(A),< <<SIXBIT /A/>&777777B17>+S$'A >;;All on 1 line to look nice
XALL ;[CSM] Show definition in the listing
FFNAMS: SWITCHES
F$NSW==.-FFNAMS ;NUMBER OF SWITCHES
SALL ;[CSM] Normal macro expansions
-611,611
LP J$FPLT,1 ;-1 = Plotter-only switches are legal
-612:
-629
CSMEDT 05,1 ;TTY I/O and SLEEP, part 1 just before PLOTTER VARIABLES
IFN CSM05$,< ;Flags and variables
LP J$TTY,1 ;'CDP' in LH, UDX in RH
LP J$WUDT,1 ;UDT when to wakeup
LP J$NACK,1 ;Count of Negative ACKs
> ;End of IFN CSM05$
-633,633
;[CSM] LP J$PAUS,1 ;PAUSE FOR EVERY FORM
-651
CSMEDT 01,1 ;3-Pen plotter, part 1 in "PLOTTER VARIABLES"
IFN CSM01$,< ;Flags and variables for plotter
LP J$PENN,1 ;Pen number, from 1 to 3
LP J$XLOW,1 ;Lowest XSTEP seen while pen was down
> ;End of IFN CSM01$
-678,678
LP J$DSPX,1 ;SPOOLED FILE EXTENSION
-683,683
INTERN J$$END ;[CSM] ;For .ASSIGNing data areas
-684:
-712,712
L.CON: BLOCK 1 ;SPROUT connect time in seconds
-751
CSMEDT 05,2 ;TTY I/O and SLEEP, part 2 before "LOWEND=="
IFN CSM05$,<
SLEEPT: BLOCK 1 ;Time to sleep
> ;End of IFN CSM05$
-854
IFN CSM02$,< ;Check to see where LINK .ASSIGNed the buffers
SKIPLE [TOLP..##-1777] ;Make sure data area is only one page
OUTSTR [ASCIZ /?Data area for TOLP extends past 1777/]
> ;End of IFN CSM02$
IFN CSM06$,<
SKIPLE [TABC..##-1777] ;Make sure data area is only one page
OUTSTR [ASCIZ /?Data area for TABCDP extends past 1777/]
> ;End of IFN CSM06$
IFN CSM08$,<
SKIPLE [PTC6..##-1777] ;Make sure data area is only one page
OUTSTR [ASCIZ /?Data area for PTC6 extends past 1777/]
> ;End of IFN CSM08$
-886,886
JRST MAIN ;AND GO!
-898,898
MAIN.2: SKIPN JOBACT(P1) ;IS THIS STREAM ACTIVE?
-899: JRST MAIN.3 ;NO,,GET THE NEXT STREAM.
-903,903
CSMEDT 05,2 ;TTY I/O and SLEEP, part 2 at MAIN.2:+5
IFN CSM05$,< ;Watch for sleep time
PUSHJ P,CHKTIM ;Time to run this stream?
JUMPF MAIN.3 ;Not yet
> ;End of IFN CSM05$
SKIPN JOBSTW(P1) ;IS THE STREAM BLOCKED?
-912,914
IFE CSM05$,< MOVEI S1,0 > ;SNOOZE FOR INTERRUPT
IFN CSM05$,< MOVE S1,SLEEPT > ;Get sleep time in seconds
$CALL I%SLP ;GO WAIT
$CALL CHKQUE ;PROCESS MESSAGES
IFN CSM05$,< SETZM SLEEPT > ;Clear timer request
-946,949
CSMEDT 05,2 ;TTY I/O and SLEEP, part 2 at DSCHD:+6
IFE CSM05$,< MOVE S1,@0(S1) > ;GET THE FLAGS
IFN CSM05$,<
HRRZ T1,@0(S1) ;Get the seconds to sleep
HLLZ S1,@0(S1) ;Get the flags
> ;End of IFN CSM05$
HRRZ S2,STREAM ;GET STREAM NUMBER
IORM S1,JOBSTW(S2) ;SET THE FLAGS
IFE CSM05$,< JRST MAIN > ;AND GO LOOP
IFN CSM05$,< ;This code taken from LPTSPL
JUMPE T1,MAIN ;Loop if no sleep time
CONT. (SCHEDULER)
SKIPE SLEEPT ;Is a sleep time set?
CAMG T1,SLEEPT ;And current amount smaller?
MOVEM T1,SLEEPT ;Yes, save shorter interval
$CALL I%NOW ;Get the current time
IMULI T1,3 ;Seconds to UDT ticks
ADD T1,S1 ;Build wake-up time
MOVEM T1,J$WUDT(J) ;Save for CHKTIM
JRST MAIN ;Loop
SUBTTL CHKTIM - Routine to see if it's time to schedule a stream
;CALL: J/ Pointer to job page
;
;REG: TRUE if stream can be scheduled now (timewise)
; FALSE if stream needs to wait
CHKTIM: $CALL I%NOW ;Get the current time
MOVE S2,S1 ;Get the UDT in S2
MOVE S1,J$WUDT(J) ;Get the stream wakeup time
SUB S1,S2 ;Get time left in UDT ticks
IDIVI S1,3 ;Convert to seconds
SKIPG S1 ;Any seconds left?
JRST [SETZM SLEEPT ;No, clear old sleep time
$RETT ] ;Return TRUE
SKIPE SLEEPT ;Is a sleep time set?
CAMG S1,SLEEPT ;And current amount smaller?
MOVEM S1,SLEEPT ;Yes, save the shorter interval
$RETF ;Return FALSE
;End of code taken from LPTSPL> ;End of IFN CSM05$
-973,975
$CALL FILE ;Process the file
TXNE S,RQB+ABORT ;HAVE WE BEEN REQUEUED OR WORSE?
JRST ENDJOB ;YES, END NOW!
-1024,1030
TOPS10< $CALL OUTWAT > ;OUTPUT AND WAIT UNTIL DONE
TOPS20< $CALL OUTOUT > ;FORCE EVERYTHING OUT
-1031:
-1038,1040
TOPS20< $CALL OUTOUT > ;FORCE OUTPUT
-1065,1065
-1078,1082
;**;[2533] Revamp code at FILD.1:+7L CTK/16-DEC-82
TXNE T2,FP.DEL ;[2533] /DELETE specified?
TXNE S,ABORT ;[2533] Is ABORT set?
TXNE T2,FP.SPL ;[2533] Spool file?
PUSHJ P,F%DEL ;[2533] YES,,DELETE THE FILE.
-1159,1159
CAIE T1,.OROBJ ;IS THIS THE OBJECT BLOCK?
-1294,1295
TDNE S2,JOBSTW(S1) ;ARE WE WAITING FOR OPR RESPONSE?
$KWTOR (JOBWAC(S1)) ;YES,,KILL IT !
-1296: ANDCAM S2,JOBSTW(S1) ;AND CLEAR THE WAIT BIT
-1318,1320
TXNE S2,RQB ;REQUEUING JOB?
MOVX T2,%REQUE ;YES
TXNE S2,ABORT ;ABORTING JOB?
-1325,1329
TXNE S2,PSF%OR ;ARE WE WAITING FOR OPR RESPONSE?
MOVX T2,%OREWT ;YES,,SAY SO
TXNE S2,PSF%ST ;ARE WE STOPPED?
MOVX T2,%STOPD ;YES,,SAY SO
TXNE S2,PSF%DO ;ARE WE OFFLINE?
-1343,1343
; dependent service routines to generate half of the ASCIZ text that gets
-1347,1347
SKIPN JOBACT(S1) ;NEED TO CHECKPOINT?
-1353,1353
SKIPGE S1 ;TIME TO CHECKPOINT YET?
-1354: POPJ P, ;NO - RETURN
-1379,1379
PUSHJ P,DCHKP(S1) ;GENERATE DEVICE dependent TEXT
-1396,1396
JRST SETU.2 ;YES!
-1401,1402
;[CSM] There is a problem if two streams start with 1/3 of a second
SETU.2: HRRZM T2,STREAM ;SAVE THE STREAM NUMBER
$CALL I%NOW ;USE SETUP TIME AS ACK STAMP
LSH S1,3 ;[CSM] ;Free up 3 bits
IOR S1,T2 ;[CSM] ;Make it be unique
-1482,1483
TDNE S2,JOBSTW(S1) ;ARE WE WAITING FOR OPR RESPONSE?
$KWTOR (JOBWAC(S1)) ;YES,,KILL IT !
-1492,1497
CAIN T1,.ORREA ;IS THIS THE REASON BLOCK?
MOVEI P1,0(T3) ;YES..SAVE ADDRESS OF REASON
CAIE T1,.CANTY ;IS THIS THE CANCEL TYPE BLOCK?
JRST OACC.1 ;NO,,SKIP IT AND GET NEXT BLOCK
MOVE S1,0(T3) ;YES - LOAD THE CANCEL TYPE
CAIE S1,.CNPRG ;IS IT /PURGE?
-1498: JRST OACC.1 ;NO,,PROCESS THE NEXT MSG BLK
-1556,1556
OACREQ: TXNE S,GOODBY ;IS IT TOO LATE FOR THIS?
-1567,1568
TDNE S2,JOBSTW(S1) ;ARE WE WAITING FOR OPR RESPONSE?
$KWTOR (JOBWAC(S1)) ;YES,,KILL IT !
-1575,1577
CAIN T1,.REQTY ;IS THIS THE REQUEST TYPE BLOCK?
JRST OACR.2 ;YES,,GO PROGESS IT
CAIN T1,.ORREA ;IS THIS THE REASON BLOCK?
-1646
SUBTTL FRMLEX - Forms limit exceeded routine
-1651,1651
JRST OUTIGN ;YES, set to +infinity
-1652:
-1664,1664
TXNE S,ABORT ;WERE WE CANCELLED?
-1711,1711
TLNN S1,-1 ;ARE WE DEATCHED?
-1720,1722
TXNE S2,GL.ITY ;ARE WE A PTY?
MOVE TF,[ASCII/P/] ;YES,,MAKE US 'PTY'
TXNE S2,GL.CTY ;ARE WE THE CTY?
-1763
CONT. (ACTEND)
-1798,1798
CSMEDT 04,1 ;CSM accounting, part 1 after QUEUE. uuo
IFE CSM04$,< SETZM FACTBL+7 > ;No disk writes
IFN CSM04$,<
MOVE S1,J$FORM(J) ;Get the forms type
MOVEM S1,FACTBL+7 ;Instead of disk writes
> ;End of CSM04$
CONT. (ACTEND)
-1799: MOVE S1,J$LDEV(J) ;DEVICE NAME
-1803,1804
MOVE S1,J$APRT(J) ;Number of cards, feet, minutes
MOVEM S1,FACTBL+12 ;Store as pages printed
-1823,1823
ACTRNT: SKIPN ACTFLG ;Accounting turned on?
-1867,1867
USNM3. (.EQOWN+1(J)) ;USER NAME 2 (TOPS10)
-1905,1906
CAMN S1,[POINT 7,J$XTBF(J)] ;IS THERE A MESSAGE FOR THE OPERATOR?
$RETT ;NO,,RETURN.
IFN CSM02$,< FORM.3: > ;PUSHJ to here to wait for 'PROCEED' in OPRTXT
-1933,1936
JUMPF FRMIEX ;EOF!
GETLIM T2,.EQLIM(J),FORM ;GET FORMS
CAMN T1,T2 ;MATCH?
JRST FRMI.4 ;YES!
-1937: JRST FRMI.2 ;NO -- END LINE
-1950,1951
JUMPF FRMIEX ;EOF!
JUMPE T1,FRMI.6 ;MAYBE PAREN?
-1975,1978
SKIPA ;NO!
JRST FRMSWI ;YES!
CAMN T1,J$LDEV(J) ;COMPARE TO OUR DEVNAM
JRST FRMSWI ;MATCH!
-1998,2001
JUMPF FRMIEX ;EOF!
JRST FRMSWI ;AND LOOP AROUND
FRMS.1: $CALL FH$SIX ;GET THE SWITCH
JUMPF FRMIEX ;EOF!
-2012,2012
CAMN T3,T1 ;MATCH?
-2021,2021
PUSHJ P,0(T3) ;GO!
-2022: JUMPF FRMERR ;REPORT FAILURE AND GIVE UP
-2056,2056
JUMPF S$NOT2 ;EOF, FINISH UP!
-2097
SKIPE T1 ;[CSM] ;If not zero,
-2101
SKIPE T1 ;[CSM] ;If not zero,
-2118,2118
SKIPA ;ITS NOT!
-2167,2167
IMULI T1,^D10 ;[CSM] ;Shift one decimal place
-2168: ADDI T1,-"0"(C) ;ADD IN A DIGIT
-2267,2267
TXNE S,DSKOPN ;IS THE SPOOL FILE OPEN?
-2274,2274
TXNE S,DSKOPN ;IS THE SPOOL FILE OPEN?
-2289,2291
MOVEI S2,T$DISP ;YES!
CAXN S1,.OTCDP ;NO, HOW ABOUT A CARD PUNCH?
MOVEI S2,C$DISP ;WIN!
-2308,2309
MOVX T1,.IOIMG+UU.PHS+UU.AIO ;IMAGE+PHONLY+NBIO
CSMEDT 05,3 ;TTY I/O and SLEEP, part 3 after DEVNAM in OUTGET
IFN CSM05$,< ;Check for devices connected to TTY lines
HLRZ T2,J$LDEV(J) ;Get first part of physical name
CAIE T2,'TTY' ;Is it a terminal?
JRST CSM05Z ;No
MOVE S2,J$LSER(J) ;Get service routine
MOVE S1,DNAME(S2) ;Get 'PLT' or 'CDP'
MOVEM S1,J$TTY(J) ;Put in LH
MOVE T2,J$LDEV(J) ;Get device again
IONDX. T2, ;Get UDX
SETZB T2,J$TTY(J) ;Should never happen
HRRM T2,J$TTY(J) ;Store TTY UDX in RH
CONT. (OUTGET) ;FORCE NEW LISTING PAGE
;Disable free CRLFs every 80 characters and SET TTY NO GAG
MOVX T1,.TONFC+.TOSET ;Change setting to
MOVEI T3,1 ; no free CRLFs
MOVE S1,[3,,T1]
TRMOP. S1, ;SET TTY NO CRLF
JFCL
;*BUG*; MOVX T1,.IOPIM+UU.PHS ;Packed image mode (no echo)
MOVX T1,.IOIMG+UU.PHS+IO.SUP ;Image mode, no echo
HLRZ S1,J$TTY(J) ;Get device type
CAIN S1,'PLT' ;Output to plotter?
MOVX T1,.IOASC+UU.PHS+IO.SUP ;ASCII mode, no echo
CSM05Z: > ;End of IFN CSM05$
-2318,2322
MOVE S1,J$LSER(J) ;GET DEVICE DISPATCH ADDRESS
MOVE S1,DBYTE(S1) ;GET OUTPUT BYTE SIZE
IFN CSM05$,< ;Cannot use 6 bits to PTC-6
HLRZ S2,J$TTY(J) ;Nonzero if TTY as output device
CAIN S2,'PLT' ;Going to the plotter?
MOVEI S1,7 ;Yes, use normal ASCII mode
;SET TTY NO GAG after it has been inited
MOVX T1,.TOSND+.TOSET ;Change setting to
HRRZ T2,J$TTY(J)
MOVEI T3,0 ; no SENDs allowed
MOVE S2,[3,,T1]
SKIPE T2 ;Don't TRMOP. if not a TTY
TRMOP. S2, ;SET TTY GAG
JFCL
> ;End of IFN CSM05$
-2323: STORE S1,J$LBRH+1(J),BP.SIZ ;STORE IT
-2361,2361
CAXN S1,.OTPLT ;PLOTTER?
-2375,2375
ERJMP OUTDDE ;DEVICE DOESNT EXIST!
-2433
CSMEDT 01,2 ;3-Pen plotter, part 2 at OUTOUT:+1 <TOPS10>
IFN CSM01$,< ;The plotter does not interrupt for off-line or on-line
SKIPE J$FPLT(J) ;Is this going to the plotter?
PUSHJ P,PLTCHK ;Yes, check if it is on-line
> ;End of CSM01$
-2458,2459
CONT. (OUTOUT)
IFN CSM01$,< ;After OUTWAT: inside TOPS10<>
;Ask the monitor to do a CONI to check if PLT is on-line
OPDEF STSPL. [CALLI -4] ;CSM UUO to do <CONI PLT,T1>
PLT.ON==1B30 ;The plotter power is on
PLTCHK: CSMEDT 08,1 ;PTC-6 Plotter Controller, part 1 inside CSM01$
IFN CSM08$,<
SKIPE J$TTY(J) ;Output going to a TTY?
POPJ P, ;Yes, cannot determine on-line status
> ;End of IFN CSM08$
STSPL. S1, ;Get current status of plotter
TXNE S1,PLT.ON ;Is the POWER-ON bit set?
JRST PLTONL ;Yes, plotter is on-line now
AOS S1,J$NACK(J) ;Increment NACK count
IDIVI S1,^D30 ;Set S2 modulo 30
JUMPN S2,PLTCH1 ;Complain every 30 seconds
HRRZ S1,STREAM ;Get stream number
SETOM JOBCHK(S1) ;Request checkpoint
$WTO (Off-line,,@JOBOBA(S1))
PLTCH1: CSMEDT 05,4 ;TTY I/O and SLEEP, part 4 after PLTCHK:
IFN CSM05$,< $DSCHD (1) > ;De-schedule for 1 second
IFE CSM05$,< MOVEI S1,1 ;Wait 1 second
SLEEP S1, > ; before continuing
JRST PLTCHK ;Check if it is on-line now
PLTONL: SETOM J$NACK(J) ;Plotter is on-line now
$RETT ;OK to do the OUT UUO
> ;End of IFN CSM01$
> ;END TOPS10 CONDITIONAL
CONT. (OUTOUT)
-2628
SUBTTL TTY I/O -- Input character from TTY, no wait
CSMEDT 05,5 ;TTY I/O and SLEEP, part 5 between OUTFLS and C$DISP
IFN CSM05$,< INTERN TIWAIT,TTYIN,TRMERR ;Entry points for TABCDP.MAC
;Routine to input a single character from terminal into S1.
;Uses T1 and T2.
TTYIN:: MOVX T1,.TOSIP ;Skip if input in progress
HRRZ T2,J$TTY(J) ;Get UDX
MOVE S1,[2,,T1] ;Point to args
TRMOP. S1, ;Check if input
JRST TTYIN1 ;Nothing there
MOVX T1,.TOISC ;Input single character
MOVE S1,[2,,T1] ;Point to args
TRMOP. S1, ;Get the char
PUSHJ P,TRMERR ;Should never happen
$RETT ;Got char in S1
TTYIN1: MOVEI S1,0 ;Signify failure
$RETF
TRMERR::$STOP (TUF,TRMOP. UUO Failure)
SUBTTL TTY I/O -- Input character, wait up to 30 seconds
;Routine to wait up to 30 seconds for a character to come in.
;Returns TRUE if char in S1, FALSE and zero in S1 if timed out
TIWAIT::PUSHJ P,TTYIN ;Check for input
JUMPT TIWAI2 ;Clear NACK counter if got input
;There is a good possibility that the response will come in within 1 second
MOVX S1,HB.RTC+^D1000 ;Wait 1 second, wake on char ready
HIBER S1,
JFCL
PUSHJ P,TTYIN ;Anything now?
JUMPT TIWAI2 ;Return if so
AOS J$NACK(J) ;No, waited 1 second already
TIWAT1: $DSCHD (1) ;De-schedule this stream for 1 second
PUSHJ P,TTYIN ;Input now?
JUMPT TIWAI2 ;Yes, continue
AOSG S1,J$NACK(J) ;No, count failure
JRST TIWAT1 ;Keep waiting if negative or zero
IDIVI S1,^D30 ;Set S2 modulo 30
JUMPN S2,TIWAT1 ;If less than 30 seconds, wait again
HRRZ S1,STREAM ;Get stream number
$WTO (<No response from ^W/J$LDEV(J)/ after ^D/J$NACK(J)/ seconds>,,@JOBOBA(S1))
MOVEI S1,0 ;Signify no response
$RETF
TIWAI2: SETZM J$NACK(J) ;Terminal is responding
POPJ P, ;TF has been set to TRUE already
> ;End of IFN CSM05$
-2629:SUBTTL Card punch service -- Dispatch table
-2641,2642
CSMEDT 04,2 ;CSM accounting, part 2 at C$DISP:+11
IFE CSM04$,< JRST .RETT > ;(11) ACCOUNTING
IFN CSM04$,< JRST CSMACT > ;(11) Accounting
JRST C$CHKP ;(12) CHECKPOINT TEXT GENERATION
IFN CSM04$,<
CSMACT: MOVE S1,J$APRT(J) ;Get cards punched or feet punched
MOVEM S1,J$ADRD(J) ;Save instead of disk reads
$RETT
> ;End of IFN CSM04$
-2650,2654
CAMN P2,[.INFIN] ;+INFINITY?
JRST C$CHK1 ;YES
CAMG P1,J$RLIM(J) ;OPERATOR ALLOW LIMIT TO EXCEED?
$TEXT (DEPBP,<punched ^D/P1/ of ^D/J$RLIM(J)/ cards^0>)
CAMLE P1,J$RLIM(J) ;OPERATOR ALLOW LIMIT TO EXCEED?
-2664
CSMEDT 07,1 ;QUEUE defaults, part 1 at C$PROC:+4
IFE CSM07$,<
-2668,2669
> ;End of CSM07$
IFN CSM07$,<JRST CDASC> ;Default to ASCII mode
-2716,2716
JUMPF .RETT ;THIS SHOULD NEVER REALLY HAPPEN!
-2717: JRST CDIM.1 ;AND THEN LOOP FOR MORE
-2793,2793
CAIN C,.CHTAB ;IS IT A HORIZONTAL TAB?
-2855,2866
;The following alphabetics are lowercase
BYTE (12) 0402,5400,5200 ;` a b
BYTE (12) 5100,5040,5020 ;c d e
BYTE (12) 5010,5004,5002 ;f g h
BYTE (12) 5001,6400,6200 ;i j k
BYTE (12) 6100,6040,6020 ;l m n
BYTE (12) 6010,6004,6002 ;o p q
BYTE (12) 6001,3200,3100 ;r s t
BYTE (12) 3040,3020,3010 ;u v w
BYTE (12) 3004,3002,3001 ;x y z
BYTE (12) 5000,6000,3000 ;{ | }
BYTE (12) 3400,0000,0000 ;~ DEL
-2903,2914
;The following alphabetics are lowercase
BYTE (12) 0402,5400,5200 ;` a b
BYTE (12) 5100,5040,5020 ;c d e
BYTE (12) 5010,5004,5002 ;f g h
BYTE (12) 5001,6400,6200 ;i j k
BYTE (12) 6100,6040,6020 ;l m n
BYTE (12) 6010,6004,6002 ;o p q
BYTE (12) 6001,3200,3100 ;r s t
BYTE (12) 3040,3020,3010 ;u v w
BYTE (12) 3004,3002,3001 ;x y z
BYTE (12) 5000,6000,3000 ;{ | }
BYTE (12) 3400,0000,0000 ;~ DEL
-2921,2922
CSMEDT 07,2 ;QUEUE defaults, part 2 at C$HEAD:+2
IFE CSM07$,< ;Ignore QUEUE's default of /NOHEADER, always punch it
LOAD S1,.FPINF(E),FP.NFH ;GET NO FILE HEADER BIT
JUMPN S1,.RETT ;RETURN IF NOT WANTED
> ;End of IFN CSM07$
-2956,2956
;[CSM] PJRST OUTOUT ;FORCE OUTPUT
PJRST OUTCD1 ;[CSM] ;FORCE OUTPUT
-2957:
-2961,2961
C$BANN: CSMEDT 06,1 ;TTY CDP, part 1 at C$BANN:
IFN CSM06$,< ;Set terminal to PUNCH+PRINT mode if /FORMS:NORMAL
MOVEI S1,J$FORM(J) ;Get forms name
CAMN S1,['NORMAL'] ;Normal forms?
MOVEI S1,0 ;Yes, turn on print mode
SKIPE S2,J$TTY(J) ;Punch really a terminal?
PUSHJ P,TABINI## ;Yes, set it up
> ;End of IFN CSM06$
SKIPN J$FBAN(J) ;BANNER cards wanted?
-2965,2969
CSMEDT 07,3 ;QUEUE defaults, part 3 at C$BANN:+4
IFE CSM07$,< ;"BEGIN: JOB jobnam USER:" wastes 4 cards.
MOVEI S1,[ITEXT<BEGIN:>]
PJRST CTRA.1 ;FALL INTO COMMON CODE
> ;End of IFE CSM07$
IFN CSM07$,< ;Punch just NAME, PPN, and NOTE (if any)
PJRST CTRA.2 ;Punch user name
> ;End of IFN CSM07$
IFE CSM06$,<
C$TRAI: SKIPN J$FTRA(J) ;Check TRAILER wanted flag
$RETT ;RETURN IF ZERO
> ;End of IFE CSM06$
IFN CSM06$,< ;Call TABFIN after all is done
C$TRAI: SKIPE J$FTRA(J) ;Trailer cards wanted?
$CALL CTRA.0 ;Yes
SKIPE J$TTY(J) ;Output to a TTY?
PUSHJ P,TABFIN## ;Yes, finish up
$RETT
CTRA.0: > ;End of IFN CSM06$
-2983
CONT. (C$BANN)
IFN CSM07$,< CTRA.2: > ;Here to skip over garbage
-3051,3051
;[CSM] PJRST OUTOUT ;PUNCH CARD AND RETURN
PJRST OUTCD1 ;[CSM] ;PUNCH CARD AND RETURN
-3057,3060
;Call with ASCII character to punch in S1.
;Punches 6 characters as 10 frames each followed by 2 blank frames.
;Character is punched in Rows 0 thru 6. The contents of J$CMSK is
;OR'ed with the column punch to identify the card as a Job or File card.
-3061:
-3065,3065
CAILE S1,"_" ;UPPER CASE?
-3085,3085
CDPBYT: CSMEDT 06,2 ;TTY CDP, part 2 at CDPBYT
IFE CSM06$,< PJRST OUTBYT >
IFN CSM06$,< ;Special output for TAB Products Cardpunch Terminal
SKIPN J$TTY(J) ;Output to a TTY?
PJRST OUTBYT ;No
$SAVE <S1,S2> ;Yes, preserve ACs used
MOVE S1,C ;Copy to expected AC
PJRST TABBYT## ;Store byte in other buffer
> ;End of IFN CSM06$
-3090,3094
OUTCDP: AOS S1,J$APRT(J) ;COUNT ANOTHER ONE
CAMLE S1,J$RLIM(J) ;OVER LIMIT?
PUSHJ P,FRMLEX ;HANDLE LIMIT EXCEEDED
OUTCD1: ;Output without counting
IFN CSM06$,< ;Special output for TAB Products Cardpunch Terminal
SKIPE J$TTY(J) ;Output to a TTY?
PJRST TABPUN## ;Yes, output the card
> ;End of IFN CSM06$
PJRST OUTOUT ;FORCE CARD OUT
-3104,3104
;[CSM] PUSHJ P,PTPBYT ;OUTPUT A BYTE
PUSHJ P,CDPBYT ;[CSM] ;Use the right output routine
-3111,3111
-3112:P$DISP: JRST P$HEAD ;(0) FILE HEADER
-3121,3122
CSMEDT 04,3 ;CSM accounting, part 3 at P$DISP:+11
IFE CSM04$,<JRST .RETT> ;(11) ACCOUNTING
IFN CSM04$,<JRST PLTACT> ;(11) Plotter accounting
JRST P$CHKP ;(12) CHECKPOINT TEXT GENERATION
IFN CSM04$,< ;Account for both elapsed time and paper used
PLTACT: MOVE S1,J$XLIM(J) ;Get total X increments
ADDI S1,INCS/2 ;Round up
IDIVI S1,INCS ;Convert to inches
EXCH S1,J$APRT(J) ;Store amount of paper used
MOVEM S1,J$ADRD(J) ;Store minutes in place of disk reads
$RETT
> ;End of IFN CSM04$
-3129,3138
IDIV P1,J$PTPM(J) ;P1:= MINUTES, P2:= FRACTION
IMULI P2,^D10 ;[CSM] One decimal place
IDIV P2,J$PTPM(J) ;P2:= DECIMAL FRACTION OF A MINUTE
MOVE P3,J$RLIM(J) ;GET LIMIT
CAMN P3,[.INFIN] ;+INFINITY?
JRST P$CHK1 ;YES
CAMG P1,J$RLIM(J) ;OPERATOR ALLOW LIMIT TO EXCEED?
$TEXT (DEPBP,<plotted ^D/P1/.^D/P2/ of ^D/J$RLIM(J)/ minutes^0>)
CAMLE P1,J$RLIM(J) ;OPERATOR ALLOW LIMIT TO EXCEED?
P$CHK1: $TEXT (DEPBP,<plotted ^D/P1/.^D/P2/ minutes (limit exceeded)^0>)
-3147
CSMEDT 07,4 ;QUEUE defaults, part 4 at P$PROC:+4
IFE CSM07$,< ;This code removed because all plots must be BINARY halfwords
-3150
> ;End of IFE CSM07$
IFN CSM07$,< JRST PLTHLF > ;Default always to halfword format
-3155,3155
CSMEDT 02,1 ;Halfword format, part 1 at P$ROUT:+3
IFE CSM02$,<EXP PLTSIX> ;/PLOT:BINARY (6 BIT)
IFN CSM02$,<EXP PLTHLF> ;/PLOT:BINARY (18 bit)
-3156: PLROUL==.-P$ROUT ;LENGTH OF ROUTINE TABLE
-3200
;Here at end of plot file
-"BUFFER OVERFLOW!!!!"