|
|
1.1 root 1: comment $
2: cmacros - assembly macros for interfacing to HHLs
3: (C)Copyright Microsoft Corp. 1984, 1985
4: $
5: if1
6: ASMpass=1
7: outif MACRO name,defval,onmsg,offmsg
8: ifndef name
9: ifb <defval>
10: name=0
11: else
12: name=defval
13: endif
14: endif
15: if name
16: name=1
17: ifnb <onmsg>
18: %out ! onmsg
19: endif
20: else
21: ifnb <offmsg>
22: %out ! offmsg
23: endif
24: endif
25: endm
26: error macro msg
27: E r r o r ----- msg
28: endm
29: %out cMacros Version 2.01 - 6/17/85
30: outif memS,0,<Small Model>
31: outif memM,0,<Medium Model>
32: outif memL,0,<Large Model>
33: outif memC,0,<Compact Model>
34: outif memH,0,<Huge Model>
35: memMOD= memS + memM + memL + memC + memH
36: if memMOD ne 1
37: if memMOD eq 0
38: memS= 1
39: outif memS,0,<Small Model>
40: else
41: error <Must have only 1 memory model selected>
42: endif
43: endif
44: sizeC= memM + memL + memH
45: sizeD= memL + memC + (memH*2)
46: outif ?DF,0,<No segments or groups will be defined>
47: outif ?WIN,1,<Windows Support>
48: outif ?PLM,1,<PLM calling convention>
49: ifndef ?NODATA
50: ?NODATA1=0
51: else
52: ?NODATA1=1
53: %out ! NODATA module
54: endif
55: ifndef ?CHKSTK
56: ?CHKSTK1=0
57: else
58: ?CHKSTK1=1
59: %out ! Stack checking enabled
60: endif
61: else
62: ASMpass=2
63: endif
64: .XCREF
65: .XCREF ?N,?AX,?AH,?AL,?BX,?BH
66: .XCREF ?BL,?CX,?CH,?CL,?DX,?DH
67: .XCREF ?DL,?SI,?DI,?ES,?DS,?BP
68: .XCREF ?SP,?SS,?CS
69: .XCREF ?RSL,?CPD,?argl,?argc,?BA
70: .XCREF ?ACB,???,?PO
71: .XCREF ?PAS,?PC
72: .XCREF Uconcat,mPush,mPop
73: .XCREF ?RI,?pp,?pp1,?al1
74: .XCREF ?aD,?AP,?Atal,?dd,?dd1
75: .XCREF ?pg,?pg1,?aloc,?cs1,?cs2
76: .XCREF ?DF,?PLM,?WIN,?IA,?PU,?ADJ
77: .XCREF ?UF,?RP,?ND,?NODATA1,?CHKSTK1
78: ?RSL = 0
79: ?CPD = 0
80: ?ArgL = 0
81: ?ArgC = 0
82: ?BA = 0
83: ?ACB = 0
84: ??? = 0
85: ?PO = 0
86: ?PAS = 0
87: ?PC = 0
88: ?IA = 0
89: ?PU = 0
90: ?ADJ = 0
91: ?RP = 0
92: ?UF = 0
93: ?ND = 0
94: ?N = 0000000000000000B
95: ?AX = 0000000000000011B
96: ?AH = 0000000000000001B
97: ?AL = 0000000000000010B
98: ?BX = 0000000000001100B
99: ?BH = 0000000000000100B
100: ?BL = 0000000000001000B
101: ?CX = 0000000000110000B
102: ?CH = 0000000000010000B
103: ?CL = 0000000000100000B
104: ?DX = 0000000011000000B
105: ?DH = 0000000001000000B
106: ?DL = 0000000010000000B
107: ?SI = 0000000100000000B
108: ?DI = 0000001000000000B
109: ?ES = 0000010000000000B
110: ?DS = 0000100000000000B
111: ?BP = 0001000000000000B
112: ?SP = 0010000000000000B
113: ?SS = 0100000000000000B
114: ?CS = 1000000000000000B
115: .CREF
116: uconcat macro a,b,c,d,e,f
117: a&b c&d e&f
118: endm
119: mpush macro r
120: irp x,<ax,bx,cx,dx,si,di,es,ds,bp,sp,ss,cs>
121: if r AND ?&&x
122: push x
123: endif
124: endm
125: endm
126: mpop macro r
127: irp x,<cs,ss,sp,bp,ds,es,di,si,dx,cx,bx,ax>
128: if r AND ?&&x
129: pop x
130: endif
131: endm
132: endm
133: save macro r
134: ?RSL=0
135: ?RI ?RSL,<r>
136: endm
137: ?RI macro n,r
138: irp x,<r>
139: ifdef ?&&x
140: n=n OR ?&&x
141: endif
142: endm
143: endm
144: parmB macro n
145: ?pp <n>,<byte>,2,1
146: endm
147: parmW macro n
148: ?pp <n>,<word>,2,2
149: endm
150: parmD macro n
151: ife ?PLM
152: irp x,<n>
153: ?pp <&&x>,<DWORD>,0,4
154: ?pp <Off_&&x>,<WORD>,2,2
155: ?pp <Seg_&&x>,<WORD>,2,2
156: endm
157: else
158: irp x,<n>
159: ?pp <Seg_&&x>,<WORD>,2,2
160: ?pp <Off_&&x>,<WORD>,2,2
161: ?pp <&&x>,<DWORD>,0,4
162: endm
163: endif
164: endm
165: parmQ macro n
166: ?pp <n>,<QWORD>,8,8
167: endm
168: parmT macro n
169: ?pp <n>,<TBYTE>,10,10
170: endm
171: if sizeC
172: parmCP macro n
173: parmD <n>
174: endm
175: else
176: parmCP macro n
177: parmW <n>
178: endm
179: endif
180: if sizeD
181: parmDP macro n
182: parmD <n>
183: endm
184: else
185: parmDP macro n
186: parmW <n>
187: endm
188: endif
189: ?pp macro n,t,l,s
190: if ?CPD
191: .xcref
192: irp x,<n>
193: .xcref ?T&&x
194: ?T&&x=s
195: ife ?PLM
196: ?pp1 x,<t>,,,%(?PO+?adj)
197: ?PO=?PO+l
198: else
199: ?PO=?PO+l
200: ?pp1 x,<t>,%?PO,%?adj
201: endif
202: endm
203: .cref
204: else
205: error <Parm(s) "&n" declared outside proc def>
206: endif
207: endm
208: ?pp1 macro n,t,o,a,b
209: ife ?PLM
210: n equ t ptr [bp+b]
211: else
212: n equ t ptr [bp+a+?PO-o]
213: endif
214: endm
215: ifndef ?NOPARMR
216: .XCREF
217: .XCREF ?pr
218: .CREF
219: parmR macro n,r,r2
220: ?pr n,r,r2,%?RP,%(?IA+2)
221: endm
222: ?pr macro n,r,r2,i,o
223: .xcref
224: ifnb <r2>
225: parmR SEG_&n,r
226: parmR OFF_&n,r2
227: n equ dword ptr [bp-o-2]
228: .xcref ?T&n
229: ?T&n=4
230: else
231: .xcref ?RP&i
232: ?RP&i=0
233: ifdef ?&r
234: ?RP&i=?&r
235: endif
236: if ??? OR (?CPD EQ 0) OR (?RP&i EQ 0)
237: error <invalid parmR encountered: &n,&r>
238: exitm
239: endif
240: n equ word ptr [bp-o]
241: ?T&n=2
242: irp x,<bh,ch,dh,bl,cl,dl,ah,al>
243: if ?&&x EQ ?&r
244: n equ byte ptr [bp-o]
245: ?T&n=1
246: exitm
247: endif
248: endm
249: ?IA=?IA+2
250: ?RP=?RP+1
251: endif
252: .cref
253: endm
254: endif
255: localB macro n
256: ?aLoc <n>,<BYTE ptr>,1,1,0
257: endm
258: localW macro n
259: ?aLoc <n>,<WORD PTR>,2,2,1
260: endm
261: localD macro n
262: irp x,<n>
263: ?aLoc <Seg_&&x>,<WORD PTR>,2,2,1
264: ?aLoc <Off_&&x>,<WORD PTR>,2,2,1
265: ?aLoc <&&x>,<DWORD PTR>,0,4,1
266: endm
267: endm
268: localQ macro n
269: ?aLoc <n>,<QWORD PTR>,8,8,1
270: endm
271: localT macro n
272: ?aLoc <n>,<TBYTE PTR>,10,10,1
273: endm
274: if sizeC
275: localCP macro n
276: localD <n>
277: endm
278: else
279: localCP macro n
280: localW <n>
281: endm
282: endif
283: if sizeD
284: localDP macro n
285: localD <n>
286: endm
287: else
288: localDP macro n
289: localW <n>
290: endm
291: endif
292: localV macro n,a
293: ?aLoc <n>,,%(a),0,1
294: endm
295: ?aLoc macro n,t,l,s,a
296: if ?CPD
297: .xcref
298: irp x,<n>
299: ???=???+l
300: if a
301: ???=((??? + 1) AND 0FFFEH)
302: endif
303: ?aL1 x,<t>,%(???+?IA)
304: .xcref ?T&&x
305: ?T&&x=s
306: endm
307: .cref
308: else
309: error <Locals "&n" declared outside procedure def>
310: endif
311: endm
312: ?aL1 macro n,t,o
313: n equ t [bp-o]
314: endm
315: ifndef ?NOGLOBAL
316: globalB macro n,i,s
317: ?aD <n>,1
318: ?dd n,1,<BYTE>,<DB>,<i>,<s>
319: endm
320: globalW macro n,i,s
321: ?aD <n>,2
322: ?dd n,1,<WORD>,<DW>,<i>,<s>
323: endm
324: globalD macro n,i,s
325: ?aD <n>,4
326: ?dd n,1,<DWORD>,<DD>,<i>,<s>
327: endm
328: globalQ macro n,i,s
329: ?aD <n>,8
330: ?dd n,1,<QWORD>,<DQ>,<i>,<s>
331: endm
332: globalT macro n,i,s
333: ?aD <n>,10
334: ?dd n,1,<TBYTE>,<DT>,<i>,<s>
335: endm
336: if sizeC
337: globalCP macro n,i,s
338: globalD n,<i>,<s>
339: endm
340: else
341: globalCP macro n,i,s
342: globalW n,<i>,<s>
343: endm
344: endif
345: if sizeD
346: globalDP macro n,i,s
347: globalD n,<i>,<s>
348: endm
349: else
350: globalDP macro n,i,s
351: globalW n,<i>,<s>
352: endm
353: endif
354: endif
355: ifndef ?NOSTATIC
356: staticB macro n,i,s
357: ?aD <n>,1
358: ?dd n,0,<BYTE>,<DB>,<i>,<s>
359: endm
360: staticW macro n,i,s
361: ?aD <n>,2
362: ?dd n,0,<WORD>,<DW>,<i>,<s>
363: endm
364: staticD macro n,i,s
365: ?aD <n>,4
366: ?dd n,0,<DWORD>,<DD>,<i>,<s>
367: endm
368: staticQ macro n,i,s
369: ?aD <n>,8
370: ?dd n,0,<QWORD>,<DQ>,<i>,<s>
371: endm
372: staticT macro n,i,s
373: ?aD <n>,10
374: ?dd n,0,<TBYTE>,<DT>,<i>,<s>
375: endm
376: if sizeC
377: staticCP macro n,i,s
378: staticD n,<i>,<s>
379: endm
380: else
381: staticCP macro n,i,s
382: staticW n,<i>,<s>
383: endm
384: endif
385: if sizeD
386: staticDP macro n,i,s
387: staticD n,<i>,<s>
388: endm
389: else
390: staticDP macro n,i,s
391: staticW n,<i>,<s>
392: endm
393: endif
394: endif
395: ?dd macro n,p,t,d,i,s
396: ife ?PLM
397: n label t
398: ?dd1 _&n,p,<d>,<i>,<s>
399: else
400: ?dd1 n,p,<d>,<i>,<s>
401: endif
402: endm
403: ?dd1 macro n,p,d,i,s
404: if p
405: PUBLIC n
406: endif
407: ifb <s>
408: n d i
409: else
410: ifb <i>
411: n d s DUP (?)
412: else
413: n d s DUP (i)
414: endif
415: endif
416: endm
417: ifndef ?NOEXTERN
418: .XCREF
419: .XCREF ?ex1
420: .CREF
421: externB macro n
422: ?ex1 <n>,1,<BYTE>
423: endm
424: externW macro n
425: ?ex1 <n>,2,<WORD>
426: endm
427: externD macro n
428: ?ex1 <n>,4,<DWORD>
429: endm
430: externQ macro n
431: ?ex1 <n>,8,<QWORD>
432: endm
433: externT macro n
434: ?ex1 <n>,10,<TBYTE>
435: endm
436: externNP macro n
437: ?ex1 <n>,2,<NEAR>
438: endm
439: externFP macro n
440: ?ex1 <n>,4,<FAR>
441: endm
442: if sizeC
443: externP macro n
444: ?ex1 <n>,4,<FAR>
445: endm
446: else
447: externP macro n
448: ?ex1 <n>,2,<NEAR>
449: endm
450: endif
451: if sizeC
452: externCP macro n
453: ?ex1 <n>,4,<DWORD>
454: endm
455: else
456: externCP macro n
457: ?ex1 <n>,2,<WORD>
458: endm
459: endif
460: if sizeD
461: externDP macro n
462: ?ex1 <n>,4,<DWORD>
463: endm
464: else
465: externDP macro n
466: ?ex1 <n>,2,<WORD>
467: endm
468: endif
469: ?ex1 macro n,s,d
470: irp x,<n>
471: .xcref
472: .xcref ?T&&x
473: .cref
474: ?T&&x=s
475: ife ?PLM
476: extrn _&&x:&d
477: x equ _&&x
478: else
479: extrn x:&d
480: endif
481: endm
482: endm
483: endif
484: ifndef ?NOLABEL
485: .XCREF
486: ?lblpu = 0
487: .XCREF ?lb1,?lblpu
488: .CREF
489: labelB macro n
490: ?lb1 <n>,1,<BYTE>
491: endm
492: labelW macro n
493: ?lb1 <n>,2,<WORD>
494: endm
495: labelD macro n
496: ?lb1 <n>,4,<DWORD>
497: endm
498: labelQ macro n
499: ?lb1 <n>,8,<QWORD>
500: endm
501: labelT macro n
502: ?lb1 <n>,10,<TBYTE>
503: endm
504: labelNP macro n
505: ?lb1 <n>,2,<NEAR>
506: endm
507: labelFP macro n
508: ?lb1 <n>,4,<FAR>
509: endm
510: if sizeC
511: labelP macro n
512: ?lb1 <n>,4,<FAR>
513: endm
514: else
515: labelP macro n
516: ?lb1 <n>,2,<NEAR>
517: endm
518: endif
519: if sizeC
520: labelCP macro n
521: ?lb1 <n>,4,<DWORD>
522: endm
523: else
524: labelCP macro n
525: ?lb1 <n>,2,<WORD>
526: endm
527: endif
528: if sizeD
529: labelDP macro n
530: ?lb1 <n>,4,<DWORD>
531: endm
532: else
533: labelDP macro n
534: ?lb1 <n>,2,<WORD>
535: endm
536: endif
537: ?lb1 macro n,s,d
538: ?lblpu=0
539: irp x,<n>
540: ifidn <x>,<PUBLIC>
541: ?lblpu=1
542: else
543: .xcref
544: .xcref ?T&&x
545: .cref
546: ?T&&x=s
547: ife ?PLM
548: if ?lblpu
549: public _&&x
550: endif
551: _&&x label &d
552: x equ _&&x
553: else
554: if ?lblpu
555: public x
556: endif
557: x label &d
558: endif
559: endif
560: endm
561: endm
562: endif
563: ifndef ?NODEF
564: defB macro n
565: ?aD <n>,1
566: endm
567: defW macro n
568: ?aD <n>,2
569: endm
570: defD macro n
571: ?aD <n>,4
572: endm
573: defQ macro n
574: ?aD <n>,8
575: endm
576: defT macro n
577: ?aD <n>,10
578: endm
579: if sizeC
580: defCP macro n
581: defD <n>
582: endm
583: else
584: defCP macro n
585: defW <n>
586: endm
587: endif
588: if sizeD
589: defDP macro n
590: defD <n>
591: endm
592: else
593: defDP macro n
594: defW <n>
595: endm
596: endif
597: endif
598: ?aD macro n,s
599: irp x,<n>
600: .xcref
601: .xcref ?T&&x
602: .cref
603: ?T&&x=s
604: endm
605: endm
606: ifndef ?NOPTR
607: regPtr macro n,S,O
608: farPtr n,S,O
609: endm
610: farptr macro n,S,O
611: .xcref
612: .xcref ?T&n
613: .cref
614: n ¯o
615: push S
616: push O
617: &endm
618: ?T&n=80h
619: endm
620: endif
621: arg macro a
622: irp x,<a>
623: ?argc=?argc+1
624: ?Atal <x>,%?argc
625: endm
626: endm
627: ?Atal macro n,i
628: .xcref
629: .xcref ?ALI&i
630: .cref
631: ?ALI&i ¯o
632: ?AP n
633: &endm
634: endm
635: ?AP macro n
636: ?argl=?argl+2
637: ifdef ?T&n
638: ife ?T&n-1
639: push word ptr (n)
640: exitm
641: endif
642: ife ?T&n-2
643: push n
644: exitm
645: endif
646: ife ?T&n-4
647: push word ptr (n)+2
648: push word ptr (n)
649: ?argl=?argl+2
650: exitm
651: endif
652: ife ?T&n-8
653: push word ptr (n)+6
654: push word ptr (n)+4
655: push word ptr (n)+2
656: push word ptr (n)
657: ?argl=?argl+6
658: exitm
659: endif
660: if ?T&n AND 80h
661: n
662: ?argl=?argl+2
663: exitm
664: endif
665: ife ?T&n
666: push word ptr (n)
667: exitm
668: endif
669: endif
670: push n
671: endm
672: ife ?PLM
673: ccall macro n,a,sleaze
674: ifnb <a>
675: Arg <a>
676: endif
677: mpush %?RSL
678: ?argl=0
679: ?ACB=?argc
680: rept ?argc
681: uconcat <?ALI>,%?ACB
682: uconcat <purge>,,<?ALI>,%?ACB
683: ?ACB=?ACB-1
684: endm
685: ifb <sleaze>
686: call _&n
687: else
688: call n
689: endif
690: if ?argl
691: add sp,?argl
692: endif
693: mpop %?RSL
694: ?RSL=0
695: ?argc= 0
696: ?argl= 0
697: endm
698: else
699: ccall macro n,a
700: ifnb <a>
701: Arg <a>
702: endif
703: mpush %?RSL
704: ?argl=0
705: ?ACB=1
706: rept ?argc
707: uconcat <?ALI>,%?ACB
708: uconcat <purge>,,<?ALI>,%?ACB
709: ?ACB=?ACB+1
710: endm
711: call n
712: mpop %?RSL
713: ?RSL=0
714: ?argc=0
715: ?argl=0
716: endm
717: endif
718: cProc macro n,c,a,f
719: if ?CPD
720: ?UTPE
721: endif
722: ?CPD=1
723: ???=0
724: ?argc=0
725: ?BA=0
726: ?PO=0
727: ?PU=0
728: ?IA=0
729: ?adj=4
730: ?PC=0
731: ?RP=0
732: ?UF=0
733: ?PAS=0
734: ifnb <a>
735: ?RI ?PAS,<a>
736: endif
737: ?PC=sizeC
738: ?ND=?NODATA1
739: irp x,<c>
740: ifidn <x>,<FAR>
741: ?PC=1
742: endif
743: ifidn <x>,<NEAR>
744: ?PC=0
745: endif
746: ifidn <x>,<PUBLIC>
747: ?PU=1
748: endif
749: ifidn <x>,<SMALL>
750: ?UF=1
751: endif
752: ifidn <x>,<DATA>
753: ?ND=0
754: endif
755: ifidn <x>,<NODATA>
756: ?ND=1
757: endif
758: endm
759: if ?PC
760: if ?WIN
761: ?IA=2
762: if (?PAS AND ?ds)
763: if ?ND
764: ?ND = 2
765: endif
766: ?PAS = ?PAS AND (NOT ?ds)
767: endif
768: endif
769: ?adj=?adj+2
770: endif
771: ?PAS = ?PAS AND (NOT (?sp+?cs+?ss))
772: if ?UF
773: ?PAS = ?PAS AND (NOT (?bp+?si+?di))
774: endif
775: ife ?PLM
776: ife ?PC
777: n label near
778: else
779: n label far
780: endif
781: ?pg <_&n>,%?PU,%?PC,%?PAS,%?IA
782: else
783: ?pg <n>,%?PU,%?PC,%?PAS,%?IA
784: endif
785: endm
786: ?pg macro n,p,c,a,w
787: .xcref
788: if ?UF
789: if ?RP
790: error <parmR encountered in &n - user frame ignored>
791: ?UF=0
792: endif
793: if ?ND
794: error <NODATA encountered in &n - user frame ignored>
795: ?UF=0
796: endif
797: endif
798: cBegin ¯o g
799: .xcref
800: ?pg1 <n>,c,a,%?PO,w,%?UF,%?ND,%?RP
801: ?CPD=0
802: ?argc=0
803: ?BA=1
804: ???=(???+1) AND 0FFFEH
805: if p
806: PUBLIC n
807: endif
808: ife c
809: n proc NEAR
810: else
811: n proc FAR
812: endif
813: ifidn <g>,<nogen>
814: if ???+?PO+a+?RP
815: %out <cBegin - possible invalid use of nogen>
816: endif
817: else
818: if ?UF
819: ?MF c,%???,%?PO
820: mPush a
821: else
822: if w
823: ife ?ND
824: mov ax,ds
825: nop
826: endif
827: inc bp
828: push bp
829: mov bp,sp
830: push ds
831: ife ?ND
832: mov ds,ax
833: endif
834: else
835: if ???+?PO+?RP
836: push bp
837: mov bp,sp
838: endif
839: endif
840: if ?RP
841: ?UF=0
842: rept ?RP
843: uconcat mpush,,?RP,%?UF
844: ?UF=?UF+1
845: endm
846: endif
847: if ???
848: if ?CHKSTK1
849: mov ax,???
850: ife ?PLM
851: call _chkstk
852: else
853: call chkstk
854: endif
855: else
856: sub sp,???
857: endif
858: endif
859: mPush a
860: endif
861: endif
862: .cref
863: purge cBegin
864: &endm
865: ?UTPE ¯o
866: error <Unterminated Procedure Definition: "&n">
867: &endm
868: endm
869: ?pg1 macro n,c,a,o,w,f,d,r
870: .xcref
871: cEnd ¯o g
872: .xcref
873: ?BA=0
874: ifidn <g>,<nogen>
875: if o+a+r
876: %out <cEnd - possible invalid use of nogen>
877: endif
878: else
879: if f
880: mPop a
881: db 0C3h
882: else
883: mPop a
884: if w
885: sub bp,2
886: mov sp,bp
887: pop ds
888: pop bp
889: dec bp
890: else
891: if ???+?PO+?RP
892: mov sp,bp
893: pop bp
894: endif
895: endif
896: ife ?PLM
897: ret
898: else
899: ret o
900: endif
901: endif
902: endif
903: n endp
904: .cref
905: purge cEnd
906: &endm
907: .cref
908: endm
909: assumes macro s,ln
910: ifndef ln&_assumes
911: assume s:ln
912: else
913: ln&_assumes s
914: endif
915: endm
916: createSeg macro n,ln,a,co,cl,grp
917: ifnb <grp>
918: addSeg grp,n
919: else
920: ln&OFFSET equ OFFSET n:
921: ln&BASE equ n
922: ?cs3 <ln>,<n>
923: endif
924: ifnb <cl>
925: n segment a co '&cl'
926: else
927: n segment a co
928: endif
929: n ends
930: ?cs1 <ln>,<n>
931: endm
932: addSeg macro grp,seg
933: ifndef grp&_def
934: grp&_def=0
935: endif
936: if grp&_def ne ASMpass
937: grp&_add ¯o s
938: grp&_in <seg>,s
939: &endm
940: grp&_in ¯o sl,s
941: ifb <s>
942: grp group sl
943: else
944: grp&_add ¯o ns
945: grp&_in <sl,s>,ns
946: &endm
947: endif
948: &endm
949: grp&_def=ASMpass
950: else
951: grp&_add seg
952: endif
953: endm
954: defGrp macro grp,ln
955: addSeg grp
956: ifnb <ln>
957: ?cs3 <ln>,<grp>
958: ln&OFFSET equ OFFSET grp:
959: ln&BASE equ grp
960: endif
961: endm
962: ?cs1 macro ln,n
963: ln&_sBegin ¯o
964: ?MF &¯o c,l,p
965: if c
966: extrn n&_FARFRAME:near
967: call n&_FARFRAME
968: else
969: extrn n&_NEARFRAME:near
970: call n&_NEARFRAME
971: endif
972: db l shr 1
973: db p shr 1
974: &&endm
975: ?cs2 <ln>,<n>
976: n segment
977: &endm
978: endm
979: ?cs2 macro ln,n
980: sEnd ¯o
981: n ends
982: purge ?MF
983: &endm
984: endm
985: ?cs3 macro ln,n
986: ln&_assumes ¯o s
987: assume s:&n
988: &endm
989: endm
990: sBegin macro ln
991: ln&_sBegin
992: endm
993: ife ?DF
994: createSeg _TEXT,code,byte,public,CODE
995: ife ?NODATA1
996: createSeg _DATA,data,word,public,DATA,DGROUP
997: defGrp DGROUP,DATA
998: endif
999: if ?CHKSTK1
1000: externP <chkstk>
1001: endif
1002: endif
1003: errnz macro x
1004: if2
1005: if x
1006: errnz1 <x>,%(x)
1007: endif
1008: endif
1009: endm
1010: errnz1 macro x1,x2
1011: = *ERRNZ* x1 = x2
1012: endm
1013: errn$ macro l,x
1014: errnz <OFFSET $ - OFFSET l x>
1015: ENDM
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.