diff --git a/1_transcription/bundle_10 b/1_transcription/bundle_10 new file mode 100644 index 0000000..370d43f --- /dev/null +++ b/1_transcription/bundle_10 @@ -0,0 +1,1225 @@ +PPPPPPPPPPPP AAAAAAAAA IIIIIIIII NNN NNN TTTTTTTTTTTTTTT +PPPPPPPPPPPP AAAAAAAAA IIIIIIIII NNN NNN TTTTTTTTTTTTTTT +PPPPPPPPPPPP AAAAAAAAA IIIIIIIII NNN NNN TTTTTTTTTTTTTTT +PPP PPP AAA AAA III NNN NNN TTT +PPP PPP AAA AAA III NNN NNN TTT +PPP PPP AAA AAA III NNNNNN NNN TTT +PPP PPP AAA AAA III NNNNNN NNN TTT +PPP PPP AAA AAA III NNNNNN NNN TTT +PPP PPP AAA AAA III NNN NNN NNN TTT +PPPPPPPPPPPP AAA AAA III NNN NNN NNN TTT +PPPPPPPPPPPP AAA AAA III NNN NNN NNN TTT +PPPPPPPPPPPP AAA AAA III NNN NNNNNN TTT +PPP AAAAAAAAAAAAAAA III NNN NNNNNN TTT +PPP AAAAAAAAAAAAAAA III NNN NNNNNN TTT +PPP AAAAAAAAAAAAAAA III NNN NNN TTT +PPP AAA AAA III NNN NNN TTT +PPP AAA AAA III NNN NNN TTT +PPP AAA AAA III NNN NNN TTT +PPP AAA AAA IIIIIIIII NNN NNN TTT +PPP AAA AAA IIIIIIIII NNN NNN TTT +PPP AAA AAA IIIIIIIII NNN NNN TTT + + + + + AAAAAAAAA SSSSSSSSSSSS MMM MMM + AAAAAAAAA SSSSSSSSSSSS MMM MMM + AAAAAAAAA SSSSSSSSSSSS MMM MMM +AAA AAA SSS MMMMMM MMMMMM +AAA AAA SSS MMMMMM MMMMMM +AAA AAA SSS MMMMMM MMMMMM +AAA AAA SSS MMM MMM MMM +AAA AAA SSS MMM MMM MMM +AAA AAA SSS MMM MMM MMM +AAA AAA SSSSSSSSS MMM MMM +AAA AAA SSSSSSSSS MMM MMM +AAA AAA SSSSSSSSS MMM MMM +AAAAAAAAAAAAAAA SSS MMM MMM +AAAAAAAAAAAAAAA SSS MMM MMM +AAAAAAAAAAAAAAA SSS MMM MMM +AAA AAA SSS MMM MMM +AAA AAA SSS MMM MMM +AAA AAA SSS MMM MMM +AAA AAA SSSSSSSSSSSS MMM MMM +AAA AAA SSSSSSSSSSSS MMM MMM +AAA AAA SSSSSSSSSSSS MMM MMM + + + + + *START* User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:57:48 Monitor Microsoft 1091 603a4d80j *START* +File: DSKC:PAINT.ASM<005>[20,500] Created: 06-Jan-82 22:20:26 Printed: 06-Feb-82 20:58:03 +QUEUE Switches: /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:122 /FORMS:NORMAL + +00100 TITLE PAINT graphics runtime routine +00200 +00300 +00400 DATA SEGMENT WORD PUBLIC 'RT_DATA' +00500 +00600 EXTRN $M_CUR:BYTE, $M_SAVE:BYTE +00700 EXTRN $O_CUR:WORD, $O_SAVE:WORD +00800 EXTRN $$SFPT:WORD +00900 +01000 C_SCAN DW ? ;scan count +01100 C_SKIP DW ? ;skip count +01200 DIRECT DB ? ;paint direction +01300 F_L_PAI DB ? ;flag for left already painted +01400 F_R_PAI DB ? ;flag for right already painted +01500 LEN_Q DW ? ;current queue length +01600 P_DEQ DW ? ;pointer to dequeue entry +01700 P_ENQ DW ? ;pointer to enqueue entry +01800 P_END_Q DW ? ;pointer to end of queue area +01900 TOTAL_Q DW ? ;total size available for queue +02000 +02100 DATA ENDS +02200 +02300 +02400 CONST SEGMENT WORD PUBLIC 'RT_DATA' +02500 +02600 SIZE_ENT EQU 6 ;queue entry size +02700 +02800 SIZE_PAI EQU 4*1024 ;minimal size required to be +02900 ;available in string space +03000 ;for PAINT queue, otherwise +03100 ;a major garbage collection +03200 ;is performed +03300 +03400 CONST ENDS +03500 +03600 DGROUP GROUP CONST,DATA +03700 PAGE +03800 +03900 +04000 CODE SEGMENT WORD PUBLIC 'CODE' +04100 +04200 +04300 PUBLIC $PAI +04400 +04500 EXTRN $ERC_FC:NEAR, $ERC_OM:NEAR +04600 EXTRN $LEFTC:NEAR +04700 EXTRN $MAPXYC:NEAR +04800 EXTRN $PARMS:NEAR, $PNTINI:NEAR +04900 EXTRN $SAVREG:NEAR, $SCANL:NEAR, $SCANR:NEAR +05000 EXTRN $TDOWNC:NEAR, $TUPC:NEAR +05100 EXTRN $$MAG:NEAR +05200 +05300 +05400 ASSUME CS:CODE, DS:DGROUP, ES:DGROUP +05500 PAGE +05600 +05700 +05800 ;** $PAI - process the PAINT statement +05900 ; +06000 ; Inputs: +06100 ; BX = x coordinate of point in area to be painted +06200 ; DX = y coordinate of point in area to be painted +06300 ; CX = paint color specification +06400 ; AX = border color specification +06500 ; Function: +06600 ; Paint the figure containing the specified point and with +06700 ; edges of the specified boundary color in the specified +06800 ; paint color. +06900 ; The algorithm used is copied from ADVGRP.MAC in the +07000 ; Interpreter; a queue is used to save the skipped area +07100 ; boundaries. The space for the queue is obtained from the +07200 ; compiler runtime string space. +07300 ; Outouts: +07400 ; none +07500 ; Registers: +07600 ; none +07700 +07800 $PAI: +07900 CALL $SAVREG ;save state +08000 XCHG AX,BP ;save border color spec +08100 CALL $PARMS ;process coords and paint color +08200 XCHG AX,BP ;retrieve border color spec +08300 MOV BP,CX ;save scaled x coord +08400 CALL $PNTINI ;initialize for paint +08500 JC PAI_ERROR ;error if invalid border color +08600 MOV CX,BP ;retrieve x coord +08700 CALL $MAPXYC ;map coords to screen position +08800 MOV SI,[$$SFPT] ;fetch ptr to next string area +08900 LODSW ;AX = size of area +09000 CMP AX,SIZE_PAI ;will size be adequate ? +09100 JNB PAI_SIZE_SET ;probably, continue +09200 CALL $$MAG ;maybe not, grabage collect +09300 MOV SI,[$$SFPT] +09400 LODSW ;now get ptr to area and size +09500 PAI_SIZE_SET: +09600 DEC AX ;calculate # bytes left +09700 MOV [TOTAL_Q],AX ;save as total queue size +09800 MOV [P_ENQ],SI +09900 MOV [P_DEQ],SI ;initialize queue ptrs +10000 ADD AX,SI +10100 SUB AX,SIZE_ENT-1 +10200 MOV [P_END_Q],AX ;save ptr to end of queue +10300 MOV [LEN_Q],0 ;initialize current queue len +10400 MOV DX,1 ;init skip cnt for skip no bord +10500 CALL PAI_SCAN_R ;scan right from initial pos +10600 JZ PAI_RET ;we started on border, return +10700 PUSH BX ;save right scan count +10800 CALL PAI_SCAN_L ;scan left from initial pos +10900 POP DX +11000 ADD DX,BX ;DX = left count + right count +11100 MOV AL,64 ;set up entry for going down +11200 CALL PAI_ENTRY ;enqueue entry +11300 MOV AL,192 ;init for painting up +11400 JMP SHORT PAI_START +11401 PAI_RET: +11421 RET +11441 PAI_ERROR: +11461 JMP $ERC_FC ;illegal function call +11500 ; +11600 ; Main paint loop +11700 ; +11800 PAI_LOOP: +11900 CALL PAI_DEQ ;fetch next entry from queue +12000 MOV [$O_CUR],BX +12100 MOV [$M_CUR],CL ;and set as current state +12200 PAI_START: +12300 MOV [DIRECT],AL ;save direction +12400 OR AL,AL +12500 JZ PAI_RET ;zero direction, end of queue +12600 JNS PAI_DOWN ;positive direction, down +12700 CALL $TUPC ;negative direction, test up +12800 JMP SHORT PAI_CHECK +12900 PAI_DOWN: +13000 CALL $TDOWNC ;test down +13100 PAI_CHECK: ;salary +13200 JC PAI_LOOP ;screen edge, get next entry +13300 CALL PAI_SCAN_R ;scan right up to skip cnt bord +13400 JZ PAI_LOOP ;nothing painted, get next ent +13500 CALL PAI_SCAN_L ;now scan left +13600 MOV DX,BX ;save left scan count +13700 OR AL,AL ;was line already painted ? +13800 JZ PAI_ALREADY ;yes, no overhang +13900 CMP BX,1 ;is left scan count .GT. 1 ? +14000 JLE PAI_ALREADY ;no, continue +14100 MOV AL,[DIRECT] +14200 NEG AL ;go in opposite direction +14300 CALL PAI_ENTRY ;put current state in queue +14400 PAI_ALREADY: +14500 ADD DX,[C_SCAN] ;DX = right count + left count +14700 MOV AL,[F_L_PAI] +14800 OR AL,[F_R_PAI] +14900 JZ PAI_SAVE ;don't enqueue if already paint +15000 MOV AL,[DIRECT] +15100 CALL PAI_ENTRY ;enqueue entry +15200 ; +15300 ; Set current location back to end of right scan +15400 ; +15500 PAI_SAVE: ;drugstore +15600 MOV AX,[$O_SAVE] +15700 MOV [$O_CUR],AX +15800 MOV AL,[$M_SAVE] +15900 MOV [$M_CUR],AL +16000 PAI_OH_L: +16100 MOV AX,[C_SKIP] +16200 SUB AX,[C_SCAN] ;any more border to skip ? +16300 JZ PAI_LOOP ;no, end of this scan +16400 JC PAI_OH_R ;yes, but right overhang +16500 XCHG AX,DX ;yes, scan right dif of counts +16600 CALL PAI_SCAN_R +16700 JZ PAI_LOOP ;no more points, proceed +16800 OR AL,AL +16900 JZ PAI_OH_L ;ignore if line already painted +17000 MOV DX,BX ;save right scan count +17100 MOV BX,[$O_SAVE] +17200 MOV CL,[$M_SAVE] +17300 MOV AL,[DIRECT] +17400 CALL PAI_ENQ ;enqueue entry for right scanpt +17500 JMP PAI_OH_L ;contiue until skipcount .LE. 0 +17600 PAI_OH_R: +17650 NEG AX ;make new skipcount positive +17700 CMP AX,1 ;is (skipcnt-scancnt) .LT. -1 ? +17800 JLE PAI_LOOP_REACH ;no,overhang too small to enter +18000 DEC AX +18050 MOV CX,AX ;set up count +18100 XCHG AX,DX ;save skipcount +18200 PAI_BACK: ;i.o.u. +18300 CALL $LEFTC +18400 LOOP PAI_BACK ;move left -(skipcnt-scancnt)-1 +18500 MOV AL,[DIRECT] ;no, make entry in opposite dir +18600 NEG AL +18700 CALL PAI_ENTRY ;enqueue entry +18750 PAI_LOOP_REACH: +18800 JMP PAI_LOOP ;go to next entry +19300 PAGE +19400 +19500 +19600 ;** PAI_DEQ - remove next entry from queue and return in registers +19700 ; +19800 ; Inputs: +19900 ; none +20000 ; Outputs: +20100 ; AL = direction flag (0 if queue is empty) +20200 ; BX = cursor screen offset +20300 ; CL = screen mask +20400 ; DX = scan count +20500 ; Registers: +20600 ; AH,CH,SI +20700 +20800 PAI_DEQ: +20900 XOR AL,AL ;set no entry flag +21000 SUB [LEN_Q],SIZE_ENT ;update current queue size +21100 JC PAI_DEQ_RET ;return flag if queue empty +21200 MOV SI,[P_DEQ] ;fetch ptr to current entry +21300 LODSW +21400 XCHG AX,BX +21500 LODSW +21600 XCHG AX,CX +21700 LODSW +21800 XCHG AX,DX +21900 MOV AL,CH ;fetch entry and set into regs +22000 CMP SI,[P_END_Q] ;are we at end of queue area ? +22100 JB PAI_DEQ_SET ;no, continue +22200 MOV SI,[$$SFPT] ;yes, wrap around +22300 INC SI +22400 INC SI +22500 PAI_DEQ_SET: +22600 MOV [P_DEQ],SI ;update ptr to next entry +22700 PAI_DEQ_RET: +22800 RET +22900 +23000 +23100 ;** PAI_ENTRY - enqueue current scan state +23200 ; +23300 ; Inputs: +23400 ; AL = direction flag +23500 ; DX = scan count +23600 ; $$SVRS set since queue overflow is detected +23700 ; Outputs: +23800 ; none +23900 ; Registers: +24000 ; AX,BX,CX,DI +24100 +24200 PAI_ENTRY: +24300 MOV BX,[$O_CUR] +24400 MOV CL,[$M_CUR] ;fetch current offset and mask +24500 ; now drop into enqueue +24600 +24700 +24800 ;** PAI_ENQ - place specified entry into next queue location +24900 ; +25000 ; Inputs: +25100 ; AL = direction flag +25200 ; BX = cursor screen offset +25300 ; CL = screen mask +25400 ; DX = scan count +25500 ; Outputs: +25600 ; none +25700 ; Registers: +25800 ; AX,CH,DI +25900 +26000 PAI_ENQ: +26100 MOV CH,AL +26200 MOV AX,[LEN_Q] +26300 ADD AX,SIZE_ENT ;update length +26400 CMP AX,[TOTAL_Q] ;is queue area filled up ? +26500 JNB PAI_ENQ_ERROR ;yes, abort, no more room +26600 MOV [LEN_Q],AX +26700 MOV DI,[P_ENQ] ;DI = ptr to next avail entry +26800 MOV AX,BX +26900 STOSW +27000 MOV AX,CX +27100 STOSW +27200 MOV AX,DX +27300 STOSW ;enter into queue +27400 CMP DI,[P_END_Q] ;are we at end of queue area +27500 JB PAI_ENQ_SET ;no, continue +27600 MOV DI,[$$SFPT] ;yes, wrap around +27700 INC DI +27800 INC DI +27900 PAI_ENQ_SET: +28000 MOV [P_ENQ],DI ;update ptr to next queue entry +28100 RET +28200 PAI_ENQ_ERROR: +28300 JMP $ERC_OM ;out of memory +28400 +28500 +28600 ;** PAI_SCAN_L - scan left +28700 ; +28800 ; Inputs: +28900 ; DX = skip count +29000 ; Function: +29100 ; Save state where right scan stopped and reposition to saved +29200 ; state, then scan left. +29300 ; Outputs: +29400 ; AL = already painted flag +29500 ; BX = scan count +29600 ; Z set if scan count = 0, reset otherwise +29700 ; Registers: +29800 ; ALL +29900 +30000 PAI_SCAN_L: +30100 MOV AX,[$O_CUR] +30110 XCHG AX,[$O_SAVE] +30120 MOV [$O_CUR],AX +30200 MOV AL,[$M_CUR] +30400 XCHG AL,[$M_SAVE] +30410 MOV [$M_CUR],AL ;xchg current state with saved +30500 CALL $SCANL ;scan left +30600 MOV AL,CL +30700 MOV [F_L_PAI],AL ;save already painted flag +30800 OR BX,BX ;set Z accordingly +30900 RET +31000 +31100 +31200 ;** PAI_SCAN_R - scan right +31300 ; +31400 ; Inputs: +31500 ; none +31600 ; Function: +31700 ; Scan right the specified amount and save state when boundary +31800 ; reached. +31900 ; Outputs: +32000 ; AL = already painted flag +32100 ; BX = scan count +32150 ; DX = skip count +32200 ; Z set if scan count = 0, reset otherwise +32300 ; Registers: +32400 ; ALL +32500 +32600 PAI_SCAN_R: +32700 CALL $SCANR ;scan right specified count +32800 MOV [C_SCAN],BX +32900 MOV [C_SKIP],DX ;save updated counts +33000 MOV AL,CL +33100 MOV [F_R_PAI],AL ;save already painted flag +33200 OR BX,BX ;set Z accordingly +33300 RET +33400 +33500 +33600 CODE ENDS +33700 END + + CCCCCCCCCCCC IIIIIIIII RRRRRRRRRRRR CCCCCCCCCCCC LLL EEEEEEEEEEEEEEE + CCCCCCCCCCCC IIIIIIIII RRRRRRRRRRRR CCCCCCCCCCCC LLL EEEEEEEEEEEEEEE + CCCCCCCCCCCC IIIIIIIII RRRRRRRRRRRR CCCCCCCCCCCC LLL EEEEEEEEEEEEEEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRRRRRRRRRRR CCC LLL EEEEEEEEEEEE +CCC III RRRRRRRRRRRR CCC LLL EEEEEEEEEEEE +CCC III RRRRRRRRRRRR CCC LLL EEEEEEEEEEEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE + CCCCCCCCCCCC IIIIIIIII RR RRR CCCCCCCCCCCC LLLLLLLLLLLLLLL EEEEEEEEEEEEEEE + CCCCCCCCCCCC IIIIIIIII RR RRR CCCCCCCCCCCC LLLLLLLLLLLLLLL EEEEEEEEEEEEEEE + CCCCCCCCCCCC IIIIIIIII RR RRR CCCCCCCCCCCC LLLLLLLLLLLLLLL EEEEEEEEEEEEEEE + + + + + AAAAAAAAA SSSSSSSSSSSS MMM MMM + AAAAAAAAA SSSSSSSSSSSS MMM MMM + AAAAAAAAA SSSSSSSSSSSS MMM MMM +AAA AAA SSS MMMMMM MMMMMM +AAA AAA SSS MMMMMM MMMMMM +AAA AAA SSS MMMMMM MMMMMM +AAA AAA SSS MMM MMM MMM +AAA AAA SSS MMM MMM MMM +AAA AAA SSS MMM MMM MMM +AAA AAA SSSSSSSSS MMM MMM +AAA AAA SSSSSSSSS MMM MMM +AAA AAA SSSSSSSSS MMM MMM +AAAAAAAAAAAAAAA SSS MMM MMM +AAAAAAAAAAAAAAA SSS MMM MMM +AAAAAAAAAAAAAAA SSS MMM MMM +AAA AAA SSS MMM MMM +AAA AAA SSS MMM MMM +AAA AAA SSS MMM MMM +AAA AAA SSSSSSSSSSSS MMM MMM +AAA AAA SSSSSSSSSSSS MMM MMM +AAA AAA SSSSSSSSSSSS MMM MMM + + + + + *START* User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:57:48 Monitor Microsoft 1091 603a4d80j *START* +File: DSKC:CIRCLE.ASM<005>[20,500] Created: 04-Feb-82 11:51:32 Printed: 06-Feb-82 20:58:44 +QUEUE Switches: /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:122 /FORMS:NORMAL + + CCCCCCCCCCCC IIIIIIIII RRRRRRRRRRRR CCCCCCCCCCCC LLL EEEEEEEEEEEEEEE + CCCCCCCCCCCC IIIIIIIII RRRRRRRRRRRR CCCCCCCCCCCC LLL EEEEEEEEEEEEEEE + CCCCCCCCCCCC IIIIIIIII RRRRRRRRRRRR CCCCCCCCCCCC LLL EEEEEEEEEEEEEEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRRRRRRRRRRR CCC LLL EEEEEEEEEEEE +CCC III RRRRRRRRRRRR CCC LLL EEEEEEEEEEEE +CCC III RRRRRRRRRRRR CCC LLL EEEEEEEEEEEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE +CCC III RRR RRR CCC LLL EEE + CCCCCCCCCCCC IIIIIIIII RR RRR CCCCCCCCCCCC LLLLLLLLLLLLLLL EEEEEEEEEEEEEEE + CCCCCCCCCCCC IIIIIIIII RR RRR CCCCCCCCCCCC LLLLLLLLLLLLLLL EEEEEEEEEEEEEEE + CCCCCCCCCCCC IIIIIIIII RR RRR CCCCCCCCCCCC LLLLLLLLLLLLLLL EEEEEEEEEEEEEEE + + + + + AAAAAAAAA SSSSSSSSSSSS MMM MMM + AAAAAAAAA SSSSSSSSSSSS MMM MMM + AAAAAAAAA SSSSSSSSSSSS MMM MMM +AAA AAA SSS MMMMMM MMMMMM +AAA AAA SSS MMMMMM MMMMMM +AAA AAA SSS MMMMMM MMMMMM +AAA AAA SSS MMM MMM MMM +AAA AAA SSS MMM MMM MMM +AAA AAA SSS MMM MMM MMM +AAA AAA SSSSSSSSS MMM MMM +AAA AAA SSSSSSSSS MMM MMM +AAA AAA SSSSSSSSS MMM MMM +AAAAAAAAAAAAAAA SSS MMM MMM +AAAAAAAAAAAAAAA SSS MMM MMM +AAAAAAAAAAAAAAA SSS MMM MMM +AAA AAA SSS MMM MMM +AAA AAA SSS MMM MMM +AAA AAA SSS MMM MMM +AAA AAA SSSSSSSSSSSS MMM MMM +AAA AAA SSSSSSSSSSSS MMM MMM +AAA AAA SSSSSSSSSSSS MMM MMM + + + + + *START* User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:57:48 Monitor Microsoft 1091 603a4d80j *START* +File: DSKC:CIRCLE.ASM<005>[20,500] Created: 04-Feb-82 11:51:32 Printed: 06-Feb-82 20:58:50 +QUEUE Switches: /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:122 /FORMS:NORMAL + +00100 TITLE CIRCLE graphics runtime routine +00200 +00300 +00400 +00500 DATA SEGMENT WORD PUBLIC 'RT_DATA' +00600 +00700 EXTRN $AC:WORD, $ARG:WORD +00800 EXTRN $FAC:BYTE +00900 EXTRN $GAC_X:WORD, $GAC_Y:WORD +01000 +01100 F_C_S EQU 1 ;flag start angle spec +01200 F_C_E EQU 2 ;flag end angle spec +01300 F_C_A EQU 4 ;flag aspect ratio spec +01400 F_C_S_NEG EQU 8 ;flag negative start angle +01500 F_C_E_NEG EQU 16 ;flag negative end angle +01600 F_C_POLAR EQU 32 ;flag polarity +01700 F_C_X_SCAL EQU 64 ;flag X scaling +01800 +01900 A_END DD ? ;S.P. end angle spec +02000 A_START DD ? ;S.P. start angle spec +02100 ASPECT DD ? ;S.P. aspect ratio spec +02200 C_ODD DW ? ;point count for odd octants +02300 C_POINT DW ? ;point count for plot +02400 NO_PTS DW ? ;number of points per octant +02500 OFF_C_X DW ? ;X offset save area +02600 OFF_C_Y DW ? ;Y offset save area +02700 SUM_CIR DW 0 ;circle algorithm sum +02800 +02900 F_CIR DB 0 ;circle flags byte +03000 +03100 DATA ENDS +03200 PAGE +03300 CONST SEGMENT WORD PUBLIC 'RT_DATA' +03400 +03500 +03600 EXTRN $HALFSQR2:WORD, $ONE:WORD, $RECIP2PI:WORD +03700 +03800 CONST ENDS +03900 +04000 DGROUP GROUP CONST,DATA +04100 PAGE +04200 CODE SEGMENT WORD PUBLIC 'CODE' +04300 +04400 +04500 PUBLIC $CI0,$CI1,$CI2,$CI3 +04600 +04700 EXTRN $CINFAC:FAR, $CISA:FAR +04800 EXTRN $DRAW_LINE:NEAR +04900 EXTRN $ERC_FC:NEAR +05000 EXTRN $GTASPC:NEAR +05100 EXTRN $MAPXYC:NEAR +05200 EXTRN $PARMS:NEAR +05300 EXTRN $SAVREG:NEAR, $SCALXY:NEAR, $SCMP:NEAR +05400 EXTRN $SDIV:NEAR, $SETC:NEAR, $SMUL:NEAR +05500 +05600 +05700 ASSUME CS:CODE, DS:DGROUP, ES:DGROUP +05800 PAGE +05900 CIR PROC FAR +06000 +06100 +06200 ;** $CI1 - process optional start angle for CIRCLE statement +06300 ; +06400 ; Inputs: +06500 ; BX = ptr to S.P. start angle in radians +06600 ; Function: +06700 ; Process optional start angle for CIRCLE by saving it for later +06800 ; Outputs: +06900 ; none +07000 ; Registers: +07100 ; none +07200 +07300 $CI1: +07400 PUSH AX +07500 PUSH DI +07600 MOV AL,F_C_S ;note start angle spec flag +07700 MOV DI,OFFSET DGROUP:A_START +07800 JMP SHORT CIR_SAVE ;save start angle and return +07900 +08000 +08100 ;** CI2 - process optional end angle for CIRCLE statement +08200 ; +08300 ; Inputs: +08400 ; BX = ptr to S.P. end angle in radians +08500 ; Function: +08600 ; Process optional end angle for CIRCLE by saving it for later +08700 ; Outputs: +08800 ; none +08900 ; Registers: +09000 ; none +09100 +09200 $CI2: +09300 PUSH AX +09400 PUSH DI +09500 MOV AL,F_C_E ;note end angle spec flag +09600 MOV DI,OFFSET DGROUP:A_END +09700 JMP SHORT CIR_SAVE ;save end angle and return +09800 +09900 +10000 ;** CI3 - process optional aspect ratio for CIRCLE statement +10100 ; +10200 ; Inputs: +10300 ; BX = ptr to S.P. aspect ratio +10400 ; Function: +10500 ; Process optional aspect ratio for CIRCLE by saving it for later +10600 ; +10700 ; Outputs: +10800 ; none +10900 ; Registers: +11000 ; none +11100 +11200 $CI3: +11300 PUSH AX +11400 PUSH DI +11500 MOV AL,F_C_A ;note aspect ratio spec flag +11600 MOV DI,OFFSET DGROUP:ASPECT ;drop thru to save aspect ratio +11700 CIR_SAVE: +11800 OR [F_CIR],AL ;set appropriate flag +11900 PUSH SI +12000 MOV SI,BX +12100 MOVSW +12200 MOVSW ;save specified parameter +12300 POP SI +12400 POP DI +12500 POP AX ;restore regs +12600 RET +12700 +12800 CIR ENDP +12900 +13000 +13100 ;** CI0 - process the CIRCLE statement +13200 ; +13300 ; Inputs: +13400 ; BX = x coordinate of center +13500 ; DX = y coordinate of center +13600 ; CX = radius +13700 ; AX = color specification +13800 ; Function: +13900 ; Draw the circle at the specified center coordinates with the +14000 ; speicified radius and of the specified color. Arcs may be +14100 ; drawn by specifiying the start and end angles; segments may +14200 ; be drawn by specifying these angles as negative. The circle +14300 ; may be scaled by specifying the aspect ratio. +14400 ; Outputs: +14500 ; graphics accumulators set at center +14600 ; Registers: +14700 ; none +14800 +14900 $CI0: +15000 CALL $SAVREG ;save state +15100 PUSH CX +15200 MOV BP,CX ;save radius +15300 XCHG AX,CX ;CX = color spec +15400 MOV [$GAC_X],BX +15500 MOV [$GAC_Y],DX ;set for possible lines to cen +15600 CALL $PARMS ;process center coords & color +15700 MOV BX,BP +15800 CALL $CISA ;convert radius to S.P. +15900 MOV SI,OFFSET DGROUP:$AC +16000 MOV DI,OFFSET DGROUP:$HALFSQR2 +16100 CALL $SMUL ;# points = radius * SQR(2)/2 +16200 CALL $CINFAC ;convert to integer +16300 MOV [NO_PTS],BX +16400 XOR BX,BX ;default start angle = 0 +16500 TEST [F_CIR],F_C_S ;was start angle specified ? +16600 JZ CIR_E_ANG ;no, use default +16700 MOV SI,OFFSET DGROUP:A_START ;yes, set ptr to angle +16800 MOV AL,F_C_S_NEG ;note negative start angle flag +16900 CALL CIR_ANGLE ;process angle spec +17000 CIR_E_ANG: +17100 PUSH BX ;save integer start angle +17200 MOV BX,-1 ;default end angle = infinity +17300 TEST [F_CIR],F_C_E ;was end angle specified ? +17400 JZ CIR_COMP ;no, use default +17500 MOV SI,OFFSET DGROUP:A_END ;yes, set ptr to angle saved +17600 MOV AL,F_C_E_NEG ;note negative end angle flag +17700 CALL CIR_ANGLE ;process angle spec +17800 CIR_COMP: +17900 POP AX ;fetch start angle +18000 CMP AX,BX ;is start .LT. end ? +18100 JNA CIR_ASPECT ;yes, proceed +18200 XCHG AX,BX ;no, referse start and end +18300 PUSH AX +18400 MOV AL,[F_CIR] +18500 OR AL,F_C_POLAR ;flag reverse polarity +18600 MOV CL,AL +18700 AND AL,F_C_S_NEG OR F_C_E_NEG ;was either angle negative? +18800 JZ CIR_FLAG_A ;no, continue +18900 XOR AL,F_C_S_NEG OR F_C_E_NEG ;yes, were they both negative ? +19000 JZ CIR_FLAG_A ;yes, continue +19100 XOR CL,F_C_S_NEG OR F_C_E_NEG ;no, reverse start and end flag +19200 CIR_FLAG_A: +19300 MOV [F_CIR],CL ;update flag byte +19400 POP AX +19500 CIR_ASPECT: +19600 MOV [A_START],AX +19700 MOV [A_END],BX ;save start and end angles +19800 TEST [F_CIR],F_C_A ;was aspect ratio speicified ? +19900 JNZ CIR_A_CALC ;yes, process it +20000 CALL $GTASPC ;no, fetch default aspect ratio +20100 JMP SHORT CIR_LOOP_SET +20200 CIR_A_CALC: +20300 MOV SI,OFFSET DGROUP:ASPECT ;fetch ptr to saved ratio +20400 MOV DI,OFFSET DGROUP:$AC +20500 MOVSW +20600 MOVSW ;aspect to $AC +20700 CMP [$FAC],81H ;is aspect ratio .GT. 1 ? +20800 JB CIR_A_SET ;no, process normally +20900 OR [F_CIR],F_C_X_SCAL ;yes, flag X scaling +21000 SUB DI,4 ;DI = ptr to $AC +21100 MOV SI,OFFSET DGROUP:$ONE +21200 CALL $SDIV ;compute 1/aspect ratio +21300 ; +21400 ; Set up aspect * 256 for fixed point calculations +21500 ; +21600 CIR_A_SET: +21700 ADD [$FAC],8 ;aspect = aspect * 256 +21800 CALL $CINFAC ;convert to integer +21900 ; +22000 ; Algorithm used for circle is: +22100 ; +22200 ; X = radius * 2 (rounded up) +22300 ; Y = 0 +22400 ; SUM = 0 +22500 ; LOOP until EXIT +22600 ; IF Y is even then +22700 ; REFLECT ((X+1)/2,(Y+1)/2) /*plot 4 points*/ +22800 ; IF X .LE. Y then EXIT +22900 ; SUM = SUM + (2*X) + 1 +23000 ; Y = Y + 1 +23100 ; IF SUM .GT. 0 then +23200 ; SUM = SUM - (2*X) + 1 +23300 ; X = X - 1 +23400 ; +23500 CIR_LOOP_SET: +23600 MOV [ASPECT],BX ;set fixed point aspect ratio +23700 POP AX ;retreive radius +23800 SAL AX,1 +23900 XCHG AX,BP ;BP = Y = radius * 2 +24000 XOR AX,AX ;AX = Y = 0 +24100 CIR_LOOP: +24200 TEST AX,1 +24300 JNZ CIR_UPDATE ;don't plot points if Y is odd +24400 PUSH BP +24500 PUSH AX ;save X and Y +24600 INC AX ;round up +24700 SAR AX,1 ;AX = (Y+1)/2 +24800 MOV [C_POINT],AX ;initial point count = Y +24900 CALL CIR_SCALE ;scale Y with aspect ratio +25000 MOV [OFF_C_X],BX ;X offset = Y +25100 NEG AX +25200 XCHG AX,DI ;DI = - scaled Y +25300 XCHG AX,BP +25400 INC AX ;round up +25500 SAR AX,1 ;AX = (X+1)/2 +25600 CALL CIR_SCALE ;scale X with aspect ratio +25700 MOV [OFF_C_Y],AX ;Y offset = scaled X +25800 MOV BP,BX ;BP = X +25900 MOV [C_ODD],0 ;initial odd octant count = 0 +26000 CALL CIR_PLOT ;plot 4 points +26100 MOV AX,[NO_PTS] ;fetch # points per octant +26200 MOV [C_ODD],AX ;set count for odd octants +26300 SUB AX,[C_POINT] +26400 MOV [C_POINT],AX ;pnt count=pnts/oct-pnt count +26500 NEG DI +26600 NEG [OFF_C_X] ;odd octants plotted backwards +26700 CALL CIR_PLOT ;plot 4 symmetric points +26800 POP AX ;AX = Y +26900 POP BP ;BP = X +27000 CMP AX,BP ;aren't you finished yet ? +27100 JNB CIR_RET ;yes, thank God +27200 CIR_UPDATE: +27300 MOV DX,[SUM_CIR] ;no, well, update SUM then +27400 INC AX ;Y = Y + 1 +27500 MOV DI,AX ;save Y +27600 SAL AX,1 +27700 DEC AX +27800 ADD DX,AX ;calc SUM + (2*Y) + 1 +27900 JS CIR_NO_DEC +28000 MOV AX,BP +28100 SAL AX,1 +28200 DEC AX +28300 SUB DX,AX ;calc SUM - (2*X) + 1 +28400 DEC BP ;X = X - 1 +28500 CIR_NO_DEC: +28600 MOV [SUM_CIR],DX ;update SUM +28700 XCHG AX,DI ;AX = Y +28800 JMP CIR_LOOP +28900 CIR_RET: +29000 XOR AX,AX ;clear all flags before going +29100 MOV [SUM_CIR],AX +29200 MOV [F_CIR],AL +29300 RET +29400 PAGE +29500 +29600 +29700 ;** CIR_ANGLE - convert angle specification to integer point # +29800 ; +29900 ; Inputs: +30000 ; AL = negative angle flag bit +30100 ; SI = ptr to S.P. angle (in radians) +30200 ; $$SVRS set since illegal angle spec detected +30300 ; Outputs: +30400 ; BX = integer angle +30500 ; Registers: +30600 ; ALL +30700 +30800 CIR_ANGLE: +30900 MOV DI,OFFSET DGROUP:$AC +31000 MOV BP,DI ;save ptr to $AC +31100 MOVSW +31200 MOVSW ;angle to $AC +31300 XOR BX,BX +31400 CMP [$FAC],BL ;is angle zero ? +31500 JZ CIR_A_RET ;yes, that was easy +31600 TEST [$FAC-1],80H ;is angle negative ? +31700 JZ CIR_A_POS ;no, continue +31800 OR [F_CIR],AL ;yes, set appropriate flag +31900 XOR [$FAC-1],80H ;and make positive +32000 CIR_A_POS: +32100 MOV SI,BP +32200 MOV DI,OFFSET DGROUP:$RECIP2PI +32300 CALL $SMUL ;calc angle / (2 * PI) +32400 MOV SI,BP +32500 MOV DI,OFFSET DGROUP:$ONE +32600 CALL $SCMP ;is scaled angle .GT. 1 ? +32700 JA CIR_A_ERROR ;yes, too large, error +32800 MOV SI,BP +32900 MOV DI,OFFSET DGROUP:$ARG +33000 MOVSW +33100 MOVSW ;copy to ARG for temp save +33200 MOV BX,[NO_PTS] +33300 SAL BX,1 +33400 SAL BX,1 +33500 SAL BX,1 ;*8 for true circumfrance +33600 CALL $CISA ;convert # pts to S.P. +33700 MOV SI,BP +33800 MOV DI,OFFSET DGROUP:$ARG +33900 CALL $SMUL ;calc # pts * (angle*PI/2) +34000 CALL $CINFAC ;convert to integer +34100 CIR_A_RET: +34200 RET +34300 +34400 CIR_A_ERROR: +34500 JMP $ERC_FC ;illegal function call +34600 +34700 +34800 ;** CIR_PLOT - plot (+X,-SY),(-Y,-SX),(-X,+SY),(+Y,-SX) +34900 ; +35000 ; Inputs: +35100 ; BP = X +35200 ; DI = -Y +35300 ; Function: +35400 ; Plot the 4 symmetric points on the circle. +35500 ; Outputs: +35600 ; none +35700 ; Registers: +35800 ; ALL +35900 +36000 ; +36100 CIR_PLOT: +36200 MOV AX,4 ;plot 4 points +36300 CIR_P_LOOP: +36400 PUSH AX ;save count +36500 MOV CX,BP +36600 MOV DX,DI ;fetch X,Y +36700 ADD CX,[$GAC_X] +36800 ADD DX,[$GAC_Y] ;CX,DX = screen coords +36900 MOV BX,[C_ODD] ;fetch # pts * octant * 8 +37000 MOV AX,[NO_PTS] +37100 SAL AX,1 +37200 ADD AX,BX ;add SQR(2)*radius for next oct +37300 MOV [C_ODD],AX +37400 MOV AX,[C_POINT] +37500 ADD AX,BX ;calc this point's point count +37600 CMP AX,[A_START] ;are we at start of arc ? +37700 JE CIR_P_SC ;yes, check for center line +37800 JB CIR_P_NOT ;no, not even between s and e +37900 CMP AX,[A_END] ;no, are we at end of arc ? +38000 MOV AL,[F_CIR] +38100 JE CIR_P_EC ;yes, check for center line +38200 JB CIR_P_BET ;no, between start and end +38300 CIR_P_NOT: +38400 TEST [F_CIR],F_C_POLAR ;is polarity flag set ? +38500 JNZ CIR_P ;yes, we're reversed, plot it +38600 JMP SHORT CIR_P_FIN ;no, ignore point +38700 CIR_P_SC: +38800 TEST [F_CIR],F_C_S_NEG ;was start spec negative ? +38900 JZ CIR_P ;no, just plot start point +39000 MOV AL,NOT F_C_S_NEG +39100 JMP SHORT CIR_P_LIN ;yes, draw line to center +39200 CIR_P_EC: +39300 TEST AL,F_C_E_NEG ;was end spec negative ? +39400 JZ CIR_P ;no, just plot end point +39500 MOV AL,NOT F_C_E_NEG +39600 CIR_P_LIN: +39700 AND [F_CIR],AL ;reset neg flag to avoid repeat +39800 CALL $SCALXY ;check for point on screen +39900 JNC CIR_P_FIN ;off screen, ignore +40000 PUSH BP +40100 PUSH DI ;save X,Y +40200 CALL $DRAW_LINE ;draw line from point to center +40300 POP DI +40400 POP BP ;restore X,Y +40500 JMP SHORT CIR_P_FIN +40600 CIR_P: +40700 CALL $SCALXY ;check for point on screen +40800 JNC CIR_P_FIN ;off screen, ignore +40900 CALL $MAPXYC ;map coords to point +41000 CALL $SETC ;draw the point +41100 JMP SHORT CIR_P_FIN +41200 CIR_P_BET: +41300 TEST AL,F_C_POLAR ;is polarity flag set ? +41400 JZ CIR_P ;no, plot the point +41500 CIR_P_FIN: +41600 POP AX ;fetch count +41700 DEC AX +41800 JZ CIR_P_RET ;finished all 4 points, return +41900 XCHG BP,[OFF_C_X] ;new X offset = old X +42000 NEG BP ;new X = - old X offset +42100 XCHG DI,[OFF_C_Y] ;new Y offset = old Y +42200 NEG DI ;new Y = - old Y offset +42300 JMP CIR_P_LOOP +42400 CIR_P_RET: +42500 RET +42600 +42700 +42800 ;** CIR_SCALE - scale offset from center by aspect ratio +42900 ; +43000 ; Inputs: +43100 ; AX = unscaled offset +43200 ; Function: +43300 ; Multiply specified offset by aspect ratio. Since 1 is a +43400 ; common aspect ratio value, it is checked for explicitly. +43500 ; Outputs: +43600 ; AX = scaled offset +43700 ; BX = unscaled offset +43800 ; Registers: +43900 ; DX +44000 +44100 CIR_SCALE: +44200 MOV BX,AX +44300 MOV DX,[ASPECT] +44400 OR DH,DH ;is aspect ratio = 1 (*256) ? +44500 JNZ CIR_S_RET ;yes, just return offset +44600 MUL DX ;no, calc offset * aspect ratio +44700 ADD AX,128 ;round up +44800 XCHG AH,AL +44900 XCHG AH,DL ;fixed point multiplication +45000 TEST [F_CIR],F_C_X_SCAL ;is X axis being scaled ? +45100 JZ CIR_S_RET ;no, return original in BX +45200 XCHG AX,BX +45300 CIR_S_RET: +45400 RET +45500 +45600 CODE ENDS +45700 END + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + + * * * L P T S P L R u n L o g * * * +20:57:48 LPDAT [LPTLSJ LPTSPL version 102(2263) running on LPT000, 06-Feb-82 20:57:48] +20:57:48 LPDAT [LPTSJS Starting Job PAINT, Seq #3884, request created at 06-Feb-82 20:57:48] +20:57:52 LPMSG [LPTSTF Starting File DSKC:PAINT.ASM<005>[20,500]] +20:58:34 LPMSG [LPTFPF Finished Printing File DSKC:PAINT.ASM<005>[20,500]] +20:58:35 LPMSG [LPTSTF Starting File DSKC:CIRCLE.ASM<005>[20,500]] +20:59:34 LPMSG [LPTFPF Finished Printing File DSKC:CIRCLE.ASM<005>[20,500]] +20:59:34 LPSUM Spooler runtime 0 Seconds, 5 KCS, 65 disk reads, 14 pages printed + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111 +000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999000000000011111111112222222222333 +123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012 + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + + * * * L P T S P L R u n L o g * * * +20:57:48 LPDAT [LPTLSJ LPTSPL version 102(2263) running on LPT000, 06-Feb-82 20:57:48] +20:57:48 LPDAT [LPTSJS Starting Job PAINT, Seq #3884, request created at 06-Feb-82 20:57:48] +20:57:52 LPMSG [LPTSTF Starting File DSKC:PAINT.ASM<005>[20,500]] +20:58:34 LPMSG [LPTFPF Finished Printing File DSKC:PAINT.ASM<005>[20,500]] +20:58:35 LPMSG [LPTSTF Starting File DSKC:CIRCLE.ASM<005>[20,500]] +20:59:34 LPMSG [LPTFPF Finished Printing File DSKC:CIRCLE.ASM<005>[20,500]] +20:59:34 LPSUM Spooler runtime 0 Seconds, 5 KCS, 65 disk reads, 14 pages printed + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +**END** User MS-DOS [500,100] Job PAINT Seq. 3884 Date 06-Feb-82 20:59:34 Monitor Microsoft 1091 603a4d80j **END** + + + +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111 +000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999000000000011111111112222222222333 +123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012 + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + +M M U U L TTTTT III PPPP L AAA N N +MM MM U U L T I P P L A A N N +M M M U U L T I P P L A A NN N +M M U U L T I ----- PPPP L A A N N N +M M U U L T I P L AAAAA N NN +M M U U L T I P L A A N N +M M UUUUU LLLLL T III P LLLLL A A N N + + + + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111 +000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999000000000011111111112222222222333 +123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012 + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + +M M U U L TTTTT III PPPP L AAA N N +MM MM U U L T I P P L A A N N +M M M U U L T I P P L A A NN N +M M U U L T I ----- PPPP L A A N N N +M M U U L T I P L AAAAA N NN +M M U U L T I P L A A N N +M M UUUUU LLLLL T III P LLLLL A A N N + + + + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + + + *START* User MULTI-PLAN [104,103] Job C86DSK Seq. 3885 Date 06-Feb-82 22:04:01 Monitor Microsoft 1091 603a4d80j *START* + + +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111 +000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999000000000011111111112222222222333 +123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012