home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
A.N.A.L.O.G. Magazine 1988 December
/
88_dec.atr
/
check.act
< prev
next >
Wrap
Text File
|
2023-02-26
|
5KB
|
1 lines
¢; CHECK.ACT¢; Steven Yates¢; 12/02/85¢¢; CHECKSUM DATA¢;[9E 43 B1 2D 74 DD 67 7C ¢; 13 30 E5 8F 7A CA C9 77 ¢; AD AE 96 44 B0 F8 99 39 ¢; EB ]¢¢BYTE StartChar,CurChar,Count,X,¢ Flag=[0],Character,Sum,ISum,¢ Product,Key,Case=[0],Column=1152,¢ Sensitive=[1],Lines,SumLine,¢ WrongLine,Segment=[0],String=[1],¢ SubString=[2],Space=[32]¢CARD StartLine,Line=1160,¢ FirstLine=1156¢BYTE ARRAY Sums(256)¢CARD ARRAY SumLines(32)¢BYTE POINTER Length¢CARD POINTER CurLine,NextLine,¢ WrongSum¢¢DEFINE is="=", not="<>", Done="Flag=1"¢¢PROC End_Of_Line()¢¢ DO¢ CurLine=NextLine^¢ CurChar=7¢ Length=CurLine+6¢ NextLine=CurLine+4¢ IF CurLine=0 THEN¢ EXIT¢ FI¢ UNTIL Length^>0¢ OD¢¢RETURN¢¢PROC Quotes()¢¢ IF Segment is String THEN¢ Segment=0¢ ELSE¢ Segment=String¢ FI¢¢RETURN¢¢PROC Ignore()¢¢ X==-1¢ Count==-1¢ Character=0¢¢RETURN¢¢PROC Check_Line()¢¢ Character=Peek(CurLine+CurChar)¢ IF Segment is SubString THEN¢ Segment=0¢ ELSEIF Character='" THEN¢ Quotes()¢ ELSEIF Segment is String THEN¢ ELSEIF Character='' THEN¢ Segment is SubString¢ ELSEIF Character is Space THEN¢ Ignore()¢ ELSEIF Character='; THEN¢ Ignore()¢ CurChar=Length^+6¢ ELSEIF Case not Sensitive AND¢ Character>96 AND¢ Character<123 THEN¢ Character==-32¢ FI¢ Product=(X*Character) RSH Case¢ Sum==+Product¢ CurChar==+1¢ X==+1¢ IF X=4 THEN¢ X=1¢ FI¢¢RETURN¢¢PROC Find_Sums()¢¢ DO¢ DO¢ Character=Peek(CurLine+CurChar)¢ IF Character not '; THEN¢ End_Of_Line()¢ ELSEIF Length^>1 THEN¢ EXIT¢ ELSE¢ End_Of_Line()¢ FI¢ IF CurLine=0 THEN¢ Done¢ EXIT¢ FI¢ OD¢ CurChar=8¢ Character=Peek(CurLine+CurChar)¢ IF Character is '[ THEN¢ EXIT¢ FI¢ IF Done THEN¢ PrintE("Listing does not")¢ PrintE("contain checksums.")¢ PutE()¢ PrintE("Cannot CHECK!")¢ EXIT¢ FI¢ End_Of_Line()¢ OD¢¢RETURN¢¢PROC Get_Sums()¢¢ BYTE I¢ BYTE ARRAY Hex(1)¢¢ Find_Sums()¢ SumLine=0¢ DO¢ IF Done THEN¢ EXIT¢ FI¢ SumLines(SumLine)=CurLine¢ CurChar=9¢ FOR ISum=0 TO 7 DO¢ FOR I=0 TO 1 DO¢ Hex(I)=Peek(CurLine+CurChar+I)¢ IF Hex(I)>='A THEN¢ Hex(I)==-('A-'9-1)¢ FI¢ Hex(I)==-'0¢ OD¢ Sum=(Hex(0) LSH 4)+Hex(1)¢ Sums(SumLine*8+ISum)=Sum¢ IF Peek(CurLine+CurChar+3) is ']¢ THEN¢ Done¢ EXIT¢ FI¢ CurChar==+3¢ OD¢ End_Of_Line()¢ IF Done THEN¢ Flag=0¢ EXIT¢ FI¢ SumLine==+1¢ OD¢¢RETURN¢¢PROC Mistyped()¢¢ Line=StartLine¢ Column=StartChar¢ PrintE("Return to editor and check")¢ Print("the ")¢ PrintB(Lines)¢ PrintE(" lines following the line")¢ Print("the cursor is on for a ")¢ PrintE("typo.")¢¢RETURN¢¢PROC Bad_Sum()¢¢ BYTE I¢¢ IF Case is Sensitive THEN¢ Print("If article does not ")¢ PrintE("specify")¢ Print("case sensitive, use ")¢ PrintE("option")¢ Print("command to set this to ")¢ PrintE("no.")¢ PutE()¢ PutE()¢ FI¢ WrongLine=ISum/8¢ Sum=ISum&7¢ WrongSum=SumLines(WrongLine)+9+Sum*3¢ WrongSum^==%$8080¢ FOR I=0 TO SumLine DO¢ PrintE(SumLines(I)+6)¢ OD¢ WrongSum^==!$8080¢ PutE()¢ Print("Is highlighted sum correct?")¢ Key=GetD(1)¢ Key==%32¢ PutE()¢ PutE()¢ IF Key='y THEN¢ Mistyped()¢ ELSE¢ Print("Return to editor and ")¢ PrintE("correct")¢ PrintE("mistyped sum.")¢ Line=SumLines(WrongLine)¢ Column=(Sum+1)*3¢ FI¢¢RETURN¢¢PROC No_Problems()¢¢ PrintE("Program CHECKs out fine.")¢ PrintE("Save program and use")¢ PrintE("according to directions")¢ PrintE("in the article.")¢ Done¢¢RETURN¢¢PROC Check_Sum()¢¢ IF Sum<>Sums(ISum) THEN¢ Bad_Sum()¢ Done¢ FI¢ ISum==+1¢¢RETURN¢¢PROC Initialize()¢¢ IF Peek(1226)=255 THEN¢ Case is Sensitive¢ FI¢ X=1¢ CurLine=FirstLine¢ Length=CurLine+6¢ NextLine=CurLine+4¢ IF Length^=0 THEN¢ End_Of_Line()¢ FI¢ CurChar=7¢ Close(1)¢ Open(1,"K:",4,0)¢¢RETURN¢¢PROC D_Check()¢¢ Initialize()¢ Get_Sums()¢ ISum=0¢ DO¢ IF Done THEN¢ EXIT¢ FI¢ Sum=0¢ Lines=0¢ FOR Count=0 TO 127 DO¢ IF Count=0 THEN¢ StartLine=CurLine¢ StartChar=CurChar-6¢ FI¢ Check_Line()¢ IF CurChar=Length^+7 THEN¢ End_Of_Line()¢ IF CurLine=0 THEN¢ Check_Sum()¢ IF Done THEN¢ EXIT¢ FI¢ No_Problems()¢ EXIT¢ FI¢ Lines==+1¢ FI¢ OD¢ IF Done THEN¢ EXIT¢ FI¢ Check_Sum()¢ OD¢ Close(1)¢¢RETURN¢¢