그림판
paint.bas
설명
허큘리스 그래픽(SCREEN 3, 720×348 흑백)용 그림판을 만들다 멈춘 소스입니다.
FILE, TOOLS, EDIT, OPTION 네 메뉴를 DATA로 정의하고 ←/→, ↑/↓로 옮겨 다니며 고른 항목을 반전시킵니다.
항목을 골라도 아무 기능이 없습니다.
readpic은 .pic 그림 불러오기를 SUB로 옮긴 것입니다.SBSAVE,sbload는 허큘리스 화면 BSAVE 시험처럼 화면 메모리 32KB를 통째로 저장하고 불러옵니다.- 항목 이름 끝의
|표시가 무슨 뜻인지는 소스에 없습니다.
웹 버전은 메뉴 배치와 동작을 그대로 두고 기능을 메뉴 이름에 맞춰 새로 만들었습니다.
소스
DECLARE SUB jp ()DECLARE SUB sbload (f$)DECLARE SUB readpic (f$)ON ERROR GOTO erDIM mn$(4, 8), mg(4), mx(4), my(8), ym(4)mg(1) = 6mg(2) = 7mg(3) = 8mg(4) = 4FOR i = 1 TO 4 FOR j = 0 TO mg(i) READ mn$(i, j) DATA FILE ,Load ,Save ,Load(Dr),Kill ,Rename ,Exit DATA TOOLS ,Glasses ,Paint ,Line ,Box ,Circle ,write ,Spray | DATA EDIT ,Erase |,Inverse| DATA , DATA Copy ,Move ,P-Save ,P-Load DATA OPTION ,White ,Part ,Pattern ,Step NEXT j, imn$(3, 3) = "Change" + CHR$(24) + "|"mn$(3, 4) = "Change" + CHR$(26) + "|"mx = 2my = 1FOR i = 1 TO 4ym(i) = 1NEXT iDIM m1%(497), m2%(567), m3%(637), m4%(357)m1%(0) = 75: m1%(1) = 99m2%(0) = 75: m2%(1) = 113m3%(0) = 75: m3%(1) = 127m4%(0) = 75: m4%(1) = 71SCREEN 3CLSDIM mn%(77)a$ = CHR$(0) + CHR$(75)main:DO GET (9 + (mx - 1) * 72, my * 14)-(9 + mx * 72, my * 14 + 14), mn% PUT (9 + (mx - 1) * 72, my * 14), mn%, PRESET WHILE a$ = "" a$ = INKEY$ WEND IF LEN(a$) = 2 THEN PUT (9 + (mx - 1) * 72, my * 14), mn%, PSET IF a$ = CHR$(0) + CHR$(75) OR a$ = CHR$(0) + CHR$(77) THEN ym(mx) = my IF mx = 1 THEN PUT (8 + (mx - 1) * 72, 0), m1%, PSET IF mx = 2 THEN PUT (8 + (mx - 1) * 72, 0), m2%, PSET IF mx = 3 THEN PUT (8 + (mx - 1) * 72, 0), m3%, PSET IF mx = 4 THEN PUT (8 + (mx - 1) * 72, 0), m4%, PSET IF a$ = CHR$(0) + CHR$(77) THEN mx = mx + 1 IF mx = 5 THEN mx = 1 END IF IF a$ = CHR$(0) + CHR$(75) THEN mx = mx - 1 IF mx = 0 THEN mx = 4 END IF my = ym(mx) FOR i = 0 TO mg(mx) LOCATE i + 1, 8 * mx - 6 PRINT mn$(mx, i) NEXT i LINE (8 + (mx - 1) * 72, 14)-(10 + mx * 72, 14 * (mg(mx) + 1)), , B END IF IF a$ = CHR$(0) + CHR$(80) THEN my = my + 1 IF my > mg(mx) THEN my = 1 END IF IF a$ = CHR$(0) + CHR$(72) THEN my = my - 1 IF my = 0 THEN my = mg(mx) END IF a$ = ""LOOPENDer:IF ERR = 5 OR ERR = 53 THEN CLOSE #1IF ERR = 5 THEN DEF SEGGOTO mainSUB jpFOR e = 1 TO 24LOCATE 25, 1PRINTNEXT eEND SUBSUB msg (ty, tx, c, me$)IF c = 0 THEN COLOR 0, 7LOCATE ty, txPRINT me$END SUBSUB readpic (f$)DIM buffer(511)DEF SEG = &HB000OPEN f$ FOR BINARY AS #1Count = 10SCREEN 3: CLSChangePlane:FOR getdata = 0 TO 511buffer(getdata) = ASC(INPUT$(1, #1))NEXT getdataIF Count = 10 THENIF (buffer(0) <> &H41) OR (buffer(1) <> &H48) THEN GOTO quitIF buffer(7) <> 7 THEN GOTO quitEND IFLoopStart:flag = buffer(Count)Count = Count + 1SELECT CASE flagCASE &H80Count = 0GOTO ChangePlaneCASE 0GOTO quitCASE ELSESELECT CASE (flag AND &H80)CASE 0FOR loop1 = 1 TO (flag AND &H7F)POKE MemCount, buffer(Count)Count = Count + 1MemCount = MemCount + 1NEXT loop1CASE &H80Dummy = buffer(Count)IF Dummy <> 0 THENFOR loop1 = 1 TO (flag AND &H7F)POKE MemCount, DummyMemCount = MemCount + 1NEXT loop1ELSEMemCount = MemCount + (flag AND &H7F)END IFCount = Count + 1END SELECTEND SELECTGOTO LoopStartquit:CLOSE : DEF SEGEND SUBSUB sbload (f$)DEF SEG = &HB000BLOAD f$, 0DEF SEGEND SUBSUB SBSAVE (f$)DEF SEG = &HB000BSAVE f$, 0, &H8000DEF SEGEND SUB