; ************************** AMUS Program Label ****************************** ; Filename: LEAD.M68 Date: 06/01/90 ; Category: UTIL Hash Code: 310-352-732-337 Version: 2.0(100) ; Initials: ULTR/AM Name: DAVID PALLMANN ; Company: ULTRASOFT CORPORATION Telephone #: 5163484848 ; Related Files: ; Min. Op. Sys.: AMOSL 1.3D/AMOS32 1.0D Expertise Level: BEG ; Special: After assembly: .LNKLIT LEAD,WLDSCN {/L} ; Description: Allows batch modification of LEADING field in WRITE 2.0 doc's. ; Supports wildcarding. ; ; **************************************************************************** ;****************************************************************************** ;* * ;* LEAD * ;* Change Leading in AlphaWRITE 2.0 Document Headers * ;* * ;**************************************************************************** ;Copyright (C) 1990 UltraSoft Corporation. All Rights Reserved. ; ;Written by: David Pallmann ; ;Edit History: ;2.0(100) 01-Jun-90 created. /DFP VMAJOR =2 VMINOR =0 VSUB =0 VEDIT =100. VWHO =0 AUTOEXTERN SEARCH SYS SEARCH SYSSYM SEARCH WLDSYM ;XCALL argument list - indexed by A3 .OFINI .OFDEF X.ARGS, 2 ; number of arguments .OFDEF X.TYP1, 2 ; arg 1 - type code .OFDEF X.ADR1, 4 ; - address .OFDEF X.SIZ1, 4 ; - size .OFDEF X.TYP2, 2 ; arg 2 - type code .OFDEF X.ADR2, 4 ; - address .OFDEF X.SIZ2, 4 ; - size ;XCALL variable types .OFINI .OFDEF X.UNF, 2 ; binary .OFDEF X.STR, 2 ; string .OFDEF X.FLT, 2 ; float .OFDEF X.BIN, 2 ; unformatted X.ARY =16. ;AlphaWRITE 2.0 header format ;********************* ;* DOCUMENT HEADER * ;********************* .OFINI ;------------------ start of AlphaCALC & AlphaWRITE common area ------------- .OFDEF H.VER,PH.SIZ ; document version number .OFDEF H.SIZE,4. ; size of document header in bytes .OFDEF H.DESC,60. ; description .OFDEF H.AUTH,20. ; author .OFDEF H.DEPT,6. ; department .OFDEF H.OPR,20. ; operator name .OFDEF H.PROT,1. ; document protection type .OFDEF H.ENCR,1. ; encryption type .OFDEF H.PASS,10. ; password .OFDEF H.DCRT,4. ; date created .OFDEF H.TCRT,4. ; time created .OFDEF H.DREV,4. ; date last revised .OFDEF H.TREV,4. ; time last revised .OFDEF H.NREV,2. ; number of times revised .OFDEF H.VREV,4. ; version of program when last revised .OFDEF H.DPRT,4. ; date last printed .OFDEF H.TPRT,4. ; time last printed .OFDEF H.NPRT,2. ; number of times printed .OFDEF H.EPRT,4. ; elapsed time to print document .OFDEF H.TIMO,4. ; total time open .OFDEF H.KEYS,4. ; total keystrokes .OFDEF H.LTXT,8. ; lines of text per page .OFDEF H.LTM,8. ; lines in top margin .OFDEF H.LPP,8. ; lines per page (total) .OFDEF H.CPI,8. ; characters per inch (pitch) .OFDEF H.RJST,8. ; right justification .OFDEF H.WSPC,8. ; word spacing .OFDEF H.LPI,8. ; lines per inch .OFDEF H.LSPC,8. ; line spacing (in 1/2 lines) .OFDEF H.LPO,8. ; left paper offset .OFDEF H.BHED,8. ; spaces after title .OFDEF H.BFOT,8. ; spaces before footer .OFDEF H.OUTF,8. ; outline format .OFDEF H.FORM,8. ; printer form name .OFDEF H.LBFTN,8. ; lines before footnote [177] .OFDEF H.TFTN,2. ; type of footnote [177] .OFDEF H.FLS,2. ; footnote line separator [177] .OFDEF H.KERN,2 ; kerning (None, Light, Medium, Heavy) .OFDEF H.TXTSIZ,2 ; size of text on a page (points) .OFDEF H.TOPMGN,2 ; size of top margin (points) .OFDEF H.PAGSIZ,2 ; size of total page (points) .OFDEF H.PITCH,2 ; width of average character (points) .OFDEF H.LEAD,2 ; leading (points) .OFDEF H.LINSPC,2 ; line spacing (points) .OFDEF H.LFTOFF,2 ; left paper offset (points) .OFDEF H.TTLSIZ,2 ; space after title (points) .OFDEF H.FTRSIZ,2 ; space after footer (points) .OFDEF H.FTNSIZ,2 ; space before footnotes (points) .OFDEF H.ORIENT,2 ; orientation (P or L) .OFDEF H.FORMAT,2 ; formatted Y/N .OFDEF H.PAGCNT,2 ; total pages after last pagination .OFDEF H.DOCFMT,1 ; document format .OFDEF H.SPAR,0 ; SPARE .OFSIZ S..HDR ; size of header S..HDR=510. ; header size is 510. ;variables .OFINI .OFDEF FILE, D.DDB ; file DDB .OFDEF FILES, 2 ; file count .OFDEF LEAD1, 10. ; leading as specified .OFDEF LEAD2, 2 ; leading in points (calculated) .OFDEF FLOAT1, 6 ; floating point work area #1 .OFDEF FLOAT2, 6 ; floating point work area #2 .OFSIZ MEMSIZ ; START: PHDR -1,0,PH$REE!PH$REU!PH$ILC ; GETIMP MEMSIZ,A5 ; WINIT ; INIT FILE(A5) ; CMDLIN: BYP ; LIN ; JEQ USAGE ; WSPEC ; JNE EXIT ; ;get leading from command line GETLED: BYP ; LEA A0,LEAD1(A5) ; MOV #7,D0 ; 10$: LIN ; BEQ 20$ ; MOVB (A2)+,(A0)+ ; SOB D0,10$ ; 20$: CLRB @A0 ; ;calculate leading in points CALC: LEA A2,LEAD1(A5) ; CALL NUMERIC ; JMI FMTERR ; MOVW D1,LEAD2(A5) ; LOOP: CTRLC EXIT ; WSCAN ; JNE DONE ; CMPW D.EXT(A4),#[WRT] ; BNE LOOP ; MOVW D.DEV(A4),FILE+D.DEV(A5); MOVW D.DRV(A4),FILE+D.DRV(A5); MOV D.FIL(A4),FILE+D.FIL(A5); MOVW D.EXT(A4),FILE+D.EXT(A5); MOVW D.PPN(A4),FILE+D.PPN(A5); CLR FILE+D.DVR(A5) ; LOOKUP FILE(A5) ; JNE LOOP ; MOV FILE+D.BAS(A5),FILE+D.REC(A5); READ FILE(A5) ; MOV FILE+D.BUF(A5),A3 ; ADD #2,A3 ; ADDW FILE+D.FMT(A5),A3 ; MOV @A3,D7 ; AND #^B<1111111100001111>,D7 CMPW D7,#2_8.+0 ; 2.0 document? JNE LOOP ; no PFILE @A4 ; INCW FILES(A5) ; CLEAR H.LPI(A3),8. ; LEA A0,LEAD1(A5) ; LEA A1,H.LPI(A3) ; MOV #8.,D0 ; 10$: MOVB (A0)+,(A1)+ ; SOB D0,10$ ; WRITE FILE(A5) ; CRLF ; JMP LOOP ; DONE: CLR D1 ; MOVW FILES(A5),D1 ; BEQ NOFILES ; DCVT 0,OT$TRM!OT$TSP ; TYPE document ; CMPW D1,#1 ; BEQ 10$ ; TYPE s ; 10$: TYPECR < modified> ; CRLF ; EXIT ; NOFILES: TYPECR %No documents modified ; CRLF ; EXIT: EXIT ; FMTERR: TYPECR ?Command Format Error ; CRLF ; USAGE: TYPECR LEAD allows you to change the leading in AlphaWRITE 2.0 document headers CRLF ; TYPECR Usage: .LEAD document leading CRLF ; TYPECR Ex: .LEAD *.WRT 12pts CRLF ; EXIT ; ;************* ;* NUMERIC * ;************* ;Get numeric field @A2 and return points value in D1. Automatically handles ;conversion to specified units of measurement. Sets Z if a unit of measurement ;was actually specified. If the Z-bit is zero the calling program needs to ;multiply D1 by the appropriate default for the field in question. ; ;Also returns floating point result in FLOAT1(A5) ; ;N-bit is set if there is NO leading numeric value in the field NUMERIC:: SAVE A0-A1 ; BYP ; CMPB @A2,#'. ; leading decimal point? BEQ 10$ ; yes NUM ; JNE NONUM ; 10$: GTFLT FLOAT1(A5) ; BYP ; LIN ; JEQ NO.UNITS ; MOVB (A2)+,D1 ; UCS ; CMPB D1,#'" ; inches? BEQ INCHES ; yes CMPB D1,#'P ; points? JEQ POINTS ; yes CMPB D1,#'M ; millimeters? JEQ MM ; yes CMPB D1,#'C ; centimeters/ciceros? JEQ C ; yes CMPB D1,#'D ; didots? JEQ DIDOT ; yes DEC A2 ; CMPB D1,#'% ; percent? JEQ NO.UNITS ; yes JMP NONUM ; ;inches - multiply value by 72 INCHES: MOV #72.,D1 ; FLTOF D1,FLOAT2(A5) ; LEA A0,FLOAT2(A5) ; LEA A1,FLOAT1(A5) ; FMUL A0,A1 ; JMP NUMRTN ; ;millimeters - 1 mm = 0.04 inches MM: MOVB @A2,D1 ; UCS ; CMPB D1,#'M ; BNE 10$ ; INC A2 ; 10$: MOV #4*72.,D1 ; FLTOF D1,FLOAT2(A5) ; LEA A0,FLOAT2(A5) ; LEA A1,FLOAT1(A5) ; FMUL A0,A1 ; MOV #100.,D1 ; FLTOF D1,FLOAT2(A5) ; LEA A0,FLOAT2(A5) ; LEA A1,FLOAT1(A5) ; FDIV A0,A1 ; JMP NUMRTN ; ;centimeters or ciceros C: ALF ; BNE CM ; MOVB (A2)+,D1 ; UCS ; CMPB D1,#'M ; BEQ CM ; CMPB D1,#'I ; JEQ CICERO ; ;centimeters - 1 cm = 0.39 inches CM: MOV #39.*72.,D1 ; FLTOF D1,FLOAT2(A5) ; LEA A0,FLOAT2(A5) ; LEA A1,FLOAT1(A5) ; FMUL A0,A1 ; MOV #100.,D1 ; FLTOF D1,FLOAT2(A5) ; LEA A0,FLOAT2(A5) ; LEA A1,FLOAT1(A5) ; FDIV A0,A1 ; JMP NUMRTN ; ;ciceros - 1 cicero = 0.1776 inches CICERO: MOV #1776.*72.,D1 ; FLTOF D1,FLOAT2(A5) ; LEA A0,FLOAT2(A5) ; LEA A1,FLOAT1(A5) ; FMUL A0,A1 ; MOV #10000.,D1 ; FLTOF D1,FLOAT2(A5) ; LEA A0,FLOAT2(A5) ; LEA A1,FLOAT1(A5) ; FDIV A0,A1 ; BR NUMRTN ; ;didots - 1 di = 0.0483 inches DIDOT: MOVB @A2,D1 ; UCS ; CMPB D1,#'I ; BNE 10$ ; INC A2 ; 10$: MOV #0483.*72.,D1 ; FLTOF D1,FLOAT2(A5) ; LEA A0,FLOAT2(A5) ; LEA A1,FLOAT1(A5) ; FMUL A0,A1 ; MOV #10000.,D1 ; FLTOF D1,FLOAT2(A5) ; LEA A0,FLOAT2(A5) ; LEA A1,FLOAT1(A5) ; FDIV A0,A1 ; JMP NUMRTN ; ;points value - no conversion to points required POINTS: MOVB @A2,D7 ; CMPB D7,#'T ; BEQ 10$ ; CMPB D7,#'t ; BNE 20$ ; 10$: INC A2 ; 20$: MOVB @A2,D7 ; CMPB D7,#'S ; BEQ 30$ ; CMPB D7,#'s ; BNE 40$ ; 30$: INC A2 ; 40$: NUMRTN: FFTOL FLOAT1(A5),D1 ; BYP ; TSTB @A2 ; end of field? BNE NONUM ; no - error REST A0-A1 ; LCC #PS.Z ; RTN ; NO.UNITS: FFTOL FLOAT1(A5),D1 ; REST A0-A1 ; LCC #0 ; RTN ; NONUM: REST A0-A1 ; LCC #PS.N ; RTN ; END .